From da3f16ba56f5bc82efc8afbaf3649493cf105dd3 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 9 Jul 2025 11:30:41 +0200 Subject: [PATCH 001/175] Use less memory, check on symbmm --- base/serial/impl/psb_c_csr_impl.F90 | 16 ++++++++-------- base/serial/impl/psb_d_csr_impl.F90 | 16 ++++++++-------- base/serial/impl/psb_s_csr_impl.F90 | 16 ++++++++-------- base/serial/impl/psb_z_csr_impl.F90 | 16 ++++++++-------- base/serial/psb_csymbmm.f90 | 1 + base/serial/psb_dsymbmm.f90 | 1 + base/serial/psb_ssymbmm.f90 | 1 + base/serial/psb_zsymbmm.f90 | 1 + 8 files changed, 36 insertions(+), 32 deletions(-) diff --git a/base/serial/impl/psb_c_csr_impl.F90 b/base/serial/impl/psb_c_csr_impl.F90 index 733240736..904bc6e78 100644 --- a/base/serial/impl/psb_c_csr_impl.F90 +++ b/base/serial/impl/psb_c_csr_impl.F90 @@ -4238,7 +4238,7 @@ subroutine psb_ccsrspspmm(a,b,c,info) ! Estimate number of nonzeros on output. nza = a%get_nzeros() nzb = b%get_nzeros() - nzc = max(nint(0.5*(nza+nzb)),ma,mb,na,nb) + nzc = max(nint(0.25*(nza+nzb)),ma,nb) call c%allocate(ma,nb,nzc) call csr_spspmm(a,b,c,info) @@ -4276,9 +4276,9 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) - call psb_realloc(isz,row,info) - if (info == 0) call psb_realloc(isz,idxs,info) - if (info == 0) call psb_realloc(isz,irow,info) + call psb_realloc(nb,row,info) + if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero irow = 0 @@ -6613,7 +6613,7 @@ subroutine psb_lccsrspspmm(a,b,c,info) nza = a%get_nzeros() nzb = b%get_nzeros() - nzc = 2*(nza+nzb) + nzc = max(nint(0.25*(nza+nzb)),ma,nb) call c%allocate(ma,nb,nzc) call csr_spspmm(a,b,c,info) @@ -6651,9 +6651,9 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) - call psb_realloc(isz,row,info) - if (info == 0) call psb_realloc(isz,idxs,info) - if (info == 0) call psb_realloc(isz,irow,info) + call psb_realloc(nb,row,info) + if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero irow = 0 diff --git a/base/serial/impl/psb_d_csr_impl.F90 b/base/serial/impl/psb_d_csr_impl.F90 index 7d8f477b7..952bb1e9c 100644 --- a/base/serial/impl/psb_d_csr_impl.F90 +++ b/base/serial/impl/psb_d_csr_impl.F90 @@ -4238,7 +4238,7 @@ subroutine psb_dcsrspspmm(a,b,c,info) ! Estimate number of nonzeros on output. nza = a%get_nzeros() nzb = b%get_nzeros() - nzc = max(nint(0.5*(nza+nzb)),ma,mb,na,nb) + nzc = max(nint(0.25*(nza+nzb)),ma,nb) call c%allocate(ma,nb,nzc) call csr_spspmm(a,b,c,info) @@ -4276,9 +4276,9 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) - call psb_realloc(isz,row,info) - if (info == 0) call psb_realloc(isz,idxs,info) - if (info == 0) call psb_realloc(isz,irow,info) + call psb_realloc(nb,row,info) + if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero irow = 0 @@ -6613,7 +6613,7 @@ subroutine psb_ldcsrspspmm(a,b,c,info) nza = a%get_nzeros() nzb = b%get_nzeros() - nzc = 2*(nza+nzb) + nzc = max(nint(0.25*(nza+nzb)),ma,nb) call c%allocate(ma,nb,nzc) call csr_spspmm(a,b,c,info) @@ -6651,9 +6651,9 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) - call psb_realloc(isz,row,info) - if (info == 0) call psb_realloc(isz,idxs,info) - if (info == 0) call psb_realloc(isz,irow,info) + call psb_realloc(nb,row,info) + if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero irow = 0 diff --git a/base/serial/impl/psb_s_csr_impl.F90 b/base/serial/impl/psb_s_csr_impl.F90 index a0cce83d2..f384ef330 100644 --- a/base/serial/impl/psb_s_csr_impl.F90 +++ b/base/serial/impl/psb_s_csr_impl.F90 @@ -4238,7 +4238,7 @@ subroutine psb_scsrspspmm(a,b,c,info) ! Estimate number of nonzeros on output. nza = a%get_nzeros() nzb = b%get_nzeros() - nzc = max(nint(0.5*(nza+nzb)),ma,mb,na,nb) + nzc = max(nint(0.25*(nza+nzb)),ma,nb) call c%allocate(ma,nb,nzc) call csr_spspmm(a,b,c,info) @@ -4276,9 +4276,9 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) - call psb_realloc(isz,row,info) - if (info == 0) call psb_realloc(isz,idxs,info) - if (info == 0) call psb_realloc(isz,irow,info) + call psb_realloc(nb,row,info) + if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero irow = 0 @@ -6613,7 +6613,7 @@ subroutine psb_lscsrspspmm(a,b,c,info) nza = a%get_nzeros() nzb = b%get_nzeros() - nzc = 2*(nza+nzb) + nzc = max(nint(0.25*(nza+nzb)),ma,nb) call c%allocate(ma,nb,nzc) call csr_spspmm(a,b,c,info) @@ -6651,9 +6651,9 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) - call psb_realloc(isz,row,info) - if (info == 0) call psb_realloc(isz,idxs,info) - if (info == 0) call psb_realloc(isz,irow,info) + call psb_realloc(nb,row,info) + if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero irow = 0 diff --git a/base/serial/impl/psb_z_csr_impl.F90 b/base/serial/impl/psb_z_csr_impl.F90 index 784b78f69..dd4be13a1 100644 --- a/base/serial/impl/psb_z_csr_impl.F90 +++ b/base/serial/impl/psb_z_csr_impl.F90 @@ -4238,7 +4238,7 @@ subroutine psb_zcsrspspmm(a,b,c,info) ! Estimate number of nonzeros on output. nza = a%get_nzeros() nzb = b%get_nzeros() - nzc = max(nint(0.5*(nza+nzb)),ma,mb,na,nb) + nzc = max(nint(0.25*(nza+nzb)),ma,nb) call c%allocate(ma,nb,nzc) call csr_spspmm(a,b,c,info) @@ -4276,9 +4276,9 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) - call psb_realloc(isz,row,info) - if (info == 0) call psb_realloc(isz,idxs,info) - if (info == 0) call psb_realloc(isz,irow,info) + call psb_realloc(nb,row,info) + if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero irow = 0 @@ -6613,7 +6613,7 @@ subroutine psb_lzcsrspspmm(a,b,c,info) nza = a%get_nzeros() nzb = b%get_nzeros() - nzc = 2*(nza+nzb) + nzc = max(nint(0.25*(nza+nzb)),ma,nb) call c%allocate(ma,nb,nzc) call csr_spspmm(a,b,c,info) @@ -6651,9 +6651,9 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) - call psb_realloc(isz,row,info) - if (info == 0) call psb_realloc(isz,idxs,info) - if (info == 0) call psb_realloc(isz,irow,info) + call psb_realloc(nb,row,info) + if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero irow = 0 diff --git a/base/serial/psb_csymbmm.f90 b/base/serial/psb_csymbmm.f90 index 7dd657893..0f8c18ab8 100644 --- a/base/serial/psb_csymbmm.f90 +++ b/base/serial/psb_csymbmm.f90 @@ -85,6 +85,7 @@ end subroutine psb_csymbmm subroutine psb_cbase_symbmm(a,b,c,info) use psb_mat_mod use psb_sort_mod + use psb_serial_mod, only : symbmm implicit none class(psb_c_base_sparse_mat), intent(in) :: a,b diff --git a/base/serial/psb_dsymbmm.f90 b/base/serial/psb_dsymbmm.f90 index a1b594673..d647d2707 100644 --- a/base/serial/psb_dsymbmm.f90 +++ b/base/serial/psb_dsymbmm.f90 @@ -85,6 +85,7 @@ end subroutine psb_dsymbmm subroutine psb_dbase_symbmm(a,b,c,info) use psb_mat_mod use psb_sort_mod + use psb_serial_mod, only : symbmm implicit none class(psb_d_base_sparse_mat), intent(in) :: a,b diff --git a/base/serial/psb_ssymbmm.f90 b/base/serial/psb_ssymbmm.f90 index 3b5a41af1..d76b48ea3 100644 --- a/base/serial/psb_ssymbmm.f90 +++ b/base/serial/psb_ssymbmm.f90 @@ -85,6 +85,7 @@ end subroutine psb_ssymbmm subroutine psb_sbase_symbmm(a,b,c,info) use psb_mat_mod use psb_sort_mod + use psb_serial_mod, only : symbmm implicit none class(psb_s_base_sparse_mat), intent(in) :: a,b diff --git a/base/serial/psb_zsymbmm.f90 b/base/serial/psb_zsymbmm.f90 index 5cbffb117..9c31b0e73 100644 --- a/base/serial/psb_zsymbmm.f90 +++ b/base/serial/psb_zsymbmm.f90 @@ -85,6 +85,7 @@ end subroutine psb_zsymbmm subroutine psb_zbase_symbmm(a,b,c,info) use psb_mat_mod use psb_sort_mod + use psb_serial_mod, only : symbmm implicit none class(psb_z_base_sparse_mat), intent(in) :: a,b From b51dc381409819abf5cc0bfad282bb1509cea3d1 Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Fri, 18 Jul 2025 17:44:57 +0200 Subject: [PATCH 002/175] Added C interface to initialize communicator from existing MPI communicator --- cbind/base/psb_c_base.h | 1 + cbind/base/psb_cpenv_mod.f90 | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 601ba8c13..027caa3ab 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -40,6 +40,7 @@ extern "C" { /* Environment routines */ void psb_c_init(psb_c_ctxt *cctxt); + void psb_c_init_from_fint(psb_c_ctxt *cctxt, psb_i_t f_comm); void psb_c_exit(psb_c_ctxt cctxt); void psb_c_exit_ctxt(psb_c_ctxt cctxt); void psb_c_abort(psb_c_ctxt cctxt); diff --git a/cbind/base/psb_cpenv_mod.f90 b/cbind/base/psb_cpenv_mod.f90 index e1003e998..6bc67bfb9 100644 --- a/cbind/base/psb_cpenv_mod.f90 +++ b/cbind/base/psb_cpenv_mod.f90 @@ -50,6 +50,28 @@ contains end subroutine psb_c_init + ! Get MPI_Fint from C, psb_c_object_type and start a psb_ctxt_type + ! context from it. + subroutine psb_c_init_from_fint(cctxt,fint) bind(c) + use psb_base_mod, only : psb_init, psb_ctxt_type + implicit none + + type(psb_c_object_type) :: cctxt + integer(psb_c_mpk_), value :: fint + type(psb_ctxt_type), pointer :: ctxt + integer :: info + + ! Local variables + integer(psb_mpk_) :: fmctxt + + allocate(ctxt,stat=info) + if (info /= 0) return + fmctxt = fint + call psb_init(ctxt,extcomm=fmctxt) + cctxt%item = c_loc(ctxt) + + end subroutine psb_c_init_from_fint + function psb_c2f_ctxt(cctxt) result(res) implicit none type(psb_c_object_type), value :: cctxt From a2160b7ba0f2ee1d8f8ac48d9e8e4de71d6183c0 Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Mon, 21 Jul 2025 15:58:22 +0200 Subject: [PATCH 003/175] Fixed import of complex.h for compatibility with C++ --- cbind/base/psb_c_base.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 027caa3ab..708a0e0fb 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -6,7 +6,11 @@ extern "C" { #endif #include +#ifdef __cplusplus +#include +#else #include +#endif #include #include #include From ab7da2100b2074a47f43194c335855be9cb8cdba Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 2 Sep 2025 15:46:33 +0200 Subject: [PATCH 004/175] Change default CC for CUDA --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 4f83aa19f..0658f499c 100755 --- a/configure +++ b/configure @@ -11139,7 +11139,7 @@ fi if test "x$pac_cv_cudacc" == "x"; then - pac_cv_cudacc="50,60,70,75,80,86"; + pac_cv_cudacc="75,80,86"; CUDA_CC="$pac_cv_cudacc"; fi if (( $pac_cv_cuda_version >= 11070 )) diff --git a/configure.ac b/configure.ac index 2850d275b..2f472dea7 100644 --- a/configure.ac +++ b/configure.ac @@ -885,7 +885,7 @@ else PAC_ARG_WITH_CUDACC() if test "x$pac_cv_cudacc" == "x"; then - pac_cv_cudacc="50,60,70,75,80,86"; + pac_cv_cudacc="75,80,86"; CUDA_CC="$pac_cv_cudacc"; fi if (( $pac_cv_cuda_version >= 11070 )) From 727dc13a98448053b50f6c243dcb8e425bb6a1a5 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 18 Sep 2025 17:02:11 +0200 Subject: [PATCH 005/175] First attempt at a fix for INTEL --- base/modules/serial/psb_c_serial_mod.f90 | 6 +++- base/modules/serial/psb_d_serial_mod.f90 | 6 +++- base/modules/serial/psb_s_serial_mod.f90 | 6 +++- base/modules/serial/psb_z_serial_mod.f90 | 6 +++- base/serial/psb_cspspmm.f90 | 42 ++++++++++++++++++++++-- base/serial/psb_dspspmm.f90 | 42 ++++++++++++++++++++++-- base/serial/psb_sspspmm.f90 | 42 ++++++++++++++++++++++-- base/serial/psb_zspspmm.f90 | 42 ++++++++++++++++++++++-- 8 files changed, 176 insertions(+), 16 deletions(-) diff --git a/base/modules/serial/psb_c_serial_mod.f90 b/base/modules/serial/psb_c_serial_mod.f90 index 9c43f3e76..9da008c64 100644 --- a/base/modules/serial/psb_c_serial_mod.f90 +++ b/base/modules/serial/psb_c_serial_mod.f90 @@ -60,6 +60,8 @@ module psb_c_serial_mod type(psb_cspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_cspspmm + end interface psb_spspmm + interface subroutine psb_ccsrspspmm(a,b,c,info) use psb_c_mat_mod, only : psb_c_csr_sparse_mat import :: psb_ipk_ @@ -232,6 +234,8 @@ module psb_c_serial_mod type(psb_lcspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_lcspspmm + end interface psb_spspmm + interface subroutine psb_lccsrspspmm(a,b,c,info) use psb_c_mat_mod, only : psb_lc_csr_sparse_mat import :: psb_ipk_ @@ -248,7 +252,7 @@ module psb_c_serial_mod type(psb_lc_csc_sparse_mat), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_lccscspspmm - end interface psb_spspmm + end interface interface psb_symbmm subroutine psb_lcsymbmm(a,b,c,info) diff --git a/base/modules/serial/psb_d_serial_mod.f90 b/base/modules/serial/psb_d_serial_mod.f90 index 523282f5c..09344b707 100644 --- a/base/modules/serial/psb_d_serial_mod.f90 +++ b/base/modules/serial/psb_d_serial_mod.f90 @@ -60,6 +60,8 @@ module psb_d_serial_mod type(psb_dspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_dspspmm + end interface psb_spspmm + interface subroutine psb_dcsrspspmm(a,b,c,info) use psb_d_mat_mod, only : psb_d_csr_sparse_mat import :: psb_ipk_ @@ -232,6 +234,8 @@ module psb_d_serial_mod type(psb_ldspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_ldspspmm + end interface psb_spspmm + interface subroutine psb_ldcsrspspmm(a,b,c,info) use psb_d_mat_mod, only : psb_ld_csr_sparse_mat import :: psb_ipk_ @@ -248,7 +252,7 @@ module psb_d_serial_mod type(psb_ld_csc_sparse_mat), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_ldcscspspmm - end interface psb_spspmm + end interface interface psb_symbmm subroutine psb_ldsymbmm(a,b,c,info) diff --git a/base/modules/serial/psb_s_serial_mod.f90 b/base/modules/serial/psb_s_serial_mod.f90 index 81583f64e..da19d9ecb 100644 --- a/base/modules/serial/psb_s_serial_mod.f90 +++ b/base/modules/serial/psb_s_serial_mod.f90 @@ -60,6 +60,8 @@ module psb_s_serial_mod type(psb_sspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_sspspmm + end interface psb_spspmm + interface subroutine psb_scsrspspmm(a,b,c,info) use psb_s_mat_mod, only : psb_s_csr_sparse_mat import :: psb_ipk_ @@ -232,6 +234,8 @@ module psb_s_serial_mod type(psb_lsspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_lsspspmm + end interface psb_spspmm + interface subroutine psb_lscsrspspmm(a,b,c,info) use psb_s_mat_mod, only : psb_ls_csr_sparse_mat import :: psb_ipk_ @@ -248,7 +252,7 @@ module psb_s_serial_mod type(psb_ls_csc_sparse_mat), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_lscscspspmm - end interface psb_spspmm + end interface interface psb_symbmm subroutine psb_lssymbmm(a,b,c,info) diff --git a/base/modules/serial/psb_z_serial_mod.f90 b/base/modules/serial/psb_z_serial_mod.f90 index dbfce00bd..70a3b42c7 100644 --- a/base/modules/serial/psb_z_serial_mod.f90 +++ b/base/modules/serial/psb_z_serial_mod.f90 @@ -60,6 +60,8 @@ module psb_z_serial_mod type(psb_zspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_zspspmm + end interface psb_spspmm + interface subroutine psb_zcsrspspmm(a,b,c,info) use psb_z_mat_mod, only : psb_z_csr_sparse_mat import :: psb_ipk_ @@ -232,6 +234,8 @@ module psb_z_serial_mod type(psb_lzspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_lzspspmm + end interface psb_spspmm + interface subroutine psb_lzcsrspspmm(a,b,c,info) use psb_z_mat_mod, only : psb_lz_csr_sparse_mat import :: psb_ipk_ @@ -248,7 +252,7 @@ module psb_z_serial_mod type(psb_lz_csc_sparse_mat), intent(out) :: c integer(psb_ipk_), intent(out) :: info end subroutine psb_lzcscspspmm - end interface psb_spspmm + end interface interface psb_symbmm subroutine psb_lzsymbmm(a,b,c,info) diff --git a/base/serial/psb_cspspmm.f90 b/base/serial/psb_cspspmm.f90 index 83f220129..cdd45c3a2 100644 --- a/base/serial/psb_cspspmm.f90 +++ b/base/serial/psb_cspspmm.f90 @@ -37,7 +37,7 @@ ! subroutine psb_cspspmm(a,b,c,info) use psb_mat_mod - use psb_c_serial_mod, psb_protect_name => psb_cspspmm + !use psb_c_serial_mod, psb_protect_name => psb_cspspmm implicit none type(psb_cspmat_type), intent(in) :: a,b @@ -48,6 +48,24 @@ subroutine psb_cspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + interface + subroutine psb_ccsrspspmm(a,b,c,info) + use psb_c_mat_mod, only : psb_c_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_c_csr_sparse_mat), intent(in) :: a,b + type(psb_c_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ccsrspspmm + subroutine psb_ccscspspmm(a,b,c,info) + use psb_c_mat_mod, only : psb_c_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_c_csc_sparse_mat), intent(in) :: a,b + type(psb_c_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ccscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ @@ -118,7 +136,7 @@ end subroutine psb_cspspmm subroutine psb_lcspspmm(a,b,c,info) use psb_mat_mod - use psb_c_serial_mod, psb_protect_name => psb_lcspspmm +! use psb_c_serial_mod, psb_protect_name => psb_lcspspmm implicit none type(psb_lcspmat_type), intent(in) :: a,b @@ -129,7 +147,25 @@ subroutine psb_lcspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - call psb_erractionsave(err_act) + interface + subroutine psb_lccsrspspmm(a,b,c,info) + use psb_c_mat_mod, only : psb_lc_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lc_csr_sparse_mat), intent(in) :: a,b + type(psb_lc_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lccsrspspmm + subroutine psb_lccscspspmm(a,b,c,info) + use psb_c_mat_mod, only : psb_lc_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lc_csc_sparse_mat), intent(in) :: a,b + type(psb_lc_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lccscspspmm + end interface + call psb_erractionsave(err_act) info = psb_success_ if ((a%is_null()) .or.(b%is_null())) then diff --git a/base/serial/psb_dspspmm.f90 b/base/serial/psb_dspspmm.f90 index e3e203d64..82c3b3f5e 100644 --- a/base/serial/psb_dspspmm.f90 +++ b/base/serial/psb_dspspmm.f90 @@ -37,7 +37,7 @@ ! subroutine psb_dspspmm(a,b,c,info) use psb_mat_mod - use psb_d_serial_mod, psb_protect_name => psb_dspspmm + !use psb_d_serial_mod, psb_protect_name => psb_dspspmm implicit none type(psb_dspmat_type), intent(in) :: a,b @@ -48,6 +48,24 @@ subroutine psb_dspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + interface + subroutine psb_dcsrspspmm(a,b,c,info) + use psb_d_mat_mod, only : psb_d_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_d_csr_sparse_mat), intent(in) :: a,b + type(psb_d_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_dcsrspspmm + subroutine psb_dcscspspmm(a,b,c,info) + use psb_d_mat_mod, only : psb_d_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_d_csc_sparse_mat), intent(in) :: a,b + type(psb_d_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_dcscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ @@ -118,7 +136,7 @@ end subroutine psb_dspspmm subroutine psb_ldspspmm(a,b,c,info) use psb_mat_mod - use psb_d_serial_mod, psb_protect_name => psb_ldspspmm +! use psb_d_serial_mod, psb_protect_name => psb_ldspspmm implicit none type(psb_ldspmat_type), intent(in) :: a,b @@ -129,7 +147,25 @@ subroutine psb_ldspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - call psb_erractionsave(err_act) + interface + subroutine psb_ldcsrspspmm(a,b,c,info) + use psb_d_mat_mod, only : psb_ld_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ld_csr_sparse_mat), intent(in) :: a,b + type(psb_ld_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ldcsrspspmm + subroutine psb_ldcscspspmm(a,b,c,info) + use psb_d_mat_mod, only : psb_ld_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ld_csc_sparse_mat), intent(in) :: a,b + type(psb_ld_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ldcscspspmm + end interface + call psb_erractionsave(err_act) info = psb_success_ if ((a%is_null()) .or.(b%is_null())) then diff --git a/base/serial/psb_sspspmm.f90 b/base/serial/psb_sspspmm.f90 index e1ae9af35..792fb265d 100644 --- a/base/serial/psb_sspspmm.f90 +++ b/base/serial/psb_sspspmm.f90 @@ -37,7 +37,7 @@ ! subroutine psb_sspspmm(a,b,c,info) use psb_mat_mod - use psb_s_serial_mod, psb_protect_name => psb_sspspmm + !use psb_s_serial_mod, psb_protect_name => psb_sspspmm implicit none type(psb_sspmat_type), intent(in) :: a,b @@ -48,6 +48,24 @@ subroutine psb_sspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + interface + subroutine psb_scsrspspmm(a,b,c,info) + use psb_s_mat_mod, only : psb_s_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_s_csr_sparse_mat), intent(in) :: a,b + type(psb_s_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_scsrspspmm + subroutine psb_scscspspmm(a,b,c,info) + use psb_s_mat_mod, only : psb_s_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_s_csc_sparse_mat), intent(in) :: a,b + type(psb_s_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_scscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ @@ -118,7 +136,7 @@ end subroutine psb_sspspmm subroutine psb_lsspspmm(a,b,c,info) use psb_mat_mod - use psb_s_serial_mod, psb_protect_name => psb_lsspspmm +! use psb_s_serial_mod, psb_protect_name => psb_lsspspmm implicit none type(psb_lsspmat_type), intent(in) :: a,b @@ -129,7 +147,25 @@ subroutine psb_lsspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - call psb_erractionsave(err_act) + interface + subroutine psb_lscsrspspmm(a,b,c,info) + use psb_s_mat_mod, only : psb_ls_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ls_csr_sparse_mat), intent(in) :: a,b + type(psb_ls_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lscsrspspmm + subroutine psb_lscscspspmm(a,b,c,info) + use psb_s_mat_mod, only : psb_ls_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ls_csc_sparse_mat), intent(in) :: a,b + type(psb_ls_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lscscspspmm + end interface + call psb_erractionsave(err_act) info = psb_success_ if ((a%is_null()) .or.(b%is_null())) then diff --git a/base/serial/psb_zspspmm.f90 b/base/serial/psb_zspspmm.f90 index e7b3df44e..932ae20ab 100644 --- a/base/serial/psb_zspspmm.f90 +++ b/base/serial/psb_zspspmm.f90 @@ -37,7 +37,7 @@ ! subroutine psb_zspspmm(a,b,c,info) use psb_mat_mod - use psb_z_serial_mod, psb_protect_name => psb_zspspmm + !use psb_z_serial_mod, psb_protect_name => psb_zspspmm implicit none type(psb_zspmat_type), intent(in) :: a,b @@ -48,6 +48,24 @@ subroutine psb_zspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + interface + subroutine psb_zcsrspspmm(a,b,c,info) + use psb_z_mat_mod, only : psb_z_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_z_csr_sparse_mat), intent(in) :: a,b + type(psb_z_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_zcsrspspmm + subroutine psb_zcscspspmm(a,b,c,info) + use psb_z_mat_mod, only : psb_z_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_z_csc_sparse_mat), intent(in) :: a,b + type(psb_z_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_zcscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ @@ -118,7 +136,7 @@ end subroutine psb_zspspmm subroutine psb_lzspspmm(a,b,c,info) use psb_mat_mod - use psb_z_serial_mod, psb_protect_name => psb_lzspspmm +! use psb_z_serial_mod, psb_protect_name => psb_lzspspmm implicit none type(psb_lzspmat_type), intent(in) :: a,b @@ -129,7 +147,25 @@ subroutine psb_lzspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - call psb_erractionsave(err_act) + interface + subroutine psb_lzcsrspspmm(a,b,c,info) + use psb_z_mat_mod, only : psb_lz_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lz_csr_sparse_mat), intent(in) :: a,b + type(psb_lz_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lzcsrspspmm + subroutine psb_lzcscspspmm(a,b,c,info) + use psb_z_mat_mod, only : psb_lz_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lz_csc_sparse_mat), intent(in) :: a,b + type(psb_lz_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lzcscspspmm + end interface + call psb_erractionsave(err_act) info = psb_success_ if ((a%is_null()) .or.(b%is_null())) then From dc25c789ef9aaa9b1e49fb5d145721fd9098f12a Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 18 Sep 2025 20:27:26 +0200 Subject: [PATCH 006/175] Fixes for Intel compilation take 2. To be completed. --- base/modules/penv/psi_penv_mod.F90 | 70 +++++++++++----------- base/modules/serial/psb_c_csc_mat_mod.f90 | 17 ++++++ base/modules/serial/psb_c_csr_mat_mod.f90 | 17 ++++++ base/modules/serial/psb_c_serial_mod.f90 | 38 +----------- base/modules/serial/psb_d_csc_mat_mod.f90 | 17 ++++++ base/modules/serial/psb_d_csr_mat_mod.f90 | 17 ++++++ base/modules/serial/psb_d_serial_mod.f90 | 38 +----------- base/modules/serial/psb_s_csc_mat_mod.f90 | 17 ++++++ base/modules/serial/psb_s_csr_mat_mod.f90 | 17 ++++++ base/modules/serial/psb_s_serial_mod.f90 | 38 +----------- base/modules/serial/psb_z_csc_mat_mod.f90 | 17 ++++++ base/modules/serial/psb_z_csr_mat_mod.f90 | 17 ++++++ base/modules/serial/psb_z_serial_mod.f90 | 38 +----------- base/serial/impl/psb_c_csc_impl.F90 | 8 +-- base/serial/impl/psb_c_csr_impl.F90 | 12 ++-- base/serial/impl/psb_d_csc_impl.F90 | 8 +-- base/serial/impl/psb_d_csr_impl.F90 | 12 ++-- base/serial/impl/psb_s_csc_impl.F90 | 8 +-- base/serial/impl/psb_s_csr_impl.F90 | 12 ++-- base/serial/impl/psb_z_csc_impl.F90 | 8 +-- base/serial/impl/psb_z_csr_impl.F90 | 12 ++-- base/serial/psb_cspspmm.f90 | 72 +++++++++++------------ base/serial/psb_dspspmm.f90 | 72 +++++++++++------------ base/serial/psb_sspspmm.f90 | 72 +++++++++++------------ base/serial/psb_zspspmm.f90 | 72 +++++++++++------------ base/tools/psb_c_par_csr_spspmm.f90 | 6 +- base/tools/psb_d_par_csr_spspmm.f90 | 6 +- base/tools/psb_s_par_csr_spspmm.f90 | 6 +- base/tools/psb_z_par_csr_spspmm.f90 | 6 +- 29 files changed, 376 insertions(+), 374 deletions(-) diff --git a/base/modules/penv/psi_penv_mod.F90 b/base/modules/penv/psi_penv_mod.F90 index 7091411de..249fd9b13 100644 --- a/base/modules/penv/psi_penv_mod.F90 +++ b/base/modules/penv/psi_penv_mod.F90 @@ -180,43 +180,45 @@ module psi_penv_mod use psb_const_mod use iso_c_binding - integer(psb_mpk_), parameter:: psb_int_tag = 543987 - integer(psb_mpk_), parameter:: psb_real_tag = psb_int_tag + 1 - integer(psb_mpk_), parameter:: psb_double_tag = psb_real_tag + 1 - integer(psb_mpk_), parameter:: psb_complex_tag = psb_double_tag + 1 - integer(psb_mpk_), parameter:: psb_dcomplex_tag = psb_complex_tag + 1 - integer(psb_mpk_), parameter:: psb_logical_tag = psb_dcomplex_tag + 1 - integer(psb_mpk_), parameter:: psb_char_tag = psb_logical_tag + 1 - integer(psb_mpk_), parameter:: psb_int8_tag = psb_char_tag + 1 - integer(psb_mpk_), parameter:: psb_int2_tag = psb_int8_tag + 1 - integer(psb_mpk_), parameter:: psb_int4_tag = psb_int2_tag + 1 - integer(psb_mpk_), parameter:: psb_long_tag = psb_int4_tag + 1 - - integer(psb_mpk_), parameter:: psb_int_swap_tag = psb_int_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_real_swap_tag = psb_real_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_double_swap_tag = psb_double_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_complex_swap_tag = psb_complex_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_dcomplex_swap_tag = psb_dcomplex_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_logical_swap_tag = psb_logical_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_char_swap_tag = psb_char_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_int8_swap_tag = psb_int8_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_int2_swap_tag = psb_int2_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_int4_swap_tag = psb_int4_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_long_swap_tag = psb_long_tag + psb_int_tag + integer(psb_mpk_), parameter :: psb_int_tag = 100 + integer(psb_mpk_), parameter :: psb_real_tag = psb_int_tag + 1 + integer(psb_mpk_), parameter :: psb_double_tag = psb_real_tag + 1 + integer(psb_mpk_), parameter :: psb_complex_tag = psb_double_tag + 1 + integer(psb_mpk_), parameter :: psb_dcomplex_tag = psb_complex_tag + 1 + integer(psb_mpk_), parameter :: psb_logical_tag = psb_dcomplex_tag + 1 + integer(psb_mpk_), parameter :: psb_char_tag = psb_logical_tag + 1 + integer(psb_mpk_), parameter :: psb_int8_tag = psb_char_tag + 1 + integer(psb_mpk_), parameter :: psb_int2_tag = psb_int8_tag + 1 + integer(psb_mpk_), parameter :: psb_int4_tag = psb_int2_tag + 1 + integer(psb_mpk_), parameter :: psb_long_tag = psb_int4_tag + 1 + + integer(psb_mpk_), parameter :: psb_max_simple_tag = psb_long_tag + 2 + + integer(psb_mpk_), parameter :: psb_int_swap_tag = psb_max_simple_tag + 1 + integer(psb_mpk_), parameter :: psb_real_swap_tag = psb_int_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_double_swap_tag = psb_real_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_complex_swap_tag = psb_double_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_dcomplex_swap_tag = psb_complex_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_logical_swap_tag = psb_dcomplex_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_char_swap_tag = psb_logical_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_int8_swap_tag = psb_char_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_int2_swap_tag = psb_int8_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_int4_swap_tag = psb_int2_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_long_swap_tag = psb_int4_swap_tag + 1 - integer(psb_mpk_), private, parameter:: psb_int_type = 987543 - integer(psb_mpk_), private, parameter:: psb_real_type = psb_int_type + 1 - integer(psb_mpk_), private, parameter:: psb_double_type = psb_real_type + 1 - integer(psb_mpk_), private, parameter:: psb_complex_type = psb_double_type + 1 - integer(psb_mpk_), private, parameter:: psb_dcomplex_type = psb_complex_type + 1 - integer(psb_mpk_), private, parameter:: psb_logical_type = psb_dcomplex_type + 1 - integer(psb_mpk_), private, parameter:: psb_char_type = psb_logical_type + 1 - integer(psb_mpk_), private, parameter:: psb_int8_type = psb_char_type + 1 - integer(psb_mpk_), private, parameter:: psb_int2_type = psb_int8_type + 1 - integer(psb_mpk_), private, parameter:: psb_int4_type = psb_int2_type + 1 - integer(psb_mpk_), private, parameter:: psb_long_type = psb_int4_type + 1 + integer(psb_mpk_), private, parameter :: psb_int_type = 200 + integer(psb_mpk_), private, parameter :: psb_real_type = psb_int_type + 1 + integer(psb_mpk_), private, parameter :: psb_double_type = psb_real_type + 1 + integer(psb_mpk_), private, parameter :: psb_complex_type = psb_double_type + 1 + integer(psb_mpk_), private, parameter :: psb_dcomplex_type = psb_complex_type + 1 + integer(psb_mpk_), private, parameter :: psb_logical_type = psb_dcomplex_type + 1 + integer(psb_mpk_), private, parameter :: psb_char_type = psb_logical_type + 1 + integer(psb_mpk_), private, parameter :: psb_int8_type = psb_char_type + 1 + integer(psb_mpk_), private, parameter :: psb_int2_type = psb_int8_type + 1 + integer(psb_mpk_), private, parameter :: psb_int4_type = psb_int2_type + 1 + integer(psb_mpk_), private, parameter :: psb_long_type = psb_int4_type + 1 type psb_buffer_node integer(psb_mpk_) :: request diff --git a/base/modules/serial/psb_c_csc_mat_mod.f90 b/base/modules/serial/psb_c_csc_mat_mod.f90 index 5ccdd19ad..d0f5a7193 100644 --- a/base/modules/serial/psb_c_csc_mat_mod.f90 +++ b/base/modules/serial/psb_c_csc_mat_mod.f90 @@ -912,6 +912,23 @@ module psb_c_csc_mat_mod end subroutine psb_lc_csc_scals end interface + interface + subroutine psb_ccscspspmm(a,b,c,info) + import + implicit none + class(psb_c_csc_sparse_mat), intent(in) :: a,b + type(psb_c_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ccscspspmm + subroutine psb_lccscspspmm(a,b,c,info) + import + implicit none + class(psb_lc_csc_sparse_mat), intent(in) :: a,b + type(psb_lc_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lccscspspmm + end interface + contains ! == =================================== diff --git a/base/modules/serial/psb_c_csr_mat_mod.f90 b/base/modules/serial/psb_c_csr_mat_mod.f90 index a39c204b1..3aa096670 100644 --- a/base/modules/serial/psb_c_csr_mat_mod.f90 +++ b/base/modules/serial/psb_c_csr_mat_mod.f90 @@ -1162,6 +1162,23 @@ module psb_c_csr_mat_mod end subroutine psb_lc_csr_aclsum end interface + ! Interfaces for SPSPMM + interface + subroutine psb_ccsrspspmm(a,b,c,info) + import + implicit none + class(psb_c_csr_sparse_mat), intent(in) :: a,b + type(psb_c_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ccsrspspmm + subroutine psb_lccsrspspmm(a,b,c,info) + import + implicit none + class(psb_lc_csr_sparse_mat), intent(in) :: a,b + type(psb_lc_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lccsrspspmm + end interface contains diff --git a/base/modules/serial/psb_c_serial_mod.f90 b/base/modules/serial/psb_c_serial_mod.f90 index 9da008c64..24fba38e9 100644 --- a/base/modules/serial/psb_c_serial_mod.f90 +++ b/base/modules/serial/psb_c_serial_mod.f90 @@ -61,25 +61,7 @@ module psb_c_serial_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_cspspmm end interface psb_spspmm - interface - subroutine psb_ccsrspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_c_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_c_csr_sparse_mat), intent(in) :: a,b - type(psb_c_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ccsrspspmm - subroutine psb_ccscspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_c_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_c_csc_sparse_mat), intent(in) :: a,b - type(psb_c_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ccscspspmm - end interface - + interface psb_symbmm subroutine psb_csymbmm(a,b,c,info) use psb_c_mat_mod, only : psb_cspmat_type @@ -235,24 +217,6 @@ module psb_c_serial_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_lcspspmm end interface psb_spspmm - interface - subroutine psb_lccsrspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_lc_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lc_csr_sparse_mat), intent(in) :: a,b - type(psb_lc_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lccsrspspmm - subroutine psb_lccscspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_lc_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lc_csc_sparse_mat), intent(in) :: a,b - type(psb_lc_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lccscspspmm - end interface interface psb_symbmm subroutine psb_lcsymbmm(a,b,c,info) diff --git a/base/modules/serial/psb_d_csc_mat_mod.f90 b/base/modules/serial/psb_d_csc_mat_mod.f90 index 08d312565..9618536f0 100644 --- a/base/modules/serial/psb_d_csc_mat_mod.f90 +++ b/base/modules/serial/psb_d_csc_mat_mod.f90 @@ -912,6 +912,23 @@ module psb_d_csc_mat_mod end subroutine psb_ld_csc_scals end interface + interface + subroutine psb_dcscspspmm(a,b,c,info) + import + implicit none + class(psb_d_csc_sparse_mat), intent(in) :: a,b + type(psb_d_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_dcscspspmm + subroutine psb_ldcscspspmm(a,b,c,info) + import + implicit none + class(psb_ld_csc_sparse_mat), intent(in) :: a,b + type(psb_ld_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ldcscspspmm + end interface + contains ! == =================================== diff --git a/base/modules/serial/psb_d_csr_mat_mod.f90 b/base/modules/serial/psb_d_csr_mat_mod.f90 index 0669725f1..bee32af03 100644 --- a/base/modules/serial/psb_d_csr_mat_mod.f90 +++ b/base/modules/serial/psb_d_csr_mat_mod.f90 @@ -1162,6 +1162,23 @@ module psb_d_csr_mat_mod end subroutine psb_ld_csr_aclsum end interface + ! Interfaces for SPSPMM + interface + subroutine psb_dcsrspspmm(a,b,c,info) + import + implicit none + class(psb_d_csr_sparse_mat), intent(in) :: a,b + type(psb_d_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_dcsrspspmm + subroutine psb_ldcsrspspmm(a,b,c,info) + import + implicit none + class(psb_ld_csr_sparse_mat), intent(in) :: a,b + type(psb_ld_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ldcsrspspmm + end interface contains diff --git a/base/modules/serial/psb_d_serial_mod.f90 b/base/modules/serial/psb_d_serial_mod.f90 index 09344b707..1c186cf7f 100644 --- a/base/modules/serial/psb_d_serial_mod.f90 +++ b/base/modules/serial/psb_d_serial_mod.f90 @@ -61,25 +61,7 @@ module psb_d_serial_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_dspspmm end interface psb_spspmm - interface - subroutine psb_dcsrspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_d_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_d_csr_sparse_mat), intent(in) :: a,b - type(psb_d_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_dcsrspspmm - subroutine psb_dcscspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_d_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_d_csc_sparse_mat), intent(in) :: a,b - type(psb_d_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_dcscspspmm - end interface - + interface psb_symbmm subroutine psb_dsymbmm(a,b,c,info) use psb_d_mat_mod, only : psb_dspmat_type @@ -235,24 +217,6 @@ module psb_d_serial_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_ldspspmm end interface psb_spspmm - interface - subroutine psb_ldcsrspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_ld_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ld_csr_sparse_mat), intent(in) :: a,b - type(psb_ld_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ldcsrspspmm - subroutine psb_ldcscspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_ld_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ld_csc_sparse_mat), intent(in) :: a,b - type(psb_ld_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ldcscspspmm - end interface interface psb_symbmm subroutine psb_ldsymbmm(a,b,c,info) diff --git a/base/modules/serial/psb_s_csc_mat_mod.f90 b/base/modules/serial/psb_s_csc_mat_mod.f90 index db8746003..75cccc9da 100644 --- a/base/modules/serial/psb_s_csc_mat_mod.f90 +++ b/base/modules/serial/psb_s_csc_mat_mod.f90 @@ -912,6 +912,23 @@ module psb_s_csc_mat_mod end subroutine psb_ls_csc_scals end interface + interface + subroutine psb_scscspspmm(a,b,c,info) + import + implicit none + class(psb_s_csc_sparse_mat), intent(in) :: a,b + type(psb_s_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_scscspspmm + subroutine psb_lscscspspmm(a,b,c,info) + import + implicit none + class(psb_ls_csc_sparse_mat), intent(in) :: a,b + type(psb_ls_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lscscspspmm + end interface + contains ! == =================================== diff --git a/base/modules/serial/psb_s_csr_mat_mod.f90 b/base/modules/serial/psb_s_csr_mat_mod.f90 index 356e5b325..b70b2dc66 100644 --- a/base/modules/serial/psb_s_csr_mat_mod.f90 +++ b/base/modules/serial/psb_s_csr_mat_mod.f90 @@ -1162,6 +1162,23 @@ module psb_s_csr_mat_mod end subroutine psb_ls_csr_aclsum end interface + ! Interfaces for SPSPMM + interface + subroutine psb_scsrspspmm(a,b,c,info) + import + implicit none + class(psb_s_csr_sparse_mat), intent(in) :: a,b + type(psb_s_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_scsrspspmm + subroutine psb_lscsrspspmm(a,b,c,info) + import + implicit none + class(psb_ls_csr_sparse_mat), intent(in) :: a,b + type(psb_ls_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lscsrspspmm + end interface contains diff --git a/base/modules/serial/psb_s_serial_mod.f90 b/base/modules/serial/psb_s_serial_mod.f90 index da19d9ecb..9872e53ed 100644 --- a/base/modules/serial/psb_s_serial_mod.f90 +++ b/base/modules/serial/psb_s_serial_mod.f90 @@ -61,25 +61,7 @@ module psb_s_serial_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_sspspmm end interface psb_spspmm - interface - subroutine psb_scsrspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_s_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_s_csr_sparse_mat), intent(in) :: a,b - type(psb_s_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_scsrspspmm - subroutine psb_scscspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_s_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_s_csc_sparse_mat), intent(in) :: a,b - type(psb_s_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_scscspspmm - end interface - + interface psb_symbmm subroutine psb_ssymbmm(a,b,c,info) use psb_s_mat_mod, only : psb_sspmat_type @@ -235,24 +217,6 @@ module psb_s_serial_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_lsspspmm end interface psb_spspmm - interface - subroutine psb_lscsrspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_ls_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ls_csr_sparse_mat), intent(in) :: a,b - type(psb_ls_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lscsrspspmm - subroutine psb_lscscspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_ls_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ls_csc_sparse_mat), intent(in) :: a,b - type(psb_ls_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lscscspspmm - end interface interface psb_symbmm subroutine psb_lssymbmm(a,b,c,info) diff --git a/base/modules/serial/psb_z_csc_mat_mod.f90 b/base/modules/serial/psb_z_csc_mat_mod.f90 index b9828f597..023bbf01b 100644 --- a/base/modules/serial/psb_z_csc_mat_mod.f90 +++ b/base/modules/serial/psb_z_csc_mat_mod.f90 @@ -912,6 +912,23 @@ module psb_z_csc_mat_mod end subroutine psb_lz_csc_scals end interface + interface + subroutine psb_zcscspspmm(a,b,c,info) + import + implicit none + class(psb_z_csc_sparse_mat), intent(in) :: a,b + type(psb_z_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_zcscspspmm + subroutine psb_lzcscspspmm(a,b,c,info) + import + implicit none + class(psb_lz_csc_sparse_mat), intent(in) :: a,b + type(psb_lz_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lzcscspspmm + end interface + contains ! == =================================== diff --git a/base/modules/serial/psb_z_csr_mat_mod.f90 b/base/modules/serial/psb_z_csr_mat_mod.f90 index 0bc66bcca..1703c6c85 100644 --- a/base/modules/serial/psb_z_csr_mat_mod.f90 +++ b/base/modules/serial/psb_z_csr_mat_mod.f90 @@ -1162,6 +1162,23 @@ module psb_z_csr_mat_mod end subroutine psb_lz_csr_aclsum end interface + ! Interfaces for SPSPMM + interface + subroutine psb_zcsrspspmm(a,b,c,info) + import + implicit none + class(psb_z_csr_sparse_mat), intent(in) :: a,b + type(psb_z_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_zcsrspspmm + subroutine psb_lzcsrspspmm(a,b,c,info) + import + implicit none + class(psb_lz_csr_sparse_mat), intent(in) :: a,b + type(psb_lz_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lzcsrspspmm + end interface contains diff --git a/base/modules/serial/psb_z_serial_mod.f90 b/base/modules/serial/psb_z_serial_mod.f90 index 70a3b42c7..fa0b3ef2e 100644 --- a/base/modules/serial/psb_z_serial_mod.f90 +++ b/base/modules/serial/psb_z_serial_mod.f90 @@ -61,25 +61,7 @@ module psb_z_serial_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_zspspmm end interface psb_spspmm - interface - subroutine psb_zcsrspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_z_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_z_csr_sparse_mat), intent(in) :: a,b - type(psb_z_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_zcsrspspmm - subroutine psb_zcscspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_z_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_z_csc_sparse_mat), intent(in) :: a,b - type(psb_z_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_zcscspspmm - end interface - + interface psb_symbmm subroutine psb_zsymbmm(a,b,c,info) use psb_z_mat_mod, only : psb_zspmat_type @@ -235,24 +217,6 @@ module psb_z_serial_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_lzspspmm end interface psb_spspmm - interface - subroutine psb_lzcsrspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_lz_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lz_csr_sparse_mat), intent(in) :: a,b - type(psb_lz_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lzcsrspspmm - subroutine psb_lzcscspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_lz_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lz_csc_sparse_mat), intent(in) :: a,b - type(psb_lz_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lzcscspspmm - end interface interface psb_symbmm subroutine psb_lzsymbmm(a,b,c,info) diff --git a/base/serial/impl/psb_c_csc_impl.F90 b/base/serial/impl/psb_c_csc_impl.F90 index 94744dcf4..4073a1ac7 100644 --- a/base/serial/impl/psb_c_csc_impl.F90 +++ b/base/serial/impl/psb_c_csc_impl.F90 @@ -2824,8 +2824,8 @@ subroutine psb_c_csc_print(iout,a,iv,head,ivr,ivc) end subroutine psb_c_csc_print subroutine psb_ccscspspmm(a,b,c,info) - use psb_c_mat_mod - use psb_serial_mod, psb_protect_name => psb_ccscspspmm + use psb_c_csc_mat_mod, psb_protect_name => psb_ccscspspmm + use psb_serial_mod implicit none @@ -4664,8 +4664,8 @@ subroutine psb_lc_csc_print(iout,a,iv,head,ivr,ivc) end subroutine psb_lc_csc_print subroutine psb_lccscspspmm(a,b,c,info) - use psb_c_mat_mod - use psb_serial_mod, psb_protect_name => psb_lccscspspmm + use psb_c_csc_mat_mod, psb_protect_name => psb_lccscspspmm + use psb_serial_mod implicit none diff --git a/base/serial/impl/psb_c_csr_impl.F90 b/base/serial/impl/psb_c_csr_impl.F90 index 904bc6e78..76b962887 100644 --- a/base/serial/impl/psb_c_csr_impl.F90 +++ b/base/serial/impl/psb_c_csr_impl.F90 @@ -3657,8 +3657,8 @@ end subroutine psb_c_cp_csr_from_fmt #if defined(PSB_OPENMP) subroutine psb_ccsrspspmm(a,b,c,info) - use psb_c_mat_mod - use psb_serial_mod, psb_protect_name => psb_ccsrspspmm + use psb_c_csr_mat_mod, psb_protect_name => psb_ccsrspspmm + use psb_serial_mod implicit none @@ -4204,8 +4204,8 @@ end subroutine psb_ccsrspspmm #else subroutine psb_ccsrspspmm(a,b,c,info) - use psb_c_mat_mod - use psb_serial_mod, psb_protect_name => psb_ccsrspspmm + use psb_c_csr_mat_mod, psb_protect_name => psb_ccsrspspmm + use psb_serial_mod implicit none @@ -6580,8 +6580,8 @@ end subroutine psb_lc_cp_csr_from_fmt !!$end subroutine psb_lc_csr_clean_zeros subroutine psb_lccsrspspmm(a,b,c,info) - use psb_c_mat_mod - use psb_serial_mod, psb_protect_name => psb_lccsrspspmm + use psb_c_csr_mat_mod, psb_protect_name => psb_lccsrspspmm + use psb_serial_mod implicit none diff --git a/base/serial/impl/psb_d_csc_impl.F90 b/base/serial/impl/psb_d_csc_impl.F90 index ba38e7637..e91285cd0 100644 --- a/base/serial/impl/psb_d_csc_impl.F90 +++ b/base/serial/impl/psb_d_csc_impl.F90 @@ -2824,8 +2824,8 @@ subroutine psb_d_csc_print(iout,a,iv,head,ivr,ivc) end subroutine psb_d_csc_print subroutine psb_dcscspspmm(a,b,c,info) - use psb_d_mat_mod - use psb_serial_mod, psb_protect_name => psb_dcscspspmm + use psb_d_csc_mat_mod, psb_protect_name => psb_dcscspspmm + use psb_serial_mod implicit none @@ -4664,8 +4664,8 @@ subroutine psb_ld_csc_print(iout,a,iv,head,ivr,ivc) end subroutine psb_ld_csc_print subroutine psb_ldcscspspmm(a,b,c,info) - use psb_d_mat_mod - use psb_serial_mod, psb_protect_name => psb_ldcscspspmm + use psb_d_csc_mat_mod, psb_protect_name => psb_ldcscspspmm + use psb_serial_mod implicit none diff --git a/base/serial/impl/psb_d_csr_impl.F90 b/base/serial/impl/psb_d_csr_impl.F90 index 952bb1e9c..17d6bb8e2 100644 --- a/base/serial/impl/psb_d_csr_impl.F90 +++ b/base/serial/impl/psb_d_csr_impl.F90 @@ -3657,8 +3657,8 @@ end subroutine psb_d_cp_csr_from_fmt #if defined(PSB_OPENMP) subroutine psb_dcsrspspmm(a,b,c,info) - use psb_d_mat_mod - use psb_serial_mod, psb_protect_name => psb_dcsrspspmm + use psb_d_csr_mat_mod, psb_protect_name => psb_dcsrspspmm + use psb_serial_mod implicit none @@ -4204,8 +4204,8 @@ end subroutine psb_dcsrspspmm #else subroutine psb_dcsrspspmm(a,b,c,info) - use psb_d_mat_mod - use psb_serial_mod, psb_protect_name => psb_dcsrspspmm + use psb_d_csr_mat_mod, psb_protect_name => psb_dcsrspspmm + use psb_serial_mod implicit none @@ -6580,8 +6580,8 @@ end subroutine psb_ld_cp_csr_from_fmt !!$end subroutine psb_ld_csr_clean_zeros subroutine psb_ldcsrspspmm(a,b,c,info) - use psb_d_mat_mod - use psb_serial_mod, psb_protect_name => psb_ldcsrspspmm + use psb_d_csr_mat_mod, psb_protect_name => psb_ldcsrspspmm + use psb_serial_mod implicit none diff --git a/base/serial/impl/psb_s_csc_impl.F90 b/base/serial/impl/psb_s_csc_impl.F90 index 73c11ce60..9dd32d589 100644 --- a/base/serial/impl/psb_s_csc_impl.F90 +++ b/base/serial/impl/psb_s_csc_impl.F90 @@ -2824,8 +2824,8 @@ subroutine psb_s_csc_print(iout,a,iv,head,ivr,ivc) end subroutine psb_s_csc_print subroutine psb_scscspspmm(a,b,c,info) - use psb_s_mat_mod - use psb_serial_mod, psb_protect_name => psb_scscspspmm + use psb_s_csc_mat_mod, psb_protect_name => psb_scscspspmm + use psb_serial_mod implicit none @@ -4664,8 +4664,8 @@ subroutine psb_ls_csc_print(iout,a,iv,head,ivr,ivc) end subroutine psb_ls_csc_print subroutine psb_lscscspspmm(a,b,c,info) - use psb_s_mat_mod - use psb_serial_mod, psb_protect_name => psb_lscscspspmm + use psb_s_csc_mat_mod, psb_protect_name => psb_lscscspspmm + use psb_serial_mod implicit none diff --git a/base/serial/impl/psb_s_csr_impl.F90 b/base/serial/impl/psb_s_csr_impl.F90 index f384ef330..5522bf857 100644 --- a/base/serial/impl/psb_s_csr_impl.F90 +++ b/base/serial/impl/psb_s_csr_impl.F90 @@ -3657,8 +3657,8 @@ end subroutine psb_s_cp_csr_from_fmt #if defined(PSB_OPENMP) subroutine psb_scsrspspmm(a,b,c,info) - use psb_s_mat_mod - use psb_serial_mod, psb_protect_name => psb_scsrspspmm + use psb_s_csr_mat_mod, psb_protect_name => psb_scsrspspmm + use psb_serial_mod implicit none @@ -4204,8 +4204,8 @@ end subroutine psb_scsrspspmm #else subroutine psb_scsrspspmm(a,b,c,info) - use psb_s_mat_mod - use psb_serial_mod, psb_protect_name => psb_scsrspspmm + use psb_s_csr_mat_mod, psb_protect_name => psb_scsrspspmm + use psb_serial_mod implicit none @@ -6580,8 +6580,8 @@ end subroutine psb_ls_cp_csr_from_fmt !!$end subroutine psb_ls_csr_clean_zeros subroutine psb_lscsrspspmm(a,b,c,info) - use psb_s_mat_mod - use psb_serial_mod, psb_protect_name => psb_lscsrspspmm + use psb_s_csr_mat_mod, psb_protect_name => psb_lscsrspspmm + use psb_serial_mod implicit none diff --git a/base/serial/impl/psb_z_csc_impl.F90 b/base/serial/impl/psb_z_csc_impl.F90 index 95de776d4..4a06d8d83 100644 --- a/base/serial/impl/psb_z_csc_impl.F90 +++ b/base/serial/impl/psb_z_csc_impl.F90 @@ -2824,8 +2824,8 @@ subroutine psb_z_csc_print(iout,a,iv,head,ivr,ivc) end subroutine psb_z_csc_print subroutine psb_zcscspspmm(a,b,c,info) - use psb_z_mat_mod - use psb_serial_mod, psb_protect_name => psb_zcscspspmm + use psb_z_csc_mat_mod, psb_protect_name => psb_zcscspspmm + use psb_serial_mod implicit none @@ -4664,8 +4664,8 @@ subroutine psb_lz_csc_print(iout,a,iv,head,ivr,ivc) end subroutine psb_lz_csc_print subroutine psb_lzcscspspmm(a,b,c,info) - use psb_z_mat_mod - use psb_serial_mod, psb_protect_name => psb_lzcscspspmm + use psb_z_csc_mat_mod, psb_protect_name => psb_lzcscspspmm + use psb_serial_mod implicit none diff --git a/base/serial/impl/psb_z_csr_impl.F90 b/base/serial/impl/psb_z_csr_impl.F90 index dd4be13a1..ccd55f0a1 100644 --- a/base/serial/impl/psb_z_csr_impl.F90 +++ b/base/serial/impl/psb_z_csr_impl.F90 @@ -3657,8 +3657,8 @@ end subroutine psb_z_cp_csr_from_fmt #if defined(PSB_OPENMP) subroutine psb_zcsrspspmm(a,b,c,info) - use psb_z_mat_mod - use psb_serial_mod, psb_protect_name => psb_zcsrspspmm + use psb_z_csr_mat_mod, psb_protect_name => psb_zcsrspspmm + use psb_serial_mod implicit none @@ -4204,8 +4204,8 @@ end subroutine psb_zcsrspspmm #else subroutine psb_zcsrspspmm(a,b,c,info) - use psb_z_mat_mod - use psb_serial_mod, psb_protect_name => psb_zcsrspspmm + use psb_z_csr_mat_mod, psb_protect_name => psb_zcsrspspmm + use psb_serial_mod implicit none @@ -6580,8 +6580,8 @@ end subroutine psb_lz_cp_csr_from_fmt !!$end subroutine psb_lz_csr_clean_zeros subroutine psb_lzcsrspspmm(a,b,c,info) - use psb_z_mat_mod - use psb_serial_mod, psb_protect_name => psb_lzcsrspspmm + use psb_z_csr_mat_mod, psb_protect_name => psb_lzcsrspspmm + use psb_serial_mod implicit none diff --git a/base/serial/psb_cspspmm.f90 b/base/serial/psb_cspspmm.f90 index cdd45c3a2..7e81c99ce 100644 --- a/base/serial/psb_cspspmm.f90 +++ b/base/serial/psb_cspspmm.f90 @@ -48,24 +48,24 @@ subroutine psb_cspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - interface - subroutine psb_ccsrspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_c_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_c_csr_sparse_mat), intent(in) :: a,b - type(psb_c_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ccsrspspmm - subroutine psb_ccscspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_c_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_c_csc_sparse_mat), intent(in) :: a,b - type(psb_c_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ccscspspmm - end interface +!!$ interface +!!$ subroutine psb_ccsrspspmm(a,b,c,info) +!!$ use psb_c_mat_mod, only : psb_c_csr_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_c_csr_sparse_mat), intent(in) :: a,b +!!$ type(psb_c_csr_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_ccsrspspmm +!!$ subroutine psb_ccscspspmm(a,b,c,info) +!!$ use psb_c_mat_mod, only : psb_c_csc_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_c_csc_sparse_mat), intent(in) :: a,b +!!$ type(psb_c_csc_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_ccscspspmm +!!$ end interface call psb_erractionsave(err_act) info = psb_success_ @@ -147,24 +147,24 @@ subroutine psb_lcspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - interface - subroutine psb_lccsrspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_lc_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lc_csr_sparse_mat), intent(in) :: a,b - type(psb_lc_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lccsrspspmm - subroutine psb_lccscspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_lc_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lc_csc_sparse_mat), intent(in) :: a,b - type(psb_lc_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lccscspspmm - end interface +!!$ interface +!!$ subroutine psb_lccsrspspmm(a,b,c,info) +!!$ use psb_c_mat_mod, only : psb_lc_csr_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_lc_csr_sparse_mat), intent(in) :: a,b +!!$ type(psb_lc_csr_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_lccsrspspmm +!!$ subroutine psb_lccscspspmm(a,b,c,info) +!!$ use psb_c_mat_mod, only : psb_lc_csc_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_lc_csc_sparse_mat), intent(in) :: a,b +!!$ type(psb_lc_csc_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_lccscspspmm +!!$ end interface call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_dspspmm.f90 b/base/serial/psb_dspspmm.f90 index 82c3b3f5e..682c26280 100644 --- a/base/serial/psb_dspspmm.f90 +++ b/base/serial/psb_dspspmm.f90 @@ -48,24 +48,24 @@ subroutine psb_dspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - interface - subroutine psb_dcsrspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_d_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_d_csr_sparse_mat), intent(in) :: a,b - type(psb_d_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_dcsrspspmm - subroutine psb_dcscspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_d_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_d_csc_sparse_mat), intent(in) :: a,b - type(psb_d_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_dcscspspmm - end interface +!!$ interface +!!$ subroutine psb_dcsrspspmm(a,b,c,info) +!!$ use psb_d_mat_mod, only : psb_d_csr_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_d_csr_sparse_mat), intent(in) :: a,b +!!$ type(psb_d_csr_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_dcsrspspmm +!!$ subroutine psb_dcscspspmm(a,b,c,info) +!!$ use psb_d_mat_mod, only : psb_d_csc_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_d_csc_sparse_mat), intent(in) :: a,b +!!$ type(psb_d_csc_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_dcscspspmm +!!$ end interface call psb_erractionsave(err_act) info = psb_success_ @@ -147,24 +147,24 @@ subroutine psb_ldspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - interface - subroutine psb_ldcsrspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_ld_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ld_csr_sparse_mat), intent(in) :: a,b - type(psb_ld_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ldcsrspspmm - subroutine psb_ldcscspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_ld_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ld_csc_sparse_mat), intent(in) :: a,b - type(psb_ld_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ldcscspspmm - end interface +!!$ interface +!!$ subroutine psb_ldcsrspspmm(a,b,c,info) +!!$ use psb_d_mat_mod, only : psb_ld_csr_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_ld_csr_sparse_mat), intent(in) :: a,b +!!$ type(psb_ld_csr_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_ldcsrspspmm +!!$ subroutine psb_ldcscspspmm(a,b,c,info) +!!$ use psb_d_mat_mod, only : psb_ld_csc_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_ld_csc_sparse_mat), intent(in) :: a,b +!!$ type(psb_ld_csc_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_ldcscspspmm +!!$ end interface call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_sspspmm.f90 b/base/serial/psb_sspspmm.f90 index 792fb265d..f193a4421 100644 --- a/base/serial/psb_sspspmm.f90 +++ b/base/serial/psb_sspspmm.f90 @@ -48,24 +48,24 @@ subroutine psb_sspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - interface - subroutine psb_scsrspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_s_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_s_csr_sparse_mat), intent(in) :: a,b - type(psb_s_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_scsrspspmm - subroutine psb_scscspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_s_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_s_csc_sparse_mat), intent(in) :: a,b - type(psb_s_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_scscspspmm - end interface +!!$ interface +!!$ subroutine psb_scsrspspmm(a,b,c,info) +!!$ use psb_s_mat_mod, only : psb_s_csr_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_s_csr_sparse_mat), intent(in) :: a,b +!!$ type(psb_s_csr_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_scsrspspmm +!!$ subroutine psb_scscspspmm(a,b,c,info) +!!$ use psb_s_mat_mod, only : psb_s_csc_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_s_csc_sparse_mat), intent(in) :: a,b +!!$ type(psb_s_csc_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_scscspspmm +!!$ end interface call psb_erractionsave(err_act) info = psb_success_ @@ -147,24 +147,24 @@ subroutine psb_lsspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - interface - subroutine psb_lscsrspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_ls_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ls_csr_sparse_mat), intent(in) :: a,b - type(psb_ls_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lscsrspspmm - subroutine psb_lscscspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_ls_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ls_csc_sparse_mat), intent(in) :: a,b - type(psb_ls_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lscscspspmm - end interface +!!$ interface +!!$ subroutine psb_lscsrspspmm(a,b,c,info) +!!$ use psb_s_mat_mod, only : psb_ls_csr_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_ls_csr_sparse_mat), intent(in) :: a,b +!!$ type(psb_ls_csr_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_lscsrspspmm +!!$ subroutine psb_lscscspspmm(a,b,c,info) +!!$ use psb_s_mat_mod, only : psb_ls_csc_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_ls_csc_sparse_mat), intent(in) :: a,b +!!$ type(psb_ls_csc_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_lscscspspmm +!!$ end interface call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_zspspmm.f90 b/base/serial/psb_zspspmm.f90 index 932ae20ab..b0a02cdc1 100644 --- a/base/serial/psb_zspspmm.f90 +++ b/base/serial/psb_zspspmm.f90 @@ -48,24 +48,24 @@ subroutine psb_zspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - interface - subroutine psb_zcsrspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_z_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_z_csr_sparse_mat), intent(in) :: a,b - type(psb_z_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_zcsrspspmm - subroutine psb_zcscspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_z_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_z_csc_sparse_mat), intent(in) :: a,b - type(psb_z_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_zcscspspmm - end interface +!!$ interface +!!$ subroutine psb_zcsrspspmm(a,b,c,info) +!!$ use psb_z_mat_mod, only : psb_z_csr_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_z_csr_sparse_mat), intent(in) :: a,b +!!$ type(psb_z_csr_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_zcsrspspmm +!!$ subroutine psb_zcscspspmm(a,b,c,info) +!!$ use psb_z_mat_mod, only : psb_z_csc_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_z_csc_sparse_mat), intent(in) :: a,b +!!$ type(psb_z_csc_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_zcscspspmm +!!$ end interface call psb_erractionsave(err_act) info = psb_success_ @@ -147,24 +147,24 @@ subroutine psb_lzspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - interface - subroutine psb_lzcsrspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_lz_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lz_csr_sparse_mat), intent(in) :: a,b - type(psb_lz_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lzcsrspspmm - subroutine psb_lzcscspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_lz_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lz_csc_sparse_mat), intent(in) :: a,b - type(psb_lz_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lzcscspspmm - end interface +!!$ interface +!!$ subroutine psb_lzcsrspspmm(a,b,c,info) +!!$ use psb_z_mat_mod, only : psb_lz_csr_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_lz_csr_sparse_mat), intent(in) :: a,b +!!$ type(psb_lz_csr_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_lzcsrspspmm +!!$ subroutine psb_lzcscspspmm(a,b,c,info) +!!$ use psb_z_mat_mod, only : psb_lz_csc_sparse_mat +!!$ import :: psb_ipk_ +!!$ implicit none +!!$ class(psb_lz_csc_sparse_mat), intent(in) :: a,b +!!$ type(psb_lz_csc_sparse_mat), intent(out) :: c +!!$ integer(psb_ipk_), intent(out) :: info +!!$ end subroutine psb_lzcscspspmm +!!$ end interface call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/tools/psb_c_par_csr_spspmm.f90 b/base/tools/psb_c_par_csr_spspmm.f90 index 2dbd00f0d..0d8e59899 100644 --- a/base/tools/psb_c_par_csr_spspmm.f90 +++ b/base/tools/psb_c_par_csr_spspmm.f90 @@ -66,7 +66,8 @@ Subroutine psb_c_par_csr_spspmm(acsr,desc_a,bcsr,ccsr,desc_c,info,data) use psb_comm_mod use psb_penv_mod use psb_c_tools_mod, psb_protect_name => psb_c_par_csr_spspmm - use psb_c_serial_mod, only : psb_ccsrspspmm, psb_cbase_rwextd + use psb_c_csr_mat_mod, only : psb_ccsrspspmm + use psb_c_serial_mod, only : psb_cbase_rwextd Implicit None type(psb_c_csr_sparse_mat),intent(in) :: acsr @@ -166,7 +167,8 @@ Subroutine psb_lc_par_csr_spspmm(acsr,desc_a,bcsr,ccsr,desc_c,info,data) use psb_comm_mod use psb_penv_mod use psb_c_tools_mod, psb_protect_name => psb_lc_par_csr_spspmm - use psb_c_serial_mod, only : psb_lccsrspspmm, psb_lcbase_rwextd + use psb_c_csr_mat_mod, only : psb_lccsrspspmm + use psb_c_serial_mod, only : psb_lcbase_rwextd Implicit None type(psb_lc_csr_sparse_mat),intent(in) :: acsr diff --git a/base/tools/psb_d_par_csr_spspmm.f90 b/base/tools/psb_d_par_csr_spspmm.f90 index 3ed62f05b..3ab675615 100644 --- a/base/tools/psb_d_par_csr_spspmm.f90 +++ b/base/tools/psb_d_par_csr_spspmm.f90 @@ -66,7 +66,8 @@ Subroutine psb_d_par_csr_spspmm(acsr,desc_a,bcsr,ccsr,desc_c,info,data) use psb_comm_mod use psb_penv_mod use psb_d_tools_mod, psb_protect_name => psb_d_par_csr_spspmm - use psb_d_serial_mod, only : psb_dcsrspspmm, psb_dbase_rwextd + use psb_d_csr_mat_mod, only : psb_dcsrspspmm + use psb_d_serial_mod, only : psb_dbase_rwextd Implicit None type(psb_d_csr_sparse_mat),intent(in) :: acsr @@ -166,7 +167,8 @@ Subroutine psb_ld_par_csr_spspmm(acsr,desc_a,bcsr,ccsr,desc_c,info,data) use psb_comm_mod use psb_penv_mod use psb_d_tools_mod, psb_protect_name => psb_ld_par_csr_spspmm - use psb_d_serial_mod, only : psb_ldcsrspspmm, psb_ldbase_rwextd + use psb_d_csr_mat_mod, only : psb_ldcsrspspmm + use psb_d_serial_mod, only : psb_ldbase_rwextd Implicit None type(psb_ld_csr_sparse_mat),intent(in) :: acsr diff --git a/base/tools/psb_s_par_csr_spspmm.f90 b/base/tools/psb_s_par_csr_spspmm.f90 index 4e70478f7..17bf4e449 100644 --- a/base/tools/psb_s_par_csr_spspmm.f90 +++ b/base/tools/psb_s_par_csr_spspmm.f90 @@ -66,7 +66,8 @@ Subroutine psb_s_par_csr_spspmm(acsr,desc_a,bcsr,ccsr,desc_c,info,data) use psb_comm_mod use psb_penv_mod use psb_s_tools_mod, psb_protect_name => psb_s_par_csr_spspmm - use psb_s_serial_mod, only : psb_scsrspspmm, psb_sbase_rwextd + use psb_s_csr_mat_mod, only : psb_scsrspspmm + use psb_s_serial_mod, only : psb_sbase_rwextd Implicit None type(psb_s_csr_sparse_mat),intent(in) :: acsr @@ -166,7 +167,8 @@ Subroutine psb_ls_par_csr_spspmm(acsr,desc_a,bcsr,ccsr,desc_c,info,data) use psb_comm_mod use psb_penv_mod use psb_s_tools_mod, psb_protect_name => psb_ls_par_csr_spspmm - use psb_s_serial_mod, only : psb_lscsrspspmm, psb_lsbase_rwextd + use psb_s_csr_mat_mod, only : psb_lscsrspspmm + use psb_s_serial_mod, only : psb_lsbase_rwextd Implicit None type(psb_ls_csr_sparse_mat),intent(in) :: acsr diff --git a/base/tools/psb_z_par_csr_spspmm.f90 b/base/tools/psb_z_par_csr_spspmm.f90 index 5ccf58d36..6629aee25 100644 --- a/base/tools/psb_z_par_csr_spspmm.f90 +++ b/base/tools/psb_z_par_csr_spspmm.f90 @@ -66,7 +66,8 @@ Subroutine psb_z_par_csr_spspmm(acsr,desc_a,bcsr,ccsr,desc_c,info,data) use psb_comm_mod use psb_penv_mod use psb_z_tools_mod, psb_protect_name => psb_z_par_csr_spspmm - use psb_z_serial_mod, only : psb_zcsrspspmm, psb_zbase_rwextd + use psb_z_csr_mat_mod, only : psb_zcsrspspmm + use psb_z_serial_mod, only : psb_zbase_rwextd Implicit None type(psb_z_csr_sparse_mat),intent(in) :: acsr @@ -166,7 +167,8 @@ Subroutine psb_lz_par_csr_spspmm(acsr,desc_a,bcsr,ccsr,desc_c,info,data) use psb_comm_mod use psb_penv_mod use psb_z_tools_mod, psb_protect_name => psb_lz_par_csr_spspmm - use psb_z_serial_mod, only : psb_lzcsrspspmm, psb_lzbase_rwextd + use psb_z_csr_mat_mod, only : psb_lzcsrspspmm + use psb_z_serial_mod, only : psb_lzbase_rwextd Implicit None type(psb_lz_csr_sparse_mat),intent(in) :: acsr From 6140b8c9e9e3265c3c35886cbbe721db8af2a22a Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 19 Sep 2025 08:52:40 +0200 Subject: [PATCH 007/175] Minor comment changes --- base/modules/psb_const_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index b4cacdcab..d10bf9746 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -35,7 +35,7 @@ module psb_const_mod use iso_fortran_env ! This is a 2-byte integer, just in case integer, parameter :: psb_i2pk_ = int16 - ! This is always a 4-byte integer, for MPI-related stuff + ! This is always a 4-byte integer. integer, parameter :: psb_mpk_ = int32 ! This is always an 8-byte integer. integer, parameter :: psb_epk_ = int64 @@ -51,7 +51,7 @@ module psb_const_mod ! This is a 2-byte integer, just in case integer, parameter :: i2ndig=4 integer, parameter :: psb_i2pk_ = selected_int_kind(i2ndig) - ! This is always a 4-byte integer, for MPI-related stuff + ! This is always a 4-byte integer. integer, parameter :: indig=8 integer, parameter :: psb_mpk_ = selected_int_kind(indig) ! This is always an 8-byte integer. From 0d69cdb005aa94a41f21e3436a6a1988cabb0c1d Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 19 Sep 2025 08:53:15 +0200 Subject: [PATCH 008/175] Further changes to constants for intel --- base/modules/penv/psi_penv_mod.F90 | 128 +++-------------------------- 1 file changed, 12 insertions(+), 116 deletions(-) diff --git a/base/modules/penv/psi_penv_mod.F90 b/base/modules/penv/psi_penv_mod.F90 index 249fd9b13..2792d22ec 100644 --- a/base/modules/penv/psi_penv_mod.F90 +++ b/base/modules/penv/psi_penv_mod.F90 @@ -49,7 +49,9 @@ module mpi integer(psb_mpk_), parameter :: mpi_integer4 = 10 integer(psb_mpk_), parameter :: mpi_comm_null = -1 integer(psb_mpk_), parameter :: mpi_comm_world = 1 - + + integer(psb_mpk_), parameter :: mpi_address_kind = psb_epk_ + !real(psb_dpk_), external :: mpi_wtime interface @@ -179,7 +181,15 @@ end module mpi module psi_penv_mod use psb_const_mod use iso_c_binding - +#ifdef PSB_MPI_MOD + use mpi +#endif +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + integer(psb_mpk_), parameter :: psb_apk_ = mpi_address_kind + integer(psb_mpk_), parameter :: psb_int_tag = 100 integer(psb_mpk_), parameter :: psb_real_tag = psb_int_tag + 1 integer(psb_mpk_), parameter :: psb_double_tag = psb_real_tag + 1 @@ -343,13 +353,7 @@ contains end subroutine psb_init_queue subroutine psb_wait_buffer(node, info) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_buffer_node), intent(inout) :: node integer(psb_ipk_), intent(out) :: info integer(psb_mpk_) :: status(mpi_status_size),minfo @@ -359,13 +363,7 @@ contains end subroutine psb_wait_buffer subroutine psb_test_buffer(node, flag, info) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_buffer_node), intent(inout) :: node logical, intent(out) :: flag integer(psb_ipk_), intent(out) :: info @@ -478,13 +476,7 @@ contains ! ! !!!!!!!!!!!!!!!!! subroutine psi_msnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest integer(psb_mpk_), allocatable, intent(inout) :: buffer(:) @@ -517,13 +509,7 @@ contains subroutine psi_esnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest integer(psb_epk_), allocatable, intent(inout) :: buffer(:) @@ -554,13 +540,7 @@ contains end subroutine psi_esnd subroutine psi_i2snd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest integer(psb_i2pk_), allocatable, intent(inout) :: buffer(:) @@ -591,13 +571,7 @@ contains end subroutine psi_i2snd subroutine psi_ssnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest real(psb_spk_), allocatable, intent(inout) :: buffer(:) @@ -628,13 +602,7 @@ contains end subroutine psi_ssnd subroutine psi_dsnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest real(psb_dpk_), allocatable, intent(inout) :: buffer(:) @@ -665,13 +633,7 @@ contains end subroutine psi_dsnd subroutine psi_csnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest complex(psb_spk_), allocatable, intent(inout) :: buffer(:) @@ -702,13 +664,7 @@ contains end subroutine psi_csnd subroutine psi_zsnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest complex(psb_dpk_), allocatable, intent(inout) :: buffer(:) @@ -740,13 +696,7 @@ contains subroutine psi_logsnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest logical, allocatable, intent(inout) :: buffer(:) @@ -778,13 +728,7 @@ contains subroutine psi_hsnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest character(len=1), allocatable, intent(inout) :: buffer(:) @@ -853,13 +797,7 @@ contains end subroutine psi_get_sizes subroutine psi_register_mpi_extras(info) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif integer(psb_mpk_) :: info info = 0 @@ -943,13 +881,7 @@ contains use psb_mat_mod use psb_vect_mod ! !$ use psb_rsb_mod -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type), intent(out) :: ctxt type(psb_ctxt_type), intent(in), optional :: basectxt integer(psb_mpk_), intent(in), optional :: np, ids(:), extcomm @@ -1082,13 +1014,7 @@ contains use psb_mat_mod use psb_vect_mod ! !$ use psb_rsb_mod -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type), intent(inout) :: ctxt logical, intent(in), optional :: close logical :: close_ @@ -1156,13 +1082,7 @@ contains subroutine psb_barrier_mpik(ctxt) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type), intent(in) :: ctxt integer(psb_mpk_) :: info @@ -1177,13 +1097,7 @@ contains function psb_wtime() use psb_const_mod ! use mpi_constants -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif real(psb_dpk_) :: psb_wtime psb_wtime = mpi_wtime() @@ -1212,13 +1126,7 @@ contains subroutine psb_info_mpik(ctxt,iam,np) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type), intent(in) :: ctxt integer(psb_mpk_), intent(out) :: iam, np @@ -1271,13 +1179,7 @@ contains function psb_m_get_mpi_comm(ctxt) result(comm) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: comm comm = mpi_comm_null @@ -1293,13 +1195,7 @@ contains end function psb_m_get_mpi_rank subroutine psb_get_mpicomm(ctxt,comm) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: comm comm = mpi_comm_null From 42b8daae8c5b808a1b90818ebe727c14d48851b2 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 19 Sep 2025 09:34:34 +0200 Subject: [PATCH 009/175] Use mpi_comm_get_attr to set tag values --- base/modules/penv/psi_penv_mod.F90 | 98 +++++++++++++++++++----------- 1 file changed, 64 insertions(+), 34 deletions(-) diff --git a/base/modules/penv/psi_penv_mod.F90 b/base/modules/penv/psi_penv_mod.F90 index 2792d22ec..320df9417 100644 --- a/base/modules/penv/psi_penv_mod.F90 +++ b/base/modules/penv/psi_penv_mod.F90 @@ -189,33 +189,32 @@ module psi_penv_mod #endif integer(psb_mpk_), parameter :: psb_apk_ = mpi_address_kind - - integer(psb_mpk_), parameter :: psb_int_tag = 100 - integer(psb_mpk_), parameter :: psb_real_tag = psb_int_tag + 1 - integer(psb_mpk_), parameter :: psb_double_tag = psb_real_tag + 1 - integer(psb_mpk_), parameter :: psb_complex_tag = psb_double_tag + 1 - integer(psb_mpk_), parameter :: psb_dcomplex_tag = psb_complex_tag + 1 - integer(psb_mpk_), parameter :: psb_logical_tag = psb_dcomplex_tag + 1 - integer(psb_mpk_), parameter :: psb_char_tag = psb_logical_tag + 1 - integer(psb_mpk_), parameter :: psb_int8_tag = psb_char_tag + 1 - integer(psb_mpk_), parameter :: psb_int2_tag = psb_int8_tag + 1 - integer(psb_mpk_), parameter :: psb_int4_tag = psb_int2_tag + 1 - integer(psb_mpk_), parameter :: psb_long_tag = psb_int4_tag + 1 - - integer(psb_mpk_), parameter :: psb_max_simple_tag = psb_long_tag + 2 - - integer(psb_mpk_), parameter :: psb_int_swap_tag = psb_max_simple_tag + 1 - integer(psb_mpk_), parameter :: psb_real_swap_tag = psb_int_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_double_swap_tag = psb_real_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_complex_swap_tag = psb_double_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_dcomplex_swap_tag = psb_complex_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_logical_swap_tag = psb_dcomplex_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_char_swap_tag = psb_logical_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_int8_swap_tag = psb_char_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_int2_swap_tag = psb_int8_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_int4_swap_tag = psb_int2_swap_tag + 1 - integer(psb_mpk_), parameter :: psb_long_swap_tag = psb_int4_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_tag_space = 200 + + integer(psb_mpk_), save :: psb_int_tag + integer(psb_mpk_), save :: psb_real_tag + integer(psb_mpk_), save :: psb_double_tag + integer(psb_mpk_), save :: psb_complex_tag + integer(psb_mpk_), save :: psb_dcomplex_tag + integer(psb_mpk_), save :: psb_logical_tag + integer(psb_mpk_), save :: psb_char_tag + integer(psb_mpk_), save :: psb_int8_tag + integer(psb_mpk_), save :: psb_int2_tag + integer(psb_mpk_), save :: psb_int4_tag + integer(psb_mpk_), save :: psb_long_tag + integer(psb_mpk_), save :: psb_max_simple_tag + integer(psb_mpk_), save :: psb_int_swap_tag + integer(psb_mpk_), save :: psb_real_swap_tag + integer(psb_mpk_), save :: psb_double_swap_tag + integer(psb_mpk_), save :: psb_complex_swap_tag + integer(psb_mpk_), save :: psb_dcomplex_swap_tag + integer(psb_mpk_), save :: psb_logical_swap_tag + integer(psb_mpk_), save :: psb_char_swap_tag + integer(psb_mpk_), save :: psb_int8_swap_tag + integer(psb_mpk_), save :: psb_int2_swap_tag + integer(psb_mpk_), save :: psb_int4_swap_tag + integer(psb_mpk_), save :: psb_long_swap_tag integer(psb_mpk_), private, parameter :: psb_int_type = 200 @@ -316,7 +315,7 @@ module psi_penv_mod #endif - private :: psi_get_sizes, psi_register_mpi_extras + private :: psi_get_sizes, psi_register_mpi_const private :: psi_i2amx_op, psi_i2amn_op private :: psi_iamx_op, psi_iamn_op private :: psi_mamx_op, psi_mamn_op @@ -796,10 +795,12 @@ contains end subroutine psi_get_sizes - subroutine psi_register_mpi_extras(info) + subroutine psi_register_mpi_const(comm,info) implicit none - integer(psb_mpk_) :: info - + integer(psb_mpk_) :: comm,info + integer(psb_mpk_) :: ierror + integer(psb_apk_) :: tag_value + logical :: flag info = 0 #if 0 if (info == 0) call mpi_type_create_f90_integer(psb_ipk_, psb_mpi_ipk_ ,info) @@ -837,6 +838,7 @@ contains #endif #if defined(PSB_SERIAL_MPI) + tag_value = HUGE(psb_tag_space)/2 #else if (info == 0) call mpi_op_create(psi_i2amx_op,.true.,mpi_i2amx_op,info) if (info == 0) call mpi_op_create(psi_i2amn_op,.true.,mpi_i2amn_op,info) @@ -854,9 +856,37 @@ contains if (info == 0) call mpi_op_create(psi_zamn_op,.true.,mpi_zamn_op,info) if (info == 0) call mpi_op_create(psi_snrm2_op,.true.,mpi_snrm2_op,info) if (info == 0) call mpi_op_create(psi_dnrm2_op,.true.,mpi_dnrm2_op,info) + if (info == 0) call mpi_comm_get_attr(comm,mpi_tag_ub,tag_value,flag,ierror) + if ((ierror/=0).or.(.not.flag)) then + tag_value = 0 + info = psb_err_internal_error_ + end if #endif - - end subroutine psi_register_mpi_extras + psb_int_tag = tag_value - psb_tag_space + psb_real_tag = psb_int_tag + 1 + psb_double_tag = psb_real_tag + 1 + psb_complex_tag = psb_double_tag + 1 + psb_dcomplex_tag = psb_complex_tag + 1 + psb_logical_tag = psb_dcomplex_tag + 1 + psb_char_tag = psb_logical_tag + 1 + psb_int8_tag = psb_char_tag + 1 + psb_int2_tag = psb_int8_tag + 1 + psb_int4_tag = psb_int2_tag + 1 + psb_long_tag = psb_int4_tag + 1 + psb_max_simple_tag = psb_long_tag + 2 + psb_int_swap_tag = psb_max_simple_tag + 1 + psb_real_swap_tag = psb_int_swap_tag + 1 + psb_double_swap_tag = psb_real_swap_tag + 1 + psb_complex_swap_tag = psb_double_swap_tag + 1 + psb_dcomplex_swap_tag = psb_complex_swap_tag + 1 + psb_logical_swap_tag = psb_dcomplex_swap_tag + 1 + psb_char_swap_tag = psb_logical_swap_tag + 1 + psb_int8_swap_tag = psb_char_swap_tag + 1 + psb_int2_swap_tag = psb_int8_swap_tag + 1 + psb_int4_swap_tag = psb_int2_swap_tag + 1 + psb_long_swap_tag = psb_int4_swap_tag + 1 + + end subroutine psi_register_mpi_const #if (defined(PSB_IPK4) && defined(PSB_LPK8))||defined(PSB_IPK8) subroutine psb_info_epk(ctxt,iam,np) @@ -899,7 +929,7 @@ contains ctxt%ctxt = nctxt ! allocate on assignment nctxt = nctxt + 1 - call psi_register_mpi_extras(info) + call psi_register_mpi_const(nctxt,info) call psi_get_sizes() #else @@ -988,7 +1018,7 @@ contains if (info == 0) then ctxt%ctxt = icomm ! allocate on assignment end if - call psi_register_mpi_extras(info) + call psi_register_mpi_const(icomm,info) call psi_get_sizes() !if (ctxt == mpi_comm_null) return if (.not.allocated(ctxt%ctxt)) return From 2539b6c715ab9e07b0ff9704e8d43b102d40561a Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 19 Sep 2025 09:51:19 +0200 Subject: [PATCH 010/175] Fix interface location and use in spspmm --- base/serial/psb_cspspmm.f90 | 46 ++++++------------------------------- base/serial/psb_dspspmm.f90 | 46 ++++++------------------------------- base/serial/psb_sspspmm.f90 | 46 ++++++------------------------------- base/serial/psb_zspspmm.f90 | 46 ++++++------------------------------- 4 files changed, 28 insertions(+), 156 deletions(-) diff --git a/base/serial/psb_cspspmm.f90 b/base/serial/psb_cspspmm.f90 index 7e81c99ce..a62bbcf60 100644 --- a/base/serial/psb_cspspmm.f90 +++ b/base/serial/psb_cspspmm.f90 @@ -37,7 +37,9 @@ ! subroutine psb_cspspmm(a,b,c,info) use psb_mat_mod - !use psb_c_serial_mod, psb_protect_name => psb_cspspmm + use psb_c_csr_mat_mod + use psb_c_csc_mat_mod + use psb_c_serial_mod, psb_protect_name => psb_cspspmm implicit none type(psb_cspmat_type), intent(in) :: a,b @@ -48,24 +50,6 @@ subroutine psb_cspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -!!$ interface -!!$ subroutine psb_ccsrspspmm(a,b,c,info) -!!$ use psb_c_mat_mod, only : psb_c_csr_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_c_csr_sparse_mat), intent(in) :: a,b -!!$ type(psb_c_csr_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_ccsrspspmm -!!$ subroutine psb_ccscspspmm(a,b,c,info) -!!$ use psb_c_mat_mod, only : psb_c_csc_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_c_csc_sparse_mat), intent(in) :: a,b -!!$ type(psb_c_csc_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_ccscspspmm -!!$ end interface call psb_erractionsave(err_act) info = psb_success_ @@ -136,7 +120,9 @@ end subroutine psb_cspspmm subroutine psb_lcspspmm(a,b,c,info) use psb_mat_mod -! use psb_c_serial_mod, psb_protect_name => psb_lcspspmm + use psb_c_csr_mat_mod + use psb_c_csc_mat_mod + use psb_c_serial_mod, psb_protect_name => psb_lcspspmm implicit none type(psb_lcspmat_type), intent(in) :: a,b @@ -147,25 +133,7 @@ subroutine psb_lcspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -!!$ interface -!!$ subroutine psb_lccsrspspmm(a,b,c,info) -!!$ use psb_c_mat_mod, only : psb_lc_csr_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_lc_csr_sparse_mat), intent(in) :: a,b -!!$ type(psb_lc_csr_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_lccsrspspmm -!!$ subroutine psb_lccscspspmm(a,b,c,info) -!!$ use psb_c_mat_mod, only : psb_lc_csc_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_lc_csc_sparse_mat), intent(in) :: a,b -!!$ type(psb_lc_csc_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_lccscspspmm -!!$ end interface - call psb_erractionsave(err_act) + call psb_erractionsave(err_act) info = psb_success_ if ((a%is_null()) .or.(b%is_null())) then diff --git a/base/serial/psb_dspspmm.f90 b/base/serial/psb_dspspmm.f90 index 682c26280..600592083 100644 --- a/base/serial/psb_dspspmm.f90 +++ b/base/serial/psb_dspspmm.f90 @@ -37,7 +37,9 @@ ! subroutine psb_dspspmm(a,b,c,info) use psb_mat_mod - !use psb_d_serial_mod, psb_protect_name => psb_dspspmm + use psb_d_csr_mat_mod + use psb_d_csc_mat_mod + use psb_d_serial_mod, psb_protect_name => psb_dspspmm implicit none type(psb_dspmat_type), intent(in) :: a,b @@ -48,24 +50,6 @@ subroutine psb_dspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -!!$ interface -!!$ subroutine psb_dcsrspspmm(a,b,c,info) -!!$ use psb_d_mat_mod, only : psb_d_csr_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_d_csr_sparse_mat), intent(in) :: a,b -!!$ type(psb_d_csr_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_dcsrspspmm -!!$ subroutine psb_dcscspspmm(a,b,c,info) -!!$ use psb_d_mat_mod, only : psb_d_csc_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_d_csc_sparse_mat), intent(in) :: a,b -!!$ type(psb_d_csc_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_dcscspspmm -!!$ end interface call psb_erractionsave(err_act) info = psb_success_ @@ -136,7 +120,9 @@ end subroutine psb_dspspmm subroutine psb_ldspspmm(a,b,c,info) use psb_mat_mod -! use psb_d_serial_mod, psb_protect_name => psb_ldspspmm + use psb_d_csr_mat_mod + use psb_d_csc_mat_mod + use psb_d_serial_mod, psb_protect_name => psb_ldspspmm implicit none type(psb_ldspmat_type), intent(in) :: a,b @@ -147,25 +133,7 @@ subroutine psb_ldspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -!!$ interface -!!$ subroutine psb_ldcsrspspmm(a,b,c,info) -!!$ use psb_d_mat_mod, only : psb_ld_csr_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_ld_csr_sparse_mat), intent(in) :: a,b -!!$ type(psb_ld_csr_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_ldcsrspspmm -!!$ subroutine psb_ldcscspspmm(a,b,c,info) -!!$ use psb_d_mat_mod, only : psb_ld_csc_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_ld_csc_sparse_mat), intent(in) :: a,b -!!$ type(psb_ld_csc_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_ldcscspspmm -!!$ end interface - call psb_erractionsave(err_act) + call psb_erractionsave(err_act) info = psb_success_ if ((a%is_null()) .or.(b%is_null())) then diff --git a/base/serial/psb_sspspmm.f90 b/base/serial/psb_sspspmm.f90 index f193a4421..6c05fb798 100644 --- a/base/serial/psb_sspspmm.f90 +++ b/base/serial/psb_sspspmm.f90 @@ -37,7 +37,9 @@ ! subroutine psb_sspspmm(a,b,c,info) use psb_mat_mod - !use psb_s_serial_mod, psb_protect_name => psb_sspspmm + use psb_s_csr_mat_mod + use psb_s_csc_mat_mod + use psb_s_serial_mod, psb_protect_name => psb_sspspmm implicit none type(psb_sspmat_type), intent(in) :: a,b @@ -48,24 +50,6 @@ subroutine psb_sspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -!!$ interface -!!$ subroutine psb_scsrspspmm(a,b,c,info) -!!$ use psb_s_mat_mod, only : psb_s_csr_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_s_csr_sparse_mat), intent(in) :: a,b -!!$ type(psb_s_csr_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_scsrspspmm -!!$ subroutine psb_scscspspmm(a,b,c,info) -!!$ use psb_s_mat_mod, only : psb_s_csc_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_s_csc_sparse_mat), intent(in) :: a,b -!!$ type(psb_s_csc_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_scscspspmm -!!$ end interface call psb_erractionsave(err_act) info = psb_success_ @@ -136,7 +120,9 @@ end subroutine psb_sspspmm subroutine psb_lsspspmm(a,b,c,info) use psb_mat_mod -! use psb_s_serial_mod, psb_protect_name => psb_lsspspmm + use psb_s_csr_mat_mod + use psb_s_csc_mat_mod + use psb_s_serial_mod, psb_protect_name => psb_lsspspmm implicit none type(psb_lsspmat_type), intent(in) :: a,b @@ -147,25 +133,7 @@ subroutine psb_lsspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -!!$ interface -!!$ subroutine psb_lscsrspspmm(a,b,c,info) -!!$ use psb_s_mat_mod, only : psb_ls_csr_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_ls_csr_sparse_mat), intent(in) :: a,b -!!$ type(psb_ls_csr_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_lscsrspspmm -!!$ subroutine psb_lscscspspmm(a,b,c,info) -!!$ use psb_s_mat_mod, only : psb_ls_csc_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_ls_csc_sparse_mat), intent(in) :: a,b -!!$ type(psb_ls_csc_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_lscscspspmm -!!$ end interface - call psb_erractionsave(err_act) + call psb_erractionsave(err_act) info = psb_success_ if ((a%is_null()) .or.(b%is_null())) then diff --git a/base/serial/psb_zspspmm.f90 b/base/serial/psb_zspspmm.f90 index b0a02cdc1..97ef2c815 100644 --- a/base/serial/psb_zspspmm.f90 +++ b/base/serial/psb_zspspmm.f90 @@ -37,7 +37,9 @@ ! subroutine psb_zspspmm(a,b,c,info) use psb_mat_mod - !use psb_z_serial_mod, psb_protect_name => psb_zspspmm + use psb_z_csr_mat_mod + use psb_z_csc_mat_mod + use psb_z_serial_mod, psb_protect_name => psb_zspspmm implicit none type(psb_zspmat_type), intent(in) :: a,b @@ -48,24 +50,6 @@ subroutine psb_zspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -!!$ interface -!!$ subroutine psb_zcsrspspmm(a,b,c,info) -!!$ use psb_z_mat_mod, only : psb_z_csr_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_z_csr_sparse_mat), intent(in) :: a,b -!!$ type(psb_z_csr_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_zcsrspspmm -!!$ subroutine psb_zcscspspmm(a,b,c,info) -!!$ use psb_z_mat_mod, only : psb_z_csc_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_z_csc_sparse_mat), intent(in) :: a,b -!!$ type(psb_z_csc_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_zcscspspmm -!!$ end interface call psb_erractionsave(err_act) info = psb_success_ @@ -136,7 +120,9 @@ end subroutine psb_zspspmm subroutine psb_lzspspmm(a,b,c,info) use psb_mat_mod -! use psb_z_serial_mod, psb_protect_name => psb_lzspspmm + use psb_z_csr_mat_mod + use psb_z_csc_mat_mod + use psb_z_serial_mod, psb_protect_name => psb_lzspspmm implicit none type(psb_lzspmat_type), intent(in) :: a,b @@ -147,25 +133,7 @@ subroutine psb_lzspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -!!$ interface -!!$ subroutine psb_lzcsrspspmm(a,b,c,info) -!!$ use psb_z_mat_mod, only : psb_lz_csr_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_lz_csr_sparse_mat), intent(in) :: a,b -!!$ type(psb_lz_csr_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_lzcsrspspmm -!!$ subroutine psb_lzcscspspmm(a,b,c,info) -!!$ use psb_z_mat_mod, only : psb_lz_csc_sparse_mat -!!$ import :: psb_ipk_ -!!$ implicit none -!!$ class(psb_lz_csc_sparse_mat), intent(in) :: a,b -!!$ type(psb_lz_csc_sparse_mat), intent(out) :: c -!!$ integer(psb_ipk_), intent(out) :: info -!!$ end subroutine psb_lzcscspspmm -!!$ end interface - call psb_erractionsave(err_act) + call psb_erractionsave(err_act) info = psb_success_ if ((a%is_null()) .or.(b%is_null())) then From 13d4bc39d5a0a47869b33db6d52a1e5a8094bebd Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 19 Sep 2025 10:29:30 +0200 Subject: [PATCH 011/175] Update WRITE format string --- linsolve/psb_base_linsolve_conv_mod.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/linsolve/psb_base_linsolve_conv_mod.f90 b/linsolve/psb_base_linsolve_conv_mod.f90 index 8d36fb53a..5eca2b825 100644 --- a/linsolve/psb_base_linsolve_conv_mod.f90 +++ b/linsolve/psb_base_linsolve_conv_mod.f90 @@ -76,7 +76,7 @@ contains character(len=*), intent(in) :: methdname integer(psb_ipk_), intent(in) :: me, itx, itrace real(psb_dpk_), intent(in) :: errnum, errden, eps - character(len=*), parameter :: fmt='(a18,1x,i4,3(2x,es15.9))' + character(len=*), parameter :: fmt='(a18,1x,i4,3(2x,es18.9))' integer(psb_ipk_), parameter :: outlen=18 character(len=len(methdname)) :: mname character(len=outlen) :: outname @@ -102,8 +102,8 @@ contains real(psb_dpk_), optional, intent(out) :: err integer(psb_ipk_), optional, intent(out) :: iter - character(len=*), parameter :: fmt='(a,2x,es15.9,1x,a,1x,i4,1x,a)' - character(len=*), parameter :: fmt1='(a,3(2x,es15.9))' + character(len=*), parameter :: fmt='(a,2x,es18.9,1x,a,1x,i4,1x,a)' + character(len=*), parameter :: fmt1='(a,3(2x,es18.9))' if (errden == dzero) then if (errnum > eps) then From 23261bafe63affcb8d61ad3d241ec3a222ff77ee Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 19 Sep 2025 10:35:20 +0200 Subject: [PATCH 012/175] Restore funny fix for intel --- base/serial/psb_cspspmm.f90 | 122 +++++++++++++++++++++++++++++++++--- base/serial/psb_dspspmm.f90 | 122 +++++++++++++++++++++++++++++++++--- base/serial/psb_sspspmm.f90 | 122 +++++++++++++++++++++++++++++++++--- base/serial/psb_zspspmm.f90 | 122 +++++++++++++++++++++++++++++++++--- 4 files changed, 456 insertions(+), 32 deletions(-) diff --git a/base/serial/psb_cspspmm.f90 b/base/serial/psb_cspspmm.f90 index a62bbcf60..1ceed43d8 100644 --- a/base/serial/psb_cspspmm.f90 +++ b/base/serial/psb_cspspmm.f90 @@ -37,11 +37,10 @@ ! subroutine psb_cspspmm(a,b,c,info) use psb_mat_mod - use psb_c_csr_mat_mod - use psb_c_csc_mat_mod - use psb_c_serial_mod, psb_protect_name => psb_cspspmm - implicit none - +!!$ use psb_c_csr_mat_mod +!!$ use psb_c_csc_mat_mod + !use psb_c_serial_mod, psb_protect_name => psb_cspspmm, only : psb_symbmm, psb_numbmm implicit none + type(psb_cspmat_type), intent(in) :: a,b type(psb_cspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -50,6 +49,60 @@ subroutine psb_cspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + + interface psb_symbmm + subroutine psb_csymbmm(a,b,c,info) + use psb_c_mat_mod, only : psb_cspmat_type + import :: psb_ipk_ + implicit none + type(psb_cspmat_type), intent(in) :: a,b + type(psb_cspmat_type), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_csymbmm + subroutine psb_cbase_symbmm(a,b,c,info) + use psb_c_mat_mod, only : psb_c_base_sparse_mat, psb_c_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_c_base_sparse_mat), intent(in) :: a,b + type(psb_c_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_cbase_symbmm + end interface psb_symbmm + + interface psb_numbmm + subroutine psb_cnumbmm(a,b,c) + use psb_c_mat_mod, only : psb_cspmat_type + import :: psb_ipk_ + implicit none + type(psb_cspmat_type), intent(in) :: a,b + type(psb_cspmat_type), intent(inout) :: c + end subroutine psb_cnumbmm + subroutine psb_cbase_numbmm(a,b,c) + use psb_c_mat_mod, only : psb_c_base_sparse_mat, psb_c_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_c_base_sparse_mat), intent(in) :: a,b + type(psb_c_csr_sparse_mat), intent(inout) :: c + end subroutine psb_cbase_numbmm + end interface psb_numbmm + interface + subroutine psb_ccsrspspmm(a,b,c,info) + use psb_c_mat_mod, only : psb_c_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_c_csr_sparse_mat), intent(in) :: a,b + type(psb_c_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ccsrspspmm + subroutine psb_ccscspspmm(a,b,c,info) + use psb_c_mat_mod, only : psb_c_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_c_csc_sparse_mat), intent(in) :: a,b + type(psb_c_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ccscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ @@ -120,9 +173,9 @@ end subroutine psb_cspspmm subroutine psb_lcspspmm(a,b,c,info) use psb_mat_mod - use psb_c_csr_mat_mod - use psb_c_csc_mat_mod - use psb_c_serial_mod, psb_protect_name => psb_lcspspmm +!!$ use psb_c_csr_mat_mod +!!$ use psb_c_csc_mat_mod + !use psb_c_serial_mod, psb_protect_name => psb_lcspspmm, only : psb_symbmm, psb_numbmm implicit none type(psb_lcspmat_type), intent(in) :: a,b @@ -133,6 +186,59 @@ subroutine psb_lcspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + interface psb_symbmm + subroutine psb_lcsymbmm(a,b,c,info) + use psb_c_mat_mod, only : psb_lcspmat_type + import :: psb_ipk_ + implicit none + type(psb_lcspmat_type), intent(in) :: a,b + type(psb_lcspmat_type), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lcsymbmm + subroutine psb_lcbase_symbmm(a,b,c,info) + use psb_c_mat_mod, only : psb_lc_base_sparse_mat, psb_lc_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lc_base_sparse_mat), intent(in) :: a,b + type(psb_lc_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lcbase_symbmm + end interface psb_symbmm + + interface psb_numbmm + subroutine psb_lcnumbmm(a,b,c) + use psb_c_mat_mod, only : psb_lcspmat_type + import :: psb_ipk_ + implicit none + type(psb_lcspmat_type), intent(in) :: a,b + type(psb_lcspmat_type), intent(inout) :: c + end subroutine psb_lcnumbmm + subroutine psb_lcbase_numbmm(a,b,c) + use psb_c_mat_mod, only : psb_lc_base_sparse_mat, psb_lc_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lc_base_sparse_mat), intent(in) :: a,b + type(psb_lc_csr_sparse_mat), intent(inout) :: c + end subroutine psb_lcbase_numbmm + end interface psb_numbmm + interface + subroutine psb_lccsrspspmm(a,b,c,info) + use psb_c_mat_mod, only : psb_lc_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lc_csr_sparse_mat), intent(in) :: a,b + type(psb_lc_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lccsrspspmm + subroutine psb_lccscspspmm(a,b,c,info) + use psb_c_mat_mod, only : psb_lc_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lc_csc_sparse_mat), intent(in) :: a,b + type(psb_lc_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lccscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_dspspmm.f90 b/base/serial/psb_dspspmm.f90 index 600592083..216313e04 100644 --- a/base/serial/psb_dspspmm.f90 +++ b/base/serial/psb_dspspmm.f90 @@ -37,11 +37,10 @@ ! subroutine psb_dspspmm(a,b,c,info) use psb_mat_mod - use psb_d_csr_mat_mod - use psb_d_csc_mat_mod - use psb_d_serial_mod, psb_protect_name => psb_dspspmm - implicit none - +!!$ use psb_d_csr_mat_mod +!!$ use psb_d_csc_mat_mod + !use psb_d_serial_mod, psb_protect_name => psb_dspspmm, only : psb_symbmm, psb_numbmm implicit none + type(psb_dspmat_type), intent(in) :: a,b type(psb_dspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -50,6 +49,60 @@ subroutine psb_dspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + + interface psb_symbmm + subroutine psb_dsymbmm(a,b,c,info) + use psb_d_mat_mod, only : psb_dspmat_type + import :: psb_ipk_ + implicit none + type(psb_dspmat_type), intent(in) :: a,b + type(psb_dspmat_type), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_dsymbmm + subroutine psb_dbase_symbmm(a,b,c,info) + use psb_d_mat_mod, only : psb_d_base_sparse_mat, psb_d_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_d_base_sparse_mat), intent(in) :: a,b + type(psb_d_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_dbase_symbmm + end interface psb_symbmm + + interface psb_numbmm + subroutine psb_dnumbmm(a,b,c) + use psb_d_mat_mod, only : psb_dspmat_type + import :: psb_ipk_ + implicit none + type(psb_dspmat_type), intent(in) :: a,b + type(psb_dspmat_type), intent(inout) :: c + end subroutine psb_dnumbmm + subroutine psb_dbase_numbmm(a,b,c) + use psb_d_mat_mod, only : psb_d_base_sparse_mat, psb_d_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_d_base_sparse_mat), intent(in) :: a,b + type(psb_d_csr_sparse_mat), intent(inout) :: c + end subroutine psb_dbase_numbmm + end interface psb_numbmm + interface + subroutine psb_dcsrspspmm(a,b,c,info) + use psb_d_mat_mod, only : psb_d_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_d_csr_sparse_mat), intent(in) :: a,b + type(psb_d_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_dcsrspspmm + subroutine psb_dcscspspmm(a,b,c,info) + use psb_d_mat_mod, only : psb_d_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_d_csc_sparse_mat), intent(in) :: a,b + type(psb_d_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_dcscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ @@ -120,9 +173,9 @@ end subroutine psb_dspspmm subroutine psb_ldspspmm(a,b,c,info) use psb_mat_mod - use psb_d_csr_mat_mod - use psb_d_csc_mat_mod - use psb_d_serial_mod, psb_protect_name => psb_ldspspmm +!!$ use psb_d_csr_mat_mod +!!$ use psb_d_csc_mat_mod + !use psb_d_serial_mod, psb_protect_name => psb_ldspspmm, only : psb_symbmm, psb_numbmm implicit none type(psb_ldspmat_type), intent(in) :: a,b @@ -133,6 +186,59 @@ subroutine psb_ldspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + interface psb_symbmm + subroutine psb_ldsymbmm(a,b,c,info) + use psb_d_mat_mod, only : psb_ldspmat_type + import :: psb_ipk_ + implicit none + type(psb_ldspmat_type), intent(in) :: a,b + type(psb_ldspmat_type), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ldsymbmm + subroutine psb_ldbase_symbmm(a,b,c,info) + use psb_d_mat_mod, only : psb_ld_base_sparse_mat, psb_ld_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ld_base_sparse_mat), intent(in) :: a,b + type(psb_ld_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ldbase_symbmm + end interface psb_symbmm + + interface psb_numbmm + subroutine psb_ldnumbmm(a,b,c) + use psb_d_mat_mod, only : psb_ldspmat_type + import :: psb_ipk_ + implicit none + type(psb_ldspmat_type), intent(in) :: a,b + type(psb_ldspmat_type), intent(inout) :: c + end subroutine psb_ldnumbmm + subroutine psb_ldbase_numbmm(a,b,c) + use psb_d_mat_mod, only : psb_ld_base_sparse_mat, psb_ld_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ld_base_sparse_mat), intent(in) :: a,b + type(psb_ld_csr_sparse_mat), intent(inout) :: c + end subroutine psb_ldbase_numbmm + end interface psb_numbmm + interface + subroutine psb_ldcsrspspmm(a,b,c,info) + use psb_d_mat_mod, only : psb_ld_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ld_csr_sparse_mat), intent(in) :: a,b + type(psb_ld_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ldcsrspspmm + subroutine psb_ldcscspspmm(a,b,c,info) + use psb_d_mat_mod, only : psb_ld_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ld_csc_sparse_mat), intent(in) :: a,b + type(psb_ld_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ldcscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_sspspmm.f90 b/base/serial/psb_sspspmm.f90 index 6c05fb798..4dc5df40e 100644 --- a/base/serial/psb_sspspmm.f90 +++ b/base/serial/psb_sspspmm.f90 @@ -37,11 +37,10 @@ ! subroutine psb_sspspmm(a,b,c,info) use psb_mat_mod - use psb_s_csr_mat_mod - use psb_s_csc_mat_mod - use psb_s_serial_mod, psb_protect_name => psb_sspspmm - implicit none - +!!$ use psb_s_csr_mat_mod +!!$ use psb_s_csc_mat_mod + !use psb_s_serial_mod, psb_protect_name => psb_sspspmm, only : psb_symbmm, psb_numbmm implicit none + type(psb_sspmat_type), intent(in) :: a,b type(psb_sspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -50,6 +49,60 @@ subroutine psb_sspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + + interface psb_symbmm + subroutine psb_ssymbmm(a,b,c,info) + use psb_s_mat_mod, only : psb_sspmat_type + import :: psb_ipk_ + implicit none + type(psb_sspmat_type), intent(in) :: a,b + type(psb_sspmat_type), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_ssymbmm + subroutine psb_sbase_symbmm(a,b,c,info) + use psb_s_mat_mod, only : psb_s_base_sparse_mat, psb_s_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_s_base_sparse_mat), intent(in) :: a,b + type(psb_s_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_sbase_symbmm + end interface psb_symbmm + + interface psb_numbmm + subroutine psb_snumbmm(a,b,c) + use psb_s_mat_mod, only : psb_sspmat_type + import :: psb_ipk_ + implicit none + type(psb_sspmat_type), intent(in) :: a,b + type(psb_sspmat_type), intent(inout) :: c + end subroutine psb_snumbmm + subroutine psb_sbase_numbmm(a,b,c) + use psb_s_mat_mod, only : psb_s_base_sparse_mat, psb_s_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_s_base_sparse_mat), intent(in) :: a,b + type(psb_s_csr_sparse_mat), intent(inout) :: c + end subroutine psb_sbase_numbmm + end interface psb_numbmm + interface + subroutine psb_scsrspspmm(a,b,c,info) + use psb_s_mat_mod, only : psb_s_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_s_csr_sparse_mat), intent(in) :: a,b + type(psb_s_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_scsrspspmm + subroutine psb_scscspspmm(a,b,c,info) + use psb_s_mat_mod, only : psb_s_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_s_csc_sparse_mat), intent(in) :: a,b + type(psb_s_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_scscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ @@ -120,9 +173,9 @@ end subroutine psb_sspspmm subroutine psb_lsspspmm(a,b,c,info) use psb_mat_mod - use psb_s_csr_mat_mod - use psb_s_csc_mat_mod - use psb_s_serial_mod, psb_protect_name => psb_lsspspmm +!!$ use psb_s_csr_mat_mod +!!$ use psb_s_csc_mat_mod + !use psb_s_serial_mod, psb_protect_name => psb_lsspspmm, only : psb_symbmm, psb_numbmm implicit none type(psb_lsspmat_type), intent(in) :: a,b @@ -133,6 +186,59 @@ subroutine psb_lsspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + interface psb_symbmm + subroutine psb_lssymbmm(a,b,c,info) + use psb_s_mat_mod, only : psb_lsspmat_type + import :: psb_ipk_ + implicit none + type(psb_lsspmat_type), intent(in) :: a,b + type(psb_lsspmat_type), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lssymbmm + subroutine psb_lsbase_symbmm(a,b,c,info) + use psb_s_mat_mod, only : psb_ls_base_sparse_mat, psb_ls_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ls_base_sparse_mat), intent(in) :: a,b + type(psb_ls_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lsbase_symbmm + end interface psb_symbmm + + interface psb_numbmm + subroutine psb_lsnumbmm(a,b,c) + use psb_s_mat_mod, only : psb_lsspmat_type + import :: psb_ipk_ + implicit none + type(psb_lsspmat_type), intent(in) :: a,b + type(psb_lsspmat_type), intent(inout) :: c + end subroutine psb_lsnumbmm + subroutine psb_lsbase_numbmm(a,b,c) + use psb_s_mat_mod, only : psb_ls_base_sparse_mat, psb_ls_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ls_base_sparse_mat), intent(in) :: a,b + type(psb_ls_csr_sparse_mat), intent(inout) :: c + end subroutine psb_lsbase_numbmm + end interface psb_numbmm + interface + subroutine psb_lscsrspspmm(a,b,c,info) + use psb_s_mat_mod, only : psb_ls_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ls_csr_sparse_mat), intent(in) :: a,b + type(psb_ls_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lscsrspspmm + subroutine psb_lscscspspmm(a,b,c,info) + use psb_s_mat_mod, only : psb_ls_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_ls_csc_sparse_mat), intent(in) :: a,b + type(psb_ls_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lscscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_zspspmm.f90 b/base/serial/psb_zspspmm.f90 index 97ef2c815..831e4b9c3 100644 --- a/base/serial/psb_zspspmm.f90 +++ b/base/serial/psb_zspspmm.f90 @@ -37,11 +37,10 @@ ! subroutine psb_zspspmm(a,b,c,info) use psb_mat_mod - use psb_z_csr_mat_mod - use psb_z_csc_mat_mod - use psb_z_serial_mod, psb_protect_name => psb_zspspmm - implicit none - +!!$ use psb_z_csr_mat_mod +!!$ use psb_z_csc_mat_mod + !use psb_z_serial_mod, psb_protect_name => psb_zspspmm, only : psb_symbmm, psb_numbmm implicit none + type(psb_zspmat_type), intent(in) :: a,b type(psb_zspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -50,6 +49,60 @@ subroutine psb_zspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + + interface psb_symbmm + subroutine psb_zsymbmm(a,b,c,info) + use psb_z_mat_mod, only : psb_zspmat_type + import :: psb_ipk_ + implicit none + type(psb_zspmat_type), intent(in) :: a,b + type(psb_zspmat_type), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_zsymbmm + subroutine psb_zbase_symbmm(a,b,c,info) + use psb_z_mat_mod, only : psb_z_base_sparse_mat, psb_z_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_z_base_sparse_mat), intent(in) :: a,b + type(psb_z_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_zbase_symbmm + end interface psb_symbmm + + interface psb_numbmm + subroutine psb_znumbmm(a,b,c) + use psb_z_mat_mod, only : psb_zspmat_type + import :: psb_ipk_ + implicit none + type(psb_zspmat_type), intent(in) :: a,b + type(psb_zspmat_type), intent(inout) :: c + end subroutine psb_znumbmm + subroutine psb_zbase_numbmm(a,b,c) + use psb_z_mat_mod, only : psb_z_base_sparse_mat, psb_z_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_z_base_sparse_mat), intent(in) :: a,b + type(psb_z_csr_sparse_mat), intent(inout) :: c + end subroutine psb_zbase_numbmm + end interface psb_numbmm + interface + subroutine psb_zcsrspspmm(a,b,c,info) + use psb_z_mat_mod, only : psb_z_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_z_csr_sparse_mat), intent(in) :: a,b + type(psb_z_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_zcsrspspmm + subroutine psb_zcscspspmm(a,b,c,info) + use psb_z_mat_mod, only : psb_z_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_z_csc_sparse_mat), intent(in) :: a,b + type(psb_z_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_zcscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ @@ -120,9 +173,9 @@ end subroutine psb_zspspmm subroutine psb_lzspspmm(a,b,c,info) use psb_mat_mod - use psb_z_csr_mat_mod - use psb_z_csc_mat_mod - use psb_z_serial_mod, psb_protect_name => psb_lzspspmm +!!$ use psb_z_csr_mat_mod +!!$ use psb_z_csc_mat_mod + !use psb_z_serial_mod, psb_protect_name => psb_lzspspmm, only : psb_symbmm, psb_numbmm implicit none type(psb_lzspmat_type), intent(in) :: a,b @@ -133,6 +186,59 @@ subroutine psb_lzspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm + interface psb_symbmm + subroutine psb_lzsymbmm(a,b,c,info) + use psb_z_mat_mod, only : psb_lzspmat_type + import :: psb_ipk_ + implicit none + type(psb_lzspmat_type), intent(in) :: a,b + type(psb_lzspmat_type), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lzsymbmm + subroutine psb_lzbase_symbmm(a,b,c,info) + use psb_z_mat_mod, only : psb_lz_base_sparse_mat, psb_lz_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lz_base_sparse_mat), intent(in) :: a,b + type(psb_lz_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lzbase_symbmm + end interface psb_symbmm + + interface psb_numbmm + subroutine psb_lznumbmm(a,b,c) + use psb_z_mat_mod, only : psb_lzspmat_type + import :: psb_ipk_ + implicit none + type(psb_lzspmat_type), intent(in) :: a,b + type(psb_lzspmat_type), intent(inout) :: c + end subroutine psb_lznumbmm + subroutine psb_lzbase_numbmm(a,b,c) + use psb_z_mat_mod, only : psb_lz_base_sparse_mat, psb_lz_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lz_base_sparse_mat), intent(in) :: a,b + type(psb_lz_csr_sparse_mat), intent(inout) :: c + end subroutine psb_lzbase_numbmm + end interface psb_numbmm + interface + subroutine psb_lzcsrspspmm(a,b,c,info) + use psb_z_mat_mod, only : psb_lz_csr_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lz_csr_sparse_mat), intent(in) :: a,b + type(psb_lz_csr_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lzcsrspspmm + subroutine psb_lzcscspspmm(a,b,c,info) + use psb_z_mat_mod, only : psb_lz_csc_sparse_mat + import :: psb_ipk_ + implicit none + class(psb_lz_csc_sparse_mat), intent(in) :: a,b + type(psb_lz_csc_sparse_mat), intent(out) :: c + integer(psb_ipk_), intent(out) :: info + end subroutine psb_lzcscspspmm + end interface call psb_erractionsave(err_act) info = psb_success_ From 5a0ef22cc2bba59b9fb73f38b00f5ebf8e809f8c Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 19 Sep 2025 10:55:49 +0200 Subject: [PATCH 013/175] Rename spspmm --- base/serial/{psb_cspspmm.f90 => psb_cspspmm.F90} | 0 base/serial/{psb_dspspmm.f90 => psb_dspspmm.F90} | 0 base/serial/{psb_sspspmm.f90 => psb_sspspmm.F90} | 0 base/serial/{psb_zspspmm.f90 => psb_zspspmm.F90} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename base/serial/{psb_cspspmm.f90 => psb_cspspmm.F90} (100%) rename base/serial/{psb_dspspmm.f90 => psb_dspspmm.F90} (100%) rename base/serial/{psb_sspspmm.f90 => psb_sspspmm.F90} (100%) rename base/serial/{psb_zspspmm.f90 => psb_zspspmm.F90} (100%) diff --git a/base/serial/psb_cspspmm.f90 b/base/serial/psb_cspspmm.F90 similarity index 100% rename from base/serial/psb_cspspmm.f90 rename to base/serial/psb_cspspmm.F90 diff --git a/base/serial/psb_dspspmm.f90 b/base/serial/psb_dspspmm.F90 similarity index 100% rename from base/serial/psb_dspspmm.f90 rename to base/serial/psb_dspspmm.F90 diff --git a/base/serial/psb_sspspmm.f90 b/base/serial/psb_sspspmm.F90 similarity index 100% rename from base/serial/psb_sspspmm.f90 rename to base/serial/psb_sspspmm.F90 diff --git a/base/serial/psb_zspspmm.f90 b/base/serial/psb_zspspmm.F90 similarity index 100% rename from base/serial/psb_zspspmm.f90 rename to base/serial/psb_zspspmm.F90 From aa308390745e5c0df04eed808eda0e01d5691bab Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 19 Sep 2025 12:18:11 +0200 Subject: [PATCH 014/175] Fix define for compilers, and INTEL fix. --- base/comm/internals/psi_cswapdata_a.F90 | 4 ++-- base/comm/internals/psi_cswaptran_a.F90 | 4 ++-- base/comm/internals/psi_dswapdata_a.F90 | 4 ++-- base/comm/internals/psi_dswaptran_a.F90 | 4 ++-- base/comm/internals/psi_eswapdata_a.F90 | 4 ++-- base/comm/internals/psi_eswaptran_a.F90 | 4 ++-- base/comm/internals/psi_i2swapdata_a.F90 | 4 ++-- base/comm/internals/psi_i2swaptran_a.F90 | 4 ++-- base/comm/internals/psi_mswapdata_a.F90 | 4 ++-- base/comm/internals/psi_mswaptran_a.F90 | 4 ++-- base/comm/internals/psi_sswapdata_a.F90 | 4 ++-- base/comm/internals/psi_sswaptran_a.F90 | 4 ++-- base/comm/internals/psi_zswapdata_a.F90 | 4 ++-- base/comm/internals/psi_zswaptran_a.F90 | 4 ++-- base/serial/psb_cspspmm.F90 | 25 ++++++++++++++++-------- base/serial/psb_dspspmm.F90 | 25 ++++++++++++++++-------- base/serial/psb_sspspmm.F90 | 25 ++++++++++++++++-------- base/serial/psb_zspspmm.F90 | 25 ++++++++++++++++-------- configure | 8 ++++---- configure.ac | 8 ++++---- 20 files changed, 104 insertions(+), 68 deletions(-) diff --git a/base/comm/internals/psi_cswapdata_a.F90 b/base/comm/internals/psi_cswapdata_a.F90 index 8b1373972..844daa00a 100644 --- a/base/comm/internals/psi_cswapdata_a.F90 +++ b/base/comm/internals/psi_cswapdata_a.F90 @@ -193,7 +193,7 @@ subroutine psi_cswapidxm(ctxt,icomm,flag,n,beta,y,idx, & logical, parameter :: usersend=.false. complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -680,7 +680,7 @@ subroutine psi_cswapidxv(ctxt,icomm,flag,beta,y,idx, & logical, parameter :: usersend=.false. complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_cswaptran_a.F90 b/base/comm/internals/psi_cswaptran_a.F90 index 3fa61d946..e46a556d3 100644 --- a/base/comm/internals/psi_cswaptran_a.F90 +++ b/base/comm/internals/psi_cswaptran_a.F90 @@ -197,7 +197,7 @@ subroutine psi_ctranidxm(ctxt,icomm,flag,n,beta,y,idx,& logical, parameter :: usersend=.false. complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -691,7 +691,7 @@ subroutine psi_ctranidxv(ctxt,icomm,flag,beta,y,idx,& logical, parameter :: usersend=.false. complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_dswapdata_a.F90 b/base/comm/internals/psi_dswapdata_a.F90 index 6f1d4a10c..d86025cff 100644 --- a/base/comm/internals/psi_dswapdata_a.F90 +++ b/base/comm/internals/psi_dswapdata_a.F90 @@ -193,7 +193,7 @@ subroutine psi_dswapidxm(ctxt,icomm,flag,n,beta,y,idx, & logical, parameter :: usersend=.false. real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -680,7 +680,7 @@ subroutine psi_dswapidxv(ctxt,icomm,flag,beta,y,idx, & logical, parameter :: usersend=.false. real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_dswaptran_a.F90 b/base/comm/internals/psi_dswaptran_a.F90 index df04c3914..e5966c2e0 100644 --- a/base/comm/internals/psi_dswaptran_a.F90 +++ b/base/comm/internals/psi_dswaptran_a.F90 @@ -197,7 +197,7 @@ subroutine psi_dtranidxm(ctxt,icomm,flag,n,beta,y,idx,& logical, parameter :: usersend=.false. real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -691,7 +691,7 @@ subroutine psi_dtranidxv(ctxt,icomm,flag,beta,y,idx,& logical, parameter :: usersend=.false. real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_eswapdata_a.F90 b/base/comm/internals/psi_eswapdata_a.F90 index 6e2d95578..d917b64cd 100644 --- a/base/comm/internals/psi_eswapdata_a.F90 +++ b/base/comm/internals/psi_eswapdata_a.F90 @@ -193,7 +193,7 @@ subroutine psi_eswapidxm(ctxt,icomm,flag,n,beta,y,idx, & logical, parameter :: usersend=.false. integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -680,7 +680,7 @@ subroutine psi_eswapidxv(ctxt,icomm,flag,beta,y,idx, & logical, parameter :: usersend=.false. integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_eswaptran_a.F90 b/base/comm/internals/psi_eswaptran_a.F90 index e105c88b6..67a925699 100644 --- a/base/comm/internals/psi_eswaptran_a.F90 +++ b/base/comm/internals/psi_eswaptran_a.F90 @@ -197,7 +197,7 @@ subroutine psi_etranidxm(ctxt,icomm,flag,n,beta,y,idx,& logical, parameter :: usersend=.false. integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -691,7 +691,7 @@ subroutine psi_etranidxv(ctxt,icomm,flag,beta,y,idx,& logical, parameter :: usersend=.false. integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_i2swapdata_a.F90 b/base/comm/internals/psi_i2swapdata_a.F90 index 4acdbc9e5..3d82d5b11 100644 --- a/base/comm/internals/psi_i2swapdata_a.F90 +++ b/base/comm/internals/psi_i2swapdata_a.F90 @@ -193,7 +193,7 @@ subroutine psi_i2swapidxm(ctxt,icomm,flag,n,beta,y,idx, & logical, parameter :: usersend=.false. integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -680,7 +680,7 @@ subroutine psi_i2swapidxv(ctxt,icomm,flag,beta,y,idx, & logical, parameter :: usersend=.false. integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_i2swaptran_a.F90 b/base/comm/internals/psi_i2swaptran_a.F90 index f879702cf..925e8a0cb 100644 --- a/base/comm/internals/psi_i2swaptran_a.F90 +++ b/base/comm/internals/psi_i2swaptran_a.F90 @@ -197,7 +197,7 @@ subroutine psi_i2tranidxm(ctxt,icomm,flag,n,beta,y,idx,& logical, parameter :: usersend=.false. integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -691,7 +691,7 @@ subroutine psi_i2tranidxv(ctxt,icomm,flag,beta,y,idx,& logical, parameter :: usersend=.false. integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_mswapdata_a.F90 b/base/comm/internals/psi_mswapdata_a.F90 index 0a1a3a61f..bda186b8e 100644 --- a/base/comm/internals/psi_mswapdata_a.F90 +++ b/base/comm/internals/psi_mswapdata_a.F90 @@ -193,7 +193,7 @@ subroutine psi_mswapidxm(ctxt,icomm,flag,n,beta,y,idx, & logical, parameter :: usersend=.false. integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -680,7 +680,7 @@ subroutine psi_mswapidxv(ctxt,icomm,flag,beta,y,idx, & logical, parameter :: usersend=.false. integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_mswaptran_a.F90 b/base/comm/internals/psi_mswaptran_a.F90 index 8d6e0b52f..65e3e6c7d 100644 --- a/base/comm/internals/psi_mswaptran_a.F90 +++ b/base/comm/internals/psi_mswaptran_a.F90 @@ -197,7 +197,7 @@ subroutine psi_mtranidxm(ctxt,icomm,flag,n,beta,y,idx,& logical, parameter :: usersend=.false. integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -691,7 +691,7 @@ subroutine psi_mtranidxv(ctxt,icomm,flag,beta,y,idx,& logical, parameter :: usersend=.false. integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_sswapdata_a.F90 b/base/comm/internals/psi_sswapdata_a.F90 index 0f1f26da0..ae4561621 100644 --- a/base/comm/internals/psi_sswapdata_a.F90 +++ b/base/comm/internals/psi_sswapdata_a.F90 @@ -193,7 +193,7 @@ subroutine psi_sswapidxm(ctxt,icomm,flag,n,beta,y,idx, & logical, parameter :: usersend=.false. real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -680,7 +680,7 @@ subroutine psi_sswapidxv(ctxt,icomm,flag,beta,y,idx, & logical, parameter :: usersend=.false. real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_sswaptran_a.F90 b/base/comm/internals/psi_sswaptran_a.F90 index 10e741ddb..f4f9513ed 100644 --- a/base/comm/internals/psi_sswaptran_a.F90 +++ b/base/comm/internals/psi_sswaptran_a.F90 @@ -197,7 +197,7 @@ subroutine psi_stranidxm(ctxt,icomm,flag,n,beta,y,idx,& logical, parameter :: usersend=.false. real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -691,7 +691,7 @@ subroutine psi_stranidxv(ctxt,icomm,flag,beta,y,idx,& logical, parameter :: usersend=.false. real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_zswapdata_a.F90 b/base/comm/internals/psi_zswapdata_a.F90 index f37dc1c7a..c0ac76f53 100644 --- a/base/comm/internals/psi_zswapdata_a.F90 +++ b/base/comm/internals/psi_zswapdata_a.F90 @@ -193,7 +193,7 @@ subroutine psi_zswapidxm(ctxt,icomm,flag,n,beta,y,idx, & logical, parameter :: usersend=.false. complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -680,7 +680,7 @@ subroutine psi_zswapidxv(ctxt,icomm,flag,beta,y,idx, & logical, parameter :: usersend=.false. complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/comm/internals/psi_zswaptran_a.F90 b/base/comm/internals/psi_zswaptran_a.F90 index 8b4e4268c..804acb6bd 100644 --- a/base/comm/internals/psi_zswaptran_a.F90 +++ b/base/comm/internals/psi_zswaptran_a.F90 @@ -197,7 +197,7 @@ subroutine psi_ztranidxm(ctxt,icomm,flag,n,beta,y,idx,& logical, parameter :: usersend=.false. complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name @@ -691,7 +691,7 @@ subroutine psi_ztranidxv(ctxt,icomm,flag,beta,y,idx,& logical, parameter :: usersend=.false. complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf -#if !defined(FLANG) +#if !defined(PSB_CMP_FLANG) volatile :: sndbuf, rcvbuf #endif character(len=20) :: name diff --git a/base/serial/psb_cspspmm.F90 b/base/serial/psb_cspspmm.F90 index 1ceed43d8..865c1922c 100644 --- a/base/serial/psb_cspspmm.F90 +++ b/base/serial/psb_cspspmm.F90 @@ -37,10 +37,11 @@ ! subroutine psb_cspspmm(a,b,c,info) use psb_mat_mod -!!$ use psb_c_csr_mat_mod -!!$ use psb_c_csc_mat_mod - !use psb_c_serial_mod, psb_protect_name => psb_cspspmm, only : psb_symbmm, psb_numbmm implicit none - +#if !defined(PSB_CMP_INTEL) + use psb_c_csr_mat_mod + use psb_c_csc_mat_mod + use psb_c_serial_mod, psb_protect_name => psb_cspspmm +#endif type(psb_cspmat_type), intent(in) :: a,b type(psb_cspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -49,7 +50,8 @@ subroutine psb_cspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - + +#if defined(PSB_CMP_INTEL) interface psb_symbmm subroutine psb_csymbmm(a,b,c,info) use psb_c_mat_mod, only : psb_cspmat_type @@ -103,6 +105,8 @@ subroutine psb_cspspmm(a,b,c,info) integer(psb_ipk_), intent(out) :: info end subroutine psb_ccscspspmm end interface +#endif + call psb_erractionsave(err_act) info = psb_success_ @@ -173,9 +177,11 @@ end subroutine psb_cspspmm subroutine psb_lcspspmm(a,b,c,info) use psb_mat_mod -!!$ use psb_c_csr_mat_mod -!!$ use psb_c_csc_mat_mod - !use psb_c_serial_mod, psb_protect_name => psb_lcspspmm, only : psb_symbmm, psb_numbmm +#if !defined(PSB_CMP_INTEL) + use psb_c_csr_mat_mod + use psb_c_csc_mat_mod + use psb_c_serial_mod, psb_protect_name => psb_lcspspmm +#endif implicit none type(psb_lcspmat_type), intent(in) :: a,b @@ -186,6 +192,7 @@ subroutine psb_lcspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm +#if defined(PSB_CMP_INTEL) interface psb_symbmm subroutine psb_lcsymbmm(a,b,c,info) use psb_c_mat_mod, only : psb_lcspmat_type @@ -239,6 +246,8 @@ subroutine psb_lcspspmm(a,b,c,info) integer(psb_ipk_), intent(out) :: info end subroutine psb_lccscspspmm end interface +#endif + call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_dspspmm.F90 b/base/serial/psb_dspspmm.F90 index 216313e04..f7e37fe7b 100644 --- a/base/serial/psb_dspspmm.F90 +++ b/base/serial/psb_dspspmm.F90 @@ -37,10 +37,11 @@ ! subroutine psb_dspspmm(a,b,c,info) use psb_mat_mod -!!$ use psb_d_csr_mat_mod -!!$ use psb_d_csc_mat_mod - !use psb_d_serial_mod, psb_protect_name => psb_dspspmm, only : psb_symbmm, psb_numbmm implicit none - +#if !defined(PSB_CMP_INTEL) + use psb_d_csr_mat_mod + use psb_d_csc_mat_mod + use psb_d_serial_mod, psb_protect_name => psb_dspspmm +#endif type(psb_dspmat_type), intent(in) :: a,b type(psb_dspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -49,7 +50,8 @@ subroutine psb_dspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - + +#if defined(PSB_CMP_INTEL) interface psb_symbmm subroutine psb_dsymbmm(a,b,c,info) use psb_d_mat_mod, only : psb_dspmat_type @@ -103,6 +105,8 @@ subroutine psb_dspspmm(a,b,c,info) integer(psb_ipk_), intent(out) :: info end subroutine psb_dcscspspmm end interface +#endif + call psb_erractionsave(err_act) info = psb_success_ @@ -173,9 +177,11 @@ end subroutine psb_dspspmm subroutine psb_ldspspmm(a,b,c,info) use psb_mat_mod -!!$ use psb_d_csr_mat_mod -!!$ use psb_d_csc_mat_mod - !use psb_d_serial_mod, psb_protect_name => psb_ldspspmm, only : psb_symbmm, psb_numbmm +#if !defined(PSB_CMP_INTEL) + use psb_d_csr_mat_mod + use psb_d_csc_mat_mod + use psb_d_serial_mod, psb_protect_name => psb_ldspspmm +#endif implicit none type(psb_ldspmat_type), intent(in) :: a,b @@ -186,6 +192,7 @@ subroutine psb_ldspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm +#if defined(PSB_CMP_INTEL) interface psb_symbmm subroutine psb_ldsymbmm(a,b,c,info) use psb_d_mat_mod, only : psb_ldspmat_type @@ -239,6 +246,8 @@ subroutine psb_ldspspmm(a,b,c,info) integer(psb_ipk_), intent(out) :: info end subroutine psb_ldcscspspmm end interface +#endif + call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_sspspmm.F90 b/base/serial/psb_sspspmm.F90 index 4dc5df40e..4af561764 100644 --- a/base/serial/psb_sspspmm.F90 +++ b/base/serial/psb_sspspmm.F90 @@ -37,10 +37,11 @@ ! subroutine psb_sspspmm(a,b,c,info) use psb_mat_mod -!!$ use psb_s_csr_mat_mod -!!$ use psb_s_csc_mat_mod - !use psb_s_serial_mod, psb_protect_name => psb_sspspmm, only : psb_symbmm, psb_numbmm implicit none - +#if !defined(PSB_CMP_INTEL) + use psb_s_csr_mat_mod + use psb_s_csc_mat_mod + use psb_s_serial_mod, psb_protect_name => psb_sspspmm +#endif type(psb_sspmat_type), intent(in) :: a,b type(psb_sspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -49,7 +50,8 @@ subroutine psb_sspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - + +#if defined(PSB_CMP_INTEL) interface psb_symbmm subroutine psb_ssymbmm(a,b,c,info) use psb_s_mat_mod, only : psb_sspmat_type @@ -103,6 +105,8 @@ subroutine psb_sspspmm(a,b,c,info) integer(psb_ipk_), intent(out) :: info end subroutine psb_scscspspmm end interface +#endif + call psb_erractionsave(err_act) info = psb_success_ @@ -173,9 +177,11 @@ end subroutine psb_sspspmm subroutine psb_lsspspmm(a,b,c,info) use psb_mat_mod -!!$ use psb_s_csr_mat_mod -!!$ use psb_s_csc_mat_mod - !use psb_s_serial_mod, psb_protect_name => psb_lsspspmm, only : psb_symbmm, psb_numbmm +#if !defined(PSB_CMP_INTEL) + use psb_s_csr_mat_mod + use psb_s_csc_mat_mod + use psb_s_serial_mod, psb_protect_name => psb_lsspspmm +#endif implicit none type(psb_lsspmat_type), intent(in) :: a,b @@ -186,6 +192,7 @@ subroutine psb_lsspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm +#if defined(PSB_CMP_INTEL) interface psb_symbmm subroutine psb_lssymbmm(a,b,c,info) use psb_s_mat_mod, only : psb_lsspmat_type @@ -239,6 +246,8 @@ subroutine psb_lsspspmm(a,b,c,info) integer(psb_ipk_), intent(out) :: info end subroutine psb_lscscspspmm end interface +#endif + call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_zspspmm.F90 b/base/serial/psb_zspspmm.F90 index 831e4b9c3..95d1e112b 100644 --- a/base/serial/psb_zspspmm.F90 +++ b/base/serial/psb_zspspmm.F90 @@ -37,10 +37,11 @@ ! subroutine psb_zspspmm(a,b,c,info) use psb_mat_mod -!!$ use psb_z_csr_mat_mod -!!$ use psb_z_csc_mat_mod - !use psb_z_serial_mod, psb_protect_name => psb_zspspmm, only : psb_symbmm, psb_numbmm implicit none - +#if !defined(PSB_CMP_INTEL) + use psb_z_csr_mat_mod + use psb_z_csc_mat_mod + use psb_z_serial_mod, psb_protect_name => psb_zspspmm +#endif type(psb_zspmat_type), intent(in) :: a,b type(psb_zspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -49,7 +50,8 @@ subroutine psb_zspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm - + +#if defined(PSB_CMP_INTEL) interface psb_symbmm subroutine psb_zsymbmm(a,b,c,info) use psb_z_mat_mod, only : psb_zspmat_type @@ -103,6 +105,8 @@ subroutine psb_zspspmm(a,b,c,info) integer(psb_ipk_), intent(out) :: info end subroutine psb_zcscspspmm end interface +#endif + call psb_erractionsave(err_act) info = psb_success_ @@ -173,9 +177,11 @@ end subroutine psb_zspspmm subroutine psb_lzspspmm(a,b,c,info) use psb_mat_mod -!!$ use psb_z_csr_mat_mod -!!$ use psb_z_csc_mat_mod - !use psb_z_serial_mod, psb_protect_name => psb_lzspspmm, only : psb_symbmm, psb_numbmm +#if !defined(PSB_CMP_INTEL) + use psb_z_csr_mat_mod + use psb_z_csc_mat_mod + use psb_z_serial_mod, psb_protect_name => psb_lzspspmm +#endif implicit none type(psb_lzspmat_type), intent(in) :: a,b @@ -186,6 +192,7 @@ subroutine psb_lzspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm +#if defined(PSB_CMP_INTEL) interface psb_symbmm subroutine psb_lzsymbmm(a,b,c,info) use psb_z_mat_mod, only : psb_lzspmat_type @@ -239,6 +246,8 @@ subroutine psb_lzspspmm(a,b,c,info) integer(psb_ipk_), intent(out) :: info end subroutine psb_lzcscspspmm end interface +#endif + call psb_erractionsave(err_act) info = psb_success_ diff --git a/configure b/configure index 0658f499c..388ffae9f 100755 --- a/configure +++ b/configure @@ -6989,7 +6989,7 @@ if test x"$psblas_cv_fc" == "x" ; then # TODO : discover the exact conditions when the usage of -WF is needed. psblas_cv_define_prepend="-WF," if eval "$MPIFC -qversion 2>&1 | grep -e\"Version: 10\.\" 2>/dev/null"; then - FDEFINES="$psblas_cv_define_prepend-DXLF_10 $FDEFINES"; sed -e's/(0-9*).*/$1/p' + FDEFINES="$psblas_cv_define_prepend-DPSB_CMP_XLF_10 $FDEFINES"; sed -e's/(0-9*).*/$1/p' fi # Note : there could be problems with old xlf compiler versions ( <10.1 ) @@ -7005,7 +7005,7 @@ if test x"$psblas_cv_fc" == "x" ; then psblas_flang_version=`flang-new --version |grep flang| sed -e 's/^ *flang.* version *//gi'`; psblas_flang_shv=`flang-new --version |grep flang| sed -e 's/^ *flang.* version *//gi' | sed -e's/\./ /g' | awk '{print $1}'`; psblas_cv_define_prepend=""; - FDEFINES="$psblas_cv_define_prepend-DFLANG $FDEFINES" + FDEFINES="$psblas_cv_define_prepend-DPSB_CMP_FLANG $FDEFINES" psblas_shvs=`echo $psblas_flang_shv|sed -e's/^0-9*//g'`; if test x"$psblas_shvs" != x""; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Running with LLVM $psblas_flang_version ($psblas_flang_shv). " >&5 @@ -7024,7 +7024,7 @@ printf "%s\n" "$as_me: Running with LLVM $psblas_flang_version ($psblas_flang_ psblas_flang_shv=`flang --version |grep flang| sed -e 's/^ *flang.* version *//gi' | sed -e's/\./ /g' | awk '{print $1}'`; psblas_cv_fc="flang"; psblas_cv_define_prepend=""; - FDEFINES="$psblas_cv_define_prepend-DFLANG $FDEFINES" + FDEFINES="$psblas_cv_define_prepend-DPSB_CMP_FLANG $FDEFINES" psblas_shvs=`echo $psblas_flang_shv|sed -e's/^0-9*//g'`; if test x"$psblas_shvs" != x""; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Running with LLVM $psblas_flang_version ($psblas_flang_shv). " >&5 @@ -7037,7 +7037,7 @@ printf "%s\n" "$as_me: Running with LLVM $psblas_flang_version ($psblas_flang_ fi elif eval "$MPIFC -V 2>&1 | grep Intel.*Fortran.*Compiler 2>/dev/null" ; then # Intel compiler identification - + FDEFINES="$psblas_cv_define_prepend-DPSB_CMP_INTEL $FDEFINES" psblas_cv_fc="ifc"; elif eval "$MPIFC -v 2>&1 | grep NAG 2>/dev/null" ; then psblas_cv_fc="nag"; diff --git a/configure.ac b/configure.ac index 2f472dea7..f3c786643 100644 --- a/configure.ac +++ b/configure.ac @@ -242,7 +242,7 @@ if test x"$psblas_cv_fc" == "x" ; then # TODO : discover the exact conditions when the usage of -WF is needed. psblas_cv_define_prepend="-WF," if eval "$MPIFC -qversion 2>&1 | grep -e\"Version: 10\.\" 2>/dev/null"; then - FDEFINES="$psblas_cv_define_prepend-DXLF_10 $FDEFINES"; sed -e's/([0-9]*).*/$1/p' + FDEFINES="$psblas_cv_define_prepend-DPSB_CMP_XLF_10 $FDEFINES"; sed -e's/([0-9]*).*/$1/p' fi # Note : there could be problems with old xlf compiler versions ( <10.1 ) @@ -258,7 +258,7 @@ if test x"$psblas_cv_fc" == "x" ; then psblas_flang_version=`flang-new --version |grep flang| sed -e 's/^ *flang.* version *//gi'`; psblas_flang_shv=`flang-new --version |grep flang| sed -e 's/^ *flang.* version *//gi' | sed -e's/\./ /g' | awk '{print $1}'`; psblas_cv_define_prepend=""; - FDEFINES="$psblas_cv_define_prepend-DFLANG $FDEFINES" + FDEFINES="$psblas_cv_define_prepend-DPSB_CMP_FLANG $FDEFINES" psblas_shvs=`echo $psblas_flang_shv|sed -e's/[^0-9]*//g'`; if test x"$psblas_shvs" != x""; then AC_MSG_NOTICE([[Running with LLVM $psblas_flang_version ($psblas_flang_shv). ]]) @@ -276,7 +276,7 @@ if test x"$psblas_cv_fc" == "x" ; then psblas_flang_shv=`flang --version |grep flang| sed -e 's/^ *flang.* version *//gi' | sed -e's/\./ /g' | awk '{print $1}'`; psblas_cv_fc="flang"; psblas_cv_define_prepend=""; - FDEFINES="$psblas_cv_define_prepend-DFLANG $FDEFINES" + FDEFINES="$psblas_cv_define_prepend-DPSB_CMP_FLANG $FDEFINES" psblas_shvs=`echo $psblas_flang_shv|sed -e's/[^0-9]*//g'`; if test x"$psblas_shvs" != x""; then AC_MSG_NOTICE([[Running with LLVM $psblas_flang_version ($psblas_flang_shv). ]]) @@ -288,7 +288,7 @@ if test x"$psblas_cv_fc" == "x" ; then fi elif eval "$MPIFC -V 2>&1 | grep Intel.*Fortran.*Compiler 2>/dev/null" ; then # Intel compiler identification - + FDEFINES="$psblas_cv_define_prepend-DPSB_CMP_INTEL $FDEFINES" psblas_cv_fc="ifc"; elif eval "$MPIFC -v 2>&1 | grep NAG 2>/dev/null" ; then psblas_cv_fc="nag"; From cdad04813ba1b3346505821ebc5503caa29d9472 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 22 Sep 2025 13:24:07 +0200 Subject: [PATCH 015/175] Fix handling of tags for P2P and swap --- base/modules/penv/psi_penv_mod.F90 | 246 ++++++++++------------------- 1 file changed, 87 insertions(+), 159 deletions(-) diff --git a/base/modules/penv/psi_penv_mod.F90 b/base/modules/penv/psi_penv_mod.F90 index 7091411de..320df9417 100644 --- a/base/modules/penv/psi_penv_mod.F90 +++ b/base/modules/penv/psi_penv_mod.F90 @@ -49,7 +49,9 @@ module mpi integer(psb_mpk_), parameter :: mpi_integer4 = 10 integer(psb_mpk_), parameter :: mpi_comm_null = -1 integer(psb_mpk_), parameter :: mpi_comm_world = 1 - + + integer(psb_mpk_), parameter :: mpi_address_kind = psb_epk_ + !real(psb_dpk_), external :: mpi_wtime interface @@ -179,44 +181,53 @@ end module mpi module psi_penv_mod use psb_const_mod use iso_c_binding - - integer(psb_mpk_), parameter:: psb_int_tag = 543987 - integer(psb_mpk_), parameter:: psb_real_tag = psb_int_tag + 1 - integer(psb_mpk_), parameter:: psb_double_tag = psb_real_tag + 1 - integer(psb_mpk_), parameter:: psb_complex_tag = psb_double_tag + 1 - integer(psb_mpk_), parameter:: psb_dcomplex_tag = psb_complex_tag + 1 - integer(psb_mpk_), parameter:: psb_logical_tag = psb_dcomplex_tag + 1 - integer(psb_mpk_), parameter:: psb_char_tag = psb_logical_tag + 1 - integer(psb_mpk_), parameter:: psb_int8_tag = psb_char_tag + 1 - integer(psb_mpk_), parameter:: psb_int2_tag = psb_int8_tag + 1 - integer(psb_mpk_), parameter:: psb_int4_tag = psb_int2_tag + 1 - integer(psb_mpk_), parameter:: psb_long_tag = psb_int4_tag + 1 - - integer(psb_mpk_), parameter:: psb_int_swap_tag = psb_int_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_real_swap_tag = psb_real_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_double_swap_tag = psb_double_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_complex_swap_tag = psb_complex_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_dcomplex_swap_tag = psb_dcomplex_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_logical_swap_tag = psb_logical_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_char_swap_tag = psb_char_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_int8_swap_tag = psb_int8_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_int2_swap_tag = psb_int2_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_int4_swap_tag = psb_int4_tag + psb_int_tag - integer(psb_mpk_), parameter:: psb_long_swap_tag = psb_long_tag + psb_int_tag - +#ifdef PSB_MPI_MOD + use mpi +#endif +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + integer(psb_mpk_), parameter :: psb_apk_ = mpi_address_kind + + integer(psb_mpk_), parameter :: psb_tag_space = 200 + + integer(psb_mpk_), save :: psb_int_tag + integer(psb_mpk_), save :: psb_real_tag + integer(psb_mpk_), save :: psb_double_tag + integer(psb_mpk_), save :: psb_complex_tag + integer(psb_mpk_), save :: psb_dcomplex_tag + integer(psb_mpk_), save :: psb_logical_tag + integer(psb_mpk_), save :: psb_char_tag + integer(psb_mpk_), save :: psb_int8_tag + integer(psb_mpk_), save :: psb_int2_tag + integer(psb_mpk_), save :: psb_int4_tag + integer(psb_mpk_), save :: psb_long_tag + integer(psb_mpk_), save :: psb_max_simple_tag + integer(psb_mpk_), save :: psb_int_swap_tag + integer(psb_mpk_), save :: psb_real_swap_tag + integer(psb_mpk_), save :: psb_double_swap_tag + integer(psb_mpk_), save :: psb_complex_swap_tag + integer(psb_mpk_), save :: psb_dcomplex_swap_tag + integer(psb_mpk_), save :: psb_logical_swap_tag + integer(psb_mpk_), save :: psb_char_swap_tag + integer(psb_mpk_), save :: psb_int8_swap_tag + integer(psb_mpk_), save :: psb_int2_swap_tag + integer(psb_mpk_), save :: psb_int4_swap_tag + integer(psb_mpk_), save :: psb_long_swap_tag - integer(psb_mpk_), private, parameter:: psb_int_type = 987543 - integer(psb_mpk_), private, parameter:: psb_real_type = psb_int_type + 1 - integer(psb_mpk_), private, parameter:: psb_double_type = psb_real_type + 1 - integer(psb_mpk_), private, parameter:: psb_complex_type = psb_double_type + 1 - integer(psb_mpk_), private, parameter:: psb_dcomplex_type = psb_complex_type + 1 - integer(psb_mpk_), private, parameter:: psb_logical_type = psb_dcomplex_type + 1 - integer(psb_mpk_), private, parameter:: psb_char_type = psb_logical_type + 1 - integer(psb_mpk_), private, parameter:: psb_int8_type = psb_char_type + 1 - integer(psb_mpk_), private, parameter:: psb_int2_type = psb_int8_type + 1 - integer(psb_mpk_), private, parameter:: psb_int4_type = psb_int2_type + 1 - integer(psb_mpk_), private, parameter:: psb_long_type = psb_int4_type + 1 + integer(psb_mpk_), private, parameter :: psb_int_type = 200 + integer(psb_mpk_), private, parameter :: psb_real_type = psb_int_type + 1 + integer(psb_mpk_), private, parameter :: psb_double_type = psb_real_type + 1 + integer(psb_mpk_), private, parameter :: psb_complex_type = psb_double_type + 1 + integer(psb_mpk_), private, parameter :: psb_dcomplex_type = psb_complex_type + 1 + integer(psb_mpk_), private, parameter :: psb_logical_type = psb_dcomplex_type + 1 + integer(psb_mpk_), private, parameter :: psb_char_type = psb_logical_type + 1 + integer(psb_mpk_), private, parameter :: psb_int8_type = psb_char_type + 1 + integer(psb_mpk_), private, parameter :: psb_int2_type = psb_int8_type + 1 + integer(psb_mpk_), private, parameter :: psb_int4_type = psb_int2_type + 1 + integer(psb_mpk_), private, parameter :: psb_long_type = psb_int4_type + 1 type psb_buffer_node integer(psb_mpk_) :: request @@ -304,7 +315,7 @@ module psi_penv_mod #endif - private :: psi_get_sizes, psi_register_mpi_extras + private :: psi_get_sizes, psi_register_mpi_const private :: psi_i2amx_op, psi_i2amn_op private :: psi_iamx_op, psi_iamn_op private :: psi_mamx_op, psi_mamn_op @@ -341,13 +352,7 @@ contains end subroutine psb_init_queue subroutine psb_wait_buffer(node, info) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_buffer_node), intent(inout) :: node integer(psb_ipk_), intent(out) :: info integer(psb_mpk_) :: status(mpi_status_size),minfo @@ -357,13 +362,7 @@ contains end subroutine psb_wait_buffer subroutine psb_test_buffer(node, flag, info) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_buffer_node), intent(inout) :: node logical, intent(out) :: flag integer(psb_ipk_), intent(out) :: info @@ -476,13 +475,7 @@ contains ! ! !!!!!!!!!!!!!!!!! subroutine psi_msnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest integer(psb_mpk_), allocatable, intent(inout) :: buffer(:) @@ -515,13 +508,7 @@ contains subroutine psi_esnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest integer(psb_epk_), allocatable, intent(inout) :: buffer(:) @@ -552,13 +539,7 @@ contains end subroutine psi_esnd subroutine psi_i2snd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest integer(psb_i2pk_), allocatable, intent(inout) :: buffer(:) @@ -589,13 +570,7 @@ contains end subroutine psi_i2snd subroutine psi_ssnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest real(psb_spk_), allocatable, intent(inout) :: buffer(:) @@ -626,13 +601,7 @@ contains end subroutine psi_ssnd subroutine psi_dsnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest real(psb_dpk_), allocatable, intent(inout) :: buffer(:) @@ -663,13 +632,7 @@ contains end subroutine psi_dsnd subroutine psi_csnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest complex(psb_spk_), allocatable, intent(inout) :: buffer(:) @@ -700,13 +663,7 @@ contains end subroutine psi_csnd subroutine psi_zsnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest complex(psb_dpk_), allocatable, intent(inout) :: buffer(:) @@ -738,13 +695,7 @@ contains subroutine psi_logsnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest logical, allocatable, intent(inout) :: buffer(:) @@ -776,13 +727,7 @@ contains subroutine psi_hsnd(ctxt,tag,dest,buffer,mesg_queue) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: tag, dest character(len=1), allocatable, intent(inout) :: buffer(:) @@ -850,16 +795,12 @@ contains end subroutine psi_get_sizes - subroutine psi_register_mpi_extras(info) -#ifdef PSB_MPI_MOD - use mpi -#endif + subroutine psi_register_mpi_const(comm,info) implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif - integer(psb_mpk_) :: info - + integer(psb_mpk_) :: comm,info + integer(psb_mpk_) :: ierror + integer(psb_apk_) :: tag_value + logical :: flag info = 0 #if 0 if (info == 0) call mpi_type_create_f90_integer(psb_ipk_, psb_mpi_ipk_ ,info) @@ -897,6 +838,7 @@ contains #endif #if defined(PSB_SERIAL_MPI) + tag_value = HUGE(psb_tag_space)/2 #else if (info == 0) call mpi_op_create(psi_i2amx_op,.true.,mpi_i2amx_op,info) if (info == 0) call mpi_op_create(psi_i2amn_op,.true.,mpi_i2amn_op,info) @@ -914,9 +856,37 @@ contains if (info == 0) call mpi_op_create(psi_zamn_op,.true.,mpi_zamn_op,info) if (info == 0) call mpi_op_create(psi_snrm2_op,.true.,mpi_snrm2_op,info) if (info == 0) call mpi_op_create(psi_dnrm2_op,.true.,mpi_dnrm2_op,info) + if (info == 0) call mpi_comm_get_attr(comm,mpi_tag_ub,tag_value,flag,ierror) + if ((ierror/=0).or.(.not.flag)) then + tag_value = 0 + info = psb_err_internal_error_ + end if #endif - - end subroutine psi_register_mpi_extras + psb_int_tag = tag_value - psb_tag_space + psb_real_tag = psb_int_tag + 1 + psb_double_tag = psb_real_tag + 1 + psb_complex_tag = psb_double_tag + 1 + psb_dcomplex_tag = psb_complex_tag + 1 + psb_logical_tag = psb_dcomplex_tag + 1 + psb_char_tag = psb_logical_tag + 1 + psb_int8_tag = psb_char_tag + 1 + psb_int2_tag = psb_int8_tag + 1 + psb_int4_tag = psb_int2_tag + 1 + psb_long_tag = psb_int4_tag + 1 + psb_max_simple_tag = psb_long_tag + 2 + psb_int_swap_tag = psb_max_simple_tag + 1 + psb_real_swap_tag = psb_int_swap_tag + 1 + psb_double_swap_tag = psb_real_swap_tag + 1 + psb_complex_swap_tag = psb_double_swap_tag + 1 + psb_dcomplex_swap_tag = psb_complex_swap_tag + 1 + psb_logical_swap_tag = psb_dcomplex_swap_tag + 1 + psb_char_swap_tag = psb_logical_swap_tag + 1 + psb_int8_swap_tag = psb_char_swap_tag + 1 + psb_int2_swap_tag = psb_int8_swap_tag + 1 + psb_int4_swap_tag = psb_int2_swap_tag + 1 + psb_long_swap_tag = psb_int4_swap_tag + 1 + + end subroutine psi_register_mpi_const #if (defined(PSB_IPK4) && defined(PSB_LPK8))||defined(PSB_IPK8) subroutine psb_info_epk(ctxt,iam,np) @@ -941,13 +911,7 @@ contains use psb_mat_mod use psb_vect_mod ! !$ use psb_rsb_mod -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type), intent(out) :: ctxt type(psb_ctxt_type), intent(in), optional :: basectxt integer(psb_mpk_), intent(in), optional :: np, ids(:), extcomm @@ -965,7 +929,7 @@ contains ctxt%ctxt = nctxt ! allocate on assignment nctxt = nctxt + 1 - call psi_register_mpi_extras(info) + call psi_register_mpi_const(nctxt,info) call psi_get_sizes() #else @@ -1054,7 +1018,7 @@ contains if (info == 0) then ctxt%ctxt = icomm ! allocate on assignment end if - call psi_register_mpi_extras(info) + call psi_register_mpi_const(icomm,info) call psi_get_sizes() !if (ctxt == mpi_comm_null) return if (.not.allocated(ctxt%ctxt)) return @@ -1080,13 +1044,7 @@ contains use psb_mat_mod use psb_vect_mod ! !$ use psb_rsb_mod -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type), intent(inout) :: ctxt logical, intent(in), optional :: close logical :: close_ @@ -1154,13 +1112,7 @@ contains subroutine psb_barrier_mpik(ctxt) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type), intent(in) :: ctxt integer(psb_mpk_) :: info @@ -1175,13 +1127,7 @@ contains function psb_wtime() use psb_const_mod ! use mpi_constants -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif real(psb_dpk_) :: psb_wtime psb_wtime = mpi_wtime() @@ -1210,13 +1156,7 @@ contains subroutine psb_info_mpik(ctxt,iam,np) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type), intent(in) :: ctxt integer(psb_mpk_), intent(out) :: iam, np @@ -1269,13 +1209,7 @@ contains function psb_m_get_mpi_comm(ctxt) result(comm) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: comm comm = mpi_comm_null @@ -1291,13 +1225,7 @@ contains end function psb_m_get_mpi_rank subroutine psb_get_mpicomm(ctxt,comm) -#ifdef PSB_MPI_MOD - use mpi -#endif implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: comm comm = mpi_comm_null From 0239569e2b06295a2e4611791806ca917ff0f005 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 23 Sep 2025 13:10:49 +0200 Subject: [PATCH 016/175] Final fixes for compilation with INTEL --- base/modules/serial/psb_c_mat_mod.F90 | 7 ++-- base/modules/serial/psb_c_serial_mod.f90 | 10 +++++ base/modules/serial/psb_d_mat_mod.F90 | 7 ++-- base/modules/serial/psb_d_serial_mod.f90 | 10 +++++ base/modules/serial/psb_s_mat_mod.F90 | 7 ++-- base/modules/serial/psb_s_serial_mod.f90 | 10 +++++ base/modules/serial/psb_z_mat_mod.F90 | 7 ++-- base/modules/serial/psb_z_serial_mod.f90 | 10 +++++ base/serial/Makefile | 1 + base/serial/psb_caplusat.f90 | 50 ++++++++++++++++++++++++ base/serial/psb_daplusat.f90 | 50 ++++++++++++++++++++++++ base/serial/psb_saplusat.f90 | 50 ++++++++++++++++++++++++ base/serial/psb_zaplusat.f90 | 50 ++++++++++++++++++++++++ 13 files changed, 257 insertions(+), 12 deletions(-) create mode 100644 base/serial/psb_caplusat.f90 create mode 100644 base/serial/psb_daplusat.f90 create mode 100644 base/serial/psb_saplusat.f90 create mode 100644 base/serial/psb_zaplusat.f90 diff --git a/base/modules/serial/psb_c_mat_mod.F90 b/base/modules/serial/psb_c_mat_mod.F90 index 165a54518..91d8bf4d1 100644 --- a/base/modules/serial/psb_c_mat_mod.F90 +++ b/base/modules/serial/psb_c_mat_mod.F90 @@ -78,6 +78,8 @@ ! module psb_c_mat_mod + use psb_c_vect_mod + use psb_i_vect_mod use psb_c_base_mat_mod use psb_c_csr_mat_mod, only : psb_c_csr_sparse_mat, psb_lc_csr_sparse_mat,& & psb_c_ecsr_sparse_mat @@ -661,9 +663,8 @@ module psb_c_mat_mod interface subroutine psb_c_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info) - use psb_c_vect_mod, only : psb_c_vect_type - use psb_i_vect_mod, only : psb_i_vect_type - import :: psb_ipk_, psb_lpk_, psb_cspmat_type + import :: psb_ipk_, psb_lpk_, psb_cspmat_type, & + & psb_c_vect_type, psb_i_vect_type class(psb_cspmat_type), intent(inout) :: a type(psb_c_vect_type), intent(inout) :: val type(psb_i_vect_type), intent(inout) :: ia, ja diff --git a/base/modules/serial/psb_c_serial_mod.f90 b/base/modules/serial/psb_c_serial_mod.f90 index 24fba38e9..5ad71641c 100644 --- a/base/modules/serial/psb_c_serial_mod.f90 +++ b/base/modules/serial/psb_c_serial_mod.f90 @@ -98,6 +98,16 @@ module psb_c_serial_mod end subroutine psb_cbase_numbmm end interface psb_numbmm + interface psb_aplusat + subroutine psb_caplusat(ain,aout,info) + use psb_c_mat_mod, only : psb_cspmat_type + import :: psb_ipk_ + implicit none + type(psb_cspmat_type) :: ain, aout + integer(psb_ipk_) :: info + end subroutine psb_caplusat + end interface + interface psb_rwextd subroutine psb_crwextd(nr,a,info,b,rowscale) use psb_c_mat_mod, only : psb_cspmat_type diff --git a/base/modules/serial/psb_d_mat_mod.F90 b/base/modules/serial/psb_d_mat_mod.F90 index a4318ba4f..754196b74 100644 --- a/base/modules/serial/psb_d_mat_mod.F90 +++ b/base/modules/serial/psb_d_mat_mod.F90 @@ -78,6 +78,8 @@ ! module psb_d_mat_mod + use psb_d_vect_mod + use psb_i_vect_mod use psb_d_base_mat_mod use psb_d_csr_mat_mod, only : psb_d_csr_sparse_mat, psb_ld_csr_sparse_mat,& & psb_d_ecsr_sparse_mat @@ -661,9 +663,8 @@ module psb_d_mat_mod interface subroutine psb_d_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info) - use psb_d_vect_mod, only : psb_d_vect_type - use psb_i_vect_mod, only : psb_i_vect_type - import :: psb_ipk_, psb_lpk_, psb_dspmat_type + import :: psb_ipk_, psb_lpk_, psb_dspmat_type, & + & psb_d_vect_type, psb_i_vect_type class(psb_dspmat_type), intent(inout) :: a type(psb_d_vect_type), intent(inout) :: val type(psb_i_vect_type), intent(inout) :: ia, ja diff --git a/base/modules/serial/psb_d_serial_mod.f90 b/base/modules/serial/psb_d_serial_mod.f90 index 1c186cf7f..6446a9f55 100644 --- a/base/modules/serial/psb_d_serial_mod.f90 +++ b/base/modules/serial/psb_d_serial_mod.f90 @@ -98,6 +98,16 @@ module psb_d_serial_mod end subroutine psb_dbase_numbmm end interface psb_numbmm + interface psb_aplusat + subroutine psb_daplusat(ain,aout,info) + use psb_d_mat_mod, only : psb_dspmat_type + import :: psb_ipk_ + implicit none + type(psb_dspmat_type) :: ain, aout + integer(psb_ipk_) :: info + end subroutine psb_daplusat + end interface + interface psb_rwextd subroutine psb_drwextd(nr,a,info,b,rowscale) use psb_d_mat_mod, only : psb_dspmat_type diff --git a/base/modules/serial/psb_s_mat_mod.F90 b/base/modules/serial/psb_s_mat_mod.F90 index e342ed8cc..ac619c033 100644 --- a/base/modules/serial/psb_s_mat_mod.F90 +++ b/base/modules/serial/psb_s_mat_mod.F90 @@ -78,6 +78,8 @@ ! module psb_s_mat_mod + use psb_s_vect_mod + use psb_i_vect_mod use psb_s_base_mat_mod use psb_s_csr_mat_mod, only : psb_s_csr_sparse_mat, psb_ls_csr_sparse_mat,& & psb_s_ecsr_sparse_mat @@ -661,9 +663,8 @@ module psb_s_mat_mod interface subroutine psb_s_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info) - use psb_s_vect_mod, only : psb_s_vect_type - use psb_i_vect_mod, only : psb_i_vect_type - import :: psb_ipk_, psb_lpk_, psb_sspmat_type + import :: psb_ipk_, psb_lpk_, psb_sspmat_type, & + & psb_s_vect_type, psb_i_vect_type class(psb_sspmat_type), intent(inout) :: a type(psb_s_vect_type), intent(inout) :: val type(psb_i_vect_type), intent(inout) :: ia, ja diff --git a/base/modules/serial/psb_s_serial_mod.f90 b/base/modules/serial/psb_s_serial_mod.f90 index 9872e53ed..c475ab8d9 100644 --- a/base/modules/serial/psb_s_serial_mod.f90 +++ b/base/modules/serial/psb_s_serial_mod.f90 @@ -98,6 +98,16 @@ module psb_s_serial_mod end subroutine psb_sbase_numbmm end interface psb_numbmm + interface psb_aplusat + subroutine psb_saplusat(ain,aout,info) + use psb_s_mat_mod, only : psb_sspmat_type + import :: psb_ipk_ + implicit none + type(psb_sspmat_type) :: ain, aout + integer(psb_ipk_) :: info + end subroutine psb_saplusat + end interface + interface psb_rwextd subroutine psb_srwextd(nr,a,info,b,rowscale) use psb_s_mat_mod, only : psb_sspmat_type diff --git a/base/modules/serial/psb_z_mat_mod.F90 b/base/modules/serial/psb_z_mat_mod.F90 index 47342aeec..521e665a5 100644 --- a/base/modules/serial/psb_z_mat_mod.F90 +++ b/base/modules/serial/psb_z_mat_mod.F90 @@ -78,6 +78,8 @@ ! module psb_z_mat_mod + use psb_z_vect_mod + use psb_i_vect_mod use psb_z_base_mat_mod use psb_z_csr_mat_mod, only : psb_z_csr_sparse_mat, psb_lz_csr_sparse_mat,& & psb_z_ecsr_sparse_mat @@ -661,9 +663,8 @@ module psb_z_mat_mod interface subroutine psb_z_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info) - use psb_z_vect_mod, only : psb_z_vect_type - use psb_i_vect_mod, only : psb_i_vect_type - import :: psb_ipk_, psb_lpk_, psb_zspmat_type + import :: psb_ipk_, psb_lpk_, psb_zspmat_type, & + & psb_z_vect_type, psb_i_vect_type class(psb_zspmat_type), intent(inout) :: a type(psb_z_vect_type), intent(inout) :: val type(psb_i_vect_type), intent(inout) :: ia, ja diff --git a/base/modules/serial/psb_z_serial_mod.f90 b/base/modules/serial/psb_z_serial_mod.f90 index fa0b3ef2e..6339f5e16 100644 --- a/base/modules/serial/psb_z_serial_mod.f90 +++ b/base/modules/serial/psb_z_serial_mod.f90 @@ -98,6 +98,16 @@ module psb_z_serial_mod end subroutine psb_zbase_numbmm end interface psb_numbmm + interface psb_aplusat + subroutine psb_zaplusat(ain,aout,info) + use psb_z_mat_mod, only : psb_zspmat_type + import :: psb_ipk_ + implicit none + type(psb_zspmat_type) :: ain, aout + integer(psb_ipk_) :: info + end subroutine psb_zaplusat + end interface + interface psb_rwextd subroutine psb_zrwextd(nr,a,info,b,rowscale) use psb_z_mat_mod, only : psb_zspmat_type diff --git a/base/serial/Makefile b/base/serial/Makefile index ec0e2c829..57e4bfa10 100644 --- a/base/serial/Makefile +++ b/base/serial/Makefile @@ -11,6 +11,7 @@ FOBJS = psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o \ smmp.o lsmmp.o \ psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o\ psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o\ + psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o \ psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o \ psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o diff --git a/base/serial/psb_caplusat.f90 b/base/serial/psb_caplusat.f90 new file mode 100644 index 000000000..6beb7f173 --- /dev/null +++ b/base/serial/psb_caplusat.f90 @@ -0,0 +1,50 @@ +subroutine psb_caplusat(ain,aout,info) + use psb_c_mat_mod + + implicit none + type(psb_cspmat_type), intent(inout) :: ain + type(psb_cspmat_type), intent(out) :: aout + integer(psb_ipk_) :: info + + type(psb_c_coo_sparse_mat) :: acoo1, acoo2 + integer(psb_ipk_) :: nr, nc, nz1, nz2 + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err + + name='psb_caplusat' + info = psb_success_ + call psb_erractionsave(err_act) + + + + nr = ain%get_nrows() + nc = ain%get_ncols() + + if (nr /= nc) then + info=psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + + call ain%cp_to(acoo1) + call acoo1%cp_to_coo(acoo2,info) + nz1 = acoo1%get_nzeros() + nz2 = acoo2%get_nzeros() + call acoo1%reallocate(nz1+nz2) + acoo1%ia(nz1+1:nz1+nz2) = acoo2%ja(1:nz2) + acoo1%ja(nz1+1:nz1+nz2) = acoo2%ia(1:nz2) + acoo1%val(nz1+1:nz1+nz2) = acoo2%val(1:nz2) + call acoo1%set_nrows(nr) + call acoo1%set_ncols(nr) + call acoo1%set_nzeros(nz1+nz2) + call aout%cp_from(acoo1) + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + + +end subroutine psb_caplusat diff --git a/base/serial/psb_daplusat.f90 b/base/serial/psb_daplusat.f90 new file mode 100644 index 000000000..6ae0b4628 --- /dev/null +++ b/base/serial/psb_daplusat.f90 @@ -0,0 +1,50 @@ +subroutine psb_daplusat(ain,aout,info) + use psb_d_mat_mod + + implicit none + type(psb_dspmat_type), intent(inout) :: ain + type(psb_dspmat_type), intent(out) :: aout + integer(psb_ipk_) :: info + + type(psb_d_coo_sparse_mat) :: acoo1, acoo2 + integer(psb_ipk_) :: nr, nc, nz1, nz2 + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err + + name='psb_daplusat' + info = psb_success_ + call psb_erractionsave(err_act) + + + + nr = ain%get_nrows() + nc = ain%get_ncols() + + if (nr /= nc) then + info=psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + + call ain%cp_to(acoo1) + call acoo1%cp_to_coo(acoo2,info) + nz1 = acoo1%get_nzeros() + nz2 = acoo2%get_nzeros() + call acoo1%reallocate(nz1+nz2) + acoo1%ia(nz1+1:nz1+nz2) = acoo2%ja(1:nz2) + acoo1%ja(nz1+1:nz1+nz2) = acoo2%ia(1:nz2) + acoo1%val(nz1+1:nz1+nz2) = acoo2%val(1:nz2) + call acoo1%set_nrows(nr) + call acoo1%set_ncols(nr) + call acoo1%set_nzeros(nz1+nz2) + call aout%cp_from(acoo1) + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + + +end subroutine psb_daplusat diff --git a/base/serial/psb_saplusat.f90 b/base/serial/psb_saplusat.f90 new file mode 100644 index 000000000..3e9024d3c --- /dev/null +++ b/base/serial/psb_saplusat.f90 @@ -0,0 +1,50 @@ +subroutine psb_saplusat(ain,aout,info) + use psb_s_mat_mod + + implicit none + type(psb_sspmat_type), intent(inout) :: ain + type(psb_sspmat_type), intent(out) :: aout + integer(psb_ipk_) :: info + + type(psb_s_coo_sparse_mat) :: acoo1, acoo2 + integer(psb_ipk_) :: nr, nc, nz1, nz2 + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err + + name='psb_saplusat' + info = psb_success_ + call psb_erractionsave(err_act) + + + + nr = ain%get_nrows() + nc = ain%get_ncols() + + if (nr /= nc) then + info=psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + + call ain%cp_to(acoo1) + call acoo1%cp_to_coo(acoo2,info) + nz1 = acoo1%get_nzeros() + nz2 = acoo2%get_nzeros() + call acoo1%reallocate(nz1+nz2) + acoo1%ia(nz1+1:nz1+nz2) = acoo2%ja(1:nz2) + acoo1%ja(nz1+1:nz1+nz2) = acoo2%ia(1:nz2) + acoo1%val(nz1+1:nz1+nz2) = acoo2%val(1:nz2) + call acoo1%set_nrows(nr) + call acoo1%set_ncols(nr) + call acoo1%set_nzeros(nz1+nz2) + call aout%cp_from(acoo1) + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + + +end subroutine psb_saplusat diff --git a/base/serial/psb_zaplusat.f90 b/base/serial/psb_zaplusat.f90 new file mode 100644 index 000000000..cb418474a --- /dev/null +++ b/base/serial/psb_zaplusat.f90 @@ -0,0 +1,50 @@ +subroutine psb_zaplusat(ain,aout,info) + use psb_z_mat_mod + + implicit none + type(psb_zspmat_type), intent(inout) :: ain + type(psb_zspmat_type), intent(out) :: aout + integer(psb_ipk_) :: info + + type(psb_z_coo_sparse_mat) :: acoo1, acoo2 + integer(psb_ipk_) :: nr, nc, nz1, nz2 + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err + + name='psb_zaplusat' + info = psb_success_ + call psb_erractionsave(err_act) + + + + nr = ain%get_nrows() + nc = ain%get_ncols() + + if (nr /= nc) then + info=psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + + call ain%cp_to(acoo1) + call acoo1%cp_to_coo(acoo2,info) + nz1 = acoo1%get_nzeros() + nz2 = acoo2%get_nzeros() + call acoo1%reallocate(nz1+nz2) + acoo1%ia(nz1+1:nz1+nz2) = acoo2%ja(1:nz2) + acoo1%ja(nz1+1:nz1+nz2) = acoo2%ia(1:nz2) + acoo1%val(nz1+1:nz1+nz2) = acoo2%val(1:nz2) + call acoo1%set_nrows(nr) + call acoo1%set_ncols(nr) + call acoo1%set_nzeros(nz1+nz2) + call aout%cp_from(acoo1) + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + + +end subroutine psb_zaplusat From e25d25460ed67855172cd301b59602910beadc2d Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 23 Sep 2025 13:38:27 +0200 Subject: [PATCH 017/175] Revert one INTEL fix no longer needed --- base/serial/psb_cspspmm.F90 | 114 ------------------------------------ base/serial/psb_dspspmm.F90 | 114 ------------------------------------ base/serial/psb_sspspmm.F90 | 114 ------------------------------------ base/serial/psb_zspspmm.F90 | 114 ------------------------------------ 4 files changed, 456 deletions(-) diff --git a/base/serial/psb_cspspmm.F90 b/base/serial/psb_cspspmm.F90 index 865c1922c..64fedbfea 100644 --- a/base/serial/psb_cspspmm.F90 +++ b/base/serial/psb_cspspmm.F90 @@ -37,11 +37,9 @@ ! subroutine psb_cspspmm(a,b,c,info) use psb_mat_mod -#if !defined(PSB_CMP_INTEL) use psb_c_csr_mat_mod use psb_c_csc_mat_mod use psb_c_serial_mod, psb_protect_name => psb_cspspmm -#endif type(psb_cspmat_type), intent(in) :: a,b type(psb_cspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -51,61 +49,6 @@ subroutine psb_cspspmm(a,b,c,info) character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -#if defined(PSB_CMP_INTEL) - interface psb_symbmm - subroutine psb_csymbmm(a,b,c,info) - use psb_c_mat_mod, only : psb_cspmat_type - import :: psb_ipk_ - implicit none - type(psb_cspmat_type), intent(in) :: a,b - type(psb_cspmat_type), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_csymbmm - subroutine psb_cbase_symbmm(a,b,c,info) - use psb_c_mat_mod, only : psb_c_base_sparse_mat, psb_c_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_c_base_sparse_mat), intent(in) :: a,b - type(psb_c_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_cbase_symbmm - end interface psb_symbmm - - interface psb_numbmm - subroutine psb_cnumbmm(a,b,c) - use psb_c_mat_mod, only : psb_cspmat_type - import :: psb_ipk_ - implicit none - type(psb_cspmat_type), intent(in) :: a,b - type(psb_cspmat_type), intent(inout) :: c - end subroutine psb_cnumbmm - subroutine psb_cbase_numbmm(a,b,c) - use psb_c_mat_mod, only : psb_c_base_sparse_mat, psb_c_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_c_base_sparse_mat), intent(in) :: a,b - type(psb_c_csr_sparse_mat), intent(inout) :: c - end subroutine psb_cbase_numbmm - end interface psb_numbmm - interface - subroutine psb_ccsrspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_c_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_c_csr_sparse_mat), intent(in) :: a,b - type(psb_c_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ccsrspspmm - subroutine psb_ccscspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_c_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_c_csc_sparse_mat), intent(in) :: a,b - type(psb_c_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ccscspspmm - end interface -#endif call psb_erractionsave(err_act) info = psb_success_ @@ -177,11 +120,9 @@ end subroutine psb_cspspmm subroutine psb_lcspspmm(a,b,c,info) use psb_mat_mod -#if !defined(PSB_CMP_INTEL) use psb_c_csr_mat_mod use psb_c_csc_mat_mod use psb_c_serial_mod, psb_protect_name => psb_lcspspmm -#endif implicit none type(psb_lcspmat_type), intent(in) :: a,b @@ -192,61 +133,6 @@ subroutine psb_lcspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -#if defined(PSB_CMP_INTEL) - interface psb_symbmm - subroutine psb_lcsymbmm(a,b,c,info) - use psb_c_mat_mod, only : psb_lcspmat_type - import :: psb_ipk_ - implicit none - type(psb_lcspmat_type), intent(in) :: a,b - type(psb_lcspmat_type), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lcsymbmm - subroutine psb_lcbase_symbmm(a,b,c,info) - use psb_c_mat_mod, only : psb_lc_base_sparse_mat, psb_lc_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lc_base_sparse_mat), intent(in) :: a,b - type(psb_lc_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lcbase_symbmm - end interface psb_symbmm - - interface psb_numbmm - subroutine psb_lcnumbmm(a,b,c) - use psb_c_mat_mod, only : psb_lcspmat_type - import :: psb_ipk_ - implicit none - type(psb_lcspmat_type), intent(in) :: a,b - type(psb_lcspmat_type), intent(inout) :: c - end subroutine psb_lcnumbmm - subroutine psb_lcbase_numbmm(a,b,c) - use psb_c_mat_mod, only : psb_lc_base_sparse_mat, psb_lc_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lc_base_sparse_mat), intent(in) :: a,b - type(psb_lc_csr_sparse_mat), intent(inout) :: c - end subroutine psb_lcbase_numbmm - end interface psb_numbmm - interface - subroutine psb_lccsrspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_lc_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lc_csr_sparse_mat), intent(in) :: a,b - type(psb_lc_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lccsrspspmm - subroutine psb_lccscspspmm(a,b,c,info) - use psb_c_mat_mod, only : psb_lc_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lc_csc_sparse_mat), intent(in) :: a,b - type(psb_lc_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lccscspspmm - end interface -#endif call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_dspspmm.F90 b/base/serial/psb_dspspmm.F90 index f7e37fe7b..4b37df0e7 100644 --- a/base/serial/psb_dspspmm.F90 +++ b/base/serial/psb_dspspmm.F90 @@ -37,11 +37,9 @@ ! subroutine psb_dspspmm(a,b,c,info) use psb_mat_mod -#if !defined(PSB_CMP_INTEL) use psb_d_csr_mat_mod use psb_d_csc_mat_mod use psb_d_serial_mod, psb_protect_name => psb_dspspmm -#endif type(psb_dspmat_type), intent(in) :: a,b type(psb_dspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -51,61 +49,6 @@ subroutine psb_dspspmm(a,b,c,info) character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -#if defined(PSB_CMP_INTEL) - interface psb_symbmm - subroutine psb_dsymbmm(a,b,c,info) - use psb_d_mat_mod, only : psb_dspmat_type - import :: psb_ipk_ - implicit none - type(psb_dspmat_type), intent(in) :: a,b - type(psb_dspmat_type), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_dsymbmm - subroutine psb_dbase_symbmm(a,b,c,info) - use psb_d_mat_mod, only : psb_d_base_sparse_mat, psb_d_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_d_base_sparse_mat), intent(in) :: a,b - type(psb_d_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_dbase_symbmm - end interface psb_symbmm - - interface psb_numbmm - subroutine psb_dnumbmm(a,b,c) - use psb_d_mat_mod, only : psb_dspmat_type - import :: psb_ipk_ - implicit none - type(psb_dspmat_type), intent(in) :: a,b - type(psb_dspmat_type), intent(inout) :: c - end subroutine psb_dnumbmm - subroutine psb_dbase_numbmm(a,b,c) - use psb_d_mat_mod, only : psb_d_base_sparse_mat, psb_d_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_d_base_sparse_mat), intent(in) :: a,b - type(psb_d_csr_sparse_mat), intent(inout) :: c - end subroutine psb_dbase_numbmm - end interface psb_numbmm - interface - subroutine psb_dcsrspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_d_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_d_csr_sparse_mat), intent(in) :: a,b - type(psb_d_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_dcsrspspmm - subroutine psb_dcscspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_d_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_d_csc_sparse_mat), intent(in) :: a,b - type(psb_d_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_dcscspspmm - end interface -#endif call psb_erractionsave(err_act) info = psb_success_ @@ -177,11 +120,9 @@ end subroutine psb_dspspmm subroutine psb_ldspspmm(a,b,c,info) use psb_mat_mod -#if !defined(PSB_CMP_INTEL) use psb_d_csr_mat_mod use psb_d_csc_mat_mod use psb_d_serial_mod, psb_protect_name => psb_ldspspmm -#endif implicit none type(psb_ldspmat_type), intent(in) :: a,b @@ -192,61 +133,6 @@ subroutine psb_ldspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -#if defined(PSB_CMP_INTEL) - interface psb_symbmm - subroutine psb_ldsymbmm(a,b,c,info) - use psb_d_mat_mod, only : psb_ldspmat_type - import :: psb_ipk_ - implicit none - type(psb_ldspmat_type), intent(in) :: a,b - type(psb_ldspmat_type), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ldsymbmm - subroutine psb_ldbase_symbmm(a,b,c,info) - use psb_d_mat_mod, only : psb_ld_base_sparse_mat, psb_ld_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ld_base_sparse_mat), intent(in) :: a,b - type(psb_ld_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ldbase_symbmm - end interface psb_symbmm - - interface psb_numbmm - subroutine psb_ldnumbmm(a,b,c) - use psb_d_mat_mod, only : psb_ldspmat_type - import :: psb_ipk_ - implicit none - type(psb_ldspmat_type), intent(in) :: a,b - type(psb_ldspmat_type), intent(inout) :: c - end subroutine psb_ldnumbmm - subroutine psb_ldbase_numbmm(a,b,c) - use psb_d_mat_mod, only : psb_ld_base_sparse_mat, psb_ld_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ld_base_sparse_mat), intent(in) :: a,b - type(psb_ld_csr_sparse_mat), intent(inout) :: c - end subroutine psb_ldbase_numbmm - end interface psb_numbmm - interface - subroutine psb_ldcsrspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_ld_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ld_csr_sparse_mat), intent(in) :: a,b - type(psb_ld_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ldcsrspspmm - subroutine psb_ldcscspspmm(a,b,c,info) - use psb_d_mat_mod, only : psb_ld_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ld_csc_sparse_mat), intent(in) :: a,b - type(psb_ld_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ldcscspspmm - end interface -#endif call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_sspspmm.F90 b/base/serial/psb_sspspmm.F90 index 4af561764..bc3352ee7 100644 --- a/base/serial/psb_sspspmm.F90 +++ b/base/serial/psb_sspspmm.F90 @@ -37,11 +37,9 @@ ! subroutine psb_sspspmm(a,b,c,info) use psb_mat_mod -#if !defined(PSB_CMP_INTEL) use psb_s_csr_mat_mod use psb_s_csc_mat_mod use psb_s_serial_mod, psb_protect_name => psb_sspspmm -#endif type(psb_sspmat_type), intent(in) :: a,b type(psb_sspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -51,61 +49,6 @@ subroutine psb_sspspmm(a,b,c,info) character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -#if defined(PSB_CMP_INTEL) - interface psb_symbmm - subroutine psb_ssymbmm(a,b,c,info) - use psb_s_mat_mod, only : psb_sspmat_type - import :: psb_ipk_ - implicit none - type(psb_sspmat_type), intent(in) :: a,b - type(psb_sspmat_type), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_ssymbmm - subroutine psb_sbase_symbmm(a,b,c,info) - use psb_s_mat_mod, only : psb_s_base_sparse_mat, psb_s_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_s_base_sparse_mat), intent(in) :: a,b - type(psb_s_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_sbase_symbmm - end interface psb_symbmm - - interface psb_numbmm - subroutine psb_snumbmm(a,b,c) - use psb_s_mat_mod, only : psb_sspmat_type - import :: psb_ipk_ - implicit none - type(psb_sspmat_type), intent(in) :: a,b - type(psb_sspmat_type), intent(inout) :: c - end subroutine psb_snumbmm - subroutine psb_sbase_numbmm(a,b,c) - use psb_s_mat_mod, only : psb_s_base_sparse_mat, psb_s_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_s_base_sparse_mat), intent(in) :: a,b - type(psb_s_csr_sparse_mat), intent(inout) :: c - end subroutine psb_sbase_numbmm - end interface psb_numbmm - interface - subroutine psb_scsrspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_s_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_s_csr_sparse_mat), intent(in) :: a,b - type(psb_s_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_scsrspspmm - subroutine psb_scscspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_s_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_s_csc_sparse_mat), intent(in) :: a,b - type(psb_s_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_scscspspmm - end interface -#endif call psb_erractionsave(err_act) info = psb_success_ @@ -177,11 +120,9 @@ end subroutine psb_sspspmm subroutine psb_lsspspmm(a,b,c,info) use psb_mat_mod -#if !defined(PSB_CMP_INTEL) use psb_s_csr_mat_mod use psb_s_csc_mat_mod use psb_s_serial_mod, psb_protect_name => psb_lsspspmm -#endif implicit none type(psb_lsspmat_type), intent(in) :: a,b @@ -192,61 +133,6 @@ subroutine psb_lsspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -#if defined(PSB_CMP_INTEL) - interface psb_symbmm - subroutine psb_lssymbmm(a,b,c,info) - use psb_s_mat_mod, only : psb_lsspmat_type - import :: psb_ipk_ - implicit none - type(psb_lsspmat_type), intent(in) :: a,b - type(psb_lsspmat_type), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lssymbmm - subroutine psb_lsbase_symbmm(a,b,c,info) - use psb_s_mat_mod, only : psb_ls_base_sparse_mat, psb_ls_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ls_base_sparse_mat), intent(in) :: a,b - type(psb_ls_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lsbase_symbmm - end interface psb_symbmm - - interface psb_numbmm - subroutine psb_lsnumbmm(a,b,c) - use psb_s_mat_mod, only : psb_lsspmat_type - import :: psb_ipk_ - implicit none - type(psb_lsspmat_type), intent(in) :: a,b - type(psb_lsspmat_type), intent(inout) :: c - end subroutine psb_lsnumbmm - subroutine psb_lsbase_numbmm(a,b,c) - use psb_s_mat_mod, only : psb_ls_base_sparse_mat, psb_ls_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ls_base_sparse_mat), intent(in) :: a,b - type(psb_ls_csr_sparse_mat), intent(inout) :: c - end subroutine psb_lsbase_numbmm - end interface psb_numbmm - interface - subroutine psb_lscsrspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_ls_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ls_csr_sparse_mat), intent(in) :: a,b - type(psb_ls_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lscsrspspmm - subroutine psb_lscscspspmm(a,b,c,info) - use psb_s_mat_mod, only : psb_ls_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_ls_csc_sparse_mat), intent(in) :: a,b - type(psb_ls_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lscscspspmm - end interface -#endif call psb_erractionsave(err_act) info = psb_success_ diff --git a/base/serial/psb_zspspmm.F90 b/base/serial/psb_zspspmm.F90 index 95d1e112b..a37bd013f 100644 --- a/base/serial/psb_zspspmm.F90 +++ b/base/serial/psb_zspspmm.F90 @@ -37,11 +37,9 @@ ! subroutine psb_zspspmm(a,b,c,info) use psb_mat_mod -#if !defined(PSB_CMP_INTEL) use psb_z_csr_mat_mod use psb_z_csc_mat_mod use psb_z_serial_mod, psb_protect_name => psb_zspspmm -#endif type(psb_zspmat_type), intent(in) :: a,b type(psb_zspmat_type), intent(out) :: c integer(psb_ipk_), intent(out) :: info @@ -51,61 +49,6 @@ subroutine psb_zspspmm(a,b,c,info) character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -#if defined(PSB_CMP_INTEL) - interface psb_symbmm - subroutine psb_zsymbmm(a,b,c,info) - use psb_z_mat_mod, only : psb_zspmat_type - import :: psb_ipk_ - implicit none - type(psb_zspmat_type), intent(in) :: a,b - type(psb_zspmat_type), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_zsymbmm - subroutine psb_zbase_symbmm(a,b,c,info) - use psb_z_mat_mod, only : psb_z_base_sparse_mat, psb_z_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_z_base_sparse_mat), intent(in) :: a,b - type(psb_z_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_zbase_symbmm - end interface psb_symbmm - - interface psb_numbmm - subroutine psb_znumbmm(a,b,c) - use psb_z_mat_mod, only : psb_zspmat_type - import :: psb_ipk_ - implicit none - type(psb_zspmat_type), intent(in) :: a,b - type(psb_zspmat_type), intent(inout) :: c - end subroutine psb_znumbmm - subroutine psb_zbase_numbmm(a,b,c) - use psb_z_mat_mod, only : psb_z_base_sparse_mat, psb_z_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_z_base_sparse_mat), intent(in) :: a,b - type(psb_z_csr_sparse_mat), intent(inout) :: c - end subroutine psb_zbase_numbmm - end interface psb_numbmm - interface - subroutine psb_zcsrspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_z_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_z_csr_sparse_mat), intent(in) :: a,b - type(psb_z_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_zcsrspspmm - subroutine psb_zcscspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_z_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_z_csc_sparse_mat), intent(in) :: a,b - type(psb_z_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_zcscspspmm - end interface -#endif call psb_erractionsave(err_act) info = psb_success_ @@ -177,11 +120,9 @@ end subroutine psb_zspspmm subroutine psb_lzspspmm(a,b,c,info) use psb_mat_mod -#if !defined(PSB_CMP_INTEL) use psb_z_csr_mat_mod use psb_z_csc_mat_mod use psb_z_serial_mod, psb_protect_name => psb_lzspspmm -#endif implicit none type(psb_lzspmat_type), intent(in) :: a,b @@ -192,61 +133,6 @@ subroutine psb_lzspspmm(a,b,c,info) integer(psb_ipk_) :: err_act character(len=*), parameter :: name='psb_spspmm' logical :: done_spmm -#if defined(PSB_CMP_INTEL) - interface psb_symbmm - subroutine psb_lzsymbmm(a,b,c,info) - use psb_z_mat_mod, only : psb_lzspmat_type - import :: psb_ipk_ - implicit none - type(psb_lzspmat_type), intent(in) :: a,b - type(psb_lzspmat_type), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lzsymbmm - subroutine psb_lzbase_symbmm(a,b,c,info) - use psb_z_mat_mod, only : psb_lz_base_sparse_mat, psb_lz_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lz_base_sparse_mat), intent(in) :: a,b - type(psb_lz_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lzbase_symbmm - end interface psb_symbmm - - interface psb_numbmm - subroutine psb_lznumbmm(a,b,c) - use psb_z_mat_mod, only : psb_lzspmat_type - import :: psb_ipk_ - implicit none - type(psb_lzspmat_type), intent(in) :: a,b - type(psb_lzspmat_type), intent(inout) :: c - end subroutine psb_lznumbmm - subroutine psb_lzbase_numbmm(a,b,c) - use psb_z_mat_mod, only : psb_lz_base_sparse_mat, psb_lz_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lz_base_sparse_mat), intent(in) :: a,b - type(psb_lz_csr_sparse_mat), intent(inout) :: c - end subroutine psb_lzbase_numbmm - end interface psb_numbmm - interface - subroutine psb_lzcsrspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_lz_csr_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lz_csr_sparse_mat), intent(in) :: a,b - type(psb_lz_csr_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lzcsrspspmm - subroutine psb_lzcscspspmm(a,b,c,info) - use psb_z_mat_mod, only : psb_lz_csc_sparse_mat - import :: psb_ipk_ - implicit none - class(psb_lz_csc_sparse_mat), intent(in) :: a,b - type(psb_lz_csc_sparse_mat), intent(out) :: c - integer(psb_ipk_), intent(out) :: info - end subroutine psb_lzcscspspmm - end interface -#endif call psb_erractionsave(err_act) info = psb_success_ From 390144126cbbdbe74820f46f4bfe80b923d3177d Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 25 Sep 2025 13:35:30 +0200 Subject: [PATCH 018/175] Fixes for compilation with CUDA 13.0 --- cuda/Makefile | 5 +++-- cuda/cuda_util.c | 18 ++++++++++++++++-- cuda/cuda_util.h | 4 ++++ cuda/psb_cuda_env_mod.F90 | 24 ++++++++++++++++++++++-- cuda/spgpu/Makefile | 4 ++-- test/cudakern/Makefile | 2 +- 6 files changed, 48 insertions(+), 9 deletions(-) diff --git a/cuda/Makefile b/cuda/Makefile index b47e58ce7..5e0aaa283 100755 --- a/cuda/Makefile +++ b/cuda/Makefile @@ -51,14 +51,15 @@ lib: objs ilib cudalib spgpulib $(AR) $(LIBNAME) $(OBJS) /bin/cp -p $(LIBNAME) $(LIBDIR) -$(COBJS): spgpuinc objs: spgpuinc $(OBJS) iobjs cudaobjs spgpuobjs /bin/cp -p *$(.mod) $(MODDIR) /bin/cp -p *.h $(INCDIR) +#$(COBJS): spgpuinc + spgpuinc: - $(MAKE) -C spgpu includes + $(MAKE) -C spgpu incl spgpuobjs: $(MAKE) -C spgpu objs spgpulib: diff --git a/cuda/cuda_util.c b/cuda/cuda_util.c index 8ae2e6631..f7414695b 100644 --- a/cuda/cuda_util.c +++ b/cuda/cuda_util.c @@ -37,6 +37,9 @@ static int hasUVA=-1; static struct cudaDeviceProp *prop=NULL; static spgpuHandle_t psb_cuda_handle = NULL; static cublasHandle_t psb_cublas_handle = NULL; +#if PSB_CUDA_VERSION >= 13000 +static int memoryClockRate=-1; +#endif #if defined(TRACK_CUDA_MALLOC) static int64_t total_cuda_mem = 0; #endif @@ -310,17 +313,28 @@ int getGPUMultiProcessors() int getGPUMemoryBusWidth() { int count=0; -#if CUDART_VERSION >= 5000 +#if PSB_CUDA_VERSION >= 5000 if (prop!=NULL) count = prop->memoryBusWidth; #endif return(count); } + +#if PSB_CUDA_VERSION >= 13000 +int getGPUMemoryClockRate(int dev) +#else int getGPUMemoryClockRate() +#endif { int count=0; -#if CUDART_VERSION >= 5000 +#if PSB_CUDA_VERSION >= 5000 +#if PSB_CUDA_VERSION >= 13000 + cudaDeviceGetAttribute(&memoryClockRate, + cudaDevAttrMemoryClockRate, dev); + count = memoryClockRate; +#else if (prop!=NULL) count = prop->memoryClockRate; +#endif #endif return(count); } diff --git a/cuda/cuda_util.h b/cuda/cuda_util.h index 609e6f43f..0c2cce4f7 100644 --- a/cuda/cuda_util.h +++ b/cuda/cuda_util.h @@ -59,7 +59,11 @@ int getDeviceHasUVA(); int setDevice(int dev); int getGPUMultiProcessors(); int getGPUMemoryBusWidth(); +#if PSB_CUDA_VERSION >= 13000 +int getGPUMemoryClockRate(int dev); +#else int getGPUMemoryClockRate(); +#endif int getGPUWarpSize(); int getGPUMaxThreadsPerBlock(); int getGPUMaxThreadsPerMP(); diff --git a/cuda/psb_cuda_env_mod.F90 b/cuda/psb_cuda_env_mod.F90 index d1cee3986..58250dbc0 100644 --- a/cuda/psb_cuda_env_mod.F90 +++ b/cuda/psb_cuda_env_mod.F90 @@ -145,11 +145,20 @@ module psb_cuda_env_mod use iso_c_binding integer(c_int) :: res end function psb_C_get_MemoryBusWidth +#if (PSB_CUDA_VERSION >= 13000) + function psb_C_get_MemoryClockRate(dev) & + & result(res) bind(c,name='getGPUMemoryClockRate') + use iso_c_binding + integer(c_int), value :: dev + integer(c_int) :: res + end function psb_C_get_MemoryClockRate +#else function psb_C_get_MemoryClockRate() & & result(res) bind(c,name='getGPUMemoryClockRate') use iso_c_binding integer(c_int) :: res end function psb_C_get_MemoryClockRate +#endif function psb_C_get_WarpSize() & & result(res) bind(c,name='getGPUWarpSize') use iso_c_binding @@ -174,8 +183,9 @@ module psb_cuda_env_mod end subroutine psb_C_cpy_NameString end interface - logical, private :: gpu_do_maybe_free_buffer = .false. - + logical, private, save :: gpu_do_maybe_free_buffer = .false. + integer(c_int), private, save :: myDevice + Contains function psb_cuda_get_maybe_free_buffer() result(res) @@ -217,6 +227,7 @@ Contains if (present(dev)) then info = psb_C_gpu_init(dev) + myDevice = dev else if (count >0) then dev_ = mod(iam,count) @@ -224,6 +235,7 @@ Contains dev_ = 0 end if info = psb_C_gpu_init(dev_) + myDevice = dev_ end if if (info == 0) info = initFcusparse() if (info /= 0) then @@ -283,7 +295,11 @@ Contains function psb_cuda_MemoryClockRate() result(res) integer(psb_ipk_) :: res +#if (PSB_CUDA_VERSION >= 13000) + res = psb_C_get_MemoryClockRate(myDevice) +#else res = psb_C_get_MemoryClockRate() +#endif end function psb_cuda_MemoryClockRate function psb_cuda_MemoryBusWidth() result(res) @@ -296,7 +312,11 @@ Contains ! Formula here: 2*ClockRate(KHz)*BusWidth(bit) ! normalization: bit/byte, KHz/MHz ! output: MBytes/s +#if PSB_CUDA_VERSION >= 13000 + res = 2.d0*0.125d0*1.d-3*psb_C_get_MemoryBusWidth()*psb_C_get_MemoryClockRate(myDevice) +#else res = 2.d0*0.125d0*1.d-3*psb_C_get_MemoryBusWidth()*psb_C_get_MemoryClockRate() +#endif end function psb_cuda_MemoryPeakBandwidth function psb_cuda_DeviceName() result(res) diff --git a/cuda/spgpu/Makefile b/cuda/spgpu/Makefile index ae0b1be62..75302a509 100644 --- a/cuda/spgpu/Makefile +++ b/cuda/spgpu/Makefile @@ -11,7 +11,7 @@ LIBNAME=libspgpu.a OBJS=coo.o core.o dia.o ell.o hdia.o hell.o CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) -all: includes objs +all: incl objs objs: $(OBJS) iobjs @@ -24,7 +24,7 @@ iobjs: ilib: $(MAKE) -C kernels lib LIBNAME=$(LIBNAME) -includes: +incl: /bin/cp -p *.h $(INCDIR) clean: iclean diff --git a/test/cudakern/Makefile b/test/cudakern/Makefile index e1c3b78dc..a7752f0a2 100755 --- a/test/cudakern/Makefile +++ b/test/cudakern/Makefile @@ -27,7 +27,7 @@ dir: (if test ! -d $(EXEDIR); then mkdir $(EXEDIR); fi) dpdegenmv.o spdegenmv.o: data_input.o dpdegenmv: $(DPGOBJS) - $(FLINK) $(LOPT) $(DPGOBJS) -o dpdegenmv $(FINCLUDES) $(PSBLAS_LIB) $(LDLIBS) + $(FLINK) $(LOPT) $(DPGOBJS) -o dpdegenmv $(FINCLUDES) $(PSBLAS_LIB) $(LDLIBS) -lstdc++ /bin/mv dpdegenmv $(EXEDIR) spdegenmv: $(SPGOBJS) $(FLINK) $(LOPT) $(SPGOBJS) -o spdegenmv $(PSBLAS_LIB) $(LDLIBS) From 25d63d156a82f1b27afbdf47ffa4d558641d685f Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 25 Sep 2025 13:38:59 +0200 Subject: [PATCH 019/175] Restore configure --- configure | 6 +++--- configure.ac | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 388ffae9f..1a23fa649 100755 --- a/configure +++ b/configure @@ -11093,7 +11093,7 @@ LIBS="$SAVE_LIBS" CPPFLAGS="$SAVE_CPPFLAGS" PSB_CUDA_VERSION="$pac_cv_cuda_version"; - if (( ${PSB_CUDA_VERSION} > 12080 )); then + if (( ${PSB_CUDA_VERSION} > 15010 )); then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Unsupported CUDA version ${PSB_CUDA_VERSION} disabling CUDA" >&5 printf "%s\n" "$as_me: Unsupported CUDA version ${PSB_CUDA_VERSION} disabling CUDA" >&6;} pac_cv_cuda="no"; @@ -11151,8 +11151,8 @@ fi CUDEFINES="$CUDEFINES -gencode arch=compute_$cc,code=sm_$cc"; done if test "x$pac_cv_cuda_version" != "xunknown"; then - FCUDEFINES=" ${CUDA_DEFINES}" - fi + FCUDEFINES=" ${CUDA_DEFINES}" + fi fi fi fi diff --git a/configure.ac b/configure.ac index f3c786643..3b6aedbd7 100644 --- a/configure.ac +++ b/configure.ac @@ -853,7 +853,7 @@ else PAC_CHECK_CUDA_VERSION() dnl PAC_CHECK_SPGPU() PSB_CUDA_VERSION="$pac_cv_cuda_version"; - if (( ${PSB_CUDA_VERSION} > 12080 )); then + if (( ${PSB_CUDA_VERSION} > 15010 )); then AC_MSG_NOTICE([Unsupported CUDA version ${PSB_CUDA_VERSION} disabling CUDA]) pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; @@ -898,8 +898,8 @@ else done if test "x$pac_cv_cuda_version" != "xunknown"; then dnl CUDEFINES="$CUDEFINES ${CUDA_DEFINES}" - FCUDEFINES=" ${CUDA_DEFINES}" - dnl CCUDEFINES=" ${CUDA_DEFINES}" + FCUDEFINES=" ${CUDA_DEFINES}" + dnl CCUDEFINES=" ${CUDA_DEFINES}" dnl CXXCUDEFINES=" ${CUDA_DEFINES}" fi fi From 6bb7725102ce3c0fc4cc031f8055627572237b06 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Mon, 29 Sep 2025 16:15:25 +0200 Subject: [PATCH 020/175] Minor change to mat_dist_impl --- util/psb_c_mat_dist_impl.f90 | 10 ++++------ util/psb_d_mat_dist_impl.f90 | 10 ++++------ util/psb_s_mat_dist_impl.f90 | 10 ++++------ util/psb_z_mat_dist_impl.f90 | 10 ++++------ 4 files changed, 16 insertions(+), 24 deletions(-) diff --git a/util/psb_c_mat_dist_impl.f90 b/util/psb_c_mat_dist_impl.f90 index 26d040416..b4b4c13e4 100644 --- a/util/psb_c_mat_dist_impl.f90 +++ b/util/psb_c_mat_dist_impl.f90 @@ -238,6 +238,10 @@ subroutine psb_cmatdist(a_glob, a, ctxt, desc_a,& if (j_count > nrow) exit if (j_count > lastigp) exit end do + if (j_count > lastigp) then + iproc = iproc + 1 + lastigp = lastigp + vsz(iproc+1) + end if end if ! now we should insert rows i_count..j_count-1 @@ -313,12 +317,6 @@ subroutine psb_cmatdist(a_glob, a, ctxt, desc_a,& end do endif i_count = j_count - if ((use_vsz).and.(j_count <= nrow)) then - if (j_count > lastigp) then - iproc = iproc + 1 - lastigp = lastigp + vsz(iproc+1) - end if - end if end do call psb_barrier(ctxt) diff --git a/util/psb_d_mat_dist_impl.f90 b/util/psb_d_mat_dist_impl.f90 index 44d853e4d..0b0db2cd0 100644 --- a/util/psb_d_mat_dist_impl.f90 +++ b/util/psb_d_mat_dist_impl.f90 @@ -238,6 +238,10 @@ subroutine psb_dmatdist(a_glob, a, ctxt, desc_a,& if (j_count > nrow) exit if (j_count > lastigp) exit end do + if (j_count > lastigp) then + iproc = iproc + 1 + lastigp = lastigp + vsz(iproc+1) + end if end if ! now we should insert rows i_count..j_count-1 @@ -313,12 +317,6 @@ subroutine psb_dmatdist(a_glob, a, ctxt, desc_a,& end do endif i_count = j_count - if ((use_vsz).and.(j_count <= nrow)) then - if (j_count > lastigp) then - iproc = iproc + 1 - lastigp = lastigp + vsz(iproc+1) - end if - end if end do call psb_barrier(ctxt) diff --git a/util/psb_s_mat_dist_impl.f90 b/util/psb_s_mat_dist_impl.f90 index 126938bff..941906a86 100644 --- a/util/psb_s_mat_dist_impl.f90 +++ b/util/psb_s_mat_dist_impl.f90 @@ -238,6 +238,10 @@ subroutine psb_smatdist(a_glob, a, ctxt, desc_a,& if (j_count > nrow) exit if (j_count > lastigp) exit end do + if (j_count > lastigp) then + iproc = iproc + 1 + lastigp = lastigp + vsz(iproc+1) + end if end if ! now we should insert rows i_count..j_count-1 @@ -313,12 +317,6 @@ subroutine psb_smatdist(a_glob, a, ctxt, desc_a,& end do endif i_count = j_count - if ((use_vsz).and.(j_count <= nrow)) then - if (j_count > lastigp) then - iproc = iproc + 1 - lastigp = lastigp + vsz(iproc+1) - end if - end if end do call psb_barrier(ctxt) diff --git a/util/psb_z_mat_dist_impl.f90 b/util/psb_z_mat_dist_impl.f90 index 48abe46de..e96f50b34 100644 --- a/util/psb_z_mat_dist_impl.f90 +++ b/util/psb_z_mat_dist_impl.f90 @@ -238,6 +238,10 @@ subroutine psb_zmatdist(a_glob, a, ctxt, desc_a,& if (j_count > nrow) exit if (j_count > lastigp) exit end do + if (j_count > lastigp) then + iproc = iproc + 1 + lastigp = lastigp + vsz(iproc+1) + end if end if ! now we should insert rows i_count..j_count-1 @@ -313,12 +317,6 @@ subroutine psb_zmatdist(a_glob, a, ctxt, desc_a,& end do endif i_count = j_count - if ((use_vsz).and.(j_count <= nrow)) then - if (j_count > lastigp) then - iproc = iproc + 1 - lastigp = lastigp + vsz(iproc+1) - end if - end if end do call psb_barrier(ctxt) From 25f73d15db96490274883410d606362c4104c433 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 30 Sep 2025 10:23:40 +0200 Subject: [PATCH 021/175] Fix spspmm allocation to avoid double free error --- base/serial/impl/psb_c_csr_impl.F90 | 4 ++-- base/serial/impl/psb_d_csr_impl.F90 | 4 ++-- base/serial/impl/psb_s_csr_impl.F90 | 4 ++-- base/serial/impl/psb_z_csr_impl.F90 | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/base/serial/impl/psb_c_csr_impl.F90 b/base/serial/impl/psb_c_csr_impl.F90 index 76b962887..af5812da9 100644 --- a/base/serial/impl/psb_c_csr_impl.F90 +++ b/base/serial/impl/psb_c_csr_impl.F90 @@ -4277,7 +4277,7 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) call psb_realloc(nb,row,info) - if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(max(na,nb),idxs,info) if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero @@ -6652,7 +6652,7 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) call psb_realloc(nb,row,info) - if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(max(na,nb),idxs,info) if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero diff --git a/base/serial/impl/psb_d_csr_impl.F90 b/base/serial/impl/psb_d_csr_impl.F90 index 17d6bb8e2..5ff34a2f6 100644 --- a/base/serial/impl/psb_d_csr_impl.F90 +++ b/base/serial/impl/psb_d_csr_impl.F90 @@ -4277,7 +4277,7 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) call psb_realloc(nb,row,info) - if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(max(na,nb),idxs,info) if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero @@ -6652,7 +6652,7 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) call psb_realloc(nb,row,info) - if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(max(na,nb),idxs,info) if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero diff --git a/base/serial/impl/psb_s_csr_impl.F90 b/base/serial/impl/psb_s_csr_impl.F90 index 5522bf857..a7dd2c159 100644 --- a/base/serial/impl/psb_s_csr_impl.F90 +++ b/base/serial/impl/psb_s_csr_impl.F90 @@ -4277,7 +4277,7 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) call psb_realloc(nb,row,info) - if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(max(na,nb),idxs,info) if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero @@ -6652,7 +6652,7 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) call psb_realloc(nb,row,info) - if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(max(na,nb),idxs,info) if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero diff --git a/base/serial/impl/psb_z_csr_impl.F90 b/base/serial/impl/psb_z_csr_impl.F90 index ccd55f0a1..9f6c9b941 100644 --- a/base/serial/impl/psb_z_csr_impl.F90 +++ b/base/serial/impl/psb_z_csr_impl.F90 @@ -4277,7 +4277,7 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) call psb_realloc(nb,row,info) - if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(max(na,nb),idxs,info) if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero @@ -6652,7 +6652,7 @@ contains nze = min(size(c%val),size(c%ja)) isz = max(ma,na,mb,nb) call psb_realloc(nb,row,info) - if (info == 0) call psb_realloc(na,idxs,info) + if (info == 0) call psb_realloc(max(na,nb),idxs,info) if (info == 0) call psb_realloc(nb,irow,info) if (info /= 0) return row = dzero From d16b39ed1b1355dd128bf79867a99d339c46fc20 Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Tue, 30 Sep 2025 17:18:38 +0200 Subject: [PATCH 022/175] Exposed psb_c_cd_get_global_cols into header file --- cbind/base/psb_c_base.h | 1 + 1 file changed, 1 insertion(+) diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 708a0e0fb..f28f7bbbd 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -85,6 +85,7 @@ extern "C" { psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); + psb_l_t psb_c_cd_get_global_cols(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_global_indices(psb_l_t idx[], psb_i_t nidx, bool owned, psb_c_descriptor *cd); psb_i_t psb_c_g2l(psb_c_descriptor *cdh,psb_l_t gindex,bool cowned); From 2f514d1959c9b5ed953c6fce7c925de5787c1f02 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 30 Sep 2025 19:09:03 +0200 Subject: [PATCH 023/175] Update sorting docs --- docs/html/userhtmlse6.html | 120 +- docs/psblas-3.9.pdf | 3482 ++++++++++++++++++------------------ docs/src/toolsrout.tex | 20 +- 3 files changed, 1842 insertions(+), 1780 deletions(-) diff --git a/docs/html/userhtmlse6.html b/docs/html/userhtmlse6.html index 7d23f86f8..f5be71d95 100644 --- a/docs/html/userhtmlse6.html +++ b/docs/html/userhtmlse6.html @@ -3872,72 +3872,76 @@ class="cmtt-10">integer(psb_long_int_k_) number. id="x12-1050006.27">Sorting utilities —

psb_msort — Sorting by the Merge-sort algorithm +class="pplb7t-x-x-120">_isort — Sorting by the Insertion-sort algorithm

psb_qsort — Sorting by the Quicksort algorithm +class="pplb7t-x-x-120">_msort — Sorting by the Merge-sort algorithm

psb_qsort — Sorting by the Quicksort algorithm +

psb_hsort — Sorting by the Heapsort algorithm

+call psb_isort(x,ix,dir,flag)
 call psb_msort(x,ix,dir,flag)
 call psb_qsort(x,ix,dir,flag)
 call psb_hsort(x,ix,dir,flag)
 
-

-

These serial routines sort a sequence

+

These serial routines sort a sequence X into ascending or descending order. The -argument meaning is identical for the three calls; the only difference is the algorithm -used to accomplish the task (see Usage Notes below). +argument meaning is identical for all calls; the only difference is the algorithm used +to accomplish the task (see Usage Notes below).

-

+

Type:

-

Asynchronous. +

Asynchronous.

-

+

On Entry

-

+

-

+

x

-

The sequence to be sorted.

The sequence to be sorted.
Type:required.
Specified as: an integer, real or complex array of rank 1.

-

+

ix

-

A vector of indices.

A vector of indices.
Type:optional.
Specified as: an integer array of (at least) the same size as X.

-

+

dir

-

The desired ordering.

The desired ordering.
Type:optional.
Specified as: an integer value:

-

+

Integer and real data:

-

psb_sort_up_, psb_sort_down_, psb_asort_up_, @@ -3948,11 +3952,11 @@ class="cmtt-10">psb_sort_up_.

-

+

Complex data:

-

psb_lsort_up_, psb_lsort_down_, psb_asort_up_, @@ -3960,11 +3964,11 @@ class="cmtt-10">psb_asort_up_, class="cmtt-10">psb_asort_down_; default psb_lsort_up_.

-

+

flag

-

Whether to keep the original values in

Whether to keep the original values in IX.
Type:optional.
psb_sort_keep_idx_; default psb_sort_ovw_idx_.

-

+

-

+

On Return

-

+

-

+

x

-

The sequence of values, in the chosen ordering.

The sequence of values, in the chosen ordering.
Type:required.
Specified as: an integer, real or complex array of rank 1.

-

+

ix

-

A vector of indices.

A vector of indices.
Type: Optional
An integer array of rank 1, whose entries are moved to the same position as the corresponding entries in x.

-

Notes

  1. -

    For integer or real data the sorting can be performed in the up/down +

    For integer or real data the sorting can be performed in the up/down direction, on the natural or absolute values;

  2. -

    For complex data the sorting can be done in a lexicographic order (i.e.: +

    For complex data the sorting can be done in a lexicographic order (i.e.: sort on the real part with ties broken according to the imaginary part) or on the absolute values; @@ -4020,15 +4024,15 @@ class="pplb7t-x-x-120">Notes

  3. -

    The routines return the items in the chosen ordering; the output +

    The routines return the items in the chosen ordering; the output difference is the handling of ties (i.e. items with an equal value) in the - original input. With the merge-sort algorithm ties are preserved in the - same relative order as they had in the original sequence, while this is not - guaranteed for quicksort or heapsort; + original input. With the insertion-sort or merge-sort algorithms ties are + preserved in the same relative order as they had in the original sequence, + while this is not guaranteed for quicksort or heapsort;

  4. -

    If

    If flag = psb_) occupied

  5. -

    If

    If flag = psb_(:) have already been initialized by the user;

  6. -

    The three sorting algorithms have a similar

    Three sorting algorithms have a similar O(n log n) expected running time; +class="zplmr7t-">) expected running time, + whereas insertion sort has an expected running time O(n2); of the other three, in the average case quicksort will be the fastest and merge-sort the slowest. However note that:

    1. -

      The worst case running time +

      The the best case running time for insertion sort is Ω(n) while the + average and worst case are O(n2); however for very short input + sequences this is likely to be the fastest method; +

    2. +
    3. +

      The worst case running time for quicksort is O(); the algorithm implemented here follows the apply;

    4. -

      The worst case running time for merge-sort and heap-sort is + class="enumerate" id="x12-105018x3"> +

      The worst case running time for merge-sort and heap-sort is O(n log n) as the average case; + + +

    5. -

      The merge-sort algorithm is implemented to take advantage of + class="enumerate" id="x12-105020x4"> +

      The merge-sort algorithm is implemented to take advantage of subsequences that may be already in the desired ordering prior to the subroutine call; this situation is relatively common when dealing with groups of indices of sparse matrix entries, thus merge-sort is - - - the preferred choice when a sorting is needed by other routines in the library.

diff --git a/docs/psblas-3.9.pdf b/docs/psblas-3.9.pdf index 6f6505c65..a0d16c372 100644 --- a/docs/psblas-3.9.pdf +++ b/docs/psblas-3.9.pdf @@ -21904,81 +21904,88 @@ endstream endobj 1742 0 obj << -/Length 6065 +/Length 6342 >> stream 0 g 0 G 0 g 0 G BT -/F75 11.9552 Tf 150.705 706.129 Td [(6.27)-1000(Sorting)-250(utilities)-250(\227)]TJ -0.371 -20.164 Td [(psb)]TJ +/F75 11.9552 Tf 150.705 706.129 Td [(6.27)-1000(Sorting)-250(utilities)-250(\227)]TJ -0.371 -19.314 Td [(psb)]TJ +ET +q +1 0 0 1 170.969 687.014 cm +[]0 d 0 J 0.398 w 0 0 m 3.587 0 l S +Q +BT +/F75 11.9552 Tf 174.555 686.815 Td [(isort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Insertion-sort)-250(algorithm)]TJ -24.221 -12.136 Td [(psb)]TJ ET q -1 0 0 1 170.969 686.164 cm +1 0 0 1 170.969 674.878 cm []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 174.555 685.965 Td [(msort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Merge-sort)-250(algorithm)]TJ -24.221 -12.574 Td [(psb)]TJ +/F75 11.9552 Tf 174.555 674.679 Td [(msort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Merge-sort)-250(algorithm)]TJ -24.221 -12.136 Td [(psb)]TJ ET q -1 0 0 1 170.969 673.59 cm +1 0 0 1 170.969 662.742 cm []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 174.555 673.391 Td [(qsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Quicksort)-250(algorithm)]TJ -24.221 -12.575 Td [(psb)]TJ +/F75 11.9552 Tf 174.555 662.543 Td [(qsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Quicksort)-250(algorithm)]TJ -24.221 -12.136 Td [(psb)]TJ ET q -1 0 0 1 170.969 661.016 cm +1 0 0 1 170.969 650.607 cm []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 174.555 660.816 Td [(hsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Heapsort)-250(algorithm)]TJ +/F75 11.9552 Tf 174.555 650.407 Td [(hsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Heapsort)-250(algorithm)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -23.85 -22.402 Td [(call)-525(psb_msort\050x,ix,dir,flag\051)]TJ 0 -11.955 Td [(call)-525(psb_qsort\050x,ix,dir,flag\051)]TJ 0 -11.955 Td [(call)-525(psb_hsort\050x,ix,dir,flag\051)]TJ/F84 9.9626 Tf 1.001 0 0 1 165.649 592.721 Tm [(These)-249(serial)-248(r)18(outines)-249(sort)-248(a)-249(sequence)]TJ/F78 9.9626 Tf 1 0 0 1 328.652 592.721 Tm [(X)]TJ/F84 9.9626 Tf 1.001 0 0 1 338.668 592.721 Tm [(into)-249(ascending)-248(or)-249(descending)-248(or)18(der)74(.)]TJ 0.998 0 0 1 150.396 580.766 Tm [(The)-251(ar)18(gument)-250(meaning)-251(is)-251(identical)-251(for)-250(the)-251(thr)18(ee)-251(calls;)-250(the)-251(only)-251(dif)18(fer)18(ence)-251(is)-250(the)]TJ 1 0 0 1 150.705 568.811 Tm [(algorithm)-250(used)-250(to)-250(accomplish)-250(the)-250(task)-250(\050see)-250(Usage)-250(Notes)-250(below\051.)]TJ +/F145 9.9626 Tf -23.85 -20.648 Td [(call)-525(psb_isort\050x,ix,dir,flag\051)]TJ 0 -11.955 Td [(call)-525(psb_msort\050x,ix,dir,flag\051)]TJ 0 -11.955 Td [(call)-525(psb_qsort\050x,ix,dir,flag\051)]TJ 0 -11.955 Td [(call)-525(psb_hsort\050x,ix,dir,flag\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 573.426 Tm [(These)-314(serial)-313(r)17(outines)-313(sort)-314(a)-314(sequence)]TJ/F78 9.9626 Tf 1 0 0 1 335.711 573.426 Tm [(X)]TJ/F84 9.9626 Tf 1.02 0 0 1 346.436 573.426 Tm [(into)-314(ascending)-313(or)-314(descending)-314(or)18(-)]TJ 1.02 0 0 1 150.705 561.471 Tm [(der)73(.)-328(The)-253(ar)18(gument)-253(meaning)-253(is)-253(identical)-253(for)-253(all)-253(calls;)-257(the)-253(only)-253(dif)17(f)1(er)17(ence)-253(is)-253(the)]TJ 1 0 0 1 150.705 549.516 Tm [(algorithm)-250(used)-250(to)-250(accomplish)-250(the)-250(task)-250(\050see)-250(Usage)-250(Notes)-250(below\051.)]TJ 0 g 0 G -/F75 9.9626 Tf 0 -21.783 Td [(T)90(ype:)]TJ +/F75 9.9626 Tf 0 -20.467 Td [(T)90(ype:)]TJ 0 g 0 G /F84 9.9626 Tf 29.439 0 Td [(Asynchr)18(onous.)]TJ 0 g 0 G -/F75 9.9626 Tf -29.439 -22.402 Td [(On)-250(Entry)]TJ +/F75 9.9626 Tf -29.439 -20.648 Td [(On)-250(Entry)]TJ 0 g 0 G 0 g 0 G - 0 -22.402 Td [(x)]TJ + 0 -20.648 Td [(x)]TJ 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(sequence)-250(to)-250(be)-250(sorted.)]TJ 14.944 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -22.402 Td [(ix)]TJ +/F75 9.9626 Tf -24.906 -20.648 Td [(ix)]TJ 0 g 0 G /F84 9.9626 Tf 12.891 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.707 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(of)-250(\050at)-250(least\051)-250(the)-250(same)-250(size)-250(as)]TJ/F78 9.9626 Tf 254.19 0 Td [(X)]TJ/F84 9.9626 Tf 7.536 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -286.632 -22.402 Td [(dir)]TJ +/F75 9.9626 Tf -286.632 -20.648 Td [(dir)]TJ 0 g 0 G -/F84 9.9626 Tf 17.952 0 Td [(The)-250(desir)18(ed)-250(or)18(dering.)]TJ 6.646 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value:)]TJ +/F84 9.9626 Tf 17.952 0 Td [(The)-250(desir)18(ed)-250(or)18(dering.)]TJ 6.646 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value:)]TJ 0 g 0 G -/F75 9.9626 Tf 0 -22.402 Td [(Integer)-250(and)-250(real)-250(data:)]TJ +/F75 9.9626 Tf 0 -20.648 Td [(Integer)-250(and)-250(real)-250(data:)]TJ 0 g 0 G -/F145 9.9626 Tf 101.28 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 339.655 363.286 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 345.778 363.286 Tm [(psb_sort_down_)]TJ/F84 9.9626 Tf 1.02 0 0 1 419.003 363.286 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 425.126 363.286 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 363.286 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 197.529 351.331 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 78.455 0 Td [(;)-250(default)]TJ/F145 9.9626 Tf 38.784 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 62.765 0 Td [(.)]TJ +/F145 9.9626 Tf 101.28 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 339.655 354.078 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 345.778 354.078 Tm [(psb_sort_down_)]TJ/F84 9.9626 Tf 1.02 0 0 1 419.003 354.078 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 425.126 354.078 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 354.078 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 197.529 342.122 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 78.455 0 Td [(;)-250(default)]TJ/F145 9.9626 Tf 38.784 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 62.765 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -201.922 -17.178 Td [(Complex)-250(data:)]TJ +/F75 9.9626 Tf -201.922 -16.301 Td [(Complex)-250(data:)]TJ 0 g 0 G -/F145 9.9626 Tf 70.287 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 313.892 334.153 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 318.345 334.153 Tm [(psb_lsort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.8 334.153 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 401.254 334.153 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 469.248 334.153 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 473.701 334.153 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 552.157 334.153 Tm [(;)]TJ 1 0 0 1 197.529 322.197 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 67.994 0 Td [(.)]TJ +/F145 9.9626 Tf 70.287 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 313.892 325.821 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 318.345 325.821 Tm [(psb_lsort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.8 325.821 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 401.254 325.821 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 469.248 325.821 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 473.701 325.821 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 552.157 325.821 Tm [(;)]TJ 1 0 0 1 197.529 313.866 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 67.994 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -148.621 -22.402 Td [(\003ag)]TJ +/F75 9.9626 Tf -148.621 -20.648 Td [(\003ag)]TJ 0 g 0 G -/F84 9.9626 Tf 21.091 0 Td [(Whether)-250(to)-250(keep)-250(the)-250(original)-250(values)-250(in)]TJ/F78 9.9626 Tf 171.519 0 Td [(I)-81(X)]TJ/F84 9.9626 Tf 11.661 0 Td [(.)]TJ -179.673 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 275.885 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 301.54 275.885 Tm [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 275.885 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 403.429 275.885 Tm [(psb_sort_keep_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 497.575 275.885 Tm [(;)]TJ 1 0 0 1 175.611 263.93 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ +/F84 9.9626 Tf 21.091 0 Td [(Whether)-250(to)-250(keep)-250(the)-250(original)-250(values)-250(in)]TJ/F78 9.9626 Tf 171.519 0 Td [(I)-81(X)]TJ/F84 9.9626 Tf 11.661 0 Td [(.)]TJ -179.673 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 269.307 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 301.54 269.307 Tm [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 269.307 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 403.429 269.307 Tm [(psb_sort_keep_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 497.575 269.307 Tm [(;)]TJ 1 0 0 1 175.611 257.352 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -147.625 -24.395 Td [(On)-250(Return)]TJ +/F75 9.9626 Tf -147.625 -22.64 Td [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G - 0 -22.402 Td [(x)]TJ + 0 -20.648 Td [(x)]TJ 0 g 0 G -/F84 9.9626 Tf 9.654 0 Td [(The)-250(sequence)-250(of)-250(values,)-250(in)-250(the)-250(chosen)-250(or)18(dering.)]TJ 14.944 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ +/F84 9.9626 Tf 9.654 0 Td [(The)-250(sequence)-250(of)-250(values,)-250(in)-250(the)-250(chosen)-250(or)18(dering.)]TJ 14.944 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -22.402 Td [(ix)]TJ +/F75 9.9626 Tf -24.906 -20.648 Td [(ix)]TJ 0 g 0 G -/F84 9.9626 Tf 12.891 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.707 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(Optional)]TJ/F84 9.9626 Tf 0.996 0 0 1 175.223 146.91 Tm [(An)-251(integer)-250(array)-251(of)-251(rank)-250(1,)-251(whose)-251(entries)-250(ar)18(e)-251(moved)-251(to)-250(the)-251(same)-251(position)]TJ 1 0 0 1 175.611 134.955 Tm [(as)-250(the)-250(corr)18(esponding)-250(entries)-250(in)]TJ/F78 9.9626 Tf 138.215 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ +/F84 9.9626 Tf 12.891 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.707 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(Optional)]TJ/F84 9.9626 Tf 0.996 0 0 1 175.223 145.595 Tm [(An)-251(integer)-250(array)-251(of)-251(rank)-250(1,)-251(whose)-251(entries)-250(ar)18(e)-251(moved)-251(to)-250(the)-251(same)-251(position)]TJ 1 0 0 1 175.611 133.64 Tm [(as)-250(the)-250(corr)18(esponding)-250(entries)-250(in)]TJ/F78 9.9626 Tf 138.215 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ 0 g 0 G - -3.944 -44.517 Td [(110)]TJ + -3.944 -43.202 Td [(110)]TJ 0 g 0 G ET @@ -21986,7 +21993,7 @@ endstream endobj 1746 0 obj << -/Length 8202 +/Length 9569 >> stream 0 g 0 G @@ -22004,9 +22011,9 @@ BT 0 g 0 G -12.453 -19.925 Td [(3.)]TJ 0 g 0 G - 0.98 0 0 1 124.493 610.488 Tm [(The)-240(r)18(outines)-240(r)18(et)1(urn)-241(the)-240(items)-240(in)-240(the)-240(chosen)-240(or)18(dering;)-245(the)-240(output)-240(dif)18(fer)18(ence)]TJ 0.98 0 0 1 124.802 598.532 Tm [(is)-256(the)-256(handling)-256(of)-256(ties)-256(\050i.e.)-318(items)-256(with)-256(an)-256(equal)-256(value\051)-256(in)-256(the)-256(original)-256(input.)]TJ 0.98 0 0 1 124.304 586.577 Tm [(W)56(ith)-225(the)-226(mer)18(ge-so)1(rt)-226(algorithm)-226(t)1(ies)-226(ar)18(e)-225(pr)18(eserved)-225(in)-226(the)-225(same)-226(r)19(elative)-226(or)18(der)]TJ 1.02 0 0 1 124.802 574.622 Tm [(as)-352(they)-351(had)-352(in)-352(the)-351(original)-352(sequence,)-378(while)-352(this)-351(is)-352(not)-352(guaranteed)-351(for)]TJ 1 0 0 1 124.523 562.667 Tm [(quicksort)-250(or)-250(heapsort;)]TJ + 0.98 0 0 1 124.493 610.488 Tm [(The)-240(r)18(outines)-240(r)18(et)1(urn)-241(the)-240(items)-240(in)-240(the)-240(chosen)-240(or)18(dering;)-245(the)-240(output)-240(dif)18(fer)18(ence)]TJ 0.98 0 0 1 124.802 598.532 Tm [(is)-256(the)-256(handling)-256(of)-256(ties)-256(\050i.e.)-318(items)-256(with)-256(an)-256(equal)-256(value\051)-256(in)-256(the)-256(original)-256(input.)]TJ 1 0 0 1 124.304 586.577 Tm [(W)55(ith)-250(the)-250(insertion-sort)-250(or)-250(mer)18(ge-sort)-250(algorithms)-250(ties)-250(ar)18(e)-250(pr)18(eserved)-250(in)-250(the)]TJ 0.997 0 0 1 124.802 574.622 Tm [(same)-250(r)18(elative)-250(or)18(der)-251(as)-250(they)-250(had)-251(i)1(n)-251(the)-250(original)-250(sequence,)-251(while)-250(this)-250(is)-250(not)]TJ 1 0 0 1 124.802 562.667 Tm [(guaranteed)-250(for)-250(quicksort)-250(or)-250(heapsort;)]TJ 0 g 0 G - -12.174 -19.925 Td [(4.)]TJ + -12.453 -19.925 Td [(4.)]TJ 0 g 0 G 0.98 0 0 1 124.802 542.742 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 135.146 542.742 Tm [(f)-160(l)-70(a)-47(g)]TJ/F192 10.3811 Tf 20.72 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ ET @@ -22072,27 +22079,31 @@ BT 0 g 0 G -34.749 -19.926 Td [(6.)]TJ 0 g 0 G - 1.008 0 0 1 124.493 455.07 Tm [(The)-249(thr)18(ee)-249(sorting)-248(algorithms)-249(have)-249(a)-248(similar)]TJ/F78 9.9626 Tf 1 0 0 1 317.915 455.07 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.273 0 Td [(n)]TJ/F84 9.9626 Tf 7.325 0 Td [(log)]TJ/F78 9.9626 Tf 15.662 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 1.008 0 0 1 365.611 455.07 Tm [(expected)-249(r)8(unning)]TJ 1.008 0 0 1 124.802 443.115 Tm [(time;)-248(in)-248(the)-248(average)-248(case)-248(quicksort)-248(will)-247(be)-248(the)-248(fastest)-248(and)-248(mer)18(ge-sort)-248(the)]TJ 1 0 0 1 124.802 431.16 Tm [(slowest.)-310(However)-250(note)-250(that:)]TJ + 0.98 0 0 1 124.493 455.07 Tm [(Thr)18(ee)-256(sorting)-256(algorithms)-256(have)-256(a)-256(similar)]TJ/F78 9.9626 Tf 1 0 0 1 296.993 455.07 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.662 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 344.691 455.07 Tm [(expected)-256(r)8(unning)-256(time,)]TJ 1.017 0 0 1 124.384 443.115 Tm [(wher)18(eas)-247(insertion)-246(sort)-247(has)-246(an)-247(expected)-246(r)8(unning)-247(time)]TJ/F78 9.9626 Tf 1 0 0 1 360.734 443.115 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 387.23 443.115 Tm [(;)-247(of)-246(the)-247(other)]TJ 0.999 0 0 1 124.802 431.16 Tm [(thr)18(ee,)-250(in)-250(the)-249(average)-250(case)-250(quicksort)-250(will)-249(be)-250(the)-250(fastest)-250(and)-249(mer)18(ge-sort)-250(the)]TJ 1 0 0 1 124.802 419.205 Tm [(slowest.)-310(However)-250(note)-250(that:)]TJ 0 g 0 G 5.32 -19.925 Td [(\050a\051)]TJ 0 g 0 G - 0.98 0 0 1 146.411 411.235 Tm [(The)-241(worst)-240(case)-241(r)8(unning)-241(time)-240(for)-241(quicksort)-241(is)]TJ/F78 9.9626 Tf 1 0 0 1 338.306 411.235 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.616 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.616 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.802 411.235 Tm [(;)-245(the)-241(algorithm)-241(im-)]TJ 1.007 0 0 1 146.421 399.28 Tm [(plemented)-246(her)18(e)-246(follows)-246(the)-246(well-known)-246(median-of-thr)18(ee)-246(heuristics,)]TJ 1 0 0 1 146.72 387.324 Tm [(but)-250(the)-250(worst)-250(case)-250(may)-250(still)-250(apply;)]TJ + 1.02 0 0 1 146.411 399.28 Tm [(The)-274(the)-273(best)-274(case)-274(r)8(unning)-274(ti)1(me)-274(for)-274(insertion)-274(so)1(rt)-274(is)]TJ/F243 9.9626 Tf 1 0 0 1 376.039 399.28 Tm [(W)]TJ/F192 10.3811 Tf 8.528 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 401.56 399.28 Tm [(while)-274(the)]TJ 1.02 0 0 1 146.72 387.324 Tm [(average)-359(and)-360(worst)-359(case)-359(ar)17(e)]TJ/F78 9.9626 Tf 1 0 0 1 275.57 387.324 Tm [(O)]TJ/F192 10.3811 Tf 7.999 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F192 10.3811 Tf 4.409 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 302.065 387.324 Tm [(;)-416(however)-360(for)-359(very)-359(short)-360(input)]TJ 1 0 0 1 146.72 375.369 Tm [(sequences)-250(this)-250(is)-250(likely)-250(to)-250(be)-250(the)-250(fastest)-250(method;)]TJ 0 g 0 G -17.126 -15.94 Td [(\050b\051)]TJ 0 g 0 G - 0.98 0 0 1 146.411 371.384 Tm [(The)-194(worst)-194(case)-194(r)9(unning)-194(time)-194(for)-194(mer)18(ge-sort)-193(and)-194(heap-sort)-194(is)]TJ/F78 9.9626 Tf 1 0 0 1 402.204 371.384 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.663 0 Td [(n)]TJ/F192 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf -296.533 -11.955 Td [(as)-250(the)-250(average)-250(case;)]TJ + 0.98 0 0 1 146.411 359.429 Tm [(The)-241(worst)-240(case)-241(r)8(unning)-241(time)-240(for)-241(quicksort)-241(is)]TJ/F78 9.9626 Tf 1 0 0 1 338.306 359.429 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.616 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.616 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.802 359.429 Tm [(;)-245(the)-241(algorithm)-241(im-)]TJ 1.007 0 0 1 146.421 347.474 Tm [(plemented)-246(her)18(e)-246(follows)-246(the)-246(well-known)-246(median-of-thr)18(ee)-246(heuristics,)]TJ 1 0 0 1 146.72 335.519 Tm [(but)-250(the)-250(worst)-250(case)-250(may)-250(still)-250(apply;)]TJ +0 g 0 G + -16.04 -15.941 Td [(\050c\051)]TJ 0 g 0 G - -16.04 -15.94 Td [(\050c\051)]TJ + 0.98 0 0 1 146.411 319.578 Tm [(The)-194(worst)-194(case)-194(r)9(unning)-194(time)-194(for)-194(mer)18(ge-sort)-193(and)-194(heap-sort)-194(is)]TJ/F78 9.9626 Tf 1 0 0 1 402.204 319.578 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.663 0 Td [(n)]TJ/F192 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf -296.533 -11.955 Td [(as)-250(the)-250(average)-250(case;)]TJ 0 g 0 G - 1.005 0 0 1 146.411 343.489 Tm [(The)-249(mer)18(ge-sort)-249(algorithm)-249(is)-249(implemented)-249(to)-250(take)-249(advantage)-249(of)-249(sub-)]TJ 1.02 0 0 1 146.72 331.534 Tm [(sequences)-260(that)-261(may)-261(be)-260(alr)18(eady)-261(in)-260(the)-261(desir)18(ed)-261(or)18(dering)-261(prior)-260(to)-261(the)]TJ 1.02 0 0 1 146.72 319.578 Tm [(subr)18(outine)-321(call;)-358(this)-321(situation)-320(is)-321(r)18(elatively)-321(common)-320(when)-321(dealing)]TJ 0.98 0 0 1 146.301 307.623 Tm [(with)-239(gr)18(oups)-240(of)-239(indices)-239(of)-240(sparse)-239(matrix)-240(entries,)-242(thus)-240(mer)19(ge-sort)-240(is)-239(the)]TJ 1.02 0 0 1 146.421 295.668 Tm [(pr)18(eferr)17(ed)-268(choice)-268(when)-268(a)-268(sorting)-268(is)-268(needed)-268(by)-269(other)-268(r)18(outines)-268(in)-268(the)]TJ 1 0 0 1 146.72 283.713 Tm [(library)111(.)]TJ + -17.704 -15.94 Td [(\050d\051)]TJ 0 g 0 G - 117.559 -193.275 Td [(111)]TJ + 1.005 0 0 1 146.411 291.683 Tm [(The)-249(mer)18(ge-sort)-249(algorithm)-249(is)-249(implemented)-249(to)-250(take)-249(advantage)-249(of)-249(sub-)]TJ 1.02 0 0 1 146.72 279.728 Tm [(sequences)-260(that)-261(may)-261(be)-260(alr)18(eady)-261(in)-260(the)-261(desir)18(ed)-261(or)18(dering)-261(prior)-260(to)-261(the)]TJ 1.02 0 0 1 146.72 267.773 Tm [(subr)18(outine)-321(call;)-358(this)-321(situation)-320(is)-321(r)18(elatively)-321(common)-320(when)-321(dealing)]TJ 0.98 0 0 1 146.301 255.818 Tm [(with)-239(gr)18(oups)-240(of)-239(indices)-239(of)-240(sparse)-239(matrix)-240(entries,)-242(thus)-240(mer)19(ge-sort)-240(is)-239(the)]TJ 1.02 0 0 1 146.421 243.862 Tm [(pr)18(eferr)17(ed)-268(choice)-268(when)-268(a)-268(sorting)-268(is)-268(needed)-268(by)-269(other)-268(r)18(outines)-268(in)-268(the)]TJ 1 0 0 1 146.72 231.907 Tm [(library)111(.)]TJ +0 g 0 G + 117.559 -141.469 Td [(111)]TJ 0 g 0 G ET endstream endobj -1759 0 obj +1760 0 obj << /Length 172 >> @@ -22108,7 +22119,7 @@ ET endstream endobj -1763 0 obj +1764 0 obj << /Length 6837 >> @@ -22200,7 +22211,7 @@ ET endstream endobj -1769 0 obj +1770 0 obj << /Length 4738 >> @@ -22256,7 +22267,7 @@ ET endstream endobj -1775 0 obj +1776 0 obj << /Length 4507 >> @@ -22309,7 +22320,7 @@ ET endstream endobj -1783 0 obj +1784 0 obj << /Length 2607 >> @@ -22367,7 +22378,7 @@ ET endstream endobj -1787 0 obj +1788 0 obj << /Length 3383 >> @@ -22429,7 +22440,7 @@ ET endstream endobj -1791 0 obj +1792 0 obj << /Length 1171 >> @@ -22466,7 +22477,7 @@ ET endstream endobj -1795 0 obj +1796 0 obj << /Length 1466 >> @@ -22503,7 +22514,7 @@ ET endstream endobj -1799 0 obj +1800 0 obj << /Length 1287 >> @@ -22540,7 +22551,7 @@ ET endstream endobj -1803 0 obj +1804 0 obj << /Length 6065 >> @@ -22600,7 +22611,7 @@ ET endstream endobj -1808 0 obj +1809 0 obj << /Length 5230 >> @@ -22723,7 +22734,7 @@ ET endstream endobj -1816 0 obj +1817 0 obj << /Length 6196 >> @@ -22783,7 +22794,7 @@ ET endstream endobj -1820 0 obj +1821 0 obj << /Length 5025 >> @@ -22911,19 +22922,19 @@ endobj /Type /ObjStm /N 100 /First 971 -/Length 9417 +/Length 9352 >> stream 1717 0 1718 59 1713 118 1722 213 1720 352 1724 497 413 555 1721 612 1726 735 1728 853 1729 912 1730 971 1731 1030 1725 1089 1736 1211 1732 1368 1733 1513 1734 1660 1738 1807 417 1865 1735 1922 1741 2030 1743 2148 421 2207 1740 2265 1745 2373 1747 2491 1748 2549 1749 2607 1750 2665 -1751 2723 1752 2781 1753 2839 1754 2897 1755 2955 1756 3013 1744 3071 1758 3193 1760 3311 425 3370 -1757 3428 1762 3509 1764 3627 429 3685 1765 3742 1766 3800 1761 3858 1768 3994 1770 4112 433 4171 -1771 4229 1772 4287 1767 4344 1774 4480 1776 4598 437 4656 1777 4713 1778 4771 1779 4829 1773 4887 -1782 5023 1784 5141 441 5200 1781 5258 1786 5353 1788 5471 445 5529 1785 5586 1790 5708 1792 5826 -449 5885 1789 5943 1794 6038 1796 6156 453 6214 1793 6271 1798 6366 1800 6484 457 6543 1797 6601 -1802 6696 1804 6814 461 6872 1801 6929 1807 7080 1809 7198 1810 7257 1811 7316 1812 7375 1806 7434 -1815 7572 1817 7690 465 7748 1814 7805 1819 7956 1821 8074 1822 8133 1823 8192 1824 8250 1818 8308 +1751 2723 1752 2781 1753 2839 1754 2897 1755 2955 1756 3013 1757 3071 1744 3129 1759 3266 1761 3384 +425 3443 1758 3501 1763 3582 1765 3700 429 3758 1766 3815 1767 3873 1762 3931 1769 4067 1771 4185 +433 4244 1772 4302 1773 4360 1768 4417 1775 4553 1777 4671 437 4729 1778 4786 1779 4844 1780 4902 +1774 4960 1783 5096 1785 5214 441 5273 1782 5331 1787 5426 1789 5544 445 5602 1786 5659 1791 5781 +1793 5899 449 5958 1790 6016 1795 6111 1797 6229 453 6287 1794 6344 1799 6439 1801 6557 457 6616 +1798 6674 1803 6769 1805 6887 461 6945 1802 7002 1808 7153 1810 7271 1811 7330 1812 7389 1813 7448 +1807 7507 1816 7645 1818 7763 465 7821 1815 7878 1820 8029 1822 8147 1823 8206 1824 8265 1825 8323 % 1717 0 obj << /D [1714 0 R /XYZ 150.705 370.138 null] @@ -23101,342 +23112,341 @@ stream >> % 1754 0 obj << -/D [1745 0 R /XYZ 99.895 425.023 null] +/D [1745 0 R /XYZ 99.895 413.068 null] >> % 1755 0 obj << -/D [1745 0 R /XYZ 99.895 382.522 null] +/D [1745 0 R /XYZ 99.895 370.567 null] >> % 1756 0 obj << -/D [1745 0 R /XYZ 99.895 354.627 null] +/D [1745 0 R /XYZ 99.895 330.717 null] +>> +% 1757 0 obj +<< +/D [1745 0 R /XYZ 99.895 302.821 null] >> % 1744 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F243 1285 0 R >> /ProcSet [ /PDF /Text ] >> -% 1758 0 obj +% 1759 0 obj << /Type /Page -/Contents 1759 0 R -/Resources 1757 0 R +/Contents 1760 0 R +/Resources 1758 0 R /MediaBox [0 0 595.276 841.89] /Parent 1739 0 R >> -% 1760 0 obj +% 1761 0 obj << -/D [1758 0 R /XYZ 149.705 753.953 null] +/D [1759 0 R /XYZ 149.705 753.953 null] >> % 425 0 obj << -/D [1758 0 R /XYZ 150.705 716.092 null] +/D [1759 0 R /XYZ 150.705 716.092 null] >> -% 1757 0 obj +% 1758 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1762 0 obj +% 1763 0 obj << /Type /Page -/Contents 1763 0 R -/Resources 1761 0 R +/Contents 1764 0 R +/Resources 1762 0 R /MediaBox [0 0 595.276 841.89] /Parent 1739 0 R >> -% 1764 0 obj +% 1765 0 obj << -/D [1762 0 R /XYZ 98.895 753.953 null] +/D [1763 0 R /XYZ 98.895 753.953 null] >> % 429 0 obj << -/D [1762 0 R /XYZ 99.895 716.092 null] +/D [1763 0 R /XYZ 99.895 716.092 null] >> -% 1765 0 obj +% 1766 0 obj << -/D [1762 0 R /XYZ 99.895 170.282 null] +/D [1763 0 R /XYZ 99.895 170.282 null] >> -% 1766 0 obj +% 1767 0 obj << -/D [1762 0 R /XYZ 99.895 149.368 null] +/D [1763 0 R /XYZ 99.895 149.368 null] >> -% 1761 0 obj +% 1762 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1768 0 obj +% 1769 0 obj << /Type /Page -/Contents 1769 0 R -/Resources 1767 0 R +/Contents 1770 0 R +/Resources 1768 0 R /MediaBox [0 0 595.276 841.89] /Parent 1739 0 R >> -% 1770 0 obj +% 1771 0 obj << -/D [1768 0 R /XYZ 149.705 753.953 null] +/D [1769 0 R /XYZ 149.705 753.953 null] >> % 433 0 obj << -/D [1768 0 R /XYZ 150.705 716.092 null] +/D [1769 0 R /XYZ 150.705 716.092 null] >> -% 1771 0 obj +% 1772 0 obj << -/D [1768 0 R /XYZ 150.705 348.22 null] +/D [1769 0 R /XYZ 150.705 348.22 null] >> -% 1772 0 obj +% 1773 0 obj << -/D [1768 0 R /XYZ 150.705 313.8 null] +/D [1769 0 R /XYZ 150.705 313.8 null] >> -% 1767 0 obj +% 1768 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F78 686 0 R /F192 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1774 0 obj +% 1775 0 obj << /Type /Page -/Contents 1775 0 R -/Resources 1773 0 R +/Contents 1776 0 R +/Resources 1774 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1780 0 R +/Parent 1781 0 R >> -% 1776 0 obj +% 1777 0 obj << -/D [1774 0 R /XYZ 98.895 753.953 null] +/D [1775 0 R /XYZ 98.895 753.953 null] >> % 437 0 obj << -/D [1774 0 R /XYZ 99.895 716.092 null] ->> -% 1777 0 obj -<< -/D [1774 0 R /XYZ 99.895 441.869 null] +/D [1775 0 R /XYZ 99.895 716.092 null] >> % 1778 0 obj << -/D [1774 0 R /XYZ 99.895 395.439 null] +/D [1775 0 R /XYZ 99.895 441.869 null] >> % 1779 0 obj << -/D [1774 0 R /XYZ 99.895 363.559 null] +/D [1775 0 R /XYZ 99.895 395.439 null] >> -% 1773 0 obj +% 1780 0 obj +<< +/D [1775 0 R /XYZ 99.895 363.559 null] +>> +% 1774 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1782 0 obj +% 1783 0 obj << /Type /Page -/Contents 1783 0 R -/Resources 1781 0 R +/Contents 1784 0 R +/Resources 1782 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1780 0 R +/Parent 1781 0 R >> -% 1784 0 obj +% 1785 0 obj << -/D [1782 0 R /XYZ 149.705 753.953 null] +/D [1783 0 R /XYZ 149.705 753.953 null] >> % 441 0 obj << -/D [1782 0 R /XYZ 150.705 716.092 null] +/D [1783 0 R /XYZ 150.705 716.092 null] >> -% 1781 0 obj +% 1782 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1786 0 obj +% 1787 0 obj << /Type /Page -/Contents 1787 0 R -/Resources 1785 0 R +/Contents 1788 0 R +/Resources 1786 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1780 0 R +/Parent 1781 0 R >> -% 1788 0 obj +% 1789 0 obj << -/D [1786 0 R /XYZ 98.895 753.953 null] +/D [1787 0 R /XYZ 98.895 753.953 null] >> % 445 0 obj << -/D [1786 0 R /XYZ 99.895 716.092 null] +/D [1787 0 R /XYZ 99.895 716.092 null] >> -% 1785 0 obj +% 1786 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1790 0 obj +% 1791 0 obj << /Type /Page -/Contents 1791 0 R -/Resources 1789 0 R +/Contents 1792 0 R +/Resources 1790 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1780 0 R +/Parent 1781 0 R >> -% 1792 0 obj +% 1793 0 obj << -/D [1790 0 R /XYZ 149.705 753.953 null] +/D [1791 0 R /XYZ 149.705 753.953 null] >> % 449 0 obj << -/D [1790 0 R /XYZ 150.705 716.092 null] +/D [1791 0 R /XYZ 150.705 716.092 null] >> -% 1789 0 obj +% 1790 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1794 0 obj +% 1795 0 obj << /Type /Page -/Contents 1795 0 R -/Resources 1793 0 R +/Contents 1796 0 R +/Resources 1794 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1780 0 R +/Parent 1781 0 R >> -% 1796 0 obj +% 1797 0 obj << -/D [1794 0 R /XYZ 98.895 753.953 null] +/D [1795 0 R /XYZ 98.895 753.953 null] >> % 453 0 obj << -/D [1794 0 R /XYZ 99.895 716.092 null] +/D [1795 0 R /XYZ 99.895 716.092 null] >> -% 1793 0 obj +% 1794 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1798 0 obj +% 1799 0 obj << /Type /Page -/Contents 1799 0 R -/Resources 1797 0 R +/Contents 1800 0 R +/Resources 1798 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1780 0 R +/Parent 1781 0 R >> -% 1800 0 obj +% 1801 0 obj << -/D [1798 0 R /XYZ 149.705 753.953 null] +/D [1799 0 R /XYZ 149.705 753.953 null] >> % 457 0 obj << -/D [1798 0 R /XYZ 150.705 716.092 null] +/D [1799 0 R /XYZ 150.705 716.092 null] >> -% 1797 0 obj +% 1798 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1802 0 obj +% 1803 0 obj << /Type /Page -/Contents 1803 0 R -/Resources 1801 0 R +/Contents 1804 0 R +/Resources 1802 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1805 0 R +/Parent 1806 0 R >> -% 1804 0 obj +% 1805 0 obj << -/D [1802 0 R /XYZ 98.895 753.953 null] +/D [1803 0 R /XYZ 98.895 753.953 null] >> % 461 0 obj << -/D [1802 0 R /XYZ 99.895 716.092 null] +/D [1803 0 R /XYZ 99.895 716.092 null] >> -% 1801 0 obj +% 1802 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1807 0 obj +% 1808 0 obj << /Type /Page -/Contents 1808 0 R -/Resources 1806 0 R +/Contents 1809 0 R +/Resources 1807 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1805 0 R ->> -% 1809 0 obj -<< -/D [1807 0 R /XYZ 149.705 753.953 null] +/Parent 1806 0 R >> % 1810 0 obj << -/D [1807 0 R /XYZ 150.705 576.399 null] +/D [1808 0 R /XYZ 149.705 753.953 null] >> % 1811 0 obj << -/D [1807 0 R /XYZ 150.705 541.925 null] +/D [1808 0 R /XYZ 150.705 576.399 null] >> % 1812 0 obj << -/D [1807 0 R /XYZ 150.705 451.085 null] +/D [1808 0 R /XYZ 150.705 541.925 null] >> -% 1806 0 obj +% 1813 0 obj +<< +/D [1808 0 R /XYZ 150.705 451.085 null] +>> +% 1807 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1813 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> /ProcSet [ /PDF /Text ] >> -% 1815 0 obj +% 1816 0 obj << /Type /Page -/Contents 1816 0 R -/Resources 1814 0 R +/Contents 1817 0 R +/Resources 1815 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1805 0 R +/Parent 1806 0 R >> -% 1817 0 obj +% 1818 0 obj << -/D [1815 0 R /XYZ 98.895 753.953 null] +/D [1816 0 R /XYZ 98.895 753.953 null] >> % 465 0 obj << -/D [1815 0 R /XYZ 99.895 716.092 null] +/D [1816 0 R /XYZ 99.895 716.092 null] >> -% 1814 0 obj +% 1815 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1819 0 obj +% 1820 0 obj << /Type /Page -/Contents 1820 0 R -/Resources 1818 0 R +/Contents 1821 0 R +/Resources 1819 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1805 0 R ->> -% 1821 0 obj -<< -/D [1819 0 R /XYZ 149.705 753.953 null] +/Parent 1806 0 R >> % 1822 0 obj << -/D [1819 0 R /XYZ 150.705 588.355 null] +/D [1820 0 R /XYZ 149.705 753.953 null] >> % 1823 0 obj << -/D [1819 0 R /XYZ 150.705 553.88 null] +/D [1820 0 R /XYZ 150.705 588.355 null] >> % 1824 0 obj << -/D [1819 0 R /XYZ 150.705 463.04 null] +/D [1820 0 R /XYZ 150.705 553.88 null] >> -% 1818 0 obj +% 1825 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1813 0 R >> -/ProcSet [ /PDF /Text ] +/D [1820 0 R /XYZ 150.705 463.04 null] >> endstream endobj -1827 0 obj +1829 0 obj << /Length 6060 >> @@ -23496,7 +23506,7 @@ ET endstream endobj -1832 0 obj +1833 0 obj << /Length 5209 >> @@ -23619,7 +23629,7 @@ ET endstream endobj -1839 0 obj +1840 0 obj << /Length 6144 >> @@ -23679,7 +23689,7 @@ ET endstream endobj -1844 0 obj +1845 0 obj << /Length 5122 >> @@ -23802,7 +23812,7 @@ ET endstream endobj -1851 0 obj +1852 0 obj << /Length 6205 >> @@ -23862,7 +23872,7 @@ ET endstream endobj -1855 0 obj +1856 0 obj << /Length 5076 >> @@ -23983,7 +23993,7 @@ ET endstream endobj -1862 0 obj +1863 0 obj << /Length 6206 >> @@ -24043,7 +24053,7 @@ ET endstream endobj -1866 0 obj +1867 0 obj << /Length 5140 >> @@ -24166,7 +24176,7 @@ ET endstream endobj -1873 0 obj +1874 0 obj << /Length 6113 >> @@ -24226,7 +24236,7 @@ ET endstream endobj -1878 0 obj +1879 0 obj << /Length 6575 >> @@ -24362,7 +24372,7 @@ ET endstream endobj -1888 0 obj +1889 0 obj << /Length 5618 >> @@ -24419,7 +24429,7 @@ ET endstream endobj -1893 0 obj +1894 0 obj << /Length 5630 >> @@ -24475,7 +24485,7 @@ ET endstream endobj -1900 0 obj +1901 0 obj << /Length 6870 >> @@ -24499,7 +24509,7 @@ ET endstream endobj -1906 0 obj +1907 0 obj << /Length 10395 >> @@ -24950,7 +24960,7 @@ ET endstream endobj -1910 0 obj +1911 0 obj << /Length 3566 >> @@ -25061,7 +25071,7 @@ ET endstream endobj -1917 0 obj +1918 0 obj << /Length 1379 >> @@ -25104,7 +25114,7 @@ ET endstream endobj -1923 0 obj +1924 0 obj << /Length 1583 >> @@ -25161,7 +25171,7 @@ ET endstream endobj -1929 0 obj +1930 0 obj << /Length 2082 >> @@ -25232,7 +25242,7 @@ ET endstream endobj -1935 0 obj +1936 0 obj << /Length 535 >> @@ -25248,342 +25258,347 @@ ET endstream endobj -1829 0 obj +1826 0 obj << /Type /ObjStm /N 100 -/First 973 -/Length 9417 ->> -stream -1826 0 1828 118 469 176 1825 233 1831 384 1833 502 1834 561 1835 620 1836 679 1830 738 -1838 876 1840 994 473 1052 1837 1109 1843 1260 1845 1378 1846 1437 1847 1496 1848 1555 1842 1614 -1850 1752 1852 1870 477 1928 1849 1985 1854 2136 1856 2254 1857 2313 1858 2372 1859 2430 1853 2488 -1861 2626 1863 2744 481 2802 1860 2859 1865 3010 1867 3128 1868 3187 1869 3246 1870 3305 1864 3364 -1872 3502 1874 3620 485 3678 1871 3735 1877 3886 1879 4004 1880 4063 1881 4122 1883 4180 1884 4239 -1885 4298 1876 4357 1887 4538 1889 4656 489 4714 1890 4771 1886 4829 1892 4980 1894 5098 493 5157 -1895 5215 1891 5274 1899 5425 1896 5573 1897 5721 1901 5869 497 5927 1898 5984 1905 6079 1907 6197 -1902 6256 1903 6315 1904 6374 1909 6471 1911 6589 501 6647 1912 6704 1913 6762 1908 6820 1916 6901 -1918 7019 505 7078 1919 7136 1920 7194 1915 7253 1922 7334 1924 7452 509 7510 1925 7567 1926 7625 -1921 7683 1928 7764 1930 7882 513 7941 1931 7999 1932 8057 1927 8116 1934 8211 1936 8329 517 8387 -% 1826 0 obj +/First 975 +/Length 9500 +>> +stream +1819 0 1828 138 1830 256 469 314 1827 371 1832 522 1834 640 1835 699 1836 758 1837 817 +1831 876 1839 1014 1841 1132 473 1190 1838 1247 1844 1398 1846 1516 1847 1575 1848 1634 1849 1693 +1843 1752 1851 1890 1853 2008 477 2066 1850 2123 1855 2274 1857 2392 1858 2451 1859 2510 1860 2568 +1854 2626 1862 2764 1864 2882 481 2940 1861 2997 1866 3148 1868 3266 1869 3325 1870 3384 1871 3443 +1865 3502 1873 3640 1875 3758 485 3816 1872 3873 1878 4024 1880 4142 1881 4201 1882 4260 1884 4318 +1885 4377 1886 4436 1877 4495 1888 4676 1890 4794 489 4852 1891 4909 1887 4967 1893 5118 1895 5236 +493 5295 1896 5353 1892 5412 1900 5563 1897 5711 1898 5859 1902 6007 497 6065 1899 6122 1906 6217 +1908 6335 1903 6394 1904 6453 1905 6512 1910 6609 1912 6727 501 6785 1913 6842 1914 6900 1909 6958 +1917 7039 1919 7157 505 7216 1920 7274 1921 7332 1916 7391 1923 7472 1925 7590 509 7648 1926 7705 +1927 7763 1922 7821 1929 7902 1931 8020 513 8079 1932 8137 1933 8195 1928 8254 1935 8349 1937 8467 +% 1819 0 obj +<< +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> +/ProcSet [ /PDF /Text ] +>> +% 1828 0 obj << /Type /Page -/Contents 1827 0 R -/Resources 1825 0 R +/Contents 1829 0 R +/Resources 1827 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1805 0 R +/Parent 1806 0 R >> -% 1828 0 obj +% 1830 0 obj << -/D [1826 0 R /XYZ 98.895 753.953 null] +/D [1828 0 R /XYZ 98.895 753.953 null] >> % 469 0 obj << -/D [1826 0 R /XYZ 99.895 716.092 null] +/D [1828 0 R /XYZ 99.895 716.092 null] >> -% 1825 0 obj +% 1827 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1831 0 obj +% 1832 0 obj << /Type /Page -/Contents 1832 0 R -/Resources 1830 0 R +/Contents 1833 0 R +/Resources 1831 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1805 0 R ->> -% 1833 0 obj -<< -/D [1831 0 R /XYZ 149.705 753.953 null] +/Parent 1806 0 R >> % 1834 0 obj << -/D [1831 0 R /XYZ 150.705 576.399 null] +/D [1832 0 R /XYZ 149.705 753.953 null] >> % 1835 0 obj << -/D [1831 0 R /XYZ 150.705 541.925 null] +/D [1832 0 R /XYZ 150.705 576.399 null] >> % 1836 0 obj << -/D [1831 0 R /XYZ 150.705 451.085 null] +/D [1832 0 R /XYZ 150.705 541.925 null] >> -% 1830 0 obj +% 1837 0 obj +<< +/D [1832 0 R /XYZ 150.705 451.085 null] +>> +% 1831 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1813 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> /ProcSet [ /PDF /Text ] >> -% 1838 0 obj +% 1839 0 obj << /Type /Page -/Contents 1839 0 R -/Resources 1837 0 R +/Contents 1840 0 R +/Resources 1838 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1841 0 R +/Parent 1842 0 R >> -% 1840 0 obj +% 1841 0 obj << -/D [1838 0 R /XYZ 98.895 753.953 null] +/D [1839 0 R /XYZ 98.895 753.953 null] >> % 473 0 obj << -/D [1838 0 R /XYZ 99.895 716.092 null] +/D [1839 0 R /XYZ 99.895 716.092 null] >> -% 1837 0 obj +% 1838 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1843 0 obj +% 1844 0 obj << /Type /Page -/Contents 1844 0 R -/Resources 1842 0 R +/Contents 1845 0 R +/Resources 1843 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1841 0 R ->> -% 1845 0 obj -<< -/D [1843 0 R /XYZ 149.705 753.953 null] +/Parent 1842 0 R >> % 1846 0 obj << -/D [1843 0 R /XYZ 150.705 576.399 null] +/D [1844 0 R /XYZ 149.705 753.953 null] >> % 1847 0 obj << -/D [1843 0 R /XYZ 150.705 541.925 null] +/D [1844 0 R /XYZ 150.705 576.399 null] >> % 1848 0 obj << -/D [1843 0 R /XYZ 150.705 451.085 null] +/D [1844 0 R /XYZ 150.705 541.925 null] >> -% 1842 0 obj +% 1849 0 obj +<< +/D [1844 0 R /XYZ 150.705 451.085 null] +>> +% 1843 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1813 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> /ProcSet [ /PDF /Text ] >> -% 1850 0 obj +% 1851 0 obj << /Type /Page -/Contents 1851 0 R -/Resources 1849 0 R +/Contents 1852 0 R +/Resources 1850 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1841 0 R +/Parent 1842 0 R >> -% 1852 0 obj +% 1853 0 obj << -/D [1850 0 R /XYZ 98.895 753.953 null] +/D [1851 0 R /XYZ 98.895 753.953 null] >> % 477 0 obj << -/D [1850 0 R /XYZ 99.895 716.092 null] +/D [1851 0 R /XYZ 99.895 716.092 null] >> -% 1849 0 obj +% 1850 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1854 0 obj +% 1855 0 obj << /Type /Page -/Contents 1855 0 R -/Resources 1853 0 R +/Contents 1856 0 R +/Resources 1854 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1841 0 R ->> -% 1856 0 obj -<< -/D [1854 0 R /XYZ 149.705 753.953 null] +/Parent 1842 0 R >> % 1857 0 obj << -/D [1854 0 R /XYZ 150.705 588.355 null] +/D [1855 0 R /XYZ 149.705 753.953 null] >> % 1858 0 obj << -/D [1854 0 R /XYZ 150.705 553.88 null] +/D [1855 0 R /XYZ 150.705 588.355 null] >> % 1859 0 obj << -/D [1854 0 R /XYZ 150.705 463.04 null] +/D [1855 0 R /XYZ 150.705 553.88 null] >> -% 1853 0 obj +% 1860 0 obj +<< +/D [1855 0 R /XYZ 150.705 463.04 null] +>> +% 1854 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1813 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> /ProcSet [ /PDF /Text ] >> -% 1861 0 obj +% 1862 0 obj << /Type /Page -/Contents 1862 0 R -/Resources 1860 0 R +/Contents 1863 0 R +/Resources 1861 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1841 0 R +/Parent 1842 0 R >> -% 1863 0 obj +% 1864 0 obj << -/D [1861 0 R /XYZ 98.895 753.953 null] +/D [1862 0 R /XYZ 98.895 753.953 null] >> % 481 0 obj << -/D [1861 0 R /XYZ 99.895 716.092 null] +/D [1862 0 R /XYZ 99.895 716.092 null] >> -% 1860 0 obj +% 1861 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1865 0 obj +% 1866 0 obj << /Type /Page -/Contents 1866 0 R -/Resources 1864 0 R +/Contents 1867 0 R +/Resources 1865 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1841 0 R ->> -% 1867 0 obj -<< -/D [1865 0 R /XYZ 149.705 753.953 null] +/Parent 1842 0 R >> % 1868 0 obj << -/D [1865 0 R /XYZ 150.705 576.399 null] +/D [1866 0 R /XYZ 149.705 753.953 null] >> % 1869 0 obj << -/D [1865 0 R /XYZ 150.705 541.925 null] +/D [1866 0 R /XYZ 150.705 576.399 null] >> % 1870 0 obj << -/D [1865 0 R /XYZ 150.705 451.085 null] +/D [1866 0 R /XYZ 150.705 541.925 null] >> -% 1864 0 obj +% 1871 0 obj +<< +/D [1866 0 R /XYZ 150.705 451.085 null] +>> +% 1865 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1813 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> /ProcSet [ /PDF /Text ] >> -% 1872 0 obj +% 1873 0 obj << /Type /Page -/Contents 1873 0 R -/Resources 1871 0 R +/Contents 1874 0 R +/Resources 1872 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1875 0 R +/Parent 1876 0 R >> -% 1874 0 obj +% 1875 0 obj << -/D [1872 0 R /XYZ 98.895 753.953 null] +/D [1873 0 R /XYZ 98.895 753.953 null] >> % 485 0 obj << -/D [1872 0 R /XYZ 99.895 716.092 null] +/D [1873 0 R /XYZ 99.895 716.092 null] >> -% 1871 0 obj +% 1872 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1877 0 obj +% 1878 0 obj << /Type /Page -/Contents 1878 0 R -/Resources 1876 0 R +/Contents 1879 0 R +/Resources 1877 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1875 0 R ->> -% 1879 0 obj -<< -/D [1877 0 R /XYZ 149.705 753.953 null] +/Parent 1876 0 R >> % 1880 0 obj << -/D [1877 0 R /XYZ 150.705 588.355 null] +/D [1878 0 R /XYZ 149.705 753.953 null] >> % 1881 0 obj << -/D [1877 0 R /XYZ 150.705 553.88 null] +/D [1878 0 R /XYZ 150.705 588.355 null] >> -% 1883 0 obj +% 1882 0 obj << -/D [1877 0 R /XYZ 150.705 465.726 null] +/D [1878 0 R /XYZ 150.705 553.88 null] >> % 1884 0 obj << -/D [1877 0 R /XYZ 150.705 433.845 null] +/D [1878 0 R /XYZ 150.705 465.726 null] >> % 1885 0 obj << -/D [1877 0 R /XYZ 150.705 343.006 null] +/D [1878 0 R /XYZ 150.705 433.845 null] >> -% 1876 0 obj +% 1886 0 obj +<< +/D [1878 0 R /XYZ 150.705 343.006 null] +>> +% 1877 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F17 1882 0 R /F243 1285 0 R /F233 1044 0 R /F279 1813 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F17 1883 0 R /F243 1285 0 R /F233 1044 0 R /F279 1814 0 R >> /ProcSet [ /PDF /Text ] >> -% 1887 0 obj +% 1888 0 obj << /Type /Page -/Contents 1888 0 R -/Resources 1886 0 R +/Contents 1889 0 R +/Resources 1887 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1875 0 R +/Parent 1876 0 R >> -% 1889 0 obj +% 1890 0 obj << -/D [1887 0 R /XYZ 98.895 753.953 null] +/D [1888 0 R /XYZ 98.895 753.953 null] >> % 489 0 obj << -/D [1887 0 R /XYZ 99.895 716.092 null] +/D [1888 0 R /XYZ 99.895 716.092 null] >> -% 1890 0 obj +% 1891 0 obj << -/D [1887 0 R /XYZ 99.895 222.691 null] +/D [1888 0 R /XYZ 99.895 222.691 null] >> -% 1886 0 obj +% 1887 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F148 1490 0 R /F192 942 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1892 0 obj +% 1893 0 obj << /Type /Page -/Contents 1893 0 R -/Resources 1891 0 R +/Contents 1894 0 R +/Resources 1892 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1875 0 R +/Parent 1876 0 R >> -% 1894 0 obj +% 1895 0 obj << -/D [1892 0 R /XYZ 149.705 753.953 null] +/D [1893 0 R /XYZ 149.705 753.953 null] >> % 493 0 obj << -/D [1892 0 R /XYZ 150.705 716.092 null] +/D [1893 0 R /XYZ 150.705 716.092 null] >> -% 1895 0 obj +% 1896 0 obj << -/D [1892 0 R /XYZ 150.705 222.691 null] +/D [1893 0 R /XYZ 150.705 222.691 null] >> -% 1891 0 obj +% 1892 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1899 0 obj +% 1900 0 obj << /Type /Page -/Contents 1900 0 R -/Resources 1898 0 R +/Contents 1901 0 R +/Resources 1899 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1875 0 R -/Annots [ 1896 0 R 1897 0 R ] +/Parent 1876 0 R +/Annots [ 1897 0 R 1898 0 R ] >> -% 1896 0 obj +% 1897 0 obj << /Type /Annot /Subtype /Link @@ -25591,7 +25606,7 @@ stream /Rect [145.364 511.904 152.427 523.964] /A << /S /GoTo /D (listing.5) >> >> -% 1897 0 obj +% 1898 0 obj << /Type /Annot /Subtype /Link @@ -25599,180 +25614,176 @@ stream /Rect [143.975 356.487 150.849 368.547] /A << /S /GoTo /D (listing.6) >> >> -% 1901 0 obj +% 1902 0 obj << -/D [1899 0 R /XYZ 98.895 753.953 null] +/D [1900 0 R /XYZ 98.895 753.953 null] >> % 497 0 obj << -/D [1899 0 R /XYZ 99.895 716.092 null] +/D [1900 0 R /XYZ 99.895 716.092 null] >> -% 1898 0 obj +% 1899 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1905 0 obj +% 1906 0 obj << /Type /Page -/Contents 1906 0 R -/Resources 1904 0 R +/Contents 1907 0 R +/Resources 1905 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1875 0 R ->> -% 1907 0 obj -<< -/D [1905 0 R /XYZ 149.705 753.953 null] +/Parent 1876 0 R >> -% 1902 0 obj +% 1908 0 obj << -/D [1905 0 R /XYZ 150.705 411.235 null] +/D [1906 0 R /XYZ 149.705 753.953 null] >> % 1903 0 obj << -/D [1905 0 R /XYZ 150.705 182.902 null] +/D [1906 0 R /XYZ 150.705 411.235 null] >> % 1904 0 obj << -/Font << /F145 940 0 R /F279 1813 0 R /F84 687 0 R >> +/D [1906 0 R /XYZ 150.705 182.902 null] +>> +% 1905 0 obj +<< +/Font << /F145 940 0 R /F279 1814 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1909 0 obj +% 1910 0 obj << /Type /Page -/Contents 1910 0 R -/Resources 1908 0 R +/Contents 1911 0 R +/Resources 1909 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1914 0 R +/Parent 1915 0 R >> -% 1911 0 obj +% 1912 0 obj << -/D [1909 0 R /XYZ 98.895 753.953 null] +/D [1910 0 R /XYZ 98.895 753.953 null] >> % 501 0 obj << -/D [1909 0 R /XYZ 99.895 716.092 null] +/D [1910 0 R /XYZ 99.895 716.092 null] >> -% 1912 0 obj +% 1913 0 obj << -/D [1909 0 R /XYZ 99.895 690.058 null] +/D [1910 0 R /XYZ 99.895 690.058 null] >> -% 1913 0 obj +% 1914 0 obj << -/D [1909 0 R /XYZ 99.895 693.143 null] +/D [1910 0 R /XYZ 99.895 693.143 null] >> -% 1908 0 obj +% 1909 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1916 0 obj +% 1917 0 obj << /Type /Page -/Contents 1917 0 R -/Resources 1915 0 R +/Contents 1918 0 R +/Resources 1916 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1914 0 R +/Parent 1915 0 R >> -% 1918 0 obj +% 1919 0 obj << -/D [1916 0 R /XYZ 149.705 753.953 null] +/D [1917 0 R /XYZ 149.705 753.953 null] >> % 505 0 obj << -/D [1916 0 R /XYZ 150.705 716.092 null] +/D [1917 0 R /XYZ 150.705 716.092 null] >> -% 1919 0 obj +% 1920 0 obj << -/D [1916 0 R /XYZ 150.705 678.98 null] +/D [1917 0 R /XYZ 150.705 678.98 null] >> -% 1920 0 obj +% 1921 0 obj << -/D [1916 0 R /XYZ 150.705 679.195 null] +/D [1917 0 R /XYZ 150.705 679.195 null] >> -% 1915 0 obj +% 1916 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1922 0 obj +% 1923 0 obj << /Type /Page -/Contents 1923 0 R -/Resources 1921 0 R +/Contents 1924 0 R +/Resources 1922 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1914 0 R +/Parent 1915 0 R >> -% 1924 0 obj +% 1925 0 obj << -/D [1922 0 R /XYZ 98.895 753.953 null] +/D [1923 0 R /XYZ 98.895 753.953 null] >> % 509 0 obj << -/D [1922 0 R /XYZ 99.895 716.092 null] +/D [1923 0 R /XYZ 99.895 716.092 null] >> -% 1925 0 obj +% 1926 0 obj << -/D [1922 0 R /XYZ 99.895 689.963 null] +/D [1923 0 R /XYZ 99.895 689.963 null] >> -% 1926 0 obj +% 1927 0 obj << -/D [1922 0 R /XYZ 99.895 693.143 null] +/D [1923 0 R /XYZ 99.895 693.143 null] >> -% 1921 0 obj +% 1922 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1928 0 obj +% 1929 0 obj << /Type /Page -/Contents 1929 0 R -/Resources 1927 0 R +/Contents 1930 0 R +/Resources 1928 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1914 0 R +/Parent 1915 0 R >> -% 1930 0 obj +% 1931 0 obj << -/D [1928 0 R /XYZ 149.705 753.953 null] +/D [1929 0 R /XYZ 149.705 753.953 null] >> % 513 0 obj << -/D [1928 0 R /XYZ 150.705 716.092 null] +/D [1929 0 R /XYZ 150.705 716.092 null] >> -% 1931 0 obj +% 1932 0 obj << -/D [1928 0 R /XYZ 150.705 678.98 null] +/D [1929 0 R /XYZ 150.705 678.98 null] >> -% 1932 0 obj +% 1933 0 obj << -/D [1928 0 R /XYZ 150.705 679.195 null] +/D [1929 0 R /XYZ 150.705 679.195 null] >> -% 1927 0 obj +% 1928 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1934 0 obj +% 1935 0 obj << /Type /Page -/Contents 1935 0 R -/Resources 1933 0 R +/Contents 1936 0 R +/Resources 1934 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1914 0 R ->> -% 1936 0 obj -<< -/D [1934 0 R /XYZ 98.895 753.953 null] +/Parent 1915 0 R >> -% 517 0 obj +% 1937 0 obj << -/D [1934 0 R /XYZ 99.895 716.092 null] +/D [1935 0 R /XYZ 98.895 753.953 null] >> endstream endobj -1941 0 obj +1942 0 obj << /Length 4752 >> @@ -25856,7 +25867,7 @@ ET endstream endobj -1948 0 obj +1949 0 obj << /Length 5153 >> @@ -25944,7 +25955,7 @@ ET endstream endobj -1956 0 obj +1957 0 obj << /Length 3684 >> @@ -26034,7 +26045,7 @@ ET endstream endobj -1963 0 obj +1964 0 obj << /Length 4361 >> @@ -26131,7 +26142,7 @@ ET endstream endobj -1970 0 obj +1971 0 obj << /Length 7544 >> @@ -26318,7 +26329,7 @@ ET endstream endobj -1977 0 obj +1978 0 obj << /Length 7395 >> @@ -26495,7 +26506,7 @@ ET endstream endobj -1983 0 obj +1984 0 obj << /Length 656 >> @@ -26533,7 +26544,7 @@ ET endstream endobj -1987 0 obj +1988 0 obj << /Length 1399 >> @@ -26561,7 +26572,7 @@ ET endstream endobj -1995 0 obj +1996 0 obj << /Length 5053 >> @@ -26653,7 +26664,7 @@ ET endstream endobj -2006 0 obj +2007 0 obj << /Length 4359 >> @@ -26752,7 +26763,7 @@ ET endstream endobj -2010 0 obj +2011 0 obj << /Length 13651 >> @@ -27293,7 +27304,7 @@ ET endstream endobj -2019 0 obj +2020 0 obj << /Length 7660 >> @@ -27511,7 +27522,7 @@ ET endstream endobj -2023 0 obj +2024 0 obj << /Length 1133 >> @@ -27530,7 +27541,7 @@ ET endstream endobj -2032 0 obj +2033 0 obj << /Length 6132 >> @@ -27684,7 +27695,7 @@ ET endstream endobj -2038 0 obj +2039 0 obj << /Length 3490 >> @@ -27747,7 +27758,7 @@ ET endstream endobj -2042 0 obj +2043 0 obj << /Length 973 >> @@ -27788,39 +27799,43 @@ ET endstream endobj -1937 0 obj +1938 0 obj << /Type /ObjStm /N 100 -/First 973 -/Length 10967 ->> -stream -1933 0 1940 95 1938 234 1942 379 521 438 1943 496 1944 555 1939 614 1947 709 1945 848 -1949 993 525 1051 1950 1108 1951 1166 1946 1224 1955 1319 1953 1458 1957 1603 529 1662 1958 1720 -1959 1778 1954 1837 1962 1932 1960 2071 1964 2215 533 2273 1965 2330 1966 2387 1961 2445 1969 2540 -1967 2679 1971 2824 537 2883 1972 2941 1973 3000 1968 3059 1976 3182 1974 3321 1978 3463 541 3521 -1979 3578 1980 3636 1975 3694 1982 3817 1984 3935 1981 3994 1986 4077 1988 4195 545 4253 1985 4310 -1994 4405 1990 4562 1991 4709 1992 4857 1996 5004 549 5063 1997 5121 1993 5179 2005 5287 1999 5453 -2000 5600 2001 5747 2002 5895 2007 6042 553 6100 2004 6157 2009 6265 2003 6404 2011 6567 1998 6626 -2008 6686 2018 6796 2013 6962 2014 7107 2015 7254 2016 7401 2020 7548 557 7606 2017 7663 2022 7758 -2024 7876 2021 7935 2031 8030 2025 8205 2026 8350 2027 8493 2028 8640 2029 8784 2033 8933 561 8991 -2030 9048 2037 9143 2035 9282 2039 9427 565 9486 2036 9544 2041 9666 2043 9784 569 9842 2040 9899 -% 1933 0 obj +/First 972 +/Length 10928 +>> +stream +517 0 1934 57 1941 152 1939 291 1943 436 521 495 1944 553 1945 612 1940 671 1948 766 +1946 905 1950 1050 525 1108 1951 1165 1952 1223 1947 1281 1956 1376 1954 1515 1958 1660 529 1719 +1959 1777 1960 1835 1955 1894 1963 1989 1961 2128 1965 2272 533 2330 1966 2387 1967 2444 1962 2502 +1970 2597 1968 2736 1972 2881 537 2940 1973 2998 1974 3057 1969 3116 1977 3239 1975 3378 1979 3520 +541 3578 1980 3635 1981 3693 1976 3751 1983 3874 1985 3992 1982 4051 1987 4134 1989 4252 545 4310 +1986 4367 1995 4462 1991 4619 1992 4766 1993 4914 1997 5061 549 5120 1998 5178 1994 5236 2006 5344 +2000 5510 2001 5657 2002 5804 2003 5952 2008 6099 553 6157 2005 6214 2010 6322 2004 6461 2012 6624 +1999 6683 2009 6743 2019 6853 2014 7019 2015 7164 2016 7311 2017 7458 2021 7605 557 7663 2018 7720 +2023 7815 2025 7933 2022 7992 2032 8087 2026 8262 2027 8407 2028 8550 2029 8697 2030 8841 2034 8990 +561 9048 2031 9105 2038 9200 2036 9339 2040 9484 565 9543 2037 9601 2042 9723 2044 9841 569 9899 +% 517 0 obj +<< +/D [1935 0 R /XYZ 99.895 716.092 null] +>> +% 1934 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1940 0 obj +% 1941 0 obj << /Type /Page -/Contents 1941 0 R -/Resources 1939 0 R +/Contents 1942 0 R +/Resources 1940 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1914 0 R -/Annots [ 1938 0 R ] +/Parent 1915 0 R +/Annots [ 1939 0 R ] >> -% 1938 0 obj +% 1939 0 obj << /Type /Annot /Subtype /Link @@ -27828,37 +27843,37 @@ stream /Rect [342.753 438.278 420.271 450.338] /A << /S /GoTo /D (spdata) >> >> -% 1942 0 obj +% 1943 0 obj << -/D [1940 0 R /XYZ 149.705 753.953 null] +/D [1941 0 R /XYZ 149.705 753.953 null] >> % 521 0 obj << -/D [1940 0 R /XYZ 150.705 716.092 null] +/D [1941 0 R /XYZ 150.705 716.092 null] >> -% 1943 0 obj +% 1944 0 obj << -/D [1940 0 R /XYZ 150.705 676.015 null] +/D [1941 0 R /XYZ 150.705 676.015 null] >> -% 1944 0 obj +% 1945 0 obj << -/D [1940 0 R /XYZ 150.705 679.195 null] +/D [1941 0 R /XYZ 150.705 679.195 null] >> -% 1939 0 obj +% 1940 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1947 0 obj +% 1948 0 obj << /Type /Page -/Contents 1948 0 R -/Resources 1946 0 R +/Contents 1949 0 R +/Resources 1947 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1952 0 R -/Annots [ 1945 0 R ] +/Parent 1953 0 R +/Annots [ 1946 0 R ] >> -% 1945 0 obj +% 1946 0 obj << /Type /Annot /Subtype /Link @@ -27866,37 +27881,37 @@ stream /Rect [291.943 571.778 369.462 583.837] /A << /S /GoTo /D (spdata) >> >> -% 1949 0 obj +% 1950 0 obj << -/D [1947 0 R /XYZ 98.895 753.953 null] +/D [1948 0 R /XYZ 98.895 753.953 null] >> % 525 0 obj << -/D [1947 0 R /XYZ 99.895 716.092 null] +/D [1948 0 R /XYZ 99.895 716.092 null] >> -% 1950 0 obj +% 1951 0 obj << -/D [1947 0 R /XYZ 99.895 676.015 null] +/D [1948 0 R /XYZ 99.895 676.015 null] >> -% 1951 0 obj +% 1952 0 obj << -/D [1947 0 R /XYZ 99.895 679.195 null] +/D [1948 0 R /XYZ 99.895 679.195 null] >> -% 1946 0 obj +% 1947 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1955 0 obj +% 1956 0 obj << /Type /Page -/Contents 1956 0 R -/Resources 1954 0 R +/Contents 1957 0 R +/Resources 1955 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1952 0 R -/Annots [ 1953 0 R ] +/Parent 1953 0 R +/Annots [ 1954 0 R ] >> -% 1953 0 obj +% 1954 0 obj << /Type /Annot /Subtype /Link @@ -27904,37 +27919,37 @@ stream /Rect [342.753 438.278 420.271 450.338] /A << /S /GoTo /D (spdata) >> >> -% 1957 0 obj +% 1958 0 obj << -/D [1955 0 R /XYZ 149.705 753.953 null] +/D [1956 0 R /XYZ 149.705 753.953 null] >> % 529 0 obj << -/D [1955 0 R /XYZ 150.705 716.092 null] +/D [1956 0 R /XYZ 150.705 716.092 null] >> -% 1958 0 obj +% 1959 0 obj << -/D [1955 0 R /XYZ 150.705 678.98 null] +/D [1956 0 R /XYZ 150.705 678.98 null] >> -% 1959 0 obj +% 1960 0 obj << -/D [1955 0 R /XYZ 150.705 679.195 null] +/D [1956 0 R /XYZ 150.705 679.195 null] >> -% 1954 0 obj +% 1955 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1962 0 obj +% 1963 0 obj << /Type /Page -/Contents 1963 0 R -/Resources 1961 0 R +/Contents 1964 0 R +/Resources 1962 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1952 0 R -/Annots [ 1960 0 R ] +/Parent 1953 0 R +/Annots [ 1961 0 R ] >> -% 1960 0 obj +% 1961 0 obj << /Type /Annot /Subtype /Link @@ -27942,37 +27957,37 @@ stream /Rect [301.961 426.323 378.015 438.383] /A << /S /GoTo /D (vdata) >> >> -% 1964 0 obj +% 1965 0 obj << -/D [1962 0 R /XYZ 98.895 753.953 null] +/D [1963 0 R /XYZ 98.895 753.953 null] >> % 533 0 obj << -/D [1962 0 R /XYZ 99.895 716.092 null] +/D [1963 0 R /XYZ 99.895 716.092 null] >> -% 1965 0 obj +% 1966 0 obj << -/D [1962 0 R /XYZ 99.895 678.98 null] +/D [1963 0 R /XYZ 99.895 678.98 null] >> -% 1966 0 obj +% 1967 0 obj << -/D [1962 0 R /XYZ 99.895 679.195 null] +/D [1963 0 R /XYZ 99.895 679.195 null] >> -% 1961 0 obj +% 1962 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1969 0 obj +% 1970 0 obj << /Type /Page -/Contents 1970 0 R -/Resources 1968 0 R +/Contents 1971 0 R +/Resources 1969 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1952 0 R -/Annots [ 1967 0 R ] +/Parent 1953 0 R +/Annots [ 1968 0 R ] >> -% 1967 0 obj +% 1968 0 obj << /Type /Annot /Subtype /Link @@ -27980,37 +27995,37 @@ stream /Rect [342.753 574.778 420.271 586.838] /A << /S /GoTo /D (spdata) >> >> -% 1971 0 obj +% 1972 0 obj << -/D [1969 0 R /XYZ 149.705 753.953 null] +/D [1970 0 R /XYZ 149.705 753.953 null] >> % 537 0 obj << -/D [1969 0 R /XYZ 150.705 716.092 null] +/D [1970 0 R /XYZ 150.705 716.092 null] >> -% 1972 0 obj +% 1973 0 obj << -/D [1969 0 R /XYZ 150.705 679.441 null] +/D [1970 0 R /XYZ 150.705 679.441 null] >> -% 1973 0 obj +% 1974 0 obj << -/D [1969 0 R /XYZ 150.705 679.657 null] +/D [1970 0 R /XYZ 150.705 679.657 null] >> -% 1968 0 obj +% 1969 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> /ProcSet [ /PDF /Text ] >> -% 1976 0 obj +% 1977 0 obj << /Type /Page -/Contents 1977 0 R -/Resources 1975 0 R +/Contents 1978 0 R +/Resources 1976 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1952 0 R -/Annots [ 1974 0 R ] +/Parent 1953 0 R +/Annots [ 1975 0 R ] >> -% 1974 0 obj +% 1975 0 obj << /Type /Annot /Subtype /Link @@ -28018,75 +28033,75 @@ stream /Rect [396.215 574.59 472.269 586.65] /A << /S /GoTo /D (vdata) >> >> -% 1978 0 obj +% 1979 0 obj << -/D [1976 0 R /XYZ 98.895 753.953 null] +/D [1977 0 R /XYZ 98.895 753.953 null] >> % 541 0 obj << -/D [1976 0 R /XYZ 99.895 716.092 null] +/D [1977 0 R /XYZ 99.895 716.092 null] >> -% 1979 0 obj +% 1980 0 obj << -/D [1976 0 R /XYZ 99.895 679.413 null] +/D [1977 0 R /XYZ 99.895 679.413 null] >> -% 1980 0 obj +% 1981 0 obj << -/D [1976 0 R /XYZ 99.895 679.628 null] +/D [1977 0 R /XYZ 99.895 679.628 null] >> -% 1975 0 obj +% 1976 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> /ProcSet [ /PDF /Text ] >> -% 1982 0 obj +% 1983 0 obj << /Type /Page -/Contents 1983 0 R -/Resources 1981 0 R +/Contents 1984 0 R +/Resources 1982 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1952 0 R +/Parent 1953 0 R >> -% 1984 0 obj +% 1985 0 obj << -/D [1982 0 R /XYZ 149.705 753.953 null] +/D [1983 0 R /XYZ 149.705 753.953 null] >> -% 1981 0 obj +% 1982 0 obj << /Font << /F233 1044 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1986 0 obj +% 1987 0 obj << /Type /Page -/Contents 1987 0 R -/Resources 1985 0 R +/Contents 1988 0 R +/Resources 1986 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1989 0 R +/Parent 1990 0 R >> -% 1988 0 obj +% 1989 0 obj << -/D [1986 0 R /XYZ 98.895 753.953 null] +/D [1987 0 R /XYZ 98.895 753.953 null] >> % 545 0 obj << -/D [1986 0 R /XYZ 99.895 716.092 null] +/D [1987 0 R /XYZ 99.895 716.092 null] >> -% 1985 0 obj +% 1986 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1994 0 obj +% 1995 0 obj << /Type /Page -/Contents 1995 0 R -/Resources 1993 0 R +/Contents 1996 0 R +/Resources 1994 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1989 0 R -/Annots [ 1990 0 R 1991 0 R 1992 0 R ] +/Parent 1990 0 R +/Annots [ 1991 0 R 1992 0 R 1993 0 R ] >> -% 1990 0 obj +% 1991 0 obj << /Type /Annot /Subtype /Link @@ -28094,7 +28109,7 @@ stream /Rect [371.126 442.264 443.414 454.323] /A << /S /GoTo /D (precdata) >> >> -% 1991 0 obj +% 1992 0 obj << /Type /Annot /Subtype /Link @@ -28102,7 +28117,7 @@ stream /Rect [222.066 352.6 228.343 366.303] /A << /S /GoTo /D (Hfootnote.4) >> >> -% 1992 0 obj +% 1993 0 obj << /Type /Annot /Subtype /Link @@ -28110,33 +28125,33 @@ stream /Rect [221.319 235.698 233.275 245.108] /A << /S /GoTo /D (table.21) >> >> -% 1996 0 obj +% 1997 0 obj << -/D [1994 0 R /XYZ 149.705 753.953 null] +/D [1995 0 R /XYZ 149.705 753.953 null] >> % 549 0 obj << -/D [1994 0 R /XYZ 150.705 716.092 null] +/D [1995 0 R /XYZ 150.705 716.092 null] >> -% 1997 0 obj +% 1998 0 obj << -/D [1994 0 R /XYZ 165.051 129.79 null] +/D [1995 0 R /XYZ 165.051 129.79 null] >> -% 1993 0 obj +% 1994 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2005 0 obj +% 2006 0 obj << /Type /Page -/Contents 2006 0 R -/Resources 2004 0 R +/Contents 2007 0 R +/Resources 2005 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1989 0 R -/Annots [ 1999 0 R 2000 0 R 2001 0 R 2002 0 R ] +/Parent 1990 0 R +/Annots [ 2000 0 R 2001 0 R 2002 0 R 2003 0 R ] >> -% 1999 0 obj +% 2000 0 obj << /Type /Annot /Subtype /Link @@ -28144,7 +28159,7 @@ stream /Rect [283.359 567.422 295.314 580.259] /A << /S /GoTo /D (table.21) >> >> -% 2000 0 obj +% 2001 0 obj << /Type /Annot /Subtype /Link @@ -28152,7 +28167,7 @@ stream /Rect [366.137 520.379 378.292 532.438] /A << /S /GoTo /D (table.21) >> >> -% 2001 0 obj +% 2002 0 obj << /Type /Annot /Subtype /Link @@ -28160,7 +28175,7 @@ stream /Rect [379.319 483.736 386.292 496.573] /A << /S /GoTo /D (section.8) >> >> -% 2002 0 obj +% 2003 0 obj << /Type /Annot /Subtype /Link @@ -28168,29 +28183,29 @@ stream /Rect [136.757 451.412 148.712 460.822] /A << /S /GoTo /D (table.21) >> >> -% 2007 0 obj +% 2008 0 obj << -/D [2005 0 R /XYZ 98.895 753.953 null] +/D [2006 0 R /XYZ 98.895 753.953 null] >> % 553 0 obj << -/D [2005 0 R /XYZ 99.895 716.092 null] +/D [2006 0 R /XYZ 99.895 716.092 null] >> -% 2004 0 obj +% 2005 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2009 0 obj +% 2010 0 obj << /Type /Page -/Contents 2010 0 R -/Resources 2008 0 R +/Contents 2011 0 R +/Resources 2009 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1989 0 R -/Annots [ 2003 0 R ] +/Parent 1990 0 R +/Annots [ 2004 0 R ] >> -% 2003 0 obj +% 2004 0 obj << /Type /Annot /Subtype /Link @@ -28198,29 +28213,29 @@ stream /Rect [404.253 212.933 412.423 220.405] /A << /S /GoTo /D (cite.BERTACCINIFILIPPONE) >> >> -% 2011 0 obj +% 2012 0 obj << -/D [2009 0 R /XYZ 149.705 753.953 null] +/D [2010 0 R /XYZ 149.705 753.953 null] >> -% 1998 0 obj +% 1999 0 obj << -/D [2009 0 R /XYZ -3900.052 719.08 null] +/D [2010 0 R /XYZ -3900.052 719.08 null] >> -% 2008 0 obj +% 2009 0 obj << /Font << /F233 1044 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2018 0 obj +% 2019 0 obj << /Type /Page -/Contents 2019 0 R -/Resources 2017 0 R +/Contents 2020 0 R +/Resources 2018 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1989 0 R -/Annots [ 2013 0 R 2014 0 R 2015 0 R 2016 0 R ] +/Parent 1990 0 R +/Annots [ 2014 0 R 2015 0 R 2016 0 R 2017 0 R ] >> -% 2013 0 obj +% 2014 0 obj << /Type /Annot /Subtype /Link @@ -28228,7 +28243,7 @@ stream /Rect [314.678 576.377 392.197 588.437] /A << /S /GoTo /D (spdata) >> >> -% 2014 0 obj +% 2015 0 obj << /Type /Annot /Subtype /Link @@ -28236,7 +28251,7 @@ stream /Rect [395.856 505.741 468.144 517.801] /A << /S /GoTo /D (precdata) >> >> -% 2015 0 obj +% 2016 0 obj << /Type /Annot /Subtype /Link @@ -28244,7 +28259,7 @@ stream /Rect [371.454 435.105 438.512 447.165] /A << /S /GoTo /D (descdata) >> >> -% 2016 0 obj +% 2017 0 obj << /Type /Annot /Subtype /Link @@ -28252,46 +28267,46 @@ stream /Rect [317.418 128.475 389.706 140.535] /A << /S /GoTo /D (precdata) >> >> -% 2020 0 obj +% 2021 0 obj << -/D [2018 0 R /XYZ 98.895 753.953 null] +/D [2019 0 R /XYZ 98.895 753.953 null] >> % 557 0 obj << -/D [2018 0 R /XYZ 99.895 716.092 null] +/D [2019 0 R /XYZ 99.895 716.092 null] >> -% 2017 0 obj +% 2018 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2022 0 obj +% 2023 0 obj << /Type /Page -/Contents 2023 0 R -/Resources 2021 0 R +/Contents 2024 0 R +/Resources 2022 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1989 0 R +/Parent 1990 0 R >> -% 2024 0 obj +% 2025 0 obj << -/D [2022 0 R /XYZ 149.705 753.953 null] +/D [2023 0 R /XYZ 149.705 753.953 null] >> -% 2021 0 obj +% 2022 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2031 0 obj +% 2032 0 obj << /Type /Page -/Contents 2032 0 R -/Resources 2030 0 R +/Contents 2033 0 R +/Resources 2031 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2034 0 R -/Annots [ 2025 0 R 2026 0 R 2027 0 R 2028 0 R 2029 0 R ] +/Parent 2035 0 R +/Annots [ 2026 0 R 2027 0 R 2028 0 R 2029 0 R 2030 0 R ] >> -% 2025 0 obj +% 2026 0 obj << /Type /Annot /Subtype /Link @@ -28299,7 +28314,7 @@ stream /Rect [320.317 573.77 392.605 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2026 0 obj +% 2027 0 obj << /Type /Annot /Subtype /Link @@ -28307,7 +28322,7 @@ stream /Rect [342.493 517.98 418.548 530.039] /A << /S /GoTo /D (vdata) >> >> -% 2027 0 obj +% 2028 0 obj << /Type /Annot /Subtype /Link @@ -28315,7 +28330,7 @@ stream /Rect [324.013 462.189 391.071 474.248] /A << /S /GoTo /D (descdata) >> >> -% 2028 0 obj +% 2029 0 obj << /Type /Annot /Subtype /Link @@ -28323,7 +28338,7 @@ stream /Rect [342.493 272.899 418.548 284.958] /A << /S /GoTo /D (vdata) >> >> -% 2029 0 obj +% 2030 0 obj << /Type /Annot /Subtype /Link @@ -28331,29 +28346,29 @@ stream /Rect [431.552 183.235 443.387 196.238] /A << /S /GoTo /D (section.11) >> >> -% 2033 0 obj +% 2034 0 obj << -/D [2031 0 R /XYZ 98.895 753.953 null] +/D [2032 0 R /XYZ 98.895 753.953 null] >> % 561 0 obj << -/D [2031 0 R /XYZ 99.895 716.092 null] +/D [2032 0 R /XYZ 99.895 716.092 null] >> -% 2030 0 obj +% 2031 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2037 0 obj +% 2038 0 obj << /Type /Page -/Contents 2038 0 R -/Resources 2036 0 R +/Contents 2039 0 R +/Resources 2037 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2034 0 R -/Annots [ 2035 0 R ] +/Parent 2035 0 R +/Annots [ 2036 0 R ] >> -% 2035 0 obj +% 2036 0 obj << /Type /Annot /Subtype /Link @@ -28361,44 +28376,39 @@ stream /Rect [371.126 573.77 443.414 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2039 0 obj +% 2040 0 obj << -/D [2037 0 R /XYZ 149.705 753.953 null] +/D [2038 0 R /XYZ 149.705 753.953 null] >> % 565 0 obj << -/D [2037 0 R /XYZ 150.705 716.092 null] +/D [2038 0 R /XYZ 150.705 716.092 null] >> -% 2036 0 obj +% 2037 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2041 0 obj +% 2042 0 obj << /Type /Page -/Contents 2042 0 R -/Resources 2040 0 R +/Contents 2043 0 R +/Resources 2041 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2034 0 R +/Parent 2035 0 R >> -% 2043 0 obj +% 2044 0 obj << -/D [2041 0 R /XYZ 98.895 753.953 null] +/D [2042 0 R /XYZ 98.895 753.953 null] >> % 569 0 obj << -/D [2041 0 R /XYZ 99.895 716.092 null] ->> -% 2040 0 obj -<< -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> -/ProcSet [ /PDF /Text ] +/D [2042 0 R /XYZ 99.895 716.092 null] >> endstream endobj -2048 0 obj +2050 0 obj << /Length 2715 >> @@ -28475,7 +28485,7 @@ ET endstream endobj -2057 0 obj +2058 0 obj << /Length 6107 >> @@ -28599,7 +28609,7 @@ ET endstream endobj -2064 0 obj +2065 0 obj << /Length 3194 >> @@ -28687,7 +28697,7 @@ ET endstream endobj -2068 0 obj +2069 0 obj << /Length 607 >> @@ -28703,7 +28713,7 @@ ET endstream endobj -2076 0 obj +2077 0 obj << /Length 8466 >> @@ -28853,7 +28863,7 @@ ET endstream endobj -2087 0 obj +2088 0 obj << /Length 7173 >> @@ -28993,7 +29003,7 @@ ET endstream endobj -2092 0 obj +2093 0 obj << /Length 4580 >> @@ -29060,7 +29070,7 @@ ET endstream endobj -2100 0 obj +2101 0 obj << /Length 8759 >> @@ -29212,7 +29222,7 @@ ET endstream endobj -2109 0 obj +2110 0 obj << /Length 6806 >> @@ -29337,7 +29347,7 @@ ET endstream endobj -2113 0 obj +2114 0 obj << /Length 1090 >> @@ -29360,7 +29370,7 @@ ET endstream endobj -2124 0 obj +2125 0 obj << /Length 8172 >> @@ -29594,7 +29604,7 @@ ET endstream endobj -2138 0 obj +2139 0 obj << /Length 9201 >> @@ -29851,7 +29861,7 @@ ET endstream endobj -2147 0 obj +2148 0 obj << /Length 4837 >> @@ -29920,21 +29930,21 @@ ET endstream endobj -2131 0 obj +2132 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/mat.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2152 0 R +/PTEX.InfoDict 2153 0 R /BBox [0 0 438 395] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << -/R7 2153 0 R +/R7 2154 0 R >>/XObject << -/R8 2154 0 R +/R8 2155 0 R >>>> /Length 3551 /Filter /FlateDecode @@ -29963,7 +29973,7 @@ r ´JXŘxčťóCąů[— S¬ëąĎć^zݰ.ĽŻ÷ëFÜ$ä 5`2. LŁ× 0 · ćÁî# Z(DôżSđ÷žĹjý˛Ą¬ł*'fÖĺťĂÝÖ;?buŢîŹR­rś†ţŤ—* Ýś—"@„ŤÂúaËiý(˙« o^˙/o*o endstream endobj -2154 0 obj +2155 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -29982,7 +29992,7 @@ stream & Ů˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ř˙Ŕ@ endstream endobj -2158 0 obj +2159 0 obj << /Length 7547 >> @@ -30132,22 +30142,22 @@ ET endstream endobj -2133 0 obj +2134 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/ell.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2169 0 R +/PTEX.InfoDict 2170 0 R /BBox [0 0 447 205] /Resources << /ProcSet [ /PDF /ImageC /Text ] /ExtGState << -/R7 2170 0 R +/R7 2171 0 R >>/XObject << -/R8 2171 0 R ->>/Font << /R9 2172 0 R/R11 2173 0 R>> +/R8 2172 0 R +>>/Font << /R9 2173 0 R/R11 2174 0 R>> >> /Length 2281 /Filter /FlateDecode @@ -30159,34 +30169,39 @@ x Íy-?ýíůďŻßńGz·5®„ůËéOß}ŕMžsĺľAtű·ÔŹÇ˙|THF endstream endobj -2050 0 obj +2045 0 obj << /Type /ObjStm /N 100 -/First 991 -/Length 12168 ->> -stream -2047 0 2044 148 2045 293 2049 440 573 499 2046 557 2056 652 2051 818 2052 963 2053 1110 -2054 1264 2058 1413 577 1471 2055 1528 2063 1623 2059 1780 2060 1927 2061 2074 2065 2228 581 2287 -2062 2345 2067 2440 2069 2558 585 2616 2066 2673 2075 2768 2071 2916 2072 3066 2077 3211 589 3270 -2078 3328 2079 3387 2080 3446 2081 3505 2074 3563 2086 3714 2073 3880 2082 4027 2083 4171 2084 4315 -2088 4460 2085 4518 2091 4669 2089 4808 2093 4952 2090 5011 2099 5119 2094 5276 2095 5421 2096 5568 -2101 5710 593 5768 2102 5825 2103 5883 2104 5941 2098 5999 2108 6150 2097 6307 2105 6451 2106 6598 -2110 6742 2107 6801 2112 6952 2114 7070 2111 7128 2123 7209 2116 7402 2126 7578 2117 7753 2118 7936 -2119 8088 2120 8243 2121 8395 2125 8549 597 8608 601 8666 2122 8724 2137 8847 2129 9004 2130 9153 -2132 9300 2139 9447 606 9505 610 9562 2140 9619 2141 9677 2136 9735 2146 9873 2152 10012 2153 10192 -2135 10235 2148 10382 2143 10441 2149 10500 2150 10559 2151 10618 2145 10677 2157 10815 2169 10954 2170 11134 -% 2047 0 obj +/First 989 +/Length 12218 +>> +stream +2041 0 2049 95 2046 243 2047 388 2051 535 573 594 2048 652 2057 747 2052 913 2053 1058 +2054 1205 2055 1359 2059 1508 577 1566 2056 1623 2064 1718 2060 1875 2061 2022 2062 2169 2066 2323 +581 2382 2063 2440 2068 2535 2070 2653 585 2711 2067 2768 2076 2863 2072 3011 2073 3161 2078 3306 +589 3365 2079 3423 2080 3482 2081 3541 2082 3600 2075 3658 2087 3809 2074 3975 2083 4122 2084 4266 +2085 4410 2089 4555 2086 4613 2092 4764 2090 4903 2094 5047 2091 5106 2100 5214 2095 5371 2096 5516 +2097 5663 2102 5805 593 5863 2103 5920 2104 5978 2105 6036 2099 6094 2109 6245 2098 6402 2106 6546 +2107 6693 2111 6837 2108 6896 2113 7047 2115 7165 2112 7223 2124 7304 2117 7497 2127 7673 2118 7848 +2119 8031 2120 8183 2121 8338 2122 8490 2126 8644 597 8703 601 8761 2123 8819 2138 8942 2130 9099 +2131 9248 2133 9395 2140 9542 606 9600 610 9657 2141 9714 2142 9772 2137 9830 2147 9968 2153 10107 +2154 10287 2136 10330 2149 10477 2144 10536 2150 10595 2151 10654 2152 10713 2146 10772 2158 10910 2170 11049 +% 2041 0 obj +<< +/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/ProcSet [ /PDF /Text ] +>> +% 2049 0 obj << /Type /Page -/Contents 2048 0 R -/Resources 2046 0 R +/Contents 2050 0 R +/Resources 2048 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2034 0 R -/Annots [ 2044 0 R 2045 0 R ] +/Parent 2035 0 R +/Annots [ 2046 0 R 2047 0 R ] >> -% 2044 0 obj +% 2046 0 obj << /Type /Annot /Subtype /Link @@ -30194,7 +30209,7 @@ stream /Rect [371.126 573.77 443.414 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2045 0 obj +% 2047 0 obj << /Type /Annot /Subtype /Link @@ -30202,29 +30217,29 @@ stream /Rect [371.126 498.054 443.414 510.114] /A << /S /GoTo /D (precdata) >> >> -% 2049 0 obj +% 2051 0 obj << -/D [2047 0 R /XYZ 149.705 753.953 null] +/D [2049 0 R /XYZ 149.705 753.953 null] >> % 573 0 obj << -/D [2047 0 R /XYZ 150.705 716.092 null] +/D [2049 0 R /XYZ 150.705 716.092 null] >> -% 2046 0 obj +% 2048 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2056 0 obj +% 2057 0 obj << /Type /Page -/Contents 2057 0 R -/Resources 2055 0 R +/Contents 2058 0 R +/Resources 2056 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2034 0 R -/Annots [ 2051 0 R 2052 0 R 2053 0 R 2054 0 R ] +/Parent 2035 0 R +/Annots [ 2052 0 R 2053 0 R 2054 0 R 2055 0 R ] >> -% 2051 0 obj +% 2052 0 obj << /Type /Annot /Subtype /Link @@ -30232,7 +30247,7 @@ stream /Rect [320.317 573.77 392.605 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2052 0 obj +% 2053 0 obj << /Type /Annot /Subtype /Link @@ -30240,7 +30255,7 @@ stream /Rect [320.317 430.308 392.605 442.368] /A << /S /GoTo /D (precdata) >> >> -% 2053 0 obj +% 2054 0 obj << /Type /Annot /Subtype /Link @@ -30248,7 +30263,7 @@ stream /Rect [129.909 304.779 149.563 316.839] /A << /S /GoTo /D (subsection.12.4) >> >> -% 2054 0 obj +% 2055 0 obj << /Type /Annot /Subtype /Link @@ -30256,29 +30271,29 @@ stream /Rect [172.161 304.779 184.246 316.839] /A << /S /GoTo /D (section.13) >> >> -% 2058 0 obj +% 2059 0 obj << -/D [2056 0 R /XYZ 98.895 753.953 null] +/D [2057 0 R /XYZ 98.895 753.953 null] >> % 577 0 obj << -/D [2056 0 R /XYZ 99.895 716.092 null] +/D [2057 0 R /XYZ 99.895 716.092 null] >> -% 2055 0 obj +% 2056 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2063 0 obj +% 2064 0 obj << /Type /Page -/Contents 2064 0 R -/Resources 2062 0 R +/Contents 2065 0 R +/Resources 2063 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2034 0 R -/Annots [ 2059 0 R 2060 0 R 2061 0 R ] +/Parent 2035 0 R +/Annots [ 2060 0 R 2061 0 R 2062 0 R ] >> -% 2059 0 obj +% 2060 0 obj << /Type /Annot /Subtype /Link @@ -30286,7 +30301,7 @@ stream /Rect [371.126 561.815 443.414 573.875] /A << /S /GoTo /D (precdata) >> >> -% 2060 0 obj +% 2061 0 obj << /Type /Annot /Subtype /Link @@ -30294,7 +30309,7 @@ stream /Rect [371.126 486.099 443.414 498.159] /A << /S /GoTo /D (precdata) >> >> -% 2061 0 obj +% 2062 0 obj << /Type /Annot /Subtype /Link @@ -30302,50 +30317,50 @@ stream /Rect [443.742 396.435 463.169 408.495] /A << /S /GoTo /D (subsection.10.8) >> >> -% 2065 0 obj +% 2066 0 obj << -/D [2063 0 R /XYZ 149.705 753.953 null] +/D [2064 0 R /XYZ 149.705 753.953 null] >> % 581 0 obj << -/D [2063 0 R /XYZ 150.705 716.092 null] +/D [2064 0 R /XYZ 150.705 716.092 null] >> -% 2062 0 obj +% 2063 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2067 0 obj +% 2068 0 obj << /Type /Page -/Contents 2068 0 R -/Resources 2066 0 R +/Contents 2069 0 R +/Resources 2067 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2070 0 R +/Parent 2071 0 R >> -% 2069 0 obj +% 2070 0 obj << -/D [2067 0 R /XYZ 98.895 753.953 null] +/D [2068 0 R /XYZ 98.895 753.953 null] >> % 585 0 obj << -/D [2067 0 R /XYZ 99.895 716.092 null] +/D [2068 0 R /XYZ 99.895 716.092 null] >> -% 2066 0 obj +% 2067 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2075 0 obj +% 2076 0 obj << /Type /Page -/Contents 2076 0 R -/Resources 2074 0 R +/Contents 2077 0 R +/Resources 2075 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2070 0 R -/Annots [ 2071 0 R 2072 0 R ] +/Parent 2071 0 R +/Annots [ 2072 0 R 2073 0 R ] >> -% 2071 0 obj +% 2072 0 obj << /Type /Annot /Subtype /Link @@ -30353,7 +30368,7 @@ stream /Rect [379.973 275.278 386.249 288.868] /A << /S /GoTo /D (Hfootnote.5) >> >> -% 2072 0 obj +% 2073 0 obj << /Type /Annot /Subtype /Link @@ -30361,45 +30376,45 @@ stream /Rect [342.753 134.696 420.271 146.755] /A << /S /GoTo /D (spdata) >> >> -% 2077 0 obj +% 2078 0 obj << -/D [2075 0 R /XYZ 149.705 753.953 null] +/D [2076 0 R /XYZ 149.705 753.953 null] >> % 589 0 obj << -/D [2075 0 R /XYZ 150.705 716.092 null] ->> -% 2078 0 obj -<< -/D [2075 0 R /XYZ 150.705 444.811 null] +/D [2076 0 R /XYZ 150.705 716.092 null] >> % 2079 0 obj << -/D [2075 0 R /XYZ 150.705 444.971 null] +/D [2076 0 R /XYZ 150.705 444.811 null] >> % 2080 0 obj << -/D [2075 0 R /XYZ 150.705 433.015 null] +/D [2076 0 R /XYZ 150.705 444.971 null] >> % 2081 0 obj << -/D [2075 0 R /XYZ 165.051 129.79 null] +/D [2076 0 R /XYZ 150.705 433.015 null] >> -% 2074 0 obj +% 2082 0 obj +<< +/D [2076 0 R /XYZ 165.051 129.79 null] +>> +% 2075 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2086 0 obj +% 2087 0 obj << /Type /Page -/Contents 2087 0 R -/Resources 2085 0 R +/Contents 2088 0 R +/Resources 2086 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2070 0 R -/Annots [ 2073 0 R 2082 0 R 2083 0 R 2084 0 R ] +/Parent 2071 0 R +/Annots [ 2074 0 R 2083 0 R 2084 0 R 2085 0 R ] >> -% 2073 0 obj +% 2074 0 obj << /Type /Annot /Subtype /Link @@ -30407,7 +30422,7 @@ stream /Rect [291.943 654.503 364.232 666.562] /A << /S /GoTo /D (precdata) >> >> -% 2082 0 obj +% 2083 0 obj << /Type /Annot /Subtype /Link @@ -30415,7 +30430,7 @@ stream /Rect [342.493 584.479 418.548 596.539] /A << /S /GoTo /D (vdata) >> >> -% 2083 0 obj +% 2084 0 obj << /Type /Annot /Subtype /Link @@ -30423,7 +30438,7 @@ stream /Rect [342.493 514.456 418.548 526.516] /A << /S /GoTo /D (vdata) >> >> -% 2084 0 obj +% 2085 0 obj << /Type /Annot /Subtype /Link @@ -30431,25 +30446,25 @@ stream /Rect [291.943 374.41 359.001 386.47] /A << /S /GoTo /D (descdata) >> >> -% 2088 0 obj +% 2089 0 obj << -/D [2086 0 R /XYZ 98.895 753.953 null] +/D [2087 0 R /XYZ 98.895 753.953 null] >> -% 2085 0 obj +% 2086 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R >> /ProcSet [ /PDF /Text ] >> -% 2091 0 obj +% 2092 0 obj << /Type /Page -/Contents 2092 0 R -/Resources 2090 0 R +/Contents 2093 0 R +/Resources 2091 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2070 0 R -/Annots [ 2089 0 R ] +/Parent 2071 0 R +/Annots [ 2090 0 R ] >> -% 2089 0 obj +% 2090 0 obj << /Type /Annot /Subtype /Link @@ -30457,25 +30472,25 @@ stream /Rect [393.303 554.876 469.357 566.936] /A << /S /GoTo /D (vdata) >> >> -% 2093 0 obj +% 2094 0 obj << -/D [2091 0 R /XYZ 149.705 753.953 null] +/D [2092 0 R /XYZ 149.705 753.953 null] >> -% 2090 0 obj +% 2091 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2099 0 obj +% 2100 0 obj << /Type /Page -/Contents 2100 0 R -/Resources 2098 0 R +/Contents 2101 0 R +/Resources 2099 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2070 0 R -/Annots [ 2094 0 R 2095 0 R 2096 0 R ] +/Parent 2071 0 R +/Annots [ 2095 0 R 2096 0 R 2097 0 R ] >> -% 2094 0 obj +% 2095 0 obj << /Type /Annot /Subtype /Link @@ -30483,7 +30498,7 @@ stream /Rect [291.943 253.023 369.462 265.083] /A << /S /GoTo /D (spdata) >> >> -% 2095 0 obj +% 2096 0 obj << /Type /Annot /Subtype /Link @@ -30491,7 +30506,7 @@ stream /Rect [291.943 184.772 364.232 196.831] /A << /S /GoTo /D (precdata) >> >> -% 2096 0 obj +% 2097 0 obj << /Type /Annot /Subtype /Link @@ -30499,41 +30514,41 @@ stream /Rect [342.493 116.52 418.548 128.58] /A << /S /GoTo /D (vdata) >> >> -% 2101 0 obj +% 2102 0 obj << -/D [2099 0 R /XYZ 98.895 753.953 null] +/D [2100 0 R /XYZ 98.895 753.953 null] >> % 593 0 obj << -/D [2099 0 R /XYZ 99.895 716.092 null] ->> -% 2102 0 obj -<< -/D [2099 0 R /XYZ 99.895 397.916 null] +/D [2100 0 R /XYZ 99.895 716.092 null] >> % 2103 0 obj << -/D [2099 0 R /XYZ 99.895 398.076 null] +/D [2100 0 R /XYZ 99.895 397.916 null] >> % 2104 0 obj << -/D [2099 0 R /XYZ 99.895 386.121 null] +/D [2100 0 R /XYZ 99.895 398.076 null] >> -% 2098 0 obj +% 2105 0 obj +<< +/D [2100 0 R /XYZ 99.895 386.121 null] +>> +% 2099 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2108 0 obj +% 2109 0 obj << /Type /Page -/Contents 2109 0 R -/Resources 2107 0 R +/Contents 2110 0 R +/Resources 2108 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2070 0 R -/Annots [ 2097 0 R 2105 0 R 2106 0 R ] +/Parent 2071 0 R +/Annots [ 2098 0 R 2106 0 R 2107 0 R ] >> -% 2097 0 obj +% 2098 0 obj << /Type /Annot /Subtype /Link @@ -30541,7 +30556,7 @@ stream /Rect [393.303 654.503 469.357 666.562] /A << /S /GoTo /D (vdata) >> >> -% 2105 0 obj +% 2106 0 obj << /Type /Annot /Subtype /Link @@ -30549,7 +30564,7 @@ stream /Rect [342.753 520.007 409.811 532.067] /A << /S /GoTo /D (descdata) >> >> -% 2106 0 obj +% 2107 0 obj << /Type /Annot /Subtype /Link @@ -30557,63 +30572,63 @@ stream /Rect [393.303 183.768 469.357 195.827] /A << /S /GoTo /D (vdata) >> >> -% 2110 0 obj +% 2111 0 obj << -/D [2108 0 R /XYZ 149.705 753.953 null] +/D [2109 0 R /XYZ 149.705 753.953 null] >> -% 2107 0 obj +% 2108 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R >> /ProcSet [ /PDF /Text ] >> -% 2112 0 obj +% 2113 0 obj << /Type /Page -/Contents 2113 0 R -/Resources 2111 0 R +/Contents 2114 0 R +/Resources 2112 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2115 0 R +/Parent 2116 0 R >> -% 2114 0 obj +% 2115 0 obj << -/D [2112 0 R /XYZ 98.895 753.953 null] +/D [2113 0 R /XYZ 98.895 753.953 null] >> -% 2111 0 obj +% 2112 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2123 0 obj +% 2124 0 obj << /Type /Page -/Contents 2124 0 R -/Resources 2122 0 R +/Contents 2125 0 R +/Resources 2123 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2115 0 R -/Annots [ 2116 0 R 2126 0 R 2117 0 R 2118 0 R 2119 0 R 2120 0 R 2121 0 R ] +/Parent 2116 0 R +/Annots [ 2117 0 R 2127 0 R 2118 0 R 2119 0 R 2120 0 R 2121 0 R 2122 0 R ] >> -% 2116 0 obj +% 2117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [368.938 636.522 495.412 648.582] /Subtype/Link/A<> >> -% 2126 0 obj +% 2127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [174.615 624.567 218.45 636.627] /Subtype/Link/A<> >> -% 2117 0 obj +% 2118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [191.223 593.098 397.198 605.158] /Subtype/Link/A<> >> -% 2118 0 obj +% 2119 0 obj << /Type /Annot /Subtype /Link @@ -30621,7 +30636,7 @@ stream /Rect [280.59 552.835 292.545 561.841] /A << /S /GoTo /D (cite.DesPat:11) >> >> -% 2119 0 obj +% 2120 0 obj << /Type /Annot /Subtype /Link @@ -30629,7 +30644,7 @@ stream /Rect [296.203 552.835 308.158 561.692] /A << /S /GoTo /D (cite.CaFiRo:2014) >> >> -% 2120 0 obj +% 2121 0 obj << /Type /Annot /Subtype /Link @@ -30637,7 +30652,7 @@ stream /Rect [311.815 552.835 323.771 561.841] /A << /S /GoTo /D (cite.Sparse03) >> >> -% 2121 0 obj +% 2122 0 obj << /Type /Annot /Subtype /Link @@ -30645,33 +30660,33 @@ stream /Rect [209.414 540.781 221.369 549.737] /A << /S /GoTo /D (cite.OurTechRep) >> >> -% 2125 0 obj +% 2126 0 obj << -/D [2123 0 R /XYZ 149.705 753.953 null] +/D [2124 0 R /XYZ 149.705 753.953 null] >> % 597 0 obj << -/D [2123 0 R /XYZ 150.705 716.092 null] +/D [2124 0 R /XYZ 150.705 716.092 null] >> % 601 0 obj << -/D [2123 0 R /XYZ 150.705 525.151 null] +/D [2124 0 R /XYZ 150.705 525.151 null] >> -% 2122 0 obj +% 2123 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> /ProcSet [ /PDF /Text ] >> -% 2137 0 obj +% 2138 0 obj << /Type /Page -/Contents 2138 0 R -/Resources 2136 0 R +/Contents 2139 0 R +/Resources 2137 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2115 0 R -/Annots [ 2129 0 R 2130 0 R 2132 0 R ] +/Parent 2116 0 R +/Annots [ 2130 0 R 2131 0 R 2133 0 R ] >> -% 2129 0 obj +% 2130 0 obj << /Type /Annot /Subtype /Link @@ -30679,7 +30694,7 @@ stream /Rect [121.315 282.067 133.27 291.173] /A << /S /GoTo /D (cite.MRC:11) >> >> -% 2130 0 obj +% 2131 0 obj << /Type /Annot /Subtype /Link @@ -30687,7 +30702,7 @@ stream /Rect [253.836 246.183 265.791 255.592] /A << /S /GoTo /D (table.22) >> >> -% 2132 0 obj +% 2133 0 obj << /Type /Annot /Subtype /Link @@ -30695,53 +30710,53 @@ stream /Rect [310.367 176.296 317.241 188.355] /A << /S /GoTo /D (figure.6) >> >> -% 2139 0 obj +% 2140 0 obj << -/D [2137 0 R /XYZ 98.895 753.953 null] +/D [2138 0 R /XYZ 98.895 753.953 null] >> % 606 0 obj << -/D [2137 0 R /XYZ 99.895 349.244 null] +/D [2138 0 R /XYZ 99.895 349.244 null] >> % 610 0 obj << -/D [2137 0 R /XYZ 99.895 231.907 null] +/D [2138 0 R /XYZ 99.895 231.907 null] >> -% 2140 0 obj +% 2141 0 obj << -/D [2137 0 R /XYZ 99.895 211.056 null] +/D [2138 0 R /XYZ 99.895 211.056 null] >> -% 2141 0 obj +% 2142 0 obj << -/D [2137 0 R /XYZ 99.895 120.166 null] +/D [2138 0 R /XYZ 99.895 120.166 null] >> -% 2136 0 obj +% 2137 0 obj << -/Font << /F279 1813 0 R /F233 1044 0 R /F84 687 0 R /F145 940 0 R /F75 685 0 R /F78 686 0 R >> +/Font << /F279 1814 0 R /F233 1044 0 R /F84 687 0 R /F145 940 0 R /F75 685 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2146 0 obj +% 2147 0 obj << /Type /Page -/Contents 2147 0 R -/Resources 2145 0 R +/Contents 2148 0 R +/Resources 2146 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2115 0 R -/Annots [ 2135 0 R ] +/Parent 2116 0 R +/Annots [ 2136 0 R ] >> -% 2152 0 obj +% 2153 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133929+01'00') /ModDate (D:20140329133929+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2153 0 obj +% 2154 0 obj << /Type /ExtGState /OPM 1 >> -% 2135 0 obj +% 2136 0 obj << /Type /Annot /Subtype /Link @@ -30749,57 +30764,52 @@ stream /Rect [170.554 324.049 177.543 336.109] /A << /S /GoTo /D (algocf.1) >> >> -% 2148 0 obj -<< -/D [2146 0 R /XYZ 149.705 753.953 null] ->> -% 2143 0 obj +% 2149 0 obj << -/D [2146 0 R /XYZ 150.705 716.092 null] +/D [2147 0 R /XYZ 149.705 753.953 null] >> -% 2149 0 obj +% 2144 0 obj << -/D [2146 0 R /XYZ 397.506 407.446 null] +/D [2147 0 R /XYZ 150.705 716.092 null] >> % 2150 0 obj << -/D [2146 0 R /XYZ 150.705 260.219 null] +/D [2147 0 R /XYZ 397.506 407.446 null] >> % 2151 0 obj << -/D [2146 0 R /XYZ 150.705 226.207 null] +/D [2147 0 R /XYZ 150.705 260.219 null] >> -% 2145 0 obj +% 2152 0 obj +<< +/D [2147 0 R /XYZ 150.705 226.207 null] +>> +% 2146 0 obj << /Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R >> -/XObject << /Im6 2131 0 R >> +/XObject << /Im6 2132 0 R >> /ProcSet [ /PDF /Text ] >> -% 2157 0 obj +% 2158 0 obj << /Type /Page -/Contents 2158 0 R -/Resources 2156 0 R +/Contents 2159 0 R +/Resources 2157 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2115 0 R -/Annots [ 2134 0 R ] +/Parent 2116 0 R +/Annots [ 2135 0 R ] >> -% 2169 0 obj +% 2170 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133928+01'00') /ModDate (D:20140329133928+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2170 0 obj -<< -/Type /ExtGState -/OPM 1 ->> endstream endobj -2171 0 obj +2172 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -30818,7 +30828,7 @@ stream ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙;YŻ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŕ endstream endobj -2176 0 obj +2177 0 obj << /Filter /FlateDecode /Length 171 @@ -30827,7 +30837,7 @@ stream xś]ŹM F÷ś‚ŕOŰĸ±mš¶Ŕa0,‚¸čí; vфߛ|~¸ÖD.ÁÁ #×ĆŞ€‹[ q2–•WâNy‡Yz&ú›ôďŹGNÔßĺŚâYžóMą9ŕ.^i'dmQt­ÖC«ţžŞMőž¬)Yź:2čDŘ^26Y?‚iRŞt4ŕ°†€6ćŢąWęc,ţľćťO§Ĺľ=+V endstream endobj -2178 0 obj +2179 0 obj << /Filter /FlateDecode /Length 191 @@ -30837,7 +30847,7 @@ x â ±—U}íuT-mËüǸTŻ)ĎuÉşDŢyřýC ±¸(Š|iŃ_Ŕ endstream endobj -2179 0 obj +2180 0 obj << /Filter /FlateDecode /Length1 11124 @@ -30886,7 +30896,7 @@ B “žŃ endstream endobj -2180 0 obj +2181 0 obj << /Filter /FlateDecode /Length1 3512 @@ -30902,7 +30912,7 @@ a lţ'÷uţoL|E÷ľr«Ço¸ß9®ńßşÓŁúľÁ( endstream endobj -2187 0 obj +2188 0 obj << /Length 8640 >> @@ -31070,20 +31080,20 @@ ET endstream endobj -2181 0 obj +2182 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../figures/hll.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2191 0 R +/PTEX.InfoDict 2192 0 R /BBox [0 0 494 214] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 2192 0 R ->>/Font << /R8 2193 0 R/R10 2194 0 R>> +/R7 2193 0 R +>>/Font << /R8 2194 0 R/R10 2195 0 R>> >> /Length 2880 /Filter /FlateDecode @@ -31105,7 +31115,7 @@ l Ů<řÇ×O?Ó‚•2.šg9_˙*×Ps źOřYT¨•®UĽv˛rĆşźÂăSóřbzh”8†Ń˝ÂXZĘü°ó`—ťúçźť†@8čwŕô)a˙…˘ŞküśËEvťëń»›šK°|dGs%´D ŹYšVňÔ@( ázé‹ńCü˙ć׬áż8Ç7•xVÇ‹ éŃi3kč4˝đw(Ölú¸V*|ik¬Ô¦âÓ*řkµřĺŔ—žŃŃ÷K•_á•Box:ŔŔŻżĆë‘HĎ+x´“ęĆi[‡;¬<žżÁ˛ĐůĹ+i ś°ůźř`8Ľ=˙ł·‡ endstream endobj -2196 0 obj +2197 0 obj << /Filter /FlateDecode /Length 214 @@ -31114,7 +31124,7 @@ stream xś]Á‚0 †ď{Š˝Á@˛ě˘ŁľŔťŮ±L<řö¶EOK šp#Ý&ÉQZ]ŚV«ÓqA« ×ÍĆăřÝn ¸G6ЍŃë4ť(„‡ ÇéÍÍé~ąR6čő&Ž{řaÎx˙.[±D˝ĐK·ČQ7idZń?:ő;> @@ -31512,20 +31522,20 @@ ET endstream endobj -2203 0 obj +2204 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/dia.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2212 0 R +/PTEX.InfoDict 2213 0 R /BBox [0 0 499 211] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 2213 0 R ->>/Font << /R8 2214 0 R/R10 2215 0 R>> +/R7 2214 0 R +>>/Font << /R8 2215 0 R/R10 2216 0 R>> >> /Length 2502 /Filter /FlateDecode @@ -31543,7 +31553,7 @@ $ rca™ń8ĎzD—‹bŤH…°d'Ą˘šĂ\LŔ/óą¬1ŮŚ,0F c¨)T#  7Ě,Ąj7ß%ÎĄšäŰć›RŮ6ßq4›/Éٸg]Ťĺű\¦—×\ĂW\¬ň+3,ęmó˝Lr´›ďJŽ·Í7ńĹÓĐČţ¶ů&ţ?9łů.y’QQШ» ťŃ•Ś&GsĽmľ7ě“LĎ‹I7=šűmóMąm›/]”o›/ÉvóUQxT»ů._ŕlŰć»ňâ›QUÔĚá×.Ü$Rg{çćńĘŘcé‚Lçúqçţú1ş‡Źç×><>ľbűJ:ŞŠŢËĂ_Ć˝:dş’·p>yşovŞ†çż‘ăżűîă·ĎÓ‘Żě-u„縑óßżË&& endstream endobj -2217 0 obj +2218 0 obj << /Filter /FlateDecode /Length 177 @@ -31553,7 +31563,7 @@ x ˘t s1#8ý÷ŐUĂlŽÉV‹"α’ˇCc×fÄb/Šű˛íôĺĹ9áŞ=Fp©śQbćxÖÁďŇŕCvQůđY˘ endstream endobj -2219 0 obj +2220 0 obj << /Filter /FlateDecode /Length 197 @@ -31562,7 +31572,7 @@ stream xś]M …÷ś‚FmL»qѦi{ÄÁ° ꢷď0j]Ľ Ěß#k»kçÝĘłGśÍ Vnť",ó đFçY^đÁ™ő ŠfŇeíM‡÷'ǰ;ßőŮ3żĐMľ×y€%hQűBIk?ü=Ő{AoŹĚ3“„ŔČd™+’+Äš°Jh ›ËŞP˛*â ±Q$ĆFźCŇÉÎą=7[ŚŕWňLž’çá÷-a©ŠŁŘsÇbă endstream endobj -2220 0 obj +2221 0 obj << /Filter /FlateDecode /Length1 9528 @@ -31596,7 +31606,7 @@ E óźó_ ů[ŘCŰ×,š0Z­ĘţŰ Ę+é×…¬Ăż]úi ^Ťgů\Ţo´ůČŻ›‰ň'/! `˘ěÁŠŕĆ?G˙Áž˙…&X‘łś‰çI,ŻÖĆĺbřQ ~Ľü÷8É߇ă­^×Ô:·éŰ š×ŐßZ˝pÎ"Ł'ŰőDĘrms#×0F~ť6McŁřÓ´ÎĺBi6U Żé˙đČľüŤ?ôčGNÔŮý_XR‡Ť=ńŃč—$=zC/]l»ĽĂQd‰E3ꊭ˙îi endstream endobj -2221 0 obj +2222 0 obj << /Filter /FlateDecode /Length1 4304 @@ -31622,7 +31632,7 @@ Hp —řď}Ř».|wy endstream endobj -2226 0 obj +2227 0 obj << /Length 9674 >> @@ -31849,22 +31859,22 @@ ET endstream endobj -2222 0 obj +2223 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../figures/hdia.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2229 0 R +/PTEX.InfoDict 2230 0 R /BBox [0 0 556 211] /Resources << /ProcSet [ /PDF /ImageC /Text ] /ExtGState << -/R7 2230 0 R +/R7 2231 0 R >>/XObject << -/R8 2231 0 R ->>/Font << /R9 2232 0 R/R11 2233 0 R>> +/R8 2232 0 R +>>/Font << /R9 2233 0 R/R11 2234 0 R>> >> /Length 3027 /Filter /FlateDecode @@ -31881,7 +31891,7 @@ mC ŕŐŔ–ĹčÚWšŮ‡ńZ1m੆CË8?¬ąe—¶Ühc·ćÖó57‘-7ÖhhlABg–›Ä ŽQ ěYP׾ÖĚĆZkađfĂŢ%÷1#YSńüőtĂIoĂ`·FzT#Ô:ž©""ŇŇw+ ÄÁíj€eqA#X#͸g =Đ·‰ 1€cP€D-¶,ĆZűJ3k-Í^Zn˘‘ĐrśłABĎqLË-‡9źć|S,›cŐphbABg–›Ä ‰Z lYڵö•fF]æf^ň¨gÚ8Ĺł7ŐÄŠýlT3"ޱ ÚżţV)Z?·ľăfĚşˇ1Ö°X]]ůLČż†ŮYáKjϢÖKedj›<ź®đ/o•˘‡‹í—çŰ>úéĆĹPó\+użUóq™ż¨ŮńĽ(q|KŕcÉtőĽh|¤;ÓDź8TÜč3¦ĆĂYË«HŚÇŠ”Ű+˝ť’¬Q‹‰n¨ű±űěţǨ١kŁ1*R$˘™®`jš“†Ňč •f‘Ş,vU#žĹűŘ}JoŇ|íYťÖ„5%sMč%Çxé?k‚SW-"RMXQ»Ö„G°Ć|d®ÉŐ§Ô„ě5kšéŠjŇăéŐwjt·n˛¨VUÁne4;Řrô!”6t„A· ˇY!éeB±:łhŤ ¬yâJŕ×:ůD#†R[Dď°a§Ě–Isµ<H«eŐđdˇ čm8Ď% P§ő§#Ţ´Ď·mŕxGĽÎZË‘ýn9s…#Ŕjő§á‚N5‚ĚcG,r©™®Çum”Ň|űi¬˝–»8ľPĂôE!řć*]Šâ ŰćGR,_#ů¬ÝÍ?fCésöâÄńßâÝ´Ď·}$˝”Ç®`Ly®…ČR+Q—ć#­ÍKłŮzT&zµ)ŠH_x6Ł=“ĄO±ôů˘Og„ixLEđ8•É«KŽcł2žŮOO¦áU ˇňjSĂJ[ęYâE,l^yÖŃge”´Ř˘ţđ™‰o˛ }DęBtôú§ëĎÎ'şÖŃ"ý¨†ů‡Ç +Š}–é愆̶fbôBÍŹŹ™ţďńůřÍĂí›7ýéxřń6żqžßź`Ú dśöPŔ‡çŰť{őđŹ›Ďř%Ą^Ťw¬ă_îÎ…)ôzÜăÉŽ-îú ĘŞ#Oú! smčéRßa÷ý»;˙ęľaĂě\ş«Żţúđ‡Ű=–ŚsŘﮆßÝݦ@ďwńŐ}Íî.ă?„NC ¬Ô,PŚ{¤ …áŰÔ…öJź«Ť÷ôş8¬ĺą×ô}Ż ĎHzw÷ű׿ýăń§ďľ{‹ŔU­áîۇ}±ŁÇŔ„nbURA4ŰăÇą@7ú#Ăׯ"íW}Ľ{{Ľ~ófZÍÍă‡ęđg)wćG?Üţ4ş‘ endstream endobj -2231 0 obj +2232 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -31900,7 +31910,7 @@ stream ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ 0l?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü@ endstream endobj -2235 0 obj +2236 0 obj << /Filter /FlateDecode /Length 177 @@ -31909,7 +31919,7 @@ stream xś]Ź1Ă EwNÁ €0´C”%]24ŞÚ^€€‰ˇ·/8I‡¶ülë›őĂmđ.SöHAż SëĽI°†-i ĚÎŃPăt>ł^T$¬ż«řţD eěÎŁZ€=Ĺ;b×č``ŤJCR~Ňr޵ÖvĽůÉ]0Ůcł1ç%“VˇKUPĽ JĽvęęáęđ4Dő–řŚo ÍjĎyř}C¬*Z‚|ďY› endstream endobj -2237 0 obj +2238 0 obj << /Filter /FlateDecode /Length 213 @@ -31921,7 +31931,7 @@ e ¦Y$ŕĹcÂß ó”yJę Űál« endstream endobj -2238 0 obj +2239 0 obj << /Filter /FlateDecode /Length1 10604 @@ -31955,7 +31965,7 @@ b YŃFťŹ.ţŤÎ X°bÍŇÎąKoßľ¦ůúÚş9 ô,p÷xý˙ÍgĽ˛xή`Ś˙K)ÄDŔl;Áy‚jö8Ô­¨[ß˙áí°×ţŇď=2ŘdqmŚëřᏓžôčŐđĂú‹;­EĆP%ď÷˙=X endstream endobj -2239 0 obj +2240 0 obj << /Filter /FlateDecode /Length1 5080 @@ -31976,7 +31986,7 @@ Y2 pÓÇ}3ÇóyŘŕ.”pÄ€×ĎôÁ›Źý˙âqÁ%§t1Ţ®onb©łećŃM¸éĂáË0÷ǵ3kçéD ^đoŰw# çô°'Ě?¸˛rtĺÁ3÷9#§ţëňľW|ŢŢ|Ź˘űďš«A†űD¸źŕűe0ąbÎxőŻ`}u¤¸%üžÄ÷÷đý\3“ąŮZź­ľeÓ?Ľ|Odň?¸Żđo2őU3đÜÖ˙ă˙­đ˙ÍWúßÓ )' endstream endobj -2242 0 obj +2243 0 obj << /Length 1097 >> @@ -32036,7 +32046,7 @@ ET endstream endobj -2246 0 obj +2247 0 obj << /Length 7873 >> @@ -32103,7 +32113,7 @@ ET endstream endobj -2250 0 obj +2251 0 obj << /Length 5844 >> @@ -32206,7 +32216,7 @@ ET endstream endobj -2255 0 obj +2256 0 obj << /Length 5432 >> @@ -32394,7 +32404,7 @@ ET endstream endobj -2259 0 obj +2260 0 obj << /Length 2725 >> @@ -32498,7 +32508,7 @@ ET endstream endobj -2264 0 obj +2265 0 obj << /Length 81 >> @@ -32513,7 +32523,7 @@ ET endstream endobj -2268 0 obj +2269 0 obj << /Length 7303 >> @@ -32577,47 +32587,52 @@ ET endstream endobj -2174 0 obj +2175 0 obj << /Type /ObjStm /N 100 -/First 986 -/Length 11860 ->> -stream -2172 0 2173 205 2175 494 2177 715 2134 928 2159 1074 2144 1132 2160 1191 2161 1250 2162 1309 -2163 1368 2164 1427 2165 1486 2166 1545 2167 1603 2155 1662 2168 1721 2156 1779 2186 1974 2191 2131 -2192 2311 2193 2354 2194 2657 2195 2862 2197 3075 2182 3296 2183 3443 2184 3590 2188 3737 2189 3796 -2190 3854 2185 3913 2206 4123 2212 4262 2213 4442 2214 4485 2215 4686 2216 4981 2218 5202 2204 5415 -2208 5561 2201 5619 2209 5678 2202 5736 2210 5795 2205 5853 2225 6007 2229 6146 2230 6326 2232 6369 -2233 6576 2234 6877 2236 7098 2223 7311 2227 7458 2228 7517 2224 7576 2241 7758 2243 7876 2240 7934 -2245 8017 2247 8135 614 8194 2244 8252 2249 8375 2251 8493 618 8551 622 8607 2252 8664 626 8722 -2248 8779 2254 8874 2256 8992 630 9051 634 9109 638 9167 642 9225 646 9283 650 9341 654 9399 -658 9457 2253 9515 2258 9610 2260 9728 662 9786 666 9843 670 9900 674 9957 2257 10014 2263 10109 -2265 10227 2262 10286 2267 10354 2269 10472 2270 10530 2271 10588 2012 10646 958 10703 957 10760 916 10817 -% 2172 0 obj +/First 985 +/Length 11845 +>> +stream +2171 0 2173 43 2174 248 2176 537 2178 758 2135 971 2160 1117 2145 1175 2161 1234 2162 1293 +2163 1352 2164 1411 2165 1470 2166 1529 2167 1588 2168 1646 2156 1705 2169 1764 2157 1822 2187 2017 +2192 2174 2193 2354 2194 2397 2195 2700 2196 2905 2198 3118 2183 3339 2184 3486 2185 3633 2189 3780 +2190 3839 2191 3897 2186 3956 2207 4166 2213 4305 2214 4485 2215 4528 2216 4729 2217 5024 2219 5245 +2205 5458 2209 5604 2202 5662 2210 5721 2203 5779 2211 5838 2206 5896 2226 6050 2230 6189 2231 6369 +2233 6412 2234 6619 2235 6920 2237 7141 2224 7354 2228 7501 2229 7560 2225 7619 2242 7801 2244 7919 +2241 7977 2246 8060 2248 8178 614 8237 2245 8295 2250 8418 2252 8536 618 8594 622 8650 2253 8707 +626 8765 2249 8822 2255 8917 2257 9035 630 9094 634 9152 638 9210 642 9268 646 9326 650 9384 +654 9442 658 9500 2254 9558 2259 9653 2261 9771 662 9829 666 9886 670 9943 674 10000 2258 10057 +2264 10152 2266 10270 2263 10329 2268 10397 2270 10515 2271 10573 2272 10631 2013 10689 958 10746 957 10803 +% 2171 0 obj +<< +/Type /ExtGState +/OPM 1 +>> +% 2173 0 obj << /BaseFont /YAZDUX+TimesNewRomanPSMT -/FontDescriptor 2175 0 R -/ToUnicode 2176 0 R +/FontDescriptor 2176 0 R +/ToUnicode 2177 0 R /Type /Font /FirstChar 48 /LastChar 57 /Widths [ 500 500 500 500 500 0 0 500 500 500] /Subtype /TrueType >> -% 2173 0 obj +% 2174 0 obj << /BaseFont /NDNSMY+FreeSerif -/FontDescriptor 2177 0 R -/ToUnicode 2178 0 R +/FontDescriptor 2178 0 R +/ToUnicode 2179 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 0 0 0 0 0 0 0 385 0 0 0 0 0 0 0 667 529 0 0 0 0 0 701] /Subtype /TrueType >> -% 2175 0 obj +% 2176 0 obj << /Type /FontDescriptor /FontName /YAZDUX+TimesNewRomanPSMT @@ -32629,9 +32644,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2179 0 R +/FontFile2 2180 0 R >> -% 2177 0 obj +% 2178 0 obj << /Type /FontDescriptor /FontName /NDNSMY+FreeSerif @@ -32643,9 +32658,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2180 0 R +/FontFile2 2181 0 R >> -% 2134 0 obj +% 2135 0 obj << /Type /Annot /Subtype /Link @@ -32653,104 +32668,104 @@ stream /Rect [384.587 583.767 391.56 595.827] /A << /S /GoTo /D (figure.5) >> >> -% 2159 0 obj -<< -/D [2157 0 R /XYZ 98.895 753.953 null] ->> -% 2144 0 obj +% 2160 0 obj << -/D [2157 0 R /XYZ 389.217 621.446 null] +/D [2158 0 R /XYZ 98.895 753.953 null] >> -% 2160 0 obj +% 2145 0 obj << -/D [2157 0 R /XYZ 114.839 563.747 null] +/D [2158 0 R /XYZ 389.217 621.446 null] >> % 2161 0 obj << -/D [2157 0 R /XYZ 114.839 567.034 null] +/D [2158 0 R /XYZ 114.839 563.747 null] >> % 2162 0 obj << -/D [2157 0 R /XYZ 114.839 556.075 null] +/D [2158 0 R /XYZ 114.839 567.034 null] >> % 2163 0 obj << -/D [2157 0 R /XYZ 114.839 545.116 null] +/D [2158 0 R /XYZ 114.839 556.075 null] >> % 2164 0 obj << -/D [2157 0 R /XYZ 114.839 534.158 null] +/D [2158 0 R /XYZ 114.839 545.116 null] >> % 2165 0 obj << -/D [2157 0 R /XYZ 114.839 523.199 null] +/D [2158 0 R /XYZ 114.839 534.158 null] >> % 2166 0 obj << -/D [2157 0 R /XYZ 114.839 512.24 null] +/D [2158 0 R /XYZ 114.839 523.199 null] >> % 2167 0 obj << -/D [2157 0 R /XYZ 114.839 501.281 null] ->> -% 2155 0 obj -<< -/D [2157 0 R /XYZ 114.839 481.057 null] +/D [2158 0 R /XYZ 114.839 512.24 null] >> % 2168 0 obj << -/D [2157 0 R /XYZ 99.895 294.895 null] +/D [2158 0 R /XYZ 114.839 501.281 null] >> % 2156 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F233 1044 0 R /F279 1813 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> -/XObject << /Im7 2133 0 R >> +/D [2158 0 R /XYZ 114.839 481.057 null] +>> +% 2169 0 obj +<< +/D [2158 0 R /XYZ 99.895 294.895 null] +>> +% 2157 0 obj +<< +/Font << /F84 687 0 R /F75 685 0 R /F233 1044 0 R /F279 1814 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> +/XObject << /Im7 2134 0 R >> /ProcSet [ /PDF /Text ] >> -% 2186 0 obj +% 2187 0 obj << /Type /Page -/Contents 2187 0 R -/Resources 2185 0 R +/Contents 2188 0 R +/Resources 2186 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2115 0 R -/Annots [ 2182 0 R 2183 0 R 2184 0 R ] +/Parent 2116 0 R +/Annots [ 2183 0 R 2184 0 R 2185 0 R ] >> -% 2191 0 obj +% 2192 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133928+01'00') /ModDate (D:20140329133928+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2192 0 obj +% 2193 0 obj << /Type /ExtGState /OPM 1 >> -% 2193 0 obj +% 2194 0 obj << /BaseFont /MCSFLP+FreeSerif -/FontDescriptor 2195 0 R -/ToUnicode 2196 0 R +/FontDescriptor 2196 0 R +/ToUnicode 2197 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 670 0 610 564 0 714 0 385 709 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2194 0 obj +% 2195 0 obj << /BaseFont /AJRCAD+TimesNewRomanPSMT -/FontDescriptor 2197 0 R -/ToUnicode 2198 0 R +/FontDescriptor 2198 0 R +/ToUnicode 2199 0 R /Type /Font /FirstChar 48 /LastChar 57 /Widths [ 500 500 500 500 500 0 0 500 500 500] /Subtype /TrueType >> -% 2195 0 obj +% 2196 0 obj << /Type /FontDescriptor /FontName /MCSFLP+FreeSerif @@ -32762,9 +32777,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2199 0 R +/FontFile2 2200 0 R >> -% 2197 0 obj +% 2198 0 obj << /Type /FontDescriptor /FontName /AJRCAD+TimesNewRomanPSMT @@ -32776,9 +32791,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2200 0 R +/FontFile2 2201 0 R >> -% 2182 0 obj +% 2183 0 obj << /Type /Annot /Subtype /Link @@ -32786,7 +32801,7 @@ stream /Rect [453.687 426.731 460.661 438.791] /A << /S /GoTo /D (figure.5) >> >> -% 2183 0 obj +% 2184 0 obj << /Type /Annot /Subtype /Link @@ -32794,7 +32809,7 @@ stream /Rect [354.541 176.362 361.575 188.421] /A << /S /GoTo /D (figure.8) >> >> -% 2184 0 obj +% 2185 0 obj << /Type /Annot /Subtype /Link @@ -32802,68 +32817,68 @@ stream /Rect [487.118 128.475 494.142 140.535] /A << /S /GoTo /D (algocf.2) >> >> -% 2188 0 obj -<< -/D [2186 0 R /XYZ 149.705 753.953 null] ->> % 2189 0 obj << -/D [2186 0 R /XYZ 447.542 464.41 null] +/D [2187 0 R /XYZ 149.705 753.953 null] >> % 2190 0 obj << -/D [2186 0 R /XYZ 150.705 211.214 null] +/D [2187 0 R /XYZ 447.542 464.41 null] >> -% 2185 0 obj +% 2191 0 obj << -/Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R /F233 1044 0 R /F279 1813 0 R /F148 1490 0 R /F190 941 0 R /F75 685 0 R >> -/XObject << /Im8 2181 0 R >> +/D [2187 0 R /XYZ 150.705 211.214 null] +>> +% 2186 0 obj +<< +/Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R /F233 1044 0 R /F279 1814 0 R /F148 1490 0 R /F190 941 0 R /F75 685 0 R >> +/XObject << /Im8 2182 0 R >> /ProcSet [ /PDF /Text ] >> -% 2206 0 obj +% 2207 0 obj << /Type /Page -/Contents 2207 0 R -/Resources 2205 0 R +/Contents 2208 0 R +/Resources 2206 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2211 0 R -/Annots [ 2204 0 R ] +/Parent 2212 0 R +/Annots [ 2205 0 R ] >> -% 2212 0 obj +% 2213 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133927+01'00') /ModDate (D:20140329133927+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2213 0 obj +% 2214 0 obj << /Type /ExtGState /OPM 1 >> -% 2214 0 obj +% 2215 0 obj << /BaseFont /BNRUAU+TimesNewRomanPSMT -/FontDescriptor 2216 0 R -/ToUnicode 2217 0 R +/FontDescriptor 2217 0 R +/ToUnicode 2218 0 R /Type /Font /FirstChar 45 /LastChar 55 /Widths [ 333 0 0 500 500 500 0 0 0 0 500] /Subtype /TrueType >> -% 2215 0 obj +% 2216 0 obj << /BaseFont /ICFUKB+FreeSerif -/FontDescriptor 2218 0 R -/ToUnicode 2219 0 R +/FontDescriptor 2219 0 R +/ToUnicode 2220 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 0 0 610 564 0 0 0 0 0 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2216 0 obj +% 2217 0 obj << /Type /FontDescriptor /FontName /BNRUAU+TimesNewRomanPSMT @@ -32875,9 +32890,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2220 0 R +/FontFile2 2221 0 R >> -% 2218 0 obj +% 2219 0 obj << /Type /FontDescriptor /FontName /ICFUKB+FreeSerif @@ -32889,9 +32904,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2221 0 R +/FontFile2 2222 0 R >> -% 2204 0 obj +% 2205 0 obj << /Type /Annot /Subtype /Link @@ -32899,76 +32914,76 @@ stream /Rect [371.292 537.01 378.265 549.069] /A << /S /GoTo /D (figure.5) >> >> -% 2208 0 obj +% 2209 0 obj << -/D [2206 0 R /XYZ 98.895 753.953 null] +/D [2207 0 R /XYZ 98.895 753.953 null] >> -% 2201 0 obj +% 2202 0 obj << -/D [2206 0 R /XYZ 396.732 574.688 null] +/D [2207 0 R /XYZ 396.732 574.688 null] >> -% 2209 0 obj +% 2210 0 obj << -/D [2206 0 R /XYZ 99.895 526.012 null] +/D [2207 0 R /XYZ 99.895 526.012 null] >> -% 2202 0 obj +% 2203 0 obj << -/D [2206 0 R /XYZ 114.839 383.469 null] +/D [2207 0 R /XYZ 114.839 383.469 null] >> -% 2210 0 obj +% 2211 0 obj << -/D [2206 0 R /XYZ 99.895 187.185 null] +/D [2207 0 R /XYZ 99.895 187.185 null] >> -% 2205 0 obj +% 2206 0 obj << -/Font << /F84 687 0 R /F145 940 0 R /F233 1044 0 R /F75 685 0 R /F279 1813 0 R >> -/XObject << /Im9 2203 0 R >> +/Font << /F84 687 0 R /F145 940 0 R /F233 1044 0 R /F75 685 0 R /F279 1814 0 R >> +/XObject << /Im9 2204 0 R >> /ProcSet [ /PDF /Text ] >> -% 2225 0 obj +% 2226 0 obj << /Type /Page -/Contents 2226 0 R -/Resources 2224 0 R +/Contents 2227 0 R +/Resources 2225 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2211 0 R -/Annots [ 2223 0 R ] +/Parent 2212 0 R +/Annots [ 2224 0 R ] >> -% 2229 0 obj +% 2230 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133928+01'00') /ModDate (D:20140329133928+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2230 0 obj +% 2231 0 obj << /Type /ExtGState /OPM 1 >> -% 2232 0 obj +% 2233 0 obj << /BaseFont /PBIKKX+TimesNewRomanPSMT -/FontDescriptor 2234 0 R -/ToUnicode 2235 0 R +/FontDescriptor 2235 0 R +/ToUnicode 2236 0 R /Type /Font /FirstChar 45 /LastChar 55 /Widths [ 333 0 0 500 500 0 500 500 500 500 500] /Subtype /TrueType >> -% 2233 0 obj +% 2234 0 obj << /BaseFont /ZBHFTP+FreeSerif -/FontDescriptor 2236 0 R -/ToUnicode 2237 0 R +/FontDescriptor 2237 0 R +/ToUnicode 2238 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 670 0 610 564 0 714 0 0 709 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2234 0 obj +% 2235 0 obj << /Type /FontDescriptor /FontName /PBIKKX+TimesNewRomanPSMT @@ -32980,9 +32995,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2238 0 R +/FontFile2 2239 0 R >> -% 2236 0 obj +% 2237 0 obj << /Type /FontDescriptor /FontName /ZBHFTP+FreeSerif @@ -32994,9 +33009,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2239 0 R +/FontFile2 2240 0 R >> -% 2223 0 obj +% 2224 0 obj << /Type /Annot /Subtype /Link @@ -33004,230 +33019,226 @@ stream /Rect [440.392 344.666 447.366 356.726] /A << /S /GoTo /D (figure.5) >> >> -% 2227 0 obj +% 2228 0 obj << -/D [2225 0 R /XYZ 149.705 753.953 null] +/D [2226 0 R /XYZ 149.705 753.953 null] >> -% 2228 0 obj +% 2229 0 obj << -/D [2225 0 R /XYZ 447.542 382.345 null] +/D [2226 0 R /XYZ 447.542 382.345 null] >> -% 2224 0 obj +% 2225 0 obj << -/Font << /F84 687 0 R /F145 940 0 R /F78 686 0 R /F75 685 0 R /F192 942 0 R /F233 1044 0 R /F279 1813 0 R >> -/XObject << /Im10 2222 0 R >> +/Font << /F84 687 0 R /F145 940 0 R /F78 686 0 R /F75 685 0 R /F192 942 0 R /F233 1044 0 R /F279 1814 0 R >> +/XObject << /Im10 2223 0 R >> /ProcSet [ /PDF /Text ] >> -% 2241 0 obj +% 2242 0 obj << /Type /Page -/Contents 2242 0 R -/Resources 2240 0 R +/Contents 2243 0 R +/Resources 2241 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2211 0 R +/Parent 2212 0 R >> -% 2243 0 obj +% 2244 0 obj << -/D [2241 0 R /XYZ 98.895 753.953 null] +/D [2242 0 R /XYZ 98.895 753.953 null] >> -% 2240 0 obj +% 2241 0 obj << /Font << /F233 1044 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2245 0 obj +% 2246 0 obj << /Type /Page -/Contents 2246 0 R -/Resources 2244 0 R +/Contents 2247 0 R +/Resources 2245 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2211 0 R +/Parent 2212 0 R >> -% 2247 0 obj +% 2248 0 obj << -/D [2245 0 R /XYZ 149.705 753.953 null] +/D [2246 0 R /XYZ 149.705 753.953 null] >> % 614 0 obj << -/D [2245 0 R /XYZ 150.705 716.092 null] +/D [2246 0 R /XYZ 150.705 716.092 null] >> -% 2244 0 obj +% 2245 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F233 1044 0 R /F145 940 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2249 0 obj +% 2250 0 obj << /Type /Page -/Contents 2250 0 R -/Resources 2248 0 R +/Contents 2251 0 R +/Resources 2249 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2211 0 R +/Parent 2212 0 R >> -% 2251 0 obj +% 2252 0 obj << -/D [2249 0 R /XYZ 98.895 753.953 null] +/D [2250 0 R /XYZ 98.895 753.953 null] >> % 618 0 obj << -/D [2249 0 R /XYZ 99.895 554.06 null] +/D [2250 0 R /XYZ 99.895 554.06 null] >> % 622 0 obj << -/D [2249 0 R /XYZ 99.895 527.944 null] +/D [2250 0 R /XYZ 99.895 527.944 null] >> -% 2252 0 obj +% 2253 0 obj << -/D [2249 0 R /XYZ 99.895 315.727 null] +/D [2250 0 R /XYZ 99.895 315.727 null] >> % 626 0 obj << -/D [2249 0 R /XYZ 99.895 284.171 null] +/D [2250 0 R /XYZ 99.895 284.171 null] >> -% 2248 0 obj +% 2249 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2254 0 obj +% 2255 0 obj << /Type /Page -/Contents 2255 0 R -/Resources 2253 0 R +/Contents 2256 0 R +/Resources 2254 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2211 0 R +/Parent 2212 0 R >> -% 2256 0 obj +% 2257 0 obj << -/D [2254 0 R /XYZ 149.705 753.953 null] +/D [2255 0 R /XYZ 149.705 753.953 null] >> % 630 0 obj << -/D [2254 0 R /XYZ 150.705 720.077 null] +/D [2255 0 R /XYZ 150.705 720.077 null] >> % 634 0 obj << -/D [2254 0 R /XYZ 150.705 633.991 null] +/D [2255 0 R /XYZ 150.705 633.991 null] >> % 638 0 obj << -/D [2254 0 R /XYZ 150.705 559.861 null] +/D [2255 0 R /XYZ 150.705 559.861 null] >> % 642 0 obj << -/D [2254 0 R /XYZ 150.705 485.732 null] +/D [2255 0 R /XYZ 150.705 485.732 null] >> % 646 0 obj << -/D [2254 0 R /XYZ 150.705 411.602 null] +/D [2255 0 R /XYZ 150.705 411.602 null] >> % 650 0 obj << -/D [2254 0 R /XYZ 150.705 325.516 null] +/D [2255 0 R /XYZ 150.705 325.516 null] >> % 654 0 obj << -/D [2254 0 R /XYZ 150.705 251.386 null] +/D [2255 0 R /XYZ 150.705 251.386 null] >> % 658 0 obj << -/D [2254 0 R /XYZ 150.705 177.256 null] +/D [2255 0 R /XYZ 150.705 177.256 null] >> -% 2253 0 obj +% 2254 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2258 0 obj +% 2259 0 obj << /Type /Page -/Contents 2259 0 R -/Resources 2257 0 R +/Contents 2260 0 R +/Resources 2258 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2261 0 R +/Parent 2262 0 R >> -% 2260 0 obj +% 2261 0 obj << -/D [2258 0 R /XYZ 98.895 753.953 null] +/D [2259 0 R /XYZ 98.895 753.953 null] >> % 662 0 obj << -/D [2258 0 R /XYZ 99.895 720.077 null] +/D [2259 0 R /XYZ 99.895 720.077 null] >> % 666 0 obj << -/D [2258 0 R /XYZ 99.895 650.062 null] +/D [2259 0 R /XYZ 99.895 650.062 null] >> % 670 0 obj << -/D [2258 0 R /XYZ 99.895 580.047 null] +/D [2259 0 R /XYZ 99.895 580.047 null] >> % 674 0 obj << -/D [2258 0 R /XYZ 99.895 510.033 null] +/D [2259 0 R /XYZ 99.895 510.033 null] >> -% 2257 0 obj +% 2258 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2263 0 obj +% 2264 0 obj << /Type /Page -/Contents 2264 0 R -/Resources 2262 0 R +/Contents 2265 0 R +/Resources 2263 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2261 0 R +/Parent 2262 0 R >> -% 2265 0 obj +% 2266 0 obj << -/D [2263 0 R /XYZ 149.705 753.953 null] +/D [2264 0 R /XYZ 149.705 753.953 null] >> -% 2262 0 obj +% 2263 0 obj << /Font << /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2267 0 obj +% 2268 0 obj << /Type /Page -/Contents 2268 0 R -/Resources 2266 0 R +/Contents 2269 0 R +/Resources 2267 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2261 0 R ->> -% 2269 0 obj -<< -/D [2267 0 R /XYZ 98.895 753.953 null] +/Parent 2262 0 R >> % 2270 0 obj << -/D [2267 0 R /XYZ 99.895 723.717 null] +/D [2268 0 R /XYZ 98.895 753.953 null] >> % 2271 0 obj << -/D [2267 0 R /XYZ 99.895 698.792 null] +/D [2268 0 R /XYZ 99.895 723.717 null] >> -% 2012 0 obj +% 2272 0 obj << -/D [2267 0 R /XYZ 99.895 638.64 null] +/D [2268 0 R /XYZ 99.895 698.792 null] >> -% 958 0 obj +% 2013 0 obj << -/D [2267 0 R /XYZ 99.895 595.644 null] +/D [2268 0 R /XYZ 99.895 638.64 null] >> -% 957 0 obj +% 958 0 obj << -/D [2267 0 R /XYZ 99.895 538.043 null] +/D [2268 0 R /XYZ 99.895 595.644 null] >> -% 916 0 obj +% 957 0 obj << -/D [2267 0 R /XYZ 99.895 477.792 null] +/D [2268 0 R /XYZ 99.895 538.043 null] >> endstream endobj -2277 0 obj +2278 0 obj << /Length 6164 >> @@ -33290,7 +33301,7 @@ ET endstream endobj -2295 0 obj +2296 0 obj << /Length1 1383 /Length2 5908 @@ -33361,7 +33372,7 @@ W ň6S&Şĺ_!“˝SÎ|esU›FĚR™y† ˘Y‹Ąýžď­§N endstream endobj -2297 0 obj +2298 0 obj << /Length1 1956 /Length2 7144 @@ -33478,7 +33489,7 @@ _g\e+J`ÚĽu F˝Aa´´˙.P’gvźţěÇaósl řŻZBh·ő´gćÇ –Wµ Ű-‹BѶ”N°ŠÜhú`˨[ÉW÷jßí)q(µÎăÓĚý÷ÍŚţđ.wYŐć‹$ŢQ¬˙0±€®Ń]Šü endstream endobj -2299 0 obj +2300 0 obj << /Length1 1442 /Length2 6151 @@ -33556,7 +33567,7 @@ n^ r sb˘VŘb)l 2ĹţSŠ„TŁ­H+PMzjÔîëzËiÍfí$ŽDáŚMkV©° Ă?ă\ŮĽÄ>ެßƶaą<ˇČčEEŁÜL˝¦D…Ż6=tŻ–EŇ÷µ€đŕŔ.…(Á%FoÜ~­´ô6€rŤý¦\l•ů;séń'$Öµ…ďß>ž4ąŹ˙r$ď2¨DZý~*®\R ů·Yi$=ޡĄk‡ĺ'ŻÖĺ“™úý.m…6ŻÂ–„tY0’O$đ)şQń’ršČUQ…»+¶ßŞúÔ4(¨«,‡°Qb8¬—mÓ©qý±âŔÁÝHä°=‘ś,YŠ8i  ˙‡˝Ş”SZ6Žöă˝mŘ@»`é7~â"L7\ăąßFdN#FţýHR´K´KHpb40 2ÂÚ~HÇKε֊úřX endstream endobj -2301 0 obj +2302 0 obj << /Length1 1478 /Length2 6403 @@ -33637,7 +33648,7 @@ O GÁ0˙Ńűň˙¦ś˙+B°¸+›ć¸žbĄqGYŔđitâLxRIPv®Ő˝Ť·hÎÄÓÔĄşŇĎ‹^ž˝:nwĺňśŐp5żĐ>^؉RĄŢä}đ4ü¸żŚň™áůŢaŚgül}×^™(©t7aÝÔ &ó˝¶)±ZS«‘ ”ľ8˙n}@f0;­b.ŰŁELě›7†%·ą›3CŞ,ň@ä7ąŐď[I [1sI¬îĹXÚ<Ćü[›fÜŚą¶ÝaŻ:?yşČç3"ču/'Ř\Ödń ÁDÓąÚ=»qUü ęškóÎşůH‚â$ y§ďQ7ĽplŽ*žmhS]ADäŰäřů5Îă˝üĆ«ü‹79µ endstream endobj -2303 0 obj +2304 0 obj << /Length1 1688 /Length2 8444 @@ -33728,7 +33739,7 @@ p bŠ|Ü<dF.ĘÂĂOü¶˝Łć[–ßČÝv°óżö±O¨hgĂy‡Qě®—»ĺ¶ ‘«h›0}¦ŹŞ»˝Üő,ďĺč:Ő(Ń–~¨–Ŕ–’6uüŤ‹ŤmXóR·VĂ<‡­ĐłJVíM\Fw%T6VÍvýŃQnéϨ˙¦:Ď M¤\Ú…Uá-:φ57M}ÎŢ!ăZ‘D ęs‰ ç {$Qű0Ý„nëť®ęÓ Ę(ăN3°Ţ[( ˝¶?™ÓŚoÜî9T˝”ŇućŇ«6nŔu÷đD!qáíZ”ŤŢU›·ÍÜT”!pťÚąVŘžďó‡/…Č\ýh^‡:ń'.AµEőľS‹6P*BËY‹Lź endstream endobj -2305 0 obj +2306 0 obj << /Length1 2571 /Length2 18274 @@ -33918,7 +33929,7 @@ bvT ­¬Ě$LŽ`u\$˙yý îË63rŚa ů*}L¬˙Oţ­Nűšâ°Vz`NÁ~©âÖüËďţD|°Ď!5…çĆkW· ÎďŻËŹĹ[uő 1HÉ6ĹGÍ y‚ŔDĐűW…ÔCż•%‹Ň¸ŹVîŹ96şkś>lLtĆgŃ)d:ă|Ů\Ž,?†ĹŮľ¦d”5·ÖŚ‘ěˇâŘ#2}‰Äń‘«Ă™ >>©™–Ay÷r5dý>>Ç:XqażÓŮ x^ĺJÓ^a”Ő ŔÝ2PAˇ˝Îk@¨APŁíÓ~<˘GÇ€w*ßjRr… (ŢŤbí]4˛2ća´Ť<ˇď‰öŹ‚kdů©#YtuÎdW'*ŐłC+% 9vČ˝âđq endstream endobj -2307 0 obj +2308 0 obj << /Length1 1509 /Length2 2696 @@ -33980,7 +33991,7 @@ currentfile eexec ˘˝›ß˝€eĐ´Ë*›ąˇĹ×KŔËHŞX3.Óg 2L9tžčbMťµ$˙x*Ý™4$R=ĺ Ţ+JUůCwŠe–䡞±…›-%ţe)ťęłÓĽÖ\™MS{Ć•Këžł.ś endstream endobj -2309 0 obj +2310 0 obj << /Length1 2495 /Length2 16116 @@ -34167,12 +34178,12 @@ uÖ‚ }ă´űKç+ŃŕôÎďČL5XáçB´Ć`{PŘžFR/´e¦•{›ůÉţżxěłIf!«ĐŢdĺw!q>)Îż ç«׫ÍélŢV•]$>Řđ€Om•ĹÂť€„”śKé1îy®ďŕ^Ńź= "YkčK‡ÇÉÜgtĽ[1ŕ6eŕ´§p[hNcľ}]Ű#Ü^ŤékNoĘĽm, ±5uى‘yéá<Őnĺ•TAłťt<ÍwŁ&+•5O–y[šě÷N„ţ[ŞP±+J ă$ěiŮŤ/×%”ÖŢHEPBÓaÓŇŕz`~-Âôa+Őʏwi W€´ęÔ=ŢţYÝĂĘ˙%ŕb-ČňĐČSQ­=SVuIwď®–ĄH°¸CŇ8űq—-şŁ ©›¨íWŁť‰R͢ݼ?ÎÎď҉GĽ»g5…Ťáá)Ó9 P9©_öQ‰+Ë[nŇŢđ‘kˇđ#ß%J!ł„zůŽř6:ČLŃiŃ)Yđ´™exR4ëĚ©b&Śťř-Ŕé¸Îäbź©łĎ e’đNćbłx+’ÎÔ‚>ęxró}Ô„%öSx#«ĆóěđáŔĽŕÔ\/¸aĬ1^BIO˙Ě…Ô•x_ĺ<=răÔTi¤ş˝Ôř_ä­[›ÖŤÉ-Wżő…&íŹg!zÂ{N•i×%’3s|彨’66gú಑do–D»ą^-@AćJ–đHSPşHSäŹ[NŤĄ©:ORŘ~Ť\¨·bj–•1 ăćp endstream endobj -2311 0 obj +2312 0 obj << -/Length1 1173 -/Length2 2916 +/Length1 1191 +/Length2 3225 /Length3 0 -/Length 4089 +/Length 4416 >> stream %!PS-AdobeFont-1.0: PazoMath 001.003 @@ -34191,9 +34202,10 @@ stream /UnderlineThickness 50 def /Weight (Regular) readonly def end readonly def -/FontName /IKXQUG+PazoMath def +/FontName /ZSBXRF+PazoMath def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for +dup 87 /Omega put dup 165 /infinity put dup 229 /summation put readonly def @@ -34207,15 +34219,12 @@ currentfile eexec nAŽYXÖţUŮ1ń2¨×ččŇrŐrúE^Oy¤"â;ôDmŇŕ{O0Ň {2ĆRżBĘiłŻN´íĚMĂýŮöéufű–L´”o¬ńąnőŰâ>ĺ‘Gl»_ëí1¶#<đW”\’ŽďJşÄaâ˝ć„_«ňFbÁ†ŠĆ~ ”M÷PsRî“ŰŬK5B|«BuG‰ÓŚ8öer(ßVΫ0¶\ňFĚ+ŁS“hdr=ĘéĘVd^ RUl^›0ŚpEÉTXŰ˝‡Ç›í—ë]Ć%’ÁŇ[ő”áT8ÝŻśű%˛Uć~ë˝25죇µK÷±;ŻFŞ<´FS$ĆŐű˛9dwY€-u&‡i$ŞňĽ(O´fvdz¦‹ hşŤľÓą s;Ż“Ď‘čB]˘rř„Łś* Ť3Ü”™ Ăć_&+Ć ˙Şń‹śÍ4Ť‡ôÇ9ˇĎ^WJ ňĐlĆ.ņä»Yą~^ŕłľ¨“ňXqą=ÂË;agâ ŁCgďĎĂÄ _%‰ĆľJéD­í>‘ÚYÎ> Ř‹’˘á˝nćׯ ,G#˘Ä˛›‹5Ŕ.ęFŚE)a"™¬˛ó p‘ťßqÖo-Ů4Ď`7µň}§Óş¤WĚt_ceuĹĐóJŚ—h>ËĚ˙Íú¸µ>WţľŞÎ! ôA5jľ-±v`ňç-Š?R ďtl.e)öµ1=Ěď–kdSă¤iőä!5Ëţ_lŚś<ź ô—˛ß-^ó­Ş+éÍš‘Žôůbřî™ŢŽçŢ©ČÜ–™nW˙%yďg§ő͚™ý÷3ˇN>âVpä9˙eŠ.•ŻoŔÖŰv’Łóý“€hÓ; ÂÍŤ‹ ŔfW´\ąü^yŃŹ_řÜ“±š˘'Úî1︖œř]c¨*Îç–" Ő磺ű©@A.Řę’ćXďčcÇ˝D&Ę<Ľr”—kö˘ ľŐ|lŘ\†ŮŹ·[ne_@úÄ_TkĎş©ĺhô´.5G´ ô­­†ď[î‚\?… nä˝;göট̒\]%»ĐAíĄÝVY 3ă”č×?Ľ łßMhš•L”I•*nÁFçŐqÄ™ńu §Šeń÷~ČŔAŤ‚őE Q€P+%[sÖĐVÔÓ$—G… YRś}aâŐÉčüHງ´×÷őĂPś  Đ1t'ywBî`©Ö~›× -‹ĺ$óe1cww9üBî6$Ę—T͍ł;ŔZć (4¤9g»đ6Čvˇˇf«´§ć4J źż¨]5(§™Wđ ř„šsąÔtŕaČťłĹ<[Eެp­üT˧UüĄ!µ”JtĐžÄň ©ýŞ?,–ÎL?!w ×Ăçsźđg0MôhľBĹ1ęäłÍ$sÉyŃĽĎĺĐŰç8G•ş“Š(űűbĎí>z¨uݬŁ˙­·ľ‡Do­eHĐňńz)Ž^0 -9JžŇW –©fĹ'ČUâ€ŔIő•c‡‡ťeiŇä+ˇ5¦Ź¤ÄH,ârř73g0ź3{#Y°«ň_‰E^n2ÖÝĄ»„ ţš®ÁżxdR$;‡ž9ÎŇĚ(ěúű·ŚfôńÂ÷n*±ŹĎ×eHýc¸«AóěI…#†y`©ű÷µ%,tŢ\µ ě)˙_ăVŁ+µó7Ŕ\öMţ7AŮ4R‚ă"Đ—…@ŤđOÉ!Ť1í$ĄŻ*ϤóĐťŚsp%>*żČ–, QÄíźÉĄH;şEÖ×Ůş~b@Ž—nä˙¦ sשĚXZđŰ–…ě+ ”Ąě, -yˇŻ#ö/ť–!A¨§L‹9¦Ú8üřž˘ĽüT»a/±äeŁT´,‰ut/uĽ¶ŔĚî6ü~Ż® áş1űQAÔ‚\ńSřâWä{N?2¤±â/ďóG˝?ÚĆEŁć« 8ĽÓ®chbK3żqí$Łţ;+^ÇB(ń¬Ľ¨xšŕ¸‰k‹:wMá…XŐ,łÓ~ő‚Rç˙ţ[&ˇňh¬8AµS #L'ɧŃT‘p¤®ú#{ŰŞ˝ą>É;+â­Ľ’MŢuU§”‰[ˇä%Vű0şEÄ—‚ٲC9Ř…ŔS©םČu^sIÓ2\ŘţÄď’˘ŇĘÍ. -Ť>Íj5ĂxBÄ’ÚŞ]˸fóŠâ*Á÷‡g|Üšx*c·fr+µB!ÔĂH9Râ€2Hî4^ÁEědöăöÄ>>ž›J1öu٬•zą&żĐMLLś÷i¸Úo™Jč$!¸ótîFoµÜ¸§_µO>yů,ŢŞôÎ+ř±#îD‰ ŮqµřľýWô2łű  tE"Q×IźŐ…Ŕ§Ř.e]‚Çůl wŮú,•Ó*ˇ"ŚśMf]­—ÍĆŕiđń/FSóę‚’.÷ěsăç_.nÁ1 ŕŐ/€ßâ8,‰}̨ó ÍĘçđW“‹‡ HFPšsµWkn3‰áa¸9`6IĽĺŚů˙݉Wi¦>|ä =ÔŮŮ1u¬ĹŞ4˙¤ĹÔ…X·’HAH -$ü-UŇŰĘ3¤ł# +‹ĺ$óe1cww9üBî6$Ę—T͍ł;ŔZć (4¤9g»đ6Čvˇˇf«´§ć4J źż¨]5(§™Wđ ř„šsąÔtŕaČťłĹ<[Eެp­üT˧UüĄ!µ”JtĐžÄň ©ýŞ?,–ÎL?!w ×Ăçsźđg0Mđ7ßsHš|ě’ĐźdŞ«Ž dQň®Żü±ď<šĽ=BRęCé¬ďÁ­ Ź˘ę)öđôěÔů-a_GüÎś>sÜćŹA–ŞÔjS揝v$Cä Ő/đ` JO±.Öü«Ů*šN¶ËVhN2ň5OđřC sڤ‰ZSÉ^Ôvu¦„žě48ˇ,Ž6Vl°Šđżň:š„0]ćś)ˇhT‘ÇQkóˇď»ŐŽďѲ¦A‚ţâ8ËÜT:XJâ+·;ŰÎú !Ś ^PkĘý$8ĚÁ•;xçŮÔ1ˇµ JsŻJÇççŤ/(^ţ0ĽFű/ NaÖ+őJś§„µ:׊ŠoµťXÁç”ü»Ň{ÜČ3aµŹ8¬ľhĚ&=“ýQ ďĐ´‚~ôż Ë[pî‡Ösź!c yŢ<“j\Q­µY[3:ČěJBĆ͡ó  k0p iÍÜAmË/ëVHšę¶Tős7ÚÍ%Ş­‚y»ÄüÓµŰ7 çpžg,陸Ä"µĹBWĆe‚™~‚AaóöľiÄCŽÚ1ćĚLŹ;Ť01 O×$ÝŽâ'’`–ńeú·UÚµ×%çř÷ď…I`ĘÝqv rűX¤ +dŮ|F-,ÓgOr ÁZ­—c¤…ťş?şŁ!Ĺn%„ÎĆLLvś–Üc<óżűŽ„źuך ~+ýŢ Ťmí(ĺ3’č ŕöÄ—’AáŘţV±= •×ń)Ź€So+ËĹ  ôé«"˛»ŻŐXźaO"€Ľ?ľüçe5|Ü;rîÉđ´7‡Ä:ydLXŐďPşdŹŁiÁÝ®Éőń.YśOT¤˙ND’ŮĆŇA±Ľ…ě'V:XDýk–o˝tăq÷6FŻ…ĂŔČP=±n2Úŕ-š04ycŃÓîXEc‘v˙=dTO“Ş»ś›·$p“˙ľ‰$”^¬úękH\ ŹuÂÚă*źeÎ Ą[%ěťż˛Řŕ8ĘFA|•–9̸űŔˇÉ¨gß'FĎ}Ö•“‰!“µp¤.ůŞEúő P’ov®>ŐŞI8©3!ŐÜ/Ş JÝÚ?|iî$dŘ_ěń(°/;Ĺb÷üŇ49Ăď•Ű%XľeĘalĄŘw픋v_ŐĚąűś@dr®Ëp.álä§Ź<çęÉJt~˝źM«÷[نyś ä™ű3ąî[Î{ endstream endobj -2315 0 obj +2316 0 obj << /Length1 1614 /Length2 22531 @@ -34384,7 +34393,7 @@ s ˙K=ö˛ ’á(ŰHfUďÎărŇřľIQ$W0LÇňĹŐµ8ŽĹX‘kŻß‰ôą­JĎMĐz{äPăŔ÷–˘Ô“‹ľ>$ yň§ŃéÚ"Éjrş˝ľ‹XfŻyÓLEśtnÖy“ÉŽś‰ö•Q]Ex.ň˘B‚…;®ú[„çđĂ‚XánÍUîOýĹ›1Nd É¸&÷ďÎŚţ endstream endobj -2317 0 obj +2318 0 obj << /Length1 1616 /Length2 24418 @@ -34509,7 +34518,7 @@ c51 AĚř2C0Ż5§Śń¸űoÔ]}‰I(&*㤠˝;Ă@ar˝’§×@ ž\-@ó…Ô|†5JľĎZ¬¬ŇżÖTŰĆ⼠.áçŤ1ĺT–€"aőJk:‘ąbÄ–D»| endstream endobj -2319 0 obj +2320 0 obj << /Length1 1620 /Length2 18334 @@ -34618,7 +34627,7 @@ GÉ˝ Ďż([‘ç[·ş tźz|' ŤoŇUc×yrHŻ+ÍÝ(m§‚ 8Áýµ$#%Ľ°˘űŐ endstream endobj -2321 0 obj +2322 0 obj << /Length 1007 >> @@ -34688,7 +34697,7 @@ end endstream endobj -2322 0 obj +2323 0 obj << /Length 1577 >> @@ -34803,7 +34812,7 @@ end endstream endobj -2323 0 obj +2324 0 obj << /Length 1535 >> @@ -34909,7 +34918,7 @@ end endstream endobj -2324 0 obj +2325 0 obj << /Length 1724 >> @@ -35032,7 +35041,7 @@ end endstream endobj -2325 0 obj +2326 0 obj << /Length 2050 >> @@ -35178,7 +35187,7 @@ end endstream endobj -2326 0 obj +2327 0 obj << /Length 1543 >> @@ -35291,7 +35300,7 @@ end endstream endobj -2327 0 obj +2328 0 obj << /Length 1538 >> @@ -35404,7 +35413,7 @@ end endstream endobj -2328 0 obj +2329 0 obj << /Length 1538 >> @@ -35517,7 +35526,7 @@ end endstream endobj -2329 0 obj +2330 0 obj << /Length 853 >> @@ -35575,7 +35584,7 @@ end endstream endobj -2330 0 obj +2331 0 obj << /Length 1113 >> @@ -35653,7 +35662,7 @@ end endstream endobj -2331 0 obj +2332 0 obj << /Length 1477 >> @@ -35756,7 +35765,7 @@ end endstream endobj -2332 0 obj +2333 0 obj << /Length 1477 >> @@ -35859,7 +35868,7 @@ end endstream endobj -2333 0 obj +2334 0 obj << /Length 1482 >> @@ -35962,149 +35971,153 @@ end endstream endobj -2274 0 obj +2275 0 obj << /Type /ObjStm /N 100 -/First 1012 -/Length 18437 ->> -stream -917 0 933 57 913 114 914 170 2272 227 909 285 2273 342 2266 400 2276 494 2278 612 -1074 671 945 730 915 788 912 846 908 904 2142 962 911 1021 2279 1079 910 1138 2127 1195 -2128 1254 2280 1313 2275 1372 2281 1467 2282 1487 2283 1858 2284 1961 2285 2120 2286 2143 2287 2598 -2288 2727 2289 3025 2290 3671 2292 4142 2293 4773 2294 5244 2296 5819 2298 6044 2300 6376 2302 6620 -2304 6891 2306 7239 2308 7745 2310 7979 2312 8453 2314 8679 2316 8910 2318 9389 2320 9965 2291 10383 -1882 10824 1813 10987 1490 11150 942 11311 941 11470 940 11630 1000 11791 1044 11952 1285 12113 1157 12278 -685 12448 687 12638 686 12828 688 13018 894 13131 978 13244 1052 13361 1087 13481 1117 13601 1158 13721 -1205 13841 1244 13961 1300 14081 1351 14201 1400 14321 1457 14441 1492 14561 1534 14681 1577 14801 1626 14921 -1663 15041 1698 15161 1739 15281 1780 15401 1805 15521 1841 15641 1875 15761 1914 15881 1952 16001 1989 16121 -2034 16241 2070 16361 2115 16481 2211 16601 2261 16721 2334 16823 2335 16941 2336 17062 2337 17183 2338 17304 +/First 1011 +/Length 18541 +>> +stream +916 0 917 57 933 114 913 171 914 227 2273 284 909 342 2274 399 2267 457 2277 551 +2279 669 1074 728 945 787 915 845 912 903 908 961 2143 1019 911 1078 2280 1136 910 1195 +2128 1252 2129 1311 2281 1370 2276 1429 2282 1524 2283 1544 2284 1915 2285 2018 2286 2341 2287 2364 +2288 2819 2289 2948 2290 3246 2291 3892 2293 4363 2294 4994 2295 5465 2297 6040 2299 6265 2301 6597 +2303 6841 2305 7112 2307 7460 2309 7966 2311 8200 2313 8674 2315 8906 2317 9137 2319 9616 2321 10192 +2292 10610 1883 11051 1814 11214 1490 11377 942 11538 941 11697 940 11857 1000 12018 1044 12179 1285 12340 +1157 12504 685 12674 687 12864 686 13054 688 13244 894 13357 978 13470 1052 13587 1087 13707 1117 13827 +1158 13947 1205 14067 1244 14187 1300 14307 1351 14427 1400 14547 1457 14667 1492 14787 1534 14907 1577 15027 +1626 15147 1663 15267 1698 15387 1739 15507 1781 15627 1806 15747 1842 15867 1876 15987 1915 16107 1953 16227 +1990 16347 2035 16467 2071 16587 2116 16707 2212 16827 2262 16947 2335 17049 2336 17167 2337 17288 2338 17409 +% 916 0 obj +<< +/D [2268 0 R /XYZ 99.895 477.792 null] +>> % 917 0 obj << -/D [2267 0 R /XYZ 99.895 433.422 null] +/D [2268 0 R /XYZ 99.895 433.422 null] >> % 933 0 obj << -/D [2267 0 R /XYZ 99.895 398.456 null] +/D [2268 0 R /XYZ 99.895 398.456 null] >> % 913 0 obj << -/D [2267 0 R /XYZ 99.895 352.81 null] +/D [2268 0 R /XYZ 99.895 352.81 null] >> % 914 0 obj << -/D [2267 0 R /XYZ 99.895 307.164 null] +/D [2268 0 R /XYZ 99.895 307.164 null] >> -% 2272 0 obj +% 2273 0 obj << -/D [2267 0 R /XYZ 99.895 261.519 null] +/D [2268 0 R /XYZ 99.895 261.519 null] >> % 909 0 obj << -/D [2267 0 R /XYZ 99.895 215.873 null] +/D [2268 0 R /XYZ 99.895 215.873 null] >> -% 2273 0 obj +% 2274 0 obj << -/D [2267 0 R /XYZ 99.895 170.895 null] +/D [2268 0 R /XYZ 99.895 170.895 null] >> -% 2266 0 obj +% 2267 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2276 0 obj +% 2277 0 obj << /Type /Page -/Contents 2277 0 R -/Resources 2275 0 R +/Contents 2278 0 R +/Resources 2276 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2261 0 R +/Parent 2262 0 R >> -% 2278 0 obj +% 2279 0 obj << -/D [2276 0 R /XYZ 149.705 753.953 null] +/D [2277 0 R /XYZ 149.705 753.953 null] >> % 1074 0 obj << -/D [2276 0 R /XYZ 150.705 716.092 null] +/D [2277 0 R /XYZ 150.705 716.092 null] >> % 945 0 obj << -/D [2276 0 R /XYZ 150.705 687.379 null] +/D [2277 0 R /XYZ 150.705 687.379 null] >> % 915 0 obj << -/D [2276 0 R /XYZ 150.705 632.184 null] +/D [2277 0 R /XYZ 150.705 632.184 null] >> % 912 0 obj << -/D [2276 0 R /XYZ 150.705 590.403 null] +/D [2277 0 R /XYZ 150.705 590.403 null] >> % 908 0 obj << -/D [2276 0 R /XYZ 150.705 545.192 null] +/D [2277 0 R /XYZ 150.705 545.192 null] >> -% 2142 0 obj +% 2143 0 obj << -/D [2276 0 R /XYZ 150.705 512.037 null] +/D [2277 0 R /XYZ 150.705 512.037 null] >> % 911 0 obj << -/D [2276 0 R /XYZ 150.705 480.156 null] +/D [2277 0 R /XYZ 150.705 480.156 null] >> -% 2279 0 obj +% 2280 0 obj << -/D [2276 0 R /XYZ 150.705 448.276 null] +/D [2277 0 R /XYZ 150.705 448.276 null] >> % 910 0 obj << -/D [2276 0 R /XYZ 150.705 407.09 null] +/D [2277 0 R /XYZ 150.705 407.09 null] >> -% 2127 0 obj +% 2128 0 obj << -/D [2276 0 R /XYZ 150.705 348.649 null] +/D [2277 0 R /XYZ 150.705 348.649 null] >> -% 2128 0 obj +% 2129 0 obj << -/D [2276 0 R /XYZ 150.705 304.874 null] +/D [2277 0 R /XYZ 150.705 304.874 null] >> -% 2280 0 obj +% 2281 0 obj << -/D [2276 0 R /XYZ 150.705 260.978 null] +/D [2277 0 R /XYZ 150.705 260.978 null] >> -% 2275 0 obj +% 2276 0 obj << /Font << /F84 687 0 R /F78 686 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2281 0 obj -[1000] % 2282 0 obj -[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] +[1000] % 2283 0 obj -[277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8] +[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] % 2284 0 obj -[853 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0 0 0 881 0 0 0 0 0 0 0 0 0 0 0 0 234 0 881 767] +[277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8] % 2285 0 obj -[528 542] +[831 660 753 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 853 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0 0 0 881 0 0 0 0 0 0 0 0 0 0 0 0 234 0 881 767] % 2286 0 obj -[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] +[528 542] % 2287 0 obj -[531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] +[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] % 2288 0 obj -[388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8] +[531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] % 2289 0 obj -[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] +[388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8] % 2290 0 obj +[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] +% 2291 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] -% 2292 0 obj -[605 608 167 380 611 291 313 333 0 333 606 0 667 500 333 287 0 0 0 0 0 0 0 0 0 0 0 0 333 208 250 278 371 500 500 840 778 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 0 0 0 278 500 500 1000 500 500 333 1144 525 331 998 0 0 0 0 0 0 500 500 606 500 1000 333 979 424 331 827 0 0 667 0 278 500 500 500 500 606 500] % 2293 0 obj -[528 545 167 333 556 278 333 333 0 333 606 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 333 250 333 500 500 500 889 778 278 333 333 389 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 500 747 722 611 667 778 611 556 722 778 333 333 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 333 606 333 606 500 278 444 463 407 500 389 278 500 500 278 278 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444] +[605 608 167 380 611 291 313 333 0 333 606 0 667 500 333 287 0 0 0 0 0 0 0 0 0 0 0 0 333 208 250 278 371 500 500 840 778 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 0 0 0 278 500 500 1000 500 500 333 1144 525 331 998 0 0 0 0 0 0 500 500 606 500 1000 333 979 424 331 827 0 0 667 0 278 500 500 500 500 606 500] % 2294 0 obj +[528 545 167 333 556 278 333 333 0 333 606 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 333 250 333 500 500 500 889 778 278 333 333 389 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 500 747 722 611 667 778 611 556 722 778 333 333 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 333 606 333 606 500 278 444 463 407 500 389 278 500 500 278 278 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444] +% 2295 0 obj [611 611 167 333 611 333 333 333 0 333 606 0 667 500 333 333 0 0 0 0 0 0 0 0 0 0 0 0 333 227 250 278 402 500 500 889 833 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 667 722 833 611 556 833 833 389 389 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 606 333 606 500 278 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 310 606 310 606 0 0 0 333 500 500 1000 500 500 333 1000 611 389 1000 0 0 0 0 0 0 500 500 606 500 1000] -% 2296 0 obj +% 2297 0 obj << /Type /FontDescriptor /FontName /MNPEHI+CMEX10 @@ -36117,9 +36130,9 @@ stream /StemV 47 /XHeight 431 /CharSet (/radicalbigg) -/FontFile 2295 0 R +/FontFile 2296 0 R >> -% 2298 0 obj +% 2299 0 obj << /Type /FontDescriptor /FontName /SFGIZH+CMITT10 @@ -36132,9 +36145,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/C/D/E/H/I/K/L/M/P/T/V/a/c/comma/d/e/exclam/f/g/h/hyphen/i/k/m/n/o/p/parenleft/parenright/period/r/s/slash/t/w/x/y) -/FontFile 2297 0 R +/FontFile 2298 0 R >> -% 2300 0 obj +% 2301 0 obj << /Type /FontDescriptor /FontName /TPELEW+CMMI10 @@ -36147,9 +36160,9 @@ stream /StemV 72 /XHeight 431 /CharSet (/arrowhookleft/greater/less) -/FontFile 2299 0 R +/FontFile 2300 0 R >> -% 2302 0 obj +% 2303 0 obj << /Type /FontDescriptor /FontName /SOSTRQ+CMR10 @@ -36162,9 +36175,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/bracketleft/bracketright/equal/parenleft/parenright/plus) -/FontFile 2301 0 R +/FontFile 2302 0 R >> -% 2304 0 obj +% 2305 0 obj << /Type /FontDescriptor /FontName /VKSUEJ+CMSY10 @@ -36177,9 +36190,9 @@ stream /StemV 40 /XHeight 431 /CharSet (/B/H/I/arrowleft/arrowright/asteriskmath/bar/bardbl/braceleft/braceright/element/greaterequal/lessequal/minus/negationslash/radical) -/FontFile 2303 0 R +/FontFile 2304 0 R >> -% 2306 0 obj +% 2307 0 obj << /Type /FontDescriptor /FontName /XIQVGP+CMTT10 @@ -36192,9 +36205,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asciitilde/asterisk/b/backslash/bracketleft/bracketright/c/colon/comma/d/e/equal/f/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotesingle/r/s/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 2305 0 R +/FontFile 2306 0 R >> -% 2308 0 obj +% 2309 0 obj << /Type /FontDescriptor /FontName /KPZRIA+CMTT8 @@ -36207,9 +36220,9 @@ stream /StemV 76 /XHeight 431 /CharSet (/b/c/d/e/i/l/n/p/r/s/t) -/FontFile 2307 0 R +/FontFile 2308 0 R >> -% 2310 0 obj +% 2311 0 obj << /Type /FontDescriptor /FontName /FYMOSO+CMTT9 @@ -36222,12 +36235,12 @@ stream /StemV 74 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/c/colon/comma/d/e/equal/f/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotesingle/r/s/semicolon/six/slash/t/two/u/underscore/v/w/x/y/z/zero) -/FontFile 2309 0 R +/FontFile 2310 0 R >> -% 2312 0 obj +% 2313 0 obj << /Type /FontDescriptor -/FontName /IKXQUG+PazoMath +/FontName /ZSBXRF+PazoMath /Flags 4 /FontBBox [-40 -283 878 946] /Ascent 0 @@ -36236,10 +36249,10 @@ stream /ItalicAngle 0 /StemV 95 /XHeight 0 -/CharSet (/infinity/summation) -/FontFile 2311 0 R +/CharSet (/Omega/infinity/summation) +/FontFile 2312 0 R >> -% 2314 0 obj +% 2315 0 obj << /Type /FontDescriptor /FontName /DUJUUF+PazoMath-Italic @@ -36252,9 +36265,9 @@ stream /StemV 65 /XHeight 0 /CharSet (/alpha/beta) -/FontFile 2313 0 R +/FontFile 2314 0 R >> -% 2316 0 obj +% 2317 0 obj << /Type /FontDescriptor /FontName /BDDEWM+URWPalladioL-Bold @@ -36267,9 +36280,9 @@ stream /StemV 123 /XHeight 471 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/Z/a/b/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2315 0 R +/FontFile 2316 0 R >> -% 2318 0 obj +% 2319 0 obj << /Type /FontDescriptor /FontName /GLTUCO+URWPalladioL-Roma @@ -36282,9 +36295,9 @@ stream /StemV 84 /XHeight 469 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/bracketleft/bracketright/bullet/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/grave/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/section/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2317 0 R +/FontFile 2318 0 R >> -% 2320 0 obj +% 2321 0 obj << /Type /FontDescriptor /FontName /ZZXCQL+URWPalladioL-Ital @@ -36297,453 +36310,453 @@ stream /StemV 78 /XHeight 482 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/f/fi/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/plus/q/quoteright/r/s/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2319 0 R +/FontFile 2320 0 R >> -% 2291 0 obj +% 2292 0 obj << /Type /Encoding /Differences [2/fi/fl 30/grave 38/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 61/equal 63/question 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 147/quotedblleft/quotedblright/bullet/endash/emdash 167/section] >> -% 1882 0 obj +% 1883 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MNPEHI+CMEX10 -/FontDescriptor 2296 0 R +/FontDescriptor 2297 0 R /FirstChar 114 /LastChar 114 -/Widths 2281 0 R -/ToUnicode 2321 0 R +/Widths 2282 0 R +/ToUnicode 2322 0 R >> -% 1813 0 obj +% 1814 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SFGIZH+CMITT10 -/FontDescriptor 2298 0 R +/FontDescriptor 2299 0 R /FirstChar 33 /LastChar 121 -/Widths 2282 0 R -/ToUnicode 2322 0 R +/Widths 2283 0 R +/ToUnicode 2323 0 R >> % 1490 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TPELEW+CMMI10 -/FontDescriptor 2300 0 R +/FontDescriptor 2301 0 R /FirstChar 44 /LastChar 62 -/Widths 2283 0 R -/ToUnicode 2323 0 R +/Widths 2284 0 R +/ToUnicode 2324 0 R >> % 942 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SOSTRQ+CMR10 -/FontDescriptor 2302 0 R +/FontDescriptor 2303 0 R /FirstChar 40 /LastChar 93 -/Widths 2288 0 R -/ToUnicode 2324 0 R +/Widths 2289 0 R +/ToUnicode 2325 0 R >> % 941 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VKSUEJ+CMSY10 -/FontDescriptor 2304 0 R +/FontDescriptor 2305 0 R /FirstChar 0 /LastChar 112 -/Widths 2289 0 R -/ToUnicode 2325 0 R +/Widths 2290 0 R +/ToUnicode 2326 0 R >> % 940 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XIQVGP+CMTT10 -/FontDescriptor 2306 0 R +/FontDescriptor 2307 0 R /FirstChar 13 /LastChar 126 -/Widths 2290 0 R -/ToUnicode 2326 0 R +/Widths 2291 0 R +/ToUnicode 2327 0 R >> % 1000 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KPZRIA+CMTT8 -/FontDescriptor 2308 0 R +/FontDescriptor 2309 0 R /FirstChar 98 /LastChar 116 -/Widths 2287 0 R -/ToUnicode 2327 0 R +/Widths 2288 0 R +/ToUnicode 2328 0 R >> % 1044 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FYMOSO+CMTT9 -/FontDescriptor 2310 0 R +/FontDescriptor 2311 0 R /FirstChar 13 /LastChar 122 -/Widths 2286 0 R -/ToUnicode 2328 0 R +/Widths 2287 0 R +/ToUnicode 2329 0 R >> % 1285 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /IKXQUG+PazoMath -/FontDescriptor 2312 0 R -/FirstChar 165 +/BaseFont /ZSBXRF+PazoMath +/FontDescriptor 2313 0 R +/FirstChar 87 /LastChar 229 -/Widths 2284 0 R -/ToUnicode 2329 0 R +/Widths 2285 0 R +/ToUnicode 2330 0 R >> % 1157 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DUJUUF+PazoMath-Italic -/FontDescriptor 2314 0 R +/FontDescriptor 2315 0 R /FirstChar 97 /LastChar 98 -/Widths 2285 0 R -/ToUnicode 2330 0 R +/Widths 2286 0 R +/ToUnicode 2331 0 R >> % 685 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BDDEWM+URWPalladioL-Bold -/FontDescriptor 2316 0 R +/FontDescriptor 2317 0 R /FirstChar 2 /LastChar 151 -/Widths 2294 0 R -/Encoding 2291 0 R -/ToUnicode 2331 0 R +/Widths 2295 0 R +/Encoding 2292 0 R +/ToUnicode 2332 0 R >> % 687 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GLTUCO+URWPalladioL-Roma -/FontDescriptor 2318 0 R +/FontDescriptor 2319 0 R /FirstChar 2 /LastChar 167 -/Widths 2292 0 R -/Encoding 2291 0 R -/ToUnicode 2332 0 R +/Widths 2293 0 R +/Encoding 2292 0 R +/ToUnicode 2333 0 R >> % 686 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZZXCQL+URWPalladioL-Ital -/FontDescriptor 2320 0 R +/FontDescriptor 2321 0 R /FirstChar 2 /LastChar 122 -/Widths 2293 0 R -/Encoding 2291 0 R -/ToUnicode 2333 0 R +/Widths 2294 0 R +/Encoding 2292 0 R +/ToUnicode 2334 0 R >> % 688 0 obj << /Type /Pages /Count 6 -/Parent 2334 0 R +/Parent 2335 0 R /Kids [678 0 R 691 0 R 737 0 R 793 0 R 841 0 R 884 0 R] >> % 894 0 obj << /Type /Pages /Count 6 -/Parent 2334 0 R +/Parent 2335 0 R /Kids [892 0 R 906 0 R 924 0 R 937 0 R 950 0 R 962 0 R] >> % 978 0 obj << /Type /Pages /Count 6 -/Parent 2334 0 R +/Parent 2335 0 R /Kids [967 0 R 982 0 R 1003 0 R 1014 0 R 1022 0 R 1033 0 R] >> % 1052 0 obj << /Type /Pages /Count 6 -/Parent 2334 0 R +/Parent 2335 0 R /Kids [1049 0 R 1054 0 R 1058 0 R 1063 0 R 1070 0 R 1078 0 R] >> % 1087 0 obj << /Type /Pages /Count 6 -/Parent 2334 0 R +/Parent 2335 0 R /Kids [1083 0 R 1089 0 R 1093 0 R 1097 0 R 1103 0 R 1107 0 R] >> % 1117 0 obj << /Type /Pages /Count 6 -/Parent 2334 0 R +/Parent 2335 0 R /Kids [1113 0 R 1120 0 R 1126 0 R 1133 0 R 1139 0 R 1143 0 R] >> % 1158 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1154 0 R 1162 0 R 1172 0 R 1178 0 R 1189 0 R 1194 0 R] >> % 1205 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1201 0 R 1207 0 R 1215 0 R 1223 0 R 1228 0 R 1236 0 R] >> % 1244 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1241 0 R 1249 0 R 1254 0 R 1267 0 R 1274 0 R 1282 0 R] >> % 1300 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1293 0 R 1309 0 R 1315 0 R 1326 0 R 1332 0 R 1343 0 R] >> % 1351 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1348 0 R 1360 0 R 1365 0 R 1374 0 R 1380 0 R 1389 0 R] >> % 1400 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1396 0 R 1410 0 R 1417 0 R 1426 0 R 1434 0 R 1438 0 R] >> % 1457 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1453 0 R 1459 0 R 1465 0 R 1472 0 R 1476 0 R 1481 0 R] >> % 1492 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1487 0 R 1494 0 R 1505 0 R 1510 0 R 1519 0 R 1526 0 R] >> % 1534 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1531 0 R 1538 0 R 1542 0 R 1550 0 R 1555 0 R 1563 0 R] >> % 1577 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1569 0 R 1579 0 R 1592 0 R 1596 0 R 1609 0 R 1616 0 R] >> % 1626 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1623 0 R 1628 0 R 1635 0 R 1639 0 R 1648 0 R 1656 0 R] >> % 1663 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1660 0 R 1666 0 R 1670 0 R 1677 0 R 1682 0 R 1688 0 R] >> % 1698 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R +/Parent 2338 0 R /Kids [1694 0 R 1701 0 R 1707 0 R 1714 0 R 1722 0 R 1726 0 R] >> % 1739 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1736 0 R 1741 0 R 1745 0 R 1758 0 R 1762 0 R 1768 0 R] ->> -% 1780 0 obj -<< -/Type /Pages -/Count 6 -/Parent 2337 0 R -/Kids [1774 0 R 1782 0 R 1786 0 R 1790 0 R 1794 0 R 1798 0 R] +/Parent 2338 0 R +/Kids [1736 0 R 1741 0 R 1745 0 R 1759 0 R 1763 0 R 1769 0 R] >> -% 1805 0 obj +% 1781 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1802 0 R 1807 0 R 1815 0 R 1819 0 R 1826 0 R 1831 0 R] +/Parent 2338 0 R +/Kids [1775 0 R 1783 0 R 1787 0 R 1791 0 R 1795 0 R 1799 0 R] >> -% 1841 0 obj +% 1806 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1838 0 R 1843 0 R 1850 0 R 1854 0 R 1861 0 R 1865 0 R] +/Parent 2338 0 R +/Kids [1803 0 R 1808 0 R 1816 0 R 1820 0 R 1828 0 R 1832 0 R] >> -% 1875 0 obj +% 1842 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1872 0 R 1877 0 R 1887 0 R 1892 0 R 1899 0 R 1905 0 R] +/Parent 2338 0 R +/Kids [1839 0 R 1844 0 R 1851 0 R 1855 0 R 1862 0 R 1866 0 R] >> -% 1914 0 obj +% 1876 0 obj << /Type /Pages /Count 6 /Parent 2338 0 R -/Kids [1909 0 R 1916 0 R 1922 0 R 1928 0 R 1934 0 R 1940 0 R] +/Kids [1873 0 R 1878 0 R 1888 0 R 1893 0 R 1900 0 R 1906 0 R] >> -% 1952 0 obj +% 1915 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1947 0 R 1955 0 R 1962 0 R 1969 0 R 1976 0 R 1982 0 R] +/Parent 2339 0 R +/Kids [1910 0 R 1917 0 R 1923 0 R 1929 0 R 1935 0 R 1941 0 R] >> -% 1989 0 obj +% 1953 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1986 0 R 1994 0 R 2005 0 R 2009 0 R 2018 0 R 2022 0 R] +/Parent 2339 0 R +/Kids [1948 0 R 1956 0 R 1963 0 R 1970 0 R 1977 0 R 1983 0 R] >> -% 2034 0 obj +% 1990 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [2031 0 R 2037 0 R 2041 0 R 2047 0 R 2056 0 R 2063 0 R] +/Parent 2339 0 R +/Kids [1987 0 R 1995 0 R 2006 0 R 2010 0 R 2019 0 R 2023 0 R] >> -% 2070 0 obj +% 2035 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [2067 0 R 2075 0 R 2086 0 R 2091 0 R 2099 0 R 2108 0 R] +/Parent 2339 0 R +/Kids [2032 0 R 2038 0 R 2042 0 R 2049 0 R 2057 0 R 2064 0 R] >> -% 2115 0 obj +% 2071 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [2112 0 R 2123 0 R 2137 0 R 2146 0 R 2157 0 R 2186 0 R] +/Parent 2339 0 R +/Kids [2068 0 R 2076 0 R 2087 0 R 2092 0 R 2100 0 R 2109 0 R] >> -% 2211 0 obj +% 2116 0 obj << /Type /Pages /Count 6 /Parent 2339 0 R -/Kids [2206 0 R 2225 0 R 2241 0 R 2245 0 R 2249 0 R 2254 0 R] +/Kids [2113 0 R 2124 0 R 2138 0 R 2147 0 R 2158 0 R 2187 0 R] >> -% 2261 0 obj +% 2212 0 obj << /Type /Pages -/Count 4 -/Parent 2339 0 R -/Kids [2258 0 R 2263 0 R 2267 0 R 2276 0 R] +/Count 6 +/Parent 2340 0 R +/Kids [2207 0 R 2226 0 R 2242 0 R 2246 0 R 2250 0 R 2255 0 R] >> -% 2334 0 obj +% 2262 0 obj << /Type /Pages -/Count 36 +/Count 4 /Parent 2340 0 R -/Kids [688 0 R 894 0 R 978 0 R 1052 0 R 1087 0 R 1117 0 R] +/Kids [2259 0 R 2264 0 R 2268 0 R 2277 0 R] >> % 2335 0 obj << /Type /Pages /Count 36 -/Parent 2340 0 R -/Kids [1158 0 R 1205 0 R 1244 0 R 1300 0 R 1351 0 R 1400 0 R] +/Parent 2341 0 R +/Kids [688 0 R 894 0 R 978 0 R 1052 0 R 1087 0 R 1117 0 R] >> % 2336 0 obj << /Type /Pages /Count 36 -/Parent 2340 0 R -/Kids [1457 0 R 1492 0 R 1534 0 R 1577 0 R 1626 0 R 1663 0 R] +/Parent 2341 0 R +/Kids [1158 0 R 1205 0 R 1244 0 R 1300 0 R 1351 0 R 1400 0 R] >> % 2337 0 obj << /Type /Pages /Count 36 -/Parent 2340 0 R -/Kids [1698 0 R 1739 0 R 1780 0 R 1805 0 R 1841 0 R 1875 0 R] +/Parent 2341 0 R +/Kids [1457 0 R 1492 0 R 1534 0 R 1577 0 R 1626 0 R 1663 0 R] >> % 2338 0 obj << /Type /Pages /Count 36 -/Parent 2340 0 R -/Kids [1914 0 R 1952 0 R 1989 0 R 2034 0 R 2070 0 R 2115 0 R] +/Parent 2341 0 R +/Kids [1698 0 R 1739 0 R 1781 0 R 1806 0 R 1842 0 R 1876 0 R] >> endstream endobj -2341 0 obj +2342 0 obj << /Type /ObjStm /N 100 -/First 888 -/Length 9739 ->> -stream -2339 0 2340 85 2342 190 675 259 671 333 667 421 663 509 659 597 655 685 651 773 -647 861 643 949 639 1037 635 1125 631 1213 627 1301 623 1389 619 1463 615 1575 611 1649 -607 1737 602 1825 598 1899 594 2024 590 2098 586 2172 582 2297 578 2371 574 2459 570 2547 -566 2635 562 2723 558 2811 554 2899 550 2987 546 3061 542 3186 538 3260 534 3348 530 3436 -526 3524 522 3612 518 3686 514 3811 510 3885 506 3973 502 4061 498 4135 494 4260 490 4334 -486 4422 482 4510 478 4598 474 4686 470 4774 466 4862 462 4950 458 5038 454 5126 450 5214 -446 5302 442 5390 438 5478 434 5566 430 5654 426 5728 422 5854 418 5928 414 6016 410 6104 -406 6192 401 6280 397 6368 393 6456 389 6544 385 6632 381 6720 377 6808 373 6896 369 6984 -365 7072 361 7160 357 7248 353 7336 349 7424 345 7512 341 7600 337 7688 333 7776 329 7864 -325 7952 321 8040 317 8128 313 8202 309 8328 305 8402 301 8490 297 8578 293 8652 289 8777 +/First 890 +/Length 9788 +>> +stream +2339 0 2340 121 2341 206 2343 311 675 380 671 454 667 542 663 630 659 718 655 806 +651 894 647 982 643 1070 639 1158 635 1246 631 1334 627 1422 623 1510 619 1584 615 1696 +611 1770 607 1858 602 1946 598 2020 594 2145 590 2219 586 2293 582 2418 578 2492 574 2580 +570 2668 566 2756 562 2844 558 2932 554 3020 550 3108 546 3182 542 3307 538 3381 534 3469 +530 3557 526 3645 522 3733 518 3807 514 3932 510 4006 506 4094 502 4182 498 4256 494 4381 +490 4455 486 4543 482 4631 478 4719 474 4807 470 4895 466 4983 462 5071 458 5159 454 5247 +450 5335 446 5423 442 5511 438 5599 434 5687 430 5775 426 5849 422 5975 418 6049 414 6137 +410 6225 406 6313 401 6401 397 6489 393 6577 389 6665 385 6753 381 6841 377 6929 373 7017 +369 7105 365 7193 361 7281 357 7369 353 7457 349 7545 345 7633 341 7721 337 7809 333 7897 +329 7985 325 8073 321 8161 317 8249 313 8323 309 8449 305 8523 301 8611 297 8699 293 8773 % 2339 0 obj << /Type /Pages -/Count 10 -/Parent 2340 0 R -/Kids [2211 0 R 2261 0 R] +/Count 36 +/Parent 2341 0 R +/Kids [1915 0 R 1953 0 R 1990 0 R 2035 0 R 2071 0 R 2116 0 R] >> % 2340 0 obj << /Type /Pages +/Count 10 +/Parent 2341 0 R +/Kids [2212 0 R 2262 0 R] +>> +% 2341 0 obj +<< +/Type /Pages /Count 190 -/Kids [2334 0 R 2335 0 R 2336 0 R 2337 0 R 2338 0 R 2339 0 R] +/Kids [2335 0 R 2336 0 R 2337 0 R 2338 0 R 2339 0 R 2340 0 R] >> -% 2342 0 obj +% 2343 0 obj << /Type /Outlines /First 4 0 R @@ -37526,6 +37539,27 @@ stream /Last 309 0 R /Count -4 >> + +endstream +endobj +2344 0 obj +<< +/Type /ObjStm +/N 100 +/First 893 +/Length 12099 +>> +stream +289 0 285 74 281 162 277 250 273 338 269 426 265 514 261 602 257 690 253 778 +249 866 245 954 241 1042 237 1130 233 1218 229 1306 225 1380 221 1505 217 1578 213 1665 +209 1739 205 1827 200 1915 196 2003 192 2091 188 2165 184 2291 180 2365 176 2453 172 2541 +168 2629 164 2717 160 2805 156 2893 152 2981 148 3069 144 3157 140 3245 136 3333 132 3421 +128 3509 124 3597 120 3685 116 3773 112 3861 108 3935 104 4061 100 4134 96 4219 92 4302 +88 4384 84 4466 80 4548 76 4630 72 4712 68 4794 64 4876 60 4958 56 5040 52 5122 +48 5204 44 5273 40 5382 36 5502 32 5571 28 5627 24 5746 20 5828 16 5897 12 6015 +8 6095 4 6160 2345 6253 2346 6449 2347 6622 2348 6802 2349 6979 2350 7156 2351 7336 2352 7514 +2353 7694 2354 7872 2355 8052 2356 8225 2357 8390 2358 8562 2359 8732 2360 8904 2361 9073 2362 9242 +2363 9414 2364 9584 2365 9756 2366 9926 2367 10098 2368 10268 2369 10440 2370 10610 2371 10782 2372 10974 % 289 0 obj << /Title 290 0 R @@ -37533,27 +37567,6 @@ stream /Parent 225 0 R /Prev 285 0 R >> - -endstream -endobj -2343 0 obj -<< -/Type /ObjStm -/N 100 -/First 895 -/Length 12279 ->> -stream -285 0 281 88 277 176 273 264 269 352 265 440 261 528 257 616 253 704 249 792 -245 880 241 968 237 1056 233 1144 229 1232 225 1306 221 1431 217 1504 213 1591 209 1665 -205 1753 200 1841 196 1929 192 2017 188 2091 184 2217 180 2291 176 2379 172 2467 168 2555 -164 2643 160 2731 156 2819 152 2907 148 2995 144 3083 140 3171 136 3259 132 3347 128 3435 -124 3523 120 3611 116 3699 112 3787 108 3861 104 3987 100 4060 96 4145 92 4228 88 4310 -84 4392 80 4474 76 4556 72 4638 68 4720 64 4802 60 4884 56 4966 52 5048 48 5130 -44 5199 40 5308 36 5428 32 5497 28 5553 24 5672 20 5754 16 5823 12 5941 8 6021 -4 6086 2344 6179 2345 6375 2346 6548 2347 6728 2348 6905 2349 7082 2350 7262 2351 7440 2352 7620 -2353 7798 2354 7978 2355 8149 2356 8315 2357 8487 2358 8656 2359 8825 2360 8997 2361 9167 2362 9339 -2363 9509 2364 9681 2365 9851 2366 10023 2367 10193 2368 10365 2369 10534 2370 10708 2371 10930 2372 11135 % 285 0 obj << /Title 286 0 R @@ -38125,155 +38138,150 @@ stream << /Title 5 0 R /A 1 0 R -/Parent 2342 0 R +/Parent 2343 0 R /First 8 0 R /Last 619 0 R /Count -14 >> -% 2344 0 obj +% 2345 0 obj << -/Names [(Doc-Start) 684 0 R (Hfootnote.1) 943 0 R (Hfootnote.2) 944 0 R (Hfootnote.3) 999 0 R (Hfootnote.4) 1997 0 R (Hfootnote.5) 2081 0 R] +/Names [(Doc-Start) 684 0 R (Hfootnote.1) 943 0 R (Hfootnote.2) 944 0 R (Hfootnote.3) 999 0 R (Hfootnote.4) 1998 0 R (Hfootnote.5) 2082 0 R] /Limits [(Doc-Start) (Hfootnote.5)] >> -% 2345 0 obj +% 2346 0 obj << /Names [(Item.1) 970 0 R (Item.10) 986 0 R (Item.100) 1711 0 R (Item.101) 1717 0 R (Item.102) 1718 0 R (Item.103) 1729 0 R] /Limits [(Item.1) (Item.103)] >> -% 2346 0 obj +% 2347 0 obj << /Names [(Item.104) 1730 0 R (Item.105) 1731 0 R (Item.106) 1748 0 R (Item.107) 1749 0 R (Item.108) 1750 0 R (Item.109) 1751 0 R] /Limits [(Item.104) (Item.109)] >> -% 2347 0 obj +% 2348 0 obj << /Names [(Item.11) 987 0 R (Item.110) 1752 0 R (Item.111) 1753 0 R (Item.112) 1754 0 R (Item.113) 1755 0 R (Item.114) 1756 0 R] /Limits [(Item.11) (Item.114)] >> -% 2348 0 obj -<< -/Names [(Item.115) 1765 0 R (Item.116) 1766 0 R (Item.117) 1771 0 R (Item.118) 1772 0 R (Item.119) 1777 0 R (Item.12) 988 0 R] -/Limits [(Item.115) (Item.12)] ->> % 2349 0 obj << -/Names [(Item.120) 1778 0 R (Item.121) 1779 0 R (Item.122) 1810 0 R (Item.123) 1811 0 R (Item.124) 1812 0 R (Item.125) 1822 0 R] -/Limits [(Item.120) (Item.125)] +/Names [(Item.115) 1757 0 R (Item.116) 1766 0 R (Item.117) 1767 0 R (Item.118) 1772 0 R (Item.119) 1773 0 R (Item.12) 988 0 R] +/Limits [(Item.115) (Item.12)] >> % 2350 0 obj << -/Names [(Item.126) 1823 0 R (Item.127) 1824 0 R (Item.128) 1834 0 R (Item.129) 1835 0 R (Item.13) 989 0 R (Item.130) 1836 0 R] -/Limits [(Item.126) (Item.130)] +/Names [(Item.120) 1778 0 R (Item.121) 1779 0 R (Item.122) 1780 0 R (Item.123) 1811 0 R (Item.124) 1812 0 R (Item.125) 1813 0 R] +/Limits [(Item.120) (Item.125)] >> % 2351 0 obj << -/Names [(Item.131) 1846 0 R (Item.132) 1847 0 R (Item.133) 1848 0 R (Item.134) 1857 0 R (Item.135) 1858 0 R (Item.136) 1859 0 R] -/Limits [(Item.131) (Item.136)] +/Names [(Item.126) 1823 0 R (Item.127) 1824 0 R (Item.128) 1825 0 R (Item.129) 1835 0 R (Item.13) 989 0 R (Item.130) 1836 0 R] +/Limits [(Item.126) (Item.130)] >> % 2352 0 obj << -/Names [(Item.137) 1868 0 R (Item.138) 1869 0 R (Item.139) 1870 0 R (Item.14) 990 0 R (Item.140) 1880 0 R (Item.141) 1881 0 R] -/Limits [(Item.137) (Item.141)] +/Names [(Item.131) 1837 0 R (Item.132) 1847 0 R (Item.133) 1848 0 R (Item.134) 1849 0 R (Item.135) 1858 0 R (Item.136) 1859 0 R] +/Limits [(Item.131) (Item.136)] >> % 2353 0 obj << -/Names [(Item.142) 1883 0 R (Item.143) 1884 0 R (Item.144) 1885 0 R (Item.145) 1890 0 R (Item.146) 1895 0 R (Item.147) 2150 0 R] -/Limits [(Item.142) (Item.147)] +/Names [(Item.137) 1860 0 R (Item.138) 1869 0 R (Item.139) 1870 0 R (Item.14) 990 0 R (Item.140) 1871 0 R (Item.141) 1881 0 R] +/Limits [(Item.137) (Item.141)] >> % 2354 0 obj << -/Names [(Item.148) 2151 0 R (Item.149) 2252 0 R (Item.15) 991 0 R (Item.16) 992 0 R (Item.17) 993 0 R (Item.18) 994 0 R] -/Limits [(Item.148) (Item.18)] +/Names [(Item.142) 1882 0 R (Item.143) 1884 0 R (Item.144) 1885 0 R (Item.145) 1886 0 R (Item.146) 1891 0 R (Item.147) 1896 0 R] +/Limits [(Item.142) (Item.147)] >> % 2355 0 obj << -/Names [(Item.19) 995 0 R (Item.2) 971 0 R (Item.20) 996 0 R (Item.21) 997 0 R (Item.22) 998 0 R (Item.23) 1006 0 R] -/Limits [(Item.19) (Item.23)] +/Names [(Item.148) 2151 0 R (Item.149) 2152 0 R (Item.15) 991 0 R (Item.150) 2253 0 R (Item.16) 992 0 R (Item.17) 993 0 R] +/Limits [(Item.148) (Item.17)] >> % 2356 0 obj << -/Names [(Item.24) 1007 0 R (Item.25) 1008 0 R (Item.26) 1009 0 R (Item.27) 1010 0 R (Item.28) 1011 0 R (Item.29) 1025 0 R] -/Limits [(Item.24) (Item.29)] +/Names [(Item.18) 994 0 R (Item.19) 995 0 R (Item.2) 971 0 R (Item.20) 996 0 R (Item.21) 997 0 R (Item.22) 998 0 R] +/Limits [(Item.18) (Item.22)] >> % 2357 0 obj << -/Names [(Item.3) 972 0 R (Item.30) 1026 0 R (Item.31) 1027 0 R (Item.32) 1028 0 R (Item.33) 1029 0 R (Item.34) 1036 0 R] -/Limits [(Item.3) (Item.34)] +/Names [(Item.23) 1006 0 R (Item.24) 1007 0 R (Item.25) 1008 0 R (Item.26) 1009 0 R (Item.27) 1010 0 R (Item.28) 1011 0 R] +/Limits [(Item.23) (Item.28)] >> % 2358 0 obj << -/Names [(Item.35) 1037 0 R (Item.36) 1038 0 R (Item.37) 1039 0 R (Item.38) 1040 0 R (Item.39) 1041 0 R (Item.4) 973 0 R] -/Limits [(Item.35) (Item.4)] +/Names [(Item.29) 1025 0 R (Item.3) 972 0 R (Item.30) 1026 0 R (Item.31) 1027 0 R (Item.32) 1028 0 R (Item.33) 1029 0 R] +/Limits [(Item.29) (Item.33)] >> % 2359 0 obj << -/Names [(Item.40) 1042 0 R (Item.41) 1043 0 R (Item.42) 1086 0 R (Item.43) 1100 0 R (Item.44) 1101 0 R (Item.45) 1181 0 R] -/Limits [(Item.40) (Item.45)] +/Names [(Item.34) 1036 0 R (Item.35) 1037 0 R (Item.36) 1038 0 R (Item.37) 1039 0 R (Item.38) 1040 0 R (Item.39) 1041 0 R] +/Limits [(Item.34) (Item.39)] >> % 2360 0 obj << -/Names [(Item.46) 1210 0 R (Item.47) 1231 0 R (Item.48) 1257 0 R (Item.49) 1429 0 R (Item.5) 974 0 R (Item.50) 1430 0 R] -/Limits [(Item.46) (Item.50)] +/Names [(Item.4) 973 0 R (Item.40) 1042 0 R (Item.41) 1043 0 R (Item.42) 1086 0 R (Item.43) 1100 0 R (Item.44) 1101 0 R] +/Limits [(Item.4) (Item.44)] >> % 2361 0 obj << -/Names [(Item.51) 1431 0 R (Item.52) 1484 0 R (Item.53) 1491 0 R (Item.54) 1497 0 R (Item.55) 1498 0 R (Item.56) 1499 0 R] -/Limits [(Item.51) (Item.56)] +/Names [(Item.45) 1181 0 R (Item.46) 1210 0 R (Item.47) 1231 0 R (Item.48) 1257 0 R (Item.49) 1429 0 R (Item.5) 974 0 R] +/Limits [(Item.45) (Item.5)] >> % 2362 0 obj << -/Names [(Item.57) 1500 0 R (Item.58) 1501 0 R (Item.59) 1513 0 R (Item.6) 975 0 R (Item.60) 1514 0 R (Item.61) 1515 0 R] -/Limits [(Item.57) (Item.61)] +/Names [(Item.50) 1430 0 R (Item.51) 1431 0 R (Item.52) 1484 0 R (Item.53) 1491 0 R (Item.54) 1497 0 R (Item.55) 1498 0 R] +/Limits [(Item.50) (Item.55)] >> % 2363 0 obj << -/Names [(Item.62) 1522 0 R (Item.63) 1545 0 R (Item.64) 1546 0 R (Item.65) 1553 0 R (Item.66) 1558 0 R (Item.67) 1559 0 R] -/Limits [(Item.62) (Item.67)] +/Names [(Item.56) 1499 0 R (Item.57) 1500 0 R (Item.58) 1501 0 R (Item.59) 1513 0 R (Item.6) 975 0 R (Item.60) 1514 0 R] +/Limits [(Item.56) (Item.60)] >> % 2364 0 obj << -/Names [(Item.68) 1560 0 R (Item.69) 1572 0 R (Item.7) 976 0 R (Item.70) 1573 0 R (Item.71) 1574 0 R (Item.72) 1575 0 R] -/Limits [(Item.68) (Item.72)] +/Names [(Item.61) 1515 0 R (Item.62) 1522 0 R (Item.63) 1545 0 R (Item.64) 1546 0 R (Item.65) 1553 0 R (Item.66) 1558 0 R] +/Limits [(Item.61) (Item.66)] >> % 2365 0 obj << -/Names [(Item.73) 1576 0 R (Item.74) 1582 0 R (Item.75) 1583 0 R (Item.76) 1584 0 R (Item.77) 1585 0 R (Item.78) 1586 0 R] -/Limits [(Item.73) (Item.78)] +/Names [(Item.67) 1559 0 R (Item.68) 1560 0 R (Item.69) 1572 0 R (Item.7) 976 0 R (Item.70) 1573 0 R (Item.71) 1574 0 R] +/Limits [(Item.67) (Item.71)] >> % 2366 0 obj << -/Names [(Item.79) 1587 0 R (Item.8) 977 0 R (Item.80) 1599 0 R (Item.81) 1600 0 R (Item.82) 1601 0 R (Item.83) 1602 0 R] -/Limits [(Item.79) (Item.83)] +/Names [(Item.72) 1575 0 R (Item.73) 1576 0 R (Item.74) 1582 0 R (Item.75) 1583 0 R (Item.76) 1584 0 R (Item.77) 1585 0 R] +/Limits [(Item.72) (Item.77)] >> % 2367 0 obj << -/Names [(Item.84) 1603 0 R (Item.85) 1604 0 R (Item.86) 1605 0 R (Item.87) 1619 0 R (Item.88) 1631 0 R (Item.89) 1642 0 R] -/Limits [(Item.84) (Item.89)] +/Names [(Item.78) 1586 0 R (Item.79) 1587 0 R (Item.8) 977 0 R (Item.80) 1599 0 R (Item.81) 1600 0 R (Item.82) 1601 0 R] +/Limits [(Item.78) (Item.82)] >> % 2368 0 obj << -/Names [(Item.9) 985 0 R (Item.90) 1643 0 R (Item.91) 1651 0 R (Item.92) 1652 0 R (Item.93) 1673 0 R (Item.94) 1674 0 R] -/Limits [(Item.9) (Item.94)] +/Names [(Item.83) 1602 0 R (Item.84) 1603 0 R (Item.85) 1604 0 R (Item.86) 1605 0 R (Item.87) 1619 0 R (Item.88) 1631 0 R] +/Limits [(Item.83) (Item.88)] >> % 2369 0 obj << -/Names [(Item.95) 1685 0 R (Item.96) 1691 0 R (Item.97) 1697 0 R (Item.98) 1704 0 R (Item.99) 1710 0 R (algocf.1) 2155 0 R] -/Limits [(Item.95) (algocf.1)] +/Names [(Item.89) 1642 0 R (Item.9) 985 0 R (Item.90) 1643 0 R (Item.91) 1651 0 R (Item.92) 1652 0 R (Item.93) 1673 0 R] +/Limits [(Item.89) (Item.93)] >> % 2370 0 obj << -/Names [(algocf.2) 2202 0 R (algocfline.1) 2141 0 R (algocfline.2) 2209 0 R (cite.2007c) 957 0 R (cite.2007d) 958 0 R (cite.BERTACCINIFILIPPONE) 2012 0 R] -/Limits [(algocf.2) (cite.BERTACCINIFILIPPONE)] +/Names [(Item.94) 1674 0 R (Item.95) 1685 0 R (Item.96) 1691 0 R (Item.97) 1697 0 R (Item.98) 1704 0 R (Item.99) 1710 0 R] +/Limits [(Item.94) (Item.99)] >> % 2371 0 obj << -/Names [(cite.BLACS) 933 0 R (cite.BLAS1) 915 0 R (cite.BLAS2) 916 0 R (cite.BLAS3) 917 0 R (cite.CaFiRo:2014) 2127 0 R (cite.DesPat:11) 910 0 R] -/Limits [(cite.BLACS) (cite.DesPat:11)] +/Names [(algocf.1) 2156 0 R (algocf.2) 2203 0 R (algocfline.1) 2142 0 R (algocfline.2) 2210 0 R (cite.2007c) 957 0 R (cite.2007d) 958 0 R] +/Limits [(algocf.1) (cite.2007d)] >> % 2372 0 obj << -/Names [(cite.DesignPatterns) 1074 0 R (cite.Filippone:2017:SMM:3034774.3017994) 2280 0 R (cite.KIVA3PSBLAS) 2273 0 R (cite.METIS) 945 0 R (cite.MPI1) 2279 0 R (cite.MRC:11) 2142 0 R] -/Limits [(cite.DesignPatterns) (cite.MRC:11)] +/Names [(cite.BERTACCINIFILIPPONE) 2013 0 R (cite.BLACS) 933 0 R (cite.BLAS1) 915 0 R (cite.BLAS2) 916 0 R (cite.BLAS3) 917 0 R (cite.CaFiRo:2014) 2128 0 R] +/Limits [(cite.BERTACCINIFILIPPONE) (cite.CaFiRo:2014)] >> endstream @@ -38283,572 +38291,594 @@ endobj /Type /ObjStm /N 100 /First 1040 -/Length 19083 ->> -stream -2373 0 2375 226 2376 431 2377 617 2378 800 2379 1002 2380 1227 2381 1447 2382 1678 2383 1914 -2384 2148 2385 2376 2386 2564 2387 2744 2388 2923 2389 3103 2390 3281 2391 3459 2392 3639 2393 3818 -2394 3998 2395 4177 2396 4357 2397 4536 2398 4716 2399 4895 2400 5075 2401 5253 2402 5423 2403 5595 -2404 5764 2405 5933 2406 6105 2407 6275 2408 6447 2409 6617 2410 6789 2411 6959 2412 7131 2413 7301 -2414 7473 2415 7643 2416 7812 2417 7992 2418 8190 2419 8386 2420 8580 2421 8768 2422 8948 2423 9148 -2424 9378 2425 9608 2426 9827 2427 10051 2428 10281 2429 10503 2430 10725 2431 10953 2432 11181 2433 11411 -2434 11636 2435 11861 2436 12091 2437 12313 2438 12535 2439 12757 2440 13018 2441 13278 2442 13538 2443 13808 -2444 14074 2445 14336 2446 14575 2447 14755 2448 14934 2449 15109 2450 15276 2451 15390 2452 15502 2453 15613 -2454 15724 2455 15840 2456 15962 2457 16081 2458 16194 2459 16307 2460 16418 2461 16529 2462 16644 2463 16767 -2464 16893 2465 17019 2466 17150 2467 17274 2468 17357 2469 17476 2470 17598 2471 17711 2472 17795 2473 17830 +/Length 19171 +>> +stream +2373 0 2375 244 2376 465 2377 671 2378 861 2379 1043 2380 1239 2381 1465 2382 1685 2383 1913 +2384 2149 2385 2385 2386 2613 2387 2807 2388 2987 2389 3166 2390 3346 2391 3525 2392 3705 2393 3883 +2394 4061 2395 4241 2396 4420 2397 4600 2398 4779 2399 4959 2400 5138 2401 5318 2402 5497 2403 5669 +2404 5841 2405 6011 2406 6183 2407 6352 2408 6521 2409 6693 2410 6863 2411 7035 2412 7205 2413 7377 +2414 7547 2415 7719 2416 7890 2417 8062 2418 8235 2419 8433 2420 8628 2421 8825 2422 9013 2423 9195 +2424 9389 2425 9619 2426 9849 2427 10070 2428 10291 2429 10521 2430 10745 2431 10967 2432 11194 2433 11424 +2434 11652 2435 11878 2436 12102 2437 12332 2438 12556 2439 12778 2440 13000 2441 13251 2442 13512 2443 13769 +2444 14039 2445 14306 2446 14568 2447 14830 2448 15008 2449 15186 2450 15362 2451 15535 2452 15606 2453 15720 +2454 15832 2455 15943 2456 16054 2457 16171 2458 16294 2459 16412 2460 16524 2461 16637 2462 16749 2463 16859 +2464 16973 2465 17096 2466 17222 2467 17348 2468 17479 2469 17603 2470 17695 2471 17814 2472 17934 2473 18047 % 2373 0 obj << -/Names [(cite.OurTechRep) 2128 0 R (cite.PARA04FOREST) 2271 0 R (cite.PSBLAS) 2272 0 R (cite.RouXiaXu:11) 911 0 R (cite.Sparse03) 909 0 R (cite.machiels) 912 0 R] -/Limits [(cite.OurTechRep) (cite.machiels)] +/Names [(cite.DesPat:11) 910 0 R (cite.DesignPatterns) 1074 0 R (cite.Filippone:2017:SMM:3034774.3017994) 2281 0 R (cite.KIVA3PSBLAS) 2274 0 R (cite.METIS) 945 0 R (cite.MPI1) 2280 0 R] +/Limits [(cite.DesPat:11) (cite.MPI1)] >> % 2375 0 obj << -/Names [(cite.metcalf) 908 0 R (cite.sblas02) 914 0 R (cite.sblas97) 913 0 R (descdata) 1017 0 R (equation.4.1) 1296 0 R (equation.4.2) 1297 0 R] -/Limits [(cite.metcalf) (equation.4.2)] +/Names [(cite.MRC:11) 2143 0 R (cite.OurTechRep) 2129 0 R (cite.PARA04FOREST) 2272 0 R (cite.PSBLAS) 2273 0 R (cite.RouXiaXu:11) 911 0 R (cite.Sparse03) 909 0 R] +/Limits [(cite.MRC:11) (cite.Sparse03)] >> % 2376 0 obj << -/Names [(equation.4.3) 1298 0 R (figure.1) 927 0 R (figure.2) 953 0 R (figure.3) 1399 0 R (figure.4) 1432 0 R (figure.5) 2149 0 R] -/Limits [(equation.4.3) (figure.5)] +/Names [(cite.machiels) 912 0 R (cite.metcalf) 908 0 R (cite.sblas02) 914 0 R (cite.sblas97) 913 0 R (descdata) 1017 0 R (equation.4.1) 1296 0 R] +/Limits [(cite.machiels) (equation.4.1)] >> % 2377 0 obj << -/Names [(figure.6) 2144 0 R (figure.7) 2189 0 R (figure.8) 2201 0 R (figure.9) 2228 0 R (listing.1) 1045 0 R (listing.2) 1075 0 R] -/Limits [(figure.6) (listing.2)] +/Names [(equation.4.2) 1297 0 R (equation.4.3) 1298 0 R (figure.1) 927 0 R (figure.2) 953 0 R (figure.3) 1399 0 R (figure.4) 1432 0 R] +/Limits [(equation.4.2) (figure.4)] >> % 2378 0 obj << -/Names [(listing.3) 1118 0 R (listing.4) 1137 0 R (listing.5) 1902 0 R (listing.6) 1903 0 R (lstlisting.-1) 1258 0 R (lstlisting.-10) 1972 0 R] -/Limits [(listing.3) (lstlisting.-10)] +/Names [(figure.5) 2150 0 R (figure.6) 2145 0 R (figure.7) 2190 0 R (figure.8) 2202 0 R (figure.9) 2229 0 R (listing.1) 1045 0 R] +/Limits [(figure.5) (listing.1)] >> % 2379 0 obj << -/Names [(lstlisting.-11) 1979 0 R (lstlisting.-12) 2078 0 R (lstlisting.-13) 2102 0 R (lstlisting.-14) 2160 0 R (lstlisting.-2) 1912 0 R (lstlisting.-3) 1919 0 R] -/Limits [(lstlisting.-11) (lstlisting.-3)] +/Names [(listing.2) 1075 0 R (listing.3) 1118 0 R (listing.4) 1137 0 R (listing.5) 1903 0 R (listing.6) 1904 0 R (lstlisting.-1) 1258 0 R] +/Limits [(listing.2) (lstlisting.-1)] >> % 2380 0 obj << -/Names [(lstlisting.-4) 1925 0 R (lstlisting.-5) 1931 0 R (lstlisting.-6) 1943 0 R (lstlisting.-7) 1950 0 R (lstlisting.-8) 1958 0 R (lstlisting.-9) 1965 0 R] -/Limits [(lstlisting.-4) (lstlisting.-9)] +/Names [(lstlisting.-10) 1973 0 R (lstlisting.-11) 1980 0 R (lstlisting.-12) 2079 0 R (lstlisting.-13) 2103 0 R (lstlisting.-14) 2161 0 R (lstlisting.-2) 1913 0 R] +/Limits [(lstlisting.-10) (lstlisting.-2)] >> % 2381 0 obj << -/Names [(lstnumber.-1.1) 1259 0 R (lstnumber.-1.2) 1260 0 R (lstnumber.-1.3) 1261 0 R (lstnumber.-1.4) 1262 0 R (lstnumber.-10.1) 1973 0 R (lstnumber.-11.1) 1980 0 R] -/Limits [(lstnumber.-1.1) (lstnumber.-11.1)] +/Names [(lstlisting.-3) 1920 0 R (lstlisting.-4) 1926 0 R (lstlisting.-5) 1932 0 R (lstlisting.-6) 1944 0 R (lstlisting.-7) 1951 0 R (lstlisting.-8) 1959 0 R] +/Limits [(lstlisting.-3) (lstlisting.-8)] >> % 2382 0 obj << -/Names [(lstnumber.-12.1) 2079 0 R (lstnumber.-12.2) 2080 0 R (lstnumber.-13.1) 2103 0 R (lstnumber.-13.2) 2104 0 R (lstnumber.-14.1) 2161 0 R (lstnumber.-14.2) 2162 0 R] -/Limits [(lstnumber.-12.1) (lstnumber.-14.2)] +/Names [(lstlisting.-9) 1966 0 R (lstnumber.-1.1) 1259 0 R (lstnumber.-1.2) 1260 0 R (lstnumber.-1.3) 1261 0 R (lstnumber.-1.4) 1262 0 R (lstnumber.-10.1) 1974 0 R] +/Limits [(lstlisting.-9) (lstnumber.-10.1)] >> % 2383 0 obj << -/Names [(lstnumber.-14.3) 2163 0 R (lstnumber.-14.4) 2164 0 R (lstnumber.-14.5) 2165 0 R (lstnumber.-14.6) 2166 0 R (lstnumber.-14.7) 2167 0 R (lstnumber.-2.1) 1913 0 R] -/Limits [(lstnumber.-14.3) (lstnumber.-2.1)] +/Names [(lstnumber.-11.1) 1981 0 R (lstnumber.-12.1) 2080 0 R (lstnumber.-12.2) 2081 0 R (lstnumber.-13.1) 2104 0 R (lstnumber.-13.2) 2105 0 R (lstnumber.-14.1) 2162 0 R] +/Limits [(lstnumber.-11.1) (lstnumber.-14.1)] >> % 2384 0 obj << -/Names [(lstnumber.-3.1) 1920 0 R (lstnumber.-4.1) 1926 0 R (lstnumber.-5.1) 1932 0 R (lstnumber.-6.1) 1944 0 R (lstnumber.-7.1) 1951 0 R (lstnumber.-8.1) 1959 0 R] -/Limits [(lstnumber.-3.1) (lstnumber.-8.1)] +/Names [(lstnumber.-14.2) 2163 0 R (lstnumber.-14.3) 2164 0 R (lstnumber.-14.4) 2165 0 R (lstnumber.-14.5) 2166 0 R (lstnumber.-14.6) 2167 0 R (lstnumber.-14.7) 2168 0 R] +/Limits [(lstnumber.-14.2) (lstnumber.-14.7)] >> % 2385 0 obj << -/Names [(lstnumber.-9.1) 1966 0 R (page.1) 683 0 R (page.10) 1016 0 R (page.100) 1679 0 R (page.101) 1684 0 R (page.102) 1690 0 R] -/Limits [(lstnumber.-9.1) (page.102)] +/Names [(lstnumber.-2.1) 1914 0 R (lstnumber.-3.1) 1921 0 R (lstnumber.-4.1) 1927 0 R (lstnumber.-5.1) 1933 0 R (lstnumber.-6.1) 1945 0 R (lstnumber.-7.1) 1952 0 R] +/Limits [(lstnumber.-2.1) (lstnumber.-7.1)] >> % 2386 0 obj << -/Names [(page.103) 1696 0 R (page.104) 1703 0 R (page.105) 1709 0 R (page.106) 1716 0 R (page.107) 1724 0 R (page.108) 1728 0 R] -/Limits [(page.103) (page.108)] +/Names [(lstnumber.-8.1) 1960 0 R (lstnumber.-9.1) 1967 0 R (page.1) 683 0 R (page.10) 1016 0 R (page.100) 1679 0 R (page.101) 1684 0 R] +/Limits [(lstnumber.-8.1) (page.101)] >> % 2387 0 obj << -/Names [(page.109) 1738 0 R (page.11) 1024 0 R (page.110) 1743 0 R (page.111) 1747 0 R (page.112) 1760 0 R (page.113) 1764 0 R] -/Limits [(page.109) (page.113)] +/Names [(page.102) 1690 0 R (page.103) 1696 0 R (page.104) 1703 0 R (page.105) 1709 0 R (page.106) 1716 0 R (page.107) 1724 0 R] +/Limits [(page.102) (page.107)] >> % 2388 0 obj << -/Names [(page.114) 1770 0 R (page.115) 1776 0 R (page.116) 1784 0 R (page.117) 1788 0 R (page.118) 1792 0 R (page.119) 1796 0 R] -/Limits [(page.114) (page.119)] +/Names [(page.108) 1728 0 R (page.109) 1738 0 R (page.11) 1024 0 R (page.110) 1743 0 R (page.111) 1747 0 R (page.112) 1761 0 R] +/Limits [(page.108) (page.112)] >> % 2389 0 obj << -/Names [(page.12) 1035 0 R (page.120) 1800 0 R (page.121) 1804 0 R (page.122) 1809 0 R (page.123) 1817 0 R (page.124) 1821 0 R] -/Limits [(page.12) (page.124)] +/Names [(page.113) 1765 0 R (page.114) 1771 0 R (page.115) 1777 0 R (page.116) 1785 0 R (page.117) 1789 0 R (page.118) 1793 0 R] +/Limits [(page.113) (page.118)] >> % 2390 0 obj << -/Names [(page.125) 1828 0 R (page.126) 1833 0 R (page.127) 1840 0 R (page.128) 1845 0 R (page.129) 1852 0 R (page.13) 1051 0 R] -/Limits [(page.125) (page.13)] +/Names [(page.119) 1797 0 R (page.12) 1035 0 R (page.120) 1801 0 R (page.121) 1805 0 R (page.122) 1810 0 R (page.123) 1818 0 R] +/Limits [(page.119) (page.123)] >> % 2391 0 obj << -/Names [(page.130) 1856 0 R (page.131) 1863 0 R (page.132) 1867 0 R (page.133) 1874 0 R (page.134) 1879 0 R (page.135) 1889 0 R] -/Limits [(page.130) (page.135)] +/Names [(page.124) 1822 0 R (page.125) 1830 0 R (page.126) 1834 0 R (page.127) 1841 0 R (page.128) 1846 0 R (page.129) 1853 0 R] +/Limits [(page.124) (page.129)] >> % 2392 0 obj << -/Names [(page.136) 1894 0 R (page.137) 1901 0 R (page.138) 1907 0 R (page.139) 1911 0 R (page.14) 1056 0 R (page.140) 1918 0 R] -/Limits [(page.136) (page.140)] +/Names [(page.13) 1051 0 R (page.130) 1857 0 R (page.131) 1864 0 R (page.132) 1868 0 R (page.133) 1875 0 R (page.134) 1880 0 R] +/Limits [(page.13) (page.134)] >> % 2393 0 obj << -/Names [(page.141) 1924 0 R (page.142) 1930 0 R (page.143) 1936 0 R (page.144) 1942 0 R (page.145) 1949 0 R (page.146) 1957 0 R] -/Limits [(page.141) (page.146)] +/Names [(page.135) 1890 0 R (page.136) 1895 0 R (page.137) 1902 0 R (page.138) 1908 0 R (page.139) 1912 0 R (page.14) 1056 0 R] +/Limits [(page.135) (page.14)] >> % 2394 0 obj << -/Names [(page.147) 1964 0 R (page.148) 1971 0 R (page.149) 1978 0 R (page.15) 1060 0 R (page.150) 1984 0 R (page.151) 1988 0 R] -/Limits [(page.147) (page.151)] +/Names [(page.140) 1919 0 R (page.141) 1925 0 R (page.142) 1931 0 R (page.143) 1937 0 R (page.144) 1943 0 R (page.145) 1950 0 R] +/Limits [(page.140) (page.145)] >> % 2395 0 obj << -/Names [(page.152) 1996 0 R (page.153) 2007 0 R (page.154) 2011 0 R (page.155) 2020 0 R (page.156) 2024 0 R (page.157) 2033 0 R] -/Limits [(page.152) (page.157)] +/Names [(page.146) 1958 0 R (page.147) 1965 0 R (page.148) 1972 0 R (page.149) 1979 0 R (page.15) 1060 0 R (page.150) 1985 0 R] +/Limits [(page.146) (page.150)] >> % 2396 0 obj << -/Names [(page.158) 2039 0 R (page.159) 2043 0 R (page.16) 1065 0 R (page.160) 2049 0 R (page.161) 2058 0 R (page.162) 2065 0 R] -/Limits [(page.158) (page.162)] +/Names [(page.151) 1989 0 R (page.152) 1997 0 R (page.153) 2008 0 R (page.154) 2012 0 R (page.155) 2021 0 R (page.156) 2025 0 R] +/Limits [(page.151) (page.156)] >> % 2397 0 obj << -/Names [(page.163) 2069 0 R (page.164) 2077 0 R (page.165) 2088 0 R (page.166) 2093 0 R (page.167) 2101 0 R (page.168) 2110 0 R] -/Limits [(page.163) (page.168)] +/Names [(page.157) 2034 0 R (page.158) 2040 0 R (page.159) 2044 0 R (page.16) 1065 0 R (page.160) 2051 0 R (page.161) 2059 0 R] +/Limits [(page.157) (page.161)] >> % 2398 0 obj << -/Names [(page.169) 2114 0 R (page.17) 1072 0 R (page.170) 2125 0 R (page.171) 2139 0 R (page.172) 2148 0 R (page.173) 2159 0 R] -/Limits [(page.169) (page.173)] +/Names [(page.162) 2066 0 R (page.163) 2070 0 R (page.164) 2078 0 R (page.165) 2089 0 R (page.166) 2094 0 R (page.167) 2102 0 R] +/Limits [(page.162) (page.167)] >> % 2399 0 obj << -/Names [(page.174) 2188 0 R (page.175) 2208 0 R (page.176) 2227 0 R (page.177) 2243 0 R (page.178) 2247 0 R (page.179) 2251 0 R] -/Limits [(page.174) (page.179)] +/Names [(page.168) 2111 0 R (page.169) 2115 0 R (page.17) 1072 0 R (page.170) 2126 0 R (page.171) 2140 0 R (page.172) 2149 0 R] +/Limits [(page.168) (page.172)] >> % 2400 0 obj << -/Names [(page.18) 1080 0 R (page.180) 2256 0 R (page.181) 2260 0 R (page.182) 2265 0 R (page.183) 2269 0 R (page.184) 2278 0 R] -/Limits [(page.18) (page.184)] +/Names [(page.173) 2160 0 R (page.174) 2189 0 R (page.175) 2209 0 R (page.176) 2228 0 R (page.177) 2244 0 R (page.178) 2248 0 R] +/Limits [(page.173) (page.178)] >> % 2401 0 obj << -/Names [(page.19) 1085 0 R (page.2) 693 0 R (page.20) 1091 0 R (page.21) 1095 0 R (page.22) 1099 0 R (page.23) 1105 0 R] -/Limits [(page.19) (page.23)] +/Names [(page.179) 2252 0 R (page.18) 1080 0 R (page.180) 2257 0 R (page.181) 2261 0 R (page.182) 2266 0 R (page.183) 2270 0 R] +/Limits [(page.179) (page.183)] >> % 2402 0 obj << -/Names [(page.24) 1109 0 R (page.25) 1115 0 R (page.26) 1122 0 R (page.27) 1128 0 R (page.28) 1135 0 R (page.29) 1141 0 R] -/Limits [(page.24) (page.29)] +/Names [(page.184) 2279 0 R (page.19) 1085 0 R (page.2) 693 0 R (page.20) 1091 0 R (page.21) 1095 0 R (page.22) 1099 0 R] +/Limits [(page.184) (page.22)] >> % 2403 0 obj << -/Names [(page.3) 926 0 R (page.30) 1145 0 R (page.31) 1156 0 R (page.32) 1164 0 R (page.33) 1174 0 R (page.34) 1180 0 R] -/Limits [(page.3) (page.34)] +/Names [(page.23) 1105 0 R (page.24) 1109 0 R (page.25) 1115 0 R (page.26) 1122 0 R (page.27) 1128 0 R (page.28) 1135 0 R] +/Limits [(page.23) (page.28)] >> % 2404 0 obj << -/Names [(page.35) 1191 0 R (page.36) 1196 0 R (page.37) 1203 0 R (page.38) 1209 0 R (page.39) 1217 0 R (page.4) 939 0 R] -/Limits [(page.35) (page.4)] +/Names [(page.29) 1141 0 R (page.3) 926 0 R (page.30) 1145 0 R (page.31) 1156 0 R (page.32) 1164 0 R (page.33) 1174 0 R] +/Limits [(page.29) (page.33)] >> % 2405 0 obj << -/Names [(page.40) 1225 0 R (page.41) 1230 0 R (page.42) 1238 0 R (page.43) 1243 0 R (page.44) 1251 0 R (page.45) 1256 0 R] -/Limits [(page.40) (page.45)] +/Names [(page.34) 1180 0 R (page.35) 1191 0 R (page.36) 1196 0 R (page.37) 1203 0 R (page.38) 1209 0 R (page.39) 1217 0 R] +/Limits [(page.34) (page.39)] >> % 2406 0 obj << -/Names [(page.46) 1269 0 R (page.47) 1276 0 R (page.48) 1284 0 R (page.49) 1295 0 R (page.5) 952 0 R (page.50) 1311 0 R] -/Limits [(page.46) (page.50)] +/Names [(page.4) 939 0 R (page.40) 1225 0 R (page.41) 1230 0 R (page.42) 1238 0 R (page.43) 1243 0 R (page.44) 1251 0 R] +/Limits [(page.4) (page.44)] >> % 2407 0 obj << -/Names [(page.51) 1317 0 R (page.52) 1328 0 R (page.53) 1334 0 R (page.54) 1345 0 R (page.55) 1350 0 R (page.56) 1362 0 R] -/Limits [(page.51) (page.56)] +/Names [(page.45) 1256 0 R (page.46) 1269 0 R (page.47) 1276 0 R (page.48) 1284 0 R (page.49) 1295 0 R (page.5) 952 0 R] +/Limits [(page.45) (page.5)] >> % 2408 0 obj << -/Names [(page.57) 1367 0 R (page.58) 1376 0 R (page.59) 1382 0 R (page.6) 964 0 R (page.60) 1391 0 R (page.61) 1398 0 R] -/Limits [(page.57) (page.61)] +/Names [(page.50) 1311 0 R (page.51) 1317 0 R (page.52) 1328 0 R (page.53) 1334 0 R (page.54) 1345 0 R (page.55) 1350 0 R] +/Limits [(page.50) (page.55)] >> % 2409 0 obj << -/Names [(page.62) 1412 0 R (page.63) 1419 0 R (page.64) 1428 0 R (page.65) 1436 0 R (page.66) 1440 0 R (page.67) 1455 0 R] -/Limits [(page.62) (page.67)] +/Names [(page.56) 1362 0 R (page.57) 1367 0 R (page.58) 1376 0 R (page.59) 1382 0 R (page.6) 964 0 R (page.60) 1391 0 R] +/Limits [(page.56) (page.60)] >> % 2410 0 obj << -/Names [(page.68) 1461 0 R (page.69) 1467 0 R (page.7) 969 0 R (page.70) 1474 0 R (page.71) 1478 0 R (page.72) 1483 0 R] -/Limits [(page.68) (page.72)] +/Names [(page.61) 1398 0 R (page.62) 1412 0 R (page.63) 1419 0 R (page.64) 1428 0 R (page.65) 1436 0 R (page.66) 1440 0 R] +/Limits [(page.61) (page.66)] >> % 2411 0 obj << -/Names [(page.73) 1489 0 R (page.74) 1496 0 R (page.75) 1507 0 R (page.76) 1512 0 R (page.77) 1521 0 R (page.78) 1528 0 R] -/Limits [(page.73) (page.78)] +/Names [(page.67) 1455 0 R (page.68) 1461 0 R (page.69) 1467 0 R (page.7) 969 0 R (page.70) 1474 0 R (page.71) 1478 0 R] +/Limits [(page.67) (page.71)] >> % 2412 0 obj << -/Names [(page.79) 1533 0 R (page.8) 984 0 R (page.80) 1540 0 R (page.81) 1544 0 R (page.82) 1552 0 R (page.83) 1557 0 R] -/Limits [(page.79) (page.83)] +/Names [(page.72) 1483 0 R (page.73) 1489 0 R (page.74) 1496 0 R (page.75) 1507 0 R (page.76) 1512 0 R (page.77) 1521 0 R] +/Limits [(page.72) (page.77)] >> % 2413 0 obj << -/Names [(page.84) 1565 0 R (page.85) 1571 0 R (page.86) 1581 0 R (page.87) 1594 0 R (page.88) 1598 0 R (page.89) 1611 0 R] -/Limits [(page.84) (page.89)] +/Names [(page.78) 1528 0 R (page.79) 1533 0 R (page.8) 984 0 R (page.80) 1540 0 R (page.81) 1544 0 R (page.82) 1552 0 R] +/Limits [(page.78) (page.82)] >> % 2414 0 obj << -/Names [(page.9) 1005 0 R (page.90) 1618 0 R (page.91) 1625 0 R (page.92) 1630 0 R (page.93) 1637 0 R (page.94) 1641 0 R] -/Limits [(page.9) (page.94)] +/Names [(page.83) 1557 0 R (page.84) 1565 0 R (page.85) 1571 0 R (page.86) 1581 0 R (page.87) 1594 0 R (page.88) 1598 0 R] +/Limits [(page.83) (page.88)] >> % 2415 0 obj << -/Names [(page.95) 1650 0 R (page.96) 1658 0 R (page.97) 1662 0 R (page.98) 1668 0 R (page.99) 1672 0 R (page.i) 739 0 R] -/Limits [(page.95) (page.i)] +/Names [(page.89) 1611 0 R (page.9) 1005 0 R (page.90) 1618 0 R (page.91) 1625 0 R (page.92) 1630 0 R (page.93) 1637 0 R] +/Limits [(page.89) (page.93)] >> % 2416 0 obj << -/Names [(page.ii) 795 0 R (page.iii) 843 0 R (page.iv) 886 0 R (precdata) 1136 0 R (section*.1) 740 0 R (section*.10) 634 0 R] -/Limits [(page.ii) (section*.10)] +/Names [(page.94) 1641 0 R (page.95) 1650 0 R (page.96) 1658 0 R (page.97) 1662 0 R (page.98) 1668 0 R (page.99) 1672 0 R] +/Limits [(page.94) (page.99)] >> % 2417 0 obj << -/Names [(section*.11) 638 0 R (section*.12) 642 0 R (section*.13) 646 0 R (section*.14) 650 0 R (section*.15) 654 0 R (section*.16) 658 0 R] -/Limits [(section*.11) (section*.16)] +/Names [(page.i) 739 0 R (page.ii) 795 0 R (page.iii) 843 0 R (page.iv) 886 0 R (precdata) 1136 0 R (section*.1) 740 0 R] +/Limits [(page.i) (section*.1)] >> % 2418 0 obj << -/Names [(section*.17) 662 0 R (section*.18) 666 0 R (section*.19) 670 0 R (section*.2) 7 0 R (section*.20) 674 0 R (section*.21) 2270 0 R] -/Limits [(section*.17) (section*.21)] +/Names [(section*.10) 634 0 R (section*.11) 638 0 R (section*.12) 642 0 R (section*.13) 646 0 R (section*.14) 650 0 R (section*.15) 654 0 R] +/Limits [(section*.10) (section*.15)] >> % 2419 0 obj << -/Names [(section*.3) 2140 0 R (section*.4) 2168 0 R (section*.5) 2190 0 R (section*.6) 2210 0 R (section*.7) 622 0 R (section*.8) 626 0 R] -/Limits [(section*.3) (section*.8)] +/Names [(section*.16) 658 0 R (section*.17) 662 0 R (section*.18) 666 0 R (section*.19) 670 0 R (section*.2) 7 0 R (section*.20) 674 0 R] +/Limits [(section*.16) (section*.20)] >> % 2420 0 obj << -/Names [(section*.9) 630 0 R (section.1) 11 0 R (section.10) 545 0 R (section.11) 585 0 R (section.12) 597 0 R (section.13) 618 0 R] -/Limits [(section*.9) (section.13)] +/Names [(section*.21) 2271 0 R (section*.3) 2141 0 R (section*.4) 2169 0 R (section*.5) 2191 0 R (section*.6) 2211 0 R (section*.7) 622 0 R] +/Limits [(section*.21) (section*.7)] >> % 2421 0 obj << -/Names [(section.2) 15 0 R (section.3) 39 0 R (section.4) 224 0 R (section.5) 292 0 R (section.6) 312 0 R (section.7) 425 0 R] -/Limits [(section.2) (section.7)] +/Names [(section*.8) 626 0 R (section*.9) 630 0 R (section.1) 11 0 R (section.10) 545 0 R (section.11) 585 0 R (section.12) 597 0 R] +/Limits [(section*.8) (section.12)] >> % 2422 0 obj << -/Names [(section.8) 497 0 R (section.9) 517 0 R (spbasedata) 1081 0 R (spdata) 1073 0 R (subsection.10.1) 549 0 R (subsection.10.2) 553 0 R] -/Limits [(section.8) (subsection.10.2)] +/Names [(section.13) 618 0 R (section.2) 15 0 R (section.3) 39 0 R (section.4) 224 0 R (section.5) 292 0 R (section.6) 312 0 R] +/Limits [(section.13) (section.6)] >> % 2423 0 obj << -/Names [(subsection.10.3) 557 0 R (subsection.10.4) 561 0 R (subsection.10.5) 565 0 R (subsection.10.6) 569 0 R (subsection.10.7) 573 0 R (subsection.10.8) 577 0 R] -/Limits [(subsection.10.3) (subsection.10.8)] +/Names [(section.7) 425 0 R (section.8) 497 0 R (section.9) 517 0 R (spbasedata) 1081 0 R (spdata) 1073 0 R (subsection.10.1) 549 0 R] +/Limits [(section.7) (subsection.10.1)] >> % 2424 0 obj << -/Names [(subsection.10.9) 581 0 R (subsection.11.1) 589 0 R (subsection.11.2) 593 0 R (subsection.12.1) 601 0 R (subsection.12.2) 606 0 R (subsection.12.3) 610 0 R] -/Limits [(subsection.10.9) (subsection.12.3)] +/Names [(subsection.10.2) 553 0 R (subsection.10.3) 557 0 R (subsection.10.4) 561 0 R (subsection.10.5) 565 0 R (subsection.10.6) 569 0 R (subsection.10.7) 573 0 R] +/Limits [(subsection.10.2) (subsection.10.7)] >> % 2425 0 obj << -/Names [(subsection.12.4) 614 0 R (subsection.2.1) 19 0 R (subsection.2.2) 23 0 R (subsection.2.3) 27 0 R (subsection.2.4) 35 0 R (subsection.3.1) 43 0 R] -/Limits [(subsection.12.4) (subsection.3.1)] +/Names [(subsection.10.8) 577 0 R (subsection.10.9) 581 0 R (subsection.11.1) 589 0 R (subsection.11.2) 593 0 R (subsection.12.1) 601 0 R (subsection.12.2) 606 0 R] +/Limits [(subsection.10.8) (subsection.12.2)] >> % 2426 0 obj << -/Names [(subsection.3.2) 107 0 R (subsection.3.3) 187 0 R (subsection.3.4) 216 0 R (subsection.3.5) 220 0 R (subsection.4.1) 228 0 R (subsection.4.10) 264 0 R] -/Limits [(subsection.3.2) (subsection.4.10)] +/Names [(subsection.12.3) 610 0 R (subsection.12.4) 614 0 R (subsection.2.1) 19 0 R (subsection.2.2) 23 0 R (subsection.2.3) 27 0 R (subsection.2.4) 35 0 R] +/Limits [(subsection.12.3) (subsection.2.4)] >> % 2427 0 obj << -/Names [(subsection.4.11) 268 0 R (subsection.4.12) 272 0 R (subsection.4.13) 276 0 R (subsection.4.14) 280 0 R (subsection.4.15) 284 0 R (subsection.4.16) 288 0 R] -/Limits [(subsection.4.11) (subsection.4.16)] +/Names [(subsection.3.1) 43 0 R (subsection.3.2) 107 0 R (subsection.3.3) 187 0 R (subsection.3.4) 216 0 R (subsection.3.5) 220 0 R (subsection.4.1) 228 0 R] +/Limits [(subsection.3.1) (subsection.4.1)] >> % 2428 0 obj << -/Names [(subsection.4.2) 232 0 R (subsection.4.3) 236 0 R (subsection.4.4) 240 0 R (subsection.4.5) 244 0 R (subsection.4.6) 248 0 R (subsection.4.7) 252 0 R] -/Limits [(subsection.4.2) (subsection.4.7)] +/Names [(subsection.4.10) 264 0 R (subsection.4.11) 268 0 R (subsection.4.12) 272 0 R (subsection.4.13) 276 0 R (subsection.4.14) 280 0 R (subsection.4.15) 284 0 R] +/Limits [(subsection.4.10) (subsection.4.15)] >> % 2429 0 obj << -/Names [(subsection.4.8) 256 0 R (subsection.4.9) 260 0 R (subsection.5.1) 296 0 R (subsection.5.2) 300 0 R (subsection.5.3) 304 0 R (subsection.5.4) 308 0 R] -/Limits [(subsection.4.8) (subsection.5.4)] +/Names [(subsection.4.16) 288 0 R (subsection.4.2) 232 0 R (subsection.4.3) 236 0 R (subsection.4.4) 240 0 R (subsection.4.5) 244 0 R (subsection.4.6) 248 0 R] +/Limits [(subsection.4.16) (subsection.4.6)] >> % 2430 0 obj << -/Names [(subsection.6.1) 316 0 R (subsection.6.10) 352 0 R (subsection.6.11) 356 0 R (subsection.6.12) 360 0 R (subsection.6.13) 364 0 R (subsection.6.14) 368 0 R] -/Limits [(subsection.6.1) (subsection.6.14)] +/Names [(subsection.4.7) 252 0 R (subsection.4.8) 256 0 R (subsection.4.9) 260 0 R (subsection.5.1) 296 0 R (subsection.5.2) 300 0 R (subsection.5.3) 304 0 R] +/Limits [(subsection.4.7) (subsection.5.3)] >> % 2431 0 obj << -/Names [(subsection.6.15) 372 0 R (subsection.6.16) 376 0 R (subsection.6.17) 380 0 R (subsection.6.18) 384 0 R (subsection.6.19) 388 0 R (subsection.6.2) 320 0 R] -/Limits [(subsection.6.15) (subsection.6.2)] +/Names [(subsection.5.4) 308 0 R (subsection.6.1) 316 0 R (subsection.6.10) 352 0 R (subsection.6.11) 356 0 R (subsection.6.12) 360 0 R (subsection.6.13) 364 0 R] +/Limits [(subsection.5.4) (subsection.6.13)] >> % 2432 0 obj << -/Names [(subsection.6.20) 392 0 R (subsection.6.21) 396 0 R (subsection.6.22) 400 0 R (subsection.6.23) 405 0 R (subsection.6.24) 409 0 R (subsection.6.25) 413 0 R] -/Limits [(subsection.6.20) (subsection.6.25)] +/Names [(subsection.6.14) 368 0 R (subsection.6.15) 372 0 R (subsection.6.16) 376 0 R (subsection.6.17) 380 0 R (subsection.6.18) 384 0 R (subsection.6.19) 388 0 R] +/Limits [(subsection.6.14) (subsection.6.19)] >> % 2433 0 obj << -/Names [(subsection.6.26) 417 0 R (subsection.6.27) 421 0 R (subsection.6.3) 324 0 R (subsection.6.4) 328 0 R (subsection.6.5) 332 0 R (subsection.6.6) 336 0 R] -/Limits [(subsection.6.26) (subsection.6.6)] +/Names [(subsection.6.2) 320 0 R (subsection.6.20) 392 0 R (subsection.6.21) 396 0 R (subsection.6.22) 400 0 R (subsection.6.23) 405 0 R (subsection.6.24) 409 0 R] +/Limits [(subsection.6.2) (subsection.6.24)] >> % 2434 0 obj << -/Names [(subsection.6.7) 340 0 R (subsection.6.8) 344 0 R (subsection.6.9) 348 0 R (subsection.7.1) 429 0 R (subsection.7.10) 465 0 R (subsection.7.11) 469 0 R] -/Limits [(subsection.6.7) (subsection.7.11)] +/Names [(subsection.6.25) 413 0 R (subsection.6.26) 417 0 R (subsection.6.27) 421 0 R (subsection.6.3) 324 0 R (subsection.6.4) 328 0 R (subsection.6.5) 332 0 R] +/Limits [(subsection.6.25) (subsection.6.5)] >> % 2435 0 obj << -/Names [(subsection.7.12) 473 0 R (subsection.7.13) 477 0 R (subsection.7.14) 481 0 R (subsection.7.15) 485 0 R (subsection.7.16) 489 0 R (subsection.7.17) 493 0 R] -/Limits [(subsection.7.12) (subsection.7.17)] +/Names [(subsection.6.6) 336 0 R (subsection.6.7) 340 0 R (subsection.6.8) 344 0 R (subsection.6.9) 348 0 R (subsection.7.1) 429 0 R (subsection.7.10) 465 0 R] +/Limits [(subsection.6.6) (subsection.7.10)] >> % 2436 0 obj << -/Names [(subsection.7.2) 433 0 R (subsection.7.3) 437 0 R (subsection.7.4) 441 0 R (subsection.7.5) 445 0 R (subsection.7.6) 449 0 R (subsection.7.7) 453 0 R] -/Limits [(subsection.7.2) (subsection.7.7)] +/Names [(subsection.7.11) 469 0 R (subsection.7.12) 473 0 R (subsection.7.13) 477 0 R (subsection.7.14) 481 0 R (subsection.7.15) 485 0 R (subsection.7.16) 489 0 R] +/Limits [(subsection.7.11) (subsection.7.16)] >> % 2437 0 obj << -/Names [(subsection.7.8) 457 0 R (subsection.7.9) 461 0 R (subsection.8.1) 501 0 R (subsection.8.2) 505 0 R (subsection.8.3) 509 0 R (subsection.8.4) 513 0 R] -/Limits [(subsection.7.8) (subsection.8.4)] +/Names [(subsection.7.17) 493 0 R (subsection.7.2) 433 0 R (subsection.7.3) 437 0 R (subsection.7.4) 441 0 R (subsection.7.5) 445 0 R (subsection.7.6) 449 0 R] +/Limits [(subsection.7.17) (subsection.7.6)] >> % 2438 0 obj << -/Names [(subsection.9.1) 521 0 R (subsection.9.2) 525 0 R (subsection.9.3) 529 0 R (subsection.9.4) 533 0 R (subsection.9.5) 537 0 R (subsection.9.6) 541 0 R] -/Limits [(subsection.9.1) (subsection.9.6)] +/Names [(subsection.7.7) 453 0 R (subsection.7.8) 457 0 R (subsection.7.9) 461 0 R (subsection.8.1) 501 0 R (subsection.8.2) 505 0 R (subsection.8.3) 509 0 R] +/Limits [(subsection.7.7) (subsection.8.3)] >> % 2439 0 obj << -/Names [(subsubsection.2.3.1) 31 0 R (subsubsection.3.1.1) 47 0 R (subsubsection.3.1.10) 83 0 R (subsubsection.3.1.11) 87 0 R (subsubsection.3.1.12) 91 0 R (subsubsection.3.1.13) 95 0 R] -/Limits [(subsubsection.2.3.1) (subsubsection.3.1.13)] +/Names [(subsection.8.4) 513 0 R (subsection.9.1) 521 0 R (subsection.9.2) 525 0 R (subsection.9.3) 529 0 R (subsection.9.4) 533 0 R (subsection.9.5) 537 0 R] +/Limits [(subsection.8.4) (subsection.9.5)] >> % 2440 0 obj << -/Names [(subsubsection.3.1.14) 99 0 R (subsubsection.3.1.15) 103 0 R (subsubsection.3.1.2) 51 0 R (subsubsection.3.1.3) 55 0 R (subsubsection.3.1.4) 59 0 R (subsubsection.3.1.5) 63 0 R] -/Limits [(subsubsection.3.1.14) (subsubsection.3.1.5)] +/Names [(subsection.9.6) 541 0 R (subsubsection.2.3.1) 31 0 R (subsubsection.3.1.1) 47 0 R (subsubsection.3.1.10) 83 0 R (subsubsection.3.1.11) 87 0 R (subsubsection.3.1.12) 91 0 R] +/Limits [(subsection.9.6) (subsubsection.3.1.12)] >> % 2441 0 obj << -/Names [(subsubsection.3.1.6) 67 0 R (subsubsection.3.1.7) 71 0 R (subsubsection.3.1.8) 75 0 R (subsubsection.3.1.9) 79 0 R (subsubsection.3.2.1) 111 0 R (subsubsection.3.2.10) 147 0 R] -/Limits [(subsubsection.3.1.6) (subsubsection.3.2.10)] +/Names [(subsubsection.3.1.13) 95 0 R (subsubsection.3.1.14) 99 0 R (subsubsection.3.1.15) 103 0 R (subsubsection.3.1.2) 51 0 R (subsubsection.3.1.3) 55 0 R (subsubsection.3.1.4) 59 0 R] +/Limits [(subsubsection.3.1.13) (subsubsection.3.1.4)] >> % 2442 0 obj << -/Names [(subsubsection.3.2.11) 151 0 R (subsubsection.3.2.12) 155 0 R (subsubsection.3.2.13) 159 0 R (subsubsection.3.2.14) 163 0 R (subsubsection.3.2.15) 167 0 R (subsubsection.3.2.16) 171 0 R] -/Limits [(subsubsection.3.2.11) (subsubsection.3.2.16)] +/Names [(subsubsection.3.1.5) 63 0 R (subsubsection.3.1.6) 67 0 R (subsubsection.3.1.7) 71 0 R (subsubsection.3.1.8) 75 0 R (subsubsection.3.1.9) 79 0 R (subsubsection.3.2.1) 111 0 R] +/Limits [(subsubsection.3.1.5) (subsubsection.3.2.1)] >> % 2443 0 obj << -/Names [(subsubsection.3.2.17) 175 0 R (subsubsection.3.2.18) 179 0 R (subsubsection.3.2.19) 183 0 R (subsubsection.3.2.2) 115 0 R (subsubsection.3.2.3) 119 0 R (subsubsection.3.2.4) 123 0 R] -/Limits [(subsubsection.3.2.17) (subsubsection.3.2.4)] +/Names [(subsubsection.3.2.10) 147 0 R (subsubsection.3.2.11) 151 0 R (subsubsection.3.2.12) 155 0 R (subsubsection.3.2.13) 159 0 R (subsubsection.3.2.14) 163 0 R (subsubsection.3.2.15) 167 0 R] +/Limits [(subsubsection.3.2.10) (subsubsection.3.2.15)] >> % 2444 0 obj << -/Names [(subsubsection.3.2.5) 127 0 R (subsubsection.3.2.6) 131 0 R (subsubsection.3.2.7) 135 0 R (subsubsection.3.2.8) 139 0 R (subsubsection.3.2.9) 143 0 R (subsubsection.3.3.1) 191 0 R] -/Limits [(subsubsection.3.2.5) (subsubsection.3.3.1)] +/Names [(subsubsection.3.2.16) 171 0 R (subsubsection.3.2.17) 175 0 R (subsubsection.3.2.18) 179 0 R (subsubsection.3.2.19) 183 0 R (subsubsection.3.2.2) 115 0 R (subsubsection.3.2.3) 119 0 R] +/Limits [(subsubsection.3.2.16) (subsubsection.3.2.3)] >> % 2445 0 obj << -/Names [(subsubsection.3.3.2) 195 0 R (subsubsection.3.3.3) 199 0 R (subsubsection.3.3.4) 204 0 R (subsubsection.3.3.5) 208 0 R (subsubsection.3.3.6) 212 0 R (table.1) 1129 0 R] -/Limits [(subsubsection.3.3.2) (table.1)] +/Names [(subsubsection.3.2.4) 123 0 R (subsubsection.3.2.5) 127 0 R (subsubsection.3.2.6) 131 0 R (subsubsection.3.2.7) 135 0 R (subsubsection.3.2.8) 139 0 R (subsubsection.3.2.9) 143 0 R] +/Limits [(subsubsection.3.2.4) (subsubsection.3.2.9)] >> % 2446 0 obj << -/Names [(table.10) 1277 0 R (table.11) 1286 0 R (table.12) 1299 0 R (table.13) 1318 0 R (table.14) 1346 0 R (table.15) 1363 0 R] -/Limits [(table.10) (table.15)] +/Names [(subsubsection.3.3.1) 191 0 R (subsubsection.3.3.2) 195 0 R (subsubsection.3.3.3) 199 0 R (subsubsection.3.3.4) 204 0 R (subsubsection.3.3.5) 208 0 R (subsubsection.3.3.6) 212 0 R] +/Limits [(subsubsection.3.3.1) (subsubsection.3.3.6)] >> % 2447 0 obj << -/Names [(table.16) 1377 0 R (table.17) 1392 0 R (table.18) 1420 0 R (table.19) 1456 0 R (table.2) 1175 0 R (table.20) 1468 0 R] -/Limits [(table.16) (table.20)] +/Names [(table.1) 1129 0 R (table.10) 1277 0 R (table.11) 1286 0 R (table.12) 1299 0 R (table.13) 1318 0 R (table.14) 1346 0 R] +/Limits [(table.1) (table.14)] >> % 2448 0 obj << -/Names [(table.21) 1998 0 R (table.22) 2143 0 R (table.3) 1192 0 R (table.4) 1204 0 R (table.5) 1218 0 R (table.6) 1226 0 R] -/Limits [(table.21) (table.6)] +/Names [(table.15) 1363 0 R (table.16) 1377 0 R (table.17) 1392 0 R (table.18) 1420 0 R (table.19) 1456 0 R (table.2) 1175 0 R] +/Limits [(table.15) (table.2)] >> % 2449 0 obj << -/Names [(table.7) 1239 0 R (table.8) 1252 0 R (table.9) 1270 0 R (title.0) 3 0 R (vbasedata) 1061 0 R (vdata) 1116 0 R] -/Limits [(table.7) (vdata)] +/Names [(table.20) 1468 0 R (table.21) 1999 0 R (table.22) 2144 0 R (table.3) 1192 0 R (table.4) 1204 0 R (table.5) 1218 0 R] +/Limits [(table.20) (table.5)] >> % 2450 0 obj << -/Kids [2344 0 R 2345 0 R 2346 0 R 2347 0 R 2348 0 R 2349 0 R] -/Limits [(Doc-Start) (Item.125)] +/Names [(table.6) 1226 0 R (table.7) 1239 0 R (table.8) 1252 0 R (table.9) 1270 0 R (title.0) 3 0 R (vbasedata) 1061 0 R] +/Limits [(table.6) (vbasedata)] >> % 2451 0 obj << -/Kids [2350 0 R 2351 0 R 2352 0 R 2353 0 R 2354 0 R 2355 0 R] -/Limits [(Item.126) (Item.23)] +/Names [(vdata) 1116 0 R] +/Limits [(vdata) (vdata)] >> % 2452 0 obj << -/Kids [2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R] -/Limits [(Item.24) (Item.56)] +/Kids [2345 0 R 2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R] +/Limits [(Doc-Start) (Item.125)] >> % 2453 0 obj << -/Kids [2362 0 R 2363 0 R 2364 0 R 2365 0 R 2366 0 R 2367 0 R] -/Limits [(Item.57) (Item.89)] +/Kids [2351 0 R 2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R] +/Limits [(Item.126) (Item.22)] >> % 2454 0 obj << -/Kids [2368 0 R 2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R] -/Limits [(Item.9) (cite.machiels)] +/Kids [2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R] +/Limits [(Item.23) (Item.55)] >> % 2455 0 obj << -/Kids [2375 0 R 2376 0 R 2377 0 R 2378 0 R 2379 0 R 2380 0 R] -/Limits [(cite.metcalf) (lstlisting.-9)] +/Kids [2363 0 R 2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R] +/Limits [(Item.56) (Item.88)] >> % 2456 0 obj << -/Kids [2381 0 R 2382 0 R 2383 0 R 2384 0 R 2385 0 R 2386 0 R] -/Limits [(lstnumber.-1.1) (page.108)] +/Kids [2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R 2375 0 R] +/Limits [(Item.89) (cite.Sparse03)] >> % 2457 0 obj << -/Kids [2387 0 R 2388 0 R 2389 0 R 2390 0 R 2391 0 R 2392 0 R] -/Limits [(page.109) (page.140)] +/Kids [2376 0 R 2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R] +/Limits [(cite.machiels) (lstlisting.-8)] >> % 2458 0 obj << -/Kids [2393 0 R 2394 0 R 2395 0 R 2396 0 R 2397 0 R 2398 0 R] -/Limits [(page.141) (page.173)] +/Kids [2382 0 R 2383 0 R 2384 0 R 2385 0 R 2386 0 R 2387 0 R] +/Limits [(lstlisting.-9) (page.107)] >> % 2459 0 obj << -/Kids [2399 0 R 2400 0 R 2401 0 R 2402 0 R 2403 0 R 2404 0 R] -/Limits [(page.174) (page.4)] +/Kids [2388 0 R 2389 0 R 2390 0 R 2391 0 R 2392 0 R 2393 0 R] +/Limits [(page.108) (page.14)] >> % 2460 0 obj << -/Kids [2405 0 R 2406 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R] -/Limits [(page.40) (page.72)] +/Kids [2394 0 R 2395 0 R 2396 0 R 2397 0 R 2398 0 R 2399 0 R] +/Limits [(page.140) (page.172)] >> % 2461 0 obj << -/Kids [2411 0 R 2412 0 R 2413 0 R 2414 0 R 2415 0 R 2416 0 R] -/Limits [(page.73) (section*.10)] +/Kids [2400 0 R 2401 0 R 2402 0 R 2403 0 R 2404 0 R 2405 0 R] +/Limits [(page.173) (page.39)] >> % 2462 0 obj << -/Kids [2417 0 R 2418 0 R 2419 0 R 2420 0 R 2421 0 R 2422 0 R] -/Limits [(section*.11) (subsection.10.2)] +/Kids [2406 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R] +/Limits [(page.4) (page.71)] >> % 2463 0 obj << -/Kids [2423 0 R 2424 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R] -/Limits [(subsection.10.3) (subsection.4.7)] +/Kids [2412 0 R 2413 0 R 2414 0 R 2415 0 R 2416 0 R 2417 0 R] +/Limits [(page.72) (section*.1)] >> % 2464 0 obj << -/Kids [2429 0 R 2430 0 R 2431 0 R 2432 0 R 2433 0 R 2434 0 R] -/Limits [(subsection.4.8) (subsection.7.11)] +/Kids [2418 0 R 2419 0 R 2420 0 R 2421 0 R 2422 0 R 2423 0 R] +/Limits [(section*.10) (subsection.10.1)] >> % 2465 0 obj << -/Kids [2435 0 R 2436 0 R 2437 0 R 2438 0 R 2439 0 R 2440 0 R] -/Limits [(subsection.7.12) (subsubsection.3.1.5)] +/Kids [2424 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R] +/Limits [(subsection.10.2) (subsection.4.6)] >> % 2466 0 obj << -/Kids [2441 0 R 2442 0 R 2443 0 R 2444 0 R 2445 0 R 2446 0 R] -/Limits [(subsubsection.3.1.6) (table.15)] +/Kids [2430 0 R 2431 0 R 2432 0 R 2433 0 R 2434 0 R 2435 0 R] +/Limits [(subsection.4.7) (subsection.7.10)] >> % 2467 0 obj << -/Kids [2447 0 R 2448 0 R 2449 0 R] -/Limits [(table.16) (vdata)] +/Kids [2436 0 R 2437 0 R 2438 0 R 2439 0 R 2440 0 R 2441 0 R] +/Limits [(subsection.7.11) (subsubsection.3.1.4)] >> % 2468 0 obj << -/Kids [2450 0 R 2451 0 R 2452 0 R 2453 0 R 2454 0 R 2455 0 R] -/Limits [(Doc-Start) (lstlisting.-9)] +/Kids [2442 0 R 2443 0 R 2444 0 R 2445 0 R 2446 0 R 2447 0 R] +/Limits [(subsubsection.3.1.5) (table.14)] >> % 2469 0 obj << -/Kids [2456 0 R 2457 0 R 2458 0 R 2459 0 R 2460 0 R 2461 0 R] -/Limits [(lstnumber.-1.1) (section*.10)] +/Kids [2448 0 R 2449 0 R 2450 0 R 2451 0 R] +/Limits [(table.15) (vdata)] >> % 2470 0 obj << -/Kids [2462 0 R 2463 0 R 2464 0 R 2465 0 R 2466 0 R 2467 0 R] -/Limits [(section*.11) (vdata)] +/Kids [2452 0 R 2453 0 R 2454 0 R 2455 0 R 2456 0 R 2457 0 R] +/Limits [(Doc-Start) (lstlisting.-8)] >> % 2471 0 obj << -/Kids [2468 0 R 2469 0 R 2470 0 R] -/Limits [(Doc-Start) (vdata)] +/Kids [2458 0 R 2459 0 R 2460 0 R 2461 0 R 2462 0 R 2463 0 R] +/Limits [(lstlisting.-9) (section*.1)] >> % 2472 0 obj << -/Dests 2471 0 R +/Kids [2464 0 R 2465 0 R 2466 0 R 2467 0 R 2468 0 R 2469 0 R] +/Limits [(section*.10) (vdata)] >> % 2473 0 obj << -/Type /Catalog -/Pages 2340 0 R -/Outlines 2342 0 R -/Names 2472 0 R - /URI (http://ce.uniroma2.it/psblas) /PageMode/UseOutlines/PageLabels<>2<>6<>]>> -/OpenAction 677 0 R +/Kids [2470 0 R 2471 0 R 2472 0 R] +/Limits [(Doc-Start) (vdata)] >> endstream endobj -2474 0 obj +2477 0 obj << /Title (Parallel Sparse BLAS V. 3.9.0) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id$) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() -/CreationDate (D:20250605185524+02'00') -/ModDate (D:20250605185524+02'00') +/CreationDate (D:20250930190717+02'00') +/ModDate (D:20250930190717+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> endobj 2475 0 obj << +/Type /ObjStm +/N 2 +/First 15 +/Length 263 +>> +stream +2474 0 2476 35 +% 2474 0 obj +<< +/Dests 2473 0 R +>> +% 2476 0 obj +<< +/Type /Catalog +/Pages 2341 0 R +/Outlines 2343 0 R +/Names 2474 0 R + /URI (http://ce.uniroma2.it/psblas) /PageMode/UseOutlines/PageLabels<>2<>6<>]>> +/OpenAction 677 0 R +>> + +endstream +endobj +2478 0 obj +<< /Type /XRef -/Index [0 2476] -/Size 2476 +/Index [0 2479] +/Size 2479 /W [1 3 1] -/Root 2473 0 R -/Info 2474 0 R -/ID [ ] -/Length 12380 ->> -stream -˙]) 'Fz& 'Ez3 'Dz> 'CzF 'B  -zR 'A  z[ '@ Ó '?Ó '>Ó$ '=Ó% '<ÓE ';ÓF ':ÓG '9ÓH '8ÓL '7 ÓM '6!"ÓN '5#$ÓR '4%&ÓS '3'(ÓU '2)*ÓV '1+,ÓZ '0-.Ó[ '//0Ó\ '.12Óc '-344 ',564 '+784 '*9:4  ');<4  '(=>4 ''?@4 '&AB4 '%CD4 '$EF4 '#GH4 '"IJ4 '!KL4 ' MN4% 'OP4& 'QR4' 'ST4+ 'UV41 'WX42 'YZ43 '[\44 ']^4: '_`4; 'ab4< 'cË>\4B 'ËË4G 'ËË4H 'ËË4I 'ËË4P 'Ë Ë -4T 'Ë Ë 4^ 'Ë ËŤ - ' ËËŤ ' ËËŤ% ' ËËŤ1 ' -ËËŤ9 ' ËËŤE 'ËËŤP 'ËËŤa 'ËËţ 'ËË ţ  'Ë!Ë"ţ 'Ë#Ë$ţ( 'Ë%Ë&ţC 'Ë'Ë(ţP 'Ë)Ë*ţ_ %cË+Ë,g %bË-Ë.g %aË/Ë0g %`Ë1Ë2g= %_Ë3Ë4gF %^Ë5Ë6gQ %]Ë7Ë8gR %\Ë9Ë:Ţ %[Ë;Ë<Ţ %ZË=Ë>Ţ %YË?Ë@Ţ %XËAËBŢ$ %WËCËDŢ/ %VËEËFŢ: %UËGËHŢU %TËIËJL %SËKËLL %RËMËNL %QËOËPL %PËQËRL$ %OËSËTL, %NËUËVL0 %MËWËXL5 %LËYËZL? %KË[Ë\LD %JË]Ë^LJ %IË_Ë`LP %HËaËbLV %GËc”|YL\ %F””Lc %E””· %D””· %C””· %B” ” -·' %A” ” ·+ %@” ”·1 %?””·7 %>””·> %=””·B %<””·F %;””·J %:””·N %9””·R %8””·\ %7”” % %6”!”"%  %5”#”$% %4”%”&%  %3”'”(%* %2”)”*%6 %1”+”,%; %0”-”.%B %/”/”0%K %.”1”2%Q %-”3”4%W %,”5”6%] %+”7”8%c %*”9”:‘ %)”;”<‘  %(”=”>‘ %'”?”@‘ %&”A”B‘  %%”C”D‘' %$”E”F‘0 %#”G”H‘7 %"”I”J‘@ %!”K”L‘M % ”M”N‘Y %”O”P‘^ %”Q”R‘b %”S”T %”U”V  %”W”X %”Y”Z %”[”\ %”]”^3 %”_”`J %”a”bK %”c]ý{R %]]S %]]~> %]]~B %]]~C %] ] -~E %] ] ~I %] ]~J % ]]~K % ]]~L % ]]~M % -]]~N % ]]~O %]]~P %]]~T %]]~U %]] ~V %]!]"~W %]#]$]%Áć]&]*ľ«]'](â<â>â=â?Ň’]-]+0],]/]0]1]2]3]4]5]6]7]8]9]:];]<]=]>]?]@]A]B]D]F]G]H]I]J]K]L]M]N]P]R]S]T]U]V]W]X]Y]Z][]`]^].ş]\]]]C]E]O]Q]a]b]c  +/Root 2476 0 R +/Info 2477 0 R +/ID [<74AF8409D9443F34D74B521E914F839E> <74AF8409D9443F34D74B521E914F839E>] +/Length 12395 +>> +stream +˙]) (Gz& (Fz3 (Ez> (DzF (C  +zR (B  z[ (A Ó (@Ó (?Ó$ (>Ó% (=ÓE (<ÓF (;ÓG (:ÓH (9ÓL (8 ÓM (7!"ÓN (6#$ÓR (5%&ÓS (4'(ÓU (3)*ÓV (2+,ÓZ (1-.Ó[ (0/0Ó\ (/12Óc (.344 (-564 (,784 (+9:4  (*;<4  ()=>4 ((?@4 ('AB4 (&CD4 (%EF4 ($GH4 (#IJ4 ("KL4 (!MN4% ( OP4& (QR4' (ST4+ (UV41 (WX42 (YZ43 ([\44 (]^4: (_`4; (ab4< (cË>\4B (ËË4G (ËË4H (ËË4I (ËË4P (Ë Ë +4T (Ë Ë 4^ (Ë ËŤ + (ËËŤ ( ËËŤ% ( ËËŤ1 ( ËËŤ9 ( +ËËŤE ( ËËŤP (ËËŤa (ËËţ (ËË ţ  (Ë!Ë"ţ (Ë#Ë$ţ( (Ë%Ë&ţC (Ë'Ë(ţP (Ë)Ë*ţ_ (Ë+Ë,g &cË-Ë.g &bË/Ë0g &aË1Ë2g= &`Ë3Ë4gF &_Ë5Ë6gQ &^Ë7Ë8gR &]Ë9Ë:Ţ &\Ë;Ë<Ţ &[Ë=Ë>Ţ &ZË?Ë@Ţ &YËAËBŢ$ &XËCËDŢ/ &WËEËFŢ: &VËGËHŢU &UËIËJL &TËKËLL &SËMËNL &RËOËPL &QËQËRL$ &PËSËTL, &OËUËVL0 &NËWËXL5 &MËYËZL? &LË[Ë\LD &KË]Ë^LJ &JË_Ë`LP &IËaËbLV &HËc”|YL\ &G””Lc &F””· &E””· &D””· &C” ” +·( &B” ” ·, &A” ”·2 &@””·8 &?””·? &>””·C &=””·G &<””·K &;””·O &:””·S &9””·] &8”” " &7”!”""  &6”#”$" &5”%”&"! &4”'”("+ &3”)”*"7 &2”+”,"< &1”-”."C &0”/”0"L &/”1”2"R &.”3”4"X &-”5”6"^ &,”7”8’ &+”9”:’ &*”;”<’  &)”=”>’ &(”?”@’ &'”A”B’! &&”C”D’( &%”E”F’1 &$”G”H’8 &#”I”J’A &"”K”L’N &!”M”N’Z & ”O”P’_ &”Q”R’c &”S”Tý &”U”Vý  &”W”Xý &”Y”Zý &”[”\ý &”]”^ý4 &”_”`ýK &”a”býL &”c]ý{ýS &]]ýT &]]? &]]C &]]D &] ] +F &] ] J &] ]K &]]L & ]]M & ]]N & ]]O & +]]P & ]]Q &]]U &]]V &]] W &]!]"X &]#]$]%Áć]&]*ľ«]'](ă=ă?ă>ă@Ň’]-]+0],]/]0]1]2]3]4]5]6]7]8]9]:];]<]=]>]?]@]A]B]D]F]G]H]I]J]K]L]M]N]P]R]S]T]U]V]W]X]Y]Z][]`]^].ş]\]]]C]E]O]Q]a]b]c      !"#$%&'()*.,]_żL+¶Ń/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTVWY[`^-4]UXZ\bzzzzzzzzz z -z z z zzzzzzzzzzzzzzzzzzz z!z"z$_}!z#aczÎJz'z%÷Tâ@z)z*z+z,z-z.z/z0z1z2z4z(Ĺâââââ âââ ~câz:z;z<BÍzBz@z5+Łz=z?z6z7z8z9GâzCzDzIzAS&zEâ7â6â5zGzHâ zNzOŚŻzSzJwúzPzQzKzLzM~b~azUzVzXzT“YzWÓÓzY¨^zZz\z]z^z_z`zazbzcâAŹÓÓÓ4ÓÓÓÓÓÓÓ Ó -Ó Ó Ó ÓÓÓÓÓâ8ÓÓ Ó&ŹÓÓÓÓÓÓÓÓ"Ó'Ó!EoÓ#Ó&Ó)Ó*Ó+Ó2Ó(gęÓ,Ó-Ó.Ó/Ó0Ó1Ó4Ó5Ó@Ó3:Ó6Ó7Ó8Ó9Ó:Ó;Ó<Ó=Ó>â9Ó?ÓBÓCÓIÓAťďÓDâBÓOÓJ˛IÓKÓWÓPÄÓQÓTÓ]ÓX×çÓYÓ_Ó`Óa4Ó^îćÓb4â -4^ŕ4 444444 -T54 4âC44d444v44"4Ž44 4!4(4#˘4$4,4)´°4*4.4/464-Ît4045âD494=47í˘484?4@4C4>4A4_4E4M4K4Dí4F4J4O4Q4L$ç4N4U4R6)4S4W4X4Y4Z4[4\4b4`4V74]â;âE4cŤŤ4aU!Ť°±ŤŤŤŤŤŤ Ť…FŤ Ť ŤŤŤ ¤ŤŤŤŤŤŤŤŤŤŤµ»ŤŤŤŤŘĽŤŤ!Ť"Ť#Ť'Ť Ű>Ť$Ť&âFŤ+Ť(úxŤ)Ť*Ť-Ť.Ť/Ť3Ť,ńŤ0Ť2Ť5Ť6Ť7Ť;Ť4 †Ť8Ť:Ť?Ť<>XŤ=Ť>ŤAŤBŤCŤGŤ@J׍DŤFŤJŤHhĎŤIâGŤLŤMŤNŤRŤKkRŤOŤQŤ[ŤS…ňŤTŤUŤVŤWŤXŤYŤZŤ]Ť^Ť_ŤcŤ\—ÍŤ`ŤbţţţţŢNţţ÷eţţ ţ ţóźţ -â:ţ ţţţţţţţţţţţţţâHţţţţţ ţ!ţ"ţ$ţ(żţ#ţ&ţ,ţ*ţ%C1ţ'ţ)ţ-ţ.ţ/ţ0ţ1ţ2ţ4ţ+c5ţ3ţ6ţ7ţ9ţ5€›ţ8ţ;ţ<ţ=ţ>ţ?ţ@ţAţEţ:’řţBţDţHţF±^ţGâIţJţKţLţMţNţTţUţRţI˛ÓţOţQţWţSŃ$ţVţYţZţ[ţ\ţ]ţaţXÖ ţ^ţ`ţcgţbô™gHggggg -g*¤gg R[ggg E“ggâJg g gggg`¶”%ggÁ˝ggggg!gÍăgg g#Ęg$g%g*g"ěĹg&g'g(g)g6g-g+0g,g7g.Lg5g/g0g1g2g3g4"hU×g9g:g;g?g8og<g>âKgBg@ĄNgAgDgJgHgC«gEgGgKgLgNgIÉgMgSgOŮDgPgUgXgTóŻgVgWgZg]gYŽg[â4g\âLŢg^<-g_g`gagbgcކfŢŢŢwîŢŢŢ Ţ”@Ţ Ţ -Ţ Ţ ŢŢŢŢ ŢŢŢŢŢ޸ďŢŢŢŢĹžŢâMŢ!Ţ"Ţ%Ţ ÎTŢ#Ţ*Ţ&ĺ×Ţ'Ţ(Ţ)Ţ,Ţ-Ţ1Ţ+ěčŢ.Ţ0Ţ7Ţ2dŢ3Ţ4Ţ5Ţ6Ţ=Ţ;Ţ8 şŢ9Ţ>Ţ?ŢFŢ<iŢ@ŢAŢBŢCŢDŢEâNŢOŢGLBLFLA_ëLCLELHLLLGmLILKLNLRLM+LOLQâQLTLXLSŽ3LULWLZL_LY˘OL[L]L^La·L`±GLb··!d···é +z z z zzzzzzzzzzzzzzzzzzz z!z"z$_}!z#aczÎJz'z%÷TăAz)z*z+z,z-z.z/z0z1z2z4z(Ĺăăăăăăăă ăăz:z;z<BÍzBz@z5+Łz=z?z6z7z8z9GăzCzDzIzAS&zEă8ă7ă6zGzHă zNzOŚŻzSzJwúzPzQzKzLzMcbzUzVzXzT“YzWÓÓzY¨^zZz\z]z^z_z`zazbzcăBŹÓÓÓ4ÓÓÓÓÓÓÓ Ó +Ó Ó Ó ÓÓÓÓÓă9ÓÓ Ó&ŹÓÓÓÓÓÓÓÓ"Ó'Ó!EoÓ#Ó&Ó)Ó*Ó+Ó2Ó(gęÓ,Ó-Ó.Ó/Ó0Ó1Ó4Ó5Ó@Ó3:Ó6Ó7Ó8Ó9Ó:Ó;Ó<Ó=Ó>ă:Ó?ÓBÓCÓIÓAťďÓDăCÓOÓJ˛IÓKÓWÓPÄÓQÓTÓ]ÓX×çÓYÓ_Ó`Óa4Ó^îćÓb4ă 4^ŕ4 444444 +T54 4ăD44d444v44"4Ž44 4!4(4#˘4$4,4)´°4*4.4/464-Ît4045ăE494=47í˘484?4@4C4>4A4_4E4M4K4Dí4F4J4O4Q4L$ç4N4U4R6)4S4W4X4Y4Z4[4\4b4`4V74]ă<ăF4cŤŤ4aU!Ť°±ŤŤŤŤŤŤ Ť…FŤ Ť ŤŤŤ ¤ŤŤŤŤŤŤŤŤŤŤµ»ŤŤŤŤŘĽŤŤ!Ť"Ť#Ť'Ť Ű>Ť$Ť&ăGŤ+Ť(úxŤ)Ť*Ť-Ť.Ť/Ť3Ť,ńŤ0Ť2Ť5Ť6Ť7Ť;Ť4 †Ť8Ť:Ť?Ť<>XŤ=Ť>ŤAŤBŤCŤGŤ@J׍DŤFŤJŤHhĎŤIăHŤLŤMŤNŤRŤKkRŤOŤQŤ[ŤS…ňŤTŤUŤVŤWŤXŤYŤZŤ]Ť^Ť_ŤcŤ\—ÍŤ`ŤbţţţţŢNţţ÷eţţ ţ ţóźţ +ă;ţ ţţţţţţţţţţţţţăIţţţţţ ţ!ţ"ţ$ţ(żţ#ţ&ţ,ţ*ţ%C1ţ'ţ)ţ-ţ.ţ/ţ0ţ1ţ2ţ4ţ+c5ţ3ţ6ţ7ţ9ţ5€›ţ8ţ;ţ<ţ=ţ>ţ?ţ@ţAţEţ:’řţBţDţHţF±^ţGăJţJţKţLţMţNţTţUţRţI˛ÓţOţQţWţSŃ$ţVţYţZţ[ţ\ţ]ţaţXÖ ţ^ţ`ţcgţbô™gHggggg +g*¤gg R[ggg E“ggăKg g gggg`¶”%ggÁ˝ggggg!gÍăgg g#Ęg$g%g*g"ěĹg&g'g(g)g6g-g+0g,g7g.Lg5g/g0g1g2g3g4"hU×g9g:g;g?g8og<g>ăLgBg@ĄNgAgDgJgHgC«gEgGgKgLgNgIÉgMgSgOŮDgPgUgXgTóŻgVgWgZg]gYŽg[ă5g\ăMŢg^<-g_g`gagbgcކfŢŢŢwîŢŢŢ Ţ”@Ţ Ţ +Ţ Ţ ŢŢŢŢ ŢŢŢŢŢ޸ďŢŢŢŢĹžŢăNŢ!Ţ"Ţ%Ţ ÎTŢ#Ţ*Ţ&ĺ×Ţ'Ţ(Ţ)Ţ,Ţ-Ţ1Ţ+ěčŢ.Ţ0Ţ7Ţ2dŢ3Ţ4Ţ5Ţ6Ţ=Ţ;Ţ8 şŢ9Ţ>Ţ?ŢFŢ<iŢ@ŢAŢBŢCŢDŢEăOŢOŢGLBLFLA_ëLCLELHLLLGmLILKLNLRLM+LOLQăRLTLXLSŽ3LULWLZL_LY˘OL[L]L^La·L`±GLb··!Đ···é ·· ·ţŕ· · -· · ····· ę·âR·· ę··$· 5Ř······· ·!·"·#·(·% V·&·.·) W·*·,·-·4·/ qú·0·2·3·;·5 „ą·6·8·9·:âS·?·< –‘·=·C·@  ý·A·G·D ®q·E·K·H łA·I·O·L ą8·M·S·P ľ|·QâT·Y·T Öj·U·V·W·Xâ3·]·Z ë·[·c·^!†·_·`·a·b%%!<Š%"¶%% %!Ts%%%%% % -!i % âU%%!F%%%%%%!•…%%%!­˙%%%%%!%!Â%%'%"!Ú‹%#%$%%%&%+%(!îÜ%)âV%3%,"ú%-%.%/â2%0%1%2%8%4" ć%5%7%=%9"7%:%<%?%@%C%>"MP%A%F%G%H%D"hc%E%N%I"‘;%J%L%MâW%T%O"źf%P%R%S%Z%U"Ą%V%X%Y%`%["«r%\%^%_‘%a"łŃ%b$ n‘‘‘"ŰK‘‘‘‘ ‘‘"î‘ -‘ ‘ âX‘‘‘#v‘‘‘‘‘‘#‘‘‘‘‘#‘#"]‘‘!‘"‘%‘*‘$#@‘&‘(‘)‘-‘+#]2‘,‘1‘.#_˙‘/âY‘3‘4‘5‘9‘2#eł‘6‘8‘E‘;‘<‘=‘>‘C‘A‘:#y­‘?‘F‘B#Šń‘D~`‘H‘I‘J‘K‘N‘G#Ŕ‘L‘Q‘O#ŢŞ‘P‘S‘T‘U‘V‘W‘Z‘R#ăT‘XâZ‘\‘_‘[#ű…‘]‘c‘`$ d‘a$8˘%Śt  - $Cz $[’$hIâ[$"$jĺ !%&')#$Ś4(+-*$¨v,/0197.$ş—2456:;=8$Ý <@>$÷Ţ?â\BDEFGHLA$ü]ICââNO%SÖP%‚%~ZVM%†QTUâ\~`W%@´[]^_XY%bđ~~a%dm~~~~ ~ -~ ~ ~ ~~bc%ĽY~~'p~%˝a~%ľW%ża%Ţ;& j~~~~~%çm~~~~~~~~&î~&&&%Á~)~+&dŮ~'~-~ &D—~(~*~,â]~!~"~#~$~%&oâ~&&pŢ&qî&‹‹&ĽĹ~5~8~.&–ľ~6~7~/~0&Ę~1~2~3&Ëq~4&Ěm&ÍŤ&ę~;~9&÷Ů~:~?~<&ü_~=~F~@']~A~D~Q~G'2n~H~X~R'Gă~Sâ^~[~Y'RĹ~Zâ~\'SS~]~^~_ââ*‰ ââ'žČâ ââââââââââââ â1â!â"â#'·â$'Óřâ%'÷čâ&(őâ'(5"â((]â)(®ěâ*(ż˝â+)Őâ,)2â-)(îâ.)‡¤â/)í»â0*<*@>*F¤*Lŕ*SŮ*\*b\*h›*nÚ*rl*w*}*â_â`âaâbâc % %*Ńp %*÷Ř 'G 'H 'I 'J 'K 'L 'M 'N 'O 'P 'Q 'R 'S 'T 'U 'V 'W 'X 'Y 'Z '[ '\ '] '^ '_ '` 'a 'b 'c F+(, F F F F F F F F F  F - F  F  F  F F F F F F F F F F F F F F F F F F F  F! F" F# F$ F% F& F' F( F) F* F+ F, F- F. F/ F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F: F; F< F= F> F? F@ FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ F[ F\ F] F^ F_ F` Fa Fb Fc+s+u6 +· · ····· ę·ăS·· ę··%· 6í······· ·!·"·#·$·)·& \‹·'·/·* ]t·+·-·.·5·0 xf·1·3·4·<·6 ‹%·7·9·:·;ăT·@·= śý·>·D·A §i·B·H·E ´Ý·F·L·I ą­·J·P·M ż¤·N·T·Q Äč·RăU·Z·U ÜÖ·V·W·X·Yă4·^·[ ń·\"·_! ň·`·a·b·c"ĽP""!Bµ"" +"!Zž"""" "" !o4" ăV""!‡q""""""!›°"""!´*"""""""!Č;" "("#!ŕ¶"$"%"&"'",")!ő"*ăW"4"-" %"."/"0ă3"1"2"3"9"5"'"6"8">":"=@";"="@"A"D"?"S{"B"G"H"I"E"nŽ"F"O"J"—f"K"M"NăX"U"P"Ą‘"Q"S"T"["V"«1"W"Y"Z"a"\"±ť"]"_"`’"b"ąü"c$ě’’’"áÉ’’’’ +’’ "ô–’ ’ ’ăY’’’#ô’’’’’’#•’’’’’$’#(Ű’ ’"’#’&’+’%#F’'’)’*’.’,#c°’-’2’/#f}’0ăZ’4’5’6’:’3#l1’7’9’F’<’=’>’?’D’B’;#€+’@’G’C#‘o’Ea’I’J’K’L’O’H#Ć˙’M’R’P#ĺ(’Q’T’U’V’W’X’[’S#éŇ’Yă[’]’`’\$’^ý’a$â’b%’Ëýýýý$>ůýýý ý +ý ýý$IŃý ýýýýý$aéýýý$n ýă\ýýý%ý#ý$q<ýýý ý!ý"ý&ý'ý(ý*ý$$’‹ý)ý,ý.ý+$®Íý-ý0ý1ý2ý:ý8ý/$Ŕîý3ý5ý6ý7ý;ý<ý>ý9$ăbý=ýAý?$ţ5ý@ă]ýCýEýFýGýHýIýMýB%´ýJýDăăýOýP%Z-ýQ%|ý[ýWýN%"ÝýRýUýVăý]ýaýX%G ý\ý^ý_ý`ýYýZ%iGýb%jÄ  +   ýc%Ââ'v %Ăę%Äŕ%Ĺę%äÄ&ó %íö&w&&Ž&,J*,&kb(.!&K )+-ă^"#$%&&vk'&wg&xw&’&ĂN69/&ťG7801&Љ234&Ńú5&Ňö&Ô&ń!<:&ţb;@='č>GA'!ćBERH'8÷IYS'NlTă_\Z'YN[ă]'YÜ^_`ăă*Îăă 'ĄBă +ăăăăăăăăăăă ă!ă2ă"ă#ă$'˝“ă%'Úră&'ţbă'(oă((;śă)(c”ă*(µfă+(Ć7ă,)Oă-) óă.)0Żă/)Źeă0)ő|ă1*CÓ*G˙*Ne*Tˇ*[š*cŮ*j*p\*v›*z-*~Ă*„Ĺ*ŠÇă`ăaăbăc & & &*Ů™ &+2 (H (I (J (K (L (M (N (O (P (Q (R (S (T (U (V (W (X (Y (Z ([ (\ (] (^ (_ (` (a (b (c F+/Ň F F F F F F F F F  F + F  F  F  F F F F F F F F F F F F F F F F F F F  F! F" F# F$ F% F& F' F( F) F* F+ F, F- F. F/ F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F: F; F< F= F> F? F@ FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ F[ F\ F] F^ F_ F` Fa Fb Fc «+}4 «+{+~• endstream endobj startxref -2848054 +2850453 %%EOF diff --git a/docs/src/toolsrout.tex b/docs/src/toolsrout.tex index d026f5859..d58faadcb 100644 --- a/docs/src/toolsrout.tex +++ b/docs/src/toolsrout.tex @@ -1780,6 +1780,9 @@ Returned as: an \verb|integer(psb_long_int_k_)| number. \clearpage\subsection{Sorting utilities --- } %\addcontentsline{toc}{subsection}{Sorting utilities} +{\par\noindent\large\bfseries psb\_isort --- Sorting by the Insertion-sort + algorithm} + {\par\noindent\large\bfseries psb\_msort --- Sorting by the Merge-sort algorithm} @@ -1788,13 +1791,14 @@ Returned as: an \verb|integer(psb_long_int_k_)| number. {\par\noindent\large\bfseries psb\_hsort --- Sorting by the Heapsort algorithm} \begin{verbatim} +call psb_isort(x,ix,dir,flag) call psb_msort(x,ix,dir,flag) call psb_qsort(x,ix,dir,flag) call psb_hsort(x,ix,dir,flag) \end{verbatim} These serial routines sort a sequence $X$ into ascending or -descending order. The argument meaning is identical for the three +descending order. The argument meaning is identical for all calls; the only difference is the algorithm used to accomplish the task (see Usage Notes below). \begin{description} @@ -1843,7 +1847,7 @@ position as the corresponding entries in $x$. the imaginary part) or on the absolute values; \item The routines return the items in the chosen ordering; the output difference is the handling of ties (i.e. items with an - equal value) in the original input. With the merge-sort algorithm + equal value) in the original input. With the insertion-sort or merge-sort algorithms ties are preserved in the same relative order as they had in the original sequence, while this is not guaranteed for quicksort or heapsort; @@ -1854,11 +1858,15 @@ position as the corresponding entries in $x$. occupied in the original data sequence; \item If $flag = psb\_sort\_keep\_idx\_$ the routine will assume that the entries in $ix(:)$ have already been initialized by the user; -\item The three sorting algorithms have a similar $O(n \log n)$ expected - running time; in the average case quicksort will be the +\item Three sorting algorithms have a similar $O(n \log n)$ expected + running time, whereas insertion sort has an expected running time + $O(n^2)$; of the other three, in the average case quicksort will be the fastest and merge-sort the slowest. However note that: -\begin{enumerate} -\item The worst case running time for quicksort is $O(n^2)$; the algorithm + \begin{enumerate} + \item The the best case running time for insertion sort is $\Omega(n)$ while the average + and worst case are $O(n^2)$; however for very short input sequences this is + likely to be the fastest method; + \item The worst case running time for quicksort is $O(n^2)$; the algorithm implemented here follows the well-known median-of-three heuristics, but the worst case may still apply; \item The worst case running time for merge-sort and heap-sort is From 4cd6cf21d02f86ee9ae7ca1cdc2589fd8fd12eaa Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Wed, 1 Oct 2025 14:34:00 +0200 Subject: [PATCH 024/175] Exposed to c the psb_is_owned function --- cbind/base/psb_base_tools_cbind_mod.F90 | 20 ++++++++++++++++++++ cbind/base/psb_c_base.h | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 index 7126ced8e..d8aa07693 100644 --- a/cbind/base/psb_base_tools_cbind_mod.F90 +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -390,5 +390,25 @@ contains end function psb_c_cd_get_global_indices + function psb_c_is_owned(x,cdh) bind(c,name='psb_c_is_owned') result(res) + implicit none + type(psb_c_object_type) :: cdh + integer(psb_c_lpk_), value :: x + logical(c_bool) :: res + ! Internal variables + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info + logical :: fowned + res = .false. + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + fowned = psb_is_owned(x+(1-psb_c_get_index_base()),descp) + if (fowned) then + res = .true. + end if + end if + + end function psb_c_is_owned + end module psb_base_tools_cbind_mod diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index f28f7bbbd..6dacb3dee 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -80,7 +80,7 @@ extern "C" { psb_i_t psb_c_cdasb(psb_c_descriptor *cd); psb_i_t psb_c_cdfree(psb_c_descriptor *cd); psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd); - + bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); From f120015ff55fcf70bc7aebe6e28f27cd7a22ca47 Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Fri, 3 Oct 2025 15:16:28 +0200 Subject: [PATCH 025/175] Exposed psb_c_cd_is_asb to check is descriptor is assembled --- cbind/base/psb_base_tools_cbind_mod.F90 | 21 +++++++++++++++++++++ cbind/base/psb_c_base.h | 1 + 2 files changed, 22 insertions(+) diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 index d8aa07693..5f9cdf75b 100644 --- a/cbind/base/psb_base_tools_cbind_mod.F90 +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -277,6 +277,27 @@ contains return end function psb_c_cdins + function psb_c_cd_is_asb(cdh) bind(c,name='psb_c_cd_is_asb') result(res) + implicit none + + logical(c_bool) :: res + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + + res = .false. + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + if (descp%is_asb()) then + res = .true. + else + res = .false. + end if + end if + + end function psb_c_cd_is_asb + function psb_c_cd_get_local_rows(cdh) bind(c,name='psb_c_cd_get_local_rows') result(res) diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 6dacb3dee..5ae62cac3 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -81,6 +81,7 @@ extern "C" { psb_i_t psb_c_cdfree(psb_c_descriptor *cd); psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd); bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); + bool psb_c_cd_is_asb(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); From 6ef434bcbe70709172ee3756aaa810f37c27649e Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 6 Oct 2025 17:14:25 +0200 Subject: [PATCH 026/175] Confg machinery to extract PSB version into psb_config.h --- base/modules/psb_config.h.in | 5 +++++ config/pac.m4 | 20 ++++++++++++++++++++ configure | 19 +++++++++++++++++++ configure.ac | 14 ++++++++++++++ 4 files changed, 58 insertions(+) diff --git a/base/modules/psb_config.h.in b/base/modules/psb_config.h.in index 3bf9a645d..e02580156 100644 --- a/base/modules/psb_config.h.in +++ b/base/modules/psb_config.h.in @@ -4,6 +4,11 @@ #define PSB_ERR_ERROR -1 #define PSB_ERR_SUCCESS 0 +#define PSB_VERSION_MAJOR @PSBLASMAJOR@ +#define PSB_VERSION_MINOR @PSBLASMINOR@ +#define PSB_VERSION_PATCHLEVEL @PSBLASPATCH@ +#define PSB_VERSION_STRING @PSBLASSTRING@ + @CSERIALMPI@ @PSB_IPKDEF@ diff --git a/config/pac.m4 b/config/pac.m4 index 9a9a1b0f3..90340c8d7 100644 --- a/config/pac.m4 +++ b/config/pac.m4 @@ -2348,3 +2348,23 @@ fi ] ) +dnl @synopsis PAC_FORTRAN_PSBLAS_VERSION( ) +dnl +dnl Will try to compile, link and run a program using the PSBLAS library. \ +dnl Checks for version major, minor and patchlevel +dnl +dnl Will use MPIFC, otherwise '$FC'. +dnl +dnl If the test passes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. +dnl +dnl @author Michele Martone +dnl @author Salvatore Filippone +dnl +AC_DEFUN(PAC_EXTRACT_PSBLAS_VERSION, +[AC_MSG_CHECKING([for version data of PSBLAS]) + pac_const_file="base/modules/psb_const_mod.F90"; + pac_cv_psblas_version_major=`cat $pac_const_file| grep version_major`; + pac_cv_psblas_version_minor=`cat $pac_const_file | grep version_minor `; + pac_cv_psblas_patchlevel=`cat $pac_const_file | grep patchlevel `; + pac_cv_psblas_version_string=`cat $pac_const_file | grep version_string `; +]) diff --git a/configure b/configure index 1a23fa649..ef5867a5a 100755 --- a/configure +++ b/configure @@ -690,6 +690,10 @@ CINTMETIS CHAVEMETIS CHAVE_OPENMP CSERIALMPI +PSBLASSTRING +PSBLASPATCH +PSBLASMINOR +PSBLASMAJOR PSB_LPKDEF PSB_IPKDEF FINCLUDES @@ -8745,6 +8749,17 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu +###################### +# Extract version data +###################### +#PAC_EXTRACT_PSBLAS_VERSION +CFILE="base/modules/psb_const_mod.F90"; +PSBLASMAJOR=`cat $CFILE| grep version_major | $AWK '{print $6;}'`; +PSBLASMINOR=`cat $CFILE| grep version_minor| $AWK '{print $6;}'`; +PSBLASPATCH=`cat $CFILE| grep patchlevel| $AWK '{print $6;}'`; +PSBLASSTRING=`cat $CFILE | grep version_string | $AWK '{print $6;}'`; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: version $PSBLASSTRING" >&5 +printf "%s\n" " version $PSBLASSTRING" >&6; } ############################################################################### # Additional pathname stuff (yes, it is redundant and confusing...) @@ -11694,6 +11709,10 @@ FDEFINES=$(PSBFDEFINES) + + + + diff --git a/configure.ac b/configure.ac index 3b6aedbd7..ad5e573f4 100644 --- a/configure.ac +++ b/configure.ac @@ -680,6 +680,16 @@ PAC_FORTRAN_TEST_FLUSH( [FDEFINES="$psblas_cv_define_prepend-DPSB_HAVE_FLUSH_STMT $FDEFINES"], ) +###################### +# Extract version data +###################### +#PAC_EXTRACT_PSBLAS_VERSION +CFILE="base/modules/psb_const_mod.F90"; +PSBLASMAJOR=`cat $CFILE| grep version_major | $AWK '{print $6;}'`; +PSBLASMINOR=`cat $CFILE| grep version_minor| $AWK '{print $6;}'`; +PSBLASPATCH=`cat $CFILE| grep patchlevel| $AWK '{print $6;}'`; +PSBLASSTRING=`cat $CFILE | grep version_string | $AWK '{print $6;}'`; +AC_MSG_RESULT([ version $PSBLASSTRING]) ############################################################################### # Additional pathname stuff (yes, it is redundant and confusing...) @@ -1051,6 +1061,10 @@ FDEFINES=$(PSBFDEFINES) AC_SUBST(PSB_IPKDEF) AC_SUBST(PSB_LPKDEF) +AC_SUBST(PSBLASMAJOR) +AC_SUBST(PSBLASMINOR) +AC_SUBST(PSBLASPATCH) +AC_SUBST(PSBLASSTRING) AC_SUBST(CSERIALMPI) AC_SUBST(CHAVE_OPENMP) AC_SUBST(CHAVEMETIS) From 1bba419d795d1888869be09b4bbfd813ada0f645 Mon Sep 17 00:00:00 2001 From: Marco Feder Date: Mon, 6 Oct 2025 19:05:59 +0200 Subject: [PATCH 027/175] Add local indices to psb_c_cdall C interface --- cbind/base/psb_base_tools_cbind_mod.F90 | 42 +++++++++++++++++++++++++ cbind/base/psb_c_base.h | 1 + 2 files changed, 43 insertions(+) diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 index 5f9cdf75b..b5ee8cff6 100644 --- a/cbind/base/psb_base_tools_cbind_mod.F90 +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -141,6 +141,48 @@ contains end function psb_c_cdall_vl_opt + function psb_c_cdall_vl_lidx(nl,vl,lidx,cctxt,cdh) bind(c,name='psb_c_cdall_vl_lidx') result(res) + implicit none + + integer(psb_c_ipk_) :: res + type(psb_c_object_type), value :: cctxt + integer(psb_c_ipk_), value :: nl + integer(psb_c_lpk_) :: vl(*) + integer(psb_c_lpk_) :: lidx(*) + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + type(psb_ctxt_type) :: ctxt + ctxt = psb_c2f_ctxt(cctxt) + + res = -1 + if (nl <=0) then + write(0,*) 'Invalid size' + return + end if + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call descp%free(info) + if (info == 0) deallocate(descp,stat=info) + if (info /= 0) return + end if + + allocate(descp,stat=info) + if (info < 0) return + + ixb = psb_c_get_index_base() + + if (ixb == 1) then + call psb_cdall(ctxt,descp,info,vl=vl(1:nl),lidx=int(lidx(1:nl),psb_ipk_)) + else + call psb_cdall(ctxt,descp,info,vl=(vl(1:nl)+(1-ixb)),lidx=int(lidx(1:nl)+(1-ixb),psb_ipk_)) + end if + cdh%item = c_loc(descp) + res = info + + end function psb_c_cdall_vl_lidx + function psb_c_cdall_nl(nl,cctxt,cdh) bind(c,name='psb_c_cdall_nl') result(res) implicit none diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 5ae62cac3..81cddb057 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -75,6 +75,7 @@ extern "C" { void psb_c_delete_ctxt(psb_c_ctxt *); psb_i_t psb_c_cdall_vg(psb_l_t ng, psb_i_t *vg, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_vl(psb_i_t nl, psb_l_t *vl, psb_c_ctxt cctxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_vl_lidx(psb_i_t nl, psb_l_t *vl, psb_l_t *lidx,psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_nl(psb_i_t nl, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_repl(psb_l_t n, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdasb(psb_c_descriptor *cd); From cd72888cd43a8557ba08b70c4eba4972f0cc8af2 Mon Sep 17 00:00:00 2001 From: Marco Feder Date: Tue, 7 Oct 2025 09:26:43 +0200 Subject: [PATCH 028/175] Expose variant of psb_cdins() with local indices to C interface --- cbind/base/psb_base_tools_cbind_mod.F90 | 36 ++++++++++++++++++++++--- cbind/base/psb_c_base.h | 3 ++- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 index b5ee8cff6..4029bfd2e 100644 --- a/cbind/base/psb_base_tools_cbind_mod.F90 +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -148,7 +148,7 @@ contains type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: nl integer(psb_c_lpk_) :: vl(*) - integer(psb_c_lpk_) :: lidx(*) + integer(psb_c_ipk_) :: lidx(*) type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp integer(psb_c_ipk_) :: info, ixb @@ -174,9 +174,9 @@ contains ixb = psb_c_get_index_base() if (ixb == 1) then - call psb_cdall(ctxt,descp,info,vl=vl(1:nl),lidx=int(lidx(1:nl),psb_ipk_)) + call psb_cdall(ctxt,descp,info,vl=vl(1:nl),lidx=lidx(1:nl)) else - call psb_cdall(ctxt,descp,info,vl=(vl(1:nl)+(1-ixb)),lidx=int(lidx(1:nl)+(1-ixb),psb_ipk_)) + call psb_cdall(ctxt,descp,info,vl=(vl(1:nl)+(1-ixb)),lidx=(lidx(1:nl)+(1-ixb))) end if cdh%item = c_loc(descp) res = info @@ -319,6 +319,36 @@ contains return end function psb_c_cdins + + function psb_c_cdins_lidx(nz,ja,lidx,cdh) bind(c,name='psb_c_cdins_lidx') result(res) + + implicit none + integer(psb_c_ipk_) :: res + integer(psb_c_ipk_), value :: nz + type(psb_c_object_type) :: cdh + integer(psb_c_lpk_) :: ja(*) + integer(psb_c_ipk_) :: lidx(*) + + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: ixb,info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + ixb = psb_c_get_index_base() + + if (ixb == 1) then + call psb_cdins(nz,ja(1:nz),descp,info,lidx=lidx(1:nz)) + else + call psb_cdins(nz,(ja(1:nz)+(1-ixb)),descp,info,lidx=(lidx(1:nz)+(1-ixb))) + end if + + res = info + end if + return + end function psb_c_cdins_lidx + function psb_c_cd_is_asb(cdh) bind(c,name='psb_c_cd_is_asb') result(res) implicit none diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 81cddb057..ec130a9fc 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -75,12 +75,13 @@ extern "C" { void psb_c_delete_ctxt(psb_c_ctxt *); psb_i_t psb_c_cdall_vg(psb_l_t ng, psb_i_t *vg, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_vl(psb_i_t nl, psb_l_t *vl, psb_c_ctxt cctxt, psb_c_descriptor *cd); - psb_i_t psb_c_cdall_vl_lidx(psb_i_t nl, psb_l_t *vl, psb_l_t *lidx,psb_c_ctxt cctxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_vl_lidx(psb_i_t nl, psb_l_t *vl, psb_i_t *lidx, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_nl(psb_i_t nl, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_repl(psb_l_t n, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdasb(psb_c_descriptor *cd); psb_i_t psb_c_cdfree(psb_c_descriptor *cd); psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd); + psb_i_t psb_c_cdins_lidx(psb_i_t nz, const psb_l_t *ja, const psb_i_t *lidx, psb_c_descriptor *cd); bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); bool psb_c_cd_is_asb(psb_c_descriptor *cd); From ed97717037a571a0b7519896281e8fed996f1112 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 8 Oct 2025 12:54:59 +0200 Subject: [PATCH 029/175] Change name of an error constant. --- base/modules/psb_const_mod.F90 | 13 +++++++------ base/modules/psb_error_mod.F90 | 2 +- base/tools/psb_cdals.f90 | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index d10bf9746..395f45741 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -185,11 +185,12 @@ module psb_const_mod ! The up/down constant are defined in pairs having ! opposite values. We make use of this fact in the heapsort routine. ! - integer(psb_ipk_), parameter :: psb_sort_up_ = 1, psb_sort_down_ = -1 - integer(psb_ipk_), parameter :: psb_lsort_up_ = 2, psb_lsort_down_ = -2 - integer(psb_ipk_), parameter :: psb_asort_up_ = 3, psb_asort_down_ = -3 - integer(psb_ipk_), parameter :: psb_alsort_up_ = 4, psb_alsort_down_ = -4 - integer(psb_ipk_), parameter :: psb_sort_ovw_idx_ = 0, psb_sort_keep_idx_ = 1 + integer(psb_ipk_), parameter :: psb_sort_up_ = 1, psb_sort_down_ = -1 + integer(psb_ipk_), parameter :: psb_lsort_up_ = 2, psb_lsort_down_ = -2 + integer(psb_ipk_), parameter :: psb_asort_up_ = 3, psb_asort_down_ = -3 + integer(psb_ipk_), parameter :: psb_alsort_up_ = 4, psb_alsort_down_ = -4 + integer(psb_ipk_), parameter :: psb_sort_ovw_idx_ = 0, psb_sort_keep_idx_ = 1 + integer(psb_ipk_), parameter :: psb_sort_reord_x_ = 0, psb_sort_noreord_x_ = 1 integer(psb_ipk_), parameter :: psb_heap_resize = 200 integer(psb_ipk_), parameter :: psb_find_any_ = 0 integer(psb_ipk_), parameter :: psb_find_first_ge_ = 1 @@ -282,7 +283,7 @@ module psb_const_mod integer(psb_ipk_), parameter, public :: psb_err_parm_differs_among_procs_=550 integer(psb_ipk_), parameter, public :: psb_err_entry_out_of_bounds_=551 integer(psb_ipk_), parameter, public :: psb_err_inconsistent_index_lists_=552 - integer(psb_ipk_), parameter, public :: psb_err_partfunc_toomuchprocs_=570 + integer(psb_ipk_), parameter, public :: psb_err_partfunc_toomanyprocs_=570 integer(psb_ipk_), parameter, public :: psb_err_partfunc_toofewprocs_=575 integer(psb_ipk_), parameter, public :: psb_err_partfunc_wrong_pid_=580 integer(psb_ipk_), parameter, public :: psb_err_no_optional_arg_=581 diff --git a/base/modules/psb_error_mod.F90 b/base/modules/psb_error_mod.F90 index f47f884be..a13dd97f0 100644 --- a/base/modules/psb_error_mod.F90 +++ b/base/modules/psb_error_mod.F90 @@ -750,7 +750,7 @@ contains achmsg(1) = tmpmsg write(achmsg(2),'("Index lists are inconsistent: some indices are orphans")') - case(psb_err_partfunc_toomuchprocs_) + case(psb_err_partfunc_toomanyprocs_) allocate(achmsg(4)) achmsg(1) = tmpmsg write(achmsg(2),& diff --git a/base/tools/psb_cdals.f90 b/base/tools/psb_cdals.f90 index 92ad3e94c..2b1aa8c5e 100644 --- a/base/tools/psb_cdals.f90 +++ b/base/tools/psb_cdals.f90 @@ -175,7 +175,7 @@ subroutine psb_cdals(m, n, parts, ctxt, desc, info) if (info == psb_success_) then call parts(iglob,m,np,prc_v,nprocs) if (nprocs > np) then - info=psb_err_partfunc_toomuchprocs_ + info=psb_err_partfunc_toomanyprocs_ call psb_errpush(info,name,l_err=(/3_psb_lpk_,np*lone,nprocs*lone,iglob/)) goto 9999 else if (nprocs <= 0) then From 246bd70b3a851cfcccf3c52af8706a00190b2a4e Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 8 Oct 2025 12:55:23 +0200 Subject: [PATCH 030/175] Modify sorting with REORD. Document same. --- base/modules/auxil/psb_c_hsort_mod.f90 | 4 +- base/modules/auxil/psb_c_isort_mod.f90 | 4 +- base/modules/auxil/psb_c_msort_mod.f90 | 4 +- base/modules/auxil/psb_c_qsort_mod.f90 | 4 +- base/modules/auxil/psb_d_hsort_mod.f90 | 4 +- base/modules/auxil/psb_d_isort_mod.f90 | 4 +- base/modules/auxil/psb_d_msort_mod.f90 | 4 +- base/modules/auxil/psb_d_qsort_mod.f90 | 4 +- base/modules/auxil/psb_e_hsort_mod.f90 | 4 +- base/modules/auxil/psb_e_isort_mod.f90 | 4 +- base/modules/auxil/psb_e_msort_mod.f90 | 4 +- base/modules/auxil/psb_e_qsort_mod.f90 | 4 +- base/modules/auxil/psb_i2_hsort_mod.f90 | 4 +- base/modules/auxil/psb_i2_isort_mod.f90 | 4 +- base/modules/auxil/psb_i2_msort_mod.f90 | 4 +- base/modules/auxil/psb_i2_qsort_mod.f90 | 4 +- base/modules/auxil/psb_m_hsort_mod.f90 | 4 +- base/modules/auxil/psb_m_isort_mod.f90 | 4 +- base/modules/auxil/psb_m_msort_mod.f90 | 4 +- base/modules/auxil/psb_m_qsort_mod.f90 | 4 +- base/modules/auxil/psb_s_hsort_mod.f90 | 4 +- base/modules/auxil/psb_s_isort_mod.f90 | 4 +- base/modules/auxil/psb_s_msort_mod.f90 | 4 +- base/modules/auxil/psb_s_qsort_mod.f90 | 4 +- base/modules/auxil/psb_z_hsort_mod.f90 | 4 +- base/modules/auxil/psb_z_isort_mod.f90 | 4 +- base/modules/auxil/psb_z_msort_mod.f90 | 4 +- base/modules/auxil/psb_z_qsort_mod.f90 | 4 +- base/serial/sort/psb_c_hsort_impl.f90 | 85 +- base/serial/sort/psb_c_isort_impl.f90 | 81 +- base/serial/sort/psb_c_msort_impl.f90 | 35 +- base/serial/sort/psb_c_qsort_impl.f90 | 65 +- base/serial/sort/psb_d_hsort_impl.f90 | 85 +- base/serial/sort/psb_d_isort_impl.f90 | 69 +- base/serial/sort/psb_d_msort_impl.f90 | 38 +- base/serial/sort/psb_d_qsort_impl.f90 | 61 +- base/serial/sort/psb_e_hsort_impl.f90 | 85 +- base/serial/sort/psb_e_isort_impl.f90 | 69 +- base/serial/sort/psb_e_msort_impl.f90 | 38 +- base/serial/sort/psb_e_qsort_impl.f90 | 61 +- base/serial/sort/psb_m_hsort_impl.f90 | 85 +- base/serial/sort/psb_m_isort_impl.f90 | 69 +- base/serial/sort/psb_m_msort_impl.f90 | 38 +- base/serial/sort/psb_m_qsort_impl.f90 | 61 +- base/serial/sort/psb_s_hsort_impl.f90 | 85 +- base/serial/sort/psb_s_isort_impl.f90 | 69 +- base/serial/sort/psb_s_msort_impl.f90 | 38 +- base/serial/sort/psb_s_qsort_impl.f90 | 61 +- base/serial/sort/psb_z_hsort_impl.f90 | 85 +- base/serial/sort/psb_z_isort_impl.f90 | 81 +- base/serial/sort/psb_z_msort_impl.f90 | 35 +- base/serial/sort/psb_z_qsort_impl.f90 | 65 +- docs/html/userhtmlse6.html | 135 +- docs/psblas-3.9.pdf | 3605 ++++++++++++----------- docs/src/toolsrout.tex | 28 +- test/openacc/Makefile | 7 +- test/openacc/runs/ppde.inp | 19 - 57 files changed, 3176 insertions(+), 2274 deletions(-) delete mode 100644 test/openacc/runs/ppde.inp diff --git a/base/modules/auxil/psb_c_hsort_mod.f90 b/base/modules/auxil/psb_c_hsort_mod.f90 index e7eb2fbf7..863614c9a 100644 --- a/base/modules/auxil/psb_c_hsort_mod.f90 +++ b/base/modules/auxil/psb_c_hsort_mod.f90 @@ -44,10 +44,10 @@ module psb_c_hsort_mod use psb_const_mod interface psb_hsort - subroutine psb_chsort(x,ix,dir,flag) + subroutine psb_chsort(x,ix,dir,flag,reord) import complex(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_chsort end interface psb_hsort diff --git a/base/modules/auxil/psb_c_isort_mod.f90 b/base/modules/auxil/psb_c_isort_mod.f90 index d0dbd2815..302a2d8ec 100644 --- a/base/modules/auxil/psb_c_isort_mod.f90 +++ b/base/modules/auxil/psb_c_isort_mod.f90 @@ -44,10 +44,10 @@ module psb_c_isort_mod use psb_const_mod interface psb_isort - subroutine psb_cisort(x,ix,dir,flag) + subroutine psb_cisort(x,ix,dir,flag,reord) import complex(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_cisort end interface psb_isort diff --git a/base/modules/auxil/psb_c_msort_mod.f90 b/base/modules/auxil/psb_c_msort_mod.f90 index a74c32fd7..54103747c 100644 --- a/base/modules/auxil/psb_c_msort_mod.f90 +++ b/base/modules/auxil/psb_c_msort_mod.f90 @@ -55,10 +55,10 @@ module psb_c_msort_mod interface psb_msort - subroutine psb_cmsort(x,ix,dir,flag) + subroutine psb_cmsort(x,ix,dir,flag,reord) import complex(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_cmsort end interface psb_msort diff --git a/base/modules/auxil/psb_c_qsort_mod.f90 b/base/modules/auxil/psb_c_qsort_mod.f90 index 6c4ceb3f8..178fdc721 100644 --- a/base/modules/auxil/psb_c_qsort_mod.f90 +++ b/base/modules/auxil/psb_c_qsort_mod.f90 @@ -45,10 +45,10 @@ module psb_c_qsort_mod interface psb_qsort - subroutine psb_cqsort(x,ix,dir,flag) + subroutine psb_cqsort(x,ix,dir,flag,reord) import complex(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_cqsort end interface psb_qsort diff --git a/base/modules/auxil/psb_d_hsort_mod.f90 b/base/modules/auxil/psb_d_hsort_mod.f90 index 570f27b1b..e9d10a706 100644 --- a/base/modules/auxil/psb_d_hsort_mod.f90 +++ b/base/modules/auxil/psb_d_hsort_mod.f90 @@ -44,10 +44,10 @@ module psb_d_hsort_mod use psb_const_mod interface psb_hsort - subroutine psb_dhsort(x,ix,dir,flag) + subroutine psb_dhsort(x,ix,dir,flag,reord) import real(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_dhsort end interface psb_hsort diff --git a/base/modules/auxil/psb_d_isort_mod.f90 b/base/modules/auxil/psb_d_isort_mod.f90 index b34a3dfff..e5e2a09a6 100644 --- a/base/modules/auxil/psb_d_isort_mod.f90 +++ b/base/modules/auxil/psb_d_isort_mod.f90 @@ -44,10 +44,10 @@ module psb_d_isort_mod use psb_const_mod interface psb_isort - subroutine psb_disort(x,ix,dir,flag) + subroutine psb_disort(x,ix,dir,flag,reord) import real(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_disort end interface psb_isort diff --git a/base/modules/auxil/psb_d_msort_mod.f90 b/base/modules/auxil/psb_d_msort_mod.f90 index d035486b7..3c4559bfe 100644 --- a/base/modules/auxil/psb_d_msort_mod.f90 +++ b/base/modules/auxil/psb_d_msort_mod.f90 @@ -55,10 +55,10 @@ module psb_d_msort_mod interface psb_msort - subroutine psb_dmsort(x,ix,dir,flag) + subroutine psb_dmsort(x,ix,dir,flag,reord) import real(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_dmsort end interface psb_msort diff --git a/base/modules/auxil/psb_d_qsort_mod.f90 b/base/modules/auxil/psb_d_qsort_mod.f90 index 4da0b840a..4a9953d8b 100644 --- a/base/modules/auxil/psb_d_qsort_mod.f90 +++ b/base/modules/auxil/psb_d_qsort_mod.f90 @@ -64,10 +64,10 @@ module psb_d_qsort_mod end interface psb_ssrch interface psb_qsort - subroutine psb_dqsort(x,ix,dir,flag) + subroutine psb_dqsort(x,ix,dir,flag,reord) import real(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_dqsort end interface psb_qsort diff --git a/base/modules/auxil/psb_e_hsort_mod.f90 b/base/modules/auxil/psb_e_hsort_mod.f90 index 5433cec4a..3bc38743a 100644 --- a/base/modules/auxil/psb_e_hsort_mod.f90 +++ b/base/modules/auxil/psb_e_hsort_mod.f90 @@ -44,10 +44,10 @@ module psb_e_hsort_mod use psb_const_mod interface psb_hsort - subroutine psb_ehsort(x,ix,dir,flag) + subroutine psb_ehsort(x,ix,dir,flag,reord) import integer(psb_epk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_epk_), optional, intent(inout) :: ix(:) end subroutine psb_ehsort end interface psb_hsort diff --git a/base/modules/auxil/psb_e_isort_mod.f90 b/base/modules/auxil/psb_e_isort_mod.f90 index ead8af045..4006c4120 100644 --- a/base/modules/auxil/psb_e_isort_mod.f90 +++ b/base/modules/auxil/psb_e_isort_mod.f90 @@ -44,10 +44,10 @@ module psb_e_isort_mod use psb_const_mod interface psb_isort - subroutine psb_eisort(x,ix,dir,flag) + subroutine psb_eisort(x,ix,dir,flag,reord) import integer(psb_epk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_epk_), optional, intent(inout) :: ix(:) end subroutine psb_eisort end interface psb_isort diff --git a/base/modules/auxil/psb_e_msort_mod.f90 b/base/modules/auxil/psb_e_msort_mod.f90 index 5a0758dda..ef9d5b8d6 100644 --- a/base/modules/auxil/psb_e_msort_mod.f90 +++ b/base/modules/auxil/psb_e_msort_mod.f90 @@ -62,10 +62,10 @@ module psb_e_msort_mod interface psb_msort - subroutine psb_emsort(x,ix,dir,flag) + subroutine psb_emsort(x,ix,dir,flag,reord) import integer(psb_epk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_epk_), optional, intent(inout) :: ix(:) end subroutine psb_emsort end interface psb_msort diff --git a/base/modules/auxil/psb_e_qsort_mod.f90 b/base/modules/auxil/psb_e_qsort_mod.f90 index 09f45d459..bfd9aa0d2 100644 --- a/base/modules/auxil/psb_e_qsort_mod.f90 +++ b/base/modules/auxil/psb_e_qsort_mod.f90 @@ -64,10 +64,10 @@ module psb_e_qsort_mod end interface psb_ssrch interface psb_qsort - subroutine psb_eqsort(x,ix,dir,flag) + subroutine psb_eqsort(x,ix,dir,flag,reord) import integer(psb_epk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_epk_), optional, intent(inout) :: ix(:) end subroutine psb_eqsort end interface psb_qsort diff --git a/base/modules/auxil/psb_i2_hsort_mod.f90 b/base/modules/auxil/psb_i2_hsort_mod.f90 index 6a6c96de4..76f7c3fe8 100644 --- a/base/modules/auxil/psb_i2_hsort_mod.f90 +++ b/base/modules/auxil/psb_i2_hsort_mod.f90 @@ -44,10 +44,10 @@ module psb_i2_hsort_mod use psb_const_mod interface psb_hsort - subroutine psb_i2hsort(x,ix,dir,flag) + subroutine psb_i2hsort(x,ix,dir,flag,reord) import integer(psb_i2pk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_i2hsort end interface psb_hsort diff --git a/base/modules/auxil/psb_i2_isort_mod.f90 b/base/modules/auxil/psb_i2_isort_mod.f90 index 115da75cb..a7b016624 100644 --- a/base/modules/auxil/psb_i2_isort_mod.f90 +++ b/base/modules/auxil/psb_i2_isort_mod.f90 @@ -44,10 +44,10 @@ module psb_i2_isort_mod use psb_const_mod interface psb_isort - subroutine psb_i2isort(x,ix,dir,flag) + subroutine psb_i2isort(x,ix,dir,flag,reord) import integer(psb_i2pk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_i2isort end interface psb_isort diff --git a/base/modules/auxil/psb_i2_msort_mod.f90 b/base/modules/auxil/psb_i2_msort_mod.f90 index caad09713..f884be48d 100644 --- a/base/modules/auxil/psb_i2_msort_mod.f90 +++ b/base/modules/auxil/psb_i2_msort_mod.f90 @@ -62,10 +62,10 @@ module psb_i2_msort_mod interface psb_msort - subroutine psb_i2msort(x,ix,dir,flag) + subroutine psb_i2msort(x,ix,dir,flag,reord) import integer(psb_i2pk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_i2msort end interface psb_msort diff --git a/base/modules/auxil/psb_i2_qsort_mod.f90 b/base/modules/auxil/psb_i2_qsort_mod.f90 index 2f192a0a2..4931a35e5 100644 --- a/base/modules/auxil/psb_i2_qsort_mod.f90 +++ b/base/modules/auxil/psb_i2_qsort_mod.f90 @@ -64,10 +64,10 @@ module psb_i2_qsort_mod end interface psb_ssrch interface psb_qsort - subroutine psb_i2qsort(x,ix,dir,flag) + subroutine psb_i2qsort(x,ix,dir,flag,reord) import integer(psb_i2pk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_i2qsort end interface psb_qsort diff --git a/base/modules/auxil/psb_m_hsort_mod.f90 b/base/modules/auxil/psb_m_hsort_mod.f90 index 22ffdf343..06dab2102 100644 --- a/base/modules/auxil/psb_m_hsort_mod.f90 +++ b/base/modules/auxil/psb_m_hsort_mod.f90 @@ -44,10 +44,10 @@ module psb_m_hsort_mod use psb_const_mod interface psb_hsort - subroutine psb_mhsort(x,ix,dir,flag) + subroutine psb_mhsort(x,ix,dir,flag,reord) import integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_mhsort end interface psb_hsort diff --git a/base/modules/auxil/psb_m_isort_mod.f90 b/base/modules/auxil/psb_m_isort_mod.f90 index 1f82f3897..11206fd03 100644 --- a/base/modules/auxil/psb_m_isort_mod.f90 +++ b/base/modules/auxil/psb_m_isort_mod.f90 @@ -44,10 +44,10 @@ module psb_m_isort_mod use psb_const_mod interface psb_isort - subroutine psb_misort(x,ix,dir,flag) + subroutine psb_misort(x,ix,dir,flag,reord) import integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_misort end interface psb_isort diff --git a/base/modules/auxil/psb_m_msort_mod.f90 b/base/modules/auxil/psb_m_msort_mod.f90 index 12a33686d..d433a3a65 100644 --- a/base/modules/auxil/psb_m_msort_mod.f90 +++ b/base/modules/auxil/psb_m_msort_mod.f90 @@ -62,10 +62,10 @@ module psb_m_msort_mod interface psb_msort - subroutine psb_mmsort(x,ix,dir,flag) + subroutine psb_mmsort(x,ix,dir,flag,reord) import integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_mmsort end interface psb_msort diff --git a/base/modules/auxil/psb_m_qsort_mod.f90 b/base/modules/auxil/psb_m_qsort_mod.f90 index bf029065d..b43a62c0f 100644 --- a/base/modules/auxil/psb_m_qsort_mod.f90 +++ b/base/modules/auxil/psb_m_qsort_mod.f90 @@ -64,10 +64,10 @@ module psb_m_qsort_mod end interface psb_ssrch interface psb_qsort - subroutine psb_mqsort(x,ix,dir,flag) + subroutine psb_mqsort(x,ix,dir,flag,reord) import integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_mqsort end interface psb_qsort diff --git a/base/modules/auxil/psb_s_hsort_mod.f90 b/base/modules/auxil/psb_s_hsort_mod.f90 index 4cee5508b..7b25cec0c 100644 --- a/base/modules/auxil/psb_s_hsort_mod.f90 +++ b/base/modules/auxil/psb_s_hsort_mod.f90 @@ -44,10 +44,10 @@ module psb_s_hsort_mod use psb_const_mod interface psb_hsort - subroutine psb_shsort(x,ix,dir,flag) + subroutine psb_shsort(x,ix,dir,flag,reord) import real(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_shsort end interface psb_hsort diff --git a/base/modules/auxil/psb_s_isort_mod.f90 b/base/modules/auxil/psb_s_isort_mod.f90 index 9692ed88b..194ba2dee 100644 --- a/base/modules/auxil/psb_s_isort_mod.f90 +++ b/base/modules/auxil/psb_s_isort_mod.f90 @@ -44,10 +44,10 @@ module psb_s_isort_mod use psb_const_mod interface psb_isort - subroutine psb_sisort(x,ix,dir,flag) + subroutine psb_sisort(x,ix,dir,flag,reord) import real(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_sisort end interface psb_isort diff --git a/base/modules/auxil/psb_s_msort_mod.f90 b/base/modules/auxil/psb_s_msort_mod.f90 index f31072905..ce0e4399b 100644 --- a/base/modules/auxil/psb_s_msort_mod.f90 +++ b/base/modules/auxil/psb_s_msort_mod.f90 @@ -55,10 +55,10 @@ module psb_s_msort_mod interface psb_msort - subroutine psb_smsort(x,ix,dir,flag) + subroutine psb_smsort(x,ix,dir,flag,reord) import real(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_smsort end interface psb_msort diff --git a/base/modules/auxil/psb_s_qsort_mod.f90 b/base/modules/auxil/psb_s_qsort_mod.f90 index a5bdb2d99..5fbfe9e1d 100644 --- a/base/modules/auxil/psb_s_qsort_mod.f90 +++ b/base/modules/auxil/psb_s_qsort_mod.f90 @@ -64,10 +64,10 @@ module psb_s_qsort_mod end interface psb_ssrch interface psb_qsort - subroutine psb_sqsort(x,ix,dir,flag) + subroutine psb_sqsort(x,ix,dir,flag,reord) import real(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_sqsort end interface psb_qsort diff --git a/base/modules/auxil/psb_z_hsort_mod.f90 b/base/modules/auxil/psb_z_hsort_mod.f90 index 98e47da2c..bc3d34364 100644 --- a/base/modules/auxil/psb_z_hsort_mod.f90 +++ b/base/modules/auxil/psb_z_hsort_mod.f90 @@ -44,10 +44,10 @@ module psb_z_hsort_mod use psb_const_mod interface psb_hsort - subroutine psb_zhsort(x,ix,dir,flag) + subroutine psb_zhsort(x,ix,dir,flag,reord) import complex(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_zhsort end interface psb_hsort diff --git a/base/modules/auxil/psb_z_isort_mod.f90 b/base/modules/auxil/psb_z_isort_mod.f90 index 4048088a9..bb51de002 100644 --- a/base/modules/auxil/psb_z_isort_mod.f90 +++ b/base/modules/auxil/psb_z_isort_mod.f90 @@ -44,10 +44,10 @@ module psb_z_isort_mod use psb_const_mod interface psb_isort - subroutine psb_zisort(x,ix,dir,flag) + subroutine psb_zisort(x,ix,dir,flag,reord) import complex(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_zisort end interface psb_isort diff --git a/base/modules/auxil/psb_z_msort_mod.f90 b/base/modules/auxil/psb_z_msort_mod.f90 index 515b69cf1..6a830d5df 100644 --- a/base/modules/auxil/psb_z_msort_mod.f90 +++ b/base/modules/auxil/psb_z_msort_mod.f90 @@ -55,10 +55,10 @@ module psb_z_msort_mod interface psb_msort - subroutine psb_zmsort(x,ix,dir,flag) + subroutine psb_zmsort(x,ix,dir,flag,reord) import complex(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_zmsort end interface psb_msort diff --git a/base/modules/auxil/psb_z_qsort_mod.f90 b/base/modules/auxil/psb_z_qsort_mod.f90 index 2fc6baab2..351c6ebd4 100644 --- a/base/modules/auxil/psb_z_qsort_mod.f90 +++ b/base/modules/auxil/psb_z_qsort_mod.f90 @@ -45,10 +45,10 @@ module psb_z_qsort_mod interface psb_qsort - subroutine psb_zqsort(x,ix,dir,flag) + subroutine psb_zqsort(x,ix,dir,flag,reord) import complex(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) end subroutine psb_zqsort end interface psb_qsort diff --git a/base/serial/sort/psb_c_hsort_impl.f90 b/base/serial/sort/psb_c_hsort_impl.f90 index 2400fcf73..4251ddaad 100644 --- a/base/serial/sort/psb_c_hsort_impl.f90 +++ b/base/serial/sort/psb_c_hsort_impl.f90 @@ -41,18 +41,19 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_chsort(x,ix,dir,flag) +subroutine psb_chsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_chsort use psb_error_mod implicit none complex(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: flag_, n, i, err_act,info - integer(psb_ipk_) :: dir_, l + integer(psb_ipk_) :: flag_, err_act, info, reord_ + integer(psb_ipk_) :: n, i, l, dir_ complex(psb_spk_) :: key integer(psb_ipk_) :: index + complex(psb_spk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -60,6 +61,13 @@ subroutine psb_chsort(x,ix,dir,flag) name='psb_hsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -113,24 +121,57 @@ subroutine psb_chsort(x,ix,dir,flag) ix(i) = i end do end if - l = 0 - do i=1, n - key = x(i) - index = ix(i) - call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) - if (l /= i) then - write(psb_err_unit,*) 'Mismatch while heapifying ! ' - end if - end do - do i=n, 2, -1 - call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) - if (l /= i-1) then - write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i - end if - x(i) = key - ix(i) = index - end do - else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + + l = 0 + do i=1, n + key = x(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + ix(i) = index + end do + case(psb_sort_noreord_x_) + tx = x + + l = 0 + do i=1, n + key = tx(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + tx(i) = key + ix(i) = index + end do + end select + else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + l = 0 do i=1, n key = x(i) diff --git a/base/serial/sort/psb_c_isort_impl.f90 b/base/serial/sort/psb_c_isort_impl.f90 index e61637533..0251d37e2 100644 --- a/base/serial/sort/psb_c_isort_impl.f90 +++ b/base/serial/sort/psb_c_isort_impl.f90 @@ -40,16 +40,17 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_cisort(x,ix,dir,flag) +subroutine psb_cisort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_cisort use psb_error_mod implicit none complex(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act + integer(psb_ipk_) :: dir_, flag_, err_act, reord_ integer(psb_ipk_) :: n, i + complex(psb_spk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -57,6 +58,12 @@ subroutine psb_cisort(x,ix,dir,flag) name='psb_cisort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -90,39 +97,73 @@ subroutine psb_cisort(x,ix,dir,flag) ix(i) = i end do end if - - select case(dir_) - case (psb_lsort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_lsort_up_) call psi_clisrx_up(n,x,ix) - case (psb_lsort_down_) + case (psb_lsort_down_) call psi_clisrx_dw(n,x,ix) - case (psb_alsort_up_) + case (psb_alsort_up_) call psi_calisrx_up(n,x,ix) - case (psb_alsort_down_) + case (psb_alsort_down_) call psi_calisrx_dw(n,x,ix) - case (psb_asort_up_) + case (psb_asort_up_) call psi_caisrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_caisrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_lsort_up_) + call psi_clisrx_up(n,tx,ix) + case (psb_lsort_down_) + call psi_clisrx_dw(n,tx,ix) + case (psb_alsort_up_) + call psi_calisrx_up(n,tx,ix) + case (psb_alsort_down_) + call psi_calisrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_caisrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_caisrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else select case(dir_) case (psb_lsort_up_) - call psi_clisr_up(n,x) + call psi_clisr_up(n,x) case (psb_lsort_down_) - call psi_clisr_dw(n,x) + call psi_clisr_dw(n,x) case (psb_alsort_up_) - call psi_calisr_up(n,x) + call psi_calisr_up(n,x) case (psb_alsort_down_) - call psi_calisr_dw(n,x) + call psi_calisr_dw(n,x) case (psb_asort_up_) - call psi_caisr_up(n,x) + call psi_caisr_up(n,x) case (psb_asort_down_) - call psi_caisr_dw(n,x) + call psi_caisr_dw(n,x) case default ierr(1) = 3; ierr(2) = dir_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) diff --git a/base/serial/sort/psb_c_msort_impl.f90 b/base/serial/sort/psb_c_msort_impl.f90 index 751f60987..e61ee9e1e 100644 --- a/base/serial/sort/psb_c_msort_impl.f90 +++ b/base/serial/sort/psb_c_msort_impl.f90 @@ -77,16 +77,16 @@ subroutine psb_cmsort_u(x,nout,dir) end subroutine psb_cmsort_u -subroutine psb_cmsort(x,ix,dir,flag) +subroutine psb_cmsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_cmsort use psb_error_mod use psb_ip_reord_mod implicit none complex(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, n, err_act + integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_ integer(psb_ipk_), allocatable :: iaux(:) integer(psb_ipk_) :: iret, info, i @@ -96,6 +96,11 @@ subroutine psb_cmsort(x,ix,dir,flag) name='psb_cmsort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(dir)) then dir_ = dir else @@ -163,11 +168,25 @@ subroutine psb_cmsort(x,ix,dir,flag) ! only provide linked pointers. ! if (iret == 0 ) then - if (present(ix)) then - call psb_ip_reord(n,x,ix,iaux) - else - call psb_ip_reord(n,x,iaux) - end if + select case(reord_) + case(psb_sort_reord_x_) + if (present(ix)) then + call psb_ip_reord(n,x,ix,iaux) + else + call psb_ip_reord(n,x,iaux) + end if + case(psb_sort_noreord_x_) + if (present(ix)) then + call psb_ip_reord(n,ix,iaux) + else + call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix") + goto 9999 + end if + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select end if return diff --git a/base/serial/sort/psb_c_qsort_impl.f90 b/base/serial/sort/psb_c_qsort_impl.f90 index 7f33c0997..0111e9c23 100644 --- a/base/serial/sort/psb_c_qsort_impl.f90 +++ b/base/serial/sort/psb_c_qsort_impl.f90 @@ -41,22 +41,29 @@ ! Addison-Wesley ! -subroutine psb_cqsort(x,ix,dir,flag) +subroutine psb_cqsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_cqsort use psb_error_mod implicit none complex(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act, i + integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_ integer(psb_ipk_) :: n + complex(psb_spk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name name='psb_cqsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(flag)) then flag_ = flag else @@ -91,25 +98,57 @@ subroutine psb_cqsort(x,ix,dir,flag) end do end if - select case(dir_) - case (psb_lsort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_lsort_up_) call psi_clqsrx_up(n,x,ix) - case (psb_lsort_down_) + case (psb_lsort_down_) call psi_clqsrx_dw(n,x,ix) - case (psb_alsort_up_) + case (psb_alsort_up_) call psi_calqsrx_up(n,x,ix) - case (psb_alsort_down_) + case (psb_alsort_down_) call psi_calqsrx_dw(n,x,ix) - case (psb_asort_up_) + case (psb_asort_up_) call psi_caqsrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_caqsrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_lsort_up_) + call psi_clqsrx_up(n,tx,ix) + case (psb_lsort_down_) + call psi_clqsrx_dw(n,tx,ix) + case (psb_alsort_up_) + call psi_calqsrx_up(n,tx,ix) + case (psb_alsort_down_) + call psi_calqsrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_caqsrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_caqsrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else + select case(dir_) case (psb_lsort_up_) call psi_clqsr_up(n,x) diff --git a/base/serial/sort/psb_d_hsort_impl.f90 b/base/serial/sort/psb_d_hsort_impl.f90 index ffb952d59..dac327d16 100644 --- a/base/serial/sort/psb_d_hsort_impl.f90 +++ b/base/serial/sort/psb_d_hsort_impl.f90 @@ -41,18 +41,19 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_dhsort(x,ix,dir,flag) +subroutine psb_dhsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_dhsort use psb_error_mod implicit none real(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: flag_, n, i, err_act,info - integer(psb_ipk_) :: dir_, l + integer(psb_ipk_) :: flag_, err_act, info, reord_ + integer(psb_ipk_) :: n, i, l, dir_ real(psb_dpk_) :: key integer(psb_ipk_) :: index + real(psb_dpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -60,6 +61,13 @@ subroutine psb_dhsort(x,ix,dir,flag) name='psb_hsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -113,24 +121,57 @@ subroutine psb_dhsort(x,ix,dir,flag) ix(i) = i end do end if - l = 0 - do i=1, n - key = x(i) - index = ix(i) - call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) - if (l /= i) then - write(psb_err_unit,*) 'Mismatch while heapifying ! ' - end if - end do - do i=n, 2, -1 - call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) - if (l /= i-1) then - write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i - end if - x(i) = key - ix(i) = index - end do - else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + + l = 0 + do i=1, n + key = x(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + ix(i) = index + end do + case(psb_sort_noreord_x_) + tx = x + + l = 0 + do i=1, n + key = tx(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + tx(i) = key + ix(i) = index + end do + end select + else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + l = 0 do i=1, n key = x(i) diff --git a/base/serial/sort/psb_d_isort_impl.f90 b/base/serial/sort/psb_d_isort_impl.f90 index 94e3abd4d..62b6eed14 100644 --- a/base/serial/sort/psb_d_isort_impl.f90 +++ b/base/serial/sort/psb_d_isort_impl.f90 @@ -40,16 +40,17 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_disort(x,ix,dir,flag) +subroutine psb_disort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_disort use psb_error_mod implicit none real(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act + integer(psb_ipk_) :: dir_, flag_, err_act, reord_ integer(psb_ipk_) :: n, i + real(psb_dpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -57,6 +58,12 @@ subroutine psb_disort(x,ix,dir,flag) name='psb_disort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -90,31 +97,61 @@ subroutine psb_disort(x,ix,dir,flag) ix(i) = i end do end if - - select case(dir_) - case (psb_sort_up_) - call psi_disrx_up(n,x,ix) - case (psb_sort_down_) - call psi_disrx_dw(n,x,ix) - case (psb_asort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_disrx_up(n,x,ix) + case (psb_sort_down_) + call psi_disrx_dw(n,x,ix) + case (psb_asort_up_) call psi_daisrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_daisrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_disrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_disrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_daisrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_daisrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else select case(dir_) case (psb_sort_up_) call psi_disr_up(n,x) case (psb_sort_down_) call psi_disr_dw(n,x) case (psb_asort_up_) - call psi_daisr_up(n,x) + call psi_daisr_up(n,x) case (psb_asort_down_) - call psi_daisr_dw(n,x) + call psi_daisr_dw(n,x) case default ierr(1) = 3; ierr(2) = dir_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) diff --git a/base/serial/sort/psb_d_msort_impl.f90 b/base/serial/sort/psb_d_msort_impl.f90 index 66ad78972..7c38f27dc 100644 --- a/base/serial/sort/psb_d_msort_impl.f90 +++ b/base/serial/sort/psb_d_msort_impl.f90 @@ -76,16 +76,16 @@ subroutine psb_dmsort_u(x,nout,dir) return end subroutine psb_dmsort_u -subroutine psb_dmsort(x,ix,dir,flag) +subroutine psb_dmsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_dmsort use psb_error_mod use psb_ip_reord_mod implicit none real(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, n, err_act + integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_ integer(psb_ipk_), allocatable :: iaux(:) integer(psb_ipk_) :: iret, info, i @@ -95,6 +95,11 @@ subroutine psb_dmsort(x,ix,dir,flag) name='psb_dmsort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(dir)) then dir_ = dir else @@ -157,15 +162,28 @@ subroutine psb_dmsort(x,ix,dir,flag) ! Do the actual reordering, since the inner routines ! only provide linked pointers. ! - if (iret == 0 ) then - if (present(ix)) then - call psb_ip_reord(n,x,ix,iaux) - else - call psb_ip_reord(n,x,iaux) - end if + if (iret == 0 ) then + select case(reord_) + case(psb_sort_reord_x_) + if (present(ix)) then + call psb_ip_reord(n,x,ix,iaux) + else + call psb_ip_reord(n,x,iaux) + end if + case(psb_sort_noreord_x_) + if (present(ix)) then + call psb_ip_reord(n,ix,iaux) + else + call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix") + goto 9999 + end if + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select end if - return 9999 call psb_error_handler(err_act) diff --git a/base/serial/sort/psb_d_qsort_impl.f90 b/base/serial/sort/psb_d_qsort_impl.f90 index 8e4b1d213..c397ba233 100644 --- a/base/serial/sort/psb_d_qsort_impl.f90 +++ b/base/serial/sort/psb_d_qsort_impl.f90 @@ -159,22 +159,29 @@ function psb_dssrch(key,n,v) result(ipos) return end function psb_dssrch -subroutine psb_dqsort(x,ix,dir,flag) +subroutine psb_dqsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_dqsort use psb_error_mod implicit none real(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act, i + integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_ integer(psb_ipk_) :: n + real(psb_dpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name name='psb_dqsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(flag)) then flag_ = flag else @@ -209,21 +216,49 @@ subroutine psb_dqsort(x,ix,dir,flag) end do end if - select case(dir_) - case (psb_sort_up_) - call psi_dqsrx_up(n,x,ix) - case (psb_sort_down_) - call psi_dqsrx_dw(n,x,ix) - case (psb_asort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_dqsrx_up(n,x,ix) + case (psb_sort_down_) + call psi_dqsrx_dw(n,x,ix) + case (psb_asort_up_) call psi_daqsrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_daqsrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_dqsrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_dqsrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_daqsrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_daqsrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else + select case(dir_) case (psb_sort_up_) call psi_dqsr_up(n,x) diff --git a/base/serial/sort/psb_e_hsort_impl.f90 b/base/serial/sort/psb_e_hsort_impl.f90 index f1a1a78f6..8fa00a834 100644 --- a/base/serial/sort/psb_e_hsort_impl.f90 +++ b/base/serial/sort/psb_e_hsort_impl.f90 @@ -41,18 +41,19 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_ehsort(x,ix,dir,flag) +subroutine psb_ehsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_ehsort use psb_error_mod implicit none integer(psb_epk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_epk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: flag_, n, i, err_act,info - integer(psb_epk_) :: dir_, l + integer(psb_ipk_) :: flag_, err_act, info, reord_ + integer(psb_epk_) :: n, i, l, dir_ integer(psb_epk_) :: key integer(psb_epk_) :: index + integer(psb_epk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -60,6 +61,13 @@ subroutine psb_ehsort(x,ix,dir,flag) name='psb_hsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -113,24 +121,57 @@ subroutine psb_ehsort(x,ix,dir,flag) ix(i) = i end do end if - l = 0 - do i=1, n - key = x(i) - index = ix(i) - call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) - if (l /= i) then - write(psb_err_unit,*) 'Mismatch while heapifying ! ' - end if - end do - do i=n, 2, -1 - call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) - if (l /= i-1) then - write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i - end if - x(i) = key - ix(i) = index - end do - else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + + l = 0 + do i=1, n + key = x(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + ix(i) = index + end do + case(psb_sort_noreord_x_) + tx = x + + l = 0 + do i=1, n + key = tx(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + tx(i) = key + ix(i) = index + end do + end select + else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + l = 0 do i=1, n key = x(i) diff --git a/base/serial/sort/psb_e_isort_impl.f90 b/base/serial/sort/psb_e_isort_impl.f90 index 0fe323185..20d3600ca 100644 --- a/base/serial/sort/psb_e_isort_impl.f90 +++ b/base/serial/sort/psb_e_isort_impl.f90 @@ -40,16 +40,17 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_eisort(x,ix,dir,flag) +subroutine psb_eisort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_eisort use psb_error_mod implicit none integer(psb_epk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_epk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act + integer(psb_ipk_) :: dir_, flag_, err_act, reord_ integer(psb_epk_) :: n, i + integer(psb_epk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -57,6 +58,12 @@ subroutine psb_eisort(x,ix,dir,flag) name='psb_eisort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -90,31 +97,61 @@ subroutine psb_eisort(x,ix,dir,flag) ix(i) = i end do end if - - select case(dir_) - case (psb_sort_up_) - call psi_eisrx_up(n,x,ix) - case (psb_sort_down_) - call psi_eisrx_dw(n,x,ix) - case (psb_asort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_eisrx_up(n,x,ix) + case (psb_sort_down_) + call psi_eisrx_dw(n,x,ix) + case (psb_asort_up_) call psi_eaisrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_eaisrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_eisrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_eisrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_eaisrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_eaisrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else select case(dir_) case (psb_sort_up_) call psi_eisr_up(n,x) case (psb_sort_down_) call psi_eisr_dw(n,x) case (psb_asort_up_) - call psi_eaisr_up(n,x) + call psi_eaisr_up(n,x) case (psb_asort_down_) - call psi_eaisr_dw(n,x) + call psi_eaisr_dw(n,x) case default ierr(1) = 3; ierr(2) = dir_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) diff --git a/base/serial/sort/psb_e_msort_impl.f90 b/base/serial/sort/psb_e_msort_impl.f90 index b97d448a6..93ac8a6eb 100644 --- a/base/serial/sort/psb_e_msort_impl.f90 +++ b/base/serial/sort/psb_e_msort_impl.f90 @@ -131,16 +131,16 @@ subroutine psb_emsort_u(x,nout,dir) return end subroutine psb_emsort_u -subroutine psb_emsort(x,ix,dir,flag) +subroutine psb_emsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_emsort use psb_error_mod use psb_ip_reord_mod implicit none integer(psb_epk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_epk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, n, err_act + integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_ integer(psb_epk_), allocatable :: iaux(:) integer(psb_ipk_) :: iret, info, i @@ -150,6 +150,11 @@ subroutine psb_emsort(x,ix,dir,flag) name='psb_emsort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(dir)) then dir_ = dir else @@ -212,15 +217,28 @@ subroutine psb_emsort(x,ix,dir,flag) ! Do the actual reordering, since the inner routines ! only provide linked pointers. ! - if (iret == 0 ) then - if (present(ix)) then - call psb_ip_reord(n,x,ix,iaux) - else - call psb_ip_reord(n,x,iaux) - end if + if (iret == 0 ) then + select case(reord_) + case(psb_sort_reord_x_) + if (present(ix)) then + call psb_ip_reord(n,x,ix,iaux) + else + call psb_ip_reord(n,x,iaux) + end if + case(psb_sort_noreord_x_) + if (present(ix)) then + call psb_ip_reord(n,ix,iaux) + else + call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix") + goto 9999 + end if + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select end if - return 9999 call psb_error_handler(err_act) diff --git a/base/serial/sort/psb_e_qsort_impl.f90 b/base/serial/sort/psb_e_qsort_impl.f90 index c70f80519..ea3bfd140 100644 --- a/base/serial/sort/psb_e_qsort_impl.f90 +++ b/base/serial/sort/psb_e_qsort_impl.f90 @@ -159,22 +159,29 @@ function psb_essrch(key,n,v) result(ipos) return end function psb_essrch -subroutine psb_eqsort(x,ix,dir,flag) +subroutine psb_eqsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_eqsort use psb_error_mod implicit none integer(psb_epk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_epk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act, i + integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_ integer(psb_epk_) :: n + integer(psb_epk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name name='psb_eqsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(flag)) then flag_ = flag else @@ -209,21 +216,49 @@ subroutine psb_eqsort(x,ix,dir,flag) end do end if - select case(dir_) - case (psb_sort_up_) - call psi_eqsrx_up(n,x,ix) - case (psb_sort_down_) - call psi_eqsrx_dw(n,x,ix) - case (psb_asort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_eqsrx_up(n,x,ix) + case (psb_sort_down_) + call psi_eqsrx_dw(n,x,ix) + case (psb_asort_up_) call psi_eaqsrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_eaqsrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_eqsrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_eqsrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_eaqsrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_eaqsrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else + select case(dir_) case (psb_sort_up_) call psi_eqsr_up(n,x) diff --git a/base/serial/sort/psb_m_hsort_impl.f90 b/base/serial/sort/psb_m_hsort_impl.f90 index 5dc920823..92f67d8b0 100644 --- a/base/serial/sort/psb_m_hsort_impl.f90 +++ b/base/serial/sort/psb_m_hsort_impl.f90 @@ -41,18 +41,19 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_mhsort(x,ix,dir,flag) +subroutine psb_mhsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_mhsort use psb_error_mod implicit none integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: flag_, n, i, err_act,info - integer(psb_ipk_) :: dir_, l + integer(psb_ipk_) :: flag_, err_act, info, reord_ + integer(psb_ipk_) :: n, i, l, dir_ integer(psb_mpk_) :: key integer(psb_ipk_) :: index + integer(psb_mpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -60,6 +61,13 @@ subroutine psb_mhsort(x,ix,dir,flag) name='psb_hsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -113,24 +121,57 @@ subroutine psb_mhsort(x,ix,dir,flag) ix(i) = i end do end if - l = 0 - do i=1, n - key = x(i) - index = ix(i) - call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) - if (l /= i) then - write(psb_err_unit,*) 'Mismatch while heapifying ! ' - end if - end do - do i=n, 2, -1 - call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) - if (l /= i-1) then - write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i - end if - x(i) = key - ix(i) = index - end do - else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + + l = 0 + do i=1, n + key = x(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + ix(i) = index + end do + case(psb_sort_noreord_x_) + tx = x + + l = 0 + do i=1, n + key = tx(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + tx(i) = key + ix(i) = index + end do + end select + else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + l = 0 do i=1, n key = x(i) diff --git a/base/serial/sort/psb_m_isort_impl.f90 b/base/serial/sort/psb_m_isort_impl.f90 index 1f373e425..ae6c0ce23 100644 --- a/base/serial/sort/psb_m_isort_impl.f90 +++ b/base/serial/sort/psb_m_isort_impl.f90 @@ -40,16 +40,17 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_misort(x,ix,dir,flag) +subroutine psb_misort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_misort use psb_error_mod implicit none integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act + integer(psb_ipk_) :: dir_, flag_, err_act, reord_ integer(psb_ipk_) :: n, i + integer(psb_mpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -57,6 +58,12 @@ subroutine psb_misort(x,ix,dir,flag) name='psb_misort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -90,31 +97,61 @@ subroutine psb_misort(x,ix,dir,flag) ix(i) = i end do end if - - select case(dir_) - case (psb_sort_up_) - call psi_misrx_up(n,x,ix) - case (psb_sort_down_) - call psi_misrx_dw(n,x,ix) - case (psb_asort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_misrx_up(n,x,ix) + case (psb_sort_down_) + call psi_misrx_dw(n,x,ix) + case (psb_asort_up_) call psi_maisrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_maisrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_misrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_misrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_maisrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_maisrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else select case(dir_) case (psb_sort_up_) call psi_misr_up(n,x) case (psb_sort_down_) call psi_misr_dw(n,x) case (psb_asort_up_) - call psi_maisr_up(n,x) + call psi_maisr_up(n,x) case (psb_asort_down_) - call psi_maisr_dw(n,x) + call psi_maisr_dw(n,x) case default ierr(1) = 3; ierr(2) = dir_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) diff --git a/base/serial/sort/psb_m_msort_impl.f90 b/base/serial/sort/psb_m_msort_impl.f90 index 437d10692..d3af46737 100644 --- a/base/serial/sort/psb_m_msort_impl.f90 +++ b/base/serial/sort/psb_m_msort_impl.f90 @@ -131,16 +131,16 @@ subroutine psb_mmsort_u(x,nout,dir) return end subroutine psb_mmsort_u -subroutine psb_mmsort(x,ix,dir,flag) +subroutine psb_mmsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_mmsort use psb_error_mod use psb_ip_reord_mod implicit none integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, n, err_act + integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_ integer(psb_ipk_), allocatable :: iaux(:) integer(psb_ipk_) :: iret, info, i @@ -150,6 +150,11 @@ subroutine psb_mmsort(x,ix,dir,flag) name='psb_mmsort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(dir)) then dir_ = dir else @@ -212,15 +217,28 @@ subroutine psb_mmsort(x,ix,dir,flag) ! Do the actual reordering, since the inner routines ! only provide linked pointers. ! - if (iret == 0 ) then - if (present(ix)) then - call psb_ip_reord(n,x,ix,iaux) - else - call psb_ip_reord(n,x,iaux) - end if + if (iret == 0 ) then + select case(reord_) + case(psb_sort_reord_x_) + if (present(ix)) then + call psb_ip_reord(n,x,ix,iaux) + else + call psb_ip_reord(n,x,iaux) + end if + case(psb_sort_noreord_x_) + if (present(ix)) then + call psb_ip_reord(n,ix,iaux) + else + call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix") + goto 9999 + end if + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select end if - return 9999 call psb_error_handler(err_act) diff --git a/base/serial/sort/psb_m_qsort_impl.f90 b/base/serial/sort/psb_m_qsort_impl.f90 index 6b70c3a07..2dd009b3d 100644 --- a/base/serial/sort/psb_m_qsort_impl.f90 +++ b/base/serial/sort/psb_m_qsort_impl.f90 @@ -159,22 +159,29 @@ function psb_mssrch(key,n,v) result(ipos) return end function psb_mssrch -subroutine psb_mqsort(x,ix,dir,flag) +subroutine psb_mqsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_mqsort use psb_error_mod implicit none integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act, i + integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_ integer(psb_ipk_) :: n + integer(psb_mpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name name='psb_mqsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(flag)) then flag_ = flag else @@ -209,21 +216,49 @@ subroutine psb_mqsort(x,ix,dir,flag) end do end if - select case(dir_) - case (psb_sort_up_) - call psi_mqsrx_up(n,x,ix) - case (psb_sort_down_) - call psi_mqsrx_dw(n,x,ix) - case (psb_asort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_mqsrx_up(n,x,ix) + case (psb_sort_down_) + call psi_mqsrx_dw(n,x,ix) + case (psb_asort_up_) call psi_maqsrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_maqsrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_mqsrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_mqsrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_maqsrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_maqsrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else + select case(dir_) case (psb_sort_up_) call psi_mqsr_up(n,x) diff --git a/base/serial/sort/psb_s_hsort_impl.f90 b/base/serial/sort/psb_s_hsort_impl.f90 index 77fefe142..559f92c51 100644 --- a/base/serial/sort/psb_s_hsort_impl.f90 +++ b/base/serial/sort/psb_s_hsort_impl.f90 @@ -41,18 +41,19 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_shsort(x,ix,dir,flag) +subroutine psb_shsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_shsort use psb_error_mod implicit none real(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: flag_, n, i, err_act,info - integer(psb_ipk_) :: dir_, l + integer(psb_ipk_) :: flag_, err_act, info, reord_ + integer(psb_ipk_) :: n, i, l, dir_ real(psb_spk_) :: key integer(psb_ipk_) :: index + real(psb_spk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -60,6 +61,13 @@ subroutine psb_shsort(x,ix,dir,flag) name='psb_hsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -113,24 +121,57 @@ subroutine psb_shsort(x,ix,dir,flag) ix(i) = i end do end if - l = 0 - do i=1, n - key = x(i) - index = ix(i) - call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) - if (l /= i) then - write(psb_err_unit,*) 'Mismatch while heapifying ! ' - end if - end do - do i=n, 2, -1 - call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) - if (l /= i-1) then - write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i - end if - x(i) = key - ix(i) = index - end do - else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + + l = 0 + do i=1, n + key = x(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + ix(i) = index + end do + case(psb_sort_noreord_x_) + tx = x + + l = 0 + do i=1, n + key = tx(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + tx(i) = key + ix(i) = index + end do + end select + else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + l = 0 do i=1, n key = x(i) diff --git a/base/serial/sort/psb_s_isort_impl.f90 b/base/serial/sort/psb_s_isort_impl.f90 index cdcc05eb5..a8be6d46c 100644 --- a/base/serial/sort/psb_s_isort_impl.f90 +++ b/base/serial/sort/psb_s_isort_impl.f90 @@ -40,16 +40,17 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_sisort(x,ix,dir,flag) +subroutine psb_sisort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_sisort use psb_error_mod implicit none real(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act + integer(psb_ipk_) :: dir_, flag_, err_act, reord_ integer(psb_ipk_) :: n, i + real(psb_spk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -57,6 +58,12 @@ subroutine psb_sisort(x,ix,dir,flag) name='psb_sisort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -90,31 +97,61 @@ subroutine psb_sisort(x,ix,dir,flag) ix(i) = i end do end if - - select case(dir_) - case (psb_sort_up_) - call psi_sisrx_up(n,x,ix) - case (psb_sort_down_) - call psi_sisrx_dw(n,x,ix) - case (psb_asort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_sisrx_up(n,x,ix) + case (psb_sort_down_) + call psi_sisrx_dw(n,x,ix) + case (psb_asort_up_) call psi_saisrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_saisrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_sisrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_sisrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_saisrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_saisrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else select case(dir_) case (psb_sort_up_) call psi_sisr_up(n,x) case (psb_sort_down_) call psi_sisr_dw(n,x) case (psb_asort_up_) - call psi_saisr_up(n,x) + call psi_saisr_up(n,x) case (psb_asort_down_) - call psi_saisr_dw(n,x) + call psi_saisr_dw(n,x) case default ierr(1) = 3; ierr(2) = dir_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) diff --git a/base/serial/sort/psb_s_msort_impl.f90 b/base/serial/sort/psb_s_msort_impl.f90 index e3382f27b..e3c0a1845 100644 --- a/base/serial/sort/psb_s_msort_impl.f90 +++ b/base/serial/sort/psb_s_msort_impl.f90 @@ -76,16 +76,16 @@ subroutine psb_smsort_u(x,nout,dir) return end subroutine psb_smsort_u -subroutine psb_smsort(x,ix,dir,flag) +subroutine psb_smsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_smsort use psb_error_mod use psb_ip_reord_mod implicit none real(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, n, err_act + integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_ integer(psb_ipk_), allocatable :: iaux(:) integer(psb_ipk_) :: iret, info, i @@ -95,6 +95,11 @@ subroutine psb_smsort(x,ix,dir,flag) name='psb_smsort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(dir)) then dir_ = dir else @@ -157,15 +162,28 @@ subroutine psb_smsort(x,ix,dir,flag) ! Do the actual reordering, since the inner routines ! only provide linked pointers. ! - if (iret == 0 ) then - if (present(ix)) then - call psb_ip_reord(n,x,ix,iaux) - else - call psb_ip_reord(n,x,iaux) - end if + if (iret == 0 ) then + select case(reord_) + case(psb_sort_reord_x_) + if (present(ix)) then + call psb_ip_reord(n,x,ix,iaux) + else + call psb_ip_reord(n,x,iaux) + end if + case(psb_sort_noreord_x_) + if (present(ix)) then + call psb_ip_reord(n,ix,iaux) + else + call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix") + goto 9999 + end if + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select end if - return 9999 call psb_error_handler(err_act) diff --git a/base/serial/sort/psb_s_qsort_impl.f90 b/base/serial/sort/psb_s_qsort_impl.f90 index cae325464..6b2d48218 100644 --- a/base/serial/sort/psb_s_qsort_impl.f90 +++ b/base/serial/sort/psb_s_qsort_impl.f90 @@ -159,22 +159,29 @@ function psb_sssrch(key,n,v) result(ipos) return end function psb_sssrch -subroutine psb_sqsort(x,ix,dir,flag) +subroutine psb_sqsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_sqsort use psb_error_mod implicit none real(psb_spk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act, i + integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_ integer(psb_ipk_) :: n + real(psb_spk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name name='psb_sqsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(flag)) then flag_ = flag else @@ -209,21 +216,49 @@ subroutine psb_sqsort(x,ix,dir,flag) end do end if - select case(dir_) - case (psb_sort_up_) - call psi_sqsrx_up(n,x,ix) - case (psb_sort_down_) - call psi_sqsrx_dw(n,x,ix) - case (psb_asort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_sqsrx_up(n,x,ix) + case (psb_sort_down_) + call psi_sqsrx_dw(n,x,ix) + case (psb_asort_up_) call psi_saqsrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_saqsrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_sqsrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_sqsrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_saqsrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_saqsrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else + select case(dir_) case (psb_sort_up_) call psi_sqsr_up(n,x) diff --git a/base/serial/sort/psb_z_hsort_impl.f90 b/base/serial/sort/psb_z_hsort_impl.f90 index e796f8310..9e886dde9 100644 --- a/base/serial/sort/psb_z_hsort_impl.f90 +++ b/base/serial/sort/psb_z_hsort_impl.f90 @@ -41,18 +41,19 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_zhsort(x,ix,dir,flag) +subroutine psb_zhsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_zhsort use psb_error_mod implicit none complex(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: flag_, n, i, err_act,info - integer(psb_ipk_) :: dir_, l + integer(psb_ipk_) :: flag_, err_act, info, reord_ + integer(psb_ipk_) :: n, i, l, dir_ complex(psb_dpk_) :: key integer(psb_ipk_) :: index + complex(psb_dpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -60,6 +61,13 @@ subroutine psb_zhsort(x,ix,dir,flag) name='psb_hsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -113,24 +121,57 @@ subroutine psb_zhsort(x,ix,dir,flag) ix(i) = i end do end if - l = 0 - do i=1, n - key = x(i) - index = ix(i) - call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) - if (l /= i) then - write(psb_err_unit,*) 'Mismatch while heapifying ! ' - end if - end do - do i=n, 2, -1 - call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) - if (l /= i-1) then - write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i - end if - x(i) = key - ix(i) = index - end do - else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + + l = 0 + do i=1, n + key = x(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + ix(i) = index + end do + case(psb_sort_noreord_x_) + tx = x + + l = 0 + do i=1, n + key = tx(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + tx(i) = key + ix(i) = index + end do + end select + else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + l = 0 do i=1, n key = x(i) diff --git a/base/serial/sort/psb_z_isort_impl.f90 b/base/serial/sort/psb_z_isort_impl.f90 index 340ed8e31..465699dab 100644 --- a/base/serial/sort/psb_z_isort_impl.f90 +++ b/base/serial/sort/psb_z_isort_impl.f90 @@ -40,16 +40,17 @@ ! Data Structures and Algorithms ! Addison-Wesley ! -subroutine psb_zisort(x,ix,dir,flag) +subroutine psb_zisort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_zisort use psb_error_mod implicit none complex(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act + integer(psb_ipk_) :: dir_, flag_, err_act, reord_ integer(psb_ipk_) :: n, i + complex(psb_dpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name @@ -57,6 +58,12 @@ subroutine psb_zisort(x,ix,dir,flag) name='psb_zisort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then flag_ = flag else @@ -90,39 +97,73 @@ subroutine psb_zisort(x,ix,dir,flag) ix(i) = i end do end if - - select case(dir_) - case (psb_lsort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_lsort_up_) call psi_zlisrx_up(n,x,ix) - case (psb_lsort_down_) + case (psb_lsort_down_) call psi_zlisrx_dw(n,x,ix) - case (psb_alsort_up_) + case (psb_alsort_up_) call psi_zalisrx_up(n,x,ix) - case (psb_alsort_down_) + case (psb_alsort_down_) call psi_zalisrx_dw(n,x,ix) - case (psb_asort_up_) + case (psb_asort_up_) call psi_zaisrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_zaisrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_lsort_up_) + call psi_zlisrx_up(n,tx,ix) + case (psb_lsort_down_) + call psi_zlisrx_dw(n,tx,ix) + case (psb_alsort_up_) + call psi_zalisrx_up(n,tx,ix) + case (psb_alsort_down_) + call psi_zalisrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_zaisrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_zaisrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else select case(dir_) case (psb_lsort_up_) - call psi_zlisr_up(n,x) + call psi_zlisr_up(n,x) case (psb_lsort_down_) - call psi_zlisr_dw(n,x) + call psi_zlisr_dw(n,x) case (psb_alsort_up_) - call psi_zalisr_up(n,x) + call psi_zalisr_up(n,x) case (psb_alsort_down_) - call psi_zalisr_dw(n,x) + call psi_zalisr_dw(n,x) case (psb_asort_up_) - call psi_zaisr_up(n,x) + call psi_zaisr_up(n,x) case (psb_asort_down_) - call psi_zaisr_dw(n,x) + call psi_zaisr_dw(n,x) case default ierr(1) = 3; ierr(2) = dir_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) diff --git a/base/serial/sort/psb_z_msort_impl.f90 b/base/serial/sort/psb_z_msort_impl.f90 index 525ed5725..24934e14d 100644 --- a/base/serial/sort/psb_z_msort_impl.f90 +++ b/base/serial/sort/psb_z_msort_impl.f90 @@ -77,16 +77,16 @@ subroutine psb_zmsort_u(x,nout,dir) end subroutine psb_zmsort_u -subroutine psb_zmsort(x,ix,dir,flag) +subroutine psb_zmsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_zmsort use psb_error_mod use psb_ip_reord_mod implicit none complex(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, n, err_act + integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_ integer(psb_ipk_), allocatable :: iaux(:) integer(psb_ipk_) :: iret, info, i @@ -96,6 +96,11 @@ subroutine psb_zmsort(x,ix,dir,flag) name='psb_zmsort' call psb_erractionsave(err_act) + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(dir)) then dir_ = dir else @@ -163,11 +168,25 @@ subroutine psb_zmsort(x,ix,dir,flag) ! only provide linked pointers. ! if (iret == 0 ) then - if (present(ix)) then - call psb_ip_reord(n,x,ix,iaux) - else - call psb_ip_reord(n,x,iaux) - end if + select case(reord_) + case(psb_sort_reord_x_) + if (present(ix)) then + call psb_ip_reord(n,x,ix,iaux) + else + call psb_ip_reord(n,x,iaux) + end if + case(psb_sort_noreord_x_) + if (present(ix)) then + call psb_ip_reord(n,ix,iaux) + else + call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix") + goto 9999 + end if + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select end if return diff --git a/base/serial/sort/psb_z_qsort_impl.f90 b/base/serial/sort/psb_z_qsort_impl.f90 index a1cdb1932..ce3061ea9 100644 --- a/base/serial/sort/psb_z_qsort_impl.f90 +++ b/base/serial/sort/psb_z_qsort_impl.f90 @@ -41,22 +41,29 @@ ! Addison-Wesley ! -subroutine psb_zqsort(x,ix,dir,flag) +subroutine psb_zqsort(x,ix,dir,flag,reord) use psb_sort_mod, psb_protect_name => psb_zqsort use psb_error_mod implicit none complex(psb_dpk_), intent(inout) :: x(:) - integer(psb_ipk_), optional, intent(in) :: dir, flag + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord integer(psb_ipk_), optional, intent(inout) :: ix(:) - integer(psb_ipk_) :: dir_, flag_, err_act, i + integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_ integer(psb_ipk_) :: n + complex(psb_dpk_), allocatable :: tx(:) integer(psb_ipk_) :: ierr(5) character(len=20) :: name name='psb_zqsort' call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if if (present(flag)) then flag_ = flag else @@ -91,25 +98,57 @@ subroutine psb_zqsort(x,ix,dir,flag) end do end if - select case(dir_) - case (psb_lsort_up_) + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_lsort_up_) call psi_zlqsrx_up(n,x,ix) - case (psb_lsort_down_) + case (psb_lsort_down_) call psi_zlqsrx_dw(n,x,ix) - case (psb_alsort_up_) + case (psb_alsort_up_) call psi_zalqsrx_up(n,x,ix) - case (psb_alsort_down_) + case (psb_alsort_down_) call psi_zalqsrx_dw(n,x,ix) - case (psb_asort_up_) + case (psb_asort_up_) call psi_zaqsrx_up(n,x,ix) - case (psb_asort_down_) + case (psb_asort_down_) call psi_zaqsrx_dw(n,x,ix) - case default - ierr(1) = 3; ierr(2) = dir_; + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_lsort_up_) + call psi_zlqsrx_up(n,tx,ix) + case (psb_lsort_down_) + call psi_zlqsrx_dw(n,tx,ix) + case (psb_alsort_up_) + call psi_zalqsrx_up(n,tx,ix) + case (psb_alsort_down_) + call psi_zalqsrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_zaqsrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_zaqsrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) goto 9999 end select - else + select case(dir_) case (psb_lsort_up_) call psi_zlqsr_up(n,x) diff --git a/docs/html/userhtmlse6.html b/docs/html/userhtmlse6.html index f5be71d95..c26876b8f 100644 --- a/docs/html/userhtmlse6.html +++ b/docs/html/userhtmlse6.html @@ -3886,10 +3886,10 @@ class="pplb7t-x-x-120">_hsort — Sorting by the Heapsort algorithm
-call psb_isort(x,ix,dir,flag)
-call psb_msort(x,ix,dir,flag)
-call psb_qsort(x,ix,dir,flag)
-call psb_hsort(x,ix,dir,flag)
+call psb_isort(x,ix,dir,flag,reord)
+call psb_msort(x,ix,dir,flag,reord)
+call psb_qsort(x,ix,dir,flag,reord)
+call psb_hsort(x,ix,dir,flag,reord)
 

These serial routines sort a sequence

A vector of indices.
Type:optional.
Specified as: an integer array of (at least) the same size as X. +class="newline" />Specified as: an integer array of (at least) the same size as X. This + argument is required when reord = psb_sort_noreord_x_.

-

+

dir

-

The desired ordering.

The desired ordering.
Type:optional.
Specified as: an integer value:

-

+

Integer and real data:

-

psb_sort_up_, psb_sort_down_, psb_asort_up_, @@ -3952,11 +3959,11 @@ class="cmtt-10">psb_sort_up_.

-

+

Complex data:

-

psb_lsort_up_, psb_lsort_down_, psb_asort_up_, @@ -3964,11 +3971,11 @@ class="cmtt-10">psb_asort_up_, class="cmtt-10">psb_asort_down_; default psb_lsort_up_.

-

+

flag

-

Whether to keep the original values in

Whether to keep the original values in IX.
Type:optional.
psb_sort_ovw_idx_ or psb_sort_keep_idx_; default psb_sort_ovw_idx_. +

+

+reord

+

Whether to reorder the input vector x or just return IX for further + usage.
Type:optional.
Specified as: an integer value psb_sort_reord_x_ or psb_sort_noreord_x_; + default psb_sort_reord_x_.

-

+

-

+

On Return

-

+

-

+

x

-

The sequence of values, in the chosen ordering.

The sequence of values; if reord=psb_sort_reord_x_ it will be in the + chosen ordering.
Type:required.
Specified as: an integer, real or complex array of rank 1.

-

+

ix

-

A vector of indices.

A vector of indices.
Type: Optional
An integer array of rank 1, whose entries are moved to the same position - as the corresponding entries in x.

-

An integer array of rank 1, whose i-th entry gives the position of the + (sorted) value of x in the original sequence. + + + +

Notes

  1. -

    For integer or real data the sorting can be performed in the up/down +

    For integer or real data the sorting can be performed in the up/down direction, on the natural or absolute values;

  2. -

    For complex data the sorting can be done in a lexicographic order (i.e.: +

    For complex data the sorting can be done in a lexicographic order (i.e.: sort on the real part with ties broken according to the imaginary part) or on the absolute values; - - -

  3. -

    The routines return the items in the chosen ordering; the output +

    The routines return the items in the chosen ordering; the output difference is the handling of ties (i.e. items with an equal value) in the original input. With the insertion-sort or merge-sort algorithms ties are preserved in the same relative order as they had in the original sequence, @@ -4032,7 +4058,22 @@ class="pplb7t-x-x-120">Notes

  4. -

    If

    If reord = psb_sort_noreord_x_, then the input sequence x is not reordered; + the output is given in ix. Calling without ix in this case is flagged as an + error; +

  5. +
  6. +

    If flag = psb_) occupied in the original data sequence;

  7. -

    If +

    If flag = psb_ix(:) have already been initialized by the user;

  8. -

    Three sorting algorithms have a similar + + + +

    Three sorting algorithms have a similar O(n log ); of the other three, However note that:

    1. -

      The the best case running time for insertion sort is +

      The the best case running time for insertion sort is Ω(n) while the @@ -4110,8 +4154,8 @@ class="zplmr7t-">); however for very short input sequences this is likely to be the fastest method;

    2. -

      The worst case running time + class="enumerate" id="x12-105018x2"> +

      The worst case running time for quicksort is O(); the algorithm implemented here follows the apply;

    3. -

      The worst case running time for merge-sort and heap-sort is + class="enumerate" id="x12-105020x3"> +

      The worst case running time for merge-sort and heap-sort is O(n log n) as the average case; - - -

    4. -

      The merge-sort algorithm is implemented to take advantage of + class="enumerate" id="x12-105022x4"> +

      The merge-sort algorithm is implemented to take advantage of subsequences that may be already in the desired ordering prior to the subroutine call; this situation is relatively common when dealing with groups of indices of sparse matrix entries, thus merge-sort is diff --git a/docs/psblas-3.9.pdf b/docs/psblas-3.9.pdf index a0d16c372..4bbd69b48 100644 --- a/docs/psblas-3.9.pdf +++ b/docs/psblas-3.9.pdf @@ -21904,88 +21904,116 @@ endstream endobj 1742 0 obj << -/Length 6342 +/Length 7828 >> stream 0 g 0 G 0 g 0 G BT -/F75 11.9552 Tf 150.705 706.129 Td [(6.27)-1000(Sorting)-250(utilities)-250(\227)]TJ -0.371 -19.314 Td [(psb)]TJ +/F75 11.9552 Tf 150.705 706.129 Td [(6.27)-1000(Sorting)-250(utilities)-250(\227)]TJ -0.371 -18.964 Td [(psb)]TJ ET q -1 0 0 1 170.969 687.014 cm +1 0 0 1 170.969 687.364 cm []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 174.555 686.815 Td [(isort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Insertion-sort)-250(algorithm)]TJ -24.221 -12.136 Td [(psb)]TJ +/F75 11.9552 Tf 174.555 687.165 Td [(isort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Insertion-sort)-250(algorithm)]TJ -24.221 -11.955 Td [(psb)]TJ ET q -1 0 0 1 170.969 674.878 cm +1 0 0 1 170.969 675.409 cm []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 174.555 674.679 Td [(msort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Merge-sort)-250(algorithm)]TJ -24.221 -12.136 Td [(psb)]TJ +/F75 11.9552 Tf 174.555 675.21 Td [(msort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Merge-sort)-250(algorithm)]TJ -24.221 -11.955 Td [(psb)]TJ ET q -1 0 0 1 170.969 662.742 cm +1 0 0 1 170.969 663.454 cm []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 174.555 662.543 Td [(qsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Quicksort)-250(algorithm)]TJ -24.221 -12.136 Td [(psb)]TJ +/F75 11.9552 Tf 174.555 663.255 Td [(qsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Quicksort)-250(algorithm)]TJ -24.221 -11.955 Td [(psb)]TJ ET q -1 0 0 1 170.969 650.607 cm +1 0 0 1 170.969 651.499 cm []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 174.555 650.407 Td [(hsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Heapsort)-250(algorithm)]TJ +/F75 11.9552 Tf 174.555 651.3 Td [(hsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Heapsort)-250(algorithm)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -23.85 -20.648 Td [(call)-525(psb_isort\050x,ix,dir,flag\051)]TJ 0 -11.955 Td [(call)-525(psb_msort\050x,ix,dir,flag\051)]TJ 0 -11.955 Td [(call)-525(psb_qsort\050x,ix,dir,flag\051)]TJ 0 -11.955 Td [(call)-525(psb_hsort\050x,ix,dir,flag\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 573.426 Tm [(These)-314(serial)-313(r)17(outines)-313(sort)-314(a)-314(sequence)]TJ/F78 9.9626 Tf 1 0 0 1 335.711 573.426 Tm [(X)]TJ/F84 9.9626 Tf 1.02 0 0 1 346.436 573.426 Tm [(into)-314(ascending)-313(or)-314(descending)-314(or)18(-)]TJ 1.02 0 0 1 150.705 561.471 Tm [(der)73(.)-328(The)-253(ar)18(gument)-253(meaning)-253(is)-253(identical)-253(for)-253(all)-253(calls;)-257(the)-253(only)-253(dif)17(f)1(er)17(ence)-253(is)-253(the)]TJ 1 0 0 1 150.705 549.516 Tm [(algorithm)-250(used)-250(to)-250(accomplish)-250(the)-250(task)-250(\050see)-250(Usage)-250(Notes)-250(below\051.)]TJ +/F145 9.9626 Tf -23.85 -19.808 Td [(call)-525(psb_isort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_msort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_qsort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_hsort\050x,ix,dir,flag,reord\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 575.819 Tm [(These)-314(serial)-313(r)17(outines)-313(sort)-314(a)-314(sequence)]TJ/F78 9.9626 Tf 1 0 0 1 335.711 575.819 Tm [(X)]TJ/F84 9.9626 Tf 1.02 0 0 1 346.436 575.819 Tm [(into)-314(ascending)-313(or)-314(descending)-314(or)18(-)]TJ 1.02 0 0 1 150.705 563.864 Tm [(der)73(.)-328(The)-253(ar)18(gument)-253(meaning)-253(is)-253(identical)-253(for)-253(all)-253(calls;)-257(the)-253(only)-253(dif)17(f)1(er)17(ence)-253(is)-253(the)]TJ 1 0 0 1 150.705 551.909 Tm [(algorithm)-250(used)-250(to)-250(accomplish)-250(the)-250(task)-250(\050see)-250(Usage)-250(Notes)-250(below\051.)]TJ 0 g 0 G -/F75 9.9626 Tf 0 -20.467 Td [(T)90(ype:)]TJ +/F75 9.9626 Tf 0 -19.808 Td [(T)90(ype:)]TJ 0 g 0 G /F84 9.9626 Tf 29.439 0 Td [(Asynchr)18(onous.)]TJ 0 g 0 G -/F75 9.9626 Tf -29.439 -20.648 Td [(On)-250(Entry)]TJ +/F75 9.9626 Tf -29.439 -19.866 Td [(On)-250(Entry)]TJ 0 g 0 G 0 g 0 G - 0 -20.648 Td [(x)]TJ + 0 -19.866 Td [(x)]TJ 0 g 0 G -/F84 9.9626 Tf 9.654 0 Td [(The)-250(sequence)-250(to)-250(be)-250(sorted.)]TJ 14.944 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ +/F84 9.9626 Tf 9.654 0 Td [(The)-250(sequence)-250(to)-250(be)-250(sorted.)]TJ 14.944 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -20.648 Td [(ix)]TJ +/F75 9.9626 Tf -24.906 -19.866 Td [(ix)]TJ 0 g 0 G -/F84 9.9626 Tf 12.891 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.707 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(of)-250(\050at)-250(least\051)-250(the)-250(same)-250(size)-250(as)]TJ/F78 9.9626 Tf 254.19 0 Td [(X)]TJ/F84 9.9626 Tf 7.536 0 Td [(.)]TJ +/F84 9.9626 Tf 12.891 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.707 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 424.682 Tm [(Speci\002ed)-198(as:)-288(an)-198(integer)-198(array)-198(of)-198(\050at)-198(least\051)-198(t)1(he)-198(same)-198(size)-198(as)]TJ/F78 9.9626 Tf 1 0 0 1 418.918 424.682 Tm [(X)]TJ/F84 9.9626 Tf 0.98 0 0 1 426.455 424.682 Tm [(.)-297(This)-198(ar)18(gument)]TJ 1 0 0 1 175.611 412.726 Tm [(is)-250(r)18(equir)18(ed)-250(when)]TJ/F78 9.9626 Tf 76.926 0 Td [(r)-17(e)-25(o)-25(r)-17(d)]TJ/F192 10.3811 Tf 24.884 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ +ET +q +1 0 0 1 303.745 412.926 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F78 9.9626 Tf 306.858 412.726 Td [(s)-25(o)-25(r)-35(t)]TJ +ET +q +1 0 0 1 323.919 412.926 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F78 9.9626 Tf 327.032 412.726 Td [(n)-25(o)-25(r)-17(e)-25(o)-25(r)-17(d)]TJ +ET +q +1 0 0 1 360.083 412.926 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F78 9.9626 Tf 363.366 412.726 Td [(x)]TJ +ET +q +1 0 0 1 369.169 412.926 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F84 9.9626 Tf 372.158 412.726 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -286.632 -20.648 Td [(dir)]TJ +/F75 9.9626 Tf -221.453 -19.866 Td [(dir)]TJ 0 g 0 G /F84 9.9626 Tf 17.952 0 Td [(The)-250(desir)18(ed)-250(or)18(dering.)]TJ 6.646 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value:)]TJ 0 g 0 G -/F75 9.9626 Tf 0 -20.648 Td [(Integer)-250(and)-250(real)-250(data:)]TJ +/F75 9.9626 Tf 0 -19.867 Td [(Integer)-250(and)-250(real)-250(data:)]TJ 0 g 0 G -/F145 9.9626 Tf 101.28 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 339.655 354.078 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 345.778 354.078 Tm [(psb_sort_down_)]TJ/F84 9.9626 Tf 1.02 0 0 1 419.003 354.078 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 425.126 354.078 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 354.078 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 197.529 342.122 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 78.455 0 Td [(;)-250(default)]TJ/F145 9.9626 Tf 38.784 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 62.765 0 Td [(.)]TJ +/F145 9.9626 Tf 101.28 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 339.655 349.083 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 345.778 349.083 Tm [(psb_sort_down_)]TJ/F84 9.9626 Tf 1.02 0 0 1 419.003 349.083 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 425.126 349.083 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 349.083 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 197.529 337.128 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 78.455 0 Td [(;)-250(default)]TJ/F145 9.9626 Tf 38.784 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 62.765 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -201.922 -16.301 Td [(Complex)-250(data:)]TJ +/F75 9.9626 Tf -201.922 -15.881 Td [(Complex)-250(data:)]TJ 0 g 0 G -/F145 9.9626 Tf 70.287 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 313.892 325.821 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 318.345 325.821 Tm [(psb_lsort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.8 325.821 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 401.254 325.821 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 469.248 325.821 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 473.701 325.821 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 552.157 325.821 Tm [(;)]TJ 1 0 0 1 197.529 313.866 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 67.994 0 Td [(.)]TJ +/F145 9.9626 Tf 70.287 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 313.892 321.247 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 318.345 321.247 Tm [(psb_lsort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.8 321.247 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 401.254 321.247 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 469.248 321.247 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 473.701 321.247 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 552.157 321.247 Tm [(;)]TJ 1 0 0 1 197.529 309.292 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 67.994 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -148.621 -20.648 Td [(\003ag)]TJ +/F75 9.9626 Tf -148.621 -19.867 Td [(\003ag)]TJ 0 g 0 G -/F84 9.9626 Tf 21.091 0 Td [(Whether)-250(to)-250(keep)-250(the)-250(original)-250(values)-250(in)]TJ/F78 9.9626 Tf 171.519 0 Td [(I)-81(X)]TJ/F84 9.9626 Tf 11.661 0 Td [(.)]TJ -179.673 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 269.307 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 301.54 269.307 Tm [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 269.307 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 403.429 269.307 Tm [(psb_sort_keep_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 497.575 269.307 Tm [(;)]TJ 1 0 0 1 175.611 257.352 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ +/F84 9.9626 Tf 21.091 0 Td [(Whether)-250(to)-250(keep)-250(the)-250(original)-250(values)-250(in)]TJ/F78 9.9626 Tf 171.519 0 Td [(I)-81(X)]TJ/F84 9.9626 Tf 11.661 0 Td [(.)]TJ -179.673 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 265.515 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 301.54 265.515 Tm [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 265.515 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 403.429 265.515 Tm [(psb_sort_keep_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 497.575 265.515 Tm [(;)]TJ 1 0 0 1 175.611 253.56 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -147.625 -22.64 Td [(On)-250(Return)]TJ +/F75 9.9626 Tf -147.625 -19.866 Td [(reord)]TJ 0 g 0 G +/F84 9.9626 Tf 0.984 0 0 1 179.546 233.694 Tm [(Whether)-253(to)-254(r)19(eor)18(der)-253(the)-254(input)-253(vector)]TJ/F78 9.9626 Tf 1 0 0 1 337.115 233.694 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 344.804 233.694 Tm [(or)-253(just)-254(r)19(eturn)]TJ/F78 9.9626 Tf 1 0 0 1 404.732 233.694 Tm [(I)-81(X)]TJ/F84 9.9626 Tf 0.984 0 0 1 418.877 233.694 Tm [(for)-253(further)-254(usage.)]TJ 1 0 0 1 175.303 221.738 Tm [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 209.783 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 301.54 209.783 Tm [(psb_sort_reord_x_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 209.783 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 403.429 209.783 Tm [(psb_sort_noreord_x_)]TJ/F84 9.9626 Tf 0.98 0 0 1 502.806 209.783 Tm [(;)]TJ 1 0 0 1 175.611 197.828 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_sort_reord_x_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ 0 g 0 G - 0 -20.648 Td [(x)]TJ +/F75 9.9626 Tf -147.625 -21.771 Td [(On)-250(Return)]TJ 0 g 0 G -/F84 9.9626 Tf 9.654 0 Td [(The)-250(sequence)-250(of)-250(values,)-250(in)-250(the)-250(chosen)-250(or)18(dering.)]TJ 14.944 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -20.648 Td [(ix)]TJ + 0 -19.866 Td [(x)]TJ 0 g 0 G -/F84 9.9626 Tf 12.891 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.707 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(Optional)]TJ/F84 9.9626 Tf 0.996 0 0 1 175.223 145.595 Tm [(An)-251(integer)-250(array)-251(of)-251(rank)-250(1,)-251(whose)-251(entries)-250(ar)18(e)-251(moved)-251(to)-250(the)-251(same)-251(position)]TJ 1 0 0 1 175.611 133.64 Tm [(as)-250(the)-250(corr)18(esponding)-250(entries)-250(in)]TJ/F78 9.9626 Tf 138.215 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ +/F84 9.9626 Tf 0.984 0 0 1 160.359 156.191 Tm [(The)-254(sequence)-254(of)-254(values;)-254(if)]TJ/F145 9.9626 Tf 1 0 0 1 274.16 156.191 Tm [(reord=psb_sort_reord_x_)]TJ/F84 9.9626 Tf 0.984 0 0 1 396.947 156.191 Tm [(it)-254(will)-254(be)-254(in)-254(the)-254(chosen)]TJ 1 0 0 1 175.611 144.236 Tm [(or)18(dering.)]TJ -0.308 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ 0 g 0 G - -3.944 -43.202 Td [(110)]TJ + 139.477 -29.888 Td [(110)]TJ 0 g 0 G ET @@ -21993,117 +22021,152 @@ endstream endobj 1746 0 obj << -/Length 9569 +/Length 11593 >> stream 0 g 0 G 0 g 0 G +0 g 0 G BT -/F75 11.9552 Tf 99.895 706.129 Td [(Notes)]TJ +/F75 9.9626 Tf 99.895 706.129 Td [(ix)]TJ 0 g 0 G -/F84 9.9626 Tf 12.454 -19.925 Td [(1.)]TJ +/F84 9.9626 Tf 12.892 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.706 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(Optional)]TJ/F84 9.9626 Tf 1.02 0 0 1 124.413 682.219 Tm [(An)-353(integer)-353(array)-354(of)-353(rank)-353(1,)-380(whose)]TJ/F78 9.9626 Tf 1 0 0 1 285.438 682.219 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 288.402 682.219 Tm [(-th)-353(entry)-353(gives)-354(the)-353(position)-353(of)-353(the)]TJ 1 0 0 1 124.473 670.263 Tm [(\050sorted\051)-250(value)-250(of)]TJ/F78 9.9626 Tf 75.152 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(in)-250(the)-250(original)-250(sequence.)]TJ/F75 11.9552 Tf -107.426 -21.917 Td [(Notes)]TJ +0 g 0 G +/F84 9.9626 Tf 12.454 -19.926 Td [(1.)]TJ 0 g 0 G - 1.02 0 0 1 124.802 686.204 Tm [(For)-318(integer)-317(or)-318(r)18(eal)-318(data)-318(the)-318(sorting)-317(can)-318(be)-318(performed)-317(in)-318(the)-318(up/down)]TJ 1 0 0 1 124.802 674.248 Tm [(dir)18(ection,)-250(on)-250(the)-250(natural)-250(or)-250(absolute)-250(values;)]TJ + 1.02 0 0 1 124.802 628.42 Tm [(For)-318(integer)-317(or)-318(r)18(eal)-318(data)-318(the)-318(sorting)-317(can)-318(be)-318(performed)-317(in)-318(the)-318(up/down)]TJ 1 0 0 1 124.802 616.465 Tm [(dir)18(ection,)-250(on)-250(the)-250(natural)-250(or)-250(absolute)-250(values;)]TJ 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 124.802 654.323 Tm [(For)-287(complex)-288(data)-287(the)-287(sorting)-288(can)-287(be)-287(done)-288(in)-287(a)-287(lexicographic)-288(or)18(der)-287(\050i.e.:)]TJ 1.007 0 0 1 124.802 642.368 Tm [(sort)-247(on)-248(the)-247(r)18(eal)-248(part)-247(with)-248(tie)1(s)-248(br)18(oken)-247(accor)17(ding)-247(to)-247(the)-248(imaginary)-247(part\051)-248(or)]TJ 1 0 0 1 124.802 630.413 Tm [(on)-250(the)-250(absolute)-250(values;)]TJ + 1.02 0 0 1 124.802 596.54 Tm [(For)-287(complex)-288(data)-287(the)-287(sorting)-288(can)-287(be)-287(done)-288(in)-287(a)-287(lexicographic)-288(or)18(der)-287(\050i.e.:)]TJ 1.007 0 0 1 124.802 584.585 Tm [(sort)-247(on)-248(the)-247(r)18(eal)-248(part)-247(with)-248(tie)1(s)-248(br)18(oken)-247(accor)17(ding)-247(to)-247(the)-248(imaginary)-247(part\051)-248(or)]TJ 1 0 0 1 124.802 572.629 Tm [(on)-250(the)-250(absolute)-250(values;)]TJ 0 g 0 G -12.453 -19.925 Td [(3.)]TJ 0 g 0 G - 0.98 0 0 1 124.493 610.488 Tm [(The)-240(r)18(outines)-240(r)18(et)1(urn)-241(the)-240(items)-240(in)-240(the)-240(chosen)-240(or)18(dering;)-245(the)-240(output)-240(dif)18(fer)18(ence)]TJ 0.98 0 0 1 124.802 598.532 Tm [(is)-256(the)-256(handling)-256(of)-256(ties)-256(\050i.e.)-318(items)-256(with)-256(an)-256(equal)-256(value\051)-256(in)-256(the)-256(original)-256(input.)]TJ 1 0 0 1 124.304 586.577 Tm [(W)55(ith)-250(the)-250(insertion-sort)-250(or)-250(mer)18(ge-sort)-250(algorithms)-250(ties)-250(ar)18(e)-250(pr)18(eserved)-250(in)-250(the)]TJ 0.997 0 0 1 124.802 574.622 Tm [(same)-250(r)18(elative)-250(or)18(der)-251(as)-250(they)-250(had)-251(i)1(n)-251(the)-250(original)-250(sequence,)-251(while)-250(this)-250(is)-250(not)]TJ 1 0 0 1 124.802 562.667 Tm [(guaranteed)-250(for)-250(quicksort)-250(or)-250(heapsort;)]TJ + 0.98 0 0 1 124.493 552.704 Tm [(The)-240(r)18(outines)-240(r)18(et)1(urn)-241(the)-240(items)-240(in)-240(the)-240(chosen)-240(or)18(dering;)-245(the)-240(output)-240(dif)18(fer)18(ence)]TJ 0.98 0 0 1 124.802 540.749 Tm [(is)-256(the)-256(handling)-256(of)-256(ties)-256(\050i.e.)-318(items)-256(with)-256(an)-256(equal)-256(value\051)-256(in)-256(the)-256(original)-256(input.)]TJ 1 0 0 1 124.304 528.794 Tm [(W)55(ith)-250(the)-250(insertion-sort)-250(or)-250(mer)18(ge-sort)-250(algorithms)-250(ties)-250(ar)18(e)-250(pr)18(eserved)-250(in)-250(the)]TJ 0.997 0 0 1 124.802 516.839 Tm [(same)-250(r)18(elative)-250(or)18(der)-251(as)-250(they)-250(had)-251(i)1(n)-251(the)-250(original)-250(sequence,)-251(while)-250(this)-250(is)-250(not)]TJ 1 0 0 1 124.802 504.884 Tm [(guaranteed)-250(for)-250(quicksort)-250(or)-250(heapsort;)]TJ 0 g 0 G - -12.453 -19.925 Td [(4.)]TJ + -12.453 -19.926 Td [(4.)]TJ 0 g 0 G - 0.98 0 0 1 124.802 542.742 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 135.146 542.742 Tm [(f)-160(l)-70(a)-47(g)]TJ/F192 10.3811 Tf 20.72 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ + 0.99 0 0 1 124.802 484.958 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 133.93 484.958 Tm [(r)-17(e)-25(o)-25(r)-17(d)]TJ/F192 10.3811 Tf 24.891 0 Td [(=)]TJ/F78 9.9626 Tf 11.642 0 Td [(p)-25(s)-25(b)]TJ ET q -1 0 0 1 182.189 542.941 cm +1 0 0 1 185.152 485.158 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 185.303 542.742 Td [(s)-25(o)-25(r)-35(t)]TJ +/F78 9.9626 Tf 188.266 484.958 Td [(s)-25(o)-25(r)-35(t)]TJ ET q -1 0 0 1 202.364 542.941 cm +1 0 0 1 205.326 485.158 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 205.477 542.742 Td [(o)-35(v)-25(w)]TJ +/F78 9.9626 Tf 208.44 484.958 Td [(n)-25(o)-25(r)-17(e)-25(o)-25(r)-17(d)]TJ ET q -1 0 0 1 223.394 542.941 cm +1 0 0 1 241.49 485.158 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 226.438 542.742 Td [(i)-32(d)-42(x)]TJ +/F78 9.9626 Tf 244.773 484.958 Td [(x)]TJ ET q -1 0 0 1 240.729 542.941 cm +1 0 0 1 250.576 485.158 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F84 9.9626 Tf 0.98 0 0 1 246.101 542.742 Tm [(then)-244(the)-244(entries)-244(in)]TJ/F78 9.9626 Tf 1 0 0 1 326.032 542.742 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.587 0 Td [(\050)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.769 542.742 Tm [(1)]TJ 1 0 0 1 346.542 542.742 Tm [(:)]TJ/F78 9.9626 Tf 5.507 0 Td [(n)]TJ/F192 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.37 542.742 Tm [(wher)18(e)]TJ/F78 9.9626 Tf 1 0 0 1 393.733 542.742 Tm [(n)]TJ/F84 9.9626 Tf 0.98 0 0 1 401.779 542.742 Tm [(is)-244(the)-244(size)]TJ 0.984 0 0 1 124.802 530.786 Tm [(of)]TJ/F78 9.9626 Tf 1 0 0 1 136.206 530.786 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 143.904 530.786 Tm [(ar)18(e)-254(initialized)-254(to)]TJ/F78 9.9626 Tf 1 0 0 1 216.929 530.786 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.588 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.046 0 Td [(\040)]TJ/F78 9.9626 Tf 13.332 0 Td [(i)]TJ/F84 9.9626 Tf 0.984 0 0 1 256.15 530.786 Tm [(;)-254(thus,)-255(upon)-254(r)18(eturn)-254(fr)18(om)-254(the)-254(subr)18(outine,)-254(for)]TJ 1.02 0 0 1 124.802 518.831 Tm [(each)-260(index)]TJ/F78 9.9626 Tf 1 0 0 1 175.703 518.831 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 181.308 518.831 Tm [(we)-260(have)-260(in)]TJ/F78 9.9626 Tf 1 0 0 1 233.102 518.831 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.588 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 255.772 518.831 Tm [(the)-260(position)-260(that)-260(the)-259(item)]TJ/F78 9.9626 Tf 1 0 0 1 371.842 518.831 Tm [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 391.255 518.831 Tm [(occupied)-260(in)]TJ 1 0 0 1 124.802 506.876 Tm [(the)-250(original)-250(data)-250(sequence;)]TJ +/F84 9.9626 Tf 0.99 0 0 1 253.565 484.958 Tm [(,)-253(then)-253(the)-253(input)-253(sequence)]TJ/F78 9.9626 Tf 1 0 0 1 365.544 484.958 Tm [(x)]TJ/F84 9.9626 Tf 0.99 0 0 1 373.244 484.958 Tm [(is)-253(not)-253(r)18(eor)19(der)18(ed;)]TJ 1.02 0 0 1 124.802 473.003 Tm [(the)-254(output)-255(i)1(s)-255(given)-254(in)]TJ/F78 9.9626 Tf 1 0 0 1 223.674 473.003 Tm [(i)-49(x)]TJ/F84 9.9626 Tf 1.02 0 0 1 232.137 473.003 Tm [(.)-331(Calling)-255(without)]TJ/F78 9.9626 Tf 1 0 0 1 311.637 473.003 Tm [(i)-49(x)]TJ/F84 9.9626 Tf 1.02 0 0 1 322.684 473.003 Tm [(in)-254(this)-255(case)-254(is)-254(\003agged)-254(as)-255(an)]TJ 1 0 0 1 124.802 461.048 Tm [(err)18(or;)]TJ 0 g 0 G -12.453 -19.925 Td [(5.)]TJ 0 g 0 G - 1.02 0 0 1 124.802 486.951 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 136.291 486.951 Tm [(f)-160(l)-70(a)-47(g)]TJ/F192 10.3811 Tf 22.147 0 Td [(=)]TJ/F78 9.9626 Tf 13.061 0 Td [(p)-25(s)-25(b)]TJ + 0.98 0 0 1 124.802 441.123 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 135.146 441.123 Tm [(f)-160(l)-70(a)-47(g)]TJ/F192 10.3811 Tf 20.72 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ +ET +q +1 0 0 1 182.189 441.322 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F78 9.9626 Tf 185.303 441.123 Td [(s)-25(o)-25(r)-35(t)]TJ +ET +q +1 0 0 1 202.364 441.322 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F78 9.9626 Tf 205.477 441.123 Td [(o)-35(v)-25(w)]TJ +ET +q +1 0 0 1 223.394 441.322 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F78 9.9626 Tf 226.438 441.123 Td [(i)-32(d)-42(x)]TJ +ET +q +1 0 0 1 240.729 441.322 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F84 9.9626 Tf 0.98 0 0 1 246.101 441.123 Tm [(then)-244(the)-244(entries)-244(in)]TJ/F78 9.9626 Tf 1 0 0 1 326.032 441.123 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.587 0 Td [(\050)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.769 441.123 Tm [(1)]TJ 1 0 0 1 346.542 441.123 Tm [(:)]TJ/F78 9.9626 Tf 5.507 0 Td [(n)]TJ/F192 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.37 441.123 Tm [(wher)18(e)]TJ/F78 9.9626 Tf 1 0 0 1 393.733 441.123 Tm [(n)]TJ/F84 9.9626 Tf 0.98 0 0 1 401.779 441.123 Tm [(is)-244(the)-244(size)]TJ 0.984 0 0 1 124.802 429.167 Tm [(of)]TJ/F78 9.9626 Tf 1 0 0 1 136.206 429.167 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 143.904 429.167 Tm [(ar)18(e)-254(initialized)-254(to)]TJ/F78 9.9626 Tf 1 0 0 1 216.929 429.167 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.588 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.046 0 Td [(\040)]TJ/F78 9.9626 Tf 13.332 0 Td [(i)]TJ/F84 9.9626 Tf 0.984 0 0 1 256.15 429.167 Tm [(;)-254(thus,)-255(upon)-254(r)18(eturn)-254(fr)18(om)-254(the)-254(subr)18(outine,)-254(for)]TJ 1.02 0 0 1 124.802 417.212 Tm [(each)-260(index)]TJ/F78 9.9626 Tf 1 0 0 1 175.703 417.212 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 181.308 417.212 Tm [(we)-260(have)-260(in)]TJ/F78 9.9626 Tf 1 0 0 1 233.102 417.212 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.588 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 255.772 417.212 Tm [(the)-260(position)-260(that)-260(the)-259(item)]TJ/F78 9.9626 Tf 1 0 0 1 371.842 417.212 Tm [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 391.255 417.212 Tm [(occupied)-260(in)]TJ 1 0 0 1 124.802 405.257 Tm [(the)-250(original)-250(data)-250(sequence;)]TJ +0 g 0 G + -12.453 -19.925 Td [(6.)]TJ +0 g 0 G + 1.02 0 0 1 124.802 385.332 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 136.291 385.332 Tm [(f)-160(l)-70(a)-47(g)]TJ/F192 10.3811 Tf 22.147 0 Td [(=)]TJ/F78 9.9626 Tf 13.061 0 Td [(p)-25(s)-25(b)]TJ ET q -1 0 0 1 186.188 487.15 cm +1 0 0 1 186.188 385.531 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 189.302 486.951 Td [(s)-25(o)-25(r)-35(t)]TJ +/F78 9.9626 Tf 189.302 385.332 Td [(s)-25(o)-25(r)-35(t)]TJ ET q -1 0 0 1 206.362 487.15 cm +1 0 0 1 206.362 385.531 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 209.476 486.951 Td [(k)-30(e)-25(e)-80(p)]TJ +/F78 9.9626 Tf 209.476 385.332 Td [(k)-30(e)-25(e)-80(p)]TJ ET q -1 0 0 1 228.698 487.15 cm +1 0 0 1 228.698 385.531 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 231.742 486.951 Td [(i)-32(d)-42(x)]TJ +/F78 9.9626 Tf 231.742 385.332 Td [(i)-32(d)-42(x)]TJ ET q -1 0 0 1 246.033 487.15 cm +1 0 0 1 246.033 385.531 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F84 9.9626 Tf 1.02 0 0 1 252.283 486.951 Tm [(the)-321(r)18(outine)-321(will)-321(assume)-321(that)-321(the)-321(entries)-321(in)]TJ/F78 9.9626 Tf 1 0 0 1 124.857 474.996 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.587 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)]TJ/F192 10.3811 Tf 2.74 0 Td [(\051)]TJ/F84 9.9626 Tf 6.64 0 Td [(have)-250(alr)18(eady)-250(been)-250(initialized)-250(by)-250(the)-250(user;)]TJ +/F84 9.9626 Tf 1.02 0 0 1 252.283 385.332 Tm [(the)-321(r)18(outine)-321(will)-321(assume)-321(that)-321(the)-321(entries)-321(in)]TJ/F78 9.9626 Tf 1 0 0 1 124.857 373.377 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.587 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)]TJ/F192 10.3811 Tf 2.74 0 Td [(\051)]TJ/F84 9.9626 Tf 6.64 0 Td [(have)-250(alr)18(eady)-250(been)-250(initialized)-250(by)-250(the)-250(user;)]TJ 0 g 0 G - -34.749 -19.926 Td [(6.)]TJ + -34.749 -19.926 Td [(7.)]TJ 0 g 0 G - 0.98 0 0 1 124.493 455.07 Tm [(Thr)18(ee)-256(sorting)-256(algorithms)-256(have)-256(a)-256(similar)]TJ/F78 9.9626 Tf 1 0 0 1 296.993 455.07 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.662 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 344.691 455.07 Tm [(expected)-256(r)8(unning)-256(time,)]TJ 1.017 0 0 1 124.384 443.115 Tm [(wher)18(eas)-247(insertion)-246(sort)-247(has)-246(an)-247(expected)-246(r)8(unning)-247(time)]TJ/F78 9.9626 Tf 1 0 0 1 360.734 443.115 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 387.23 443.115 Tm [(;)-247(of)-246(the)-247(other)]TJ 0.999 0 0 1 124.802 431.16 Tm [(thr)18(ee,)-250(in)-250(the)-249(average)-250(case)-250(quicksort)-250(will)-249(be)-250(the)-250(fastest)-250(and)-249(mer)18(ge-sort)-250(the)]TJ 1 0 0 1 124.802 419.205 Tm [(slowest.)-310(However)-250(note)-250(that:)]TJ + 0.98 0 0 1 124.493 353.451 Tm [(Thr)18(ee)-256(sorting)-256(algorithms)-256(have)-256(a)-256(similar)]TJ/F78 9.9626 Tf 1 0 0 1 296.993 353.451 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.662 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 344.691 353.451 Tm [(expected)-256(r)8(unning)-256(time,)]TJ 1.017 0 0 1 124.384 341.496 Tm [(wher)18(eas)-247(insertion)-246(sort)-247(has)-246(an)-247(expected)-246(r)8(unning)-247(time)]TJ/F78 9.9626 Tf 1 0 0 1 360.734 341.496 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 387.23 341.496 Tm [(;)-247(of)-246(the)-247(other)]TJ 0.999 0 0 1 124.802 329.541 Tm [(thr)18(ee,)-250(in)-250(the)-249(average)-250(case)-250(quicksort)-250(will)-249(be)-250(the)-250(fastest)-250(and)-249(mer)18(ge-sort)-250(the)]TJ 1 0 0 1 124.802 317.586 Tm [(slowest.)-310(However)-250(note)-250(that:)]TJ 0 g 0 G 5.32 -19.925 Td [(\050a\051)]TJ 0 g 0 G - 1.02 0 0 1 146.411 399.28 Tm [(The)-274(the)-273(best)-274(case)-274(r)8(unning)-274(ti)1(me)-274(for)-274(insertion)-274(so)1(rt)-274(is)]TJ/F243 9.9626 Tf 1 0 0 1 376.039 399.28 Tm [(W)]TJ/F192 10.3811 Tf 8.528 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 401.56 399.28 Tm [(while)-274(the)]TJ 1.02 0 0 1 146.72 387.324 Tm [(average)-359(and)-360(worst)-359(case)-359(ar)17(e)]TJ/F78 9.9626 Tf 1 0 0 1 275.57 387.324 Tm [(O)]TJ/F192 10.3811 Tf 7.999 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F192 10.3811 Tf 4.409 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 302.065 387.324 Tm [(;)-416(however)-360(for)-359(very)-359(short)-360(input)]TJ 1 0 0 1 146.72 375.369 Tm [(sequences)-250(this)-250(is)-250(likely)-250(to)-250(be)-250(the)-250(fastest)-250(method;)]TJ + 1.02 0 0 1 146.411 297.661 Tm [(The)-274(the)-273(best)-274(case)-274(r)8(unning)-274(ti)1(me)-274(for)-274(insertion)-274(so)1(rt)-274(is)]TJ/F243 9.9626 Tf 1 0 0 1 376.039 297.661 Tm [(W)]TJ/F192 10.3811 Tf 8.528 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 401.56 297.661 Tm [(while)-274(the)]TJ 1.02 0 0 1 146.72 285.705 Tm [(average)-359(and)-360(worst)-359(case)-359(ar)17(e)]TJ/F78 9.9626 Tf 1 0 0 1 275.57 285.705 Tm [(O)]TJ/F192 10.3811 Tf 7.999 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F192 10.3811 Tf 4.409 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 302.065 285.705 Tm [(;)-416(however)-360(for)-359(very)-359(short)-360(input)]TJ 1 0 0 1 146.72 273.75 Tm [(sequences)-250(this)-250(is)-250(likely)-250(to)-250(be)-250(the)-250(fastest)-250(method;)]TJ 0 g 0 G -17.126 -15.94 Td [(\050b\051)]TJ 0 g 0 G - 0.98 0 0 1 146.411 359.429 Tm [(The)-241(worst)-240(case)-241(r)8(unning)-241(time)-240(for)-241(quicksort)-241(is)]TJ/F78 9.9626 Tf 1 0 0 1 338.306 359.429 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.616 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.616 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.802 359.429 Tm [(;)-245(the)-241(algorithm)-241(im-)]TJ 1.007 0 0 1 146.421 347.474 Tm [(plemented)-246(her)18(e)-246(follows)-246(the)-246(well-known)-246(median-of-thr)18(ee)-246(heuristics,)]TJ 1 0 0 1 146.72 335.519 Tm [(but)-250(the)-250(worst)-250(case)-250(may)-250(still)-250(apply;)]TJ + 0.98 0 0 1 146.411 257.81 Tm [(The)-241(worst)-240(case)-241(r)8(unning)-241(time)-240(for)-241(quicksort)-241(is)]TJ/F78 9.9626 Tf 1 0 0 1 338.306 257.81 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.616 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.616 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.802 257.81 Tm [(;)-245(the)-241(algorithm)-241(im-)]TJ 1.007 0 0 1 146.421 245.855 Tm [(plemented)-246(her)18(e)-246(follows)-246(the)-246(well-known)-246(median-of-thr)18(ee)-246(heuristics,)]TJ 1 0 0 1 146.72 233.9 Tm [(but)-250(the)-250(worst)-250(case)-250(may)-250(still)-250(apply;)]TJ 0 g 0 G - -16.04 -15.941 Td [(\050c\051)]TJ + -16.04 -15.94 Td [(\050c\051)]TJ 0 g 0 G - 0.98 0 0 1 146.411 319.578 Tm [(The)-194(worst)-194(case)-194(r)9(unning)-194(time)-194(for)-194(mer)18(ge-sort)-193(and)-194(heap-sort)-194(is)]TJ/F78 9.9626 Tf 1 0 0 1 402.204 319.578 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.663 0 Td [(n)]TJ/F192 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf -296.533 -11.955 Td [(as)-250(the)-250(average)-250(case;)]TJ + 0.98 0 0 1 146.411 217.96 Tm [(The)-194(worst)-194(case)-194(r)9(unning)-194(time)-194(for)-194(mer)18(ge-sort)-193(and)-194(heap-sort)-194(is)]TJ/F78 9.9626 Tf 1 0 0 1 402.204 217.96 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.663 0 Td [(n)]TJ/F192 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf -296.533 -11.956 Td [(as)-250(the)-250(average)-250(case;)]TJ 0 g 0 G -17.704 -15.94 Td [(\050d\051)]TJ 0 g 0 G - 1.005 0 0 1 146.411 291.683 Tm [(The)-249(mer)18(ge-sort)-249(algorithm)-249(is)-249(implemented)-249(to)-250(take)-249(advantage)-249(of)-249(sub-)]TJ 1.02 0 0 1 146.72 279.728 Tm [(sequences)-260(that)-261(may)-261(be)-260(alr)18(eady)-261(in)-260(the)-261(desir)18(ed)-261(or)18(dering)-261(prior)-260(to)-261(the)]TJ 1.02 0 0 1 146.72 267.773 Tm [(subr)18(outine)-321(call;)-358(this)-321(situation)-320(is)-321(r)18(elatively)-321(common)-320(when)-321(dealing)]TJ 0.98 0 0 1 146.301 255.818 Tm [(with)-239(gr)18(oups)-240(of)-239(indices)-239(of)-240(sparse)-239(matrix)-240(entries,)-242(thus)-240(mer)19(ge-sort)-240(is)-239(the)]TJ 1.02 0 0 1 146.421 243.862 Tm [(pr)18(eferr)17(ed)-268(choice)-268(when)-268(a)-268(sorting)-268(is)-268(needed)-268(by)-269(other)-268(r)18(outines)-268(in)-268(the)]TJ 1 0 0 1 146.72 231.907 Tm [(library)111(.)]TJ + 1.005 0 0 1 146.411 190.064 Tm [(The)-249(mer)18(ge-sort)-249(algorithm)-249(is)-249(implemented)-249(to)-250(take)-249(advantage)-249(of)-249(sub-)]TJ 1.02 0 0 1 146.72 178.109 Tm [(sequences)-260(that)-261(may)-261(be)-260(alr)18(eady)-261(in)-260(the)-261(desir)18(ed)-261(or)18(dering)-261(prior)-260(to)-261(the)]TJ 1.02 0 0 1 146.72 166.154 Tm [(subr)18(outine)-321(call;)-358(this)-321(situation)-320(is)-321(r)18(elatively)-321(common)-320(when)-321(dealing)]TJ 0.98 0 0 1 146.301 154.199 Tm [(with)-239(gr)18(oups)-240(of)-239(indices)-239(of)-240(sparse)-239(matrix)-240(entries,)-242(thus)-240(mer)19(ge-sort)-240(is)-239(the)]TJ 1.02 0 0 1 146.421 142.243 Tm [(pr)18(eferr)17(ed)-268(choice)-268(when)-268(a)-268(sorting)-268(is)-268(needed)-268(by)-269(other)-268(r)18(outines)-268(in)-268(the)]TJ 1 0 0 1 146.72 130.288 Tm [(library)111(.)]TJ 0 g 0 G - 117.559 -141.469 Td [(111)]TJ + 117.559 -39.85 Td [(111)]TJ 0 g 0 G ET endstream endobj -1760 0 obj +1761 0 obj << /Length 172 >> @@ -22119,7 +22182,7 @@ ET endstream endobj -1764 0 obj +1765 0 obj << /Length 6837 >> @@ -22211,7 +22274,7 @@ ET endstream endobj -1770 0 obj +1771 0 obj << /Length 4738 >> @@ -22267,7 +22330,7 @@ ET endstream endobj -1776 0 obj +1777 0 obj << /Length 4507 >> @@ -22320,7 +22383,7 @@ ET endstream endobj -1784 0 obj +1785 0 obj << /Length 2607 >> @@ -22378,7 +22441,7 @@ ET endstream endobj -1788 0 obj +1789 0 obj << /Length 3383 >> @@ -22440,7 +22503,7 @@ ET endstream endobj -1792 0 obj +1793 0 obj << /Length 1171 >> @@ -22477,7 +22540,7 @@ ET endstream endobj -1796 0 obj +1797 0 obj << /Length 1466 >> @@ -22514,7 +22577,7 @@ ET endstream endobj -1800 0 obj +1801 0 obj << /Length 1287 >> @@ -22551,7 +22614,7 @@ ET endstream endobj -1804 0 obj +1805 0 obj << /Length 6065 >> @@ -22611,7 +22674,7 @@ ET endstream endobj -1809 0 obj +1810 0 obj << /Length 5230 >> @@ -22734,7 +22797,7 @@ ET endstream endobj -1817 0 obj +1818 0 obj << /Length 6196 >> @@ -22794,7 +22857,7 @@ ET endstream endobj -1821 0 obj +1822 0 obj << /Length 5025 >> @@ -22922,19 +22985,19 @@ endobj /Type /ObjStm /N 100 /First 971 -/Length 9352 +/Length 9365 >> stream 1717 0 1718 59 1713 118 1722 213 1720 352 1724 497 413 555 1721 612 1726 735 1728 853 1729 912 1730 971 1731 1030 1725 1089 1736 1211 1732 1368 1733 1513 1734 1660 1738 1807 417 1865 -1735 1922 1741 2030 1743 2148 421 2207 1740 2265 1745 2373 1747 2491 1748 2549 1749 2607 1750 2665 -1751 2723 1752 2781 1753 2839 1754 2897 1755 2955 1756 3013 1757 3071 1744 3129 1759 3266 1761 3384 -425 3443 1758 3501 1763 3582 1765 3700 429 3758 1766 3815 1767 3873 1762 3931 1769 4067 1771 4185 -433 4244 1772 4302 1773 4360 1768 4417 1775 4553 1777 4671 437 4729 1778 4786 1779 4844 1780 4902 -1774 4960 1783 5096 1785 5214 441 5273 1782 5331 1787 5426 1789 5544 445 5602 1786 5659 1791 5781 -1793 5899 449 5958 1790 6016 1795 6111 1797 6229 453 6287 1794 6344 1799 6439 1801 6557 457 6616 -1798 6674 1803 6769 1805 6887 461 6945 1802 7002 1808 7153 1810 7271 1811 7330 1812 7389 1813 7448 -1807 7507 1816 7645 1818 7763 465 7821 1815 7878 1820 8029 1822 8147 1823 8206 1824 8265 1825 8323 +1735 1922 1741 2030 1743 2148 421 2207 1740 2265 1745 2387 1747 2505 1748 2563 1749 2621 1750 2679 +1751 2736 1752 2794 1753 2852 1754 2910 1755 2968 1756 3026 1757 3084 1758 3142 1744 3200 1760 3337 +1762 3455 425 3514 1759 3572 1764 3653 1766 3771 429 3829 1767 3886 1768 3944 1763 4002 1770 4138 +1772 4256 433 4315 1773 4373 1774 4431 1769 4488 1776 4624 1778 4742 437 4800 1779 4857 1780 4915 +1781 4973 1775 5031 1784 5167 1786 5285 441 5344 1783 5402 1788 5497 1790 5615 445 5673 1787 5730 +1792 5852 1794 5970 449 6029 1791 6087 1796 6182 1798 6300 453 6358 1795 6415 1800 6510 1802 6628 +457 6687 1799 6745 1804 6840 1806 6958 461 7016 1803 7073 1809 7224 1811 7342 1812 7401 1813 7460 +1814 7519 1808 7578 1817 7716 1819 7834 465 7892 1816 7949 1821 8100 1823 8218 1824 8277 1825 8336 % 1717 0 obj << /D [1714 0 R /XYZ 150.705 370.138 null] @@ -23071,7 +23134,7 @@ stream >> % 1740 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R >> /ProcSet [ /PDF /Text ] >> % 1745 0 obj @@ -23088,365 +23151,365 @@ stream >> % 1748 0 obj << -/D [1745 0 R /XYZ 99.895 701.929 null] +/D [1745 0 R /XYZ 99.895 644.145 null] >> % 1749 0 obj << -/D [1745 0 R /XYZ 99.895 668.729 null] +/D [1745 0 R /XYZ 99.895 610.946 null] >> % 1750 0 obj << -/D [1745 0 R /XYZ 99.895 624.894 null] +/D [1745 0 R /XYZ 99.895 567.11 null] >> % 1751 0 obj << -/D [1745 0 R /XYZ 99.895 555.872 null] +/D [1745 0 R /XYZ 99.895 498.089 null] >> % 1752 0 obj << -/D [1745 0 R /XYZ 99.895 500.082 null] +/D [1745 0 R /XYZ 99.895 455.529 null] >> % 1753 0 obj << -/D [1745 0 R /XYZ 99.895 468.201 null] +/D [1745 0 R /XYZ 99.895 398.463 null] >> % 1754 0 obj << -/D [1745 0 R /XYZ 99.895 413.068 null] +/D [1745 0 R /XYZ 99.895 366.582 null] >> % 1755 0 obj << -/D [1745 0 R /XYZ 99.895 370.567 null] +/D [1745 0 R /XYZ 99.895 311.449 null] >> % 1756 0 obj << -/D [1745 0 R /XYZ 99.895 330.717 null] +/D [1745 0 R /XYZ 99.895 268.948 null] >> % 1757 0 obj << -/D [1745 0 R /XYZ 99.895 302.821 null] +/D [1745 0 R /XYZ 99.895 229.098 null] +>> +% 1758 0 obj +<< +/D [1745 0 R /XYZ 99.895 201.202 null] >> % 1744 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F243 1285 0 R >> /ProcSet [ /PDF /Text ] >> -% 1759 0 obj +% 1760 0 obj << /Type /Page -/Contents 1760 0 R -/Resources 1758 0 R +/Contents 1761 0 R +/Resources 1759 0 R /MediaBox [0 0 595.276 841.89] /Parent 1739 0 R >> -% 1761 0 obj +% 1762 0 obj << -/D [1759 0 R /XYZ 149.705 753.953 null] +/D [1760 0 R /XYZ 149.705 753.953 null] >> % 425 0 obj << -/D [1759 0 R /XYZ 150.705 716.092 null] +/D [1760 0 R /XYZ 150.705 716.092 null] >> -% 1758 0 obj +% 1759 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1763 0 obj +% 1764 0 obj << /Type /Page -/Contents 1764 0 R -/Resources 1762 0 R +/Contents 1765 0 R +/Resources 1763 0 R /MediaBox [0 0 595.276 841.89] /Parent 1739 0 R >> -% 1765 0 obj +% 1766 0 obj << -/D [1763 0 R /XYZ 98.895 753.953 null] +/D [1764 0 R /XYZ 98.895 753.953 null] >> % 429 0 obj << -/D [1763 0 R /XYZ 99.895 716.092 null] +/D [1764 0 R /XYZ 99.895 716.092 null] >> -% 1766 0 obj +% 1767 0 obj << -/D [1763 0 R /XYZ 99.895 170.282 null] +/D [1764 0 R /XYZ 99.895 170.282 null] >> -% 1767 0 obj +% 1768 0 obj << -/D [1763 0 R /XYZ 99.895 149.368 null] +/D [1764 0 R /XYZ 99.895 149.368 null] >> -% 1762 0 obj +% 1763 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1769 0 obj +% 1770 0 obj << /Type /Page -/Contents 1770 0 R -/Resources 1768 0 R +/Contents 1771 0 R +/Resources 1769 0 R /MediaBox [0 0 595.276 841.89] /Parent 1739 0 R >> -% 1771 0 obj +% 1772 0 obj << -/D [1769 0 R /XYZ 149.705 753.953 null] +/D [1770 0 R /XYZ 149.705 753.953 null] >> % 433 0 obj << -/D [1769 0 R /XYZ 150.705 716.092 null] +/D [1770 0 R /XYZ 150.705 716.092 null] >> -% 1772 0 obj +% 1773 0 obj << -/D [1769 0 R /XYZ 150.705 348.22 null] +/D [1770 0 R /XYZ 150.705 348.22 null] >> -% 1773 0 obj +% 1774 0 obj << -/D [1769 0 R /XYZ 150.705 313.8 null] +/D [1770 0 R /XYZ 150.705 313.8 null] >> -% 1768 0 obj +% 1769 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F78 686 0 R /F192 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1775 0 obj +% 1776 0 obj << /Type /Page -/Contents 1776 0 R -/Resources 1774 0 R +/Contents 1777 0 R +/Resources 1775 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1781 0 R +/Parent 1782 0 R >> -% 1777 0 obj +% 1778 0 obj << -/D [1775 0 R /XYZ 98.895 753.953 null] +/D [1776 0 R /XYZ 98.895 753.953 null] >> % 437 0 obj << -/D [1775 0 R /XYZ 99.895 716.092 null] ->> -% 1778 0 obj -<< -/D [1775 0 R /XYZ 99.895 441.869 null] +/D [1776 0 R /XYZ 99.895 716.092 null] >> % 1779 0 obj << -/D [1775 0 R /XYZ 99.895 395.439 null] +/D [1776 0 R /XYZ 99.895 441.869 null] >> % 1780 0 obj << -/D [1775 0 R /XYZ 99.895 363.559 null] +/D [1776 0 R /XYZ 99.895 395.439 null] >> -% 1774 0 obj +% 1781 0 obj +<< +/D [1776 0 R /XYZ 99.895 363.559 null] +>> +% 1775 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1783 0 obj +% 1784 0 obj << /Type /Page -/Contents 1784 0 R -/Resources 1782 0 R +/Contents 1785 0 R +/Resources 1783 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1781 0 R +/Parent 1782 0 R >> -% 1785 0 obj +% 1786 0 obj << -/D [1783 0 R /XYZ 149.705 753.953 null] +/D [1784 0 R /XYZ 149.705 753.953 null] >> % 441 0 obj << -/D [1783 0 R /XYZ 150.705 716.092 null] +/D [1784 0 R /XYZ 150.705 716.092 null] >> -% 1782 0 obj +% 1783 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1787 0 obj +% 1788 0 obj << /Type /Page -/Contents 1788 0 R -/Resources 1786 0 R +/Contents 1789 0 R +/Resources 1787 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1781 0 R +/Parent 1782 0 R >> -% 1789 0 obj +% 1790 0 obj << -/D [1787 0 R /XYZ 98.895 753.953 null] +/D [1788 0 R /XYZ 98.895 753.953 null] >> % 445 0 obj << -/D [1787 0 R /XYZ 99.895 716.092 null] +/D [1788 0 R /XYZ 99.895 716.092 null] >> -% 1786 0 obj +% 1787 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1791 0 obj +% 1792 0 obj << /Type /Page -/Contents 1792 0 R -/Resources 1790 0 R +/Contents 1793 0 R +/Resources 1791 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1781 0 R +/Parent 1782 0 R >> -% 1793 0 obj +% 1794 0 obj << -/D [1791 0 R /XYZ 149.705 753.953 null] +/D [1792 0 R /XYZ 149.705 753.953 null] >> % 449 0 obj << -/D [1791 0 R /XYZ 150.705 716.092 null] +/D [1792 0 R /XYZ 150.705 716.092 null] >> -% 1790 0 obj +% 1791 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1795 0 obj +% 1796 0 obj << /Type /Page -/Contents 1796 0 R -/Resources 1794 0 R +/Contents 1797 0 R +/Resources 1795 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1781 0 R +/Parent 1782 0 R >> -% 1797 0 obj +% 1798 0 obj << -/D [1795 0 R /XYZ 98.895 753.953 null] +/D [1796 0 R /XYZ 98.895 753.953 null] >> % 453 0 obj << -/D [1795 0 R /XYZ 99.895 716.092 null] +/D [1796 0 R /XYZ 99.895 716.092 null] >> -% 1794 0 obj +% 1795 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1799 0 obj +% 1800 0 obj << /Type /Page -/Contents 1800 0 R -/Resources 1798 0 R +/Contents 1801 0 R +/Resources 1799 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1781 0 R +/Parent 1782 0 R >> -% 1801 0 obj +% 1802 0 obj << -/D [1799 0 R /XYZ 149.705 753.953 null] +/D [1800 0 R /XYZ 149.705 753.953 null] >> % 457 0 obj << -/D [1799 0 R /XYZ 150.705 716.092 null] +/D [1800 0 R /XYZ 150.705 716.092 null] >> -% 1798 0 obj +% 1799 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1803 0 obj +% 1804 0 obj << /Type /Page -/Contents 1804 0 R -/Resources 1802 0 R +/Contents 1805 0 R +/Resources 1803 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1806 0 R +/Parent 1807 0 R >> -% 1805 0 obj +% 1806 0 obj << -/D [1803 0 R /XYZ 98.895 753.953 null] +/D [1804 0 R /XYZ 98.895 753.953 null] >> % 461 0 obj << -/D [1803 0 R /XYZ 99.895 716.092 null] +/D [1804 0 R /XYZ 99.895 716.092 null] >> -% 1802 0 obj +% 1803 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1808 0 obj +% 1809 0 obj << /Type /Page -/Contents 1809 0 R -/Resources 1807 0 R +/Contents 1810 0 R +/Resources 1808 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1806 0 R ->> -% 1810 0 obj -<< -/D [1808 0 R /XYZ 149.705 753.953 null] +/Parent 1807 0 R >> % 1811 0 obj << -/D [1808 0 R /XYZ 150.705 576.399 null] +/D [1809 0 R /XYZ 149.705 753.953 null] >> % 1812 0 obj << -/D [1808 0 R /XYZ 150.705 541.925 null] +/D [1809 0 R /XYZ 150.705 576.399 null] >> % 1813 0 obj << -/D [1808 0 R /XYZ 150.705 451.085 null] +/D [1809 0 R /XYZ 150.705 541.925 null] >> -% 1807 0 obj +% 1814 0 obj +<< +/D [1809 0 R /XYZ 150.705 451.085 null] +>> +% 1808 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> /ProcSet [ /PDF /Text ] >> -% 1816 0 obj +% 1817 0 obj << /Type /Page -/Contents 1817 0 R -/Resources 1815 0 R +/Contents 1818 0 R +/Resources 1816 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1806 0 R +/Parent 1807 0 R >> -% 1818 0 obj +% 1819 0 obj << -/D [1816 0 R /XYZ 98.895 753.953 null] +/D [1817 0 R /XYZ 98.895 753.953 null] >> % 465 0 obj << -/D [1816 0 R /XYZ 99.895 716.092 null] +/D [1817 0 R /XYZ 99.895 716.092 null] >> -% 1815 0 obj +% 1816 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1820 0 obj +% 1821 0 obj << /Type /Page -/Contents 1821 0 R -/Resources 1819 0 R +/Contents 1822 0 R +/Resources 1820 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1806 0 R ->> -% 1822 0 obj -<< -/D [1820 0 R /XYZ 149.705 753.953 null] +/Parent 1807 0 R >> % 1823 0 obj << -/D [1820 0 R /XYZ 150.705 588.355 null] +/D [1821 0 R /XYZ 149.705 753.953 null] >> % 1824 0 obj << -/D [1820 0 R /XYZ 150.705 553.88 null] +/D [1821 0 R /XYZ 150.705 588.355 null] >> % 1825 0 obj << -/D [1820 0 R /XYZ 150.705 463.04 null] +/D [1821 0 R /XYZ 150.705 553.88 null] >> endstream endobj -1829 0 obj +1830 0 obj << /Length 6060 >> @@ -23506,7 +23569,7 @@ ET endstream endobj -1833 0 obj +1834 0 obj << /Length 5209 >> @@ -23629,7 +23692,7 @@ ET endstream endobj -1840 0 obj +1841 0 obj << /Length 6144 >> @@ -23689,7 +23752,7 @@ ET endstream endobj -1845 0 obj +1846 0 obj << /Length 5122 >> @@ -23812,7 +23875,7 @@ ET endstream endobj -1852 0 obj +1853 0 obj << /Length 6205 >> @@ -23872,7 +23935,7 @@ ET endstream endobj -1856 0 obj +1857 0 obj << /Length 5076 >> @@ -23993,7 +24056,7 @@ ET endstream endobj -1863 0 obj +1864 0 obj << /Length 6206 >> @@ -24053,7 +24116,7 @@ ET endstream endobj -1867 0 obj +1868 0 obj << /Length 5140 >> @@ -24176,7 +24239,7 @@ ET endstream endobj -1874 0 obj +1875 0 obj << /Length 6113 >> @@ -24236,7 +24299,7 @@ ET endstream endobj -1879 0 obj +1880 0 obj << /Length 6575 >> @@ -24372,7 +24435,7 @@ ET endstream endobj -1889 0 obj +1890 0 obj << /Length 5618 >> @@ -24429,7 +24492,7 @@ ET endstream endobj -1894 0 obj +1895 0 obj << /Length 5630 >> @@ -24485,7 +24548,7 @@ ET endstream endobj -1901 0 obj +1902 0 obj << /Length 6870 >> @@ -24509,7 +24572,7 @@ ET endstream endobj -1907 0 obj +1908 0 obj << /Length 10395 >> @@ -24960,7 +25023,7 @@ ET endstream endobj -1911 0 obj +1912 0 obj << /Length 3566 >> @@ -25071,7 +25134,7 @@ ET endstream endobj -1918 0 obj +1919 0 obj << /Length 1379 >> @@ -25114,7 +25177,7 @@ ET endstream endobj -1924 0 obj +1925 0 obj << /Length 1583 >> @@ -25171,7 +25234,7 @@ ET endstream endobj -1930 0 obj +1931 0 obj << /Length 2082 >> @@ -25242,7 +25305,7 @@ ET endstream endobj -1936 0 obj +1937 0 obj << /Length 535 >> @@ -25258,347 +25321,351 @@ ET endstream endobj -1826 0 obj +1827 0 obj << /Type /ObjStm /N 100 -/First 975 -/Length 9500 ->> -stream -1819 0 1828 138 1830 256 469 314 1827 371 1832 522 1834 640 1835 699 1836 758 1837 817 -1831 876 1839 1014 1841 1132 473 1190 1838 1247 1844 1398 1846 1516 1847 1575 1848 1634 1849 1693 -1843 1752 1851 1890 1853 2008 477 2066 1850 2123 1855 2274 1857 2392 1858 2451 1859 2510 1860 2568 -1854 2626 1862 2764 1864 2882 481 2940 1861 2997 1866 3148 1868 3266 1869 3325 1870 3384 1871 3443 -1865 3502 1873 3640 1875 3758 485 3816 1872 3873 1878 4024 1880 4142 1881 4201 1882 4260 1884 4318 -1885 4377 1886 4436 1877 4495 1888 4676 1890 4794 489 4852 1891 4909 1887 4967 1893 5118 1895 5236 -493 5295 1896 5353 1892 5412 1900 5563 1897 5711 1898 5859 1902 6007 497 6065 1899 6122 1906 6217 -1908 6335 1903 6394 1904 6453 1905 6512 1910 6609 1912 6727 501 6785 1913 6842 1914 6900 1909 6958 -1917 7039 1919 7157 505 7216 1920 7274 1921 7332 1916 7391 1923 7472 1925 7590 509 7648 1926 7705 -1927 7763 1922 7821 1929 7902 1931 8020 513 8079 1932 8137 1933 8195 1928 8254 1935 8349 1937 8467 -% 1819 0 obj +/First 973 +/Length 9498 +>> +stream +1826 0 1820 58 1829 196 1831 314 469 372 1828 429 1833 580 1835 698 1836 757 1837 816 +1838 875 1832 934 1840 1072 1842 1190 473 1248 1839 1305 1845 1456 1847 1574 1848 1633 1849 1692 +1850 1751 1844 1810 1852 1948 1854 2066 477 2124 1851 2181 1856 2332 1858 2450 1859 2509 1860 2568 +1861 2626 1855 2684 1863 2822 1865 2940 481 2998 1862 3055 1867 3206 1869 3324 1870 3383 1871 3442 +1872 3501 1866 3560 1874 3698 1876 3816 485 3874 1873 3931 1879 4082 1881 4200 1882 4259 1883 4318 +1885 4376 1886 4435 1887 4494 1878 4553 1889 4734 1891 4852 489 4910 1892 4967 1888 5025 1894 5176 +1896 5294 493 5353 1897 5411 1893 5470 1901 5621 1898 5769 1899 5917 1903 6065 497 6123 1900 6180 +1907 6275 1909 6393 1904 6452 1905 6511 1906 6570 1911 6667 1913 6785 501 6843 1914 6900 1915 6958 +1910 7016 1918 7097 1920 7215 505 7274 1921 7332 1922 7390 1917 7449 1924 7530 1926 7648 509 7706 +1927 7763 1928 7821 1923 7879 1930 7960 1932 8078 513 8137 1933 8195 1934 8253 1929 8312 1936 8407 +% 1826 0 obj +<< +/D [1821 0 R /XYZ 150.705 463.04 null] +>> +% 1820 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> /ProcSet [ /PDF /Text ] >> -% 1828 0 obj +% 1829 0 obj << /Type /Page -/Contents 1829 0 R -/Resources 1827 0 R +/Contents 1830 0 R +/Resources 1828 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1806 0 R +/Parent 1807 0 R >> -% 1830 0 obj +% 1831 0 obj << -/D [1828 0 R /XYZ 98.895 753.953 null] +/D [1829 0 R /XYZ 98.895 753.953 null] >> % 469 0 obj << -/D [1828 0 R /XYZ 99.895 716.092 null] +/D [1829 0 R /XYZ 99.895 716.092 null] >> -% 1827 0 obj +% 1828 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1832 0 obj +% 1833 0 obj << /Type /Page -/Contents 1833 0 R -/Resources 1831 0 R +/Contents 1834 0 R +/Resources 1832 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1806 0 R ->> -% 1834 0 obj -<< -/D [1832 0 R /XYZ 149.705 753.953 null] +/Parent 1807 0 R >> % 1835 0 obj << -/D [1832 0 R /XYZ 150.705 576.399 null] +/D [1833 0 R /XYZ 149.705 753.953 null] >> % 1836 0 obj << -/D [1832 0 R /XYZ 150.705 541.925 null] +/D [1833 0 R /XYZ 150.705 576.399 null] >> % 1837 0 obj << -/D [1832 0 R /XYZ 150.705 451.085 null] +/D [1833 0 R /XYZ 150.705 541.925 null] >> -% 1831 0 obj +% 1838 0 obj +<< +/D [1833 0 R /XYZ 150.705 451.085 null] +>> +% 1832 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> /ProcSet [ /PDF /Text ] >> -% 1839 0 obj +% 1840 0 obj << /Type /Page -/Contents 1840 0 R -/Resources 1838 0 R +/Contents 1841 0 R +/Resources 1839 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1842 0 R +/Parent 1843 0 R >> -% 1841 0 obj +% 1842 0 obj << -/D [1839 0 R /XYZ 98.895 753.953 null] +/D [1840 0 R /XYZ 98.895 753.953 null] >> % 473 0 obj << -/D [1839 0 R /XYZ 99.895 716.092 null] +/D [1840 0 R /XYZ 99.895 716.092 null] >> -% 1838 0 obj +% 1839 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1844 0 obj +% 1845 0 obj << /Type /Page -/Contents 1845 0 R -/Resources 1843 0 R +/Contents 1846 0 R +/Resources 1844 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1842 0 R ->> -% 1846 0 obj -<< -/D [1844 0 R /XYZ 149.705 753.953 null] +/Parent 1843 0 R >> % 1847 0 obj << -/D [1844 0 R /XYZ 150.705 576.399 null] +/D [1845 0 R /XYZ 149.705 753.953 null] >> % 1848 0 obj << -/D [1844 0 R /XYZ 150.705 541.925 null] +/D [1845 0 R /XYZ 150.705 576.399 null] >> % 1849 0 obj << -/D [1844 0 R /XYZ 150.705 451.085 null] +/D [1845 0 R /XYZ 150.705 541.925 null] >> -% 1843 0 obj +% 1850 0 obj +<< +/D [1845 0 R /XYZ 150.705 451.085 null] +>> +% 1844 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> /ProcSet [ /PDF /Text ] >> -% 1851 0 obj +% 1852 0 obj << /Type /Page -/Contents 1852 0 R -/Resources 1850 0 R +/Contents 1853 0 R +/Resources 1851 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1842 0 R +/Parent 1843 0 R >> -% 1853 0 obj +% 1854 0 obj << -/D [1851 0 R /XYZ 98.895 753.953 null] +/D [1852 0 R /XYZ 98.895 753.953 null] >> % 477 0 obj << -/D [1851 0 R /XYZ 99.895 716.092 null] +/D [1852 0 R /XYZ 99.895 716.092 null] >> -% 1850 0 obj +% 1851 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1855 0 obj +% 1856 0 obj << /Type /Page -/Contents 1856 0 R -/Resources 1854 0 R +/Contents 1857 0 R +/Resources 1855 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1842 0 R ->> -% 1857 0 obj -<< -/D [1855 0 R /XYZ 149.705 753.953 null] +/Parent 1843 0 R >> % 1858 0 obj << -/D [1855 0 R /XYZ 150.705 588.355 null] +/D [1856 0 R /XYZ 149.705 753.953 null] >> % 1859 0 obj << -/D [1855 0 R /XYZ 150.705 553.88 null] +/D [1856 0 R /XYZ 150.705 588.355 null] >> % 1860 0 obj << -/D [1855 0 R /XYZ 150.705 463.04 null] +/D [1856 0 R /XYZ 150.705 553.88 null] >> -% 1854 0 obj +% 1861 0 obj +<< +/D [1856 0 R /XYZ 150.705 463.04 null] +>> +% 1855 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> /ProcSet [ /PDF /Text ] >> -% 1862 0 obj +% 1863 0 obj << /Type /Page -/Contents 1863 0 R -/Resources 1861 0 R +/Contents 1864 0 R +/Resources 1862 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1842 0 R +/Parent 1843 0 R >> -% 1864 0 obj +% 1865 0 obj << -/D [1862 0 R /XYZ 98.895 753.953 null] +/D [1863 0 R /XYZ 98.895 753.953 null] >> % 481 0 obj << -/D [1862 0 R /XYZ 99.895 716.092 null] +/D [1863 0 R /XYZ 99.895 716.092 null] >> -% 1861 0 obj +% 1862 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1866 0 obj +% 1867 0 obj << /Type /Page -/Contents 1867 0 R -/Resources 1865 0 R +/Contents 1868 0 R +/Resources 1866 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1842 0 R ->> -% 1868 0 obj -<< -/D [1866 0 R /XYZ 149.705 753.953 null] +/Parent 1843 0 R >> % 1869 0 obj << -/D [1866 0 R /XYZ 150.705 576.399 null] +/D [1867 0 R /XYZ 149.705 753.953 null] >> % 1870 0 obj << -/D [1866 0 R /XYZ 150.705 541.925 null] +/D [1867 0 R /XYZ 150.705 576.399 null] >> % 1871 0 obj << -/D [1866 0 R /XYZ 150.705 451.085 null] +/D [1867 0 R /XYZ 150.705 541.925 null] >> -% 1865 0 obj +% 1872 0 obj +<< +/D [1867 0 R /XYZ 150.705 451.085 null] +>> +% 1866 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1814 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> /ProcSet [ /PDF /Text ] >> -% 1873 0 obj +% 1874 0 obj << /Type /Page -/Contents 1874 0 R -/Resources 1872 0 R +/Contents 1875 0 R +/Resources 1873 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1876 0 R +/Parent 1877 0 R >> -% 1875 0 obj +% 1876 0 obj << -/D [1873 0 R /XYZ 98.895 753.953 null] +/D [1874 0 R /XYZ 98.895 753.953 null] >> % 485 0 obj << -/D [1873 0 R /XYZ 99.895 716.092 null] +/D [1874 0 R /XYZ 99.895 716.092 null] >> -% 1872 0 obj +% 1873 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1878 0 obj +% 1879 0 obj << /Type /Page -/Contents 1879 0 R -/Resources 1877 0 R +/Contents 1880 0 R +/Resources 1878 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1876 0 R ->> -% 1880 0 obj -<< -/D [1878 0 R /XYZ 149.705 753.953 null] +/Parent 1877 0 R >> % 1881 0 obj << -/D [1878 0 R /XYZ 150.705 588.355 null] +/D [1879 0 R /XYZ 149.705 753.953 null] >> % 1882 0 obj << -/D [1878 0 R /XYZ 150.705 553.88 null] +/D [1879 0 R /XYZ 150.705 588.355 null] >> -% 1884 0 obj +% 1883 0 obj << -/D [1878 0 R /XYZ 150.705 465.726 null] +/D [1879 0 R /XYZ 150.705 553.88 null] >> % 1885 0 obj << -/D [1878 0 R /XYZ 150.705 433.845 null] +/D [1879 0 R /XYZ 150.705 465.726 null] >> % 1886 0 obj << -/D [1878 0 R /XYZ 150.705 343.006 null] +/D [1879 0 R /XYZ 150.705 433.845 null] >> -% 1877 0 obj +% 1887 0 obj +<< +/D [1879 0 R /XYZ 150.705 343.006 null] +>> +% 1878 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F17 1883 0 R /F243 1285 0 R /F233 1044 0 R /F279 1814 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F17 1884 0 R /F243 1285 0 R /F233 1044 0 R /F279 1815 0 R >> /ProcSet [ /PDF /Text ] >> -% 1888 0 obj +% 1889 0 obj << /Type /Page -/Contents 1889 0 R -/Resources 1887 0 R +/Contents 1890 0 R +/Resources 1888 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1876 0 R +/Parent 1877 0 R >> -% 1890 0 obj +% 1891 0 obj << -/D [1888 0 R /XYZ 98.895 753.953 null] +/D [1889 0 R /XYZ 98.895 753.953 null] >> % 489 0 obj << -/D [1888 0 R /XYZ 99.895 716.092 null] +/D [1889 0 R /XYZ 99.895 716.092 null] >> -% 1891 0 obj +% 1892 0 obj << -/D [1888 0 R /XYZ 99.895 222.691 null] +/D [1889 0 R /XYZ 99.895 222.691 null] >> -% 1887 0 obj +% 1888 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F148 1490 0 R /F192 942 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1893 0 obj +% 1894 0 obj << /Type /Page -/Contents 1894 0 R -/Resources 1892 0 R +/Contents 1895 0 R +/Resources 1893 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1876 0 R +/Parent 1877 0 R >> -% 1895 0 obj +% 1896 0 obj << -/D [1893 0 R /XYZ 149.705 753.953 null] +/D [1894 0 R /XYZ 149.705 753.953 null] >> % 493 0 obj << -/D [1893 0 R /XYZ 150.705 716.092 null] +/D [1894 0 R /XYZ 150.705 716.092 null] >> -% 1896 0 obj +% 1897 0 obj << -/D [1893 0 R /XYZ 150.705 222.691 null] +/D [1894 0 R /XYZ 150.705 222.691 null] >> -% 1892 0 obj +% 1893 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1900 0 obj +% 1901 0 obj << /Type /Page -/Contents 1901 0 R -/Resources 1899 0 R +/Contents 1902 0 R +/Resources 1900 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1876 0 R -/Annots [ 1897 0 R 1898 0 R ] +/Parent 1877 0 R +/Annots [ 1898 0 R 1899 0 R ] >> -% 1897 0 obj +% 1898 0 obj << /Type /Annot /Subtype /Link @@ -25606,7 +25673,7 @@ stream /Rect [145.364 511.904 152.427 523.964] /A << /S /GoTo /D (listing.5) >> >> -% 1898 0 obj +% 1899 0 obj << /Type /Annot /Subtype /Link @@ -25614,176 +25681,172 @@ stream /Rect [143.975 356.487 150.849 368.547] /A << /S /GoTo /D (listing.6) >> >> -% 1902 0 obj +% 1903 0 obj << -/D [1900 0 R /XYZ 98.895 753.953 null] +/D [1901 0 R /XYZ 98.895 753.953 null] >> % 497 0 obj << -/D [1900 0 R /XYZ 99.895 716.092 null] +/D [1901 0 R /XYZ 99.895 716.092 null] >> -% 1899 0 obj +% 1900 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1906 0 obj +% 1907 0 obj << /Type /Page -/Contents 1907 0 R -/Resources 1905 0 R +/Contents 1908 0 R +/Resources 1906 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1876 0 R ->> -% 1908 0 obj -<< -/D [1906 0 R /XYZ 149.705 753.953 null] +/Parent 1877 0 R >> -% 1903 0 obj +% 1909 0 obj << -/D [1906 0 R /XYZ 150.705 411.235 null] +/D [1907 0 R /XYZ 149.705 753.953 null] >> % 1904 0 obj << -/D [1906 0 R /XYZ 150.705 182.902 null] +/D [1907 0 R /XYZ 150.705 411.235 null] >> % 1905 0 obj << -/Font << /F145 940 0 R /F279 1814 0 R /F84 687 0 R >> +/D [1907 0 R /XYZ 150.705 182.902 null] +>> +% 1906 0 obj +<< +/Font << /F145 940 0 R /F279 1815 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1910 0 obj +% 1911 0 obj << /Type /Page -/Contents 1911 0 R -/Resources 1909 0 R +/Contents 1912 0 R +/Resources 1910 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1915 0 R +/Parent 1916 0 R >> -% 1912 0 obj +% 1913 0 obj << -/D [1910 0 R /XYZ 98.895 753.953 null] +/D [1911 0 R /XYZ 98.895 753.953 null] >> % 501 0 obj << -/D [1910 0 R /XYZ 99.895 716.092 null] +/D [1911 0 R /XYZ 99.895 716.092 null] >> -% 1913 0 obj +% 1914 0 obj << -/D [1910 0 R /XYZ 99.895 690.058 null] +/D [1911 0 R /XYZ 99.895 690.058 null] >> -% 1914 0 obj +% 1915 0 obj << -/D [1910 0 R /XYZ 99.895 693.143 null] +/D [1911 0 R /XYZ 99.895 693.143 null] >> -% 1909 0 obj +% 1910 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1917 0 obj +% 1918 0 obj << /Type /Page -/Contents 1918 0 R -/Resources 1916 0 R +/Contents 1919 0 R +/Resources 1917 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1915 0 R +/Parent 1916 0 R >> -% 1919 0 obj +% 1920 0 obj << -/D [1917 0 R /XYZ 149.705 753.953 null] +/D [1918 0 R /XYZ 149.705 753.953 null] >> % 505 0 obj << -/D [1917 0 R /XYZ 150.705 716.092 null] +/D [1918 0 R /XYZ 150.705 716.092 null] >> -% 1920 0 obj +% 1921 0 obj << -/D [1917 0 R /XYZ 150.705 678.98 null] +/D [1918 0 R /XYZ 150.705 678.98 null] >> -% 1921 0 obj +% 1922 0 obj << -/D [1917 0 R /XYZ 150.705 679.195 null] +/D [1918 0 R /XYZ 150.705 679.195 null] >> -% 1916 0 obj +% 1917 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1923 0 obj +% 1924 0 obj << /Type /Page -/Contents 1924 0 R -/Resources 1922 0 R +/Contents 1925 0 R +/Resources 1923 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1915 0 R +/Parent 1916 0 R >> -% 1925 0 obj +% 1926 0 obj << -/D [1923 0 R /XYZ 98.895 753.953 null] +/D [1924 0 R /XYZ 98.895 753.953 null] >> % 509 0 obj << -/D [1923 0 R /XYZ 99.895 716.092 null] +/D [1924 0 R /XYZ 99.895 716.092 null] >> -% 1926 0 obj +% 1927 0 obj << -/D [1923 0 R /XYZ 99.895 689.963 null] +/D [1924 0 R /XYZ 99.895 689.963 null] >> -% 1927 0 obj +% 1928 0 obj << -/D [1923 0 R /XYZ 99.895 693.143 null] +/D [1924 0 R /XYZ 99.895 693.143 null] >> -% 1922 0 obj +% 1923 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1929 0 obj +% 1930 0 obj << /Type /Page -/Contents 1930 0 R -/Resources 1928 0 R +/Contents 1931 0 R +/Resources 1929 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1915 0 R +/Parent 1916 0 R >> -% 1931 0 obj +% 1932 0 obj << -/D [1929 0 R /XYZ 149.705 753.953 null] +/D [1930 0 R /XYZ 149.705 753.953 null] >> % 513 0 obj << -/D [1929 0 R /XYZ 150.705 716.092 null] +/D [1930 0 R /XYZ 150.705 716.092 null] >> -% 1932 0 obj +% 1933 0 obj << -/D [1929 0 R /XYZ 150.705 678.98 null] +/D [1930 0 R /XYZ 150.705 678.98 null] >> -% 1933 0 obj +% 1934 0 obj << -/D [1929 0 R /XYZ 150.705 679.195 null] +/D [1930 0 R /XYZ 150.705 679.195 null] >> -% 1928 0 obj +% 1929 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1935 0 obj +% 1936 0 obj << /Type /Page -/Contents 1936 0 R -/Resources 1934 0 R +/Contents 1937 0 R +/Resources 1935 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1915 0 R ->> -% 1937 0 obj -<< -/D [1935 0 R /XYZ 98.895 753.953 null] +/Parent 1916 0 R >> endstream endobj -1942 0 obj +1943 0 obj << /Length 4752 >> @@ -25867,7 +25930,7 @@ ET endstream endobj -1949 0 obj +1950 0 obj << /Length 5153 >> @@ -25955,7 +26018,7 @@ ET endstream endobj -1957 0 obj +1958 0 obj << /Length 3684 >> @@ -26045,7 +26108,7 @@ ET endstream endobj -1964 0 obj +1965 0 obj << /Length 4361 >> @@ -26142,7 +26205,7 @@ ET endstream endobj -1971 0 obj +1972 0 obj << /Length 7544 >> @@ -26329,7 +26392,7 @@ ET endstream endobj -1978 0 obj +1979 0 obj << /Length 7395 >> @@ -26506,7 +26569,7 @@ ET endstream endobj -1984 0 obj +1985 0 obj << /Length 656 >> @@ -26544,7 +26607,7 @@ ET endstream endobj -1988 0 obj +1989 0 obj << /Length 1399 >> @@ -26572,7 +26635,7 @@ ET endstream endobj -1996 0 obj +1997 0 obj << /Length 5053 >> @@ -26664,7 +26727,7 @@ ET endstream endobj -2007 0 obj +2008 0 obj << /Length 4359 >> @@ -26763,7 +26826,7 @@ ET endstream endobj -2011 0 obj +2012 0 obj << /Length 13651 >> @@ -27304,7 +27367,7 @@ ET endstream endobj -2020 0 obj +2021 0 obj << /Length 7660 >> @@ -27522,7 +27585,7 @@ ET endstream endobj -2024 0 obj +2025 0 obj << /Length 1133 >> @@ -27541,7 +27604,7 @@ ET endstream endobj -2033 0 obj +2034 0 obj << /Length 6132 >> @@ -27695,7 +27758,7 @@ ET endstream endobj -2039 0 obj +2040 0 obj << /Length 3490 >> @@ -27758,7 +27821,7 @@ ET endstream endobj -2043 0 obj +2044 0 obj << /Length 973 >> @@ -27799,43 +27862,47 @@ ET endstream endobj -1938 0 obj +1939 0 obj << /Type /ObjStm /N 100 /First 972 -/Length 10928 ->> -stream -517 0 1934 57 1941 152 1939 291 1943 436 521 495 1944 553 1945 612 1940 671 1948 766 -1946 905 1950 1050 525 1108 1951 1165 1952 1223 1947 1281 1956 1376 1954 1515 1958 1660 529 1719 -1959 1777 1960 1835 1955 1894 1963 1989 1961 2128 1965 2272 533 2330 1966 2387 1967 2444 1962 2502 -1970 2597 1968 2736 1972 2881 537 2940 1973 2998 1974 3057 1969 3116 1977 3239 1975 3378 1979 3520 -541 3578 1980 3635 1981 3693 1976 3751 1983 3874 1985 3992 1982 4051 1987 4134 1989 4252 545 4310 -1986 4367 1995 4462 1991 4619 1992 4766 1993 4914 1997 5061 549 5120 1998 5178 1994 5236 2006 5344 -2000 5510 2001 5657 2002 5804 2003 5952 2008 6099 553 6157 2005 6214 2010 6322 2004 6461 2012 6624 -1999 6683 2009 6743 2019 6853 2014 7019 2015 7164 2016 7311 2017 7458 2021 7605 557 7663 2018 7720 -2023 7815 2025 7933 2022 7992 2032 8087 2026 8262 2027 8407 2028 8550 2029 8697 2030 8841 2034 8990 -561 9048 2031 9105 2038 9200 2036 9339 2040 9484 565 9543 2037 9601 2042 9723 2044 9841 569 9899 -% 517 0 obj +/Length 10929 +>> +stream +1938 0 517 58 1935 115 1942 210 1940 349 1944 494 521 553 1945 611 1946 670 1941 729 +1949 824 1947 963 1951 1108 525 1166 1952 1223 1953 1281 1948 1339 1957 1434 1955 1573 1959 1718 +529 1777 1960 1835 1961 1893 1956 1952 1964 2047 1962 2186 1966 2330 533 2388 1967 2445 1968 2502 +1963 2560 1971 2655 1969 2794 1973 2939 537 2998 1974 3056 1975 3115 1970 3174 1978 3297 1976 3436 +1980 3578 541 3636 1981 3693 1982 3751 1977 3809 1984 3932 1986 4050 1983 4109 1988 4192 1990 4310 +545 4368 1987 4425 1996 4520 1992 4677 1993 4824 1994 4972 1998 5119 549 5178 1999 5236 1995 5294 +2007 5402 2001 5568 2002 5715 2003 5862 2004 6010 2009 6157 553 6215 2006 6272 2011 6380 2005 6519 +2013 6682 2000 6741 2010 6801 2020 6911 2015 7077 2016 7222 2017 7369 2018 7516 2022 7663 557 7721 +2019 7778 2024 7873 2026 7991 2023 8050 2033 8145 2027 8320 2028 8465 2029 8608 2030 8755 2031 8899 +2035 9048 561 9106 2032 9163 2039 9258 2037 9397 2041 9542 565 9601 2038 9659 2043 9781 2045 9899 +% 1938 0 obj << -/D [1935 0 R /XYZ 99.895 716.092 null] +/D [1936 0 R /XYZ 98.895 753.953 null] >> -% 1934 0 obj +% 517 0 obj +<< +/D [1936 0 R /XYZ 99.895 716.092 null] +>> +% 1935 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1941 0 obj +% 1942 0 obj << /Type /Page -/Contents 1942 0 R -/Resources 1940 0 R +/Contents 1943 0 R +/Resources 1941 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1915 0 R -/Annots [ 1939 0 R ] +/Parent 1916 0 R +/Annots [ 1940 0 R ] >> -% 1939 0 obj +% 1940 0 obj << /Type /Annot /Subtype /Link @@ -27843,37 +27910,37 @@ stream /Rect [342.753 438.278 420.271 450.338] /A << /S /GoTo /D (spdata) >> >> -% 1943 0 obj +% 1944 0 obj << -/D [1941 0 R /XYZ 149.705 753.953 null] +/D [1942 0 R /XYZ 149.705 753.953 null] >> % 521 0 obj << -/D [1941 0 R /XYZ 150.705 716.092 null] +/D [1942 0 R /XYZ 150.705 716.092 null] >> -% 1944 0 obj +% 1945 0 obj << -/D [1941 0 R /XYZ 150.705 676.015 null] +/D [1942 0 R /XYZ 150.705 676.015 null] >> -% 1945 0 obj +% 1946 0 obj << -/D [1941 0 R /XYZ 150.705 679.195 null] +/D [1942 0 R /XYZ 150.705 679.195 null] >> -% 1940 0 obj +% 1941 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1948 0 obj +% 1949 0 obj << /Type /Page -/Contents 1949 0 R -/Resources 1947 0 R +/Contents 1950 0 R +/Resources 1948 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1953 0 R -/Annots [ 1946 0 R ] +/Parent 1954 0 R +/Annots [ 1947 0 R ] >> -% 1946 0 obj +% 1947 0 obj << /Type /Annot /Subtype /Link @@ -27881,37 +27948,37 @@ stream /Rect [291.943 571.778 369.462 583.837] /A << /S /GoTo /D (spdata) >> >> -% 1950 0 obj +% 1951 0 obj << -/D [1948 0 R /XYZ 98.895 753.953 null] +/D [1949 0 R /XYZ 98.895 753.953 null] >> % 525 0 obj << -/D [1948 0 R /XYZ 99.895 716.092 null] +/D [1949 0 R /XYZ 99.895 716.092 null] >> -% 1951 0 obj +% 1952 0 obj << -/D [1948 0 R /XYZ 99.895 676.015 null] +/D [1949 0 R /XYZ 99.895 676.015 null] >> -% 1952 0 obj +% 1953 0 obj << -/D [1948 0 R /XYZ 99.895 679.195 null] +/D [1949 0 R /XYZ 99.895 679.195 null] >> -% 1947 0 obj +% 1948 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1956 0 obj +% 1957 0 obj << /Type /Page -/Contents 1957 0 R -/Resources 1955 0 R +/Contents 1958 0 R +/Resources 1956 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1953 0 R -/Annots [ 1954 0 R ] +/Parent 1954 0 R +/Annots [ 1955 0 R ] >> -% 1954 0 obj +% 1955 0 obj << /Type /Annot /Subtype /Link @@ -27919,37 +27986,37 @@ stream /Rect [342.753 438.278 420.271 450.338] /A << /S /GoTo /D (spdata) >> >> -% 1958 0 obj +% 1959 0 obj << -/D [1956 0 R /XYZ 149.705 753.953 null] +/D [1957 0 R /XYZ 149.705 753.953 null] >> % 529 0 obj << -/D [1956 0 R /XYZ 150.705 716.092 null] +/D [1957 0 R /XYZ 150.705 716.092 null] >> -% 1959 0 obj +% 1960 0 obj << -/D [1956 0 R /XYZ 150.705 678.98 null] +/D [1957 0 R /XYZ 150.705 678.98 null] >> -% 1960 0 obj +% 1961 0 obj << -/D [1956 0 R /XYZ 150.705 679.195 null] +/D [1957 0 R /XYZ 150.705 679.195 null] >> -% 1955 0 obj +% 1956 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1963 0 obj +% 1964 0 obj << /Type /Page -/Contents 1964 0 R -/Resources 1962 0 R +/Contents 1965 0 R +/Resources 1963 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1953 0 R -/Annots [ 1961 0 R ] +/Parent 1954 0 R +/Annots [ 1962 0 R ] >> -% 1961 0 obj +% 1962 0 obj << /Type /Annot /Subtype /Link @@ -27957,37 +28024,37 @@ stream /Rect [301.961 426.323 378.015 438.383] /A << /S /GoTo /D (vdata) >> >> -% 1965 0 obj +% 1966 0 obj << -/D [1963 0 R /XYZ 98.895 753.953 null] +/D [1964 0 R /XYZ 98.895 753.953 null] >> % 533 0 obj << -/D [1963 0 R /XYZ 99.895 716.092 null] +/D [1964 0 R /XYZ 99.895 716.092 null] >> -% 1966 0 obj +% 1967 0 obj << -/D [1963 0 R /XYZ 99.895 678.98 null] +/D [1964 0 R /XYZ 99.895 678.98 null] >> -% 1967 0 obj +% 1968 0 obj << -/D [1963 0 R /XYZ 99.895 679.195 null] +/D [1964 0 R /XYZ 99.895 679.195 null] >> -% 1962 0 obj +% 1963 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1970 0 obj +% 1971 0 obj << /Type /Page -/Contents 1971 0 R -/Resources 1969 0 R +/Contents 1972 0 R +/Resources 1970 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1953 0 R -/Annots [ 1968 0 R ] +/Parent 1954 0 R +/Annots [ 1969 0 R ] >> -% 1968 0 obj +% 1969 0 obj << /Type /Annot /Subtype /Link @@ -27995,37 +28062,37 @@ stream /Rect [342.753 574.778 420.271 586.838] /A << /S /GoTo /D (spdata) >> >> -% 1972 0 obj +% 1973 0 obj << -/D [1970 0 R /XYZ 149.705 753.953 null] +/D [1971 0 R /XYZ 149.705 753.953 null] >> % 537 0 obj << -/D [1970 0 R /XYZ 150.705 716.092 null] +/D [1971 0 R /XYZ 150.705 716.092 null] >> -% 1973 0 obj +% 1974 0 obj << -/D [1970 0 R /XYZ 150.705 679.441 null] +/D [1971 0 R /XYZ 150.705 679.441 null] >> -% 1974 0 obj +% 1975 0 obj << -/D [1970 0 R /XYZ 150.705 679.657 null] +/D [1971 0 R /XYZ 150.705 679.657 null] >> -% 1969 0 obj +% 1970 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> /ProcSet [ /PDF /Text ] >> -% 1977 0 obj +% 1978 0 obj << /Type /Page -/Contents 1978 0 R -/Resources 1976 0 R +/Contents 1979 0 R +/Resources 1977 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1953 0 R -/Annots [ 1975 0 R ] +/Parent 1954 0 R +/Annots [ 1976 0 R ] >> -% 1975 0 obj +% 1976 0 obj << /Type /Annot /Subtype /Link @@ -28033,75 +28100,75 @@ stream /Rect [396.215 574.59 472.269 586.65] /A << /S /GoTo /D (vdata) >> >> -% 1979 0 obj +% 1980 0 obj << -/D [1977 0 R /XYZ 98.895 753.953 null] +/D [1978 0 R /XYZ 98.895 753.953 null] >> % 541 0 obj << -/D [1977 0 R /XYZ 99.895 716.092 null] +/D [1978 0 R /XYZ 99.895 716.092 null] >> -% 1980 0 obj +% 1981 0 obj << -/D [1977 0 R /XYZ 99.895 679.413 null] +/D [1978 0 R /XYZ 99.895 679.413 null] >> -% 1981 0 obj +% 1982 0 obj << -/D [1977 0 R /XYZ 99.895 679.628 null] +/D [1978 0 R /XYZ 99.895 679.628 null] >> -% 1976 0 obj +% 1977 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> /ProcSet [ /PDF /Text ] >> -% 1983 0 obj +% 1984 0 obj << /Type /Page -/Contents 1984 0 R -/Resources 1982 0 R +/Contents 1985 0 R +/Resources 1983 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1953 0 R +/Parent 1954 0 R >> -% 1985 0 obj +% 1986 0 obj << -/D [1983 0 R /XYZ 149.705 753.953 null] +/D [1984 0 R /XYZ 149.705 753.953 null] >> -% 1982 0 obj +% 1983 0 obj << /Font << /F233 1044 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1987 0 obj +% 1988 0 obj << /Type /Page -/Contents 1988 0 R -/Resources 1986 0 R +/Contents 1989 0 R +/Resources 1987 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1990 0 R +/Parent 1991 0 R >> -% 1989 0 obj +% 1990 0 obj << -/D [1987 0 R /XYZ 98.895 753.953 null] +/D [1988 0 R /XYZ 98.895 753.953 null] >> % 545 0 obj << -/D [1987 0 R /XYZ 99.895 716.092 null] +/D [1988 0 R /XYZ 99.895 716.092 null] >> -% 1986 0 obj +% 1987 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 1995 0 obj +% 1996 0 obj << /Type /Page -/Contents 1996 0 R -/Resources 1994 0 R +/Contents 1997 0 R +/Resources 1995 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1990 0 R -/Annots [ 1991 0 R 1992 0 R 1993 0 R ] +/Parent 1991 0 R +/Annots [ 1992 0 R 1993 0 R 1994 0 R ] >> -% 1991 0 obj +% 1992 0 obj << /Type /Annot /Subtype /Link @@ -28109,7 +28176,7 @@ stream /Rect [371.126 442.264 443.414 454.323] /A << /S /GoTo /D (precdata) >> >> -% 1992 0 obj +% 1993 0 obj << /Type /Annot /Subtype /Link @@ -28117,7 +28184,7 @@ stream /Rect [222.066 352.6 228.343 366.303] /A << /S /GoTo /D (Hfootnote.4) >> >> -% 1993 0 obj +% 1994 0 obj << /Type /Annot /Subtype /Link @@ -28125,33 +28192,33 @@ stream /Rect [221.319 235.698 233.275 245.108] /A << /S /GoTo /D (table.21) >> >> -% 1997 0 obj +% 1998 0 obj << -/D [1995 0 R /XYZ 149.705 753.953 null] +/D [1996 0 R /XYZ 149.705 753.953 null] >> % 549 0 obj << -/D [1995 0 R /XYZ 150.705 716.092 null] +/D [1996 0 R /XYZ 150.705 716.092 null] >> -% 1998 0 obj +% 1999 0 obj << -/D [1995 0 R /XYZ 165.051 129.79 null] +/D [1996 0 R /XYZ 165.051 129.79 null] >> -% 1994 0 obj +% 1995 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2006 0 obj +% 2007 0 obj << /Type /Page -/Contents 2007 0 R -/Resources 2005 0 R +/Contents 2008 0 R +/Resources 2006 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1990 0 R -/Annots [ 2000 0 R 2001 0 R 2002 0 R 2003 0 R ] +/Parent 1991 0 R +/Annots [ 2001 0 R 2002 0 R 2003 0 R 2004 0 R ] >> -% 2000 0 obj +% 2001 0 obj << /Type /Annot /Subtype /Link @@ -28159,7 +28226,7 @@ stream /Rect [283.359 567.422 295.314 580.259] /A << /S /GoTo /D (table.21) >> >> -% 2001 0 obj +% 2002 0 obj << /Type /Annot /Subtype /Link @@ -28167,7 +28234,7 @@ stream /Rect [366.137 520.379 378.292 532.438] /A << /S /GoTo /D (table.21) >> >> -% 2002 0 obj +% 2003 0 obj << /Type /Annot /Subtype /Link @@ -28175,7 +28242,7 @@ stream /Rect [379.319 483.736 386.292 496.573] /A << /S /GoTo /D (section.8) >> >> -% 2003 0 obj +% 2004 0 obj << /Type /Annot /Subtype /Link @@ -28183,29 +28250,29 @@ stream /Rect [136.757 451.412 148.712 460.822] /A << /S /GoTo /D (table.21) >> >> -% 2008 0 obj +% 2009 0 obj << -/D [2006 0 R /XYZ 98.895 753.953 null] +/D [2007 0 R /XYZ 98.895 753.953 null] >> % 553 0 obj << -/D [2006 0 R /XYZ 99.895 716.092 null] +/D [2007 0 R /XYZ 99.895 716.092 null] >> -% 2005 0 obj +% 2006 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2010 0 obj +% 2011 0 obj << /Type /Page -/Contents 2011 0 R -/Resources 2009 0 R +/Contents 2012 0 R +/Resources 2010 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1990 0 R -/Annots [ 2004 0 R ] +/Parent 1991 0 R +/Annots [ 2005 0 R ] >> -% 2004 0 obj +% 2005 0 obj << /Type /Annot /Subtype /Link @@ -28213,29 +28280,29 @@ stream /Rect [404.253 212.933 412.423 220.405] /A << /S /GoTo /D (cite.BERTACCINIFILIPPONE) >> >> -% 2012 0 obj +% 2013 0 obj << -/D [2010 0 R /XYZ 149.705 753.953 null] +/D [2011 0 R /XYZ 149.705 753.953 null] >> -% 1999 0 obj +% 2000 0 obj << -/D [2010 0 R /XYZ -3900.052 719.08 null] +/D [2011 0 R /XYZ -3900.052 719.08 null] >> -% 2009 0 obj +% 2010 0 obj << /Font << /F233 1044 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2019 0 obj +% 2020 0 obj << /Type /Page -/Contents 2020 0 R -/Resources 2018 0 R +/Contents 2021 0 R +/Resources 2019 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1990 0 R -/Annots [ 2014 0 R 2015 0 R 2016 0 R 2017 0 R ] +/Parent 1991 0 R +/Annots [ 2015 0 R 2016 0 R 2017 0 R 2018 0 R ] >> -% 2014 0 obj +% 2015 0 obj << /Type /Annot /Subtype /Link @@ -28243,7 +28310,7 @@ stream /Rect [314.678 576.377 392.197 588.437] /A << /S /GoTo /D (spdata) >> >> -% 2015 0 obj +% 2016 0 obj << /Type /Annot /Subtype /Link @@ -28251,7 +28318,7 @@ stream /Rect [395.856 505.741 468.144 517.801] /A << /S /GoTo /D (precdata) >> >> -% 2016 0 obj +% 2017 0 obj << /Type /Annot /Subtype /Link @@ -28259,7 +28326,7 @@ stream /Rect [371.454 435.105 438.512 447.165] /A << /S /GoTo /D (descdata) >> >> -% 2017 0 obj +% 2018 0 obj << /Type /Annot /Subtype /Link @@ -28267,46 +28334,46 @@ stream /Rect [317.418 128.475 389.706 140.535] /A << /S /GoTo /D (precdata) >> >> -% 2021 0 obj +% 2022 0 obj << -/D [2019 0 R /XYZ 98.895 753.953 null] +/D [2020 0 R /XYZ 98.895 753.953 null] >> % 557 0 obj << -/D [2019 0 R /XYZ 99.895 716.092 null] +/D [2020 0 R /XYZ 99.895 716.092 null] >> -% 2018 0 obj +% 2019 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2023 0 obj +% 2024 0 obj << /Type /Page -/Contents 2024 0 R -/Resources 2022 0 R +/Contents 2025 0 R +/Resources 2023 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1990 0 R +/Parent 1991 0 R >> -% 2025 0 obj +% 2026 0 obj << -/D [2023 0 R /XYZ 149.705 753.953 null] +/D [2024 0 R /XYZ 149.705 753.953 null] >> -% 2022 0 obj +% 2023 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2032 0 obj +% 2033 0 obj << /Type /Page -/Contents 2033 0 R -/Resources 2031 0 R +/Contents 2034 0 R +/Resources 2032 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2035 0 R -/Annots [ 2026 0 R 2027 0 R 2028 0 R 2029 0 R 2030 0 R ] +/Parent 2036 0 R +/Annots [ 2027 0 R 2028 0 R 2029 0 R 2030 0 R 2031 0 R ] >> -% 2026 0 obj +% 2027 0 obj << /Type /Annot /Subtype /Link @@ -28314,7 +28381,7 @@ stream /Rect [320.317 573.77 392.605 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2027 0 obj +% 2028 0 obj << /Type /Annot /Subtype /Link @@ -28322,7 +28389,7 @@ stream /Rect [342.493 517.98 418.548 530.039] /A << /S /GoTo /D (vdata) >> >> -% 2028 0 obj +% 2029 0 obj << /Type /Annot /Subtype /Link @@ -28330,7 +28397,7 @@ stream /Rect [324.013 462.189 391.071 474.248] /A << /S /GoTo /D (descdata) >> >> -% 2029 0 obj +% 2030 0 obj << /Type /Annot /Subtype /Link @@ -28338,7 +28405,7 @@ stream /Rect [342.493 272.899 418.548 284.958] /A << /S /GoTo /D (vdata) >> >> -% 2030 0 obj +% 2031 0 obj << /Type /Annot /Subtype /Link @@ -28346,29 +28413,29 @@ stream /Rect [431.552 183.235 443.387 196.238] /A << /S /GoTo /D (section.11) >> >> -% 2034 0 obj +% 2035 0 obj << -/D [2032 0 R /XYZ 98.895 753.953 null] +/D [2033 0 R /XYZ 98.895 753.953 null] >> % 561 0 obj << -/D [2032 0 R /XYZ 99.895 716.092 null] +/D [2033 0 R /XYZ 99.895 716.092 null] >> -% 2031 0 obj +% 2032 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2038 0 obj +% 2039 0 obj << /Type /Page -/Contents 2039 0 R -/Resources 2037 0 R +/Contents 2040 0 R +/Resources 2038 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2035 0 R -/Annots [ 2036 0 R ] +/Parent 2036 0 R +/Annots [ 2037 0 R ] >> -% 2036 0 obj +% 2037 0 obj << /Type /Annot /Subtype /Link @@ -28376,39 +28443,35 @@ stream /Rect [371.126 573.77 443.414 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2040 0 obj +% 2041 0 obj << -/D [2038 0 R /XYZ 149.705 753.953 null] +/D [2039 0 R /XYZ 149.705 753.953 null] >> % 565 0 obj << -/D [2038 0 R /XYZ 150.705 716.092 null] +/D [2039 0 R /XYZ 150.705 716.092 null] >> -% 2037 0 obj +% 2038 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2042 0 obj +% 2043 0 obj << /Type /Page -/Contents 2043 0 R -/Resources 2041 0 R +/Contents 2044 0 R +/Resources 2042 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2035 0 R +/Parent 2036 0 R >> -% 2044 0 obj +% 2045 0 obj << -/D [2042 0 R /XYZ 98.895 753.953 null] ->> -% 569 0 obj -<< -/D [2042 0 R /XYZ 99.895 716.092 null] +/D [2043 0 R /XYZ 98.895 753.953 null] >> endstream endobj -2050 0 obj +2051 0 obj << /Length 2715 >> @@ -28485,7 +28548,7 @@ ET endstream endobj -2058 0 obj +2059 0 obj << /Length 6107 >> @@ -28609,7 +28672,7 @@ ET endstream endobj -2065 0 obj +2066 0 obj << /Length 3194 >> @@ -28697,7 +28760,7 @@ ET endstream endobj -2069 0 obj +2070 0 obj << /Length 607 >> @@ -28713,7 +28776,7 @@ ET endstream endobj -2077 0 obj +2078 0 obj << /Length 8466 >> @@ -28863,7 +28926,7 @@ ET endstream endobj -2088 0 obj +2089 0 obj << /Length 7173 >> @@ -29003,7 +29066,7 @@ ET endstream endobj -2093 0 obj +2094 0 obj << /Length 4580 >> @@ -29070,7 +29133,7 @@ ET endstream endobj -2101 0 obj +2102 0 obj << /Length 8759 >> @@ -29222,7 +29285,7 @@ ET endstream endobj -2110 0 obj +2111 0 obj << /Length 6806 >> @@ -29347,7 +29410,7 @@ ET endstream endobj -2114 0 obj +2115 0 obj << /Length 1090 >> @@ -29370,7 +29433,7 @@ ET endstream endobj -2125 0 obj +2126 0 obj << /Length 8172 >> @@ -29604,7 +29667,7 @@ ET endstream endobj -2139 0 obj +2140 0 obj << /Length 9201 >> @@ -29861,7 +29924,7 @@ ET endstream endobj -2148 0 obj +2149 0 obj << /Length 4837 >> @@ -29930,21 +29993,21 @@ ET endstream endobj -2132 0 obj +2133 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/mat.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2153 0 R +/PTEX.InfoDict 2154 0 R /BBox [0 0 438 395] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << -/R7 2154 0 R +/R7 2155 0 R >>/XObject << -/R8 2155 0 R +/R8 2156 0 R >>>> /Length 3551 /Filter /FlateDecode @@ -29973,7 +30036,7 @@ r ´JXŘxčťóCąů[— S¬ëąĎć^zݰ.ĽŻ÷ëFÜ$ä 5`2. LŁ× 0 · ćÁî# Z(DôżSđ÷žĹjý˛Ą¬ł*'fÖĺťĂÝÖ;?buŢîŹR­rś†ţŤ—* Ýś—"@„ŤÂúaËiý(˙« o^˙/o*o endstream endobj -2155 0 obj +2156 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -29992,7 +30055,7 @@ stream & Ů˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ř˙Ŕ@ endstream endobj -2159 0 obj +2160 0 obj << /Length 7547 >> @@ -30142,66 +30205,43 @@ ET endstream endobj -2134 0 obj -<< -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (./figures/ell.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 2170 0 R -/BBox [0 0 447 205] -/Resources << -/ProcSet [ /PDF /ImageC /Text ] -/ExtGState << -/R7 2171 0 R ->>/XObject << -/R8 2172 0 R ->>/Font << /R9 2173 0 R/R11 2174 0 R>> ->> -/Length 2281 -/Filter /FlateDecode ->> -stream -xśÝYËŠ%ąÝçWäÎU‹’ő~,ŰŘoş§ŔÁ«kOĂ˝6=^ř÷!Ĺ )E—™M3Pôâv…â)ťŚĚúrZăNË˙ä÷ö8~˙©śź˙s|9Zń&”vúęM -î|-7¬;}ˇßâΖ‹)…Äd˛_Dg|¨çíł©]]¶ç`l©§:HÍ4Çúd(f˛)‰Ö›ńŽĹd)´Lš"é×bZ^š3ĹÍý-’ßŐ~«Ć¦%€ÖLŽuyf ¤ ¨\HŤx‡ÄPiGZb¤_NIČIK–P@``kĂMă8ŻŘ–Ć8NĽ6tÂ%Ę3L1V“óě‹‹Ńř®-»Ł5Iýą@ńřş´Ĺ…h\ńڼɶ!%ł/Ş 5QRµĹ…ÔUBŞk€*#HŰ‘?H…f[µŢůŮ—cÇ‘ł-Ş€"ŔŔÖ„ŮN޸őľPÚŢYíC°&˛i˝»]ď‹3ą»D_(Ô®—QveíŚ3©¶ŞťˇjĄÂJVggTenş@in‚Ô;¤Y˘iŠ­‚ř@ťfs¸ůaą3Ńg]FgsTAę ¶VÜŽżž˙˘ňÚÓ“+nßăpÖNń>Ä.P÷®;Ąźú~R·‘Ŕ@»c,SĽ‘ő ócß—3‘őÎŻŢ“ŢKH…NůK®ÄR1 Ň­ç˙}|¤_Ži˝,ĽK@4y˛ÉtҔÁ[Šł©a>¸3†-Ý0'‰ŃÄI¬$W˛łPo%ŤRč*NŐżÚ§†ĽřŻ‘ÎÓźČK@ŁXĐ ĘŠđ¦F(ĽŞ9(ój–ScA-\úpCc&ŕ”Ľ¤2kŮÔ@ç=ŘWZDD ND bEN“z‘őÔU™zŮVŁ®`T}ĆY@3”íZa_YQŢÔ…W5e^MrjŚ"¨…K´-“wQU0ŞFš·śĄ°šöEX>•5(!N bEZ“z‘řÔ¨…QąĹ…”Vcˇ1âÍ,2ófş‹ÉŠĽ‰Á«Čb2/ň\4z¦…K/ń¸2omeŢ.N®íĘ;őzç‹©îW0´Ż4LčŻeđ®ú˙IĽű GĚ,Nű˙{PeZ®D‡>ÝůR2łá…ű˙ďÇ÷$]×.‹ą¬‹,-‹­­‹,-‹.¸uµ‹ërľ„ÔĹuą]˘ęâ˛ěťRÎđŚNUšJ¬bĎ’Ö%‘Ć’łe](‹Ń^E”Ĺâ/‹"ö "Yˇ–EŰ(:ß{ś/ČŞUâ®dŐr63¸hąh…¶k rѢ[»i ҵřÄřäř8ŃÜ i ®Ů®Z‚¬Z9úb ČE+ň#÷˘%ČE«Ô-. «V¤Ú\mąhEżĹdŐ˘7Rëyl´Ć6ky`d(µTÎ_>Ó”äĆe”źŰăüĂ+]@zšÇóőÇcĽÎňŔC׸ËĆl’ĄĄÇńäž_&ű‰ž_6Ó4Ťĺ™äő˛xŤnôë_Ž'˙ü»ăeŃőüÔşˇë:9¶Fć=Q/xŘŹľ±_ýÜă Ľ•†ÝľPyá…ęNť†źhÇž(~Jň7ő+n$ŤÖ­ŃLÜxxŃ„8CŰÍyS¨ÚׄĆŇ ]¨ľf;XűÓkL'/<íůË?O¦G7řîíž}"´Ö„ÄĂ5ž^ B‡Üň|IgĘń8D7†*ăm‘7Ó!ßGó&?-8ÇkšXňđA;€doië©r¦ą®L"ߍBŤR,ěyÜčÁÔôůČ.~‹˛ô-ü &gjg*±űŞŽęR㙼'Sľ|÷Č$j­ˇěöI]žVč*ÉîFÇ„ź#0ův Xöońߎß_JÜ«F>,żkV@VĄw‚č˝FÍüjý’UˇQ‹/Bń ö‹8ݰ°Q‹ý™˘!‹=îŐ»L‹űĺ|L†»O/ÉsbŠřj p4°žbÍ&z˝p‰î®ŠLÖf.(Ĺí$}6Os¸XČ…_­\@¤ *HŚj`Ë‚[ö^3[oŮĚM §ˇËq™ąá<‘ă†ýŐ­ Ű·Řź‰! öÖ[ö®Ňâ~ UÎĽHX`ZD .žy Y*Ç~ęTD%»4ĚĎ´‰ű·ř—§×űI‰ű„ůcfĄ„… QcĆYHC¦ É*cJRŇ€G ;Éżő©Ď@3~ýZL˛kÄĹŽ˙8EÜóú8~xúđěÓ÷ç‡Oźž_([zR6 -Íy-?ýíůďŻßńGz·5®„ůËéOß}ŕMžsĺľAtű·ÔŹÇ˙|THF -endstream -endobj -2045 0 obj +2046 0 obj << /Type /ObjStm /N 100 -/First 989 -/Length 12218 ->> -stream -2041 0 2049 95 2046 243 2047 388 2051 535 573 594 2048 652 2057 747 2052 913 2053 1058 -2054 1205 2055 1359 2059 1508 577 1566 2056 1623 2064 1718 2060 1875 2061 2022 2062 2169 2066 2323 -581 2382 2063 2440 2068 2535 2070 2653 585 2711 2067 2768 2076 2863 2072 3011 2073 3161 2078 3306 -589 3365 2079 3423 2080 3482 2081 3541 2082 3600 2075 3658 2087 3809 2074 3975 2083 4122 2084 4266 -2085 4410 2089 4555 2086 4613 2092 4764 2090 4903 2094 5047 2091 5106 2100 5214 2095 5371 2096 5516 -2097 5663 2102 5805 593 5863 2103 5920 2104 5978 2105 6036 2099 6094 2109 6245 2098 6402 2106 6546 -2107 6693 2111 6837 2108 6896 2113 7047 2115 7165 2112 7223 2124 7304 2117 7497 2127 7673 2118 7848 -2119 8031 2120 8183 2121 8338 2122 8490 2126 8644 597 8703 601 8761 2123 8819 2138 8942 2130 9099 -2131 9248 2133 9395 2140 9542 606 9600 610 9657 2141 9714 2142 9772 2137 9830 2147 9968 2153 10107 -2154 10287 2136 10330 2149 10477 2144 10536 2150 10595 2151 10654 2152 10713 2146 10772 2158 10910 2170 11049 -% 2041 0 obj +/First 987 +/Length 12093 +>> +stream +569 0 2042 57 2050 152 2047 300 2048 445 2052 592 573 651 2049 709 2058 804 2053 970 +2054 1115 2055 1262 2056 1416 2060 1565 577 1623 2057 1680 2065 1775 2061 1932 2062 2079 2063 2226 +2067 2380 581 2439 2064 2497 2069 2592 2071 2710 585 2768 2068 2825 2077 2920 2073 3068 2074 3218 +2079 3363 589 3422 2080 3480 2081 3539 2082 3598 2083 3657 2076 3715 2088 3866 2075 4032 2084 4179 +2085 4323 2086 4467 2090 4612 2087 4670 2093 4821 2091 4960 2095 5104 2092 5163 2101 5271 2096 5428 +2097 5573 2098 5720 2103 5862 593 5920 2104 5977 2105 6035 2106 6093 2100 6151 2110 6302 2099 6459 +2107 6603 2108 6750 2112 6894 2109 6953 2114 7104 2116 7222 2113 7280 2125 7361 2118 7554 2128 7730 +2119 7905 2120 8088 2121 8240 2122 8395 2123 8547 2127 8701 597 8760 601 8818 2124 8876 2139 8999 +2131 9156 2132 9305 2134 9452 2141 9599 606 9657 610 9714 2142 9771 2143 9829 2138 9887 2148 10025 +2154 10164 2155 10344 2137 10387 2150 10534 2145 10593 2151 10652 2152 10711 2153 10770 2147 10829 2159 10967 +% 569 0 obj +<< +/D [2043 0 R /XYZ 99.895 716.092 null] +>> +% 2042 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2049 0 obj +% 2050 0 obj << /Type /Page -/Contents 2050 0 R -/Resources 2048 0 R +/Contents 2051 0 R +/Resources 2049 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2035 0 R -/Annots [ 2046 0 R 2047 0 R ] +/Parent 2036 0 R +/Annots [ 2047 0 R 2048 0 R ] >> -% 2046 0 obj +% 2047 0 obj << /Type /Annot /Subtype /Link @@ -30209,7 +30249,7 @@ stream /Rect [371.126 573.77 443.414 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2047 0 obj +% 2048 0 obj << /Type /Annot /Subtype /Link @@ -30217,29 +30257,29 @@ stream /Rect [371.126 498.054 443.414 510.114] /A << /S /GoTo /D (precdata) >> >> -% 2051 0 obj +% 2052 0 obj << -/D [2049 0 R /XYZ 149.705 753.953 null] +/D [2050 0 R /XYZ 149.705 753.953 null] >> % 573 0 obj << -/D [2049 0 R /XYZ 150.705 716.092 null] +/D [2050 0 R /XYZ 150.705 716.092 null] >> -% 2048 0 obj +% 2049 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2057 0 obj +% 2058 0 obj << /Type /Page -/Contents 2058 0 R -/Resources 2056 0 R +/Contents 2059 0 R +/Resources 2057 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2035 0 R -/Annots [ 2052 0 R 2053 0 R 2054 0 R 2055 0 R ] +/Parent 2036 0 R +/Annots [ 2053 0 R 2054 0 R 2055 0 R 2056 0 R ] >> -% 2052 0 obj +% 2053 0 obj << /Type /Annot /Subtype /Link @@ -30247,7 +30287,7 @@ stream /Rect [320.317 573.77 392.605 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2053 0 obj +% 2054 0 obj << /Type /Annot /Subtype /Link @@ -30255,7 +30295,7 @@ stream /Rect [320.317 430.308 392.605 442.368] /A << /S /GoTo /D (precdata) >> >> -% 2054 0 obj +% 2055 0 obj << /Type /Annot /Subtype /Link @@ -30263,7 +30303,7 @@ stream /Rect [129.909 304.779 149.563 316.839] /A << /S /GoTo /D (subsection.12.4) >> >> -% 2055 0 obj +% 2056 0 obj << /Type /Annot /Subtype /Link @@ -30271,29 +30311,29 @@ stream /Rect [172.161 304.779 184.246 316.839] /A << /S /GoTo /D (section.13) >> >> -% 2059 0 obj +% 2060 0 obj << -/D [2057 0 R /XYZ 98.895 753.953 null] +/D [2058 0 R /XYZ 98.895 753.953 null] >> % 577 0 obj << -/D [2057 0 R /XYZ 99.895 716.092 null] +/D [2058 0 R /XYZ 99.895 716.092 null] >> -% 2056 0 obj +% 2057 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2064 0 obj +% 2065 0 obj << /Type /Page -/Contents 2065 0 R -/Resources 2063 0 R +/Contents 2066 0 R +/Resources 2064 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2035 0 R -/Annots [ 2060 0 R 2061 0 R 2062 0 R ] +/Parent 2036 0 R +/Annots [ 2061 0 R 2062 0 R 2063 0 R ] >> -% 2060 0 obj +% 2061 0 obj << /Type /Annot /Subtype /Link @@ -30301,7 +30341,7 @@ stream /Rect [371.126 561.815 443.414 573.875] /A << /S /GoTo /D (precdata) >> >> -% 2061 0 obj +% 2062 0 obj << /Type /Annot /Subtype /Link @@ -30309,7 +30349,7 @@ stream /Rect [371.126 486.099 443.414 498.159] /A << /S /GoTo /D (precdata) >> >> -% 2062 0 obj +% 2063 0 obj << /Type /Annot /Subtype /Link @@ -30317,50 +30357,50 @@ stream /Rect [443.742 396.435 463.169 408.495] /A << /S /GoTo /D (subsection.10.8) >> >> -% 2066 0 obj +% 2067 0 obj << -/D [2064 0 R /XYZ 149.705 753.953 null] +/D [2065 0 R /XYZ 149.705 753.953 null] >> % 581 0 obj << -/D [2064 0 R /XYZ 150.705 716.092 null] +/D [2065 0 R /XYZ 150.705 716.092 null] >> -% 2063 0 obj +% 2064 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2068 0 obj +% 2069 0 obj << /Type /Page -/Contents 2069 0 R -/Resources 2067 0 R +/Contents 2070 0 R +/Resources 2068 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2071 0 R +/Parent 2072 0 R >> -% 2070 0 obj +% 2071 0 obj << -/D [2068 0 R /XYZ 98.895 753.953 null] +/D [2069 0 R /XYZ 98.895 753.953 null] >> % 585 0 obj << -/D [2068 0 R /XYZ 99.895 716.092 null] +/D [2069 0 R /XYZ 99.895 716.092 null] >> -% 2067 0 obj +% 2068 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2076 0 obj +% 2077 0 obj << /Type /Page -/Contents 2077 0 R -/Resources 2075 0 R +/Contents 2078 0 R +/Resources 2076 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2071 0 R -/Annots [ 2072 0 R 2073 0 R ] +/Parent 2072 0 R +/Annots [ 2073 0 R 2074 0 R ] >> -% 2072 0 obj +% 2073 0 obj << /Type /Annot /Subtype /Link @@ -30368,7 +30408,7 @@ stream /Rect [379.973 275.278 386.249 288.868] /A << /S /GoTo /D (Hfootnote.5) >> >> -% 2073 0 obj +% 2074 0 obj << /Type /Annot /Subtype /Link @@ -30376,45 +30416,45 @@ stream /Rect [342.753 134.696 420.271 146.755] /A << /S /GoTo /D (spdata) >> >> -% 2078 0 obj +% 2079 0 obj << -/D [2076 0 R /XYZ 149.705 753.953 null] +/D [2077 0 R /XYZ 149.705 753.953 null] >> % 589 0 obj << -/D [2076 0 R /XYZ 150.705 716.092 null] ->> -% 2079 0 obj -<< -/D [2076 0 R /XYZ 150.705 444.811 null] +/D [2077 0 R /XYZ 150.705 716.092 null] >> % 2080 0 obj << -/D [2076 0 R /XYZ 150.705 444.971 null] +/D [2077 0 R /XYZ 150.705 444.811 null] >> % 2081 0 obj << -/D [2076 0 R /XYZ 150.705 433.015 null] +/D [2077 0 R /XYZ 150.705 444.971 null] >> % 2082 0 obj << -/D [2076 0 R /XYZ 165.051 129.79 null] +/D [2077 0 R /XYZ 150.705 433.015 null] >> -% 2075 0 obj +% 2083 0 obj +<< +/D [2077 0 R /XYZ 165.051 129.79 null] +>> +% 2076 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2087 0 obj +% 2088 0 obj << /Type /Page -/Contents 2088 0 R -/Resources 2086 0 R +/Contents 2089 0 R +/Resources 2087 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2071 0 R -/Annots [ 2074 0 R 2083 0 R 2084 0 R 2085 0 R ] +/Parent 2072 0 R +/Annots [ 2075 0 R 2084 0 R 2085 0 R 2086 0 R ] >> -% 2074 0 obj +% 2075 0 obj << /Type /Annot /Subtype /Link @@ -30422,7 +30462,7 @@ stream /Rect [291.943 654.503 364.232 666.562] /A << /S /GoTo /D (precdata) >> >> -% 2083 0 obj +% 2084 0 obj << /Type /Annot /Subtype /Link @@ -30430,7 +30470,7 @@ stream /Rect [342.493 584.479 418.548 596.539] /A << /S /GoTo /D (vdata) >> >> -% 2084 0 obj +% 2085 0 obj << /Type /Annot /Subtype /Link @@ -30438,7 +30478,7 @@ stream /Rect [342.493 514.456 418.548 526.516] /A << /S /GoTo /D (vdata) >> >> -% 2085 0 obj +% 2086 0 obj << /Type /Annot /Subtype /Link @@ -30446,25 +30486,25 @@ stream /Rect [291.943 374.41 359.001 386.47] /A << /S /GoTo /D (descdata) >> >> -% 2089 0 obj +% 2090 0 obj << -/D [2087 0 R /XYZ 98.895 753.953 null] +/D [2088 0 R /XYZ 98.895 753.953 null] >> -% 2086 0 obj +% 2087 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R >> /ProcSet [ /PDF /Text ] >> -% 2092 0 obj +% 2093 0 obj << /Type /Page -/Contents 2093 0 R -/Resources 2091 0 R +/Contents 2094 0 R +/Resources 2092 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2071 0 R -/Annots [ 2090 0 R ] +/Parent 2072 0 R +/Annots [ 2091 0 R ] >> -% 2090 0 obj +% 2091 0 obj << /Type /Annot /Subtype /Link @@ -30472,25 +30512,25 @@ stream /Rect [393.303 554.876 469.357 566.936] /A << /S /GoTo /D (vdata) >> >> -% 2094 0 obj +% 2095 0 obj << -/D [2092 0 R /XYZ 149.705 753.953 null] +/D [2093 0 R /XYZ 149.705 753.953 null] >> -% 2091 0 obj +% 2092 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2100 0 obj +% 2101 0 obj << /Type /Page -/Contents 2101 0 R -/Resources 2099 0 R +/Contents 2102 0 R +/Resources 2100 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2071 0 R -/Annots [ 2095 0 R 2096 0 R 2097 0 R ] +/Parent 2072 0 R +/Annots [ 2096 0 R 2097 0 R 2098 0 R ] >> -% 2095 0 obj +% 2096 0 obj << /Type /Annot /Subtype /Link @@ -30498,7 +30538,7 @@ stream /Rect [291.943 253.023 369.462 265.083] /A << /S /GoTo /D (spdata) >> >> -% 2096 0 obj +% 2097 0 obj << /Type /Annot /Subtype /Link @@ -30506,7 +30546,7 @@ stream /Rect [291.943 184.772 364.232 196.831] /A << /S /GoTo /D (precdata) >> >> -% 2097 0 obj +% 2098 0 obj << /Type /Annot /Subtype /Link @@ -30514,41 +30554,41 @@ stream /Rect [342.493 116.52 418.548 128.58] /A << /S /GoTo /D (vdata) >> >> -% 2102 0 obj +% 2103 0 obj << -/D [2100 0 R /XYZ 98.895 753.953 null] +/D [2101 0 R /XYZ 98.895 753.953 null] >> % 593 0 obj << -/D [2100 0 R /XYZ 99.895 716.092 null] ->> -% 2103 0 obj -<< -/D [2100 0 R /XYZ 99.895 397.916 null] +/D [2101 0 R /XYZ 99.895 716.092 null] >> % 2104 0 obj << -/D [2100 0 R /XYZ 99.895 398.076 null] +/D [2101 0 R /XYZ 99.895 397.916 null] >> % 2105 0 obj << -/D [2100 0 R /XYZ 99.895 386.121 null] +/D [2101 0 R /XYZ 99.895 398.076 null] >> -% 2099 0 obj +% 2106 0 obj +<< +/D [2101 0 R /XYZ 99.895 386.121 null] +>> +% 2100 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2109 0 obj +% 2110 0 obj << /Type /Page -/Contents 2110 0 R -/Resources 2108 0 R +/Contents 2111 0 R +/Resources 2109 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2071 0 R -/Annots [ 2098 0 R 2106 0 R 2107 0 R ] +/Parent 2072 0 R +/Annots [ 2099 0 R 2107 0 R 2108 0 R ] >> -% 2098 0 obj +% 2099 0 obj << /Type /Annot /Subtype /Link @@ -30556,7 +30596,7 @@ stream /Rect [393.303 654.503 469.357 666.562] /A << /S /GoTo /D (vdata) >> >> -% 2106 0 obj +% 2107 0 obj << /Type /Annot /Subtype /Link @@ -30564,7 +30604,7 @@ stream /Rect [342.753 520.007 409.811 532.067] /A << /S /GoTo /D (descdata) >> >> -% 2107 0 obj +% 2108 0 obj << /Type /Annot /Subtype /Link @@ -30572,63 +30612,63 @@ stream /Rect [393.303 183.768 469.357 195.827] /A << /S /GoTo /D (vdata) >> >> -% 2111 0 obj +% 2112 0 obj << -/D [2109 0 R /XYZ 149.705 753.953 null] +/D [2110 0 R /XYZ 149.705 753.953 null] >> -% 2108 0 obj +% 2109 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R >> /ProcSet [ /PDF /Text ] >> -% 2113 0 obj +% 2114 0 obj << /Type /Page -/Contents 2114 0 R -/Resources 2112 0 R +/Contents 2115 0 R +/Resources 2113 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2116 0 R +/Parent 2117 0 R >> -% 2115 0 obj +% 2116 0 obj << -/D [2113 0 R /XYZ 98.895 753.953 null] +/D [2114 0 R /XYZ 98.895 753.953 null] >> -% 2112 0 obj +% 2113 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2124 0 obj +% 2125 0 obj << /Type /Page -/Contents 2125 0 R -/Resources 2123 0 R +/Contents 2126 0 R +/Resources 2124 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2116 0 R -/Annots [ 2117 0 R 2127 0 R 2118 0 R 2119 0 R 2120 0 R 2121 0 R 2122 0 R ] +/Parent 2117 0 R +/Annots [ 2118 0 R 2128 0 R 2119 0 R 2120 0 R 2121 0 R 2122 0 R 2123 0 R ] >> -% 2117 0 obj +% 2118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [368.938 636.522 495.412 648.582] /Subtype/Link/A<> >> -% 2127 0 obj +% 2128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [174.615 624.567 218.45 636.627] /Subtype/Link/A<> >> -% 2118 0 obj +% 2119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [191.223 593.098 397.198 605.158] /Subtype/Link/A<> >> -% 2119 0 obj +% 2120 0 obj << /Type /Annot /Subtype /Link @@ -30636,7 +30676,7 @@ stream /Rect [280.59 552.835 292.545 561.841] /A << /S /GoTo /D (cite.DesPat:11) >> >> -% 2120 0 obj +% 2121 0 obj << /Type /Annot /Subtype /Link @@ -30644,7 +30684,7 @@ stream /Rect [296.203 552.835 308.158 561.692] /A << /S /GoTo /D (cite.CaFiRo:2014) >> >> -% 2121 0 obj +% 2122 0 obj << /Type /Annot /Subtype /Link @@ -30652,7 +30692,7 @@ stream /Rect [311.815 552.835 323.771 561.841] /A << /S /GoTo /D (cite.Sparse03) >> >> -% 2122 0 obj +% 2123 0 obj << /Type /Annot /Subtype /Link @@ -30660,33 +30700,33 @@ stream /Rect [209.414 540.781 221.369 549.737] /A << /S /GoTo /D (cite.OurTechRep) >> >> -% 2126 0 obj +% 2127 0 obj << -/D [2124 0 R /XYZ 149.705 753.953 null] +/D [2125 0 R /XYZ 149.705 753.953 null] >> % 597 0 obj << -/D [2124 0 R /XYZ 150.705 716.092 null] +/D [2125 0 R /XYZ 150.705 716.092 null] >> % 601 0 obj << -/D [2124 0 R /XYZ 150.705 525.151 null] +/D [2125 0 R /XYZ 150.705 525.151 null] >> -% 2123 0 obj +% 2124 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> /ProcSet [ /PDF /Text ] >> -% 2138 0 obj +% 2139 0 obj << /Type /Page -/Contents 2139 0 R -/Resources 2137 0 R +/Contents 2140 0 R +/Resources 2138 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2116 0 R -/Annots [ 2130 0 R 2131 0 R 2133 0 R ] +/Parent 2117 0 R +/Annots [ 2131 0 R 2132 0 R 2134 0 R ] >> -% 2130 0 obj +% 2131 0 obj << /Type /Annot /Subtype /Link @@ -30694,7 +30734,7 @@ stream /Rect [121.315 282.067 133.27 291.173] /A << /S /GoTo /D (cite.MRC:11) >> >> -% 2131 0 obj +% 2132 0 obj << /Type /Annot /Subtype /Link @@ -30702,7 +30742,7 @@ stream /Rect [253.836 246.183 265.791 255.592] /A << /S /GoTo /D (table.22) >> >> -% 2133 0 obj +% 2134 0 obj << /Type /Annot /Subtype /Link @@ -30710,53 +30750,53 @@ stream /Rect [310.367 176.296 317.241 188.355] /A << /S /GoTo /D (figure.6) >> >> -% 2140 0 obj +% 2141 0 obj << -/D [2138 0 R /XYZ 98.895 753.953 null] +/D [2139 0 R /XYZ 98.895 753.953 null] >> % 606 0 obj << -/D [2138 0 R /XYZ 99.895 349.244 null] +/D [2139 0 R /XYZ 99.895 349.244 null] >> % 610 0 obj << -/D [2138 0 R /XYZ 99.895 231.907 null] +/D [2139 0 R /XYZ 99.895 231.907 null] >> -% 2141 0 obj +% 2142 0 obj << -/D [2138 0 R /XYZ 99.895 211.056 null] +/D [2139 0 R /XYZ 99.895 211.056 null] >> -% 2142 0 obj +% 2143 0 obj << -/D [2138 0 R /XYZ 99.895 120.166 null] +/D [2139 0 R /XYZ 99.895 120.166 null] >> -% 2137 0 obj +% 2138 0 obj << -/Font << /F279 1814 0 R /F233 1044 0 R /F84 687 0 R /F145 940 0 R /F75 685 0 R /F78 686 0 R >> +/Font << /F279 1815 0 R /F233 1044 0 R /F84 687 0 R /F145 940 0 R /F75 685 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2147 0 obj +% 2148 0 obj << /Type /Page -/Contents 2148 0 R -/Resources 2146 0 R +/Contents 2149 0 R +/Resources 2147 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2116 0 R -/Annots [ 2136 0 R ] +/Parent 2117 0 R +/Annots [ 2137 0 R ] >> -% 2153 0 obj +% 2154 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133929+01'00') /ModDate (D:20140329133929+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2154 0 obj +% 2155 0 obj << /Type /ExtGState /OPM 1 >> -% 2136 0 obj +% 2137 0 obj << /Type /Annot /Subtype /Link @@ -30764,52 +30804,72 @@ stream /Rect [170.554 324.049 177.543 336.109] /A << /S /GoTo /D (algocf.1) >> >> -% 2149 0 obj -<< -/D [2147 0 R /XYZ 149.705 753.953 null] ->> -% 2144 0 obj +% 2150 0 obj << -/D [2147 0 R /XYZ 150.705 716.092 null] +/D [2148 0 R /XYZ 149.705 753.953 null] >> -% 2150 0 obj +% 2145 0 obj << -/D [2147 0 R /XYZ 397.506 407.446 null] +/D [2148 0 R /XYZ 150.705 716.092 null] >> % 2151 0 obj << -/D [2147 0 R /XYZ 150.705 260.219 null] +/D [2148 0 R /XYZ 397.506 407.446 null] >> % 2152 0 obj << -/D [2147 0 R /XYZ 150.705 226.207 null] +/D [2148 0 R /XYZ 150.705 260.219 null] >> -% 2146 0 obj +% 2153 0 obj +<< +/D [2148 0 R /XYZ 150.705 226.207 null] +>> +% 2147 0 obj << /Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R >> -/XObject << /Im6 2132 0 R >> +/XObject << /Im6 2133 0 R >> /ProcSet [ /PDF /Text ] >> -% 2158 0 obj +% 2159 0 obj << /Type /Page -/Contents 2159 0 R -/Resources 2157 0 R +/Contents 2160 0 R +/Resources 2158 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2116 0 R -/Annots [ 2135 0 R ] +/Parent 2117 0 R +/Annots [ 2136 0 R ] >> -% 2170 0 obj + +endstream +endobj +2135 0 obj << -/Producer (GPL Ghostscript 9.10) -/CreationDate (D:20140329133928+01'00') -/ModDate (D:20140329133928+01'00') -/Creator (cairo 1.13.1 \(http://cairographics.org\)) +/Type /XObject +/Subtype /Form +/FormType 1 +/PTEX.FileName (./figures/ell.pdf) +/PTEX.PageNumber 1 +/PTEX.InfoDict 2171 0 R +/BBox [0 0 447 205] +/Resources << +/ProcSet [ /PDF /ImageC /Text ] +/ExtGState << +/R7 2172 0 R +>>/XObject << +/R8 2173 0 R +>>/Font << /R9 2174 0 R/R11 2175 0 R>> >> - +/Length 2281 +/Filter /FlateDecode +>> +stream +xśÝYËŠ%ąÝçWäÎU‹’ő~,ŰŘoş§ŔÁ«kOĂ˝6=^ř÷!Ĺ )E—™M3Pôâv…â)ťŚĚúrZăNË˙ä÷ö8~˙©śź˙s|9Zń&”vúęM +î|-7¬;}ˇßâΖ‹)…Äd˛_Dg|¨çíł©]]¶ç`l©§:HÍ4Çúd(f˛)‰Ö›ńŽĹd)´Lš"é×bZ^š3ĹÍý-’ßŐ~«Ć¦%€ÖLŽuyf ¤ ¨\HŤx‡ÄPiGZb¤_NIČIK–P@``kĂMă8ŻŘ–Ć8NĽ6tÂ%Ę3L1V“óě‹‹Ńř®-»Ł5Iýą@ńřş´Ĺ…h\ńڼɶ!%ł/Ş 5QRµĹ…ÔUBŞk€*#HŰ‘?H…f[µŢůŮ—cÇ‘ł-Ş€"ŔŔÖ„ŮN޸őľPÚŢYíC°&˛i˝»]ď‹3ą»D_(Ô®—QveíŚ3©¶ŞťˇjĄÂJVggTenş@in‚Ô;¤Y˘iŠ­‚ř@ťfs¸ůaą3Ńg]FgsTAę ¶VÜŽżž˙˘ňÚÓ“+nßăpÖNń>Ä.P÷®;Ąźú~R·‘Ŕ@»c,SĽ‘ő ócß—3‘őÎŻŢ“ŢKH…NůK®ÄR1 Ň­ç˙}|¤_Ži˝,ĽK@4y˛ÉtҔÁ[Šł©a>¸3†-Ý0'‰ŃÄI¬$W˛łPo%ŤRč*NŐżÚ§†ĽřŻ‘ÎÓźČK@ŁXĐ ĘŠđ¦F(ĽŞ9(ój–ScA-\úpCc&ŕ”Ľ¤2kŮÔ@ç=ŘWZDD ND bEN“z‘őÔU™zŮVŁ®`T}ĆY@3”íZa_YQŢÔ…W5e^MrjŚ"¨…K´-“wQU0ŞFš·śĄ°šöEX>•5(!N bEZ“z‘řÔ¨…QąĹ…”Vcˇ1âÍ,2ófş‹ÉŠĽ‰Á«Čb2/ň\4z¦…K/ń¸2omeŢ.N®íĘ;őzç‹©îW0´Ż4LčŻeđ®ú˙IĽű GĚ,Nű˙{PeZ®D‡>ÝůR2łá…ű˙ďÇ÷$]×.‹ą¬‹,-‹­­‹,-‹.¸uµ‹ërľ„ÔĹuą]˘ęâ˛ěťRÎđŚNUšJ¬bĎ’Ö%‘Ć’łe](‹Ń^E”Ĺâ/‹"ö "Yˇ–EŰ(:ß{ś/ČŞUâ®dŐr63¸hąh…¶k rѢ[»i ҵřÄřäř8ŃÜ i ®Ů®Z‚¬Z9úb ČE+ň#÷˘%ČE«Ô-. «V¤Ú\mąhEżĹdŐ˘7Rëyl´Ć6ky`d(µTÎ_>Ó”äĆe”źŰăüĂ+]@zšÇóőÇcĽÎňŔC׸ËĆl’ĄĄÇńäž_&ű‰ž_6Ó4Ťĺ™äő˛xŤnôë_Ž'˙ü»ăeŃőüÔşˇë:9¶Fć=Q/xŘŹľ±_ýÜă Ľ•†ÝľPyá…ęNť†źhÇž(~Jň7ő+n$ŤÖ­ŃLÜxxŃ„8CŰÍyS¨ÚׄĆŇ ]¨ľf;XűÓkL'/<íůË?O¦G7řîíž}"´Ö„ÄĂ5ž^ B‡Üň|IgĘń8D7†*ăm‘7Ó!ßGó&?-8ÇkšXňđA;€doië©r¦ą®L"ߍBŤR,ěyÜčÁÔôůČ.~‹˛ô-ü &gjg*±űŞŽęR㙼'Sľ|÷Č$j­ˇěöI]žVč*ÉîFÇ„ź#0ův Xöońߎß_JÜ«F>,żkV@VĄw‚č˝FÍüjý’UˇQ‹/Bń ö‹8ݰ°Q‹ý™˘!‹=îŐ»L‹űĺ|L†»O/ÉsbŠřj p4°žbÍ&z˝p‰î®ŠLÖf.(Ĺí$}6Os¸XČ…_­\@¤ *HŚj`Ë‚[ö^3[oŮĚM §ˇËq™ąá<‘ă†ýŐ­ Ű·Řź‰! öÖ[ö®Ňâ~ UÎĽHX`ZD .žy Y*Ç~ęTD%»4ĚĎ´‰ű·ř—§×űI‰ű„ůcfĄ„… QcĆYHC¦ É*cJRŇ€G ;Éżő©Ď@3~ýZL˛kÄĹŽ˙8EÜóú8~xúđěÓ÷ç‡Oźž_([zR6 +Íy-?ýíůďŻßńGz·5®„ůËéOß}ŕMžsĺľAtű·ÔŹÇ˙|THF endstream endobj -2172 0 obj +2173 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -30828,7 +30888,7 @@ stream ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙;YŻ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŕ endstream endobj -2177 0 obj +2178 0 obj << /Filter /FlateDecode /Length 171 @@ -30837,7 +30897,7 @@ stream xś]ŹM F÷ś‚ŕOŰĸ±mš¶Ŕa0,‚¸čí; vфߛ|~¸ÖD.ÁÁ #×ĆŞ€‹[ q2–•WâNy‡Yz&ú›ôďŹGNÔßĺŚâYžóMą9ŕ.^i'dmQt­ÖC«ţžŞMőž¬)Yź:2čDŘ^26Y?‚iRŞt4ŕ°†€6ćŢąWęc,ţľćťO§Ĺľ=+V endstream endobj -2179 0 obj +2180 0 obj << /Filter /FlateDecode /Length 191 @@ -30847,7 +30907,7 @@ x â ±—U}íuT-mËüǸTŻ)ĎuÉşDŢyřýC ±¸(Š|iŃ_Ŕ endstream endobj -2180 0 obj +2181 0 obj << /Filter /FlateDecode /Length1 11124 @@ -30896,7 +30956,7 @@ B “žŃ endstream endobj -2181 0 obj +2182 0 obj << /Filter /FlateDecode /Length1 3512 @@ -30912,7 +30972,7 @@ a lţ'÷uţoL|E÷ľr«Ço¸ß9®ńßşÓŁúľÁ( endstream endobj -2188 0 obj +2189 0 obj << /Length 8640 >> @@ -31080,20 +31140,20 @@ ET endstream endobj -2182 0 obj +2183 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../figures/hll.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2192 0 R +/PTEX.InfoDict 2193 0 R /BBox [0 0 494 214] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 2193 0 R ->>/Font << /R8 2194 0 R/R10 2195 0 R>> +/R7 2194 0 R +>>/Font << /R8 2195 0 R/R10 2196 0 R>> >> /Length 2880 /Filter /FlateDecode @@ -31115,7 +31175,7 @@ l Ů<řÇ×O?Ó‚•2.šg9_˙*×Ps źOřYT¨•®UĽv˛rĆşźÂăSóřbzh”8†Ń˝ÂXZĘü°ó`—ťúçźť†@8čwŕô)a˙…˘ŞküśËEvťëń»›šK°|dGs%´D ŹYšVňÔ@( ázé‹ńCü˙ć׬áż8Ç7•xVÇ‹ éŃi3kč4˝đw(Ölú¸V*|ik¬Ô¦âÓ*řkµřĺŔ—žŃŃ÷K•_á•Box:ŔŔŻżĆë‘HĎ+x´“ęĆi[‡;¬<žżÁ˛ĐůĹ+i ś°ůźř`8Ľ=˙ł·‡ endstream endobj -2197 0 obj +2198 0 obj << /Filter /FlateDecode /Length 214 @@ -31124,7 +31184,7 @@ stream xś]Á‚0 †ď{Š˝Á@˛ě˘ŁľŔťŮ±L<řö¶EOK šp#Ý&ÉQZ]ŚV«ÓqA« ×ÍĆăřÝn ¸G6ЍŃë4ť(„‡ ÇéÍÍé~ąR6čő&Ž{řaÎx˙.[±D˝ĐK·ČQ7idZń?:ő;> @@ -31522,20 +31582,20 @@ ET endstream endobj -2204 0 obj +2205 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/dia.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2213 0 R +/PTEX.InfoDict 2214 0 R /BBox [0 0 499 211] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 2214 0 R ->>/Font << /R8 2215 0 R/R10 2216 0 R>> +/R7 2215 0 R +>>/Font << /R8 2216 0 R/R10 2217 0 R>> >> /Length 2502 /Filter /FlateDecode @@ -31553,7 +31613,7 @@ $ rca™ń8ĎzD—‹bŤH…°d'Ą˘šĂ\LŔ/óą¬1ŮŚ,0F c¨)T#  7Ě,Ąj7ß%ÎĄšäŰć›RŮ6ßq4›/Éٸg]Ťĺű\¦—×\ĂW\¬ň+3,ęmó˝Lr´›ďJŽ·Í7ńĹÓĐČţ¶ů&ţ?9łů.y’QQШ» ťŃ•Ś&GsĽmľ7ě“LĎ‹I7=šűmóMąm›/]”o›/ÉvóUQxT»ů._ŕlŰć»ňâ›QUÔĚá×.Ü$Rg{çćńĘŘcé‚Lçúqçţú1ş‡Źç×><>ľbűJ:ŞŠŢËĂ_Ć˝:dş’·p>yşovŞ†çż‘ăżűîă·ĎÓ‘Żě-u„縑óßżË&& endstream endobj -2218 0 obj +2219 0 obj << /Filter /FlateDecode /Length 177 @@ -31563,7 +31623,7 @@ x ˘t s1#8ý÷ŐUĂlŽÉV‹"α’ˇCc×fÄb/Šű˛íôĺĹ9áŞ=Fp©śQbćxÖÁďŇŕCvQůđY˘ endstream endobj -2220 0 obj +2221 0 obj << /Filter /FlateDecode /Length 197 @@ -31572,7 +31632,7 @@ stream xś]M …÷ś‚FmL»qѦi{ÄÁ° ꢷď0j]Ľ Ěß#k»kçÝĘłGśÍ Vnť",ó đFçY^đÁ™ő ŠfŇeíM‡÷'ǰ;ßőŮ3żĐMľ×y€%hQűBIk?ü=Ő{AoŹĚ3“„ŔČd™+’+Äš°Jh ›ËŞP˛*â ±Q$ĆFźCŇÉÎą=7[ŚŕWňLž’çá÷-a©ŠŁŘsÇbă endstream endobj -2221 0 obj +2222 0 obj << /Filter /FlateDecode /Length1 9528 @@ -31606,7 +31666,7 @@ E óźó_ ů[ŘCŰ×,š0Z­ĘţŰ Ę+é×…¬Ăż]úi ^Ťgů\Ţo´ůČŻ›‰ň'/! `˘ěÁŠŕĆ?G˙Áž˙…&X‘łś‰çI,ŻÖĆĺbřQ ~Ľü÷8É߇ă­^×Ô:·éŰ š×ŐßZ˝pÎ"Ł'ŰőDĘrms#×0F~ť6McŁřÓ´ÎĺBi6U Żé˙đČľüŤ?ôčGNÔŮý_XR‡Ť=ńŃč—$=zC/]l»ĽĂQd‰E3ꊭ˙îi endstream endobj -2222 0 obj +2223 0 obj << /Filter /FlateDecode /Length1 4304 @@ -31632,7 +31692,7 @@ Hp —řď}Ř».|wy endstream endobj -2227 0 obj +2228 0 obj << /Length 9674 >> @@ -31859,22 +31919,22 @@ ET endstream endobj -2223 0 obj +2224 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../figures/hdia.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2230 0 R +/PTEX.InfoDict 2231 0 R /BBox [0 0 556 211] /Resources << /ProcSet [ /PDF /ImageC /Text ] /ExtGState << -/R7 2231 0 R +/R7 2232 0 R >>/XObject << -/R8 2232 0 R ->>/Font << /R9 2233 0 R/R11 2234 0 R>> +/R8 2233 0 R +>>/Font << /R9 2234 0 R/R11 2235 0 R>> >> /Length 3027 /Filter /FlateDecode @@ -31891,7 +31951,7 @@ mC ŕŐŔ–ĹčÚWšŮ‡ńZ1m੆CË8?¬ąe—¶Ühc·ćÖó57‘-7ÖhhlABg–›Ä ŽQ ěYP׾ÖĚĆZkađfĂŢ%÷1#YSńüőtĂIoĂ`·FzT#Ô:ž©""ŇŇw+ ÄÁíj€eqA#X#͸g =Đ·‰ 1€cP€D-¶,ĆZűJ3k-Í^Zn˘‘ĐrśłABĎqLË-‡9źć|S,›cŐphbABg–›Ä ‰Z lYڵö•fF]æf^ň¨gÚ8Ĺł7ŐÄŠýlT3"ޱ ÚżţV)Z?·ľăfĚşˇ1Ö°X]]ůLČż†ŮYáKjϢÖKedj›<ź®đ/o•˘‡‹í—çŰ>úéĆĹPó\+użUóq™ż¨ŮńĽ(q|KŕcÉtőĽh|¤;ÓDź8TÜč3¦ĆĂYË«HŚÇŠ”Ű+˝ť’¬Q‹‰n¨ű±űěţǨ١kŁ1*R$˘™®`jš“†Ňč •f‘Ş,vU#žĹűŘ}JoŇ|íYťÖ„5%sMč%Çxé?k‚SW-"RMXQ»Ö„G°Ć|d®ÉŐ§Ô„ě5kšéŠjŇăéŐwjt·n˛¨VUÁne4;Řrô!”6t„A· ˇY!éeB±:łhŤ ¬yâJŕ×:ůD#†R[Dď°a§Ě–Isµ<H«eŐđdˇ čm8Ď% P§ő§#Ţ´Ď·mŕxGĽÎZË‘ýn9s…#Ŕjő§á‚N5‚ĚcG,r©™®Çum”Ň|űi¬˝–»8ľPĂôE!řć*]Šâ ŰćGR,_#ů¬ÝÍ?fCésöâÄńßâÝ´Ď·}$˝”Ç®`Ly®…ČR+Q—ć#­ÍKłŮzT&zµ)ŠH_x6Ł=“ĄO±ôů˘Og„ixLEđ8•É«KŽcł2žŮOO¦áU ˇňjSĂJ[ęYâE,l^yÖŃge”´Ř˘ţđ™‰o˛ }DęBtôú§ëĎÎ'şÖŃ"ý¨†ů‡Ç +Š}–é愆̶fbôBÍŹŹ™ţďńůřÍĂí›7ýéxřń6żqžßź`Ú dśöPŔ‡çŰť{őđŹ›Ďř%Ą^Ťw¬ă_îÎ…)ôzÜăÉŽ-îú ĘŞ#Oú! smčéRßa÷ý»;˙ęľaĂě\ş«Żţúđ‡Ű=–ŚsŘﮆßÝݦ@ďwńŐ}Íî.ă?„NC ¬Ô,PŚ{¤ …áŰÔ…öJź«Ť÷ôş8¬ĺą×ô}Ż ĎHzw÷ű׿ýăń§ďľ{‹ŔU­áîۇ}±ŁÇŔ„nbURA4ŰăÇą@7ú#Ăׯ"íW}Ľ{{Ľ~ófZÍÍă‡ęđg)wćG?Üţ4ş‘ endstream endobj -2232 0 obj +2233 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -31910,7 +31970,7 @@ stream ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ 0l?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü@ endstream endobj -2236 0 obj +2237 0 obj << /Filter /FlateDecode /Length 177 @@ -31919,7 +31979,7 @@ stream xś]Ź1Ă EwNÁ €0´C”%]24ŞÚ^€€‰ˇ·/8I‡¶ülë›őĂmđ.SöHAż SëĽI°†-i ĚÎŃPăt>ł^T$¬ż«řţD eěÎŁZ€=Ĺ;b×č``ŤJCR~Ňr޵ÖvĽůÉ]0Ůcł1ç%“VˇKUPĽ JĽvęęáęđ4Dő–řŚo ÍjĎyř}C¬*Z‚|ďY› endstream endobj -2238 0 obj +2239 0 obj << /Filter /FlateDecode /Length 213 @@ -31931,7 +31991,7 @@ e ¦Y$ŕĹcÂß ó”yJę Űál« endstream endobj -2239 0 obj +2240 0 obj << /Filter /FlateDecode /Length1 10604 @@ -31965,7 +32025,7 @@ b YŃFťŹ.ţŤÎ X°bÍŇÎąKoßľ¦ůúÚş9 ô,p÷xý˙ÍgĽ˛xή`Ś˙K)ÄDŔl;Áy‚jö8Ô­¨[ß˙áí°×ţŇď=2ŘdqmŚëřᏓžôčŐđĂú‹;­EĆP%ď÷˙=X endstream endobj -2240 0 obj +2241 0 obj << /Filter /FlateDecode /Length1 5080 @@ -31986,7 +32046,7 @@ Y2 pÓÇ}3ÇóyŘŕ.”pÄ€×ĎôÁ›Źý˙âqÁ%§t1Ţ®onb©łećŃM¸éĂáË0÷ǵ3kçéD ^đoŰw# çô°'Ě?¸˛rtĺÁ3÷9#§ţëňľW|ŢŢ|Ź˘űďš«A†űD¸źŕűe0ąbÎxőŻ`}u¤¸%üžÄ÷÷đý\3“ąŮZź­ľeÓ?Ľ|Odň?¸Żđo2őU3đÜÖ˙ă˙­đ˙ÍWúßÓ )' endstream endobj -2243 0 obj +2244 0 obj << /Length 1097 >> @@ -32046,7 +32106,7 @@ ET endstream endobj -2247 0 obj +2248 0 obj << /Length 7873 >> @@ -32113,7 +32173,7 @@ ET endstream endobj -2251 0 obj +2252 0 obj << /Length 5844 >> @@ -32216,7 +32276,7 @@ ET endstream endobj -2256 0 obj +2257 0 obj << /Length 5432 >> @@ -32404,7 +32464,7 @@ ET endstream endobj -2260 0 obj +2261 0 obj << /Length 2725 >> @@ -32508,7 +32568,7 @@ ET endstream endobj -2265 0 obj +2266 0 obj << /Length 81 >> @@ -32523,7 +32583,7 @@ ET endstream endobj -2269 0 obj +2270 0 obj << /Length 7303 >> @@ -32587,52 +32647,59 @@ ET endstream endobj -2175 0 obj +2176 0 obj << /Type /ObjStm /N 100 -/First 985 -/Length 11845 ->> -stream -2171 0 2173 43 2174 248 2176 537 2178 758 2135 971 2160 1117 2145 1175 2161 1234 2162 1293 -2163 1352 2164 1411 2165 1470 2166 1529 2167 1588 2168 1646 2156 1705 2169 1764 2157 1822 2187 2017 -2192 2174 2193 2354 2194 2397 2195 2700 2196 2905 2198 3118 2183 3339 2184 3486 2185 3633 2189 3780 -2190 3839 2191 3897 2186 3956 2207 4166 2213 4305 2214 4485 2215 4528 2216 4729 2217 5024 2219 5245 -2205 5458 2209 5604 2202 5662 2210 5721 2203 5779 2211 5838 2206 5896 2226 6050 2230 6189 2231 6369 -2233 6412 2234 6619 2235 6920 2237 7141 2224 7354 2228 7501 2229 7560 2225 7619 2242 7801 2244 7919 -2241 7977 2246 8060 2248 8178 614 8237 2245 8295 2250 8418 2252 8536 618 8594 622 8650 2253 8707 -626 8765 2249 8822 2255 8917 2257 9035 630 9094 634 9152 638 9210 642 9268 646 9326 650 9384 -654 9442 658 9500 2254 9558 2259 9653 2261 9771 662 9829 666 9886 670 9943 674 10000 2258 10057 -2264 10152 2266 10270 2263 10329 2268 10397 2270 10515 2271 10573 2272 10631 2013 10689 958 10746 957 10803 +/First 989 +/Length 11972 +>> +stream +2171 0 2172 180 2174 223 2175 428 2177 717 2179 938 2136 1151 2161 1297 2146 1355 2162 1414 +2163 1473 2164 1532 2165 1591 2166 1650 2167 1709 2168 1768 2169 1826 2157 1885 2170 1944 2158 2002 +2188 2197 2193 2354 2194 2534 2195 2577 2196 2880 2197 3085 2199 3298 2184 3519 2185 3666 2186 3813 +2190 3960 2191 4019 2192 4077 2187 4136 2208 4346 2214 4485 2215 4665 2216 4708 2217 4909 2218 5204 +2220 5425 2206 5638 2210 5784 2203 5842 2211 5901 2204 5959 2212 6018 2207 6076 2227 6230 2231 6369 +2232 6549 2234 6592 2235 6799 2236 7100 2238 7321 2225 7534 2229 7681 2230 7740 2226 7799 2243 7981 +2245 8099 2242 8157 2247 8240 2249 8358 614 8417 2246 8475 2251 8598 2253 8716 618 8774 622 8830 +2254 8887 626 8945 2250 9002 2256 9097 2258 9215 630 9274 634 9332 638 9390 642 9448 646 9506 +650 9564 654 9622 658 9680 2255 9738 2260 9833 2262 9951 662 10009 666 10066 670 10123 674 10180 +2259 10237 2265 10332 2267 10450 2264 10509 2269 10577 2271 10695 2272 10753 2273 10811 2014 10869 958 10926 % 2171 0 obj << +/Producer (GPL Ghostscript 9.10) +/CreationDate (D:20140329133928+01'00') +/ModDate (D:20140329133928+01'00') +/Creator (cairo 1.13.1 \(http://cairographics.org\)) +>> +% 2172 0 obj +<< /Type /ExtGState /OPM 1 >> -% 2173 0 obj +% 2174 0 obj << /BaseFont /YAZDUX+TimesNewRomanPSMT -/FontDescriptor 2176 0 R -/ToUnicode 2177 0 R +/FontDescriptor 2177 0 R +/ToUnicode 2178 0 R /Type /Font /FirstChar 48 /LastChar 57 /Widths [ 500 500 500 500 500 0 0 500 500 500] /Subtype /TrueType >> -% 2174 0 obj +% 2175 0 obj << /BaseFont /NDNSMY+FreeSerif -/FontDescriptor 2178 0 R -/ToUnicode 2179 0 R +/FontDescriptor 2179 0 R +/ToUnicode 2180 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 0 0 0 0 0 0 0 385 0 0 0 0 0 0 0 667 529 0 0 0 0 0 701] /Subtype /TrueType >> -% 2176 0 obj +% 2177 0 obj << /Type /FontDescriptor /FontName /YAZDUX+TimesNewRomanPSMT @@ -32644,9 +32711,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2180 0 R +/FontFile2 2181 0 R >> -% 2178 0 obj +% 2179 0 obj << /Type /FontDescriptor /FontName /NDNSMY+FreeSerif @@ -32658,9 +32725,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2181 0 R +/FontFile2 2182 0 R >> -% 2135 0 obj +% 2136 0 obj << /Type /Annot /Subtype /Link @@ -32668,104 +32735,104 @@ stream /Rect [384.587 583.767 391.56 595.827] /A << /S /GoTo /D (figure.5) >> >> -% 2160 0 obj -<< -/D [2158 0 R /XYZ 98.895 753.953 null] ->> -% 2145 0 obj +% 2161 0 obj << -/D [2158 0 R /XYZ 389.217 621.446 null] +/D [2159 0 R /XYZ 98.895 753.953 null] >> -% 2161 0 obj +% 2146 0 obj << -/D [2158 0 R /XYZ 114.839 563.747 null] +/D [2159 0 R /XYZ 389.217 621.446 null] >> % 2162 0 obj << -/D [2158 0 R /XYZ 114.839 567.034 null] +/D [2159 0 R /XYZ 114.839 563.747 null] >> % 2163 0 obj << -/D [2158 0 R /XYZ 114.839 556.075 null] +/D [2159 0 R /XYZ 114.839 567.034 null] >> % 2164 0 obj << -/D [2158 0 R /XYZ 114.839 545.116 null] +/D [2159 0 R /XYZ 114.839 556.075 null] >> % 2165 0 obj << -/D [2158 0 R /XYZ 114.839 534.158 null] +/D [2159 0 R /XYZ 114.839 545.116 null] >> % 2166 0 obj << -/D [2158 0 R /XYZ 114.839 523.199 null] +/D [2159 0 R /XYZ 114.839 534.158 null] >> % 2167 0 obj << -/D [2158 0 R /XYZ 114.839 512.24 null] +/D [2159 0 R /XYZ 114.839 523.199 null] >> % 2168 0 obj << -/D [2158 0 R /XYZ 114.839 501.281 null] ->> -% 2156 0 obj -<< -/D [2158 0 R /XYZ 114.839 481.057 null] +/D [2159 0 R /XYZ 114.839 512.24 null] >> % 2169 0 obj << -/D [2158 0 R /XYZ 99.895 294.895 null] +/D [2159 0 R /XYZ 114.839 501.281 null] >> % 2157 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F233 1044 0 R /F279 1814 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> -/XObject << /Im7 2134 0 R >> +/D [2159 0 R /XYZ 114.839 481.057 null] +>> +% 2170 0 obj +<< +/D [2159 0 R /XYZ 99.895 294.895 null] +>> +% 2158 0 obj +<< +/Font << /F84 687 0 R /F75 685 0 R /F233 1044 0 R /F279 1815 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> +/XObject << /Im7 2135 0 R >> /ProcSet [ /PDF /Text ] >> -% 2187 0 obj +% 2188 0 obj << /Type /Page -/Contents 2188 0 R -/Resources 2186 0 R +/Contents 2189 0 R +/Resources 2187 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2116 0 R -/Annots [ 2183 0 R 2184 0 R 2185 0 R ] +/Parent 2117 0 R +/Annots [ 2184 0 R 2185 0 R 2186 0 R ] >> -% 2192 0 obj +% 2193 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133928+01'00') /ModDate (D:20140329133928+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2193 0 obj +% 2194 0 obj << /Type /ExtGState /OPM 1 >> -% 2194 0 obj +% 2195 0 obj << /BaseFont /MCSFLP+FreeSerif -/FontDescriptor 2196 0 R -/ToUnicode 2197 0 R +/FontDescriptor 2197 0 R +/ToUnicode 2198 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 670 0 610 564 0 714 0 385 709 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2195 0 obj +% 2196 0 obj << /BaseFont /AJRCAD+TimesNewRomanPSMT -/FontDescriptor 2198 0 R -/ToUnicode 2199 0 R +/FontDescriptor 2199 0 R +/ToUnicode 2200 0 R /Type /Font /FirstChar 48 /LastChar 57 /Widths [ 500 500 500 500 500 0 0 500 500 500] /Subtype /TrueType >> -% 2196 0 obj +% 2197 0 obj << /Type /FontDescriptor /FontName /MCSFLP+FreeSerif @@ -32777,9 +32844,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2200 0 R +/FontFile2 2201 0 R >> -% 2198 0 obj +% 2199 0 obj << /Type /FontDescriptor /FontName /AJRCAD+TimesNewRomanPSMT @@ -32791,9 +32858,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2201 0 R +/FontFile2 2202 0 R >> -% 2183 0 obj +% 2184 0 obj << /Type /Annot /Subtype /Link @@ -32801,7 +32868,7 @@ stream /Rect [453.687 426.731 460.661 438.791] /A << /S /GoTo /D (figure.5) >> >> -% 2184 0 obj +% 2185 0 obj << /Type /Annot /Subtype /Link @@ -32809,7 +32876,7 @@ stream /Rect [354.541 176.362 361.575 188.421] /A << /S /GoTo /D (figure.8) >> >> -% 2185 0 obj +% 2186 0 obj << /Type /Annot /Subtype /Link @@ -32817,68 +32884,68 @@ stream /Rect [487.118 128.475 494.142 140.535] /A << /S /GoTo /D (algocf.2) >> >> -% 2189 0 obj -<< -/D [2187 0 R /XYZ 149.705 753.953 null] ->> % 2190 0 obj << -/D [2187 0 R /XYZ 447.542 464.41 null] +/D [2188 0 R /XYZ 149.705 753.953 null] >> % 2191 0 obj << -/D [2187 0 R /XYZ 150.705 211.214 null] +/D [2188 0 R /XYZ 447.542 464.41 null] >> -% 2186 0 obj +% 2192 0 obj +<< +/D [2188 0 R /XYZ 150.705 211.214 null] +>> +% 2187 0 obj << -/Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R /F233 1044 0 R /F279 1814 0 R /F148 1490 0 R /F190 941 0 R /F75 685 0 R >> -/XObject << /Im8 2182 0 R >> +/Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R /F233 1044 0 R /F279 1815 0 R /F148 1490 0 R /F190 941 0 R /F75 685 0 R >> +/XObject << /Im8 2183 0 R >> /ProcSet [ /PDF /Text ] >> -% 2207 0 obj +% 2208 0 obj << /Type /Page -/Contents 2208 0 R -/Resources 2206 0 R +/Contents 2209 0 R +/Resources 2207 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2212 0 R -/Annots [ 2205 0 R ] +/Parent 2213 0 R +/Annots [ 2206 0 R ] >> -% 2213 0 obj +% 2214 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133927+01'00') /ModDate (D:20140329133927+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2214 0 obj +% 2215 0 obj << /Type /ExtGState /OPM 1 >> -% 2215 0 obj +% 2216 0 obj << /BaseFont /BNRUAU+TimesNewRomanPSMT -/FontDescriptor 2217 0 R -/ToUnicode 2218 0 R +/FontDescriptor 2218 0 R +/ToUnicode 2219 0 R /Type /Font /FirstChar 45 /LastChar 55 /Widths [ 333 0 0 500 500 500 0 0 0 0 500] /Subtype /TrueType >> -% 2216 0 obj +% 2217 0 obj << /BaseFont /ICFUKB+FreeSerif -/FontDescriptor 2219 0 R -/ToUnicode 2220 0 R +/FontDescriptor 2220 0 R +/ToUnicode 2221 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 0 0 610 564 0 0 0 0 0 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2217 0 obj +% 2218 0 obj << /Type /FontDescriptor /FontName /BNRUAU+TimesNewRomanPSMT @@ -32890,9 +32957,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2221 0 R +/FontFile2 2222 0 R >> -% 2219 0 obj +% 2220 0 obj << /Type /FontDescriptor /FontName /ICFUKB+FreeSerif @@ -32904,9 +32971,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2222 0 R +/FontFile2 2223 0 R >> -% 2205 0 obj +% 2206 0 obj << /Type /Annot /Subtype /Link @@ -32914,76 +32981,76 @@ stream /Rect [371.292 537.01 378.265 549.069] /A << /S /GoTo /D (figure.5) >> >> -% 2209 0 obj +% 2210 0 obj << -/D [2207 0 R /XYZ 98.895 753.953 null] +/D [2208 0 R /XYZ 98.895 753.953 null] >> -% 2202 0 obj +% 2203 0 obj << -/D [2207 0 R /XYZ 396.732 574.688 null] +/D [2208 0 R /XYZ 396.732 574.688 null] >> -% 2210 0 obj +% 2211 0 obj << -/D [2207 0 R /XYZ 99.895 526.012 null] +/D [2208 0 R /XYZ 99.895 526.012 null] >> -% 2203 0 obj +% 2204 0 obj << -/D [2207 0 R /XYZ 114.839 383.469 null] +/D [2208 0 R /XYZ 114.839 383.469 null] >> -% 2211 0 obj +% 2212 0 obj << -/D [2207 0 R /XYZ 99.895 187.185 null] +/D [2208 0 R /XYZ 99.895 187.185 null] >> -% 2206 0 obj +% 2207 0 obj << -/Font << /F84 687 0 R /F145 940 0 R /F233 1044 0 R /F75 685 0 R /F279 1814 0 R >> -/XObject << /Im9 2204 0 R >> +/Font << /F84 687 0 R /F145 940 0 R /F233 1044 0 R /F75 685 0 R /F279 1815 0 R >> +/XObject << /Im9 2205 0 R >> /ProcSet [ /PDF /Text ] >> -% 2226 0 obj +% 2227 0 obj << /Type /Page -/Contents 2227 0 R -/Resources 2225 0 R +/Contents 2228 0 R +/Resources 2226 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2212 0 R -/Annots [ 2224 0 R ] +/Parent 2213 0 R +/Annots [ 2225 0 R ] >> -% 2230 0 obj +% 2231 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133928+01'00') /ModDate (D:20140329133928+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2231 0 obj +% 2232 0 obj << /Type /ExtGState /OPM 1 >> -% 2233 0 obj +% 2234 0 obj << /BaseFont /PBIKKX+TimesNewRomanPSMT -/FontDescriptor 2235 0 R -/ToUnicode 2236 0 R +/FontDescriptor 2236 0 R +/ToUnicode 2237 0 R /Type /Font /FirstChar 45 /LastChar 55 /Widths [ 333 0 0 500 500 0 500 500 500 500 500] /Subtype /TrueType >> -% 2234 0 obj +% 2235 0 obj << /BaseFont /ZBHFTP+FreeSerif -/FontDescriptor 2237 0 R -/ToUnicode 2238 0 R +/FontDescriptor 2238 0 R +/ToUnicode 2239 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 670 0 610 564 0 714 0 0 709 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2235 0 obj +% 2236 0 obj << /Type /FontDescriptor /FontName /PBIKKX+TimesNewRomanPSMT @@ -32995,9 +33062,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2239 0 R +/FontFile2 2240 0 R >> -% 2237 0 obj +% 2238 0 obj << /Type /FontDescriptor /FontName /ZBHFTP+FreeSerif @@ -33009,9 +33076,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2240 0 R +/FontFile2 2241 0 R >> -% 2224 0 obj +% 2225 0 obj << /Type /Annot /Subtype /Link @@ -33019,226 +33086,222 @@ stream /Rect [440.392 344.666 447.366 356.726] /A << /S /GoTo /D (figure.5) >> >> -% 2228 0 obj +% 2229 0 obj << -/D [2226 0 R /XYZ 149.705 753.953 null] +/D [2227 0 R /XYZ 149.705 753.953 null] >> -% 2229 0 obj +% 2230 0 obj << -/D [2226 0 R /XYZ 447.542 382.345 null] +/D [2227 0 R /XYZ 447.542 382.345 null] >> -% 2225 0 obj +% 2226 0 obj << -/Font << /F84 687 0 R /F145 940 0 R /F78 686 0 R /F75 685 0 R /F192 942 0 R /F233 1044 0 R /F279 1814 0 R >> -/XObject << /Im10 2223 0 R >> +/Font << /F84 687 0 R /F145 940 0 R /F78 686 0 R /F75 685 0 R /F192 942 0 R /F233 1044 0 R /F279 1815 0 R >> +/XObject << /Im10 2224 0 R >> /ProcSet [ /PDF /Text ] >> -% 2242 0 obj +% 2243 0 obj << /Type /Page -/Contents 2243 0 R -/Resources 2241 0 R +/Contents 2244 0 R +/Resources 2242 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2212 0 R +/Parent 2213 0 R >> -% 2244 0 obj +% 2245 0 obj << -/D [2242 0 R /XYZ 98.895 753.953 null] +/D [2243 0 R /XYZ 98.895 753.953 null] >> -% 2241 0 obj +% 2242 0 obj << /Font << /F233 1044 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2246 0 obj +% 2247 0 obj << /Type /Page -/Contents 2247 0 R -/Resources 2245 0 R +/Contents 2248 0 R +/Resources 2246 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2212 0 R +/Parent 2213 0 R >> -% 2248 0 obj +% 2249 0 obj << -/D [2246 0 R /XYZ 149.705 753.953 null] +/D [2247 0 R /XYZ 149.705 753.953 null] >> % 614 0 obj << -/D [2246 0 R /XYZ 150.705 716.092 null] +/D [2247 0 R /XYZ 150.705 716.092 null] >> -% 2245 0 obj +% 2246 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F233 1044 0 R /F145 940 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2250 0 obj +% 2251 0 obj << /Type /Page -/Contents 2251 0 R -/Resources 2249 0 R +/Contents 2252 0 R +/Resources 2250 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2212 0 R +/Parent 2213 0 R >> -% 2252 0 obj +% 2253 0 obj << -/D [2250 0 R /XYZ 98.895 753.953 null] +/D [2251 0 R /XYZ 98.895 753.953 null] >> % 618 0 obj << -/D [2250 0 R /XYZ 99.895 554.06 null] +/D [2251 0 R /XYZ 99.895 554.06 null] >> % 622 0 obj << -/D [2250 0 R /XYZ 99.895 527.944 null] +/D [2251 0 R /XYZ 99.895 527.944 null] >> -% 2253 0 obj +% 2254 0 obj << -/D [2250 0 R /XYZ 99.895 315.727 null] +/D [2251 0 R /XYZ 99.895 315.727 null] >> % 626 0 obj << -/D [2250 0 R /XYZ 99.895 284.171 null] +/D [2251 0 R /XYZ 99.895 284.171 null] >> -% 2249 0 obj +% 2250 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2255 0 obj +% 2256 0 obj << /Type /Page -/Contents 2256 0 R -/Resources 2254 0 R +/Contents 2257 0 R +/Resources 2255 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2212 0 R +/Parent 2213 0 R >> -% 2257 0 obj +% 2258 0 obj << -/D [2255 0 R /XYZ 149.705 753.953 null] +/D [2256 0 R /XYZ 149.705 753.953 null] >> % 630 0 obj << -/D [2255 0 R /XYZ 150.705 720.077 null] +/D [2256 0 R /XYZ 150.705 720.077 null] >> % 634 0 obj << -/D [2255 0 R /XYZ 150.705 633.991 null] +/D [2256 0 R /XYZ 150.705 633.991 null] >> % 638 0 obj << -/D [2255 0 R /XYZ 150.705 559.861 null] +/D [2256 0 R /XYZ 150.705 559.861 null] >> % 642 0 obj << -/D [2255 0 R /XYZ 150.705 485.732 null] +/D [2256 0 R /XYZ 150.705 485.732 null] >> % 646 0 obj << -/D [2255 0 R /XYZ 150.705 411.602 null] +/D [2256 0 R /XYZ 150.705 411.602 null] >> % 650 0 obj << -/D [2255 0 R /XYZ 150.705 325.516 null] +/D [2256 0 R /XYZ 150.705 325.516 null] >> % 654 0 obj << -/D [2255 0 R /XYZ 150.705 251.386 null] +/D [2256 0 R /XYZ 150.705 251.386 null] >> % 658 0 obj << -/D [2255 0 R /XYZ 150.705 177.256 null] +/D [2256 0 R /XYZ 150.705 177.256 null] >> -% 2254 0 obj +% 2255 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2259 0 obj +% 2260 0 obj << /Type /Page -/Contents 2260 0 R -/Resources 2258 0 R +/Contents 2261 0 R +/Resources 2259 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2262 0 R +/Parent 2263 0 R >> -% 2261 0 obj +% 2262 0 obj << -/D [2259 0 R /XYZ 98.895 753.953 null] +/D [2260 0 R /XYZ 98.895 753.953 null] >> % 662 0 obj << -/D [2259 0 R /XYZ 99.895 720.077 null] +/D [2260 0 R /XYZ 99.895 720.077 null] >> % 666 0 obj << -/D [2259 0 R /XYZ 99.895 650.062 null] +/D [2260 0 R /XYZ 99.895 650.062 null] >> % 670 0 obj << -/D [2259 0 R /XYZ 99.895 580.047 null] +/D [2260 0 R /XYZ 99.895 580.047 null] >> % 674 0 obj << -/D [2259 0 R /XYZ 99.895 510.033 null] +/D [2260 0 R /XYZ 99.895 510.033 null] >> -% 2258 0 obj +% 2259 0 obj << /Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2264 0 obj +% 2265 0 obj << /Type /Page -/Contents 2265 0 R -/Resources 2263 0 R +/Contents 2266 0 R +/Resources 2264 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2262 0 R +/Parent 2263 0 R >> -% 2266 0 obj +% 2267 0 obj << -/D [2264 0 R /XYZ 149.705 753.953 null] +/D [2265 0 R /XYZ 149.705 753.953 null] >> -% 2263 0 obj +% 2264 0 obj << /Font << /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2268 0 obj +% 2269 0 obj << /Type /Page -/Contents 2269 0 R -/Resources 2267 0 R +/Contents 2270 0 R +/Resources 2268 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2262 0 R ->> -% 2270 0 obj -<< -/D [2268 0 R /XYZ 98.895 753.953 null] +/Parent 2263 0 R >> % 2271 0 obj << -/D [2268 0 R /XYZ 99.895 723.717 null] +/D [2269 0 R /XYZ 98.895 753.953 null] >> % 2272 0 obj << -/D [2268 0 R /XYZ 99.895 698.792 null] +/D [2269 0 R /XYZ 99.895 723.717 null] >> -% 2013 0 obj +% 2273 0 obj << -/D [2268 0 R /XYZ 99.895 638.64 null] +/D [2269 0 R /XYZ 99.895 698.792 null] >> -% 958 0 obj +% 2014 0 obj << -/D [2268 0 R /XYZ 99.895 595.644 null] +/D [2269 0 R /XYZ 99.895 638.64 null] >> -% 957 0 obj +% 958 0 obj << -/D [2268 0 R /XYZ 99.895 538.043 null] +/D [2269 0 R /XYZ 99.895 595.644 null] >> endstream endobj -2278 0 obj +2279 0 obj << /Length 6164 >> @@ -33301,7 +33364,7 @@ ET endstream endobj -2296 0 obj +2297 0 obj << /Length1 1383 /Length2 5908 @@ -33372,7 +33435,7 @@ W ň6S&Şĺ_!“˝SÎ|esU›FĚR™y† ˘Y‹Ąýžď­§N endstream endobj -2298 0 obj +2299 0 obj << /Length1 1956 /Length2 7144 @@ -33489,7 +33552,7 @@ _g\e+J`ÚĽu F˝Aa´´˙.P’gvźţěÇaósl řŻZBh·ő´gćÇ –Wµ Ű-‹BѶ”N°ŠÜhú`˨[ÉW÷jßí)q(µÎăÓĚý÷ÍŚţđ.wYŐć‹$ŢQ¬˙0±€®Ń]Šü endstream endobj -2300 0 obj +2301 0 obj << /Length1 1442 /Length2 6151 @@ -33567,7 +33630,7 @@ n^ r sb˘VŘb)l 2ĹţSŠ„TŁ­H+PMzjÔîëzËiÍfí$ŽDáŚMkV©° Ă?ă\ŮĽÄ>ެßƶaą<ˇČčEEŁÜL˝¦D…Ż6=tŻ–EŇ÷µ€đŕŔ.…(Á%FoÜ~­´ô6€rŤý¦\l•ů;séń'$Öµ…ďß>ž4ąŹ˙r$ď2¨DZý~*®\R ů·Yi$=ޡĄk‡ĺ'ŻÖĺ“™úý.m…6ŻÂ–„tY0’O$đ)şQń’ršČUQ…»+¶ßŞúÔ4(¨«,‡°Qb8¬—mÓ©qý±âŔÁÝHä°=‘ś,YŠ8i  ˙‡˝Ş”SZ6Žöă˝mŘ@»`é7~â"L7\ăąßFdN#FţýHR´K´KHpb40 2ÂÚ~HÇKε֊úřX endstream endobj -2302 0 obj +2303 0 obj << /Length1 1478 /Length2 6403 @@ -33648,7 +33711,7 @@ O GÁ0˙Ńűň˙¦ś˙+B°¸+›ć¸žbĄqGYŔđitâLxRIPv®Ő˝Ť·hÎÄÓÔĄşŇĎ‹^ž˝:nwĺňśŐp5żĐ>^؉RĄŢä}đ4ü¸żŚň™áůŢaŚgül}×^™(©t7aÝÔ &ó˝¶)±ZS«‘ ”ľ8˙n}@f0;­b.ŰŁELě›7†%·ą›3CŞ,ň@ä7ąŐď[I [1sI¬îĹXÚ<Ćü[›fÜŚą¶ÝaŻ:?yşČç3"ču/'Ř\Ödń ÁDÓąÚ=»qUü ęškóÎşůH‚â$ y§ďQ7ĽplŽ*žmhS]ADäŰäřů5Îă˝üĆ«ü‹79µ endstream endobj -2304 0 obj +2305 0 obj << /Length1 1688 /Length2 8444 @@ -33739,7 +33802,7 @@ p bŠ|Ü<dF.ĘÂĂOü¶˝Łć[–ßČÝv°óżö±O¨hgĂy‡Qě®—»ĺ¶ ‘«h›0}¦ŹŞ»˝Üő,ďĺč:Ő(Ń–~¨–Ŕ–’6uüŤ‹ŤmXóR·VĂ<‡­ĐłJVíM\Fw%T6VÍvýŃQnéϨ˙¦:Ď M¤\Ú…Uá-:φ57M}ÎŢ!ăZ‘D ęs‰ ç {$Qű0Ý„nëť®ęÓ Ę(ăN3°Ţ[( ˝¶?™ÓŚoÜî9T˝”ŇućŇ«6nŔu÷đD!qáíZ”ŤŢU›·ÍÜT”!pťÚąVŘžďó‡/…Č\ýh^‡:ń'.AµEőľS‹6P*BËY‹Lź endstream endobj -2306 0 obj +2307 0 obj << /Length1 2571 /Length2 18274 @@ -33929,7 +33992,7 @@ bvT ­¬Ě$LŽ`u\$˙yý îË63rŚa ů*}L¬˙Oţ­Nűšâ°Vz`NÁ~©âÖüËďţD|°Ď!5…çĆkW· ÎďŻËŹĹ[uő 1HÉ6ĹGÍ y‚ŔDĐűW…ÔCż•%‹Ň¸ŹVîŹ96şkś>lLtĆgŃ)d:ă|Ů\Ž,?†ĹŮľ¦d”5·ÖŚ‘ěˇâŘ#2}‰Äń‘«Ă™ >>©™–Ay÷r5dý>>Ç:XqażÓŮ x^ĺJÓ^a”Ő ŔÝ2PAˇ˝Îk@¨APŁíÓ~<˘GÇ€w*ßjRr… (ŢŤbí]4˛2ća´Ť<ˇď‰öŹ‚kdů©#YtuÎdW'*ŐłC+% 9vČ˝âđq endstream endobj -2308 0 obj +2309 0 obj << /Length1 1509 /Length2 2696 @@ -33991,7 +34054,7 @@ currentfile eexec ˘˝›ß˝€eĐ´Ë*›ąˇĹ×KŔËHŞX3.Óg 2L9tžčbMťµ$˙x*Ý™4$R=ĺ Ţ+JUůCwŠe–䡞±…›-%ţe)ťęłÓĽÖ\™MS{Ć•Këžł.ś endstream endobj -2310 0 obj +2311 0 obj << /Length1 2495 /Length2 16116 @@ -34178,7 +34241,7 @@ uÖ‚ }ă´űKç+ŃŕôÎďČL5XáçB´Ć`{PŘžFR/´e¦•{›ůÉţżxěłIf!«ĐŢdĺw!q>)Îż ç«׫ÍélŢV•]$>Řđ€Om•ĹÂť€„”śKé1îy®ďŕ^Ńź= "YkčK‡ÇÉÜgtĽ[1ŕ6eŕ´§p[hNcľ}]Ű#Ü^ŤékNoĘĽm, ±5uى‘yéá<Őnĺ•TAłťt<ÍwŁ&+•5O–y[šě÷N„ţ[ŞP±+J ă$ěiŮŤ/×%”ÖŢHEPBÓaÓŇŕz`~-Âôa+Őʏwi W€´ęÔ=ŢţYÝĂĘ˙%ŕb-ČňĐČSQ­=SVuIwď®–ĄH°¸CŇ8űq—-şŁ ©›¨íWŁť‰R͢ݼ?ÎÎď҉GĽ»g5…Ťáá)Ó9 P9©_öQ‰+Ë[nŇŢđ‘kˇđ#ß%J!ł„zůŽř6:ČLŃiŃ)Yđ´™exR4ëĚ©b&Śťř-Ŕé¸Îäbź©łĎ e’đNćbłx+’ÎÔ‚>ęxró}Ô„%öSx#«ĆóěđáŔĽŕÔ\/¸aĬ1^BIO˙Ě…Ô•x_ĺ<=răÔTi¤ş˝Ôř_ä­[›ÖŤÉ-Wżő…&íŹg!zÂ{N•i×%’3s|彨’66gú಑do–D»ą^-@AćJ–đHSPşHSäŹ[NŤĄ©:ORŘ~Ť\¨·bj–•1 ăćp endstream endobj -2312 0 obj +2313 0 obj << /Length1 1191 /Length2 3225 @@ -34224,7 +34287,7 @@ s; 3B@•Fs5ň® endstream endobj -2314 0 obj +2315 0 obj << /Length1 1188 /Length2 2740 @@ -34273,7 +34336,7 @@ AÖŞ^ 6» f žŃrş^‚7Łö1ë5ajłŕˇAšşŁ¨nWÉ©!µp© cílov®>ŐŞI8©3!ŐÜ/Ş JÝÚ?|iî$dŘ_ěń(°/;Ĺb÷üŇ49Ăď•Ű%XľeĘalĄŘw픋v_ŐĚąűś@dr®Ëp.álä§Ź<çęÉJt~˝źM«÷[نyś ä™ű3ąî[Î{ endstream endobj -2316 0 obj +2317 0 obj << /Length1 1614 /Length2 22531 @@ -34393,7 +34456,7 @@ s ˙K=ö˛ ’á(ŰHfUďÎărŇřľIQ$W0LÇňĹŐµ8ŽĹX‘kŻß‰ôą­JĎMĐz{äPăŔ÷–˘Ô“‹ľ>$ yň§ŃéÚ"Éjrş˝ľ‹XfŻyÓLEśtnÖy“ÉŽś‰ö•Q]Ex.ň˘B‚…;®ú[„çđĂ‚XánÍUîOýĹ›1Nd É¸&÷ďÎŚţ endstream endobj -2318 0 obj +2319 0 obj << /Length1 1616 /Length2 24418 @@ -34518,7 +34581,7 @@ c51 AĚř2C0Ż5§Śń¸űoÔ]}‰I(&*㤠˝;Ă@ar˝’§×@ ž\-@ó…Ô|†5JľĎZ¬¬ŇżÖTŰĆ⼠.áçŤ1ĺT–€"aőJk:‘ąbÄ–D»| endstream endobj -2320 0 obj +2321 0 obj << /Length1 1620 /Length2 18334 @@ -34627,7 +34690,7 @@ GÉ˝ Ďż([‘ç[·ş tźz|' ŤoŇUc×yrHŻ+ÍÝ(m§‚ 8Áýµ$#%Ľ°˘űŐ endstream endobj -2322 0 obj +2323 0 obj << /Length 1007 >> @@ -34697,7 +34760,7 @@ end endstream endobj -2323 0 obj +2324 0 obj << /Length 1577 >> @@ -34812,7 +34875,7 @@ end endstream endobj -2324 0 obj +2325 0 obj << /Length 1535 >> @@ -34918,7 +34981,7 @@ end endstream endobj -2325 0 obj +2326 0 obj << /Length 1724 >> @@ -35041,7 +35104,7 @@ end endstream endobj -2326 0 obj +2327 0 obj << /Length 2050 >> @@ -35187,7 +35250,7 @@ end endstream endobj -2327 0 obj +2328 0 obj << /Length 1543 >> @@ -35300,7 +35363,7 @@ end endstream endobj -2328 0 obj +2329 0 obj << /Length 1538 >> @@ -35413,7 +35476,7 @@ end endstream endobj -2329 0 obj +2330 0 obj << /Length 1538 >> @@ -35526,7 +35589,7 @@ end endstream endobj -2330 0 obj +2331 0 obj << /Length 853 >> @@ -35584,7 +35647,7 @@ end endstream endobj -2331 0 obj +2332 0 obj << /Length 1113 >> @@ -35662,7 +35725,7 @@ end endstream endobj -2332 0 obj +2333 0 obj << /Length 1477 >> @@ -35765,7 +35828,7 @@ end endstream endobj -2333 0 obj +2334 0 obj << /Length 1477 >> @@ -35868,7 +35931,7 @@ end endstream endobj -2334 0 obj +2335 0 obj << /Length 1482 >> @@ -35971,153 +36034,157 @@ end endstream endobj -2275 0 obj +2276 0 obj << /Type /ObjStm /N 100 -/First 1011 -/Length 18541 ->> -stream -916 0 917 57 933 114 913 171 914 227 2273 284 909 342 2274 399 2267 457 2277 551 -2279 669 1074 728 945 787 915 845 912 903 908 961 2143 1019 911 1078 2280 1136 910 1195 -2128 1252 2129 1311 2281 1370 2276 1429 2282 1524 2283 1544 2284 1915 2285 2018 2286 2341 2287 2364 -2288 2819 2289 2948 2290 3246 2291 3892 2293 4363 2294 4994 2295 5465 2297 6040 2299 6265 2301 6597 -2303 6841 2305 7112 2307 7460 2309 7966 2311 8200 2313 8674 2315 8906 2317 9137 2319 9616 2321 10192 -2292 10610 1883 11051 1814 11214 1490 11377 942 11538 941 11697 940 11857 1000 12018 1044 12179 1285 12340 -1157 12504 685 12674 687 12864 686 13054 688 13244 894 13357 978 13470 1052 13587 1087 13707 1117 13827 -1158 13947 1205 14067 1244 14187 1300 14307 1351 14427 1400 14547 1457 14667 1492 14787 1534 14907 1577 15027 -1626 15147 1663 15267 1698 15387 1739 15507 1781 15627 1806 15747 1842 15867 1876 15987 1915 16107 1953 16227 -1990 16347 2035 16467 2071 16587 2116 16707 2212 16827 2262 16947 2335 17049 2336 17167 2337 17288 2338 17409 +/First 1009 +/Length 18475 +>> +stream +957 0 916 57 917 114 933 171 913 228 914 284 2274 341 909 399 2275 456 2268 514 +2278 608 2280 726 1074 785 945 844 915 902 912 960 908 1018 2144 1076 911 1135 2281 1193 +910 1252 2129 1309 2130 1368 2282 1427 2277 1486 2283 1581 2284 1601 2285 1972 2286 2075 2287 2398 +2288 2421 2289 2876 2290 3005 2291 3303 2292 3949 2294 4420 2295 5051 2296 5522 2298 6097 2300 6322 +2302 6654 2304 6898 2306 7169 2308 7517 2310 8023 2312 8257 2314 8731 2316 8963 2318 9194 2320 9673 +2322 10249 2293 10667 1884 11108 1815 11271 1490 11434 942 11595 941 11754 940 11914 1000 12075 1044 12236 +1285 12397 1157 12561 685 12731 687 12921 686 13111 688 13301 894 13414 978 13527 1052 13644 1087 13764 +1117 13884 1158 14004 1205 14124 1244 14244 1300 14364 1351 14484 1400 14604 1457 14724 1492 14844 1534 14964 +1577 15084 1626 15204 1663 15324 1698 15444 1739 15564 1782 15684 1807 15804 1843 15924 1877 16044 1916 16164 +1954 16284 1991 16404 2036 16524 2072 16644 2117 16764 2213 16884 2263 17004 2336 17106 2337 17224 2338 17345 +% 957 0 obj +<< +/D [2269 0 R /XYZ 99.895 538.043 null] +>> % 916 0 obj << -/D [2268 0 R /XYZ 99.895 477.792 null] +/D [2269 0 R /XYZ 99.895 477.792 null] >> % 917 0 obj << -/D [2268 0 R /XYZ 99.895 433.422 null] +/D [2269 0 R /XYZ 99.895 433.422 null] >> % 933 0 obj << -/D [2268 0 R /XYZ 99.895 398.456 null] +/D [2269 0 R /XYZ 99.895 398.456 null] >> % 913 0 obj << -/D [2268 0 R /XYZ 99.895 352.81 null] +/D [2269 0 R /XYZ 99.895 352.81 null] >> % 914 0 obj << -/D [2268 0 R /XYZ 99.895 307.164 null] +/D [2269 0 R /XYZ 99.895 307.164 null] >> -% 2273 0 obj +% 2274 0 obj << -/D [2268 0 R /XYZ 99.895 261.519 null] +/D [2269 0 R /XYZ 99.895 261.519 null] >> % 909 0 obj << -/D [2268 0 R /XYZ 99.895 215.873 null] +/D [2269 0 R /XYZ 99.895 215.873 null] >> -% 2274 0 obj +% 2275 0 obj << -/D [2268 0 R /XYZ 99.895 170.895 null] +/D [2269 0 R /XYZ 99.895 170.895 null] >> -% 2267 0 obj +% 2268 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2277 0 obj +% 2278 0 obj << /Type /Page -/Contents 2278 0 R -/Resources 2276 0 R +/Contents 2279 0 R +/Resources 2277 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2262 0 R +/Parent 2263 0 R >> -% 2279 0 obj +% 2280 0 obj << -/D [2277 0 R /XYZ 149.705 753.953 null] +/D [2278 0 R /XYZ 149.705 753.953 null] >> % 1074 0 obj << -/D [2277 0 R /XYZ 150.705 716.092 null] +/D [2278 0 R /XYZ 150.705 716.092 null] >> % 945 0 obj << -/D [2277 0 R /XYZ 150.705 687.379 null] +/D [2278 0 R /XYZ 150.705 687.379 null] >> % 915 0 obj << -/D [2277 0 R /XYZ 150.705 632.184 null] +/D [2278 0 R /XYZ 150.705 632.184 null] >> % 912 0 obj << -/D [2277 0 R /XYZ 150.705 590.403 null] +/D [2278 0 R /XYZ 150.705 590.403 null] >> % 908 0 obj << -/D [2277 0 R /XYZ 150.705 545.192 null] +/D [2278 0 R /XYZ 150.705 545.192 null] >> -% 2143 0 obj +% 2144 0 obj << -/D [2277 0 R /XYZ 150.705 512.037 null] +/D [2278 0 R /XYZ 150.705 512.037 null] >> % 911 0 obj << -/D [2277 0 R /XYZ 150.705 480.156 null] +/D [2278 0 R /XYZ 150.705 480.156 null] >> -% 2280 0 obj +% 2281 0 obj << -/D [2277 0 R /XYZ 150.705 448.276 null] +/D [2278 0 R /XYZ 150.705 448.276 null] >> % 910 0 obj << -/D [2277 0 R /XYZ 150.705 407.09 null] +/D [2278 0 R /XYZ 150.705 407.09 null] >> -% 2128 0 obj +% 2129 0 obj << -/D [2277 0 R /XYZ 150.705 348.649 null] +/D [2278 0 R /XYZ 150.705 348.649 null] >> -% 2129 0 obj +% 2130 0 obj << -/D [2277 0 R /XYZ 150.705 304.874 null] +/D [2278 0 R /XYZ 150.705 304.874 null] >> -% 2281 0 obj +% 2282 0 obj << -/D [2277 0 R /XYZ 150.705 260.978 null] +/D [2278 0 R /XYZ 150.705 260.978 null] >> -% 2276 0 obj +% 2277 0 obj << /Font << /F84 687 0 R /F78 686 0 R /F145 940 0 R >> /ProcSet [ /PDF /Text ] >> -% 2282 0 obj -[1000] % 2283 0 obj -[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] +[1000] % 2284 0 obj -[277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8] +[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] % 2285 0 obj -[831 660 753 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 853 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0 0 0 881 0 0 0 0 0 0 0 0 0 0 0 0 234 0 881 767] +[277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8] % 2286 0 obj -[528 542] +[831 660 753 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 853 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0 0 0 881 0 0 0 0 0 0 0 0 0 0 0 0 234 0 881 767] % 2287 0 obj -[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] +[528 542] % 2288 0 obj -[531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] +[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] % 2289 0 obj -[388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8] +[531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] % 2290 0 obj -[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] +[388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8] % 2291 0 obj +[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] +% 2292 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] -% 2293 0 obj -[605 608 167 380 611 291 313 333 0 333 606 0 667 500 333 287 0 0 0 0 0 0 0 0 0 0 0 0 333 208 250 278 371 500 500 840 778 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 0 0 0 278 500 500 1000 500 500 333 1144 525 331 998 0 0 0 0 0 0 500 500 606 500 1000 333 979 424 331 827 0 0 667 0 278 500 500 500 500 606 500] % 2294 0 obj -[528 545 167 333 556 278 333 333 0 333 606 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 333 250 333 500 500 500 889 778 278 333 333 389 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 500 747 722 611 667 778 611 556 722 778 333 333 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 333 606 333 606 500 278 444 463 407 500 389 278 500 500 278 278 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444] +[605 608 167 380 611 291 313 333 0 333 606 0 667 500 333 287 0 0 0 0 0 0 0 0 0 0 0 0 333 208 250 278 371 500 500 840 778 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 0 0 0 278 500 500 1000 500 500 333 1144 525 331 998 0 0 0 0 0 0 500 500 606 500 1000 333 979 424 331 827 0 0 667 0 278 500 500 500 500 606 500] % 2295 0 obj +[528 545 167 333 556 278 333 333 0 333 606 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 333 250 333 500 500 500 889 778 278 333 333 389 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 500 747 722 611 667 778 611 556 722 778 333 333 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 333 606 333 606 500 278 444 463 407 500 389 278 500 500 278 278 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444] +% 2296 0 obj [611 611 167 333 611 333 333 333 0 333 606 0 667 500 333 333 0 0 0 0 0 0 0 0 0 0 0 0 333 227 250 278 402 500 500 889 833 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 667 722 833 611 556 833 833 389 389 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 606 333 606 500 278 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 310 606 310 606 0 0 0 333 500 500 1000 500 500 333 1000 611 389 1000 0 0 0 0 0 0 500 500 606 500 1000] -% 2297 0 obj +% 2298 0 obj << /Type /FontDescriptor /FontName /MNPEHI+CMEX10 @@ -36130,9 +36197,9 @@ stream /StemV 47 /XHeight 431 /CharSet (/radicalbigg) -/FontFile 2296 0 R +/FontFile 2297 0 R >> -% 2299 0 obj +% 2300 0 obj << /Type /FontDescriptor /FontName /SFGIZH+CMITT10 @@ -36145,9 +36212,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/C/D/E/H/I/K/L/M/P/T/V/a/c/comma/d/e/exclam/f/g/h/hyphen/i/k/m/n/o/p/parenleft/parenright/period/r/s/slash/t/w/x/y) -/FontFile 2298 0 R +/FontFile 2299 0 R >> -% 2301 0 obj +% 2302 0 obj << /Type /FontDescriptor /FontName /TPELEW+CMMI10 @@ -36160,9 +36227,9 @@ stream /StemV 72 /XHeight 431 /CharSet (/arrowhookleft/greater/less) -/FontFile 2300 0 R +/FontFile 2301 0 R >> -% 2303 0 obj +% 2304 0 obj << /Type /FontDescriptor /FontName /SOSTRQ+CMR10 @@ -36175,9 +36242,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/bracketleft/bracketright/equal/parenleft/parenright/plus) -/FontFile 2302 0 R +/FontFile 2303 0 R >> -% 2305 0 obj +% 2306 0 obj << /Type /FontDescriptor /FontName /VKSUEJ+CMSY10 @@ -36190,9 +36257,9 @@ stream /StemV 40 /XHeight 431 /CharSet (/B/H/I/arrowleft/arrowright/asteriskmath/bar/bardbl/braceleft/braceright/element/greaterequal/lessequal/minus/negationslash/radical) -/FontFile 2304 0 R +/FontFile 2305 0 R >> -% 2307 0 obj +% 2308 0 obj << /Type /FontDescriptor /FontName /XIQVGP+CMTT10 @@ -36205,9 +36272,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asciitilde/asterisk/b/backslash/bracketleft/bracketright/c/colon/comma/d/e/equal/f/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotesingle/r/s/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 2306 0 R +/FontFile 2307 0 R >> -% 2309 0 obj +% 2310 0 obj << /Type /FontDescriptor /FontName /KPZRIA+CMTT8 @@ -36220,9 +36287,9 @@ stream /StemV 76 /XHeight 431 /CharSet (/b/c/d/e/i/l/n/p/r/s/t) -/FontFile 2308 0 R +/FontFile 2309 0 R >> -% 2311 0 obj +% 2312 0 obj << /Type /FontDescriptor /FontName /FYMOSO+CMTT9 @@ -36235,9 +36302,9 @@ stream /StemV 74 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/c/colon/comma/d/e/equal/f/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotesingle/r/s/semicolon/six/slash/t/two/u/underscore/v/w/x/y/z/zero) -/FontFile 2310 0 R +/FontFile 2311 0 R >> -% 2313 0 obj +% 2314 0 obj << /Type /FontDescriptor /FontName /ZSBXRF+PazoMath @@ -36250,9 +36317,9 @@ stream /StemV 95 /XHeight 0 /CharSet (/Omega/infinity/summation) -/FontFile 2312 0 R +/FontFile 2313 0 R >> -% 2315 0 obj +% 2316 0 obj << /Type /FontDescriptor /FontName /DUJUUF+PazoMath-Italic @@ -36265,9 +36332,9 @@ stream /StemV 65 /XHeight 0 /CharSet (/alpha/beta) -/FontFile 2314 0 R +/FontFile 2315 0 R >> -% 2317 0 obj +% 2318 0 obj << /Type /FontDescriptor /FontName /BDDEWM+URWPalladioL-Bold @@ -36280,9 +36347,9 @@ stream /StemV 123 /XHeight 471 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/Z/a/b/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2316 0 R +/FontFile 2317 0 R >> -% 2319 0 obj +% 2320 0 obj << /Type /FontDescriptor /FontName /GLTUCO+URWPalladioL-Roma @@ -36295,9 +36362,9 @@ stream /StemV 84 /XHeight 469 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/bracketleft/bracketright/bullet/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/grave/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/section/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2318 0 R +/FontFile 2319 0 R >> -% 2321 0 obj +% 2322 0 obj << /Type /FontDescriptor /FontName /ZZXCQL+URWPalladioL-Ital @@ -36310,453 +36377,453 @@ stream /StemV 78 /XHeight 482 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/f/fi/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/plus/q/quoteright/r/s/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2320 0 R +/FontFile 2321 0 R >> -% 2292 0 obj +% 2293 0 obj << /Type /Encoding /Differences [2/fi/fl 30/grave 38/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 61/equal 63/question 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 147/quotedblleft/quotedblright/bullet/endash/emdash 167/section] >> -% 1883 0 obj +% 1884 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MNPEHI+CMEX10 -/FontDescriptor 2297 0 R +/FontDescriptor 2298 0 R /FirstChar 114 /LastChar 114 -/Widths 2282 0 R -/ToUnicode 2322 0 R +/Widths 2283 0 R +/ToUnicode 2323 0 R >> -% 1814 0 obj +% 1815 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SFGIZH+CMITT10 -/FontDescriptor 2299 0 R +/FontDescriptor 2300 0 R /FirstChar 33 /LastChar 121 -/Widths 2283 0 R -/ToUnicode 2323 0 R +/Widths 2284 0 R +/ToUnicode 2324 0 R >> % 1490 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TPELEW+CMMI10 -/FontDescriptor 2301 0 R +/FontDescriptor 2302 0 R /FirstChar 44 /LastChar 62 -/Widths 2284 0 R -/ToUnicode 2324 0 R +/Widths 2285 0 R +/ToUnicode 2325 0 R >> % 942 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SOSTRQ+CMR10 -/FontDescriptor 2303 0 R +/FontDescriptor 2304 0 R /FirstChar 40 /LastChar 93 -/Widths 2289 0 R -/ToUnicode 2325 0 R +/Widths 2290 0 R +/ToUnicode 2326 0 R >> % 941 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VKSUEJ+CMSY10 -/FontDescriptor 2305 0 R +/FontDescriptor 2306 0 R /FirstChar 0 /LastChar 112 -/Widths 2290 0 R -/ToUnicode 2326 0 R +/Widths 2291 0 R +/ToUnicode 2327 0 R >> % 940 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XIQVGP+CMTT10 -/FontDescriptor 2307 0 R +/FontDescriptor 2308 0 R /FirstChar 13 /LastChar 126 -/Widths 2291 0 R -/ToUnicode 2327 0 R +/Widths 2292 0 R +/ToUnicode 2328 0 R >> % 1000 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KPZRIA+CMTT8 -/FontDescriptor 2309 0 R +/FontDescriptor 2310 0 R /FirstChar 98 /LastChar 116 -/Widths 2288 0 R -/ToUnicode 2328 0 R +/Widths 2289 0 R +/ToUnicode 2329 0 R >> % 1044 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FYMOSO+CMTT9 -/FontDescriptor 2311 0 R +/FontDescriptor 2312 0 R /FirstChar 13 /LastChar 122 -/Widths 2287 0 R -/ToUnicode 2329 0 R +/Widths 2288 0 R +/ToUnicode 2330 0 R >> % 1285 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZSBXRF+PazoMath -/FontDescriptor 2313 0 R +/FontDescriptor 2314 0 R /FirstChar 87 /LastChar 229 -/Widths 2285 0 R -/ToUnicode 2330 0 R +/Widths 2286 0 R +/ToUnicode 2331 0 R >> % 1157 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DUJUUF+PazoMath-Italic -/FontDescriptor 2315 0 R +/FontDescriptor 2316 0 R /FirstChar 97 /LastChar 98 -/Widths 2286 0 R -/ToUnicode 2331 0 R +/Widths 2287 0 R +/ToUnicode 2332 0 R >> % 685 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BDDEWM+URWPalladioL-Bold -/FontDescriptor 2317 0 R +/FontDescriptor 2318 0 R /FirstChar 2 /LastChar 151 -/Widths 2295 0 R -/Encoding 2292 0 R -/ToUnicode 2332 0 R +/Widths 2296 0 R +/Encoding 2293 0 R +/ToUnicode 2333 0 R >> % 687 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GLTUCO+URWPalladioL-Roma -/FontDescriptor 2319 0 R +/FontDescriptor 2320 0 R /FirstChar 2 /LastChar 167 -/Widths 2293 0 R -/Encoding 2292 0 R -/ToUnicode 2333 0 R +/Widths 2294 0 R +/Encoding 2293 0 R +/ToUnicode 2334 0 R >> % 686 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZZXCQL+URWPalladioL-Ital -/FontDescriptor 2321 0 R +/FontDescriptor 2322 0 R /FirstChar 2 /LastChar 122 -/Widths 2294 0 R -/Encoding 2292 0 R -/ToUnicode 2334 0 R +/Widths 2295 0 R +/Encoding 2293 0 R +/ToUnicode 2335 0 R >> % 688 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [678 0 R 691 0 R 737 0 R 793 0 R 841 0 R 884 0 R] >> % 894 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [892 0 R 906 0 R 924 0 R 937 0 R 950 0 R 962 0 R] >> % 978 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [967 0 R 982 0 R 1003 0 R 1014 0 R 1022 0 R 1033 0 R] >> % 1052 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1049 0 R 1054 0 R 1058 0 R 1063 0 R 1070 0 R 1078 0 R] >> % 1087 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1083 0 R 1089 0 R 1093 0 R 1097 0 R 1103 0 R 1107 0 R] >> % 1117 0 obj << /Type /Pages /Count 6 -/Parent 2335 0 R +/Parent 2336 0 R /Kids [1113 0 R 1120 0 R 1126 0 R 1133 0 R 1139 0 R 1143 0 R] >> % 1158 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1154 0 R 1162 0 R 1172 0 R 1178 0 R 1189 0 R 1194 0 R] >> % 1205 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1201 0 R 1207 0 R 1215 0 R 1223 0 R 1228 0 R 1236 0 R] >> % 1244 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1241 0 R 1249 0 R 1254 0 R 1267 0 R 1274 0 R 1282 0 R] >> % 1300 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1293 0 R 1309 0 R 1315 0 R 1326 0 R 1332 0 R 1343 0 R] >> % 1351 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1348 0 R 1360 0 R 1365 0 R 1374 0 R 1380 0 R 1389 0 R] >> % 1400 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2337 0 R /Kids [1396 0 R 1410 0 R 1417 0 R 1426 0 R 1434 0 R 1438 0 R] >> % 1457 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R +/Parent 2338 0 R /Kids [1453 0 R 1459 0 R 1465 0 R 1472 0 R 1476 0 R 1481 0 R] >> % 1492 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R +/Parent 2338 0 R /Kids [1487 0 R 1494 0 R 1505 0 R 1510 0 R 1519 0 R 1526 0 R] >> % 1534 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R +/Parent 2338 0 R /Kids [1531 0 R 1538 0 R 1542 0 R 1550 0 R 1555 0 R 1563 0 R] >> % 1577 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R +/Parent 2338 0 R /Kids [1569 0 R 1579 0 R 1592 0 R 1596 0 R 1609 0 R 1616 0 R] >> % 1626 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R +/Parent 2338 0 R /Kids [1623 0 R 1628 0 R 1635 0 R 1639 0 R 1648 0 R 1656 0 R] >> % 1663 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R +/Parent 2338 0 R /Kids [1660 0 R 1666 0 R 1670 0 R 1677 0 R 1682 0 R 1688 0 R] >> % 1698 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R +/Parent 2339 0 R /Kids [1694 0 R 1701 0 R 1707 0 R 1714 0 R 1722 0 R 1726 0 R] >> % 1739 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1736 0 R 1741 0 R 1745 0 R 1759 0 R 1763 0 R 1769 0 R] ->> -% 1781 0 obj -<< -/Type /Pages -/Count 6 -/Parent 2338 0 R -/Kids [1775 0 R 1783 0 R 1787 0 R 1791 0 R 1795 0 R 1799 0 R] +/Parent 2339 0 R +/Kids [1736 0 R 1741 0 R 1745 0 R 1760 0 R 1764 0 R 1770 0 R] >> -% 1806 0 obj +% 1782 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1803 0 R 1808 0 R 1816 0 R 1820 0 R 1828 0 R 1832 0 R] +/Parent 2339 0 R +/Kids [1776 0 R 1784 0 R 1788 0 R 1792 0 R 1796 0 R 1800 0 R] >> -% 1842 0 obj +% 1807 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1839 0 R 1844 0 R 1851 0 R 1855 0 R 1862 0 R 1866 0 R] +/Parent 2339 0 R +/Kids [1804 0 R 1809 0 R 1817 0 R 1821 0 R 1829 0 R 1833 0 R] >> -% 1876 0 obj +% 1843 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1873 0 R 1878 0 R 1888 0 R 1893 0 R 1900 0 R 1906 0 R] +/Parent 2339 0 R +/Kids [1840 0 R 1845 0 R 1852 0 R 1856 0 R 1863 0 R 1867 0 R] >> -% 1915 0 obj +% 1877 0 obj << /Type /Pages /Count 6 /Parent 2339 0 R -/Kids [1910 0 R 1917 0 R 1923 0 R 1929 0 R 1935 0 R 1941 0 R] +/Kids [1874 0 R 1879 0 R 1889 0 R 1894 0 R 1901 0 R 1907 0 R] >> -% 1953 0 obj +% 1916 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [1948 0 R 1956 0 R 1963 0 R 1970 0 R 1977 0 R 1983 0 R] +/Parent 2340 0 R +/Kids [1911 0 R 1918 0 R 1924 0 R 1930 0 R 1936 0 R 1942 0 R] >> -% 1990 0 obj +% 1954 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [1987 0 R 1995 0 R 2006 0 R 2010 0 R 2019 0 R 2023 0 R] +/Parent 2340 0 R +/Kids [1949 0 R 1957 0 R 1964 0 R 1971 0 R 1978 0 R 1984 0 R] >> -% 2035 0 obj +% 1991 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [2032 0 R 2038 0 R 2042 0 R 2049 0 R 2057 0 R 2064 0 R] +/Parent 2340 0 R +/Kids [1988 0 R 1996 0 R 2007 0 R 2011 0 R 2020 0 R 2024 0 R] >> -% 2071 0 obj +% 2036 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [2068 0 R 2076 0 R 2087 0 R 2092 0 R 2100 0 R 2109 0 R] +/Parent 2340 0 R +/Kids [2033 0 R 2039 0 R 2043 0 R 2050 0 R 2058 0 R 2065 0 R] >> -% 2116 0 obj +% 2072 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [2113 0 R 2124 0 R 2138 0 R 2147 0 R 2158 0 R 2187 0 R] +/Parent 2340 0 R +/Kids [2069 0 R 2077 0 R 2088 0 R 2093 0 R 2101 0 R 2110 0 R] >> -% 2212 0 obj +% 2117 0 obj << /Type /Pages /Count 6 /Parent 2340 0 R -/Kids [2207 0 R 2226 0 R 2242 0 R 2246 0 R 2250 0 R 2255 0 R] +/Kids [2114 0 R 2125 0 R 2139 0 R 2148 0 R 2159 0 R 2188 0 R] >> -% 2262 0 obj +% 2213 0 obj << /Type /Pages -/Count 4 -/Parent 2340 0 R -/Kids [2259 0 R 2264 0 R 2268 0 R 2277 0 R] +/Count 6 +/Parent 2341 0 R +/Kids [2208 0 R 2227 0 R 2243 0 R 2247 0 R 2251 0 R 2256 0 R] >> -% 2335 0 obj +% 2263 0 obj << /Type /Pages -/Count 36 +/Count 4 /Parent 2341 0 R -/Kids [688 0 R 894 0 R 978 0 R 1052 0 R 1087 0 R 1117 0 R] +/Kids [2260 0 R 2265 0 R 2269 0 R 2278 0 R] >> % 2336 0 obj << /Type /Pages /Count 36 -/Parent 2341 0 R -/Kids [1158 0 R 1205 0 R 1244 0 R 1300 0 R 1351 0 R 1400 0 R] +/Parent 2342 0 R +/Kids [688 0 R 894 0 R 978 0 R 1052 0 R 1087 0 R 1117 0 R] >> % 2337 0 obj << /Type /Pages /Count 36 -/Parent 2341 0 R -/Kids [1457 0 R 1492 0 R 1534 0 R 1577 0 R 1626 0 R 1663 0 R] +/Parent 2342 0 R +/Kids [1158 0 R 1205 0 R 1244 0 R 1300 0 R 1351 0 R 1400 0 R] >> % 2338 0 obj << /Type /Pages /Count 36 -/Parent 2341 0 R -/Kids [1698 0 R 1739 0 R 1781 0 R 1806 0 R 1842 0 R 1876 0 R] +/Parent 2342 0 R +/Kids [1457 0 R 1492 0 R 1534 0 R 1577 0 R 1626 0 R 1663 0 R] >> endstream endobj -2342 0 obj +2343 0 obj << /Type /ObjStm /N 100 -/First 890 -/Length 9788 ->> -stream -2339 0 2340 121 2341 206 2343 311 675 380 671 454 667 542 663 630 659 718 655 806 -651 894 647 982 643 1070 639 1158 635 1246 631 1334 627 1422 623 1510 619 1584 615 1696 -611 1770 607 1858 602 1946 598 2020 594 2145 590 2219 586 2293 582 2418 578 2492 574 2580 -570 2668 566 2756 562 2844 558 2932 554 3020 550 3108 546 3182 542 3307 538 3381 534 3469 -530 3557 526 3645 522 3733 518 3807 514 3932 510 4006 506 4094 502 4182 498 4256 494 4381 -490 4455 486 4543 482 4631 478 4719 474 4807 470 4895 466 4983 462 5071 458 5159 454 5247 -450 5335 446 5423 442 5511 438 5599 434 5687 430 5775 426 5849 422 5975 418 6049 414 6137 -410 6225 406 6313 401 6401 397 6489 393 6577 389 6665 385 6753 381 6841 377 6929 373 7017 -369 7105 365 7193 361 7281 357 7369 353 7457 349 7545 345 7633 341 7721 337 7809 333 7897 -329 7985 325 8073 321 8161 317 8249 313 8323 309 8449 305 8523 301 8611 297 8699 293 8773 +/First 892 +/Length 9786 +>> +stream +2339 0 2340 121 2341 242 2342 327 2344 432 675 501 671 575 667 663 663 751 659 839 +655 927 651 1015 647 1103 643 1191 639 1279 635 1367 631 1455 627 1543 623 1631 619 1705 +615 1817 611 1891 607 1979 602 2067 598 2141 594 2266 590 2340 586 2414 582 2539 578 2613 +574 2701 570 2789 566 2877 562 2965 558 3053 554 3141 550 3229 546 3303 542 3428 538 3502 +534 3590 530 3678 526 3766 522 3854 518 3928 514 4053 510 4127 506 4215 502 4303 498 4377 +494 4502 490 4576 486 4664 482 4752 478 4840 474 4928 470 5016 466 5104 462 5192 458 5280 +454 5368 450 5456 446 5544 442 5632 438 5720 434 5808 430 5896 426 5970 422 6096 418 6170 +414 6258 410 6346 406 6434 401 6522 397 6610 393 6698 389 6786 385 6874 381 6962 377 7050 +373 7138 369 7226 365 7314 361 7402 357 7490 353 7578 349 7666 345 7754 341 7842 337 7930 +333 8018 329 8106 325 8194 321 8282 317 8370 313 8444 309 8570 305 8644 301 8732 297 8820 % 2339 0 obj << /Type /Pages /Count 36 -/Parent 2341 0 R -/Kids [1915 0 R 1953 0 R 1990 0 R 2035 0 R 2071 0 R 2116 0 R] +/Parent 2342 0 R +/Kids [1698 0 R 1739 0 R 1782 0 R 1807 0 R 1843 0 R 1877 0 R] >> % 2340 0 obj << /Type /Pages -/Count 10 -/Parent 2341 0 R -/Kids [2212 0 R 2262 0 R] +/Count 36 +/Parent 2342 0 R +/Kids [1916 0 R 1954 0 R 1991 0 R 2036 0 R 2072 0 R 2117 0 R] >> % 2341 0 obj << /Type /Pages +/Count 10 +/Parent 2342 0 R +/Kids [2213 0 R 2263 0 R] +>> +% 2342 0 obj +<< +/Type /Pages /Count 190 -/Kids [2335 0 R 2336 0 R 2337 0 R 2338 0 R 2339 0 R 2340 0 R] +/Kids [2336 0 R 2337 0 R 2338 0 R 2339 0 R 2340 0 R 2341 0 R] >> -% 2343 0 obj +% 2344 0 obj << /Type /Outlines /First 4 0 R @@ -37528,6 +37595,27 @@ stream /Parent 293 0 R /Next 301 0 R >> + +endstream +endobj +2345 0 obj +<< +/Type /ObjStm +/N 100 +/First 893 +/Length 11990 +>> +stream +293 0 289 125 285 199 281 287 277 375 273 463 269 551 265 639 261 727 257 815 +253 903 249 991 245 1079 241 1167 237 1255 233 1343 229 1431 225 1505 221 1630 217 1703 +213 1790 209 1864 205 1952 200 2040 196 2128 192 2216 188 2290 184 2416 180 2490 176 2578 +172 2666 168 2754 164 2842 160 2930 156 3018 152 3106 148 3194 144 3282 140 3370 136 3458 +132 3546 128 3634 124 3722 120 3810 116 3898 112 3986 108 4060 104 4186 100 4259 96 4344 +92 4427 88 4509 84 4591 80 4673 76 4755 72 4837 68 4919 64 5001 60 5083 56 5165 +52 5247 48 5329 44 5398 40 5507 36 5627 32 5696 28 5752 24 5871 20 5953 16 6022 +12 6140 8 6220 4 6285 2346 6378 2347 6574 2348 6747 2349 6927 2350 7104 2351 7281 2352 7461 +2353 7639 2354 7819 2355 7997 2356 8177 2357 8352 2358 8517 2359 8688 2360 8858 2361 9030 2362 9200 +2363 9372 2364 9541 2365 9710 2366 9882 2367 10052 2368 10224 2369 10394 2370 10566 2371 10736 2372 10908 % 293 0 obj << /Title 294 0 R @@ -37539,27 +37627,6 @@ stream /Last 309 0 R /Count -4 >> - -endstream -endobj -2344 0 obj -<< -/Type /ObjStm -/N 100 -/First 893 -/Length 12099 ->> -stream -289 0 285 74 281 162 277 250 273 338 269 426 265 514 261 602 257 690 253 778 -249 866 245 954 241 1042 237 1130 233 1218 229 1306 225 1380 221 1505 217 1578 213 1665 -209 1739 205 1827 200 1915 196 2003 192 2091 188 2165 184 2291 180 2365 176 2453 172 2541 -168 2629 164 2717 160 2805 156 2893 152 2981 148 3069 144 3157 140 3245 136 3333 132 3421 -128 3509 124 3597 120 3685 116 3773 112 3861 108 3935 104 4061 100 4134 96 4219 92 4302 -88 4384 84 4466 80 4548 76 4630 72 4712 68 4794 64 4876 60 4958 56 5040 52 5122 -48 5204 44 5273 40 5382 36 5502 32 5571 28 5627 24 5746 20 5828 16 5897 12 6015 -8 6095 4 6160 2345 6253 2346 6449 2347 6622 2348 6802 2349 6979 2350 7156 2351 7336 2352 7514 -2353 7694 2354 7872 2355 8052 2356 8225 2357 8390 2358 8562 2359 8732 2360 8904 2361 9073 2362 9242 -2363 9414 2364 9584 2365 9756 2366 9926 2367 10098 2368 10268 2369 10440 2370 10610 2371 10782 2372 10974 % 289 0 obj << /Title 290 0 R @@ -38138,150 +38205,145 @@ stream << /Title 5 0 R /A 1 0 R -/Parent 2343 0 R +/Parent 2344 0 R /First 8 0 R /Last 619 0 R /Count -14 >> -% 2345 0 obj +% 2346 0 obj << -/Names [(Doc-Start) 684 0 R (Hfootnote.1) 943 0 R (Hfootnote.2) 944 0 R (Hfootnote.3) 999 0 R (Hfootnote.4) 1998 0 R (Hfootnote.5) 2082 0 R] +/Names [(Doc-Start) 684 0 R (Hfootnote.1) 943 0 R (Hfootnote.2) 944 0 R (Hfootnote.3) 999 0 R (Hfootnote.4) 1999 0 R (Hfootnote.5) 2083 0 R] /Limits [(Doc-Start) (Hfootnote.5)] >> -% 2346 0 obj +% 2347 0 obj << /Names [(Item.1) 970 0 R (Item.10) 986 0 R (Item.100) 1711 0 R (Item.101) 1717 0 R (Item.102) 1718 0 R (Item.103) 1729 0 R] /Limits [(Item.1) (Item.103)] >> -% 2347 0 obj +% 2348 0 obj << /Names [(Item.104) 1730 0 R (Item.105) 1731 0 R (Item.106) 1748 0 R (Item.107) 1749 0 R (Item.108) 1750 0 R (Item.109) 1751 0 R] /Limits [(Item.104) (Item.109)] >> -% 2348 0 obj +% 2349 0 obj << /Names [(Item.11) 987 0 R (Item.110) 1752 0 R (Item.111) 1753 0 R (Item.112) 1754 0 R (Item.113) 1755 0 R (Item.114) 1756 0 R] /Limits [(Item.11) (Item.114)] >> -% 2349 0 obj -<< -/Names [(Item.115) 1757 0 R (Item.116) 1766 0 R (Item.117) 1767 0 R (Item.118) 1772 0 R (Item.119) 1773 0 R (Item.12) 988 0 R] -/Limits [(Item.115) (Item.12)] ->> % 2350 0 obj << -/Names [(Item.120) 1778 0 R (Item.121) 1779 0 R (Item.122) 1780 0 R (Item.123) 1811 0 R (Item.124) 1812 0 R (Item.125) 1813 0 R] -/Limits [(Item.120) (Item.125)] +/Names [(Item.115) 1757 0 R (Item.116) 1758 0 R (Item.117) 1767 0 R (Item.118) 1768 0 R (Item.119) 1773 0 R (Item.12) 988 0 R] +/Limits [(Item.115) (Item.12)] >> % 2351 0 obj << -/Names [(Item.126) 1823 0 R (Item.127) 1824 0 R (Item.128) 1825 0 R (Item.129) 1835 0 R (Item.13) 989 0 R (Item.130) 1836 0 R] -/Limits [(Item.126) (Item.130)] +/Names [(Item.120) 1774 0 R (Item.121) 1779 0 R (Item.122) 1780 0 R (Item.123) 1781 0 R (Item.124) 1812 0 R (Item.125) 1813 0 R] +/Limits [(Item.120) (Item.125)] >> % 2352 0 obj << -/Names [(Item.131) 1837 0 R (Item.132) 1847 0 R (Item.133) 1848 0 R (Item.134) 1849 0 R (Item.135) 1858 0 R (Item.136) 1859 0 R] -/Limits [(Item.131) (Item.136)] +/Names [(Item.126) 1814 0 R (Item.127) 1824 0 R (Item.128) 1825 0 R (Item.129) 1826 0 R (Item.13) 989 0 R (Item.130) 1836 0 R] +/Limits [(Item.126) (Item.130)] >> % 2353 0 obj << -/Names [(Item.137) 1860 0 R (Item.138) 1869 0 R (Item.139) 1870 0 R (Item.14) 990 0 R (Item.140) 1871 0 R (Item.141) 1881 0 R] -/Limits [(Item.137) (Item.141)] +/Names [(Item.131) 1837 0 R (Item.132) 1838 0 R (Item.133) 1848 0 R (Item.134) 1849 0 R (Item.135) 1850 0 R (Item.136) 1859 0 R] +/Limits [(Item.131) (Item.136)] >> % 2354 0 obj << -/Names [(Item.142) 1882 0 R (Item.143) 1884 0 R (Item.144) 1885 0 R (Item.145) 1886 0 R (Item.146) 1891 0 R (Item.147) 1896 0 R] -/Limits [(Item.142) (Item.147)] +/Names [(Item.137) 1860 0 R (Item.138) 1861 0 R (Item.139) 1870 0 R (Item.14) 990 0 R (Item.140) 1871 0 R (Item.141) 1872 0 R] +/Limits [(Item.137) (Item.141)] >> % 2355 0 obj << -/Names [(Item.148) 2151 0 R (Item.149) 2152 0 R (Item.15) 991 0 R (Item.150) 2253 0 R (Item.16) 992 0 R (Item.17) 993 0 R] -/Limits [(Item.148) (Item.17)] +/Names [(Item.142) 1882 0 R (Item.143) 1883 0 R (Item.144) 1885 0 R (Item.145) 1886 0 R (Item.146) 1887 0 R (Item.147) 1892 0 R] +/Limits [(Item.142) (Item.147)] >> % 2356 0 obj << -/Names [(Item.18) 994 0 R (Item.19) 995 0 R (Item.2) 971 0 R (Item.20) 996 0 R (Item.21) 997 0 R (Item.22) 998 0 R] -/Limits [(Item.18) (Item.22)] +/Names [(Item.148) 1897 0 R (Item.149) 2152 0 R (Item.15) 991 0 R (Item.150) 2153 0 R (Item.151) 2254 0 R (Item.16) 992 0 R] +/Limits [(Item.148) (Item.16)] >> % 2357 0 obj << -/Names [(Item.23) 1006 0 R (Item.24) 1007 0 R (Item.25) 1008 0 R (Item.26) 1009 0 R (Item.27) 1010 0 R (Item.28) 1011 0 R] -/Limits [(Item.23) (Item.28)] +/Names [(Item.17) 993 0 R (Item.18) 994 0 R (Item.19) 995 0 R (Item.2) 971 0 R (Item.20) 996 0 R (Item.21) 997 0 R] +/Limits [(Item.17) (Item.21)] >> % 2358 0 obj << -/Names [(Item.29) 1025 0 R (Item.3) 972 0 R (Item.30) 1026 0 R (Item.31) 1027 0 R (Item.32) 1028 0 R (Item.33) 1029 0 R] -/Limits [(Item.29) (Item.33)] +/Names [(Item.22) 998 0 R (Item.23) 1006 0 R (Item.24) 1007 0 R (Item.25) 1008 0 R (Item.26) 1009 0 R (Item.27) 1010 0 R] +/Limits [(Item.22) (Item.27)] >> % 2359 0 obj << -/Names [(Item.34) 1036 0 R (Item.35) 1037 0 R (Item.36) 1038 0 R (Item.37) 1039 0 R (Item.38) 1040 0 R (Item.39) 1041 0 R] -/Limits [(Item.34) (Item.39)] +/Names [(Item.28) 1011 0 R (Item.29) 1025 0 R (Item.3) 972 0 R (Item.30) 1026 0 R (Item.31) 1027 0 R (Item.32) 1028 0 R] +/Limits [(Item.28) (Item.32)] >> % 2360 0 obj << -/Names [(Item.4) 973 0 R (Item.40) 1042 0 R (Item.41) 1043 0 R (Item.42) 1086 0 R (Item.43) 1100 0 R (Item.44) 1101 0 R] -/Limits [(Item.4) (Item.44)] +/Names [(Item.33) 1029 0 R (Item.34) 1036 0 R (Item.35) 1037 0 R (Item.36) 1038 0 R (Item.37) 1039 0 R (Item.38) 1040 0 R] +/Limits [(Item.33) (Item.38)] >> % 2361 0 obj << -/Names [(Item.45) 1181 0 R (Item.46) 1210 0 R (Item.47) 1231 0 R (Item.48) 1257 0 R (Item.49) 1429 0 R (Item.5) 974 0 R] -/Limits [(Item.45) (Item.5)] +/Names [(Item.39) 1041 0 R (Item.4) 973 0 R (Item.40) 1042 0 R (Item.41) 1043 0 R (Item.42) 1086 0 R (Item.43) 1100 0 R] +/Limits [(Item.39) (Item.43)] >> % 2362 0 obj << -/Names [(Item.50) 1430 0 R (Item.51) 1431 0 R (Item.52) 1484 0 R (Item.53) 1491 0 R (Item.54) 1497 0 R (Item.55) 1498 0 R] -/Limits [(Item.50) (Item.55)] +/Names [(Item.44) 1101 0 R (Item.45) 1181 0 R (Item.46) 1210 0 R (Item.47) 1231 0 R (Item.48) 1257 0 R (Item.49) 1429 0 R] +/Limits [(Item.44) (Item.49)] >> % 2363 0 obj << -/Names [(Item.56) 1499 0 R (Item.57) 1500 0 R (Item.58) 1501 0 R (Item.59) 1513 0 R (Item.6) 975 0 R (Item.60) 1514 0 R] -/Limits [(Item.56) (Item.60)] +/Names [(Item.5) 974 0 R (Item.50) 1430 0 R (Item.51) 1431 0 R (Item.52) 1484 0 R (Item.53) 1491 0 R (Item.54) 1497 0 R] +/Limits [(Item.5) (Item.54)] >> % 2364 0 obj << -/Names [(Item.61) 1515 0 R (Item.62) 1522 0 R (Item.63) 1545 0 R (Item.64) 1546 0 R (Item.65) 1553 0 R (Item.66) 1558 0 R] -/Limits [(Item.61) (Item.66)] +/Names [(Item.55) 1498 0 R (Item.56) 1499 0 R (Item.57) 1500 0 R (Item.58) 1501 0 R (Item.59) 1513 0 R (Item.6) 975 0 R] +/Limits [(Item.55) (Item.6)] >> % 2365 0 obj << -/Names [(Item.67) 1559 0 R (Item.68) 1560 0 R (Item.69) 1572 0 R (Item.7) 976 0 R (Item.70) 1573 0 R (Item.71) 1574 0 R] -/Limits [(Item.67) (Item.71)] +/Names [(Item.60) 1514 0 R (Item.61) 1515 0 R (Item.62) 1522 0 R (Item.63) 1545 0 R (Item.64) 1546 0 R (Item.65) 1553 0 R] +/Limits [(Item.60) (Item.65)] >> % 2366 0 obj << -/Names [(Item.72) 1575 0 R (Item.73) 1576 0 R (Item.74) 1582 0 R (Item.75) 1583 0 R (Item.76) 1584 0 R (Item.77) 1585 0 R] -/Limits [(Item.72) (Item.77)] +/Names [(Item.66) 1558 0 R (Item.67) 1559 0 R (Item.68) 1560 0 R (Item.69) 1572 0 R (Item.7) 976 0 R (Item.70) 1573 0 R] +/Limits [(Item.66) (Item.70)] >> % 2367 0 obj << -/Names [(Item.78) 1586 0 R (Item.79) 1587 0 R (Item.8) 977 0 R (Item.80) 1599 0 R (Item.81) 1600 0 R (Item.82) 1601 0 R] -/Limits [(Item.78) (Item.82)] +/Names [(Item.71) 1574 0 R (Item.72) 1575 0 R (Item.73) 1576 0 R (Item.74) 1582 0 R (Item.75) 1583 0 R (Item.76) 1584 0 R] +/Limits [(Item.71) (Item.76)] >> % 2368 0 obj << -/Names [(Item.83) 1602 0 R (Item.84) 1603 0 R (Item.85) 1604 0 R (Item.86) 1605 0 R (Item.87) 1619 0 R (Item.88) 1631 0 R] -/Limits [(Item.83) (Item.88)] +/Names [(Item.77) 1585 0 R (Item.78) 1586 0 R (Item.79) 1587 0 R (Item.8) 977 0 R (Item.80) 1599 0 R (Item.81) 1600 0 R] +/Limits [(Item.77) (Item.81)] >> % 2369 0 obj << -/Names [(Item.89) 1642 0 R (Item.9) 985 0 R (Item.90) 1643 0 R (Item.91) 1651 0 R (Item.92) 1652 0 R (Item.93) 1673 0 R] -/Limits [(Item.89) (Item.93)] +/Names [(Item.82) 1601 0 R (Item.83) 1602 0 R (Item.84) 1603 0 R (Item.85) 1604 0 R (Item.86) 1605 0 R (Item.87) 1619 0 R] +/Limits [(Item.82) (Item.87)] >> % 2370 0 obj << -/Names [(Item.94) 1674 0 R (Item.95) 1685 0 R (Item.96) 1691 0 R (Item.97) 1697 0 R (Item.98) 1704 0 R (Item.99) 1710 0 R] -/Limits [(Item.94) (Item.99)] +/Names [(Item.88) 1631 0 R (Item.89) 1642 0 R (Item.9) 985 0 R (Item.90) 1643 0 R (Item.91) 1651 0 R (Item.92) 1652 0 R] +/Limits [(Item.88) (Item.92)] >> % 2371 0 obj << -/Names [(algocf.1) 2156 0 R (algocf.2) 2203 0 R (algocfline.1) 2142 0 R (algocfline.2) 2210 0 R (cite.2007c) 957 0 R (cite.2007d) 958 0 R] -/Limits [(algocf.1) (cite.2007d)] +/Names [(Item.93) 1673 0 R (Item.94) 1674 0 R (Item.95) 1685 0 R (Item.96) 1691 0 R (Item.97) 1697 0 R (Item.98) 1704 0 R] +/Limits [(Item.93) (Item.98)] >> % 2372 0 obj << -/Names [(cite.BERTACCINIFILIPPONE) 2013 0 R (cite.BLACS) 933 0 R (cite.BLAS1) 915 0 R (cite.BLAS2) 916 0 R (cite.BLAS3) 917 0 R (cite.CaFiRo:2014) 2128 0 R] -/Limits [(cite.BERTACCINIFILIPPONE) (cite.CaFiRo:2014)] +/Names [(Item.99) 1710 0 R (algocf.1) 2157 0 R (algocf.2) 2204 0 R (algocfline.1) 2143 0 R (algocfline.2) 2211 0 R (cite.2007c) 957 0 R] +/Limits [(Item.99) (cite.2007c)] >> endstream @@ -38291,527 +38353,527 @@ endobj /Type /ObjStm /N 100 /First 1040 -/Length 19171 ->> -stream -2373 0 2375 244 2376 465 2377 671 2378 861 2379 1043 2380 1239 2381 1465 2382 1685 2383 1913 -2384 2149 2385 2385 2386 2613 2387 2807 2388 2987 2389 3166 2390 3346 2391 3525 2392 3705 2393 3883 -2394 4061 2395 4241 2396 4420 2397 4600 2398 4779 2399 4959 2400 5138 2401 5318 2402 5497 2403 5669 -2404 5841 2405 6011 2406 6183 2407 6352 2408 6521 2409 6693 2410 6863 2411 7035 2412 7205 2413 7377 -2414 7547 2415 7719 2416 7890 2417 8062 2418 8235 2419 8433 2420 8628 2421 8825 2422 9013 2423 9195 -2424 9389 2425 9619 2426 9849 2427 10070 2428 10291 2429 10521 2430 10745 2431 10967 2432 11194 2433 11424 -2434 11652 2435 11878 2436 12102 2437 12332 2438 12556 2439 12778 2440 13000 2441 13251 2442 13512 2443 13769 -2444 14039 2445 14306 2446 14568 2447 14830 2448 15008 2449 15186 2450 15362 2451 15535 2452 15606 2453 15720 -2454 15832 2455 15943 2456 16054 2457 16171 2458 16294 2459 16412 2460 16524 2461 16637 2462 16749 2463 16859 -2464 16973 2465 17096 2466 17222 2467 17348 2468 17479 2469 17603 2470 17695 2471 17814 2472 17934 2473 18047 +/Length 19303 +>> +stream +2373 0 2375 205 2376 459 2377 678 2378 880 2379 1074 2380 1254 2381 1442 2382 1668 2383 1888 +2384 2113 2385 2349 2386 2585 2387 2815 2388 3015 2389 3195 2390 3374 2391 3554 2392 3733 2393 3913 +2394 4092 2395 4272 2396 4450 2397 4628 2398 4808 2399 4987 2400 5167 2401 5346 2402 5526 2403 5705 +2404 5878 2405 6050 2406 6220 2407 6392 2408 6562 2409 6734 2410 6903 2411 7072 2412 7244 2413 7414 +2414 7586 2415 7756 2416 7928 2417 8099 2418 8271 2419 8441 2420 8637 2421 8831 2422 9029 2423 9217 +2424 9400 2425 9579 2426 9809 2427 10039 2428 10262 2429 10482 2430 10710 2431 10935 2432 11157 2433 11383 +2434 11613 2435 11842 2436 12069 2437 12291 2438 12521 2439 12746 2440 12968 2441 13190 2442 13436 2443 13698 +2444 13954 2445 14222 2446 14490 2447 14752 2448 15014 2449 15214 2450 15394 2451 15569 2452 15738 2453 15834 +2454 15948 2455 16060 2456 16171 2457 16282 2458 16402 2459 16525 2460 16643 2461 16756 2462 16868 2463 16980 +2464 17091 2465 17203 2466 17316 2467 17442 2468 17567 2469 17698 2470 17822 2471 17914 2472 18033 2473 18151 % 2373 0 obj << -/Names [(cite.DesPat:11) 910 0 R (cite.DesignPatterns) 1074 0 R (cite.Filippone:2017:SMM:3034774.3017994) 2281 0 R (cite.KIVA3PSBLAS) 2274 0 R (cite.METIS) 945 0 R (cite.MPI1) 2280 0 R] -/Limits [(cite.DesPat:11) (cite.MPI1)] +/Names [(cite.2007d) 958 0 R (cite.BERTACCINIFILIPPONE) 2014 0 R (cite.BLACS) 933 0 R (cite.BLAS1) 915 0 R (cite.BLAS2) 916 0 R (cite.BLAS3) 917 0 R] +/Limits [(cite.2007d) (cite.BLAS3)] >> % 2375 0 obj << -/Names [(cite.MRC:11) 2143 0 R (cite.OurTechRep) 2129 0 R (cite.PARA04FOREST) 2272 0 R (cite.PSBLAS) 2273 0 R (cite.RouXiaXu:11) 911 0 R (cite.Sparse03) 909 0 R] -/Limits [(cite.MRC:11) (cite.Sparse03)] +/Names [(cite.CaFiRo:2014) 2129 0 R (cite.DesPat:11) 910 0 R (cite.DesignPatterns) 1074 0 R (cite.Filippone:2017:SMM:3034774.3017994) 2282 0 R (cite.KIVA3PSBLAS) 2275 0 R (cite.METIS) 945 0 R] +/Limits [(cite.CaFiRo:2014) (cite.METIS)] >> % 2376 0 obj << -/Names [(cite.machiels) 912 0 R (cite.metcalf) 908 0 R (cite.sblas02) 914 0 R (cite.sblas97) 913 0 R (descdata) 1017 0 R (equation.4.1) 1296 0 R] -/Limits [(cite.machiels) (equation.4.1)] +/Names [(cite.MPI1) 2281 0 R (cite.MRC:11) 2144 0 R (cite.OurTechRep) 2130 0 R (cite.PARA04FOREST) 2273 0 R (cite.PSBLAS) 2274 0 R (cite.RouXiaXu:11) 911 0 R] +/Limits [(cite.MPI1) (cite.RouXiaXu:11)] >> % 2377 0 obj << -/Names [(equation.4.2) 1297 0 R (equation.4.3) 1298 0 R (figure.1) 927 0 R (figure.2) 953 0 R (figure.3) 1399 0 R (figure.4) 1432 0 R] -/Limits [(equation.4.2) (figure.4)] +/Names [(cite.Sparse03) 909 0 R (cite.machiels) 912 0 R (cite.metcalf) 908 0 R (cite.sblas02) 914 0 R (cite.sblas97) 913 0 R (descdata) 1017 0 R] +/Limits [(cite.Sparse03) (descdata)] >> % 2378 0 obj << -/Names [(figure.5) 2150 0 R (figure.6) 2145 0 R (figure.7) 2190 0 R (figure.8) 2202 0 R (figure.9) 2229 0 R (listing.1) 1045 0 R] -/Limits [(figure.5) (listing.1)] +/Names [(equation.4.1) 1296 0 R (equation.4.2) 1297 0 R (equation.4.3) 1298 0 R (figure.1) 927 0 R (figure.2) 953 0 R (figure.3) 1399 0 R] +/Limits [(equation.4.1) (figure.3)] >> % 2379 0 obj << -/Names [(listing.2) 1075 0 R (listing.3) 1118 0 R (listing.4) 1137 0 R (listing.5) 1903 0 R (listing.6) 1904 0 R (lstlisting.-1) 1258 0 R] -/Limits [(listing.2) (lstlisting.-1)] +/Names [(figure.4) 1432 0 R (figure.5) 2151 0 R (figure.6) 2146 0 R (figure.7) 2191 0 R (figure.8) 2203 0 R (figure.9) 2230 0 R] +/Limits [(figure.4) (figure.9)] >> % 2380 0 obj << -/Names [(lstlisting.-10) 1973 0 R (lstlisting.-11) 1980 0 R (lstlisting.-12) 2079 0 R (lstlisting.-13) 2103 0 R (lstlisting.-14) 2161 0 R (lstlisting.-2) 1913 0 R] -/Limits [(lstlisting.-10) (lstlisting.-2)] +/Names [(listing.1) 1045 0 R (listing.2) 1075 0 R (listing.3) 1118 0 R (listing.4) 1137 0 R (listing.5) 1904 0 R (listing.6) 1905 0 R] +/Limits [(listing.1) (listing.6)] >> % 2381 0 obj << -/Names [(lstlisting.-3) 1920 0 R (lstlisting.-4) 1926 0 R (lstlisting.-5) 1932 0 R (lstlisting.-6) 1944 0 R (lstlisting.-7) 1951 0 R (lstlisting.-8) 1959 0 R] -/Limits [(lstlisting.-3) (lstlisting.-8)] +/Names [(lstlisting.-1) 1258 0 R (lstlisting.-10) 1974 0 R (lstlisting.-11) 1981 0 R (lstlisting.-12) 2080 0 R (lstlisting.-13) 2104 0 R (lstlisting.-14) 2162 0 R] +/Limits [(lstlisting.-1) (lstlisting.-14)] >> % 2382 0 obj << -/Names [(lstlisting.-9) 1966 0 R (lstnumber.-1.1) 1259 0 R (lstnumber.-1.2) 1260 0 R (lstnumber.-1.3) 1261 0 R (lstnumber.-1.4) 1262 0 R (lstnumber.-10.1) 1974 0 R] -/Limits [(lstlisting.-9) (lstnumber.-10.1)] +/Names [(lstlisting.-2) 1914 0 R (lstlisting.-3) 1921 0 R (lstlisting.-4) 1927 0 R (lstlisting.-5) 1933 0 R (lstlisting.-6) 1945 0 R (lstlisting.-7) 1952 0 R] +/Limits [(lstlisting.-2) (lstlisting.-7)] >> % 2383 0 obj << -/Names [(lstnumber.-11.1) 1981 0 R (lstnumber.-12.1) 2080 0 R (lstnumber.-12.2) 2081 0 R (lstnumber.-13.1) 2104 0 R (lstnumber.-13.2) 2105 0 R (lstnumber.-14.1) 2162 0 R] -/Limits [(lstnumber.-11.1) (lstnumber.-14.1)] +/Names [(lstlisting.-8) 1960 0 R (lstlisting.-9) 1967 0 R (lstnumber.-1.1) 1259 0 R (lstnumber.-1.2) 1260 0 R (lstnumber.-1.3) 1261 0 R (lstnumber.-1.4) 1262 0 R] +/Limits [(lstlisting.-8) (lstnumber.-1.4)] >> % 2384 0 obj << -/Names [(lstnumber.-14.2) 2163 0 R (lstnumber.-14.3) 2164 0 R (lstnumber.-14.4) 2165 0 R (lstnumber.-14.5) 2166 0 R (lstnumber.-14.6) 2167 0 R (lstnumber.-14.7) 2168 0 R] -/Limits [(lstnumber.-14.2) (lstnumber.-14.7)] +/Names [(lstnumber.-10.1) 1975 0 R (lstnumber.-11.1) 1982 0 R (lstnumber.-12.1) 2081 0 R (lstnumber.-12.2) 2082 0 R (lstnumber.-13.1) 2105 0 R (lstnumber.-13.2) 2106 0 R] +/Limits [(lstnumber.-10.1) (lstnumber.-13.2)] >> % 2385 0 obj << -/Names [(lstnumber.-2.1) 1914 0 R (lstnumber.-3.1) 1921 0 R (lstnumber.-4.1) 1927 0 R (lstnumber.-5.1) 1933 0 R (lstnumber.-6.1) 1945 0 R (lstnumber.-7.1) 1952 0 R] -/Limits [(lstnumber.-2.1) (lstnumber.-7.1)] +/Names [(lstnumber.-14.1) 2163 0 R (lstnumber.-14.2) 2164 0 R (lstnumber.-14.3) 2165 0 R (lstnumber.-14.4) 2166 0 R (lstnumber.-14.5) 2167 0 R (lstnumber.-14.6) 2168 0 R] +/Limits [(lstnumber.-14.1) (lstnumber.-14.6)] >> % 2386 0 obj << -/Names [(lstnumber.-8.1) 1960 0 R (lstnumber.-9.1) 1967 0 R (page.1) 683 0 R (page.10) 1016 0 R (page.100) 1679 0 R (page.101) 1684 0 R] -/Limits [(lstnumber.-8.1) (page.101)] +/Names [(lstnumber.-14.7) 2169 0 R (lstnumber.-2.1) 1915 0 R (lstnumber.-3.1) 1922 0 R (lstnumber.-4.1) 1928 0 R (lstnumber.-5.1) 1934 0 R (lstnumber.-6.1) 1946 0 R] +/Limits [(lstnumber.-14.7) (lstnumber.-6.1)] >> % 2387 0 obj << -/Names [(page.102) 1690 0 R (page.103) 1696 0 R (page.104) 1703 0 R (page.105) 1709 0 R (page.106) 1716 0 R (page.107) 1724 0 R] -/Limits [(page.102) (page.107)] +/Names [(lstnumber.-7.1) 1953 0 R (lstnumber.-8.1) 1961 0 R (lstnumber.-9.1) 1968 0 R (page.1) 683 0 R (page.10) 1016 0 R (page.100) 1679 0 R] +/Limits [(lstnumber.-7.1) (page.100)] >> % 2388 0 obj << -/Names [(page.108) 1728 0 R (page.109) 1738 0 R (page.11) 1024 0 R (page.110) 1743 0 R (page.111) 1747 0 R (page.112) 1761 0 R] -/Limits [(page.108) (page.112)] +/Names [(page.101) 1684 0 R (page.102) 1690 0 R (page.103) 1696 0 R (page.104) 1703 0 R (page.105) 1709 0 R (page.106) 1716 0 R] +/Limits [(page.101) (page.106)] >> % 2389 0 obj << -/Names [(page.113) 1765 0 R (page.114) 1771 0 R (page.115) 1777 0 R (page.116) 1785 0 R (page.117) 1789 0 R (page.118) 1793 0 R] -/Limits [(page.113) (page.118)] +/Names [(page.107) 1724 0 R (page.108) 1728 0 R (page.109) 1738 0 R (page.11) 1024 0 R (page.110) 1743 0 R (page.111) 1747 0 R] +/Limits [(page.107) (page.111)] >> % 2390 0 obj << -/Names [(page.119) 1797 0 R (page.12) 1035 0 R (page.120) 1801 0 R (page.121) 1805 0 R (page.122) 1810 0 R (page.123) 1818 0 R] -/Limits [(page.119) (page.123)] +/Names [(page.112) 1762 0 R (page.113) 1766 0 R (page.114) 1772 0 R (page.115) 1778 0 R (page.116) 1786 0 R (page.117) 1790 0 R] +/Limits [(page.112) (page.117)] >> % 2391 0 obj << -/Names [(page.124) 1822 0 R (page.125) 1830 0 R (page.126) 1834 0 R (page.127) 1841 0 R (page.128) 1846 0 R (page.129) 1853 0 R] -/Limits [(page.124) (page.129)] +/Names [(page.118) 1794 0 R (page.119) 1798 0 R (page.12) 1035 0 R (page.120) 1802 0 R (page.121) 1806 0 R (page.122) 1811 0 R] +/Limits [(page.118) (page.122)] >> % 2392 0 obj << -/Names [(page.13) 1051 0 R (page.130) 1857 0 R (page.131) 1864 0 R (page.132) 1868 0 R (page.133) 1875 0 R (page.134) 1880 0 R] -/Limits [(page.13) (page.134)] +/Names [(page.123) 1819 0 R (page.124) 1823 0 R (page.125) 1831 0 R (page.126) 1835 0 R (page.127) 1842 0 R (page.128) 1847 0 R] +/Limits [(page.123) (page.128)] >> % 2393 0 obj << -/Names [(page.135) 1890 0 R (page.136) 1895 0 R (page.137) 1902 0 R (page.138) 1908 0 R (page.139) 1912 0 R (page.14) 1056 0 R] -/Limits [(page.135) (page.14)] +/Names [(page.129) 1854 0 R (page.13) 1051 0 R (page.130) 1858 0 R (page.131) 1865 0 R (page.132) 1869 0 R (page.133) 1876 0 R] +/Limits [(page.129) (page.133)] >> % 2394 0 obj << -/Names [(page.140) 1919 0 R (page.141) 1925 0 R (page.142) 1931 0 R (page.143) 1937 0 R (page.144) 1943 0 R (page.145) 1950 0 R] -/Limits [(page.140) (page.145)] +/Names [(page.134) 1881 0 R (page.135) 1891 0 R (page.136) 1896 0 R (page.137) 1903 0 R (page.138) 1909 0 R (page.139) 1913 0 R] +/Limits [(page.134) (page.139)] >> % 2395 0 obj << -/Names [(page.146) 1958 0 R (page.147) 1965 0 R (page.148) 1972 0 R (page.149) 1979 0 R (page.15) 1060 0 R (page.150) 1985 0 R] -/Limits [(page.146) (page.150)] +/Names [(page.14) 1056 0 R (page.140) 1920 0 R (page.141) 1926 0 R (page.142) 1932 0 R (page.143) 1938 0 R (page.144) 1944 0 R] +/Limits [(page.14) (page.144)] >> % 2396 0 obj << -/Names [(page.151) 1989 0 R (page.152) 1997 0 R (page.153) 2008 0 R (page.154) 2012 0 R (page.155) 2021 0 R (page.156) 2025 0 R] -/Limits [(page.151) (page.156)] +/Names [(page.145) 1951 0 R (page.146) 1959 0 R (page.147) 1966 0 R (page.148) 1973 0 R (page.149) 1980 0 R (page.15) 1060 0 R] +/Limits [(page.145) (page.15)] >> % 2397 0 obj << -/Names [(page.157) 2034 0 R (page.158) 2040 0 R (page.159) 2044 0 R (page.16) 1065 0 R (page.160) 2051 0 R (page.161) 2059 0 R] -/Limits [(page.157) (page.161)] +/Names [(page.150) 1986 0 R (page.151) 1990 0 R (page.152) 1998 0 R (page.153) 2009 0 R (page.154) 2013 0 R (page.155) 2022 0 R] +/Limits [(page.150) (page.155)] >> % 2398 0 obj << -/Names [(page.162) 2066 0 R (page.163) 2070 0 R (page.164) 2078 0 R (page.165) 2089 0 R (page.166) 2094 0 R (page.167) 2102 0 R] -/Limits [(page.162) (page.167)] +/Names [(page.156) 2026 0 R (page.157) 2035 0 R (page.158) 2041 0 R (page.159) 2045 0 R (page.16) 1065 0 R (page.160) 2052 0 R] +/Limits [(page.156) (page.160)] >> % 2399 0 obj << -/Names [(page.168) 2111 0 R (page.169) 2115 0 R (page.17) 1072 0 R (page.170) 2126 0 R (page.171) 2140 0 R (page.172) 2149 0 R] -/Limits [(page.168) (page.172)] +/Names [(page.161) 2060 0 R (page.162) 2067 0 R (page.163) 2071 0 R (page.164) 2079 0 R (page.165) 2090 0 R (page.166) 2095 0 R] +/Limits [(page.161) (page.166)] >> % 2400 0 obj << -/Names [(page.173) 2160 0 R (page.174) 2189 0 R (page.175) 2209 0 R (page.176) 2228 0 R (page.177) 2244 0 R (page.178) 2248 0 R] -/Limits [(page.173) (page.178)] +/Names [(page.167) 2103 0 R (page.168) 2112 0 R (page.169) 2116 0 R (page.17) 1072 0 R (page.170) 2127 0 R (page.171) 2141 0 R] +/Limits [(page.167) (page.171)] >> % 2401 0 obj << -/Names [(page.179) 2252 0 R (page.18) 1080 0 R (page.180) 2257 0 R (page.181) 2261 0 R (page.182) 2266 0 R (page.183) 2270 0 R] -/Limits [(page.179) (page.183)] +/Names [(page.172) 2150 0 R (page.173) 2161 0 R (page.174) 2190 0 R (page.175) 2210 0 R (page.176) 2229 0 R (page.177) 2245 0 R] +/Limits [(page.172) (page.177)] >> % 2402 0 obj << -/Names [(page.184) 2279 0 R (page.19) 1085 0 R (page.2) 693 0 R (page.20) 1091 0 R (page.21) 1095 0 R (page.22) 1099 0 R] -/Limits [(page.184) (page.22)] +/Names [(page.178) 2249 0 R (page.179) 2253 0 R (page.18) 1080 0 R (page.180) 2258 0 R (page.181) 2262 0 R (page.182) 2267 0 R] +/Limits [(page.178) (page.182)] >> % 2403 0 obj << -/Names [(page.23) 1105 0 R (page.24) 1109 0 R (page.25) 1115 0 R (page.26) 1122 0 R (page.27) 1128 0 R (page.28) 1135 0 R] -/Limits [(page.23) (page.28)] +/Names [(page.183) 2271 0 R (page.184) 2280 0 R (page.19) 1085 0 R (page.2) 693 0 R (page.20) 1091 0 R (page.21) 1095 0 R] +/Limits [(page.183) (page.21)] >> % 2404 0 obj << -/Names [(page.29) 1141 0 R (page.3) 926 0 R (page.30) 1145 0 R (page.31) 1156 0 R (page.32) 1164 0 R (page.33) 1174 0 R] -/Limits [(page.29) (page.33)] +/Names [(page.22) 1099 0 R (page.23) 1105 0 R (page.24) 1109 0 R (page.25) 1115 0 R (page.26) 1122 0 R (page.27) 1128 0 R] +/Limits [(page.22) (page.27)] >> % 2405 0 obj << -/Names [(page.34) 1180 0 R (page.35) 1191 0 R (page.36) 1196 0 R (page.37) 1203 0 R (page.38) 1209 0 R (page.39) 1217 0 R] -/Limits [(page.34) (page.39)] +/Names [(page.28) 1135 0 R (page.29) 1141 0 R (page.3) 926 0 R (page.30) 1145 0 R (page.31) 1156 0 R (page.32) 1164 0 R] +/Limits [(page.28) (page.32)] >> % 2406 0 obj << -/Names [(page.4) 939 0 R (page.40) 1225 0 R (page.41) 1230 0 R (page.42) 1238 0 R (page.43) 1243 0 R (page.44) 1251 0 R] -/Limits [(page.4) (page.44)] +/Names [(page.33) 1174 0 R (page.34) 1180 0 R (page.35) 1191 0 R (page.36) 1196 0 R (page.37) 1203 0 R (page.38) 1209 0 R] +/Limits [(page.33) (page.38)] >> % 2407 0 obj << -/Names [(page.45) 1256 0 R (page.46) 1269 0 R (page.47) 1276 0 R (page.48) 1284 0 R (page.49) 1295 0 R (page.5) 952 0 R] -/Limits [(page.45) (page.5)] +/Names [(page.39) 1217 0 R (page.4) 939 0 R (page.40) 1225 0 R (page.41) 1230 0 R (page.42) 1238 0 R (page.43) 1243 0 R] +/Limits [(page.39) (page.43)] >> % 2408 0 obj << -/Names [(page.50) 1311 0 R (page.51) 1317 0 R (page.52) 1328 0 R (page.53) 1334 0 R (page.54) 1345 0 R (page.55) 1350 0 R] -/Limits [(page.50) (page.55)] +/Names [(page.44) 1251 0 R (page.45) 1256 0 R (page.46) 1269 0 R (page.47) 1276 0 R (page.48) 1284 0 R (page.49) 1295 0 R] +/Limits [(page.44) (page.49)] >> % 2409 0 obj << -/Names [(page.56) 1362 0 R (page.57) 1367 0 R (page.58) 1376 0 R (page.59) 1382 0 R (page.6) 964 0 R (page.60) 1391 0 R] -/Limits [(page.56) (page.60)] +/Names [(page.5) 952 0 R (page.50) 1311 0 R (page.51) 1317 0 R (page.52) 1328 0 R (page.53) 1334 0 R (page.54) 1345 0 R] +/Limits [(page.5) (page.54)] >> % 2410 0 obj << -/Names [(page.61) 1398 0 R (page.62) 1412 0 R (page.63) 1419 0 R (page.64) 1428 0 R (page.65) 1436 0 R (page.66) 1440 0 R] -/Limits [(page.61) (page.66)] +/Names [(page.55) 1350 0 R (page.56) 1362 0 R (page.57) 1367 0 R (page.58) 1376 0 R (page.59) 1382 0 R (page.6) 964 0 R] +/Limits [(page.55) (page.6)] >> % 2411 0 obj << -/Names [(page.67) 1455 0 R (page.68) 1461 0 R (page.69) 1467 0 R (page.7) 969 0 R (page.70) 1474 0 R (page.71) 1478 0 R] -/Limits [(page.67) (page.71)] +/Names [(page.60) 1391 0 R (page.61) 1398 0 R (page.62) 1412 0 R (page.63) 1419 0 R (page.64) 1428 0 R (page.65) 1436 0 R] +/Limits [(page.60) (page.65)] >> % 2412 0 obj << -/Names [(page.72) 1483 0 R (page.73) 1489 0 R (page.74) 1496 0 R (page.75) 1507 0 R (page.76) 1512 0 R (page.77) 1521 0 R] -/Limits [(page.72) (page.77)] +/Names [(page.66) 1440 0 R (page.67) 1455 0 R (page.68) 1461 0 R (page.69) 1467 0 R (page.7) 969 0 R (page.70) 1474 0 R] +/Limits [(page.66) (page.70)] >> % 2413 0 obj << -/Names [(page.78) 1528 0 R (page.79) 1533 0 R (page.8) 984 0 R (page.80) 1540 0 R (page.81) 1544 0 R (page.82) 1552 0 R] -/Limits [(page.78) (page.82)] +/Names [(page.71) 1478 0 R (page.72) 1483 0 R (page.73) 1489 0 R (page.74) 1496 0 R (page.75) 1507 0 R (page.76) 1512 0 R] +/Limits [(page.71) (page.76)] >> % 2414 0 obj << -/Names [(page.83) 1557 0 R (page.84) 1565 0 R (page.85) 1571 0 R (page.86) 1581 0 R (page.87) 1594 0 R (page.88) 1598 0 R] -/Limits [(page.83) (page.88)] +/Names [(page.77) 1521 0 R (page.78) 1528 0 R (page.79) 1533 0 R (page.8) 984 0 R (page.80) 1540 0 R (page.81) 1544 0 R] +/Limits [(page.77) (page.81)] >> % 2415 0 obj << -/Names [(page.89) 1611 0 R (page.9) 1005 0 R (page.90) 1618 0 R (page.91) 1625 0 R (page.92) 1630 0 R (page.93) 1637 0 R] -/Limits [(page.89) (page.93)] +/Names [(page.82) 1552 0 R (page.83) 1557 0 R (page.84) 1565 0 R (page.85) 1571 0 R (page.86) 1581 0 R (page.87) 1594 0 R] +/Limits [(page.82) (page.87)] >> % 2416 0 obj << -/Names [(page.94) 1641 0 R (page.95) 1650 0 R (page.96) 1658 0 R (page.97) 1662 0 R (page.98) 1668 0 R (page.99) 1672 0 R] -/Limits [(page.94) (page.99)] +/Names [(page.88) 1598 0 R (page.89) 1611 0 R (page.9) 1005 0 R (page.90) 1618 0 R (page.91) 1625 0 R (page.92) 1630 0 R] +/Limits [(page.88) (page.92)] >> % 2417 0 obj << -/Names [(page.i) 739 0 R (page.ii) 795 0 R (page.iii) 843 0 R (page.iv) 886 0 R (precdata) 1136 0 R (section*.1) 740 0 R] -/Limits [(page.i) (section*.1)] +/Names [(page.93) 1637 0 R (page.94) 1641 0 R (page.95) 1650 0 R (page.96) 1658 0 R (page.97) 1662 0 R (page.98) 1668 0 R] +/Limits [(page.93) (page.98)] >> % 2418 0 obj << -/Names [(section*.10) 634 0 R (section*.11) 638 0 R (section*.12) 642 0 R (section*.13) 646 0 R (section*.14) 650 0 R (section*.15) 654 0 R] -/Limits [(section*.10) (section*.15)] +/Names [(page.99) 1672 0 R (page.i) 739 0 R (page.ii) 795 0 R (page.iii) 843 0 R (page.iv) 886 0 R (precdata) 1136 0 R] +/Limits [(page.99) (precdata)] >> % 2419 0 obj << -/Names [(section*.16) 658 0 R (section*.17) 662 0 R (section*.18) 666 0 R (section*.19) 670 0 R (section*.2) 7 0 R (section*.20) 674 0 R] -/Limits [(section*.16) (section*.20)] +/Names [(section*.1) 740 0 R (section*.10) 634 0 R (section*.11) 638 0 R (section*.12) 642 0 R (section*.13) 646 0 R (section*.14) 650 0 R] +/Limits [(section*.1) (section*.14)] >> % 2420 0 obj << -/Names [(section*.21) 2271 0 R (section*.3) 2141 0 R (section*.4) 2169 0 R (section*.5) 2191 0 R (section*.6) 2211 0 R (section*.7) 622 0 R] -/Limits [(section*.21) (section*.7)] +/Names [(section*.15) 654 0 R (section*.16) 658 0 R (section*.17) 662 0 R (section*.18) 666 0 R (section*.19) 670 0 R (section*.2) 7 0 R] +/Limits [(section*.15) (section*.2)] >> % 2421 0 obj << -/Names [(section*.8) 626 0 R (section*.9) 630 0 R (section.1) 11 0 R (section.10) 545 0 R (section.11) 585 0 R (section.12) 597 0 R] -/Limits [(section*.8) (section.12)] +/Names [(section*.20) 674 0 R (section*.21) 2272 0 R (section*.3) 2142 0 R (section*.4) 2170 0 R (section*.5) 2192 0 R (section*.6) 2212 0 R] +/Limits [(section*.20) (section*.6)] >> % 2422 0 obj << -/Names [(section.13) 618 0 R (section.2) 15 0 R (section.3) 39 0 R (section.4) 224 0 R (section.5) 292 0 R (section.6) 312 0 R] -/Limits [(section.13) (section.6)] +/Names [(section*.7) 622 0 R (section*.8) 626 0 R (section*.9) 630 0 R (section.1) 11 0 R (section.10) 545 0 R (section.11) 585 0 R] +/Limits [(section*.7) (section.11)] >> % 2423 0 obj << -/Names [(section.7) 425 0 R (section.8) 497 0 R (section.9) 517 0 R (spbasedata) 1081 0 R (spdata) 1073 0 R (subsection.10.1) 549 0 R] -/Limits [(section.7) (subsection.10.1)] +/Names [(section.12) 597 0 R (section.13) 618 0 R (section.2) 15 0 R (section.3) 39 0 R (section.4) 224 0 R (section.5) 292 0 R] +/Limits [(section.12) (section.5)] >> % 2424 0 obj << -/Names [(subsection.10.2) 553 0 R (subsection.10.3) 557 0 R (subsection.10.4) 561 0 R (subsection.10.5) 565 0 R (subsection.10.6) 569 0 R (subsection.10.7) 573 0 R] -/Limits [(subsection.10.2) (subsection.10.7)] +/Names [(section.6) 312 0 R (section.7) 425 0 R (section.8) 497 0 R (section.9) 517 0 R (spbasedata) 1081 0 R (spdata) 1073 0 R] +/Limits [(section.6) (spdata)] >> % 2425 0 obj << -/Names [(subsection.10.8) 577 0 R (subsection.10.9) 581 0 R (subsection.11.1) 589 0 R (subsection.11.2) 593 0 R (subsection.12.1) 601 0 R (subsection.12.2) 606 0 R] -/Limits [(subsection.10.8) (subsection.12.2)] +/Names [(subsection.10.1) 549 0 R (subsection.10.2) 553 0 R (subsection.10.3) 557 0 R (subsection.10.4) 561 0 R (subsection.10.5) 565 0 R (subsection.10.6) 569 0 R] +/Limits [(subsection.10.1) (subsection.10.6)] >> % 2426 0 obj << -/Names [(subsection.12.3) 610 0 R (subsection.12.4) 614 0 R (subsection.2.1) 19 0 R (subsection.2.2) 23 0 R (subsection.2.3) 27 0 R (subsection.2.4) 35 0 R] -/Limits [(subsection.12.3) (subsection.2.4)] +/Names [(subsection.10.7) 573 0 R (subsection.10.8) 577 0 R (subsection.10.9) 581 0 R (subsection.11.1) 589 0 R (subsection.11.2) 593 0 R (subsection.12.1) 601 0 R] +/Limits [(subsection.10.7) (subsection.12.1)] >> % 2427 0 obj << -/Names [(subsection.3.1) 43 0 R (subsection.3.2) 107 0 R (subsection.3.3) 187 0 R (subsection.3.4) 216 0 R (subsection.3.5) 220 0 R (subsection.4.1) 228 0 R] -/Limits [(subsection.3.1) (subsection.4.1)] +/Names [(subsection.12.2) 606 0 R (subsection.12.3) 610 0 R (subsection.12.4) 614 0 R (subsection.2.1) 19 0 R (subsection.2.2) 23 0 R (subsection.2.3) 27 0 R] +/Limits [(subsection.12.2) (subsection.2.3)] >> % 2428 0 obj << -/Names [(subsection.4.10) 264 0 R (subsection.4.11) 268 0 R (subsection.4.12) 272 0 R (subsection.4.13) 276 0 R (subsection.4.14) 280 0 R (subsection.4.15) 284 0 R] -/Limits [(subsection.4.10) (subsection.4.15)] +/Names [(subsection.2.4) 35 0 R (subsection.3.1) 43 0 R (subsection.3.2) 107 0 R (subsection.3.3) 187 0 R (subsection.3.4) 216 0 R (subsection.3.5) 220 0 R] +/Limits [(subsection.2.4) (subsection.3.5)] >> % 2429 0 obj << -/Names [(subsection.4.16) 288 0 R (subsection.4.2) 232 0 R (subsection.4.3) 236 0 R (subsection.4.4) 240 0 R (subsection.4.5) 244 0 R (subsection.4.6) 248 0 R] -/Limits [(subsection.4.16) (subsection.4.6)] +/Names [(subsection.4.1) 228 0 R (subsection.4.10) 264 0 R (subsection.4.11) 268 0 R (subsection.4.12) 272 0 R (subsection.4.13) 276 0 R (subsection.4.14) 280 0 R] +/Limits [(subsection.4.1) (subsection.4.14)] >> % 2430 0 obj << -/Names [(subsection.4.7) 252 0 R (subsection.4.8) 256 0 R (subsection.4.9) 260 0 R (subsection.5.1) 296 0 R (subsection.5.2) 300 0 R (subsection.5.3) 304 0 R] -/Limits [(subsection.4.7) (subsection.5.3)] +/Names [(subsection.4.15) 284 0 R (subsection.4.16) 288 0 R (subsection.4.2) 232 0 R (subsection.4.3) 236 0 R (subsection.4.4) 240 0 R (subsection.4.5) 244 0 R] +/Limits [(subsection.4.15) (subsection.4.5)] >> % 2431 0 obj << -/Names [(subsection.5.4) 308 0 R (subsection.6.1) 316 0 R (subsection.6.10) 352 0 R (subsection.6.11) 356 0 R (subsection.6.12) 360 0 R (subsection.6.13) 364 0 R] -/Limits [(subsection.5.4) (subsection.6.13)] +/Names [(subsection.4.6) 248 0 R (subsection.4.7) 252 0 R (subsection.4.8) 256 0 R (subsection.4.9) 260 0 R (subsection.5.1) 296 0 R (subsection.5.2) 300 0 R] +/Limits [(subsection.4.6) (subsection.5.2)] >> % 2432 0 obj << -/Names [(subsection.6.14) 368 0 R (subsection.6.15) 372 0 R (subsection.6.16) 376 0 R (subsection.6.17) 380 0 R (subsection.6.18) 384 0 R (subsection.6.19) 388 0 R] -/Limits [(subsection.6.14) (subsection.6.19)] +/Names [(subsection.5.3) 304 0 R (subsection.5.4) 308 0 R (subsection.6.1) 316 0 R (subsection.6.10) 352 0 R (subsection.6.11) 356 0 R (subsection.6.12) 360 0 R] +/Limits [(subsection.5.3) (subsection.6.12)] >> % 2433 0 obj << -/Names [(subsection.6.2) 320 0 R (subsection.6.20) 392 0 R (subsection.6.21) 396 0 R (subsection.6.22) 400 0 R (subsection.6.23) 405 0 R (subsection.6.24) 409 0 R] -/Limits [(subsection.6.2) (subsection.6.24)] +/Names [(subsection.6.13) 364 0 R (subsection.6.14) 368 0 R (subsection.6.15) 372 0 R (subsection.6.16) 376 0 R (subsection.6.17) 380 0 R (subsection.6.18) 384 0 R] +/Limits [(subsection.6.13) (subsection.6.18)] >> % 2434 0 obj << -/Names [(subsection.6.25) 413 0 R (subsection.6.26) 417 0 R (subsection.6.27) 421 0 R (subsection.6.3) 324 0 R (subsection.6.4) 328 0 R (subsection.6.5) 332 0 R] -/Limits [(subsection.6.25) (subsection.6.5)] +/Names [(subsection.6.19) 388 0 R (subsection.6.2) 320 0 R (subsection.6.20) 392 0 R (subsection.6.21) 396 0 R (subsection.6.22) 400 0 R (subsection.6.23) 405 0 R] +/Limits [(subsection.6.19) (subsection.6.23)] >> % 2435 0 obj << -/Names [(subsection.6.6) 336 0 R (subsection.6.7) 340 0 R (subsection.6.8) 344 0 R (subsection.6.9) 348 0 R (subsection.7.1) 429 0 R (subsection.7.10) 465 0 R] -/Limits [(subsection.6.6) (subsection.7.10)] +/Names [(subsection.6.24) 409 0 R (subsection.6.25) 413 0 R (subsection.6.26) 417 0 R (subsection.6.27) 421 0 R (subsection.6.3) 324 0 R (subsection.6.4) 328 0 R] +/Limits [(subsection.6.24) (subsection.6.4)] >> % 2436 0 obj << -/Names [(subsection.7.11) 469 0 R (subsection.7.12) 473 0 R (subsection.7.13) 477 0 R (subsection.7.14) 481 0 R (subsection.7.15) 485 0 R (subsection.7.16) 489 0 R] -/Limits [(subsection.7.11) (subsection.7.16)] +/Names [(subsection.6.5) 332 0 R (subsection.6.6) 336 0 R (subsection.6.7) 340 0 R (subsection.6.8) 344 0 R (subsection.6.9) 348 0 R (subsection.7.1) 429 0 R] +/Limits [(subsection.6.5) (subsection.7.1)] >> % 2437 0 obj << -/Names [(subsection.7.17) 493 0 R (subsection.7.2) 433 0 R (subsection.7.3) 437 0 R (subsection.7.4) 441 0 R (subsection.7.5) 445 0 R (subsection.7.6) 449 0 R] -/Limits [(subsection.7.17) (subsection.7.6)] +/Names [(subsection.7.10) 465 0 R (subsection.7.11) 469 0 R (subsection.7.12) 473 0 R (subsection.7.13) 477 0 R (subsection.7.14) 481 0 R (subsection.7.15) 485 0 R] +/Limits [(subsection.7.10) (subsection.7.15)] >> % 2438 0 obj << -/Names [(subsection.7.7) 453 0 R (subsection.7.8) 457 0 R (subsection.7.9) 461 0 R (subsection.8.1) 501 0 R (subsection.8.2) 505 0 R (subsection.8.3) 509 0 R] -/Limits [(subsection.7.7) (subsection.8.3)] +/Names [(subsection.7.16) 489 0 R (subsection.7.17) 493 0 R (subsection.7.2) 433 0 R (subsection.7.3) 437 0 R (subsection.7.4) 441 0 R (subsection.7.5) 445 0 R] +/Limits [(subsection.7.16) (subsection.7.5)] >> % 2439 0 obj << -/Names [(subsection.8.4) 513 0 R (subsection.9.1) 521 0 R (subsection.9.2) 525 0 R (subsection.9.3) 529 0 R (subsection.9.4) 533 0 R (subsection.9.5) 537 0 R] -/Limits [(subsection.8.4) (subsection.9.5)] +/Names [(subsection.7.6) 449 0 R (subsection.7.7) 453 0 R (subsection.7.8) 457 0 R (subsection.7.9) 461 0 R (subsection.8.1) 501 0 R (subsection.8.2) 505 0 R] +/Limits [(subsection.7.6) (subsection.8.2)] >> % 2440 0 obj << -/Names [(subsection.9.6) 541 0 R (subsubsection.2.3.1) 31 0 R (subsubsection.3.1.1) 47 0 R (subsubsection.3.1.10) 83 0 R (subsubsection.3.1.11) 87 0 R (subsubsection.3.1.12) 91 0 R] -/Limits [(subsection.9.6) (subsubsection.3.1.12)] +/Names [(subsection.8.3) 509 0 R (subsection.8.4) 513 0 R (subsection.9.1) 521 0 R (subsection.9.2) 525 0 R (subsection.9.3) 529 0 R (subsection.9.4) 533 0 R] +/Limits [(subsection.8.3) (subsection.9.4)] >> % 2441 0 obj << -/Names [(subsubsection.3.1.13) 95 0 R (subsubsection.3.1.14) 99 0 R (subsubsection.3.1.15) 103 0 R (subsubsection.3.1.2) 51 0 R (subsubsection.3.1.3) 55 0 R (subsubsection.3.1.4) 59 0 R] -/Limits [(subsubsection.3.1.13) (subsubsection.3.1.4)] +/Names [(subsection.9.5) 537 0 R (subsection.9.6) 541 0 R (subsubsection.2.3.1) 31 0 R (subsubsection.3.1.1) 47 0 R (subsubsection.3.1.10) 83 0 R (subsubsection.3.1.11) 87 0 R] +/Limits [(subsection.9.5) (subsubsection.3.1.11)] >> % 2442 0 obj << -/Names [(subsubsection.3.1.5) 63 0 R (subsubsection.3.1.6) 67 0 R (subsubsection.3.1.7) 71 0 R (subsubsection.3.1.8) 75 0 R (subsubsection.3.1.9) 79 0 R (subsubsection.3.2.1) 111 0 R] -/Limits [(subsubsection.3.1.5) (subsubsection.3.2.1)] +/Names [(subsubsection.3.1.12) 91 0 R (subsubsection.3.1.13) 95 0 R (subsubsection.3.1.14) 99 0 R (subsubsection.3.1.15) 103 0 R (subsubsection.3.1.2) 51 0 R (subsubsection.3.1.3) 55 0 R] +/Limits [(subsubsection.3.1.12) (subsubsection.3.1.3)] >> % 2443 0 obj << -/Names [(subsubsection.3.2.10) 147 0 R (subsubsection.3.2.11) 151 0 R (subsubsection.3.2.12) 155 0 R (subsubsection.3.2.13) 159 0 R (subsubsection.3.2.14) 163 0 R (subsubsection.3.2.15) 167 0 R] -/Limits [(subsubsection.3.2.10) (subsubsection.3.2.15)] +/Names [(subsubsection.3.1.4) 59 0 R (subsubsection.3.1.5) 63 0 R (subsubsection.3.1.6) 67 0 R (subsubsection.3.1.7) 71 0 R (subsubsection.3.1.8) 75 0 R (subsubsection.3.1.9) 79 0 R] +/Limits [(subsubsection.3.1.4) (subsubsection.3.1.9)] >> % 2444 0 obj << -/Names [(subsubsection.3.2.16) 171 0 R (subsubsection.3.2.17) 175 0 R (subsubsection.3.2.18) 179 0 R (subsubsection.3.2.19) 183 0 R (subsubsection.3.2.2) 115 0 R (subsubsection.3.2.3) 119 0 R] -/Limits [(subsubsection.3.2.16) (subsubsection.3.2.3)] +/Names [(subsubsection.3.2.1) 111 0 R (subsubsection.3.2.10) 147 0 R (subsubsection.3.2.11) 151 0 R (subsubsection.3.2.12) 155 0 R (subsubsection.3.2.13) 159 0 R (subsubsection.3.2.14) 163 0 R] +/Limits [(subsubsection.3.2.1) (subsubsection.3.2.14)] >> % 2445 0 obj << -/Names [(subsubsection.3.2.4) 123 0 R (subsubsection.3.2.5) 127 0 R (subsubsection.3.2.6) 131 0 R (subsubsection.3.2.7) 135 0 R (subsubsection.3.2.8) 139 0 R (subsubsection.3.2.9) 143 0 R] -/Limits [(subsubsection.3.2.4) (subsubsection.3.2.9)] +/Names [(subsubsection.3.2.15) 167 0 R (subsubsection.3.2.16) 171 0 R (subsubsection.3.2.17) 175 0 R (subsubsection.3.2.18) 179 0 R (subsubsection.3.2.19) 183 0 R (subsubsection.3.2.2) 115 0 R] +/Limits [(subsubsection.3.2.15) (subsubsection.3.2.2)] >> % 2446 0 obj << -/Names [(subsubsection.3.3.1) 191 0 R (subsubsection.3.3.2) 195 0 R (subsubsection.3.3.3) 199 0 R (subsubsection.3.3.4) 204 0 R (subsubsection.3.3.5) 208 0 R (subsubsection.3.3.6) 212 0 R] -/Limits [(subsubsection.3.3.1) (subsubsection.3.3.6)] +/Names [(subsubsection.3.2.3) 119 0 R (subsubsection.3.2.4) 123 0 R (subsubsection.3.2.5) 127 0 R (subsubsection.3.2.6) 131 0 R (subsubsection.3.2.7) 135 0 R (subsubsection.3.2.8) 139 0 R] +/Limits [(subsubsection.3.2.3) (subsubsection.3.2.8)] >> % 2447 0 obj << -/Names [(table.1) 1129 0 R (table.10) 1277 0 R (table.11) 1286 0 R (table.12) 1299 0 R (table.13) 1318 0 R (table.14) 1346 0 R] -/Limits [(table.1) (table.14)] +/Names [(subsubsection.3.2.9) 143 0 R (subsubsection.3.3.1) 191 0 R (subsubsection.3.3.2) 195 0 R (subsubsection.3.3.3) 199 0 R (subsubsection.3.3.4) 204 0 R (subsubsection.3.3.5) 208 0 R] +/Limits [(subsubsection.3.2.9) (subsubsection.3.3.5)] >> % 2448 0 obj << -/Names [(table.15) 1363 0 R (table.16) 1377 0 R (table.17) 1392 0 R (table.18) 1420 0 R (table.19) 1456 0 R (table.2) 1175 0 R] -/Limits [(table.15) (table.2)] +/Names [(subsubsection.3.3.6) 212 0 R (table.1) 1129 0 R (table.10) 1277 0 R (table.11) 1286 0 R (table.12) 1299 0 R (table.13) 1318 0 R] +/Limits [(subsubsection.3.3.6) (table.13)] >> % 2449 0 obj << -/Names [(table.20) 1468 0 R (table.21) 1999 0 R (table.22) 2144 0 R (table.3) 1192 0 R (table.4) 1204 0 R (table.5) 1218 0 R] -/Limits [(table.20) (table.5)] +/Names [(table.14) 1346 0 R (table.15) 1363 0 R (table.16) 1377 0 R (table.17) 1392 0 R (table.18) 1420 0 R (table.19) 1456 0 R] +/Limits [(table.14) (table.19)] >> % 2450 0 obj << -/Names [(table.6) 1226 0 R (table.7) 1239 0 R (table.8) 1252 0 R (table.9) 1270 0 R (title.0) 3 0 R (vbasedata) 1061 0 R] -/Limits [(table.6) (vbasedata)] +/Names [(table.2) 1175 0 R (table.20) 1468 0 R (table.21) 2000 0 R (table.22) 2145 0 R (table.3) 1192 0 R (table.4) 1204 0 R] +/Limits [(table.2) (table.4)] >> % 2451 0 obj << -/Names [(vdata) 1116 0 R] -/Limits [(vdata) (vdata)] +/Names [(table.5) 1218 0 R (table.6) 1226 0 R (table.7) 1239 0 R (table.8) 1252 0 R (table.9) 1270 0 R (title.0) 3 0 R] +/Limits [(table.5) (title.0)] >> % 2452 0 obj << -/Kids [2345 0 R 2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R] -/Limits [(Doc-Start) (Item.125)] +/Names [(vbasedata) 1061 0 R (vdata) 1116 0 R] +/Limits [(vbasedata) (vdata)] >> % 2453 0 obj << -/Kids [2351 0 R 2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R] -/Limits [(Item.126) (Item.22)] +/Kids [2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R 2351 0 R] +/Limits [(Doc-Start) (Item.125)] >> % 2454 0 obj << -/Kids [2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R] -/Limits [(Item.23) (Item.55)] +/Kids [2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R] +/Limits [(Item.126) (Item.21)] >> % 2455 0 obj << -/Kids [2363 0 R 2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R] -/Limits [(Item.56) (Item.88)] +/Kids [2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R] +/Limits [(Item.22) (Item.54)] >> % 2456 0 obj << -/Kids [2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R 2375 0 R] -/Limits [(Item.89) (cite.Sparse03)] +/Kids [2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R] +/Limits [(Item.55) (Item.87)] >> % 2457 0 obj << -/Kids [2376 0 R 2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R] -/Limits [(cite.machiels) (lstlisting.-8)] +/Kids [2370 0 R 2371 0 R 2372 0 R 2373 0 R 2375 0 R 2376 0 R] +/Limits [(Item.88) (cite.RouXiaXu:11)] >> % 2458 0 obj << -/Kids [2382 0 R 2383 0 R 2384 0 R 2385 0 R 2386 0 R 2387 0 R] -/Limits [(lstlisting.-9) (page.107)] +/Kids [2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R 2382 0 R] +/Limits [(cite.Sparse03) (lstlisting.-7)] >> % 2459 0 obj << -/Kids [2388 0 R 2389 0 R 2390 0 R 2391 0 R 2392 0 R 2393 0 R] -/Limits [(page.108) (page.14)] +/Kids [2383 0 R 2384 0 R 2385 0 R 2386 0 R 2387 0 R 2388 0 R] +/Limits [(lstlisting.-8) (page.106)] >> % 2460 0 obj << -/Kids [2394 0 R 2395 0 R 2396 0 R 2397 0 R 2398 0 R 2399 0 R] -/Limits [(page.140) (page.172)] +/Kids [2389 0 R 2390 0 R 2391 0 R 2392 0 R 2393 0 R 2394 0 R] +/Limits [(page.107) (page.139)] >> % 2461 0 obj << -/Kids [2400 0 R 2401 0 R 2402 0 R 2403 0 R 2404 0 R 2405 0 R] -/Limits [(page.173) (page.39)] +/Kids [2395 0 R 2396 0 R 2397 0 R 2398 0 R 2399 0 R 2400 0 R] +/Limits [(page.14) (page.171)] >> % 2462 0 obj << -/Kids [2406 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R] -/Limits [(page.4) (page.71)] +/Kids [2401 0 R 2402 0 R 2403 0 R 2404 0 R 2405 0 R 2406 0 R] +/Limits [(page.172) (page.38)] >> % 2463 0 obj << -/Kids [2412 0 R 2413 0 R 2414 0 R 2415 0 R 2416 0 R 2417 0 R] -/Limits [(page.72) (section*.1)] +/Kids [2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2412 0 R] +/Limits [(page.39) (page.70)] >> % 2464 0 obj << -/Kids [2418 0 R 2419 0 R 2420 0 R 2421 0 R 2422 0 R 2423 0 R] -/Limits [(section*.10) (subsection.10.1)] +/Kids [2413 0 R 2414 0 R 2415 0 R 2416 0 R 2417 0 R 2418 0 R] +/Limits [(page.71) (precdata)] >> % 2465 0 obj << -/Kids [2424 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R] -/Limits [(subsection.10.2) (subsection.4.6)] +/Kids [2419 0 R 2420 0 R 2421 0 R 2422 0 R 2423 0 R 2424 0 R] +/Limits [(section*.1) (spdata)] >> % 2466 0 obj << -/Kids [2430 0 R 2431 0 R 2432 0 R 2433 0 R 2434 0 R 2435 0 R] -/Limits [(subsection.4.7) (subsection.7.10)] +/Kids [2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R 2430 0 R] +/Limits [(subsection.10.1) (subsection.4.5)] >> % 2467 0 obj << -/Kids [2436 0 R 2437 0 R 2438 0 R 2439 0 R 2440 0 R 2441 0 R] -/Limits [(subsection.7.11) (subsubsection.3.1.4)] +/Kids [2431 0 R 2432 0 R 2433 0 R 2434 0 R 2435 0 R 2436 0 R] +/Limits [(subsection.4.6) (subsection.7.1)] >> % 2468 0 obj << -/Kids [2442 0 R 2443 0 R 2444 0 R 2445 0 R 2446 0 R 2447 0 R] -/Limits [(subsubsection.3.1.5) (table.14)] +/Kids [2437 0 R 2438 0 R 2439 0 R 2440 0 R 2441 0 R 2442 0 R] +/Limits [(subsection.7.10) (subsubsection.3.1.3)] >> % 2469 0 obj << -/Kids [2448 0 R 2449 0 R 2450 0 R 2451 0 R] -/Limits [(table.15) (vdata)] +/Kids [2443 0 R 2444 0 R 2445 0 R 2446 0 R 2447 0 R 2448 0 R] +/Limits [(subsubsection.3.1.4) (table.13)] >> % 2470 0 obj << -/Kids [2452 0 R 2453 0 R 2454 0 R 2455 0 R 2456 0 R 2457 0 R] -/Limits [(Doc-Start) (lstlisting.-8)] +/Kids [2449 0 R 2450 0 R 2451 0 R 2452 0 R] +/Limits [(table.14) (vdata)] >> % 2471 0 obj << -/Kids [2458 0 R 2459 0 R 2460 0 R 2461 0 R 2462 0 R 2463 0 R] -/Limits [(lstlisting.-9) (section*.1)] +/Kids [2453 0 R 2454 0 R 2455 0 R 2456 0 R 2457 0 R 2458 0 R] +/Limits [(Doc-Start) (lstlisting.-7)] >> % 2472 0 obj << -/Kids [2464 0 R 2465 0 R 2466 0 R 2467 0 R 2468 0 R 2469 0 R] -/Limits [(section*.10) (vdata)] +/Kids [2459 0 R 2460 0 R 2461 0 R 2462 0 R 2463 0 R 2464 0 R] +/Limits [(lstlisting.-8) (precdata)] >> % 2473 0 obj << -/Kids [2470 0 R 2471 0 R 2472 0 R] -/Limits [(Doc-Start) (vdata)] +/Kids [2465 0 R 2466 0 R 2467 0 R 2468 0 R 2469 0 R 2470 0 R] +/Limits [(section*.1) (vdata)] >> endstream endobj -2477 0 obj +2478 0 obj << /Title (Parallel Sparse BLAS V. 3.9.0) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id$) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() -/CreationDate (D:20250930190717+02'00') -/ModDate (D:20250930190717+02'00') +/CreationDate (D:20251008095233+02'00') +/ModDate (D:20251008095233+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> @@ -38819,66 +38881,71 @@ endobj 2475 0 obj << /Type /ObjStm -/N 2 -/First 15 -/Length 263 +/N 3 +/First 24 +/Length 356 >> stream -2474 0 2476 35 +2474 0 2476 84 2477 119 % 2474 0 obj << -/Dests 2473 0 R +/Kids [2471 0 R 2472 0 R 2473 0 R] +/Limits [(Doc-Start) (vdata)] >> % 2476 0 obj << +/Dests 2474 0 R +>> +% 2477 0 obj +<< /Type /Catalog -/Pages 2341 0 R -/Outlines 2343 0 R -/Names 2474 0 R +/Pages 2342 0 R +/Outlines 2344 0 R +/Names 2476 0 R /URI (http://ce.uniroma2.it/psblas) /PageMode/UseOutlines/PageLabels<>2<>6<>]>> /OpenAction 677 0 R >> endstream endobj -2478 0 obj +2479 0 obj << /Type /XRef -/Index [0 2479] -/Size 2479 +/Index [0 2480] +/Size 2480 /W [1 3 1] -/Root 2476 0 R -/Info 2477 0 R -/ID [<74AF8409D9443F34D74B521E914F839E> <74AF8409D9443F34D74B521E914F839E>] -/Length 12395 ->> -stream -˙]) (Gz& (Fz3 (Ez> (DzF (C  -zR (B  z[ (A Ó (@Ó (?Ó$ (>Ó% (=ÓE (<ÓF (;ÓG (:ÓH (9ÓL (8 ÓM (7!"ÓN (6#$ÓR (5%&ÓS (4'(ÓU (3)*ÓV (2+,ÓZ (1-.Ó[ (0/0Ó\ (/12Óc (.344 (-564 (,784 (+9:4  (*;<4  ()=>4 ((?@4 ('AB4 (&CD4 (%EF4 ($GH4 (#IJ4 ("KL4 (!MN4% ( OP4& (QR4' (ST4+ (UV41 (WX42 (YZ43 ([\44 (]^4: (_`4; (ab4< (cË>\4B (ËË4G (ËË4H (ËË4I (ËË4P (Ë Ë -4T (Ë Ë 4^ (Ë ËŤ - (ËËŤ ( ËËŤ% ( ËËŤ1 ( ËËŤ9 ( -ËËŤE ( ËËŤP (ËËŤa (ËËţ (ËË ţ  (Ë!Ë"ţ (Ë#Ë$ţ( (Ë%Ë&ţC (Ë'Ë(ţP (Ë)Ë*ţ_ (Ë+Ë,g &cË-Ë.g &bË/Ë0g &aË1Ë2g= &`Ë3Ë4gF &_Ë5Ë6gQ &^Ë7Ë8gR &]Ë9Ë:Ţ &\Ë;Ë<Ţ &[Ë=Ë>Ţ &ZË?Ë@Ţ &YËAËBŢ$ &XËCËDŢ/ &WËEËFŢ: &VËGËHŢU &UËIËJL &TËKËLL &SËMËNL &RËOËPL &QËQËRL$ &PËSËTL, &OËUËVL0 &NËWËXL5 &MËYËZL? &LË[Ë\LD &KË]Ë^LJ &JË_Ë`LP &IËaËbLV &HËc”|YL\ &G””Lc &F””· &E””· &D””· &C” ” -·( &B” ” ·, &A” ”·2 &@””·8 &?””·? &>””·C &=””·G &<””·K &;””·O &:””·S &9””·] &8”” " &7”!”""  &6”#”$" &5”%”&"! &4”'”("+ &3”)”*"7 &2”+”,"< &1”-”."C &0”/”0"L &/”1”2"R &.”3”4"X &-”5”6"^ &,”7”8’ &+”9”:’ &*”;”<’  &)”=”>’ &(”?”@’ &'”A”B’! &&”C”D’( &%”E”F’1 &$”G”H’8 &#”I”J’A &"”K”L’N &!”M”N’Z & ”O”P’_ &”Q”R’c &”S”Tý &”U”Vý  &”W”Xý &”Y”Zý &”[”\ý &”]”^ý4 &”_”`ýK &”a”býL &”c]ý{ýS &]]ýT &]]? &]]C &]]D &] ] -F &] ] J &] ]K &]]L & ]]M & ]]N & ]]O & -]]P & ]]Q &]]U &]]V &]] W &]!]"X &]#]$]%Áć]&]*ľ«]'](ă=ă?ă>ă@Ň’]-]+0],]/]0]1]2]3]4]5]6]7]8]9]:];]<]=]>]?]@]A]B]D]F]G]H]I]J]K]L]M]N]P]R]S]T]U]V]W]X]Y]Z][]`]^].ş]\]]]C]E]O]Q]a]b]c  +/Root 2477 0 R +/Info 2478 0 R +/ID [ ] +/Length 12400 +>> +stream +˙]) )Hz& )Gz3 )Fz> )EzF )D  +zR )C  z[ )B Ó )AÓ )@Ó$ )?Ó% )>ÓE )=ÓF )<ÓG );ÓH ):ÓL )9 ÓM )8!"ÓN )7#$ÓR )6%&ÓS )5'(ÓU )4)*ÓV )3+,ÓZ )2-.Ó[ )1/0Ó\ )012Óc )/344 ).564 )-784 ),9:4  )+;<4  )*=>4 ))?@4 )(AB4 )'CD4 )&EF4 )%GH4 )$IJ4 )#KL4 )"MN4% )!OP4& ) QR4' )ST4+ )UV41 )WX42 )YZ43 )[\44 )]^4: )_`4; )ab4< )cË>\4B )ËË4G )ËË4H )ËË4I )ËË4P )Ë Ë +4T )Ë Ë 4^ )Ë ËŤ + )ËËŤ )ËËŤ% ) ËËŤ1 ) ËËŤ9 ) ËËŤE ) +ËËŤP ) ËËŤa )ËËţ )ËË ţ  )Ë!Ë"ţ )Ë#Ë$ţ( )Ë%Ë&ţC )Ë'Ë(ţP )Ë)Ë*ţ_ )Ë+Ë,g )Ë-Ë.g 'cË/Ë0g 'bË1Ë2g= 'aË3Ë4gF '`Ë5Ë6gQ '_Ë7Ë8gR '^Ë9Ë:Ţ ']Ë;Ë<Ţ '\Ë=Ë>Ţ '[Ë?Ë@Ţ 'ZËAËBŢ$ 'YËCËDŢ/ 'XËEËFŢ: 'WËGËHŢU 'VËIËJL 'UËKËLL 'TËMËNL 'SËOËPL 'RËQËRL$ 'QËSËTL, 'PËUËVL0 'OËWËXL5 'NËYËZL? 'MË[Ë\LD 'LË]Ë^LJ 'KË_Ë`LP 'JËaËbLV 'IËc”|YL\ 'H””Lc 'G””· 'F””· 'E””· 'D” ” +·) 'C” ” ·- 'B” ”·3 'A””·9 '@””·@ '?””·D '>””·H '=””·L '<””·P ';””·T ':””·^ '9”” # '8”!”"# '7”#”$# '6”%”&#" '5”'”(#, '4”)”*#8 '3”+”,#= '2”-”.#D '1”/”0#M '0”1”2#S '/”3”4#Y '.”5”6#_ '-”7”8“ ',”9”:“ '+”;”<“  '*”=”>“ ')”?”@“ '(”A”B“" ''”C”D“) '&”E”F“2 '%”G”H“9 '$”I”J“B '#”K”L“O '"”M”N“[ '!”O”P“` ' ”Q”Rţ '”S”Tţ '”U”Vţ '”W”Xţ '”Y”Zţ '”[”\ţ '”]”^ţ5 '”_”`ţL '”a”bţM '”c]ý{ţT ']]ţU ']]€@ ']]€D ']]€E '] ] +€G '] ] €K '] ]€L ']]€M ']]€N ' ]]€O ' ]]€P ' ]]€Q ' +]]€R ' ]]€V ']]€W ']] €X ']!]"€Y ']#]$]%Áć]&]*ľ«]'](ä>ä@ä?äAŇ’]-]+0],]/]0]1]2]3]4]5]6]7]8]9]:];]<]=]>]?]@]A]B]D]F]G]H]I]J]K]L]M]N]P]R]S]T]U]V]W]X]Y]Z][]`]^].ş]\]]]C]E]O]Q]a]b]c      !"#$%&'()*.,]_żL+¶Ń/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTVWY[`^-4]UXZ\bzzzzzzzzz z -z z z zzzzzzzzzzzzzzzzzzz z!z"z$_}!z#aczÎJz'z%÷TăAz)z*z+z,z-z.z/z0z1z2z4z(Ĺăăăăăăăă ăăz:z;z<BÍzBz@z5+Łz=z?z6z7z8z9GăzCzDzIzAS&zEă8ă7ă6zGzHă zNzOŚŻzSzJwúzPzQzKzLzMcbzUzVzXzT“YzWÓÓzY¨^zZz\z]z^z_z`zazbzcăBŹÓÓÓ4ÓÓÓÓÓÓÓ Ó -Ó Ó Ó ÓÓÓÓÓă9ÓÓ Ó&ŹÓÓÓÓÓÓÓÓ"Ó'Ó!EoÓ#Ó&Ó)Ó*Ó+Ó2Ó(gęÓ,Ó-Ó.Ó/Ó0Ó1Ó4Ó5Ó@Ó3:Ó6Ó7Ó8Ó9Ó:Ó;Ó<Ó=Ó>ă:Ó?ÓBÓCÓIÓAťďÓDăCÓOÓJ˛IÓKÓWÓPÄÓQÓTÓ]ÓX×çÓYÓ_Ó`Óa4Ó^îćÓb4ă 4^ŕ4 444444 -T54 4ăD44d444v44"4Ž44 4!4(4#˘4$4,4)´°4*4.4/464-Ît4045ăE494=47í˘484?4@4C4>4A4_4E4M4K4Dí4F4J4O4Q4L$ç4N4U4R6)4S4W4X4Y4Z4[4\4b4`4V74]ă<ăF4cŤŤ4aU!Ť°±ŤŤŤŤŤŤ Ť…FŤ Ť ŤŤŤ ¤ŤŤŤŤŤŤŤŤŤŤµ»ŤŤŤŤŘĽŤŤ!Ť"Ť#Ť'Ť Ű>Ť$Ť&ăGŤ+Ť(úxŤ)Ť*Ť-Ť.Ť/Ť3Ť,ńŤ0Ť2Ť5Ť6Ť7Ť;Ť4 †Ť8Ť:Ť?Ť<>XŤ=Ť>ŤAŤBŤCŤGŤ@J׍DŤFŤJŤHhĎŤIăHŤLŤMŤNŤRŤKkRŤOŤQŤ[ŤS…ňŤTŤUŤVŤWŤXŤYŤZŤ]Ť^Ť_ŤcŤ\—ÍŤ`ŤbţţţţŢNţţ÷eţţ ţ ţóźţ -ă;ţ ţţţţţţţţţţţţţăIţţţţţ ţ!ţ"ţ$ţ(żţ#ţ&ţ,ţ*ţ%C1ţ'ţ)ţ-ţ.ţ/ţ0ţ1ţ2ţ4ţ+c5ţ3ţ6ţ7ţ9ţ5€›ţ8ţ;ţ<ţ=ţ>ţ?ţ@ţAţEţ:’řţBţDţHţF±^ţGăJţJţKţLţMţNţTţUţRţI˛ÓţOţQţWţSŃ$ţVţYţZţ[ţ\ţ]ţaţXÖ ţ^ţ`ţcgţbô™gHggggg -g*¤gg R[ggg E“ggăKg g gggg`¶”%ggÁ˝ggggg!gÍăgg g#Ęg$g%g*g"ěĹg&g'g(g)g6g-g+0g,g7g.Lg5g/g0g1g2g3g4"hU×g9g:g;g?g8og<g>ăLgBg@ĄNgAgDgJgHgC«gEgGgKgLgNgIÉgMgSgOŮDgPgUgXgTóŻgVgWgZg]gYŽg[ă5g\ăMŢg^<-g_g`gagbgcކfŢŢŢwîŢŢŢ Ţ”@Ţ Ţ -Ţ Ţ ŢŢŢŢ ŢŢŢŢŢ޸ďŢŢŢŢĹžŢăNŢ!Ţ"Ţ%Ţ ÎTŢ#Ţ*Ţ&ĺ×Ţ'Ţ(Ţ)Ţ,Ţ-Ţ1Ţ+ěčŢ.Ţ0Ţ7Ţ2dŢ3Ţ4Ţ5Ţ6Ţ=Ţ;Ţ8 şŢ9Ţ>Ţ?ŢFŢ<iŢ@ŢAŢBŢCŢDŢEăOŢOŢGLBLFLA_ëLCLELHLLLGmLILKLNLRLM+LOLQăRLTLXLSŽ3LULWLZL_LY˘OL[L]L^La·L`±GLb··!Đ···é +z z z zzzzzzzzzzzzzzzzzzz z!z"z$_}!z#aczÎJz'z%÷TäBz)z*z+z,z-z.z/z0z1z2z4z(Ĺääääääääääz:z;z<BÍzBz@z5+Łz=z?z6z7z8z9GäzCzDzIzAS&zEä9ä8ä7zGzHä zNzOŚŻzSzJwúzPzQzKzLzMä€czUzVzXzT“YzWÓÓzY¨^zZz\z]z^z_z`zazbzcäCŹÓÓÓ4ÓÓÓÓÓÓÓ Ó +Ó Ó Ó ÓÓÓÓÓä:ÓÓ Ó&ŹÓÓÓÓÓÓÓÓ"Ó'Ó!EoÓ#Ó&Ó)Ó*Ó+Ó2Ó(gęÓ,Ó-Ó.Ó/Ó0Ó1Ó4Ó5Ó@Ó3:Ó6Ó7Ó8Ó9Ó:Ó;Ó<Ó=Ó>ä;Ó?ÓBÓCÓIÓAťďÓDäDÓOÓJ˛IÓKÓWÓPÄÓQÓTÓ]ÓX×çÓYÓ_Ó`Óa4Ó^îćÓb4ä 4^ŕ4 444444 +T54 4äE44d444v44"4Ž44 4!4(4#˘4$4,4)´°4*4.4/464-Ît4045äF494=47í˘484?4@4C4>4A4_4E4M4K4Dí4F4J4O4Q4L$ç4N4U4R6)4S4W4X4Y4Z4[4\4b4`4V74]ä=äG4cŤŤ4aU!Ť°±ŤŤŤŤŤŤ Ť…FŤ Ť ŤŤŤ ¤ŤŤŤŤŤŤŤŤŤŤµ»ŤŤŤŤŘĽŤŤ!Ť"Ť#Ť'Ť Ű>Ť$Ť&äHŤ+Ť(úxŤ)Ť*Ť-Ť.Ť/Ť3Ť,ńŤ0Ť2Ť5Ť6Ť7Ť;Ť4 †Ť8Ť:Ť?Ť<>XŤ=Ť>ŤAŤBŤCŤGŤ@J׍DŤFŤJŤHhĎŤIäIŤLŤMŤNŤRŤKkRŤOŤQŤ[ŤS…ňŤTŤUŤVŤWŤXŤYŤZŤ]Ť^Ť_ŤcŤ\—ÍŤ`ŤbţţţţŢNţţ÷eţţ ţ ţóźţ +ä<ţ ţţţţţţţţţţţţţäJţţţţţ ţ!ţ"ţ$ţ(żţ#ţ&ţ,ţ*ţ%C1ţ'ţ)ţ-ţ.ţ/ţ0ţ1ţ2ţ4ţ+c5ţ3ţ6ţ7ţ9ţ5€›ţ8ţ;ţ<ţ=ţ>ţ?ţ@ţAţEţ:’řţBţDţHţF±^ţGäKţJţKţLţMţNţTţUţRţI˛ÓţOţQţWţSŃ$ţVţYţZţ[ţ\ţ]ţaţXÖ ţ^ţ`ţcgţbô™gHggggg +g*¤gg R[ggg E“ggäLg g gggg`¶”%ggÁ˝ggggg!gÍăgg g#Ęg$g%g*g"ěĹg&g'g(g)g6g-g+0g,g7g.Lg5g/g0g1g2g3g4"hU×g9g:g;g?g8og<g>äMgBg@ĄNgAgDgJgHgC«gEgGgKgLgNgIÉgMgSgOŮDgPgUgXgTóŻgVgWgZg]gYŽg[ä6g\äNŢg^<-g_g`gagbgcކfŢŢŢwîŢŢŢ Ţ”@Ţ Ţ +Ţ Ţ ŢŢŢŢ ŢŢŢŢŢ޸ďŢŢŢŢĹžŢäOŢ!Ţ"Ţ%Ţ ÎTŢ#Ţ*Ţ&ĺ×Ţ'Ţ(Ţ)Ţ,Ţ-Ţ1Ţ+ěčŢ.Ţ0Ţ7Ţ2dŢ3Ţ4Ţ5Ţ6Ţ=Ţ;Ţ8 şŢ9Ţ>Ţ?ŢFŢ<iŢ@ŢAŢBŢCŢDŢEäPŢOŢGLBLFLA_ëLCLELHLLLGmLILKLNLRLM+LOLQäSLTLXLSŽ3LULWLZL_LY˘OL[L]L^La·L`±GLb··!+†···é ·· ·ţŕ· · -· · ····· ę·ăS·· ę··%· 6í······· ·!·"·#·$·)·& \‹·'·/·* ]t·+·-·.·5·0 xf·1·3·4·<·6 ‹%·7·9·:·;ăT·@·= śý·>·D·A §i·B·H·E ´Ý·F·L·I ą­·J·P·M ż¤·N·T·Q Äč·RăU·Z·U ÜÖ·V·W·X·Yă4·^·[ ń·\"·_! ň·`·a·b·c"ĽP""!Bµ"" -"!Zž"""" "" !o4" ăV""!‡q""""""!›°"""!´*"""""""!Č;" "("#!ŕ¶"$"%"&"'",")!ő"*ăW"4"-" %"."/"0ă3"1"2"3"9"5"'"6"8">":"=@";"="@"A"D"?"S{"B"G"H"I"E"nŽ"F"O"J"—f"K"M"NăX"U"P"Ą‘"Q"S"T"["V"«1"W"Y"Z"a"\"±ť"]"_"`’"b"ąü"c$ě’’’"áÉ’’’’ -’’ "ô–’ ’ ’ăY’’’#ô’’’’’’#•’’’’’$’#(Ű’ ’"’#’&’+’%#F’'’)’*’.’,#c°’-’2’/#f}’0ăZ’4’5’6’:’3#l1’7’9’F’<’=’>’?’D’B’;#€+’@’G’C#‘o’Ea’I’J’K’L’O’H#Ć˙’M’R’P#ĺ(’Q’T’U’V’W’X’[’S#éŇ’Yă[’]’`’\$’^ý’a$â’b%’Ëýýýý$>ůýýý ý -ý ýý$IŃý ýýýýý$aéýýý$n ýă\ýýý%ý#ý$q<ýýý ý!ý"ý&ý'ý(ý*ý$$’‹ý)ý,ý.ý+$®Íý-ý0ý1ý2ý:ý8ý/$Ŕîý3ý5ý6ý7ý;ý<ý>ý9$ăbý=ýAý?$ţ5ý@ă]ýCýEýFýGýHýIýMýB%´ýJýDăăýOýP%Z-ýQ%|ý[ýWýN%"ÝýRýUýVăý]ýaýX%G ý\ý^ý_ý`ýYýZ%iGýb%jÄ  -   ýc%Ââ'v %Ăę%Äŕ%Ĺę%äÄ&ó %íö&w&&Ž&,J*,&kb(.!&K )+-ă^"#$%&&vk'&wg&xw&’&ĂN69/&ťG7801&Љ234&Ńú5&Ňö&Ô&ń!<:&ţb;@='č>GA'!ćBERH'8÷IYS'NlTă_\Z'YN[ă]'YÜ^_`ăă*Îăă 'ĄBă -ăăăăăăăăăăă ă!ă2ă"ă#ă$'˝“ă%'Úră&'ţbă'(oă((;śă)(c”ă*(µfă+(Ć7ă,)Oă-) óă.)0Żă/)Źeă0)ő|ă1*CÓ*G˙*Ne*Tˇ*[š*cŮ*j*p\*v›*z-*~Ă*„Ĺ*ŠÇă`ăaăbăc & & &*Ů™ &+2 (H (I (J (K (L (M (N (O (P (Q (R (S (T (U (V (W (X (Y (Z ([ (\ (] (^ (_ (` (a (b (c F+/Ň F F F F F F F F F  F - F  F  F  F F F F F F F F F F F F F F F F F F F  F! F" F# F$ F% F& F' F( F) F* F+ F, F- F. F/ F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F: F; F< F= F> F? F@ FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ F[ F\ F] F^ F_ F` Fa Fb Fc «+}4 «+{+~• +· · ····· ę·äT·· ę··&· <»······· ·!·"·#·$·%·*·' jA·(·0·+ k*·,·.·/·6·1 †·2·4·5·=·7 Ű·8·:·;·<äU·A·> Şł·?·E·B µ·C·I·F “·G·M·J Çc·K·Q·N ÍZ·O·U·R Ňž·SäV·[·V ꌷW·X·Y·Zä5·_·\ ˙7·]#·`!¨·a·b·c#"Ę##!Px## #!ha### # +## !|÷# äW##!•4######!©s###!Áí####### !Őţ#!#)#$!îy#%#&#'#(#-#*"Ę#+äX#5#."č#/#0#1ä4#2#3#4#:#6"4Ô#7#9#?#;"K#<#>#A#B#E#@"a>#C#H#I#J#F"|Q#G#P#K"Ą)#L#N#OäY#V#Q"łT#R#T#U#\#W"¸ô#X#Z#[#b#]"ż`#^#`#a“#c"Çż“$!­““ “"“““ ““ +#W“ ““äZ“““#µ““““““#%V““““ “%“#6ś“!“#“$“'“,“&#TQ“(“*“+“/“-#qq“.“3“0#t>“1ä[“5“6“7“;“4#yň“8“:“G“=“>“?“@“E“C“<#Ťě“A“H“D#ź0“F€b“J“K“L“M“P“I#ÔŔ“N“S“Q#ňé“R“U“V“W“X“Y“\“T#÷““Zä\“^“a“]$Ä“_ţ“b$Ł“c%–>ţţţţ$L»ţţ ţ +ţ ţ ţţ$W“ţ ţţţţţ$o«ţţţ$|bţä]ţţţ&ţ$ţ$~ţţţ ţ!ţ"ţ#ţ'ţ(ţ)ţ+ţ%$ Mţ*ţ-ţ/ţ,$ĽŹţ.ţ1ţ2ţ3ţ;ţ9ţ0$ΰţ4ţ6ţ7ţ8ţ<ţ=ţ?ţ:$ń$ţ>ţBţ@% ÷ţAä^ţDţFţGţHţIţJţNţC%vţKţEääţPţQ%gďţR%ĹŘ€ţ\ţXţO%0źţSţVţWäţ^€ţbţY%TÍţ]ţ_ţ`ţaţZţ[%w €€ţc%x†€€ € +€ € € €€€€€€%Đ'€€'ĺ€%Ń/€%Ň%%Ó/%ň &8€€€€!€%ű;€€€ €€€€€&)Ľ€&*Ý&+Ó&9Ź€+€-&x§€)€/€"&Xe€*€,€.ä_€#€$€%€&€'&°€(&„¬&…Ľ&źY&Đ“€7€:€0&ŞŚ€8€9€1€2&Ý΀3€4€5&ß?€6&ŕ;&á[&ţf€=€;' §€<€A€>'-€?€H€B'/+€C€F€S€I'F<€J€Z€T'[±€Uä`€]€['f“€\ä €^'g!€_€`€aää*ž’ää +'łä ääääääääää ä!ä"ä3ä#ä$ä%'ËWä&'č6ä'( &ä((*3ä)(I`ä*(qXä+(Ă*ä,(Óűä-)ä.).·ä/)>sä0)ť)ä1*@ä2*Q—*UĂ*\)*be*i^*qť*wá*~ *„_*‡ń*ڇ*’‰*‹äaäbäc ' ' ' '*ç '+ ˛ )I )J )K )L )M )N )O )P )Q )R )S )T )U )V )W )X )Y )Z )[ )\ )] )^ )_ )` )a )b )c F+<ĺ F F F F F F F F F  F + F  F  F  F F F F F F F F F F F F F F F F F F F  F! F" F# F$ F% F& F' F( F) F* F+ F, F- F. F/ F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F: F; F< F= F> F? F@ FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ F[ F\ F] F^ F_ F` Fa Fb Fc «+ŠË « «+Ş+ډ endstream endobj startxref -2850453 +2854025 %%EOF diff --git a/docs/src/toolsrout.tex b/docs/src/toolsrout.tex index d58faadcb..d43af7268 100644 --- a/docs/src/toolsrout.tex +++ b/docs/src/toolsrout.tex @@ -1791,10 +1791,10 @@ Returned as: an \verb|integer(psb_long_int_k_)| number. {\par\noindent\large\bfseries psb\_hsort --- Sorting by the Heapsort algorithm} \begin{verbatim} -call psb_isort(x,ix,dir,flag) -call psb_msort(x,ix,dir,flag) -call psb_qsort(x,ix,dir,flag) -call psb_hsort(x,ix,dir,flag) +call psb_isort(x,ix,dir,flag,reord) +call psb_msort(x,ix,dir,flag,reord) +call psb_qsort(x,ix,dir,flag,reord) +call psb_hsort(x,ix,dir,flag,reord) \end{verbatim} These serial routines sort a sequence $X$ into ascending or @@ -1809,7 +1809,8 @@ Type:{\bf required}.\\ Specified as: an integer, real or complex array of rank 1. \item[ix] A vector of indices.\\ Type:{\bf optional}.\\ -Specified as: an integer array of (at least) the same size as $X$. +Specified as: an integer array of (at least) the same size as +$X$. This argument is required when $reord=psb\_sort\_noreord\_x\_$. \item[dir] The desired ordering.\\ Type:{\bf optional}.\\ Specified as: an integer value: \begin{description} @@ -1824,18 +1825,24 @@ default \verb|psb_lsort_up_|. Type:{\bf optional}.\\ Specified as: an integer value \verb|psb_sort_ovw_idx_| or \verb|psb_sort_keep_idx_|; default \verb|psb_sort_ovw_idx_|. +\item[reord] Whether to reorder the input vector $x$ or just return + $IX$ for further usage.\\ +Type:{\bf optional}.\\ +Specified as: an integer value \verb|psb_sort_reord_x_| or +\verb|psb_sort_noreord_x_|; default \verb|psb_sort_reord_x_|. \end{description} \begin{description} \item[\bf On Return] -\item[x] The sequence of values, in the chosen ordering.\\ +\item[x] The sequence of values; if \verb|reord=psb_sort_reord_x_| it + will be in the chosen ordering.\\ Type:{\bf required}.\\ Specified as: an integer, real or complex array of rank 1. \item[ix] A vector of indices.\\ Type: {\bf Optional} \\ -An integer array of rank 1, whose entries are moved to the same -position as the corresponding entries in $x$. +An integer array of rank 1, whose $i$-th entry gives the position of +the (sorted) value of $x$ in the original sequence. \end{description} {\goodbreak\par\noindent\large\bfseries Notes} @@ -1850,7 +1857,10 @@ position as the corresponding entries in $x$. equal value) in the original input. With the insertion-sort or merge-sort algorithms ties are preserved in the same relative order as they had in the original sequence, while this is not guaranteed for quicksort or - heapsort; + heapsort; +\item If $reord=psb\_sort\_noreord\_x\_$, then the input sequence $x$ + is not reordered; the output is given in $ix$. Calling without $ix$ + in this case is flagged as an error; \item If $flag = psb\_sort\_ovw\_idx\_$ then the entries in $ix(1:n)$ where $n$ is the size of $x$ are initialized to $ix(i) \leftarrow i$; thus, upon return from the subroutine, for each diff --git a/test/openacc/Makefile b/test/openacc/Makefile index 5b69c2d65..b62373f26 100644 --- a/test/openacc/Makefile +++ b/test/openacc/Makefile @@ -14,7 +14,7 @@ LDLIBS=$(PSBGPULDLIBS) FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG)$(INCDIR) $(FMFLAG). $(FMFLAG)$(PSBMODDIR) $(FMFLAG)$(PSBINCDIR) $(LIBRSB_DEFINES) -FFLAGS=-O3 -march=native -fopenacc -foffload=nvptx-none="-march=sm_75" +FFLAGS=-O3 -march=native $(FCOPENACC) -DOPENACC CFLAGS=-O3 -march=native VTC=vectoacc.o @@ -47,9 +47,8 @@ psb_d_oacc_pde3d: $(FLINK) -fopenacc -DOPENACC psb_d_oacc_pde3d.o -o psb_d_oacc_pde3d $(PSBLAS_LIB) $(LDLIBS) /bin/mv psb_d_oacc_pde3d $(EXEDIR) -dpdegenmv: - mpifort -fallow-argument-mismatch -frecursive -g -O3 -frecursive -I../../modules/ -I. -DOPENACC -DHAVE_LAPACK -DHAVE_FLUSH_STMT -DLPK8 -DIPK4 -DMPI_MOD -c dpdegenmv.F90 -o dpdegenmv.o - $(FLINK) -fopenacc -DOPENACC dpdegenmv.o -o dpdegenmv $(PSBLAS_LIB) $(LDLIBS) +dpdegenmv: dpdegenmv.o + $(FLINK) $(FCOPENACC) dpdegenmv.o -o dpdegenmv $(PSBLAS_LIB) $(LDLIBS) /bin/mv dpdegenmv $(EXEDIR) clean: diff --git a/test/openacc/runs/ppde.inp b/test/openacc/runs/ppde.inp deleted file mode 100644 index f6a0cff39..000000000 --- a/test/openacc/runs/ppde.inp +++ /dev/null @@ -1,19 +0,0 @@ -17 Number of entries below this -BICGSTAB Iterative method BICGSTAB CGS BICG BICGSTABL RGMRES FCG CGR RICHARDSON -BJAC Preconditioner NONE DIAG BJAC -CSR Storage format for matrix A: CSR COO -HLL Storage format for matrix A: CSR COO -140 Domain size (acutal system is this**3 (pde3d) or **2 (pde2d) ) -3 Partition: 1 BLOCK 3 3D -2 Stopping criterion 1 2 -0200 MAXIT -10 ITRACE -002 IRST restart for RGMRES and BiCGSTABL -INVK Block Solver ILU,ILUT,INVK,INVT,AINV -NONE If ILU : MILU or NONE othewise ignored -NONE Scaling if ILUT: NONE, MAXVAL otherwise ignored -0 Level of fill for forward factorization -1 Level of fill for inverse factorization (only INVK,INVT) -1E-1 Threshold for forward factorization -1E-1 Threshold for inverse factorization (Only INVK, INVT) -LLK What orthogonalization algorithm? (Only AINV) From d757c9f1faaba4fb046c33f95eb5eadd0799b12e Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 8 Oct 2025 16:47:16 +0200 Subject: [PATCH 031/175] Show EXTRA_OPT in screen log --- configure | 4 ++++ configure.ac | 2 ++ 2 files changed, 6 insertions(+) diff --git a/configure b/configure index ef5867a5a..ad040b1ab 100755 --- a/configure +++ b/configure @@ -13064,6 +13064,8 @@ fi FCOPT : ${FCOPT} CCOPT : ${CCOPT} + EXTRA_OPT : ${EXTRA_OPT} + CUDA : ${PSB_HAVE_CUDA} CUDA_CC : ${pac_cv_cudacc} @@ -13102,6 +13104,8 @@ printf "%s\n" "$as_me: FCOPT : ${FCOPT} CCOPT : ${CCOPT} + EXTRA_OPT : ${EXTRA_OPT} + CUDA : ${PSB_HAVE_CUDA} CUDA_CC : ${pac_cv_cudacc} diff --git a/configure.ac b/configure.ac index ad5e573f4..c2eade583 100644 --- a/configure.ac +++ b/configure.ac @@ -1142,6 +1142,8 @@ AC_MSG_NOTICE([ FCOPT : ${FCOPT} CCOPT : ${CCOPT} + EXTRA_OPT : ${EXTRA_OPT} + CUDA : ${PSB_HAVE_CUDA} CUDA_CC : ${pac_cv_cudacc} From 8f09b4be344936b0237d526da827dbc219e4cd88 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Sun, 12 Oct 2025 17:34:17 +0200 Subject: [PATCH 032/175] Work around OpenMPI issue with mpi_get_attr --- base/modules/penv/psi_penv_mod.F90 | 88 ++++++++++-------------------- 1 file changed, 28 insertions(+), 60 deletions(-) diff --git a/base/modules/penv/psi_penv_mod.F90 b/base/modules/penv/psi_penv_mod.F90 index 320df9417..f810863c1 100644 --- a/base/modules/penv/psi_penv_mod.F90 +++ b/base/modules/penv/psi_penv_mod.F90 @@ -188,33 +188,33 @@ module psi_penv_mod include 'mpif.h' #endif - integer(psb_mpk_), parameter :: psb_apk_ = mpi_address_kind - - integer(psb_mpk_), parameter :: psb_tag_space = 200 - - integer(psb_mpk_), save :: psb_int_tag - integer(psb_mpk_), save :: psb_real_tag - integer(psb_mpk_), save :: psb_double_tag - integer(psb_mpk_), save :: psb_complex_tag - integer(psb_mpk_), save :: psb_dcomplex_tag - integer(psb_mpk_), save :: psb_logical_tag - integer(psb_mpk_), save :: psb_char_tag - integer(psb_mpk_), save :: psb_int8_tag - integer(psb_mpk_), save :: psb_int2_tag - integer(psb_mpk_), save :: psb_int4_tag - integer(psb_mpk_), save :: psb_long_tag - integer(psb_mpk_), save :: psb_max_simple_tag - integer(psb_mpk_), save :: psb_int_swap_tag - integer(psb_mpk_), save :: psb_real_swap_tag - integer(psb_mpk_), save :: psb_double_swap_tag - integer(psb_mpk_), save :: psb_complex_swap_tag - integer(psb_mpk_), save :: psb_dcomplex_swap_tag - integer(psb_mpk_), save :: psb_logical_swap_tag - integer(psb_mpk_), save :: psb_char_swap_tag - integer(psb_mpk_), save :: psb_int8_swap_tag - integer(psb_mpk_), save :: psb_int2_swap_tag - integer(psb_mpk_), save :: psb_int4_swap_tag - integer(psb_mpk_), save :: psb_long_swap_tag + integer(psb_mpk_), parameter :: psb_apk_ = mpi_address_kind + + integer(psb_mpk_), parameter :: psb_tag_space = 200 + integer(psb_mpk_), parameter :: psb_tag_base = 512 + integer(psb_mpk_), parameter :: psb_int_tag = psb_tag_base + 1 + integer(psb_mpk_), parameter :: psb_real_tag = psb_int_tag + 1 + integer(psb_mpk_), parameter :: psb_double_tag = psb_real_tag + 1 + integer(psb_mpk_), parameter :: psb_complex_tag = psb_double_tag + 1 + integer(psb_mpk_), parameter :: psb_dcomplex_tag = psb_complex_tag + 1 + integer(psb_mpk_), parameter :: psb_logical_tag = psb_dcomplex_tag + 1 + integer(psb_mpk_), parameter :: psb_char_tag = psb_logical_tag + 1 + integer(psb_mpk_), parameter :: psb_int8_tag = psb_char_tag + 1 + integer(psb_mpk_), parameter :: psb_int2_tag = psb_int8_tag + 1 + integer(psb_mpk_), parameter :: psb_int4_tag = psb_int2_tag + 1 + integer(psb_mpk_), parameter :: psb_long_tag = psb_int4_tag + 1 + integer(psb_mpk_), parameter :: psb_max_simple_tag = psb_long_tag + 2 + integer(psb_mpk_), parameter :: psb_int_swap_tag = psb_max_simple_tag + 1 + integer(psb_mpk_), parameter :: psb_real_swap_tag = psb_int_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_double_swap_tag = psb_real_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_complex_swap_tag = psb_double_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_dcomplex_swap_tag = psb_complex_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_logical_swap_tag = psb_dcomplex_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_char_swap_tag = psb_logical_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_int8_swap_tag = psb_char_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_int2_swap_tag = psb_int8_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_int4_swap_tag = psb_int2_swap_tag + 1 + integer(psb_mpk_), parameter :: psb_long_swap_tag = psb_int4_swap_tag + 1 integer(psb_mpk_), private, parameter :: psb_int_type = 200 @@ -799,7 +799,6 @@ contains implicit none integer(psb_mpk_) :: comm,info integer(psb_mpk_) :: ierror - integer(psb_apk_) :: tag_value logical :: flag info = 0 #if 0 @@ -837,9 +836,7 @@ contains psb_mpi_c_dpk_ = mpi_double_complex #endif -#if defined(PSB_SERIAL_MPI) - tag_value = HUGE(psb_tag_space)/2 -#else +#if ! defined(PSB_SERIAL_MPI) if (info == 0) call mpi_op_create(psi_i2amx_op,.true.,mpi_i2amx_op,info) if (info == 0) call mpi_op_create(psi_i2amn_op,.true.,mpi_i2amn_op,info) if (info == 0) call mpi_op_create(psi_mamx_op,.true.,mpi_mamx_op,info) @@ -856,36 +853,7 @@ contains if (info == 0) call mpi_op_create(psi_zamn_op,.true.,mpi_zamn_op,info) if (info == 0) call mpi_op_create(psi_snrm2_op,.true.,mpi_snrm2_op,info) if (info == 0) call mpi_op_create(psi_dnrm2_op,.true.,mpi_dnrm2_op,info) - if (info == 0) call mpi_comm_get_attr(comm,mpi_tag_ub,tag_value,flag,ierror) - if ((ierror/=0).or.(.not.flag)) then - tag_value = 0 - info = psb_err_internal_error_ - end if #endif - psb_int_tag = tag_value - psb_tag_space - psb_real_tag = psb_int_tag + 1 - psb_double_tag = psb_real_tag + 1 - psb_complex_tag = psb_double_tag + 1 - psb_dcomplex_tag = psb_complex_tag + 1 - psb_logical_tag = psb_dcomplex_tag + 1 - psb_char_tag = psb_logical_tag + 1 - psb_int8_tag = psb_char_tag + 1 - psb_int2_tag = psb_int8_tag + 1 - psb_int4_tag = psb_int2_tag + 1 - psb_long_tag = psb_int4_tag + 1 - psb_max_simple_tag = psb_long_tag + 2 - psb_int_swap_tag = psb_max_simple_tag + 1 - psb_real_swap_tag = psb_int_swap_tag + 1 - psb_double_swap_tag = psb_real_swap_tag + 1 - psb_complex_swap_tag = psb_double_swap_tag + 1 - psb_dcomplex_swap_tag = psb_complex_swap_tag + 1 - psb_logical_swap_tag = psb_dcomplex_swap_tag + 1 - psb_char_swap_tag = psb_logical_swap_tag + 1 - psb_int8_swap_tag = psb_char_swap_tag + 1 - psb_int2_swap_tag = psb_int8_swap_tag + 1 - psb_int4_swap_tag = psb_int2_swap_tag + 1 - psb_long_swap_tag = psb_int4_swap_tag + 1 - end subroutine psi_register_mpi_const #if (defined(PSB_IPK4) && defined(PSB_LPK8))||defined(PSB_IPK8) From b60fc2531414197f932384fec856bab411500b63 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 20 Oct 2025 16:37:31 +0200 Subject: [PATCH 033/175] New OpenACC test and compile fix --- test/openacc/Makefile | 17 +- test/openacc/dpmix.F90 | 1216 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1230 insertions(+), 3 deletions(-) create mode 100644 test/openacc/dpmix.F90 diff --git a/test/openacc/Makefile b/test/openacc/Makefile index b62373f26..85d723301 100644 --- a/test/openacc/Makefile +++ b/test/openacc/Makefile @@ -14,7 +14,7 @@ LDLIBS=$(PSBGPULDLIBS) FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG)$(INCDIR) $(FMFLAG). $(FMFLAG)$(PSBMODDIR) $(FMFLAG)$(PSBINCDIR) $(LIBRSB_DEFINES) -FFLAGS=-O3 -march=native $(FCOPENACC) -DOPENACC +FFLAGS=-O3 -march=native $(FCOPENACC) -DOPENACC -DCUDA CFLAGS=-O3 -march=native VTC=vectoacc.o @@ -22,6 +22,7 @@ DVT=datavect.o CSRC=timers.c OBJS=$(SRCS:.F90=.o) $(CSRC:.c=.o) +OADIR=oaobjs all: dir psb_d_oacc_pde3d dpdegenmv @@ -42,15 +43,25 @@ dir: %.o: %.c $(CC) $(CFLAGS) $(FINCLUDES) -c $< -o $@ +cpyoa: + @if test ! -d $(OADIR); then mkdir $(OADIR); fi + /bin/cp $(TOPDIR)/openacc/*.o $(OADIR) + /bin/cp $(TOPDIR)/openacc/impl/*.o $(OADIR) + + psb_d_oacc_pde3d: mpifort -fallow-argument-mismatch -frecursive -g -O3 -frecursive -I../../modules/ -I. -DOPENACC -DHAVE_LAPACK -DHAVE_FLUSH_STMT -DLPK8 -DIPK4 -DMPI_MOD -c psb_d_oacc_pde3d.F90 -o psb_d_oacc_pde3d.o $(FLINK) -fopenacc -DOPENACC psb_d_oacc_pde3d.o -o psb_d_oacc_pde3d $(PSBLAS_LIB) $(LDLIBS) /bin/mv psb_d_oacc_pde3d $(EXEDIR) -dpdegenmv: dpdegenmv.o - $(FLINK) $(FCOPENACC) dpdegenmv.o -o dpdegenmv $(PSBLAS_LIB) $(LDLIBS) +dpdegenmv: dpdegenmv.o cpyoa + $(FLINK) $(FCOPENACC) dpdegenmv.o -o dpdegenmv $(OADIR)/*.o $(PSBLAS_LIB) $(LDLIBS) /bin/mv dpdegenmv $(EXEDIR) +dpmix: dpmix.o cpyoa + $(FLINK) $(FCOPENACC) dpmix.o -o dpmix $(OADIR)/*.o $(PSBLAS_LIB) $(LDLIBS) + /bin/mv dpmix $(EXEDIR) + clean: /bin/rm -fr *.o *.mod $(EXEDIR)/* diff --git a/test/openacc/dpmix.F90 b/test/openacc/dpmix.F90 new file mode 100644 index 000000000..3950dc447 --- /dev/null +++ b/test/openacc/dpmix.F90 @@ -0,0 +1,1216 @@ +! +! Parallel Sparse BLAS GPU plugin +! (C) Copyright 2013 +! Salvatore Filippone +! Alessandro Fanfarillo +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! File: dpdegenmv.f90 +! +! Program: pdegenmv +! This sample program measures the performance of the matrix-vector product. +! The matrix is generated in the same way as for the pdegen test case of +! the main PSBLAS library. +! +! +module psb_d_pde3d_mod + + + use psb_base_mod, only : psb_dpk_, psb_ipk_, psb_lpk_, psb_desc_type,& + & psb_dspmat_type, psb_d_vect_type, dzero,& + & psb_d_base_sparse_mat, psb_d_base_vect_type, & + & psb_i_base_vect_type, psb_l_base_vect_type + + interface + function d_func_3d(x,y,z) result(val) + import :: psb_dpk_ + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + end function d_func_3d + end interface + + interface psb_gen_pde3d + module procedure psb_d_gen_pde3d + end interface psb_gen_pde3d + +contains + + function d_null_func_3d(x,y,z) result(val) + + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + + val = dzero + + end function d_null_func_3d + ! + ! functions parametrizing the differential equation + ! + + ! + ! Note: b1, b2 and b3 are the coefficients of the first + ! derivative of the unknown function. The default + ! we apply here is to have them zero, so that the resulting + ! matrix is symmetric/hermitian and suitable for + ! testing with CG and FCG. + ! When testing methods for non-hermitian matrices you can + ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) + ! + function b1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b1 + real(psb_dpk_), intent(in) :: x,y,z + b1=done/sqrt((3*done)) + end function b1 + function b2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b2 + real(psb_dpk_), intent(in) :: x,y,z + b2=done/sqrt((3*done)) + end function b2 + function b3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b3 + real(psb_dpk_), intent(in) :: x,y,z + b3=done/sqrt((3*done)) + end function b3 + function c(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: c + real(psb_dpk_), intent(in) :: x,y,z + c=dzero + end function c + function a1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a1 + real(psb_dpk_), intent(in) :: x,y,z + a1=done/80 + end function a1 + function a2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a2 + real(psb_dpk_), intent(in) :: x,y,z + a2=done/80 + end function a2 + function a3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a3 + real(psb_dpk_), intent(in) :: x,y,z + a3=done/80 + end function a3 + function g(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: g + real(psb_dpk_), intent(in) :: x,y,z + g = dzero + if (x == done) then + g = done + else if (x == dzero) then + g = exp(y**2-z**2) + end if + end function g + + + ! + ! subroutine to allocate and fill in the coefficient matrix and + ! the rhs. + ! + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& + & f,amold,vmold,imold,partition,nrl,iv,tnd) + use psb_base_mod + use psb_util_mod + ! + ! Discretizes the partial differential equation + ! + ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) + ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f + ! dxdx dydy dzdz dx dy dz + ! + ! with Dirichlet boundary conditions + ! u = g + ! + ! on the unit cube 0<=x,y,z<=1. + ! + ! + ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. + ! + implicit none + integer(psb_ipk_) :: idim + type(psb_dspmat_type) :: a + type(psb_d_vect_type) :: xv,bv + type(psb_desc_type) :: desc_a + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: info + character(len=*) :: afmt + procedure(d_func_3d), optional :: f + class(psb_d_base_sparse_mat), optional :: amold + class(psb_d_base_vect_type), optional :: vmold + class(psb_i_base_vect_type), optional :: imold + integer(psb_ipk_), optional :: partition, nrl,iv(:) + logical, optional :: tnd + ! Local variables. + + integer(psb_ipk_), parameter :: nb=20 + type(psb_d_csc_sparse_mat) :: acsc + type(psb_d_coo_sparse_mat) :: acoo + type(psb_d_csr_sparse_mat) :: acsr + real(psb_dpk_) :: zt(nb),x,y,z + integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ + integer(psb_lpk_) :: m,n,glob_row,nt + integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner + ! For 3D partition + ! Note: integer control variables going directly into an MPI call + ! must be 4 bytes, i.e. psb_mpk_ + integer(psb_mpk_) :: npdims(3), npp, minfo + integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz + integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) + ! Process grid + integer(psb_ipk_) :: np, iam + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_dpk_), allocatable :: val(:) + ! deltah dimension of each grid cell + ! deltat discretization time + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + procedure(d_func_3d), pointer :: f_ + logical :: tnd_ + character(len=20) :: name, ch_err,tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + + if (present(f)) then + f_ => f + else + f_ => d_null_func_3d + end if + + deltah = done/(idim+2) + sqdeltah = deltah*deltah + deltah2 = (2*done)* deltah + + if (present(partition)) then + if ((1<= partition).and.(partition <= 3)) then + partition_ = partition + else + write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' + partition_ = 3 + end if + else + partition_ = 3 + end if + + ! initialize array descriptor and sparse matrix storage. provide an + ! estimate of the number of non zeroes + + m = (1_psb_lpk_*idim)*idim*idim + n = m + nnz = ((n*7)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + t0 = psb_wtime() + select case(partition_) + case(1) + ! A BLOCK partition + if (present(nrl)) then + nr = nrl + else + ! + ! Using a simple BLOCK distribution. + ! + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + end if + + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! First example of use of CDALL: specify for each process a number of + ! contiguous rows + ! + call psb_cdall(ctxt,desc_a,info,nl=nr) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(2) + ! A partition defined by the user through IV + + if (present(iv)) then + if (size(iv) /= m) then + write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + else + write(psb_err_unit,*) iam, 'Initialization error: IV not present' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! Second example of use of CDALL: specify for each row the + ! process that owns it + ! + call psb_cdall(ctxt,desc_a,info,vg=iv) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(3) + ! A 3-dimensional partition + + ! A nifty MPI function will split the process list + npdims = 0 + call mpi_dims_create(np,3,npdims,info) + npx = npdims(1) + npy = npdims(2) + npz = npdims(3) + + allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) + ! We can reuse idx2ijk for process indices as well. + call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) + ! Now let's split the 3D cube in hexahedra + call dist1Didx(bndx,idim,npx) + mynx = bndx(iamx+1)-bndx(iamx) + call dist1Didx(bndy,idim,npy) + myny = bndy(iamy+1)-bndy(iamy) + call dist1Didx(bndz,idim,npz) + mynz = bndz(iamz+1)-bndz(iamz) + + ! How many indices do I own? + nlr = mynx*myny*mynz + allocate(myidx(nlr)) + ! Now, let's generate the list of indices I own + nr = 0 + do i=bndx(iamx),bndx(iamx+1)-1 + do j=bndy(iamy),bndy(iamy+1)-1 + do k=bndz(iamz),bndz(iamz+1)-1 + nr = nr + 1 + call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) + end do + end do + end do + if (nr /= nlr) then + write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& + & nr,nlr,mynx,myny,mynz + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + end if + + ! + ! Third example of use of CDALL: specify for each process + ! the set of global indices it owns. + ! + call psb_cdall(ctxt,desc_a,info,vl=myidx) + + case default + write(psb_err_unit,*) iam, 'Initialization error: should not get here' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end select + + + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz,& + & dupl=psb_dupl_err_) + ! define rhs from boundary conditions; also build initial guess + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + ! we build an auxiliary matrix consisting of one row at a + ! time; just a small matrix. might be extended to generate + ! a bunch of rows per call. + ! + allocate(val(20*nb),irow(20*nb),& + &icol(20*nb),stat=info) + if (info /= psb_success_ ) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + + ! loop over rows belonging to current process in a block + ! distribution. + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + ! local matrix pointer + glob_row=myidx(i) + ! compute gridpoint coordinates + call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) + ! x, y, z coordinates + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = f_(x,y,z) + ! internal point: build discretization + ! + ! term depending on (x-1,y,z) + ! + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y-1,z) + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y,z-1) + val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + ! term depending on (x,y,z) + val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & + & + c(x,y,z) + call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + ! term depending on (x,y,z+1) + val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y+1,z) + val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x+1,y,z) + val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix==idim) then + zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + end do + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=dzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + call psb_cdasb(desc_a,info,mold=imold) + tcdasb = psb_wtime()-t1 + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) then + if (present(amold)) then + call psb_spasb(a,desc_a,info,mold=amold,bld_and=tnd) + else + call psb_spasb(a,desc_a,info,afmt=afmt,bld_and=tnd) + end if + end if + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) call psb_geasb(xv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& + & tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psb_d_gen_pde3d + + +end module psb_d_pde3d_mod + + +program pdgenmv + use psb_base_mod + use psb_util_mod + use psb_ext_mod +#ifdef OPENACC + use psb_oacc_mod +#endif +#ifdef CUDA + use psb_cuda_mod +#endif + use psb_d_pde3d_mod + implicit none + + ! input parameters + character(len=5) :: acfmt, agfmt + integer :: idim + logical :: tnd + ! miscellaneous + real(psb_dpk_), parameter :: one = 1.d0 + real(psb_dpk_) :: t1, t2, tprec, flops, tflops,& + & tt1, tt2, gt1, gt2, gflops, bdwdth,& + & tcnvcsr, tcnvc1, tcnvgpu, tcnvg1 + + ! sparse matrix and preconditioner + type(psb_dspmat_type) :: a, aoacc, aux_a, acuda + ! descriptor + type(psb_desc_type) :: desc_a + ! dense matrices + type(psb_d_vect_type), target :: xv, bv, xoacc, boacc, xcuda,bcuda +#ifdef OPENACC + type(psb_d_vect_oacc) :: vomold + type(psb_i_vect_oacc) :: iomold +#endif +#ifdef CUDA + type(psb_d_vect_cuda) :: vgmold + type(psb_i_vect_cuda) :: igmold +#endif + real(psb_dpk_), allocatable :: x1(:), x2(:), x0(:) + ! blacs parameters + type(psb_ctxt_type) :: ctxt + integer :: iam, np + + ! solver parameters + integer(psb_epk_) :: amatsize, precsize, descsize, annz, nbytes + real(psb_dpk_) :: err, eps, tnv, tng,tdot, dnrm2,ddot + integer, parameter :: ntests=8, ngpu=4, ncnv=3 + type(psb_d_coo_sparse_mat), target :: acoo + type(psb_d_csr_sparse_mat), target :: acsr + type(psb_d_ell_sparse_mat), target :: aell + type(psb_d_hll_sparse_mat), target :: ahll + type(psb_d_dia_sparse_mat), target :: adia + type(psb_d_hdia_sparse_mat), target :: ahdia +#ifdef OPENACC + type(psb_d_oacc_ell_sparse_mat), target :: aelg + type(psb_d_oacc_csr_sparse_mat), target :: acsrg + type(psb_d_oacc_hll_sparse_mat), target :: ahlg +#endif +#ifdef CUDA + type(psb_d_cuda_elg_sparse_mat), target :: acelg + type(psb_d_cuda_csrg_sparse_mat), target :: accsrg + type(psb_d_cuda_hlg_sparse_mat), target :: achlg +#endif + class(psb_d_base_sparse_mat), pointer :: agmold, acmold, aomold + + ! other variables + logical, parameter :: dump=.false. + integer(psb_ipk_) :: info, i, j, nr, nrg + integer(psb_lpk_) :: ig + character(len=20) :: name,ch_err + character(len=40) :: fname + + info=psb_success_ + + + call psb_init(ctxt) + call psb_info(ctxt,iam,np) + +#ifdef OPENACC + call psb_oacc_init(ctxt) +#endif + +#ifdef CUDA + call psb_cuda_init(ctxt) +#endif + + if (iam < 0) then + ! This should not happen, but just in case + call psb_exit(ctxt) + stop + endif + if(psb_get_errstatus() /= 0) goto 9999 + name='pdegenmv-oacc' + ! + ! Hello world + ! + if (iam == psb_root_) then + write(*,*) 'Welcome to PSBLAS version: ',psb_version_string_ + write(*,*) 'This is the ',trim(name),' sample program' + end if +#ifdef OPENACC +!!$ write(*,*) 'Process ',iam,' running on device: ', psb_oacc_getDevice(),' out of', psb_oacc_getDeviceCount() +!!$ write(*,*) 'Process ',iam,' device ', psb_oacc_getDevice(),' is a: ', trim(psb_oacc_DeviceName()) +#endif +#ifdef CUDA + write(*,*) 'Process ',iam,' running on device: ', psb_cuda_getDevice(),' out of', psb_cuda_getDeviceCount() + write(*,*) 'Process ',iam,' device ', psb_cuda_getDevice(),' is a: ', trim(psb_cuda_DeviceName()) +#endif +!!$ call psb_oacc_DeviceSync() + call psb_cuda_DeviceSync() + ! + ! get parameters + ! + call get_parms(ctxt,acfmt,agfmt,idim,tnd) + call psb_init_timers() + ! + ! allocate and fill in the coefficient matrix and initial vectors + ! + call psb_barrier(ctxt) + t1 = psb_wtime() + call psb_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,'CSR ',info,partition=3,tnd=tnd) + call psb_barrier(ctxt) + t2 = psb_wtime() - t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='create_matrix' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (iam == psb_root_) write(psb_out_unit,'("Overall matrix creation time : ",es12.5)')t2 + if (iam == psb_root_) write(psb_out_unit,'(" ")') + + if (dump) then + write(fname,'(a,i3.3,a,i3.3,a,i3.3,a)') 'pde',idim,'-',iam,'-',np,'.mtx' + call a%print(fname,head='PDEGEN test matrix') + end if + + select case(psb_toupper(acfmt)) + case('ELL') + acmold => aell + case('HLL') + acmold => ahll + case('DIA') + acmold => adia + case('HDIA') + acmold => ahdia + case('CSR') + acmold => acsr + case('COO') + acmold => acoo + case default + write(*,*) 'Unknown format defaulting to HLL' + acmold => ahll + end select + call a%cscnv(info,mold=acmold) + if ((info /= 0).or.(psb_get_errstatus()/=0)) then + write(0,*) 'From cscnv ',info + call psb_error() + stop + end if + +#ifdef OPENACC + select case(psb_toupper(agfmt)) + case('ELG') + aomold => aelg + case('HLG') + aomold => ahlg + case('CSRG') + aomold => acsrg + case default + write(*,*) 'Unknown format defaulting to HLG' + aomold => ahlg + end select + call a%cscnv(aoacc,info,mold=aomold) + if ((info /= 0).or.(psb_get_errstatus()/=0)) then + write(0,*) 'From cscnv ',info + call psb_error() + stop + end if + call desc_a%cnv(mold=iomold) + + call psb_geasb(boacc,desc_a,info,scratch=.true.,mold=vomold) + call psb_geasb(xoacc,desc_a,info,scratch=.true.,mold=vomold) + nr = desc_a%get_local_rows() + nrg = desc_a%get_global_rows() + call psb_geall(x0,desc_a,info) + do i=1, nr + call desc_a%l2g(i,ig,info) + x0(i) = 1.0 + (1.0*ig)/(nrg**2) + end do + call a%cscnv(aux_a,info,mold=acoo) + tcnvcsr = 0 + tcnvgpu = 0 + call psb_geall(x1,desc_a,info) + do j=1, ncnv + call aux_a%cscnv(a,info,mold=acoo) + call psb_barrier(ctxt) + t1 = psb_wtime() + call a%cscnv(info,mold=acmold) + t2 = psb_Wtime() -t1 + call psb_amx(ctxt,t2) + tcnvcsr = tcnvcsr + t2 + if (j==1) tcnvc1 = t2 + call psb_geasb(x1,desc_a,info) + call xv%bld(x0) + call psb_geasb(bv,desc_a,info,scratch=.true.) + + + call aux_a%cscnv(aoacc,info,mold=acoo) + call xoacc%bld(x0,mold=vomold) + call psb_geasb(boacc,desc_a,info,scratch=.true.,mold=vomold) + call psb_barrier(ctxt) + t1 = psb_wtime() + call aoacc%cscnv(info,mold=aomold) +!!$ call psb_oacc_DeviceSync() + t2 = psb_Wtime() -t1 + call psb_amx(ctxt,t2) + if (j==1) tcnvg1 = t2 + tcnvgpu = tcnvgpu + t2 + end do + + call xv%set(x0) + call psb_barrier(ctxt) + t1 = psb_wtime() + do i=1,ntests + call psb_spmm(done,a,xv,dzero,bv,desc_a,info) + end do + call psb_barrier(ctxt) + t2 = psb_wtime() - t1 + call psb_amx(ctxt,t2) + + call xoacc%set(x0) + + ! FIXME: cache flush needed here + x1 = bv%get_vect() + x2 = boacc%get_vect() + + call psb_barrier(ctxt) + tt1 = psb_wtime() + do i=1,ntests + call psb_spmm(done,aoacc,xv,dzero,boacc,desc_a,info) + if ((info /= 0).or.(psb_get_errstatus()/=0)) then + write(0,*) 'From 1 spmm',info,i,ntests + call psb_error() + stop + end if + + end do +!!$ call psb_oacc_DeviceSync() + call psb_barrier(ctxt) + tt2 = psb_wtime() - tt1 + call psb_amx(ctxt,tt2) + x1 = bv%get_vect() + x2 = boacc%get_vect() + nr = desc_a%get_local_rows() + eps = maxval(abs(x1(1:nr)-x2(1:nr))) + call psb_amx(ctxt,eps) + if (iam==0) write(*,*) 'Max diff on xoaccPU',eps + + ! FIXME: cache flush needed here + call xoacc%set(x0) + call xoacc%sync() + call psb_barrier(ctxt) + gt1 = psb_wtime() + do i=1,ntests*ngpu + call psb_spmm(done,aoacc,xoacc,dzero,boacc,desc_a,info) + ! For timing purposes we need to make sure all threads + ! in the device are done. + if ((info /= 0).or.(psb_get_errstatus()/=0)) then + write(0,*) 'From 2 spmm',info,i,ntests + call psb_error() + stop + end if + + end do +!!$ call psb_oacc_DeviceSync() + call psb_barrier(ctxt) + gt2 = psb_wtime() - gt1 + call psb_amx(ctxt,gt2) + call boacc%sync() + x1 = bv%get_vect() + x2 = boacc%get_vect() + tnv = psb_genrm2(bv,desc_a,info) + tng = psb_genrm2(boacc,desc_a,info) + tdot = psb_gedot(boacc,boacc,desc_a,info) +!!$ write(0,*) ' bv ',tnv,' boacc ',tng, ' dot ',tdot,eps,& +!!$ & dnrm2(desc_a%get_local_rows(),x2,1),& +!!$ & ddot(desc_a%get_local_rows(),x1,1,x2,1) + call psb_geaxpby(-done,boacc,+done,bv,desc_a,info) + eps = psb_geamax(bv,desc_a,info) + + call psb_amx(ctxt,t2) + eps = maxval(abs(x1(1:nr)-x2(1:nr))) + call psb_amx(ctxt,eps) + if (iam==0) write(*,*) 'Max diff on GPU',eps + if (dump) then + write(fname,'(a,i3.3,a,i3.3,a)')'XCPU-out-',iam,'-',np,'.mtx' + call mm_array_write(x1(1:nr),'Local part CPU',info,filename=fname) + write(fname,'(a,i3.3,a,i3.3,a)')'XGPU-out-',iam,'-',np,'.mtx' + call mm_array_write(x2(1:nr),'Local part GPU',info,filename=fname) + end if + + annz = a%get_nzeros() + amatsize = a%sizeof() + descsize = psb_sizeof(desc_a) + call psb_sum(ctxt,nr) + call psb_sum(ctxt,annz) + call psb_sum(ctxt,amatsize) + call psb_sum(ctxt,descsize) + + if (iam == psb_root_) then + write(psb_out_unit,& + & '("Matrix: ell1 ",i0)') idim + write(psb_out_unit,& + &'("Test on : ",i20," processors")') np + write(psb_out_unit,& + &'("Size of matrix : ",i20," ")') nr + write(psb_out_unit,& + &'("Number of nonzeros : ",i20," ")') annz + write(psb_out_unit,& + &'("Memory occupation : ",i20," ")') amatsize + flops = ntests*(2.d0*annz) + tflops = flops + gflops = flops * ngpu + write(psb_out_unit,'("Storage type for A: ",a)') a%get_fmt() + write(psb_out_unit,'("Storage type for AOACC: ",a)') aoacc%get_fmt() + write(psb_out_unit,'("Time to convert A from COO to CPU (1): ",F20.9)')& + & tcnvc1 + write(psb_out_unit,'("Time to convert A from COO to CPU (t): ",F20.9)')& + & tcnvcsr + write(psb_out_unit,'("Time to convert A from COO to CPU (a): ",F20.9)')& + & tcnvcsr/ncnv + write(psb_out_unit,'("Time to convert A from COO to GPU (1): ",F20.9)')& + & tcnvg1 + write(psb_out_unit,'("Time to convert A from COO to GPU (t): ",F20.9)')& + & tcnvgpu + write(psb_out_unit,'("Time to convert A from COO to GPU (a): ",F20.9)')& + & tcnvgpu/ncnv + + write(psb_out_unit,& + & '("Number of flops (",i0," prod) : ",F20.0," ")') & + & ntests,flops + + flops = flops / (t2) + tflops = tflops / (tt2) + gflops = gflops / (gt2) + + write(psb_out_unit,'("Time for ",i6," products (s) (CPU) : ",F20.3)')& + & ntests,t2 + write(psb_out_unit,'("Time per product (ms) (CPU) : ",F20.3)')& + & t2*1.d3/(1.d0*ntests) + write(psb_out_unit,'("MFLOPS (CPU) : ",F20.3)')& + & flops/1.d6 + write(psb_out_unit,'("Time for ",i6," products (s) (xGPU) : ",F20.3)')& + & ntests, tt2 + write(psb_out_unit,'("Time per product (ms) (xGPU) : ",F20.3)')& + & tt2*1.d3/(1.d0*ntests) + write(psb_out_unit,'("MFLOPS (xGPU) : ",F20.3)')& + & tflops/1.d6 + + write(psb_out_unit,'("Time for ",i6," products (s) (GPU.) : ",F20.3)')& + & ngpu*ntests,gt2 + write(psb_out_unit,'("Time per product (ms) (GPU.) : ",F20.3)')& + & gt2*1.d3/(1.d0*ntests*ngpu) + write(psb_out_unit,'("MFLOPS (GPU.) : ",F20.3)')& + & gflops/1.d6 + ! + ! This computation assumes the data movement associated with CSR: + ! it is minimal in terms of coefficients. Other formats may either move + ! more data (padding etc.) or less data (if they can save on the indices). + ! + nbytes = nr*(2*psb_sizeof_dp + psb_sizeof_ip)+& + & annz*(psb_sizeof_dp + psb_sizeof_ip) + bdwdth = ntests*nbytes/(t2*1.d6) + write(psb_out_unit,*) + write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (CPU) : ",F20.3)') bdwdth + bdwdth = ngpu*ntests*nbytes/(gt2*1.d6) + write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (GPU) : ",F20.3)') bdwdth +!!$ bdwdth = psb_oacc_MemoryPeakBandwidth() + write(psb_out_unit,'("MBYTES/S peak bandwidth (GPU) : ",F20.3)') bdwdth + write(psb_out_unit,'("Storage type for DESC_A: ",a)') desc_a%indxmap%get_fmt() + write(psb_out_unit,'("Total memory occupation for DESC_A: ",i12)')descsize + end if +#endif + +#ifdef CUDA + select case(psb_toupper(agfmt)) + case('ELG') + agmold => acelg + case('HLG') + agmold => achlg + case('CSRG') + agmold => accsrg + case default + write(*,*) 'Unknown format defaulting to HLG' + agmold => achlg + end select + call a%cscnv(acuda,info,mold=agmold) + if ((info /= 0).or.(psb_get_errstatus()/=0)) then + write(0,*) 'From cscnv ',info + call psb_error() + stop + end if + call desc_a%cnv(mold=igmold) + call psb_geasb(bcuda,desc_a,info,scratch=.true.,mold=vgmold) + call psb_geasb(xcuda,desc_a,info,scratch=.true.,mold=vgmold) + nr = desc_a%get_local_rows() + nrg = desc_a%get_global_rows() + call psb_geall(x0,desc_a,info) + do i=1, nr + call desc_a%l2g(i,ig,info) + x0(i) = 1.0 + (1.0*ig)/(nrg**2) + end do + call a%cscnv(aux_a,info,mold=acoo) + tcnvcsr = 0 + tcnvgpu = 0 + call psb_geall(x1,desc_a,info) + do j=1, ncnv + call aux_a%cscnv(a,info,mold=acoo) + call psb_barrier(ctxt) + t1 = psb_wtime() + call a%cscnv(info,mold=acmold) + t2 = psb_Wtime() -t1 + call psb_amx(ctxt,t2) + tcnvcsr = tcnvcsr + t2 + if (j==1) tcnvc1 = t2 + call psb_geasb(x1,desc_a,info) + call xv%bld(x0) + call psb_geasb(bv,desc_a,info,scratch=.true.) + call aux_a%cscnv(acuda,info,mold=acoo) + call xcuda%bld(x0,mold=vgmold) + call psb_geasb(bcuda,desc_a,info,scratch=.true.,mold=vgmold) + call psb_barrier(ctxt) + t1 = psb_wtime() + call acuda%cscnv(info,mold=agmold) + call psb_cuda_DeviceSync() + t2 = psb_Wtime() -t1 + call psb_amx(ctxt,t2) + if (j==1) tcnvg1 = t2 + tcnvgpu = tcnvgpu + t2 + end do + call xv%set(x0) + call psb_barrier(ctxt) + t1 = psb_wtime() + do i=1,ntests + call psb_spmm(done,a,xv,dzero,bv,desc_a,info) + end do + call psb_barrier(ctxt) + t2 = psb_wtime() - t1 + call psb_amx(ctxt,t2) + + call xcuda%set(x0) + + ! FIXME: cache flush needed here + x1 = bv%get_vect() + x2 = bcuda%get_vect() + + call psb_barrier(ctxt) + tt1 = psb_wtime() + do i=1,ntests + call psb_spmm(done,acuda,xv,dzero,bcuda,desc_a,info) + if ((info /= 0).or.(psb_get_errstatus()/=0)) then + write(0,*) 'From 1 spmm',info,i,ntests + call psb_error() + stop + end if + + end do + call psb_cuda_DeviceSync() + call psb_barrier(ctxt) + tt2 = psb_wtime() - tt1 + call psb_amx(ctxt,tt2) + x1 = bv%get_vect() + x2 = bcuda%get_vect() + nr = desc_a%get_local_rows() + eps = maxval(abs(x1(1:nr)-x2(1:nr))) + call psb_amx(ctxt,eps) + if (iam==0) write(*,*) 'Max diff on xGPU',eps + + ! FIXME: cache flush needed here + call xcuda%set(x0) + call xcuda%sync() + call psb_barrier(ctxt) + gt1 = psb_wtime() + do i=1,ntests*ngpu + call psb_spmm(done,acuda,xcuda,dzero,bcuda,desc_a,info) + ! For timing purposes we need to make sure all threads + ! in the device are done. + if ((info /= 0).or.(psb_get_errstatus()/=0)) then + write(0,*) 'From 2 spmm',info,i,ntests + call psb_error() + stop + end if + + end do + + call psb_cuda_DeviceSync() + call psb_barrier(ctxt) + gt2 = psb_wtime() - gt1 + call psb_amx(ctxt,gt2) + call bcuda%sync() + x1 = bv%get_vect() + x2 = bcuda%get_vect() + tnv = psb_genrm2(bv,desc_a,info) + tng = psb_genrm2(bcuda,desc_a,info) + tdot = psb_gedot(bcuda,bcuda,desc_a,info) + write(0,*) ' bv ',tnv,' bcuda ',tng, ' dot ',tdot,eps,& + & dnrm2(desc_a%get_local_rows(),x2,1),& + & ddot(desc_a%get_local_rows(),x1,1,x2,1) + call psb_geaxpby(-done,bcuda,+done,bv,desc_a,info) + eps = psb_geamax(bv,desc_a,info) + + call psb_amx(ctxt,t2) + eps = maxval(abs(x1(1:nr)-x2(1:nr))) + call psb_amx(ctxt,eps) + if (iam==0) write(*,*) 'Max diff on GPU',eps + if (dump) then + write(fname,'(a,i3.3,a,i3.3,a)')'XCPU-out-',iam,'-',np,'.mtx' + call mm_array_write(x1(1:nr),'Local part CPU',info,filename=fname) + write(fname,'(a,i3.3,a,i3.3,a)')'XGPU-out-',iam,'-',np,'.mtx' + call mm_array_write(x2(1:nr),'Local part GPU',info,filename=fname) + end if + + annz = a%get_nzeros() + amatsize = a%sizeof() + descsize = psb_sizeof(desc_a) + call psb_sum(ctxt,nr) + call psb_sum(ctxt,annz) + call psb_sum(ctxt,amatsize) + call psb_sum(ctxt,descsize) + + if (iam == psb_root_) then + write(psb_out_unit,& + & '("Matrix: ell1 ",i0)') idim + write(psb_out_unit,& + &'("Test on : ",i20," processors")') np + write(psb_out_unit,& + &'("Size of matrix : ",i20," ")') nr + write(psb_out_unit,& + &'("Number of nonzeros : ",i20," ")') annz + write(psb_out_unit,& + &'("Memory occupation : ",i20," ")') amatsize + flops = ntests*(2.d0*annz) + tflops = flops + gflops = flops * ngpu + write(psb_out_unit,'("Storage type for A: ",a)') a%get_fmt() + write(psb_out_unit,'("Storage type for ACUDA: ",a)') acuda%get_fmt() + write(psb_out_unit,'("Time to convert A from COO to CPU (1): ",F20.9)')& + & tcnvc1 + write(psb_out_unit,'("Time to convert A from COO to CPU (t): ",F20.9)')& + & tcnvcsr + write(psb_out_unit,'("Time to convert A from COO to CPU (a): ",F20.9)')& + & tcnvcsr/ncnv + write(psb_out_unit,'("Time to convert A from COO to GPU (1): ",F20.9)')& + & tcnvg1 + write(psb_out_unit,'("Time to convert A from COO to GPU (t): ",F20.9)')& + & tcnvgpu + write(psb_out_unit,'("Time to convert A from COO to GPU (a): ",F20.9)')& + & tcnvgpu/ncnv + write(psb_out_unit,& + & '("Number of flops (",i0," prod) : ",F20.0," ")') & + & ntests,flops + + flops = flops / (t2) + tflops = tflops / (tt2) + gflops = gflops / (gt2) + + write(psb_out_unit,'("Time for ",i6," products (s) (CPU) : ",F20.3)')& + & ntests,t2 + write(psb_out_unit,'("Time per product (ms) (CPU) : ",F20.3)')& + & t2*1.d3/(1.d0*ntests) + write(psb_out_unit,'("MFLOPS (CPU) : ",F20.3)')& + & flops/1.d6 + write(psb_out_unit,'("Time for ",i6," products (s) (xGPU) : ",F20.3)')& + & ntests, tt2 + write(psb_out_unit,'("Time per product (ms) (xGPU) : ",F20.3)')& + & tt2*1.d3/(1.d0*ntests) + write(psb_out_unit,'("MFLOPS (xGPU) : ",F20.3)')& + & tflops/1.d6 + + write(psb_out_unit,'("Time for ",i6," products (s) (GPU.) : ",F20.3)')& + & ngpu*ntests,gt2 + write(psb_out_unit,'("Time per product (ms) (GPU.) : ",F20.3)')& + & gt2*1.d3/(1.d0*ntests*ngpu) + write(psb_out_unit,'("MFLOPS (GPU.) : ",F20.3)')& + & gflops/1.d6 + ! + ! This computation assumes the data movement associated with CSR: + ! it is minimal in terms of coefficients. Other formats may either move + ! more data (padding etc.) or less data (if they can save on the indices). + ! + nbytes = nr*(2*psb_sizeof_dp + psb_sizeof_ip)+& + & annz*(psb_sizeof_dp + psb_sizeof_ip) + bdwdth = ntests*nbytes/(t2*1.d6) + write(psb_out_unit,*) + write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (CPU) : ",F20.3)') bdwdth + bdwdth = ngpu*ntests*nbytes/(gt2*1.d6) + write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (GPU) : ",F20.3)') bdwdth + bdwdth = psb_cuda_MemoryPeakBandwidth() + write(psb_out_unit,'("MBYTES/S peak bandwidth (GPU) : ",F20.3)') bdwdth + write(psb_out_unit,'("Storage type for DESC_A: ",a)') desc_a%indxmap%get_fmt() + write(psb_out_unit,'("Total memory occupation for DESC_A: ",i12)')descsize + + end if +#endif + +#ifdef OPENACC + call psb_oacc_exit() +#endif +#ifdef CUDA + call psb_cuda_exit() +#endif + call psb_exit(ctxt) + stop + +9999 continue + call psb_error(ctxt) + +contains + ! + ! get iteration parameters from standard input + ! + subroutine get_parms(ctxt,acfmt,agfmt,idim,tnd) + type(psb_ctxt_type) :: ctxt + character(len=*) :: agfmt, acfmt + integer :: idim + logical :: tnd + integer :: np, iam + integer :: intbuf(10), ip + + call psb_info(ctxt, iam, np) + + if (iam == 0) then + write(*,*) 'CPU side format?' + read(psb_inp_unit,*) acfmt + write(*,*) 'OACC side format?' + read(psb_inp_unit,*) agfmt + write(*,*) 'Size of discretization cube?' + read(psb_inp_unit,*) idim + write(*,*) 'Try comm/comp overlap?' + read(psb_inp_unit,*) tnd + endif + call psb_bcast(ctxt,acfmt) + call psb_bcast(ctxt,agfmt) + call psb_bcast(ctxt,idim) + call psb_bcast(ctxt,tnd) + + if (iam == 0) then + write(psb_out_unit,'("Testing matrix : ell1")') + write(psb_out_unit,'("Grid dimensions : ",i4,"x",i4,"x",i4)')idim,idim,idim + write(psb_out_unit,'("Number of processors : ",i0)')np + write(psb_out_unit,'("Data distribution : BLOCK")') + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Storage formats ",a)') acfmt,' ',agfmt + write(psb_out_unit,'("Testing overlap ND ",l8)') tnd + end if + return + + end subroutine get_parms + +end program pdgenmv From 8f6000f940d1b42d0a32545630e553009e577890 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 20 Oct 2025 16:37:47 +0200 Subject: [PATCH 034/175] Fix OpenACC files --- openacc/psb_c_oacc_csr_mat_mod.F90 | 48 ++++++++++++++++------ openacc/psb_c_oacc_ell_mat_mod.F90 | 66 ++++++++++++++++++++++-------- openacc/psb_c_oacc_hll_mat_mod.F90 | 2 +- openacc/psb_c_oacc_vect_mod.F90 | 8 ++-- openacc/psb_d_oacc_csr_mat_mod.F90 | 48 ++++++++++++++++------ openacc/psb_d_oacc_ell_mat_mod.F90 | 64 +++++++++++++++++++++-------- openacc/psb_d_oacc_vect_mod.F90 | 4 +- openacc/psb_i_oacc_vect_mod.F90 | 1 + openacc/psb_l_oacc_vect_mod.F90 | 1 + openacc/psb_s_oacc_csr_mat_mod.F90 | 48 ++++++++++++++++------ openacc/psb_s_oacc_ell_mat_mod.F90 | 66 ++++++++++++++++++++++-------- openacc/psb_s_oacc_hll_mat_mod.F90 | 2 +- openacc/psb_s_oacc_vect_mod.F90 | 4 +- openacc/psb_z_oacc_csr_mat_mod.F90 | 48 ++++++++++++++++------ openacc/psb_z_oacc_ell_mat_mod.F90 | 66 ++++++++++++++++++++++-------- openacc/psb_z_oacc_hll_mat_mod.F90 | 2 +- openacc/psb_z_oacc_vect_mod.F90 | 8 ++-- 17 files changed, 360 insertions(+), 126 deletions(-) diff --git a/openacc/psb_c_oacc_csr_mat_mod.F90 b/openacc/psb_c_oacc_csr_mat_mod.F90 index c6461fe3c..f138e4c99 100644 --- a/openacc/psb_c_oacc_csr_mat_mod.F90 +++ b/openacc/psb_c_oacc_csr_mat_mod.F90 @@ -144,9 +144,15 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_delete_finalize(a%val) - if (psb_size(a%ja)>0) call acc_delete_finalize(a%ja) - if (psb_size(a%irp)>0) call acc_delete_finalize(a%irp) + if (psb_size(a%val)>0) then + !$acc exit data delete(a%val) finalize + end if + if (psb_size(a%ja)>0) then + !$acc exit data delete(a%ja) finalize + end if + if (psb_size(a%irp)>0) then + !$acc exit data delete(a%irp) finalize + end if return end subroutine c_oacc_csr_free_dev_space @@ -257,9 +263,15 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_copyin(a%val) - if (psb_size(a%ja)>0) call acc_copyin(a%ja) - if (psb_size(a%irp)>0) call acc_copyin(a%irp) + if (psb_size(a%val)>0) then + !$acc enter data copyin(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc enter data copyin(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc enter data copyin(a%irp) + end if end subroutine c_oacc_csr_sync_dev_space subroutine c_oacc_csr_sync(a) @@ -275,13 +287,25 @@ contains ! will fail ! if (a%is_dev()) then - if (psb_size(a%val)>0) call acc_update_self(a%val) - if (psb_size(a%ja)>0) call acc_update_self(a%ja) - if (psb_size(a%irp)>0) call acc_update_self(a%irp) + if (psb_size(a%val)>0) then + !$acc update self(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update self(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc update self(a%irp) + end if else if (a%is_host()) then - if (psb_size(a%val)>0) call acc_update_device(a%val) - if (psb_size(a%ja)>0) call acc_update_device(a%ja) - if (psb_size(a%irp)>0) call acc_update_device(a%irp) + if (psb_size(a%val)>0) then + !$acc update device(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update device(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc update device(a%irp) + end if end if call tmpa%set_sync() end subroutine c_oacc_csr_sync diff --git a/openacc/psb_c_oacc_ell_mat_mod.F90 b/openacc/psb_c_oacc_ell_mat_mod.F90 index b21686466..30438011f 100644 --- a/openacc/psb_c_oacc_ell_mat_mod.F90 +++ b/openacc/psb_c_oacc_ell_mat_mod.F90 @@ -143,10 +143,18 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_delete_finalize(a%val) - if (psb_size(a%ja)>0) call acc_delete_finalize(a%ja) - if (psb_size(a%irn)>0) call acc_delete_finalize(a%irn) - if (psb_size(a%idiag)>0) call acc_delete_finalize(a%idiag) + if (psb_size(a%val)>0) then + !$acc exit data delete(a%val) finalize + end if + if (psb_size(a%ja)>0) then + !$acc exit data delete(a%ja) finalize + end if + if (psb_size(a%irn)>0) then + !$acc exit data delete(a%irn) finalize + end if + if (psb_size(a%idiag)>0) then + !$acc exit data delete(a%idiag) finalize + end if return end subroutine c_oacc_ell_free_dev_space @@ -170,7 +178,7 @@ contains if (a%is_dev()) call a%sync() res = 8 - res = res + psb_sizeof_dp * size(a%val) + res = res + (2*psb_sizeof_sp) * size(a%val) res = res + psb_sizeof_ip * size(a%ja) res = res + psb_sizeof_ip * size(a%irn) res = res + psb_sizeof_ip * size(a%idiag) @@ -186,10 +194,18 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_copyin(a%val) - if (psb_size(a%ja)>0) call acc_copyin(a%ja) - if (psb_size(a%irn)>0) call acc_copyin(a%irn) - if (psb_size(a%idiag)>0) call acc_copyin(a%idiag) + if (psb_size(a%val)>0) then + !$acc enter data copyin(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc enter data copyin(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc enter data copyin(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc enter data copyin(a%idiag) + end if end subroutine c_oacc_ell_sync_dev_space function c_oacc_ell_is_host(a) result(res) @@ -256,15 +272,31 @@ contains ! will fail ! if (a%is_dev()) then - if (psb_size(a%val)>0) call acc_update_self(a%val) - if (psb_size(a%ja)>0) call acc_update_self(a%ja) - if (psb_size(a%irn)>0) call acc_update_self(a%irn) - if (psb_size(a%idiag)>0) call acc_update_self(a%idiag) + if (psb_size(a%val)>0) then + !$acc update self(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update self(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc update self(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc update self(a%idiag) + end if else if (a%is_host()) then - if (psb_size(a%val)>0) call acc_update_device(a%val) - if (psb_size(a%ja)>0) call acc_update_device(a%ja) - if (psb_size(a%irn)>0) call acc_update_device(a%irn) - if (psb_size(a%idiag)>0) call acc_update_device(a%idiag) + if (psb_size(a%val)>0) then + !$acc update device(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update device(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc update device(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc update device(a%idiag) + end if end if call tmpa%set_sync() end subroutine c_oacc_ell_sync diff --git a/openacc/psb_c_oacc_hll_mat_mod.F90 b/openacc/psb_c_oacc_hll_mat_mod.F90 index f8c192753..5c9d97219 100644 --- a/openacc/psb_c_oacc_hll_mat_mod.F90 +++ b/openacc/psb_c_oacc_hll_mat_mod.F90 @@ -171,7 +171,7 @@ contains if (a%is_dev()) call a%sync() res = 8 - res = res + psb_sizeof_dp * size(a%val) + res = res + (2*psb_sizeof_sp) * size(a%val) res = res + psb_sizeof_ip * size(a%ja) res = res + psb_sizeof_ip * size(a%irn) res = res + psb_sizeof_ip * size(a%idiag) diff --git a/openacc/psb_c_oacc_vect_mod.F90 b/openacc/psb_c_oacc_vect_mod.F90 index 2aa11db9f..18b900bbc 100644 --- a/openacc/psb_c_oacc_vect_mod.F90 +++ b/openacc/psb_c_oacc_vect_mod.F90 @@ -829,9 +829,10 @@ contains complex(psb_spk_) :: res integer(psb_ipk_) :: i + res = czero !$acc parallel loop reduction(+:res) present(x, y) do i = 1, n - res = res + x(i) * y(i) + res = res + conjg(x(i)) * y(i) end do !$acc end parallel loop end function c_inner_oacc_dot @@ -843,10 +844,10 @@ contains complex(psb_spk_), intent(in) :: y(:) integer(psb_ipk_), intent(in) :: n complex(psb_spk_) :: res - complex(psb_spk_), external :: cdot + complex(psb_spk_), external :: cdotc if (x%is_dev()) call x%sync() - res = cdot(n, y, 1, x%v, 1) + res = cdotc(n, y, 1, x%v, 1) end function c_oacc_dot_a @@ -943,6 +944,7 @@ contains class(psb_c_vect_oacc), intent(out) :: x integer(psb_ipk_), intent(out) :: info + call x%free(info) call psb_realloc(n, x%v, info) if (info /= 0) then info = psb_err_alloc_request_ diff --git a/openacc/psb_d_oacc_csr_mat_mod.F90 b/openacc/psb_d_oacc_csr_mat_mod.F90 index 21907312a..0c689f39a 100644 --- a/openacc/psb_d_oacc_csr_mat_mod.F90 +++ b/openacc/psb_d_oacc_csr_mat_mod.F90 @@ -144,9 +144,15 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_delete_finalize(a%val) - if (psb_size(a%ja)>0) call acc_delete_finalize(a%ja) - if (psb_size(a%irp)>0) call acc_delete_finalize(a%irp) + if (psb_size(a%val)>0) then + !$acc exit data delete(a%val) finalize + end if + if (psb_size(a%ja)>0) then + !$acc exit data delete(a%ja) finalize + end if + if (psb_size(a%irp)>0) then + !$acc exit data delete(a%irp) finalize + end if return end subroutine d_oacc_csr_free_dev_space @@ -257,9 +263,15 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_copyin(a%val) - if (psb_size(a%ja)>0) call acc_copyin(a%ja) - if (psb_size(a%irp)>0) call acc_copyin(a%irp) + if (psb_size(a%val)>0) then + !$acc enter data copyin(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc enter data copyin(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc enter data copyin(a%irp) + end if end subroutine d_oacc_csr_sync_dev_space subroutine d_oacc_csr_sync(a) @@ -275,13 +287,25 @@ contains ! will fail ! if (a%is_dev()) then - if (psb_size(a%val)>0) call acc_update_self(a%val) - if (psb_size(a%ja)>0) call acc_update_self(a%ja) - if (psb_size(a%irp)>0) call acc_update_self(a%irp) + if (psb_size(a%val)>0) then + !$acc update self(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update self(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc update self(a%irp) + end if else if (a%is_host()) then - if (psb_size(a%val)>0) call acc_update_device(a%val) - if (psb_size(a%ja)>0) call acc_update_device(a%ja) - if (psb_size(a%irp)>0) call acc_update_device(a%irp) + if (psb_size(a%val)>0) then + !$acc update device(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update device(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc update device(a%irp) + end if end if call tmpa%set_sync() end subroutine d_oacc_csr_sync diff --git a/openacc/psb_d_oacc_ell_mat_mod.F90 b/openacc/psb_d_oacc_ell_mat_mod.F90 index 021face3e..07ae88ae2 100644 --- a/openacc/psb_d_oacc_ell_mat_mod.F90 +++ b/openacc/psb_d_oacc_ell_mat_mod.F90 @@ -143,10 +143,18 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_delete_finalize(a%val) - if (psb_size(a%ja)>0) call acc_delete_finalize(a%ja) - if (psb_size(a%irn)>0) call acc_delete_finalize(a%irn) - if (psb_size(a%idiag)>0) call acc_delete_finalize(a%idiag) + if (psb_size(a%val)>0) then + !$acc exit data delete(a%val) finalize + end if + if (psb_size(a%ja)>0) then + !$acc exit data delete(a%ja) finalize + end if + if (psb_size(a%irn)>0) then + !$acc exit data delete(a%irn) finalize + end if + if (psb_size(a%idiag)>0) then + !$acc exit data delete(a%idiag) finalize + end if return end subroutine d_oacc_ell_free_dev_space @@ -186,10 +194,18 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_copyin(a%val) - if (psb_size(a%ja)>0) call acc_copyin(a%ja) - if (psb_size(a%irn)>0) call acc_copyin(a%irn) - if (psb_size(a%idiag)>0) call acc_copyin(a%idiag) + if (psb_size(a%val)>0) then + !$acc enter data copyin(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc enter data copyin(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc enter data copyin(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc enter data copyin(a%idiag) + end if end subroutine d_oacc_ell_sync_dev_space function d_oacc_ell_is_host(a) result(res) @@ -256,15 +272,31 @@ contains ! will fail ! if (a%is_dev()) then - if (psb_size(a%val)>0) call acc_update_self(a%val) - if (psb_size(a%ja)>0) call acc_update_self(a%ja) - if (psb_size(a%irn)>0) call acc_update_self(a%irn) - if (psb_size(a%idiag)>0) call acc_update_self(a%idiag) + if (psb_size(a%val)>0) then + !$acc update self(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update self(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc update self(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc update self(a%idiag) + end if else if (a%is_host()) then - if (psb_size(a%val)>0) call acc_update_device(a%val) - if (psb_size(a%ja)>0) call acc_update_device(a%ja) - if (psb_size(a%irn)>0) call acc_update_device(a%irn) - if (psb_size(a%idiag)>0) call acc_update_device(a%idiag) + if (psb_size(a%val)>0) then + !$acc update device(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update device(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc update device(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc update device(a%idiag) + end if end if call tmpa%set_sync() end subroutine d_oacc_ell_sync diff --git a/openacc/psb_d_oacc_vect_mod.F90 b/openacc/psb_d_oacc_vect_mod.F90 index 1e3f07d7d..830b22161 100644 --- a/openacc/psb_d_oacc_vect_mod.F90 +++ b/openacc/psb_d_oacc_vect_mod.F90 @@ -829,9 +829,10 @@ contains real(psb_dpk_) :: res integer(psb_ipk_) :: i + res = dzero !$acc parallel loop reduction(+:res) present(x, y) do i = 1, n - res = res + x(i) * y(i) + res = res + (x(i)) * y(i) end do !$acc end parallel loop end function d_inner_oacc_dot @@ -943,6 +944,7 @@ contains class(psb_d_vect_oacc), intent(out) :: x integer(psb_ipk_), intent(out) :: info + call x%free(info) call psb_realloc(n, x%v, info) if (info /= 0) then info = psb_err_alloc_request_ diff --git a/openacc/psb_i_oacc_vect_mod.F90 b/openacc/psb_i_oacc_vect_mod.F90 index 344ad931c..4494ba70a 100644 --- a/openacc/psb_i_oacc_vect_mod.F90 +++ b/openacc/psb_i_oacc_vect_mod.F90 @@ -547,6 +547,7 @@ contains class(psb_i_vect_oacc), intent(out) :: x integer(psb_ipk_), intent(out) :: info + call x%free(info) call psb_realloc(n, x%v, info) if (info /= 0) then info = psb_err_alloc_request_ diff --git a/openacc/psb_l_oacc_vect_mod.F90 b/openacc/psb_l_oacc_vect_mod.F90 index 85b561a95..aeb1051c6 100644 --- a/openacc/psb_l_oacc_vect_mod.F90 +++ b/openacc/psb_l_oacc_vect_mod.F90 @@ -549,6 +549,7 @@ contains class(psb_l_vect_oacc), intent(out) :: x integer(psb_ipk_), intent(out) :: info + call x%free(info) call psb_realloc(n, x%v, info) if (info /= 0) then info = psb_err_alloc_request_ diff --git a/openacc/psb_s_oacc_csr_mat_mod.F90 b/openacc/psb_s_oacc_csr_mat_mod.F90 index d66dca3b6..ce721a774 100644 --- a/openacc/psb_s_oacc_csr_mat_mod.F90 +++ b/openacc/psb_s_oacc_csr_mat_mod.F90 @@ -144,9 +144,15 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_delete_finalize(a%val) - if (psb_size(a%ja)>0) call acc_delete_finalize(a%ja) - if (psb_size(a%irp)>0) call acc_delete_finalize(a%irp) + if (psb_size(a%val)>0) then + !$acc exit data delete(a%val) finalize + end if + if (psb_size(a%ja)>0) then + !$acc exit data delete(a%ja) finalize + end if + if (psb_size(a%irp)>0) then + !$acc exit data delete(a%irp) finalize + end if return end subroutine s_oacc_csr_free_dev_space @@ -257,9 +263,15 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_copyin(a%val) - if (psb_size(a%ja)>0) call acc_copyin(a%ja) - if (psb_size(a%irp)>0) call acc_copyin(a%irp) + if (psb_size(a%val)>0) then + !$acc enter data copyin(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc enter data copyin(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc enter data copyin(a%irp) + end if end subroutine s_oacc_csr_sync_dev_space subroutine s_oacc_csr_sync(a) @@ -275,13 +287,25 @@ contains ! will fail ! if (a%is_dev()) then - if (psb_size(a%val)>0) call acc_update_self(a%val) - if (psb_size(a%ja)>0) call acc_update_self(a%ja) - if (psb_size(a%irp)>0) call acc_update_self(a%irp) + if (psb_size(a%val)>0) then + !$acc update self(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update self(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc update self(a%irp) + end if else if (a%is_host()) then - if (psb_size(a%val)>0) call acc_update_device(a%val) - if (psb_size(a%ja)>0) call acc_update_device(a%ja) - if (psb_size(a%irp)>0) call acc_update_device(a%irp) + if (psb_size(a%val)>0) then + !$acc update device(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update device(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc update device(a%irp) + end if end if call tmpa%set_sync() end subroutine s_oacc_csr_sync diff --git a/openacc/psb_s_oacc_ell_mat_mod.F90 b/openacc/psb_s_oacc_ell_mat_mod.F90 index 600a08a7d..c31f2bb9f 100644 --- a/openacc/psb_s_oacc_ell_mat_mod.F90 +++ b/openacc/psb_s_oacc_ell_mat_mod.F90 @@ -143,10 +143,18 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_delete_finalize(a%val) - if (psb_size(a%ja)>0) call acc_delete_finalize(a%ja) - if (psb_size(a%irn)>0) call acc_delete_finalize(a%irn) - if (psb_size(a%idiag)>0) call acc_delete_finalize(a%idiag) + if (psb_size(a%val)>0) then + !$acc exit data delete(a%val) finalize + end if + if (psb_size(a%ja)>0) then + !$acc exit data delete(a%ja) finalize + end if + if (psb_size(a%irn)>0) then + !$acc exit data delete(a%irn) finalize + end if + if (psb_size(a%idiag)>0) then + !$acc exit data delete(a%idiag) finalize + end if return end subroutine s_oacc_ell_free_dev_space @@ -170,7 +178,7 @@ contains if (a%is_dev()) call a%sync() res = 8 - res = res + psb_sizeof_dp * size(a%val) + res = res + psb_sizeof_sp * size(a%val) res = res + psb_sizeof_ip * size(a%ja) res = res + psb_sizeof_ip * size(a%irn) res = res + psb_sizeof_ip * size(a%idiag) @@ -186,10 +194,18 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_copyin(a%val) - if (psb_size(a%ja)>0) call acc_copyin(a%ja) - if (psb_size(a%irn)>0) call acc_copyin(a%irn) - if (psb_size(a%idiag)>0) call acc_copyin(a%idiag) + if (psb_size(a%val)>0) then + !$acc enter data copyin(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc enter data copyin(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc enter data copyin(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc enter data copyin(a%idiag) + end if end subroutine s_oacc_ell_sync_dev_space function s_oacc_ell_is_host(a) result(res) @@ -256,15 +272,31 @@ contains ! will fail ! if (a%is_dev()) then - if (psb_size(a%val)>0) call acc_update_self(a%val) - if (psb_size(a%ja)>0) call acc_update_self(a%ja) - if (psb_size(a%irn)>0) call acc_update_self(a%irn) - if (psb_size(a%idiag)>0) call acc_update_self(a%idiag) + if (psb_size(a%val)>0) then + !$acc update self(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update self(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc update self(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc update self(a%idiag) + end if else if (a%is_host()) then - if (psb_size(a%val)>0) call acc_update_device(a%val) - if (psb_size(a%ja)>0) call acc_update_device(a%ja) - if (psb_size(a%irn)>0) call acc_update_device(a%irn) - if (psb_size(a%idiag)>0) call acc_update_device(a%idiag) + if (psb_size(a%val)>0) then + !$acc update device(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update device(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc update device(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc update device(a%idiag) + end if end if call tmpa%set_sync() end subroutine s_oacc_ell_sync diff --git a/openacc/psb_s_oacc_hll_mat_mod.F90 b/openacc/psb_s_oacc_hll_mat_mod.F90 index 330332487..3c3f52dee 100644 --- a/openacc/psb_s_oacc_hll_mat_mod.F90 +++ b/openacc/psb_s_oacc_hll_mat_mod.F90 @@ -171,7 +171,7 @@ contains if (a%is_dev()) call a%sync() res = 8 - res = res + psb_sizeof_dp * size(a%val) + res = res + psb_sizeof_sp * size(a%val) res = res + psb_sizeof_ip * size(a%ja) res = res + psb_sizeof_ip * size(a%irn) res = res + psb_sizeof_ip * size(a%idiag) diff --git a/openacc/psb_s_oacc_vect_mod.F90 b/openacc/psb_s_oacc_vect_mod.F90 index b8d9700df..e7edb998f 100644 --- a/openacc/psb_s_oacc_vect_mod.F90 +++ b/openacc/psb_s_oacc_vect_mod.F90 @@ -829,9 +829,10 @@ contains real(psb_spk_) :: res integer(psb_ipk_) :: i + res = szero !$acc parallel loop reduction(+:res) present(x, y) do i = 1, n - res = res + x(i) * y(i) + res = res + (x(i)) * y(i) end do !$acc end parallel loop end function s_inner_oacc_dot @@ -943,6 +944,7 @@ contains class(psb_s_vect_oacc), intent(out) :: x integer(psb_ipk_), intent(out) :: info + call x%free(info) call psb_realloc(n, x%v, info) if (info /= 0) then info = psb_err_alloc_request_ diff --git a/openacc/psb_z_oacc_csr_mat_mod.F90 b/openacc/psb_z_oacc_csr_mat_mod.F90 index 3b66787ab..2fef14a6f 100644 --- a/openacc/psb_z_oacc_csr_mat_mod.F90 +++ b/openacc/psb_z_oacc_csr_mat_mod.F90 @@ -144,9 +144,15 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_delete_finalize(a%val) - if (psb_size(a%ja)>0) call acc_delete_finalize(a%ja) - if (psb_size(a%irp)>0) call acc_delete_finalize(a%irp) + if (psb_size(a%val)>0) then + !$acc exit data delete(a%val) finalize + end if + if (psb_size(a%ja)>0) then + !$acc exit data delete(a%ja) finalize + end if + if (psb_size(a%irp)>0) then + !$acc exit data delete(a%irp) finalize + end if return end subroutine z_oacc_csr_free_dev_space @@ -257,9 +263,15 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_copyin(a%val) - if (psb_size(a%ja)>0) call acc_copyin(a%ja) - if (psb_size(a%irp)>0) call acc_copyin(a%irp) + if (psb_size(a%val)>0) then + !$acc enter data copyin(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc enter data copyin(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc enter data copyin(a%irp) + end if end subroutine z_oacc_csr_sync_dev_space subroutine z_oacc_csr_sync(a) @@ -275,13 +287,25 @@ contains ! will fail ! if (a%is_dev()) then - if (psb_size(a%val)>0) call acc_update_self(a%val) - if (psb_size(a%ja)>0) call acc_update_self(a%ja) - if (psb_size(a%irp)>0) call acc_update_self(a%irp) + if (psb_size(a%val)>0) then + !$acc update self(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update self(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc update self(a%irp) + end if else if (a%is_host()) then - if (psb_size(a%val)>0) call acc_update_device(a%val) - if (psb_size(a%ja)>0) call acc_update_device(a%ja) - if (psb_size(a%irp)>0) call acc_update_device(a%irp) + if (psb_size(a%val)>0) then + !$acc update device(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update device(a%ja) + end if + if (psb_size(a%irp)>0) then + !$acc update device(a%irp) + end if end if call tmpa%set_sync() end subroutine z_oacc_csr_sync diff --git a/openacc/psb_z_oacc_ell_mat_mod.F90 b/openacc/psb_z_oacc_ell_mat_mod.F90 index abfb11e30..a79bebf51 100644 --- a/openacc/psb_z_oacc_ell_mat_mod.F90 +++ b/openacc/psb_z_oacc_ell_mat_mod.F90 @@ -143,10 +143,18 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_delete_finalize(a%val) - if (psb_size(a%ja)>0) call acc_delete_finalize(a%ja) - if (psb_size(a%irn)>0) call acc_delete_finalize(a%irn) - if (psb_size(a%idiag)>0) call acc_delete_finalize(a%idiag) + if (psb_size(a%val)>0) then + !$acc exit data delete(a%val) finalize + end if + if (psb_size(a%ja)>0) then + !$acc exit data delete(a%ja) finalize + end if + if (psb_size(a%irn)>0) then + !$acc exit data delete(a%irn) finalize + end if + if (psb_size(a%idiag)>0) then + !$acc exit data delete(a%idiag) finalize + end if return end subroutine z_oacc_ell_free_dev_space @@ -170,7 +178,7 @@ contains if (a%is_dev()) call a%sync() res = 8 - res = res + psb_sizeof_dp * size(a%val) + res = res + (2*psb_sizeof_dp) * size(a%val) res = res + psb_sizeof_ip * size(a%ja) res = res + psb_sizeof_ip * size(a%irn) res = res + psb_sizeof_ip * size(a%idiag) @@ -186,10 +194,18 @@ contains ! but with size 0, then CREATE,UPDATE and DELETE ! will fail ! - if (psb_size(a%val)>0) call acc_copyin(a%val) - if (psb_size(a%ja)>0) call acc_copyin(a%ja) - if (psb_size(a%irn)>0) call acc_copyin(a%irn) - if (psb_size(a%idiag)>0) call acc_copyin(a%idiag) + if (psb_size(a%val)>0) then + !$acc enter data copyin(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc enter data copyin(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc enter data copyin(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc enter data copyin(a%idiag) + end if end subroutine z_oacc_ell_sync_dev_space function z_oacc_ell_is_host(a) result(res) @@ -256,15 +272,31 @@ contains ! will fail ! if (a%is_dev()) then - if (psb_size(a%val)>0) call acc_update_self(a%val) - if (psb_size(a%ja)>0) call acc_update_self(a%ja) - if (psb_size(a%irn)>0) call acc_update_self(a%irn) - if (psb_size(a%idiag)>0) call acc_update_self(a%idiag) + if (psb_size(a%val)>0) then + !$acc update self(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update self(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc update self(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc update self(a%idiag) + end if else if (a%is_host()) then - if (psb_size(a%val)>0) call acc_update_device(a%val) - if (psb_size(a%ja)>0) call acc_update_device(a%ja) - if (psb_size(a%irn)>0) call acc_update_device(a%irn) - if (psb_size(a%idiag)>0) call acc_update_device(a%idiag) + if (psb_size(a%val)>0) then + !$acc update device(a%val) + end if + if (psb_size(a%ja)>0) then + !$acc update device(a%ja) + end if + if (psb_size(a%irn)>0) then + !$acc update device(a%irn) + end if + if (psb_size(a%idiag)>0) then + !$acc update device(a%idiag) + end if end if call tmpa%set_sync() end subroutine z_oacc_ell_sync diff --git a/openacc/psb_z_oacc_hll_mat_mod.F90 b/openacc/psb_z_oacc_hll_mat_mod.F90 index 4c9f1b117..2cce6e2d1 100644 --- a/openacc/psb_z_oacc_hll_mat_mod.F90 +++ b/openacc/psb_z_oacc_hll_mat_mod.F90 @@ -171,7 +171,7 @@ contains if (a%is_dev()) call a%sync() res = 8 - res = res + psb_sizeof_dp * size(a%val) + res = res + (2*psb_sizeof_dp) * size(a%val) res = res + psb_sizeof_ip * size(a%ja) res = res + psb_sizeof_ip * size(a%irn) res = res + psb_sizeof_ip * size(a%idiag) diff --git a/openacc/psb_z_oacc_vect_mod.F90 b/openacc/psb_z_oacc_vect_mod.F90 index a119303d2..88ba484bf 100644 --- a/openacc/psb_z_oacc_vect_mod.F90 +++ b/openacc/psb_z_oacc_vect_mod.F90 @@ -829,9 +829,10 @@ contains complex(psb_dpk_) :: res integer(psb_ipk_) :: i + res = zzero !$acc parallel loop reduction(+:res) present(x, y) do i = 1, n - res = res + x(i) * y(i) + res = res + conjg(x(i)) * y(i) end do !$acc end parallel loop end function z_inner_oacc_dot @@ -843,10 +844,10 @@ contains complex(psb_dpk_), intent(in) :: y(:) integer(psb_ipk_), intent(in) :: n complex(psb_dpk_) :: res - complex(psb_dpk_), external :: zdot + complex(psb_dpk_), external :: zdotc if (x%is_dev()) call x%sync() - res = zdot(n, y, 1, x%v, 1) + res = zdotc(n, y, 1, x%v, 1) end function z_oacc_dot_a @@ -943,6 +944,7 @@ contains class(psb_z_vect_oacc), intent(out) :: x integer(psb_ipk_), intent(out) :: info + call x%free(info) call psb_realloc(n, x%v, info) if (info /= 0) then info = psb_err_alloc_request_ From 388b679d8aed5056360cd79d432c6bf6b76b3341 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 28 Oct 2025 11:31:00 +0100 Subject: [PATCH 035/175] Fixed OpenACC test program mixed with CUDA --- test/openacc/Makefile | 26 +- test/openacc/dpdegenmv.F90 | 631 +++---------------- test/openacc/dpmix.F90 | 1216 ------------------------------------ 3 files changed, 88 insertions(+), 1785 deletions(-) delete mode 100644 test/openacc/dpmix.F90 diff --git a/test/openacc/Makefile b/test/openacc/Makefile index 85d723301..891789f44 100644 --- a/test/openacc/Makefile +++ b/test/openacc/Makefile @@ -12,9 +12,9 @@ EXEDIR=./runs PSBLAS_LIB= -L$(LIBDIR) -L$(PSBLIBDIR) -lpsb_openacc -lpsb_ext -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base LDLIBS=$(PSBGPULDLIBS) -FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG)$(INCDIR) $(FMFLAG). $(FMFLAG)$(PSBMODDIR) $(FMFLAG)$(PSBINCDIR) $(LIBRSB_DEFINES) +FINCLUDES= $(FMFLAG). $(FMFLAG)$(MODDIR) $(FMFLAG)$(INCDIR) $(FMFLAG)$(PSBMODDIR) $(FMFLAG)$(PSBINCDIR) $(LIBRSB_DEFINES) -FFLAGS=-O3 -march=native $(FCOPENACC) -DOPENACC -DCUDA +FFLAGS=-O3 -march=native $(FCOPENACC) -DPSB_OPENACC -DPSB_HAVE_CUDA CFLAGS=-O3 -march=native VTC=vectoacc.o @@ -22,9 +22,8 @@ DVT=datavect.o CSRC=timers.c OBJS=$(SRCS:.F90=.o) $(CSRC:.c=.o) -OADIR=oaobjs -all: dir psb_d_oacc_pde3d dpdegenmv +all: dir dpdegenmv #$(OBJS) # $(FC) $(FFLAGS) $(OBJS) -o datavect $(FINCLUDES) $(PSBLAS_LIB) $(LDLIBS) @@ -43,25 +42,12 @@ dir: %.o: %.c $(CC) $(CFLAGS) $(FINCLUDES) -c $< -o $@ -cpyoa: - @if test ! -d $(OADIR); then mkdir $(OADIR); fi - /bin/cp $(TOPDIR)/openacc/*.o $(OADIR) - /bin/cp $(TOPDIR)/openacc/impl/*.o $(OADIR) - -psb_d_oacc_pde3d: - mpifort -fallow-argument-mismatch -frecursive -g -O3 -frecursive -I../../modules/ -I. -DOPENACC -DHAVE_LAPACK -DHAVE_FLUSH_STMT -DLPK8 -DIPK4 -DMPI_MOD -c psb_d_oacc_pde3d.F90 -o psb_d_oacc_pde3d.o - $(FLINK) -fopenacc -DOPENACC psb_d_oacc_pde3d.o -o psb_d_oacc_pde3d $(PSBLAS_LIB) $(LDLIBS) - /bin/mv psb_d_oacc_pde3d $(EXEDIR) - -dpdegenmv: dpdegenmv.o cpyoa - $(FLINK) $(FCOPENACC) dpdegenmv.o -o dpdegenmv $(OADIR)/*.o $(PSBLAS_LIB) $(LDLIBS) +dpdegenmv.o: psb_d_pde3d_mod.o +dpdegenmv: dpdegenmv.o psb_d_pde3d_mod.o + $(FLINK) $(FCOPENACC) dpdegenmv.o psb_d_pde3d_mod.o -o dpdegenmv -fuse-ld=mold $(PSBLAS_LIB) $(LDLIBS) /bin/mv dpdegenmv $(EXEDIR) -dpmix: dpmix.o cpyoa - $(FLINK) $(FCOPENACC) dpmix.o -o dpmix $(OADIR)/*.o $(PSBLAS_LIB) $(LDLIBS) - /bin/mv dpmix $(EXEDIR) - clean: /bin/rm -fr *.o *.mod $(EXEDIR)/* diff --git a/test/openacc/dpdegenmv.F90 b/test/openacc/dpdegenmv.F90 index 3342c6dcc..951e41e19 100644 --- a/test/openacc/dpdegenmv.F90 +++ b/test/openacc/dpdegenmv.F90 @@ -37,531 +37,17 @@ ! the main PSBLAS library. ! ! -module psb_d_pde3d_mod - - - use psb_base_mod, only : psb_dpk_, psb_ipk_, psb_lpk_, psb_desc_type,& - & psb_dspmat_type, psb_d_vect_type, dzero,& - & psb_d_base_sparse_mat, psb_d_base_vect_type, & - & psb_i_base_vect_type, psb_l_base_vect_type - - interface - function d_func_3d(x,y,z) result(val) - import :: psb_dpk_ - real(psb_dpk_), intent(in) :: x,y,z - real(psb_dpk_) :: val - end function d_func_3d - end interface - - interface psb_gen_pde3d - module procedure psb_d_gen_pde3d - end interface psb_gen_pde3d - -contains - - function d_null_func_3d(x,y,z) result(val) - - real(psb_dpk_), intent(in) :: x,y,z - real(psb_dpk_) :: val - - val = dzero - - end function d_null_func_3d - ! - ! functions parametrizing the differential equation - ! - - ! - ! Note: b1, b2 and b3 are the coefficients of the first - ! derivative of the unknown function. The default - ! we apply here is to have them zero, so that the resulting - ! matrix is symmetric/hermitian and suitable for - ! testing with CG and FCG. - ! When testing methods for non-hermitian matrices you can - ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) - ! - function b1(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b1 - real(psb_dpk_), intent(in) :: x,y,z - b1=done/sqrt((3*done)) - end function b1 - function b2(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b2 - real(psb_dpk_), intent(in) :: x,y,z - b2=done/sqrt((3*done)) - end function b2 - function b3(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b3 - real(psb_dpk_), intent(in) :: x,y,z - b3=done/sqrt((3*done)) - end function b3 - function c(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: c - real(psb_dpk_), intent(in) :: x,y,z - c=dzero - end function c - function a1(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a1 - real(psb_dpk_), intent(in) :: x,y,z - a1=done/80 - end function a1 - function a2(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a2 - real(psb_dpk_), intent(in) :: x,y,z - a2=done/80 - end function a2 - function a3(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a3 - real(psb_dpk_), intent(in) :: x,y,z - a3=done/80 - end function a3 - function g(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: g - real(psb_dpk_), intent(in) :: x,y,z - g = dzero - if (x == done) then - g = done - else if (x == dzero) then - g = exp(y**2-z**2) - end if - end function g - - - ! - ! subroutine to allocate and fill in the coefficient matrix and - ! the rhs. - ! - subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& - & f,amold,vmold,imold,partition,nrl,iv,tnd) - use psb_base_mod - use psb_util_mod - ! - ! Discretizes the partial differential equation - ! - ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) - ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f - ! dxdx dydy dzdz dx dy dz - ! - ! with Dirichlet boundary conditions - ! u = g - ! - ! on the unit cube 0<=x,y,z<=1. - ! - ! - ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. - ! - implicit none - integer(psb_ipk_) :: idim - type(psb_dspmat_type) :: a - type(psb_d_vect_type) :: xv,bv - type(psb_desc_type) :: desc_a - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: info - character(len=*) :: afmt - procedure(d_func_3d), optional :: f - class(psb_d_base_sparse_mat), optional :: amold - class(psb_d_base_vect_type), optional :: vmold - class(psb_i_base_vect_type), optional :: imold - integer(psb_ipk_), optional :: partition, nrl,iv(:) - logical, optional :: tnd - ! Local variables. - - integer(psb_ipk_), parameter :: nb=20 - type(psb_d_csc_sparse_mat) :: acsc - type(psb_d_coo_sparse_mat) :: acoo - type(psb_d_csr_sparse_mat) :: acsr - real(psb_dpk_) :: zt(nb),x,y,z - integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ - integer(psb_lpk_) :: m,n,glob_row,nt - integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner - ! For 3D partition - ! Note: integer control variables going directly into an MPI call - ! must be 4 bytes, i.e. psb_mpk_ - integer(psb_mpk_) :: npdims(3), npp, minfo - integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz - integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) - ! Process grid - integer(psb_ipk_) :: np, iam - integer(psb_ipk_) :: icoeff - integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) - real(psb_dpk_), allocatable :: val(:) - ! deltah dimension of each grid cell - ! deltat discretization time - real(psb_dpk_) :: deltah, sqdeltah, deltah2 - real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero - real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb - integer(psb_ipk_) :: err_act - procedure(d_func_3d), pointer :: f_ - logical :: tnd_ - character(len=20) :: name, ch_err,tmpfmt - - info = psb_success_ - name = 'create_matrix' - call psb_erractionsave(err_act) - - call psb_info(ctxt, iam, np) - - - if (present(f)) then - f_ => f - else - f_ => d_null_func_3d - end if - - deltah = done/(idim+2) - sqdeltah = deltah*deltah - deltah2 = (2*done)* deltah - - if (present(partition)) then - if ((1<= partition).and.(partition <= 3)) then - partition_ = partition - else - write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' - partition_ = 3 - end if - else - partition_ = 3 - end if - - ! initialize array descriptor and sparse matrix storage. provide an - ! estimate of the number of non zeroes - - m = (1_psb_lpk_*idim)*idim*idim - n = m - nnz = ((n*7)/(np)) - if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n - t0 = psb_wtime() - select case(partition_) - case(1) - ! A BLOCK partition - if (present(nrl)) then - nr = nrl - else - ! - ! Using a simple BLOCK distribution. - ! - nt = (m+np-1)/np - nr = max(0,min(nt,m-(iam*nt))) - end if - - nt = nr - call psb_sum(ctxt,nt) - if (nt /= m) then - write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - - ! - ! First example of use of CDALL: specify for each process a number of - ! contiguous rows - ! - call psb_cdall(ctxt,desc_a,info,nl=nr) - myidx = desc_a%get_global_indices() - nlr = size(myidx) - - case(2) - ! A partition defined by the user through IV - - if (present(iv)) then - if (size(iv) /= m) then - write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - else - write(psb_err_unit,*) iam, 'Initialization error: IV not present' - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - - ! - ! Second example of use of CDALL: specify for each row the - ! process that owns it - ! - call psb_cdall(ctxt,desc_a,info,vg=iv) - myidx = desc_a%get_global_indices() - nlr = size(myidx) - - case(3) - ! A 3-dimensional partition - - ! A nifty MPI function will split the process list - npdims = 0 - call mpi_dims_create(np,3,npdims,info) - npx = npdims(1) - npy = npdims(2) - npz = npdims(3) - - allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) - ! We can reuse idx2ijk for process indices as well. - call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) - ! Now let's split the 3D cube in hexahedra - call dist1Didx(bndx,idim,npx) - mynx = bndx(iamx+1)-bndx(iamx) - call dist1Didx(bndy,idim,npy) - myny = bndy(iamy+1)-bndy(iamy) - call dist1Didx(bndz,idim,npz) - mynz = bndz(iamz+1)-bndz(iamz) - - ! How many indices do I own? - nlr = mynx*myny*mynz - allocate(myidx(nlr)) - ! Now, let's generate the list of indices I own - nr = 0 - do i=bndx(iamx),bndx(iamx+1)-1 - do j=bndy(iamy),bndy(iamy+1)-1 - do k=bndz(iamz),bndz(iamz+1)-1 - nr = nr + 1 - call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) - end do - end do - end do - if (nr /= nlr) then - write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& - & nr,nlr,mynx,myny,mynz - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - end if - - ! - ! Third example of use of CDALL: specify for each process - ! the set of global indices it owns. - ! - call psb_cdall(ctxt,desc_a,info,vl=myidx) - - case default - write(psb_err_unit,*) iam, 'Initialization error: should not get here' - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end select - - - if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz,& - & dupl=psb_dupl_err_) - ! define rhs from boundary conditions; also build initial guess - if (info == psb_success_) call psb_geall(xv,desc_a,info) - if (info == psb_success_) call psb_geall(bv,desc_a,info) - - call psb_barrier(ctxt) - talc = psb_wtime()-t0 - - if (info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='allocation rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - ! we build an auxiliary matrix consisting of one row at a - ! time; just a small matrix. might be extended to generate - ! a bunch of rows per call. - ! - allocate(val(20*nb),irow(20*nb),& - &icol(20*nb),stat=info) - if (info /= psb_success_ ) then - info=psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - - ! loop over rows belonging to current process in a block - ! distribution. - - call psb_barrier(ctxt) - t1 = psb_wtime() - do ii=1, nlr,nb - ib = min(nb,nlr-ii+1) - icoeff = 1 - do k=1,ib - i=ii+k-1 - ! local matrix pointer - glob_row=myidx(i) - ! compute gridpoint coordinates - call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) - ! x, y, z coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah - z = (iz-1)*deltah - zt(k) = f_(x,y,z) - ! internal point: build discretization - ! - ! term depending on (x-1,y,z) - ! - val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 - if (ix == 1) then - zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y-1,z) - val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 - if (iy == 1) then - zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y,z-1) - val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 - if (iz == 1) then - zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - - ! term depending on (x,y,z) - val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & - & + c(x,y,z) - call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - ! term depending on (x,y,z+1) - val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 - if (iz == idim) then - zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y+1,z) - val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 - if (iy == idim) then - zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x+1,y,z) - val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 - if (ix==idim) then - zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - - end do - call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) - if(info /= psb_success_) exit - call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) - if(info /= psb_success_) exit - zt(:)=dzero - call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) - if(info /= psb_success_) exit - end do - - tgen = psb_wtime()-t1 - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='insert rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - deallocate(val,irow,icol) - - call psb_barrier(ctxt) - t1 = psb_wtime() - call psb_cdasb(desc_a,info,mold=imold) - tcdasb = psb_wtime()-t1 - call psb_barrier(ctxt) - t1 = psb_wtime() - if (info == psb_success_) then - if (present(amold)) then - call psb_spasb(a,desc_a,info,mold=amold,bld_and=tnd) - else - call psb_spasb(a,desc_a,info,afmt=afmt,bld_and=tnd) - end if - end if - call psb_barrier(ctxt) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='asb rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - if (info == psb_success_) call psb_geasb(xv,desc_a,info,mold=vmold) - if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='asb rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - tasb = psb_wtime()-t1 - call psb_barrier(ctxt) - ttot = psb_wtime() - t0 - - call psb_amx(ctxt,talc) - call psb_amx(ctxt,tgen) - call psb_amx(ctxt,tasb) - call psb_amx(ctxt,ttot) - if(iam == psb_root_) then - tmpfmt = a%get_fmt() - write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& - & tmpfmt - write(psb_out_unit,'("-allocation time : ",es12.5)') talc - write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen - write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb - write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb - write(psb_out_unit,'("-total time : ",es12.5)') ttot - - end if - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psb_d_gen_pde3d - - -end module psb_d_pde3d_mod - - program pdgenmv use psb_base_mod use psb_util_mod use psb_ext_mod -#ifdef OPENACC + use psb_d_pde3d_mod +#ifdef PSB_OPENACC use psb_oacc_mod #endif - use psb_d_pde3d_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif implicit none ! input parameters @@ -580,10 +66,6 @@ program pdgenmv type(psb_desc_type) :: desc_a ! dense matrices type(psb_d_vect_type), target :: xv, bv, xg, bg -#ifdef OPENACC - type(psb_d_vect_oacc) :: vmold - type(psb_i_vect_oacc) :: imold -#endif real(psb_dpk_), allocatable :: x1(:), x2(:), x0(:) ! blacs parameters type(psb_ctxt_type) :: ctxt @@ -599,12 +81,29 @@ program pdgenmv type(psb_d_hll_sparse_mat), target :: ahll type(psb_d_dia_sparse_mat), target :: adia type(psb_d_hdia_sparse_mat), target :: ahdia -#ifdef OPENACC - type(psb_d_oacc_ell_sparse_mat), target :: aelg - type(psb_d_oacc_csr_sparse_mat), target :: acsrg - type(psb_d_oacc_hll_sparse_mat), target :: ahlg + type(psb_d_base_vect_type), target :: dvect + type(psb_i_base_vect_type), target :: ivect + class(psb_d_base_sparse_mat), pointer :: acmold => acsr + class(psb_d_base_vect_type), pointer :: vmold => dvect + class(psb_i_base_vect_type), pointer :: imold => ivect + class(psb_d_base_vect_type), pointer :: vgmold => dvect + class(psb_i_base_vect_type), pointer :: igmold => ivect +#if defined(PSB_HAVE_CUDA) + type(psb_d_cuda_hlg_sparse_mat), target :: ahlg + type(psb_d_cuda_hdiag_sparse_mat), target :: ahdiag + type(psb_d_cuda_csrg_sparse_mat), target :: acsrg + type(psb_d_cuda_elg_sparse_mat), target :: aelg + type(psb_d_vect_cuda), target :: dvgpu + type(psb_i_vect_cuda), target :: ivgpu #endif - class(psb_d_base_sparse_mat), pointer :: agmold, acmold +#if defined(PSB_OPENACC) + type(psb_d_oacc_hll_sparse_mat), target :: ahlo + type(psb_d_oacc_csr_sparse_mat), target :: acsro + type(psb_d_oacc_ell_sparse_mat), target :: aelo + type(psb_d_vect_oacc), target :: dvoac + type(psb_i_vect_oacc), target :: ivoac +#endif + class(psb_d_base_sparse_mat), pointer :: agmold ! other variables logical, parameter :: dump=.false. integer(psb_ipk_) :: info, i, j, nr, nrg @@ -618,9 +117,12 @@ program pdgenmv call psb_init(ctxt) call psb_info(ctxt,iam,np) -#ifdef OPENACC +#ifdef PSB_OPENACC call psb_oacc_init(ctxt) #endif +#ifdef PSB_HAVE_CUDA + call psb_cuda_init(ctxt) +#endif if (iam < 0) then ! This should not happen, but just in case @@ -636,9 +138,13 @@ program pdgenmv write(*,*) 'Welcome to PSBLAS version: ',psb_version_string_ write(*,*) 'This is the ',trim(name),' sample program' end if -#ifdef OPENACC +#ifdef PSB_OPENACC !!$ write(*,*) 'Process ',iam,' running on device: ', psb_oacc_getDevice(),' out of', psb_oacc_getDeviceCount() !!$ write(*,*) 'Process ',iam,' device ', psb_oacc_getDevice(),' is a: ', trim(psb_oacc_DeviceName()) +#endif +#if defined(PSB_HAVE_CUDA) + write(*,*) 'Process ',iam,' running on device: ', psb_cuda_getDevice(),' out of', psb_cuda_getDeviceCount() + write(*,*) 'Process ',iam,' device ', psb_cuda_getDevice(),' is a: ', trim(psb_cuda_DeviceName()) #endif ! ! get parameters @@ -650,7 +156,7 @@ program pdgenmv ! call psb_barrier(ctxt) t1 = psb_wtime() - call psb_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,'CSR ',info,partition=3,tnd=tnd) + call psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,'CSR ',info,partition=3,tnd=tnd) call psb_barrier(ctxt) t2 = psb_wtime() - t1 if(info /= psb_success_) then @@ -691,29 +197,54 @@ program pdgenmv stop end if -#ifdef OPENACC select case(psb_toupper(agfmt)) +#if defined(PSB_HAVE_CUDA) case('ELG') agmold => aelg + vgmold => dvgpu + igmold => ivgpu case('HLG') + call psi_set_hksz(32) agmold => ahlg + vgmold => dvgpu + igmold => ivgpu + case('HDIAG') + agmold => ahdiag + vgmold => dvgpu + igmold => ivgpu case('CSRG') agmold => acsrg - case default - write(*,*) 'Unknown format defaulting to HLG' - agmold => ahlg - end select + vgmold => dvgpu + igmold => ivgpu +#endif +#if defined(PSB_OPENACC) + case('ELO') + agmold => aelo + vgmold => dvoac + igmold => ivoac + case('HLO') + call psi_set_hksz(32) + agmold => ahlo + vgmold => dvoac + igmold => ivoac +!!$ case('HDIAG') +!!$ amold => ahdiag + case('CSRO') + agmold => acsro + vgmold => dvoac + igmold => ivoac #endif + end select call a%cscnv(agpu,info,mold=agmold) if ((info /= 0).or.(psb_get_errstatus()/=0)) then write(0,*) 'From cscnv ',info call psb_error() stop end if - call desc_a%cnv(mold=imold) + call desc_a%cnv(mold=igmold) - call psb_geasb(bg,desc_a,info,scratch=.true.,mold=vmold) - call psb_geasb(xg,desc_a,info,scratch=.true.,mold=vmold) + call psb_geasb(bg,desc_a,info,scratch=.true.,mold=vgmold) + call psb_geasb(xg,desc_a,info,scratch=.true.,mold=vgmold) nr = desc_a%get_local_rows() nrg = desc_a%get_global_rows() call psb_geall(x0,desc_a,info) @@ -738,11 +269,10 @@ program pdgenmv call xv%bld(x0) call psb_geasb(bv,desc_a,info,scratch=.true.) -#ifdef OPENACC - +#if defined(PSB_OPENACC)||defined(PSB_HAVE_CUDA) call aux_a%cscnv(agpu,info,mold=acoo) - call xg%bld(x0,mold=vmold) - call psb_geasb(bg,desc_a,info,scratch=.true.,mold=vmold) + call xg%bld(x0,mold=vgmold) + call psb_geasb(bg,desc_a,info,scratch=.true.,mold=vgmold) call psb_barrier(ctxt) t1 = psb_wtime() call agpu%cscnv(info,mold=agmold) @@ -765,7 +295,7 @@ program pdgenmv t2 = psb_wtime() - t1 call psb_amx(ctxt,t2) -#ifdef OPENACC +#if defined(PSB_OPENACC)||defined(PSB_HAVE_CUDA) call xg%set(x0) ! FIXME: cache flush needed here @@ -861,7 +391,7 @@ program pdgenmv tflops = flops gflops = flops * ngpu write(psb_out_unit,'("Storage type for A: ",a)') a%get_fmt() -#ifdef OPENACC +#if defined(PSB_OPENACC)||defined(PSB_HAVE_CUDA) write(psb_out_unit,'("Storage type for AGPU: ",a)') agpu%get_fmt() write(psb_out_unit,'("Time to convert A from COO to CPU (1): ",F20.9)')& & tcnvc1 @@ -891,7 +421,7 @@ program pdgenmv & t2*1.d3/(1.d0*ntests) write(psb_out_unit,'("MFLOPS (CPU) : ",F20.3)')& & flops/1.d6 -#ifdef OPENACC +#if defined(PSB_OPENACC)||defined(PSB_HAVE_CUDA) write(psb_out_unit,'("Time for ",i6," products (s) (xGPU) : ",F20.3)')& & ntests, tt2 write(psb_out_unit,'("Time per product (ms) (xGPU) : ",F20.3)')& @@ -916,7 +446,7 @@ program pdgenmv bdwdth = ntests*nbytes/(t2*1.d6) write(psb_out_unit,*) write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (CPU) : ",F20.3)') bdwdth -#ifdef OPENACC +#if defined(PSB_OPENACC)||defined(PSB_HAVE_CUDA) bdwdth = ngpu*ntests*nbytes/(gt2*1.d6) write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (GPU) : ",F20.3)') bdwdth !!$ bdwdth = psb_oacc_MemoryPeakBandwidth() @@ -941,8 +471,11 @@ program pdgenmv call psb_errpush(info,name,a_err=ch_err) goto 9999 end if -#ifdef OPENACC +#ifdef PSB_OPENACC call psb_oacc_exit() +#endif +#ifdef PSB_HAVE_CUDA + call psb_cuda_exit() #endif call psb_exit(ctxt) stop @@ -967,7 +500,7 @@ contains if (iam == 0) then write(*,*) 'CPU side format?' read(psb_inp_unit,*) acfmt - write(*,*) 'OACC side format?' + write(*,*) 'DEVICE side format?' read(psb_inp_unit,*) agfmt write(*,*) 'Size of discretization cube?' read(psb_inp_unit,*) idim diff --git a/test/openacc/dpmix.F90 b/test/openacc/dpmix.F90 deleted file mode 100644 index 3950dc447..000000000 --- a/test/openacc/dpmix.F90 +++ /dev/null @@ -1,1216 +0,0 @@ -! -! Parallel Sparse BLAS GPU plugin -! (C) Copyright 2013 -! Salvatore Filippone -! Alessandro Fanfarillo -! -! Redistribution and use in source and binary forms, with or without -! modification, are permitted provided that the following conditions -! are met: -! 1. Redistributions of source code must retain the above copyright -! notice, this list of conditions and the following disclaimer. -! 2. Redistributions in binary form must reproduce the above copyright -! notice, this list of conditions, and the following disclaimer in the -! documentation and/or other materials provided with the distribution. -! 3. The name of the PSBLAS group or the names of its contributors may -! not be used to endorse or promote products derived from this -! software without specific written permission. -! -! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS -! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -! POSSIBILITY OF SUCH DAMAGE. -! -! -! File: dpdegenmv.f90 -! -! Program: pdegenmv -! This sample program measures the performance of the matrix-vector product. -! The matrix is generated in the same way as for the pdegen test case of -! the main PSBLAS library. -! -! -module psb_d_pde3d_mod - - - use psb_base_mod, only : psb_dpk_, psb_ipk_, psb_lpk_, psb_desc_type,& - & psb_dspmat_type, psb_d_vect_type, dzero,& - & psb_d_base_sparse_mat, psb_d_base_vect_type, & - & psb_i_base_vect_type, psb_l_base_vect_type - - interface - function d_func_3d(x,y,z) result(val) - import :: psb_dpk_ - real(psb_dpk_), intent(in) :: x,y,z - real(psb_dpk_) :: val - end function d_func_3d - end interface - - interface psb_gen_pde3d - module procedure psb_d_gen_pde3d - end interface psb_gen_pde3d - -contains - - function d_null_func_3d(x,y,z) result(val) - - real(psb_dpk_), intent(in) :: x,y,z - real(psb_dpk_) :: val - - val = dzero - - end function d_null_func_3d - ! - ! functions parametrizing the differential equation - ! - - ! - ! Note: b1, b2 and b3 are the coefficients of the first - ! derivative of the unknown function. The default - ! we apply here is to have them zero, so that the resulting - ! matrix is symmetric/hermitian and suitable for - ! testing with CG and FCG. - ! When testing methods for non-hermitian matrices you can - ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) - ! - function b1(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b1 - real(psb_dpk_), intent(in) :: x,y,z - b1=done/sqrt((3*done)) - end function b1 - function b2(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b2 - real(psb_dpk_), intent(in) :: x,y,z - b2=done/sqrt((3*done)) - end function b2 - function b3(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b3 - real(psb_dpk_), intent(in) :: x,y,z - b3=done/sqrt((3*done)) - end function b3 - function c(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: c - real(psb_dpk_), intent(in) :: x,y,z - c=dzero - end function c - function a1(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a1 - real(psb_dpk_), intent(in) :: x,y,z - a1=done/80 - end function a1 - function a2(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a2 - real(psb_dpk_), intent(in) :: x,y,z - a2=done/80 - end function a2 - function a3(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a3 - real(psb_dpk_), intent(in) :: x,y,z - a3=done/80 - end function a3 - function g(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: g - real(psb_dpk_), intent(in) :: x,y,z - g = dzero - if (x == done) then - g = done - else if (x == dzero) then - g = exp(y**2-z**2) - end if - end function g - - - ! - ! subroutine to allocate and fill in the coefficient matrix and - ! the rhs. - ! - subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& - & f,amold,vmold,imold,partition,nrl,iv,tnd) - use psb_base_mod - use psb_util_mod - ! - ! Discretizes the partial differential equation - ! - ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) - ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f - ! dxdx dydy dzdz dx dy dz - ! - ! with Dirichlet boundary conditions - ! u = g - ! - ! on the unit cube 0<=x,y,z<=1. - ! - ! - ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. - ! - implicit none - integer(psb_ipk_) :: idim - type(psb_dspmat_type) :: a - type(psb_d_vect_type) :: xv,bv - type(psb_desc_type) :: desc_a - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: info - character(len=*) :: afmt - procedure(d_func_3d), optional :: f - class(psb_d_base_sparse_mat), optional :: amold - class(psb_d_base_vect_type), optional :: vmold - class(psb_i_base_vect_type), optional :: imold - integer(psb_ipk_), optional :: partition, nrl,iv(:) - logical, optional :: tnd - ! Local variables. - - integer(psb_ipk_), parameter :: nb=20 - type(psb_d_csc_sparse_mat) :: acsc - type(psb_d_coo_sparse_mat) :: acoo - type(psb_d_csr_sparse_mat) :: acsr - real(psb_dpk_) :: zt(nb),x,y,z - integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ - integer(psb_lpk_) :: m,n,glob_row,nt - integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner - ! For 3D partition - ! Note: integer control variables going directly into an MPI call - ! must be 4 bytes, i.e. psb_mpk_ - integer(psb_mpk_) :: npdims(3), npp, minfo - integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz - integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) - ! Process grid - integer(psb_ipk_) :: np, iam - integer(psb_ipk_) :: icoeff - integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) - real(psb_dpk_), allocatable :: val(:) - ! deltah dimension of each grid cell - ! deltat discretization time - real(psb_dpk_) :: deltah, sqdeltah, deltah2 - real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero - real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb - integer(psb_ipk_) :: err_act - procedure(d_func_3d), pointer :: f_ - logical :: tnd_ - character(len=20) :: name, ch_err,tmpfmt - - info = psb_success_ - name = 'create_matrix' - call psb_erractionsave(err_act) - - call psb_info(ctxt, iam, np) - - - if (present(f)) then - f_ => f - else - f_ => d_null_func_3d - end if - - deltah = done/(idim+2) - sqdeltah = deltah*deltah - deltah2 = (2*done)* deltah - - if (present(partition)) then - if ((1<= partition).and.(partition <= 3)) then - partition_ = partition - else - write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' - partition_ = 3 - end if - else - partition_ = 3 - end if - - ! initialize array descriptor and sparse matrix storage. provide an - ! estimate of the number of non zeroes - - m = (1_psb_lpk_*idim)*idim*idim - n = m - nnz = ((n*7)/(np)) - if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n - t0 = psb_wtime() - select case(partition_) - case(1) - ! A BLOCK partition - if (present(nrl)) then - nr = nrl - else - ! - ! Using a simple BLOCK distribution. - ! - nt = (m+np-1)/np - nr = max(0,min(nt,m-(iam*nt))) - end if - - nt = nr - call psb_sum(ctxt,nt) - if (nt /= m) then - write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - - ! - ! First example of use of CDALL: specify for each process a number of - ! contiguous rows - ! - call psb_cdall(ctxt,desc_a,info,nl=nr) - myidx = desc_a%get_global_indices() - nlr = size(myidx) - - case(2) - ! A partition defined by the user through IV - - if (present(iv)) then - if (size(iv) /= m) then - write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - else - write(psb_err_unit,*) iam, 'Initialization error: IV not present' - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - - ! - ! Second example of use of CDALL: specify for each row the - ! process that owns it - ! - call psb_cdall(ctxt,desc_a,info,vg=iv) - myidx = desc_a%get_global_indices() - nlr = size(myidx) - - case(3) - ! A 3-dimensional partition - - ! A nifty MPI function will split the process list - npdims = 0 - call mpi_dims_create(np,3,npdims,info) - npx = npdims(1) - npy = npdims(2) - npz = npdims(3) - - allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) - ! We can reuse idx2ijk for process indices as well. - call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) - ! Now let's split the 3D cube in hexahedra - call dist1Didx(bndx,idim,npx) - mynx = bndx(iamx+1)-bndx(iamx) - call dist1Didx(bndy,idim,npy) - myny = bndy(iamy+1)-bndy(iamy) - call dist1Didx(bndz,idim,npz) - mynz = bndz(iamz+1)-bndz(iamz) - - ! How many indices do I own? - nlr = mynx*myny*mynz - allocate(myidx(nlr)) - ! Now, let's generate the list of indices I own - nr = 0 - do i=bndx(iamx),bndx(iamx+1)-1 - do j=bndy(iamy),bndy(iamy+1)-1 - do k=bndz(iamz),bndz(iamz+1)-1 - nr = nr + 1 - call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) - end do - end do - end do - if (nr /= nlr) then - write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& - & nr,nlr,mynx,myny,mynz - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - end if - - ! - ! Third example of use of CDALL: specify for each process - ! the set of global indices it owns. - ! - call psb_cdall(ctxt,desc_a,info,vl=myidx) - - case default - write(psb_err_unit,*) iam, 'Initialization error: should not get here' - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end select - - - if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz,& - & dupl=psb_dupl_err_) - ! define rhs from boundary conditions; also build initial guess - if (info == psb_success_) call psb_geall(xv,desc_a,info) - if (info == psb_success_) call psb_geall(bv,desc_a,info) - - call psb_barrier(ctxt) - talc = psb_wtime()-t0 - - if (info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='allocation rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - ! we build an auxiliary matrix consisting of one row at a - ! time; just a small matrix. might be extended to generate - ! a bunch of rows per call. - ! - allocate(val(20*nb),irow(20*nb),& - &icol(20*nb),stat=info) - if (info /= psb_success_ ) then - info=psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - - ! loop over rows belonging to current process in a block - ! distribution. - - call psb_barrier(ctxt) - t1 = psb_wtime() - do ii=1, nlr,nb - ib = min(nb,nlr-ii+1) - icoeff = 1 - do k=1,ib - i=ii+k-1 - ! local matrix pointer - glob_row=myidx(i) - ! compute gridpoint coordinates - call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) - ! x, y, z coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah - z = (iz-1)*deltah - zt(k) = f_(x,y,z) - ! internal point: build discretization - ! - ! term depending on (x-1,y,z) - ! - val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 - if (ix == 1) then - zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y-1,z) - val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 - if (iy == 1) then - zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y,z-1) - val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 - if (iz == 1) then - zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - - ! term depending on (x,y,z) - val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & - & + c(x,y,z) - call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - ! term depending on (x,y,z+1) - val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 - if (iz == idim) then - zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y+1,z) - val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 - if (iy == idim) then - zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x+1,y,z) - val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 - if (ix==idim) then - zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - - end do - call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) - if(info /= psb_success_) exit - call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) - if(info /= psb_success_) exit - zt(:)=dzero - call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) - if(info /= psb_success_) exit - end do - - tgen = psb_wtime()-t1 - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='insert rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - deallocate(val,irow,icol) - - call psb_barrier(ctxt) - t1 = psb_wtime() - call psb_cdasb(desc_a,info,mold=imold) - tcdasb = psb_wtime()-t1 - call psb_barrier(ctxt) - t1 = psb_wtime() - if (info == psb_success_) then - if (present(amold)) then - call psb_spasb(a,desc_a,info,mold=amold,bld_and=tnd) - else - call psb_spasb(a,desc_a,info,afmt=afmt,bld_and=tnd) - end if - end if - call psb_barrier(ctxt) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='asb rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - if (info == psb_success_) call psb_geasb(xv,desc_a,info,mold=vmold) - if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='asb rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - tasb = psb_wtime()-t1 - call psb_barrier(ctxt) - ttot = psb_wtime() - t0 - - call psb_amx(ctxt,talc) - call psb_amx(ctxt,tgen) - call psb_amx(ctxt,tasb) - call psb_amx(ctxt,ttot) - if(iam == psb_root_) then - tmpfmt = a%get_fmt() - write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& - & tmpfmt - write(psb_out_unit,'("-allocation time : ",es12.5)') talc - write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen - write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb - write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb - write(psb_out_unit,'("-total time : ",es12.5)') ttot - - end if - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psb_d_gen_pde3d - - -end module psb_d_pde3d_mod - - -program pdgenmv - use psb_base_mod - use psb_util_mod - use psb_ext_mod -#ifdef OPENACC - use psb_oacc_mod -#endif -#ifdef CUDA - use psb_cuda_mod -#endif - use psb_d_pde3d_mod - implicit none - - ! input parameters - character(len=5) :: acfmt, agfmt - integer :: idim - logical :: tnd - ! miscellaneous - real(psb_dpk_), parameter :: one = 1.d0 - real(psb_dpk_) :: t1, t2, tprec, flops, tflops,& - & tt1, tt2, gt1, gt2, gflops, bdwdth,& - & tcnvcsr, tcnvc1, tcnvgpu, tcnvg1 - - ! sparse matrix and preconditioner - type(psb_dspmat_type) :: a, aoacc, aux_a, acuda - ! descriptor - type(psb_desc_type) :: desc_a - ! dense matrices - type(psb_d_vect_type), target :: xv, bv, xoacc, boacc, xcuda,bcuda -#ifdef OPENACC - type(psb_d_vect_oacc) :: vomold - type(psb_i_vect_oacc) :: iomold -#endif -#ifdef CUDA - type(psb_d_vect_cuda) :: vgmold - type(psb_i_vect_cuda) :: igmold -#endif - real(psb_dpk_), allocatable :: x1(:), x2(:), x0(:) - ! blacs parameters - type(psb_ctxt_type) :: ctxt - integer :: iam, np - - ! solver parameters - integer(psb_epk_) :: amatsize, precsize, descsize, annz, nbytes - real(psb_dpk_) :: err, eps, tnv, tng,tdot, dnrm2,ddot - integer, parameter :: ntests=8, ngpu=4, ncnv=3 - type(psb_d_coo_sparse_mat), target :: acoo - type(psb_d_csr_sparse_mat), target :: acsr - type(psb_d_ell_sparse_mat), target :: aell - type(psb_d_hll_sparse_mat), target :: ahll - type(psb_d_dia_sparse_mat), target :: adia - type(psb_d_hdia_sparse_mat), target :: ahdia -#ifdef OPENACC - type(psb_d_oacc_ell_sparse_mat), target :: aelg - type(psb_d_oacc_csr_sparse_mat), target :: acsrg - type(psb_d_oacc_hll_sparse_mat), target :: ahlg -#endif -#ifdef CUDA - type(psb_d_cuda_elg_sparse_mat), target :: acelg - type(psb_d_cuda_csrg_sparse_mat), target :: accsrg - type(psb_d_cuda_hlg_sparse_mat), target :: achlg -#endif - class(psb_d_base_sparse_mat), pointer :: agmold, acmold, aomold - - ! other variables - logical, parameter :: dump=.false. - integer(psb_ipk_) :: info, i, j, nr, nrg - integer(psb_lpk_) :: ig - character(len=20) :: name,ch_err - character(len=40) :: fname - - info=psb_success_ - - - call psb_init(ctxt) - call psb_info(ctxt,iam,np) - -#ifdef OPENACC - call psb_oacc_init(ctxt) -#endif - -#ifdef CUDA - call psb_cuda_init(ctxt) -#endif - - if (iam < 0) then - ! This should not happen, but just in case - call psb_exit(ctxt) - stop - endif - if(psb_get_errstatus() /= 0) goto 9999 - name='pdegenmv-oacc' - ! - ! Hello world - ! - if (iam == psb_root_) then - write(*,*) 'Welcome to PSBLAS version: ',psb_version_string_ - write(*,*) 'This is the ',trim(name),' sample program' - end if -#ifdef OPENACC -!!$ write(*,*) 'Process ',iam,' running on device: ', psb_oacc_getDevice(),' out of', psb_oacc_getDeviceCount() -!!$ write(*,*) 'Process ',iam,' device ', psb_oacc_getDevice(),' is a: ', trim(psb_oacc_DeviceName()) -#endif -#ifdef CUDA - write(*,*) 'Process ',iam,' running on device: ', psb_cuda_getDevice(),' out of', psb_cuda_getDeviceCount() - write(*,*) 'Process ',iam,' device ', psb_cuda_getDevice(),' is a: ', trim(psb_cuda_DeviceName()) -#endif -!!$ call psb_oacc_DeviceSync() - call psb_cuda_DeviceSync() - ! - ! get parameters - ! - call get_parms(ctxt,acfmt,agfmt,idim,tnd) - call psb_init_timers() - ! - ! allocate and fill in the coefficient matrix and initial vectors - ! - call psb_barrier(ctxt) - t1 = psb_wtime() - call psb_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,'CSR ',info,partition=3,tnd=tnd) - call psb_barrier(ctxt) - t2 = psb_wtime() - t1 - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='create_matrix' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - if (iam == psb_root_) write(psb_out_unit,'("Overall matrix creation time : ",es12.5)')t2 - if (iam == psb_root_) write(psb_out_unit,'(" ")') - - if (dump) then - write(fname,'(a,i3.3,a,i3.3,a,i3.3,a)') 'pde',idim,'-',iam,'-',np,'.mtx' - call a%print(fname,head='PDEGEN test matrix') - end if - - select case(psb_toupper(acfmt)) - case('ELL') - acmold => aell - case('HLL') - acmold => ahll - case('DIA') - acmold => adia - case('HDIA') - acmold => ahdia - case('CSR') - acmold => acsr - case('COO') - acmold => acoo - case default - write(*,*) 'Unknown format defaulting to HLL' - acmold => ahll - end select - call a%cscnv(info,mold=acmold) - if ((info /= 0).or.(psb_get_errstatus()/=0)) then - write(0,*) 'From cscnv ',info - call psb_error() - stop - end if - -#ifdef OPENACC - select case(psb_toupper(agfmt)) - case('ELG') - aomold => aelg - case('HLG') - aomold => ahlg - case('CSRG') - aomold => acsrg - case default - write(*,*) 'Unknown format defaulting to HLG' - aomold => ahlg - end select - call a%cscnv(aoacc,info,mold=aomold) - if ((info /= 0).or.(psb_get_errstatus()/=0)) then - write(0,*) 'From cscnv ',info - call psb_error() - stop - end if - call desc_a%cnv(mold=iomold) - - call psb_geasb(boacc,desc_a,info,scratch=.true.,mold=vomold) - call psb_geasb(xoacc,desc_a,info,scratch=.true.,mold=vomold) - nr = desc_a%get_local_rows() - nrg = desc_a%get_global_rows() - call psb_geall(x0,desc_a,info) - do i=1, nr - call desc_a%l2g(i,ig,info) - x0(i) = 1.0 + (1.0*ig)/(nrg**2) - end do - call a%cscnv(aux_a,info,mold=acoo) - tcnvcsr = 0 - tcnvgpu = 0 - call psb_geall(x1,desc_a,info) - do j=1, ncnv - call aux_a%cscnv(a,info,mold=acoo) - call psb_barrier(ctxt) - t1 = psb_wtime() - call a%cscnv(info,mold=acmold) - t2 = psb_Wtime() -t1 - call psb_amx(ctxt,t2) - tcnvcsr = tcnvcsr + t2 - if (j==1) tcnvc1 = t2 - call psb_geasb(x1,desc_a,info) - call xv%bld(x0) - call psb_geasb(bv,desc_a,info,scratch=.true.) - - - call aux_a%cscnv(aoacc,info,mold=acoo) - call xoacc%bld(x0,mold=vomold) - call psb_geasb(boacc,desc_a,info,scratch=.true.,mold=vomold) - call psb_barrier(ctxt) - t1 = psb_wtime() - call aoacc%cscnv(info,mold=aomold) -!!$ call psb_oacc_DeviceSync() - t2 = psb_Wtime() -t1 - call psb_amx(ctxt,t2) - if (j==1) tcnvg1 = t2 - tcnvgpu = tcnvgpu + t2 - end do - - call xv%set(x0) - call psb_barrier(ctxt) - t1 = psb_wtime() - do i=1,ntests - call psb_spmm(done,a,xv,dzero,bv,desc_a,info) - end do - call psb_barrier(ctxt) - t2 = psb_wtime() - t1 - call psb_amx(ctxt,t2) - - call xoacc%set(x0) - - ! FIXME: cache flush needed here - x1 = bv%get_vect() - x2 = boacc%get_vect() - - call psb_barrier(ctxt) - tt1 = psb_wtime() - do i=1,ntests - call psb_spmm(done,aoacc,xv,dzero,boacc,desc_a,info) - if ((info /= 0).or.(psb_get_errstatus()/=0)) then - write(0,*) 'From 1 spmm',info,i,ntests - call psb_error() - stop - end if - - end do -!!$ call psb_oacc_DeviceSync() - call psb_barrier(ctxt) - tt2 = psb_wtime() - tt1 - call psb_amx(ctxt,tt2) - x1 = bv%get_vect() - x2 = boacc%get_vect() - nr = desc_a%get_local_rows() - eps = maxval(abs(x1(1:nr)-x2(1:nr))) - call psb_amx(ctxt,eps) - if (iam==0) write(*,*) 'Max diff on xoaccPU',eps - - ! FIXME: cache flush needed here - call xoacc%set(x0) - call xoacc%sync() - call psb_barrier(ctxt) - gt1 = psb_wtime() - do i=1,ntests*ngpu - call psb_spmm(done,aoacc,xoacc,dzero,boacc,desc_a,info) - ! For timing purposes we need to make sure all threads - ! in the device are done. - if ((info /= 0).or.(psb_get_errstatus()/=0)) then - write(0,*) 'From 2 spmm',info,i,ntests - call psb_error() - stop - end if - - end do -!!$ call psb_oacc_DeviceSync() - call psb_barrier(ctxt) - gt2 = psb_wtime() - gt1 - call psb_amx(ctxt,gt2) - call boacc%sync() - x1 = bv%get_vect() - x2 = boacc%get_vect() - tnv = psb_genrm2(bv,desc_a,info) - tng = psb_genrm2(boacc,desc_a,info) - tdot = psb_gedot(boacc,boacc,desc_a,info) -!!$ write(0,*) ' bv ',tnv,' boacc ',tng, ' dot ',tdot,eps,& -!!$ & dnrm2(desc_a%get_local_rows(),x2,1),& -!!$ & ddot(desc_a%get_local_rows(),x1,1,x2,1) - call psb_geaxpby(-done,boacc,+done,bv,desc_a,info) - eps = psb_geamax(bv,desc_a,info) - - call psb_amx(ctxt,t2) - eps = maxval(abs(x1(1:nr)-x2(1:nr))) - call psb_amx(ctxt,eps) - if (iam==0) write(*,*) 'Max diff on GPU',eps - if (dump) then - write(fname,'(a,i3.3,a,i3.3,a)')'XCPU-out-',iam,'-',np,'.mtx' - call mm_array_write(x1(1:nr),'Local part CPU',info,filename=fname) - write(fname,'(a,i3.3,a,i3.3,a)')'XGPU-out-',iam,'-',np,'.mtx' - call mm_array_write(x2(1:nr),'Local part GPU',info,filename=fname) - end if - - annz = a%get_nzeros() - amatsize = a%sizeof() - descsize = psb_sizeof(desc_a) - call psb_sum(ctxt,nr) - call psb_sum(ctxt,annz) - call psb_sum(ctxt,amatsize) - call psb_sum(ctxt,descsize) - - if (iam == psb_root_) then - write(psb_out_unit,& - & '("Matrix: ell1 ",i0)') idim - write(psb_out_unit,& - &'("Test on : ",i20," processors")') np - write(psb_out_unit,& - &'("Size of matrix : ",i20," ")') nr - write(psb_out_unit,& - &'("Number of nonzeros : ",i20," ")') annz - write(psb_out_unit,& - &'("Memory occupation : ",i20," ")') amatsize - flops = ntests*(2.d0*annz) - tflops = flops - gflops = flops * ngpu - write(psb_out_unit,'("Storage type for A: ",a)') a%get_fmt() - write(psb_out_unit,'("Storage type for AOACC: ",a)') aoacc%get_fmt() - write(psb_out_unit,'("Time to convert A from COO to CPU (1): ",F20.9)')& - & tcnvc1 - write(psb_out_unit,'("Time to convert A from COO to CPU (t): ",F20.9)')& - & tcnvcsr - write(psb_out_unit,'("Time to convert A from COO to CPU (a): ",F20.9)')& - & tcnvcsr/ncnv - write(psb_out_unit,'("Time to convert A from COO to GPU (1): ",F20.9)')& - & tcnvg1 - write(psb_out_unit,'("Time to convert A from COO to GPU (t): ",F20.9)')& - & tcnvgpu - write(psb_out_unit,'("Time to convert A from COO to GPU (a): ",F20.9)')& - & tcnvgpu/ncnv - - write(psb_out_unit,& - & '("Number of flops (",i0," prod) : ",F20.0," ")') & - & ntests,flops - - flops = flops / (t2) - tflops = tflops / (tt2) - gflops = gflops / (gt2) - - write(psb_out_unit,'("Time for ",i6," products (s) (CPU) : ",F20.3)')& - & ntests,t2 - write(psb_out_unit,'("Time per product (ms) (CPU) : ",F20.3)')& - & t2*1.d3/(1.d0*ntests) - write(psb_out_unit,'("MFLOPS (CPU) : ",F20.3)')& - & flops/1.d6 - write(psb_out_unit,'("Time for ",i6," products (s) (xGPU) : ",F20.3)')& - & ntests, tt2 - write(psb_out_unit,'("Time per product (ms) (xGPU) : ",F20.3)')& - & tt2*1.d3/(1.d0*ntests) - write(psb_out_unit,'("MFLOPS (xGPU) : ",F20.3)')& - & tflops/1.d6 - - write(psb_out_unit,'("Time for ",i6," products (s) (GPU.) : ",F20.3)')& - & ngpu*ntests,gt2 - write(psb_out_unit,'("Time per product (ms) (GPU.) : ",F20.3)')& - & gt2*1.d3/(1.d0*ntests*ngpu) - write(psb_out_unit,'("MFLOPS (GPU.) : ",F20.3)')& - & gflops/1.d6 - ! - ! This computation assumes the data movement associated with CSR: - ! it is minimal in terms of coefficients. Other formats may either move - ! more data (padding etc.) or less data (if they can save on the indices). - ! - nbytes = nr*(2*psb_sizeof_dp + psb_sizeof_ip)+& - & annz*(psb_sizeof_dp + psb_sizeof_ip) - bdwdth = ntests*nbytes/(t2*1.d6) - write(psb_out_unit,*) - write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (CPU) : ",F20.3)') bdwdth - bdwdth = ngpu*ntests*nbytes/(gt2*1.d6) - write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (GPU) : ",F20.3)') bdwdth -!!$ bdwdth = psb_oacc_MemoryPeakBandwidth() - write(psb_out_unit,'("MBYTES/S peak bandwidth (GPU) : ",F20.3)') bdwdth - write(psb_out_unit,'("Storage type for DESC_A: ",a)') desc_a%indxmap%get_fmt() - write(psb_out_unit,'("Total memory occupation for DESC_A: ",i12)')descsize - end if -#endif - -#ifdef CUDA - select case(psb_toupper(agfmt)) - case('ELG') - agmold => acelg - case('HLG') - agmold => achlg - case('CSRG') - agmold => accsrg - case default - write(*,*) 'Unknown format defaulting to HLG' - agmold => achlg - end select - call a%cscnv(acuda,info,mold=agmold) - if ((info /= 0).or.(psb_get_errstatus()/=0)) then - write(0,*) 'From cscnv ',info - call psb_error() - stop - end if - call desc_a%cnv(mold=igmold) - call psb_geasb(bcuda,desc_a,info,scratch=.true.,mold=vgmold) - call psb_geasb(xcuda,desc_a,info,scratch=.true.,mold=vgmold) - nr = desc_a%get_local_rows() - nrg = desc_a%get_global_rows() - call psb_geall(x0,desc_a,info) - do i=1, nr - call desc_a%l2g(i,ig,info) - x0(i) = 1.0 + (1.0*ig)/(nrg**2) - end do - call a%cscnv(aux_a,info,mold=acoo) - tcnvcsr = 0 - tcnvgpu = 0 - call psb_geall(x1,desc_a,info) - do j=1, ncnv - call aux_a%cscnv(a,info,mold=acoo) - call psb_barrier(ctxt) - t1 = psb_wtime() - call a%cscnv(info,mold=acmold) - t2 = psb_Wtime() -t1 - call psb_amx(ctxt,t2) - tcnvcsr = tcnvcsr + t2 - if (j==1) tcnvc1 = t2 - call psb_geasb(x1,desc_a,info) - call xv%bld(x0) - call psb_geasb(bv,desc_a,info,scratch=.true.) - call aux_a%cscnv(acuda,info,mold=acoo) - call xcuda%bld(x0,mold=vgmold) - call psb_geasb(bcuda,desc_a,info,scratch=.true.,mold=vgmold) - call psb_barrier(ctxt) - t1 = psb_wtime() - call acuda%cscnv(info,mold=agmold) - call psb_cuda_DeviceSync() - t2 = psb_Wtime() -t1 - call psb_amx(ctxt,t2) - if (j==1) tcnvg1 = t2 - tcnvgpu = tcnvgpu + t2 - end do - call xv%set(x0) - call psb_barrier(ctxt) - t1 = psb_wtime() - do i=1,ntests - call psb_spmm(done,a,xv,dzero,bv,desc_a,info) - end do - call psb_barrier(ctxt) - t2 = psb_wtime() - t1 - call psb_amx(ctxt,t2) - - call xcuda%set(x0) - - ! FIXME: cache flush needed here - x1 = bv%get_vect() - x2 = bcuda%get_vect() - - call psb_barrier(ctxt) - tt1 = psb_wtime() - do i=1,ntests - call psb_spmm(done,acuda,xv,dzero,bcuda,desc_a,info) - if ((info /= 0).or.(psb_get_errstatus()/=0)) then - write(0,*) 'From 1 spmm',info,i,ntests - call psb_error() - stop - end if - - end do - call psb_cuda_DeviceSync() - call psb_barrier(ctxt) - tt2 = psb_wtime() - tt1 - call psb_amx(ctxt,tt2) - x1 = bv%get_vect() - x2 = bcuda%get_vect() - nr = desc_a%get_local_rows() - eps = maxval(abs(x1(1:nr)-x2(1:nr))) - call psb_amx(ctxt,eps) - if (iam==0) write(*,*) 'Max diff on xGPU',eps - - ! FIXME: cache flush needed here - call xcuda%set(x0) - call xcuda%sync() - call psb_barrier(ctxt) - gt1 = psb_wtime() - do i=1,ntests*ngpu - call psb_spmm(done,acuda,xcuda,dzero,bcuda,desc_a,info) - ! For timing purposes we need to make sure all threads - ! in the device are done. - if ((info /= 0).or.(psb_get_errstatus()/=0)) then - write(0,*) 'From 2 spmm',info,i,ntests - call psb_error() - stop - end if - - end do - - call psb_cuda_DeviceSync() - call psb_barrier(ctxt) - gt2 = psb_wtime() - gt1 - call psb_amx(ctxt,gt2) - call bcuda%sync() - x1 = bv%get_vect() - x2 = bcuda%get_vect() - tnv = psb_genrm2(bv,desc_a,info) - tng = psb_genrm2(bcuda,desc_a,info) - tdot = psb_gedot(bcuda,bcuda,desc_a,info) - write(0,*) ' bv ',tnv,' bcuda ',tng, ' dot ',tdot,eps,& - & dnrm2(desc_a%get_local_rows(),x2,1),& - & ddot(desc_a%get_local_rows(),x1,1,x2,1) - call psb_geaxpby(-done,bcuda,+done,bv,desc_a,info) - eps = psb_geamax(bv,desc_a,info) - - call psb_amx(ctxt,t2) - eps = maxval(abs(x1(1:nr)-x2(1:nr))) - call psb_amx(ctxt,eps) - if (iam==0) write(*,*) 'Max diff on GPU',eps - if (dump) then - write(fname,'(a,i3.3,a,i3.3,a)')'XCPU-out-',iam,'-',np,'.mtx' - call mm_array_write(x1(1:nr),'Local part CPU',info,filename=fname) - write(fname,'(a,i3.3,a,i3.3,a)')'XGPU-out-',iam,'-',np,'.mtx' - call mm_array_write(x2(1:nr),'Local part GPU',info,filename=fname) - end if - - annz = a%get_nzeros() - amatsize = a%sizeof() - descsize = psb_sizeof(desc_a) - call psb_sum(ctxt,nr) - call psb_sum(ctxt,annz) - call psb_sum(ctxt,amatsize) - call psb_sum(ctxt,descsize) - - if (iam == psb_root_) then - write(psb_out_unit,& - & '("Matrix: ell1 ",i0)') idim - write(psb_out_unit,& - &'("Test on : ",i20," processors")') np - write(psb_out_unit,& - &'("Size of matrix : ",i20," ")') nr - write(psb_out_unit,& - &'("Number of nonzeros : ",i20," ")') annz - write(psb_out_unit,& - &'("Memory occupation : ",i20," ")') amatsize - flops = ntests*(2.d0*annz) - tflops = flops - gflops = flops * ngpu - write(psb_out_unit,'("Storage type for A: ",a)') a%get_fmt() - write(psb_out_unit,'("Storage type for ACUDA: ",a)') acuda%get_fmt() - write(psb_out_unit,'("Time to convert A from COO to CPU (1): ",F20.9)')& - & tcnvc1 - write(psb_out_unit,'("Time to convert A from COO to CPU (t): ",F20.9)')& - & tcnvcsr - write(psb_out_unit,'("Time to convert A from COO to CPU (a): ",F20.9)')& - & tcnvcsr/ncnv - write(psb_out_unit,'("Time to convert A from COO to GPU (1): ",F20.9)')& - & tcnvg1 - write(psb_out_unit,'("Time to convert A from COO to GPU (t): ",F20.9)')& - & tcnvgpu - write(psb_out_unit,'("Time to convert A from COO to GPU (a): ",F20.9)')& - & tcnvgpu/ncnv - write(psb_out_unit,& - & '("Number of flops (",i0," prod) : ",F20.0," ")') & - & ntests,flops - - flops = flops / (t2) - tflops = tflops / (tt2) - gflops = gflops / (gt2) - - write(psb_out_unit,'("Time for ",i6," products (s) (CPU) : ",F20.3)')& - & ntests,t2 - write(psb_out_unit,'("Time per product (ms) (CPU) : ",F20.3)')& - & t2*1.d3/(1.d0*ntests) - write(psb_out_unit,'("MFLOPS (CPU) : ",F20.3)')& - & flops/1.d6 - write(psb_out_unit,'("Time for ",i6," products (s) (xGPU) : ",F20.3)')& - & ntests, tt2 - write(psb_out_unit,'("Time per product (ms) (xGPU) : ",F20.3)')& - & tt2*1.d3/(1.d0*ntests) - write(psb_out_unit,'("MFLOPS (xGPU) : ",F20.3)')& - & tflops/1.d6 - - write(psb_out_unit,'("Time for ",i6," products (s) (GPU.) : ",F20.3)')& - & ngpu*ntests,gt2 - write(psb_out_unit,'("Time per product (ms) (GPU.) : ",F20.3)')& - & gt2*1.d3/(1.d0*ntests*ngpu) - write(psb_out_unit,'("MFLOPS (GPU.) : ",F20.3)')& - & gflops/1.d6 - ! - ! This computation assumes the data movement associated with CSR: - ! it is minimal in terms of coefficients. Other formats may either move - ! more data (padding etc.) or less data (if they can save on the indices). - ! - nbytes = nr*(2*psb_sizeof_dp + psb_sizeof_ip)+& - & annz*(psb_sizeof_dp + psb_sizeof_ip) - bdwdth = ntests*nbytes/(t2*1.d6) - write(psb_out_unit,*) - write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (CPU) : ",F20.3)') bdwdth - bdwdth = ngpu*ntests*nbytes/(gt2*1.d6) - write(psb_out_unit,'("MBYTES/S sust. effective bandwidth (GPU) : ",F20.3)') bdwdth - bdwdth = psb_cuda_MemoryPeakBandwidth() - write(psb_out_unit,'("MBYTES/S peak bandwidth (GPU) : ",F20.3)') bdwdth - write(psb_out_unit,'("Storage type for DESC_A: ",a)') desc_a%indxmap%get_fmt() - write(psb_out_unit,'("Total memory occupation for DESC_A: ",i12)')descsize - - end if -#endif - -#ifdef OPENACC - call psb_oacc_exit() -#endif -#ifdef CUDA - call psb_cuda_exit() -#endif - call psb_exit(ctxt) - stop - -9999 continue - call psb_error(ctxt) - -contains - ! - ! get iteration parameters from standard input - ! - subroutine get_parms(ctxt,acfmt,agfmt,idim,tnd) - type(psb_ctxt_type) :: ctxt - character(len=*) :: agfmt, acfmt - integer :: idim - logical :: tnd - integer :: np, iam - integer :: intbuf(10), ip - - call psb_info(ctxt, iam, np) - - if (iam == 0) then - write(*,*) 'CPU side format?' - read(psb_inp_unit,*) acfmt - write(*,*) 'OACC side format?' - read(psb_inp_unit,*) agfmt - write(*,*) 'Size of discretization cube?' - read(psb_inp_unit,*) idim - write(*,*) 'Try comm/comp overlap?' - read(psb_inp_unit,*) tnd - endif - call psb_bcast(ctxt,acfmt) - call psb_bcast(ctxt,agfmt) - call psb_bcast(ctxt,idim) - call psb_bcast(ctxt,tnd) - - if (iam == 0) then - write(psb_out_unit,'("Testing matrix : ell1")') - write(psb_out_unit,'("Grid dimensions : ",i4,"x",i4,"x",i4)')idim,idim,idim - write(psb_out_unit,'("Number of processors : ",i0)')np - write(psb_out_unit,'("Data distribution : BLOCK")') - write(psb_out_unit,'(" ")') - write(psb_out_unit,'("Storage formats ",a)') acfmt,' ',agfmt - write(psb_out_unit,'("Testing overlap ND ",l8)') tnd - end if - return - - end subroutine get_parms - -end program pdgenmv From 8292608125bf405e4a56d8c09f1fb9ddf11b4f50 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 31 Oct 2025 14:33:50 +0100 Subject: [PATCH 036/175] Refactor test/openacc --- test/openacc/psb_d_pde3d_mod.F90 | 517 +++++++++++++++++++++++++++++++ 1 file changed, 517 insertions(+) create mode 100644 test/openacc/psb_d_pde3d_mod.F90 diff --git a/test/openacc/psb_d_pde3d_mod.F90 b/test/openacc/psb_d_pde3d_mod.F90 new file mode 100644 index 000000000..0fc75c301 --- /dev/null +++ b/test/openacc/psb_d_pde3d_mod.F90 @@ -0,0 +1,517 @@ +module psb_d_pde3d_mod + + + use psb_base_mod, only : psb_dpk_, psb_ipk_, psb_lpk_, psb_desc_type,& + & psb_dspmat_type, psb_d_vect_type, dzero,& + & psb_d_base_sparse_mat, psb_d_base_vect_type, & + & psb_i_base_vect_type, psb_l_base_vect_type + + interface + function d_func_3d(x,y,z) result(val) + import :: psb_dpk_ + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + end function d_func_3d + end interface + + interface psb_gen_pde3d + module procedure psb_d_gen_pde3d + end interface psb_gen_pde3d + +contains + + function d_null_func_3d(x,y,z) result(val) + + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + + val = dzero + + end function d_null_func_3d + ! + ! functions parametrizing the differential equation + ! + + ! + ! Note: b1, b2 and b3 are the coefficients of the first + ! derivative of the unknown function. The default + ! we apply here is to have them zero, so that the resulting + ! matrix is symmetric/hermitian and suitable for + ! testing with CG and FCG. + ! When testing methods for non-hermitian matrices you can + ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) + ! + function b1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b1 + real(psb_dpk_), intent(in) :: x,y,z + b1=done/sqrt((3*done)) + end function b1 + function b2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b2 + real(psb_dpk_), intent(in) :: x,y,z + b2=done/sqrt((3*done)) + end function b2 + function b3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b3 + real(psb_dpk_), intent(in) :: x,y,z + b3=done/sqrt((3*done)) + end function b3 + function c(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: c + real(psb_dpk_), intent(in) :: x,y,z + c=dzero + end function c + function a1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a1 + real(psb_dpk_), intent(in) :: x,y,z + a1=done/80 + end function a1 + function a2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a2 + real(psb_dpk_), intent(in) :: x,y,z + a2=done/80 + end function a2 + function a3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a3 + real(psb_dpk_), intent(in) :: x,y,z + a3=done/80 + end function a3 + function g(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: g + real(psb_dpk_), intent(in) :: x,y,z + g = dzero + if (x == done) then + g = done + else if (x == dzero) then + g = exp(y**2-z**2) + end if + end function g + + + ! + ! subroutine to allocate and fill in the coefficient matrix and + ! the rhs. + ! + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& + & f,amold,vmold,imold,partition,nrl,iv,tnd) + use psb_base_mod + use psb_util_mod + ! + ! Discretizes the partial differential equation + ! + ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) + ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f + ! dxdx dydy dzdz dx dy dz + ! + ! with Dirichlet boundary conditions + ! u = g + ! + ! on the unit cube 0<=x,y,z<=1. + ! + ! + ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. + ! + implicit none + integer(psb_ipk_) :: idim + type(psb_dspmat_type) :: a + type(psb_d_vect_type) :: xv,bv + type(psb_desc_type) :: desc_a + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: info + character(len=*) :: afmt + procedure(d_func_3d), optional :: f + class(psb_d_base_sparse_mat), optional :: amold + class(psb_d_base_vect_type), optional :: vmold + class(psb_i_base_vect_type), optional :: imold + integer(psb_ipk_), optional :: partition, nrl,iv(:) + logical, optional :: tnd + ! Local variables. + + integer(psb_ipk_), parameter :: nb=20 + type(psb_d_csc_sparse_mat) :: acsc + type(psb_d_coo_sparse_mat) :: acoo + type(psb_d_csr_sparse_mat) :: acsr + real(psb_dpk_) :: zt(nb),x,y,z + integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ + integer(psb_lpk_) :: m,n,glob_row,nt + integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner + ! For 3D partition + ! Note: integer control variables going directly into an MPI call + ! must be 4 bytes, i.e. psb_mpk_ + integer(psb_mpk_) :: npdims(3), npp, minfo + integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz + integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) + ! Process grid + integer(psb_ipk_) :: np, iam + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_dpk_), allocatable :: val(:) + ! deltah dimension of each grid cell + ! deltat discretization time + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + procedure(d_func_3d), pointer :: f_ + logical :: tnd_ + character(len=20) :: name, ch_err,tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + + if (present(f)) then + f_ => f + else + f_ => d_null_func_3d + end if + + deltah = done/(idim+2) + sqdeltah = deltah*deltah + deltah2 = (2*done)* deltah + + if (present(partition)) then + if ((1<= partition).and.(partition <= 3)) then + partition_ = partition + else + write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' + partition_ = 3 + end if + else + partition_ = 3 + end if + + ! initialize array descriptor and sparse matrix storage. provide an + ! estimate of the number of non zeroes + + m = (1_psb_lpk_*idim)*idim*idim + n = m + nnz = ((n*7)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + t0 = psb_wtime() + select case(partition_) + case(1) + ! A BLOCK partition + if (present(nrl)) then + nr = nrl + else + ! + ! Using a simple BLOCK distribution. + ! + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + end if + + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! First example of use of CDALL: specify for each process a number of + ! contiguous rows + ! + call psb_cdall(ctxt,desc_a,info,nl=nr) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(2) + ! A partition defined by the user through IV + + if (present(iv)) then + if (size(iv) /= m) then + write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + else + write(psb_err_unit,*) iam, 'Initialization error: IV not present' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! Second example of use of CDALL: specify for each row the + ! process that owns it + ! + call psb_cdall(ctxt,desc_a,info,vg=iv) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(3) + ! A 3-dimensional partition + + ! A nifty MPI function will split the process list + npdims = 0 + call mpi_dims_create(np,3,npdims,info) + npx = npdims(1) + npy = npdims(2) + npz = npdims(3) + + allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) + ! We can reuse idx2ijk for process indices as well. + call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) + ! Now let's split the 3D cube in hexahedra + call dist1Didx(bndx,idim,npx) + mynx = bndx(iamx+1)-bndx(iamx) + call dist1Didx(bndy,idim,npy) + myny = bndy(iamy+1)-bndy(iamy) + call dist1Didx(bndz,idim,npz) + mynz = bndz(iamz+1)-bndz(iamz) + + ! How many indices do I own? + nlr = mynx*myny*mynz + allocate(myidx(nlr)) + ! Now, let's generate the list of indices I own + nr = 0 + do i=bndx(iamx),bndx(iamx+1)-1 + do j=bndy(iamy),bndy(iamy+1)-1 + do k=bndz(iamz),bndz(iamz+1)-1 + nr = nr + 1 + call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) + end do + end do + end do + if (nr /= nlr) then + write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& + & nr,nlr,mynx,myny,mynz + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + end if + + ! + ! Third example of use of CDALL: specify for each process + ! the set of global indices it owns. + ! + call psb_cdall(ctxt,desc_a,info,vl=myidx) + + case default + write(psb_err_unit,*) iam, 'Initialization error: should not get here' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end select + + + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz,& + & dupl=psb_dupl_err_) + ! define rhs from boundary conditions; also build initial guess + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + ! we build an auxiliary matrix consisting of one row at a + ! time; just a small matrix. might be extended to generate + ! a bunch of rows per call. + ! + allocate(val(20*nb),irow(20*nb),& + &icol(20*nb),stat=info) + if (info /= psb_success_ ) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + + ! loop over rows belonging to current process in a block + ! distribution. + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + ! local matrix pointer + glob_row=myidx(i) + ! compute gridpoint coordinates + call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) + ! x, y, z coordinates + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = f_(x,y,z) + ! internal point: build discretization + ! + ! term depending on (x-1,y,z) + ! + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y-1,z) + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y,z-1) + val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + ! term depending on (x,y,z) + val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & + & + c(x,y,z) + call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + ! term depending on (x,y,z+1) + val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y+1,z) + val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x+1,y,z) + val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix==idim) then + zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + end do + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=dzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + call psb_cdasb(desc_a,info,mold=imold) + tcdasb = psb_wtime()-t1 + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) then + if (present(amold)) then + call psb_spasb(a,desc_a,info,mold=amold,bld_and=tnd) + else + call psb_spasb(a,desc_a,info,afmt=afmt,bld_and=tnd) + end if + end if + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) call psb_geasb(xv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& + & tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psb_d_gen_pde3d + + +end module psb_d_pde3d_mod + + From 98a6eba948f055e9adcce0383442699522b3f676 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 5 Nov 2025 14:01:54 +0100 Subject: [PATCH 037/175] First round of changes for vector builds --- base/modules/psb_const_mod.F90 | 13 +- base/modules/serial/psb_base_mat_mod.F90 | 62 ++-- base/modules/serial/psb_d_base_vect_mod.F90 | 335 ++++++++++++++++++-- base/modules/serial/psb_d_vect_mod.F90 | 139 +++++++- base/modules/tools/psb_d_tools_mod.F90 | 8 +- base/tools/psb_dallc.f90 | 7 +- base/tools/psb_dasb.f90 | 116 +++++-- base/tools/psb_dins.f90 | 6 +- base/tools/psb_dspasb.f90 | 12 +- base/tools/psb_dspins.F90 | 6 +- cuda/psb_d_cuda_vect_mod.F90 | 12 +- openacc/psb_d_oacc_vect_mod.F90 | 12 +- test/pdegen/psb_d_pde3d.F90 | 8 +- 13 files changed, 594 insertions(+), 142 deletions(-) diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index 395f45741..f1e8949bb 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -203,14 +203,16 @@ module psb_const_mod ! ! - ! State of matrices. + ! State of matrices/vectors. ! integer(psb_ipk_), parameter :: psb_invalid_ = -1 integer(psb_ipk_), parameter :: psb_spmat_null_=0, psb_spmat_bld_=1 integer(psb_ipk_), parameter :: psb_spmat_asb_=2, psb_spmat_upd_=4 - integer(psb_ipk_), parameter :: psb_matbld_noremote_=0, psb_matbld_remote_=1 + integer(psb_ipk_), parameter :: psb_vect_null_=0, psb_vect_bld_=1 + integer(psb_ipk_), parameter :: psb_vect_asb_=2, psb_vect_upd_=4 + integer(psb_ipk_), parameter :: psb_ireg_flgs_=10, psb_ip2_=0 integer(psb_ipk_), parameter :: psb_iflag_=2, psb_ichk_=3 @@ -223,9 +225,10 @@ module psb_const_mod ! Duplicate coefficients handling ! These are usually set while calling spcnv as one of its ! optional arugments. - integer(psb_ipk_), parameter :: psb_dupl_add_ = 0 - integer(psb_ipk_), parameter :: psb_dupl_ovwrt_ = 1 - integer(psb_ipk_), parameter :: psb_dupl_err_ = 2 + integer(psb_ipk_), parameter :: psb_dupl_null_ = 0 + integer(psb_ipk_), parameter :: psb_dupl_add_ = 1 + integer(psb_ipk_), parameter :: psb_dupl_ovwrt_ = 2 + integer(psb_ipk_), parameter :: psb_dupl_err_ = 3 integer(psb_ipk_), parameter :: psb_dupl_def_ = psb_dupl_add_ ! Matrix update mode integer(psb_ipk_), parameter :: psb_upd_srch_ = 98764 diff --git a/base/modules/serial/psb_base_mat_mod.F90 b/base/modules/serial/psb_base_mat_mod.F90 index 42d480d87..716d78d33 100644 --- a/base/modules/serial/psb_base_mat_mod.F90 +++ b/base/modules/serial/psb_base_mat_mod.F90 @@ -128,7 +128,7 @@ module psb_base_mat_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_mat_mod. - integer(psb_ipk_), private :: state + integer(psb_ipk_), private :: bldstate !> How to treat duplicate elements when !! transitioning from the BUILD to the ASSEMBLED state. !! While many formats would allow for duplicate @@ -137,7 +137,7 @@ module psb_base_mat_mod !! BUILD state; in our overall design, only COO matrices !! can ever be in the BUILD state, hence all other formats !! cannot have duplicate entries. - integer(psb_ipk_), private :: duplicate + integer(psb_ipk_), private :: duplicate = psb_dupl_null_ !> Is the matrix symmetric? (must also be square) logical, private :: symmetric !> Is the matrix triangular? (must also be square) @@ -503,7 +503,7 @@ module psb_base_mat_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_mat_mod. - integer(psb_ipk_), private :: state + integer(psb_ipk_), private :: bldstate !> How to treat duplicate elements when !! transitioning from the BUILD to the ASSEMBLED state. !! While many formats would allow for duplicate @@ -909,7 +909,7 @@ contains implicit none class(psb_base_sparse_mat), intent(in) :: a integer(psb_ipk_) :: res - res = a%state + res = a%bldstate end function psb_base_get_state function psb_base_get_nrows(a) result(res) @@ -945,7 +945,7 @@ contains implicit none class(psb_base_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(in) :: n - a%state = n + a%bldstate = n end subroutine psb_base_set_state @@ -960,28 +960,28 @@ contains implicit none class(psb_base_sparse_mat), intent(inout) :: a - a%state = psb_spmat_null_ + a%bldstate = psb_spmat_null_ end subroutine psb_base_set_null subroutine psb_base_set_bld(a) implicit none class(psb_base_sparse_mat), intent(inout) :: a - a%state = psb_spmat_bld_ + a%bldstate = psb_spmat_bld_ end subroutine psb_base_set_bld subroutine psb_base_set_upd(a) implicit none class(psb_base_sparse_mat), intent(inout) :: a - a%state = psb_spmat_upd_ + a%bldstate = psb_spmat_upd_ end subroutine psb_base_set_upd subroutine psb_base_set_asb(a) implicit none class(psb_base_sparse_mat), intent(inout) :: a - a%state = psb_spmat_asb_ + a%bldstate = psb_spmat_asb_ end subroutine psb_base_set_asb subroutine psb_base_set_sorted(a,val) @@ -1107,28 +1107,28 @@ contains implicit none class(psb_base_sparse_mat), intent(in) :: a logical :: res - res = (a%state == psb_spmat_null_) + res = (a%bldstate == psb_spmat_null_) end function psb_base_is_null function psb_base_is_bld(a) result(res) implicit none class(psb_base_sparse_mat), intent(in) :: a logical :: res - res = (a%state == psb_spmat_bld_) + res = (a%bldstate == psb_spmat_bld_) end function psb_base_is_bld function psb_base_is_upd(a) result(res) implicit none class(psb_base_sparse_mat), intent(in) :: a logical :: res - res = (a%state == psb_spmat_upd_) + res = (a%bldstate == psb_spmat_upd_) end function psb_base_is_upd function psb_base_is_asb(a) result(res) implicit none class(psb_base_sparse_mat), intent(in) :: a logical :: res - res = (a%state == psb_spmat_asb_) + res = (a%bldstate == psb_spmat_asb_) end function psb_base_is_asb function psb_base_is_sorted(a) result(res) @@ -1185,7 +1185,7 @@ contains b%m = a%n b%n = a%m - b%state = a%state + b%bldstate = a%bldstate b%duplicate = a%duplicate b%triangle = a%triangle b%symmetric = a%symmetric @@ -1205,7 +1205,7 @@ contains b%m = a%n b%n = a%m - b%state = a%state + b%bldstate = a%bldstate b%duplicate = a%duplicate b%triangle = a%triangle b%symmetric = a%symmetric @@ -1225,7 +1225,7 @@ contains itmp = a%m a%m = a%n a%n = itmp - a%state = a%state + a%bldstate = a%bldstate a%duplicate = a%duplicate a%triangle = a%triangle a%unitd = a%unitd @@ -1402,7 +1402,7 @@ contains implicit none class(psb_lbase_sparse_mat), intent(in) :: a integer(psb_ipk_) :: res - res = a%state + res = a%bldstate end function psb_lbase_get_state function psb_lbase_get_nrows(a) result(res) @@ -1479,7 +1479,7 @@ contains implicit none class(psb_lbase_sparse_mat), intent(inout) :: a integer(psb_lpk_), intent(in) :: n - a%state = n + a%bldstate = n end subroutine psb_lbase_set_state @@ -1494,28 +1494,28 @@ contains implicit none class(psb_lbase_sparse_mat), intent(inout) :: a - a%state = psb_spmat_null_ + a%bldstate = psb_spmat_null_ end subroutine psb_lbase_set_null subroutine psb_lbase_set_bld(a) implicit none class(psb_lbase_sparse_mat), intent(inout) :: a - a%state = psb_spmat_bld_ + a%bldstate = psb_spmat_bld_ end subroutine psb_lbase_set_bld subroutine psb_lbase_set_upd(a) implicit none class(psb_lbase_sparse_mat), intent(inout) :: a - a%state = psb_spmat_upd_ + a%bldstate = psb_spmat_upd_ end subroutine psb_lbase_set_upd subroutine psb_lbase_set_asb(a) implicit none class(psb_lbase_sparse_mat), intent(inout) :: a - a%state = psb_spmat_asb_ + a%bldstate = psb_spmat_asb_ end subroutine psb_lbase_set_asb subroutine psb_lbase_set_sorted(a,val) @@ -1652,28 +1652,28 @@ contains implicit none class(psb_lbase_sparse_mat), intent(in) :: a logical :: res - res = (a%state == psb_spmat_null_) + res = (a%bldstate == psb_spmat_null_) end function psb_lbase_is_null function psb_lbase_is_bld(a) result(res) implicit none class(psb_lbase_sparse_mat), intent(in) :: a logical :: res - res = (a%state == psb_spmat_bld_) + res = (a%bldstate == psb_spmat_bld_) end function psb_lbase_is_bld function psb_lbase_is_upd(a) result(res) implicit none class(psb_lbase_sparse_mat), intent(in) :: a logical :: res - res = (a%state == psb_spmat_upd_) + res = (a%bldstate == psb_spmat_upd_) end function psb_lbase_is_upd function psb_lbase_is_asb(a) result(res) implicit none class(psb_lbase_sparse_mat), intent(in) :: a logical :: res - res = (a%state == psb_spmat_asb_) + res = (a%bldstate == psb_spmat_asb_) end function psb_lbase_is_asb function psb_lbase_is_sorted(a) result(res) @@ -1719,7 +1719,7 @@ contains b%m = a%n b%n = a%m - b%state = a%state + b%bldstate = a%bldstate b%duplicate = a%duplicate b%triangle = a%triangle b%unitd = a%unitd @@ -1738,7 +1738,7 @@ contains b%m = a%n b%n = a%m - b%state = a%state + b%bldstate = a%bldstate b%duplicate = a%duplicate b%triangle = a%triangle b%unitd = a%unitd @@ -1757,7 +1757,7 @@ contains itmp = a%m a%m = a%n a%n = itmp - a%state = a%state + a%bldstate = a%bldstate a%duplicate = a%duplicate a%triangle = a%triangle a%unitd = a%unitd @@ -1891,7 +1891,7 @@ contains lb%m = ib%m lb%n = ib%n - lb%state = ib%state + lb%bldstate = ib%bldstate lb%duplicate = ib%duplicate lb%triangle = ib%triangle lb%unitd = ib%unitd @@ -1907,7 +1907,7 @@ contains ib%m = lb%m ib%n = lb%n - ib%state = lb%state + ib%bldstate = lb%bldstate ib%duplicate = lb%duplicate ib%triangle = lb%triangle ib%unitd = lb%unitd diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 8bc8a171b..3860d6553 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -65,6 +65,18 @@ module psb_d_base_vect_mod real(psb_dpk_), allocatable :: v(:) real(psb_dpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -77,17 +89,30 @@ module psb_d_base_vect_mod procedure, pass(x) :: mold => d_base_mold ! ! Insert/set. Assembly and free. - ! Assembly does almost nothing here, but is important - ! in derived classes. ! - procedure, pass(x) :: ins_a => d_base_ins_a - procedure, pass(x) :: ins_v => d_base_ins_v - generic, public :: ins => ins_a, ins_v - procedure, pass(x) :: zero => d_base_zero - procedure, pass(x) :: asb_m => d_base_asb_m - procedure, pass(x) :: asb_e => d_base_asb_e - generic, public :: asb => asb_m, asb_e - procedure, pass(x) :: free => d_base_free + procedure, pass(x) :: ins_a => d_base_ins_a + procedure, pass(x) :: ins_v => d_base_ins_v + generic, public :: ins => ins_a, ins_v + procedure, pass(x) :: zero => d_base_zero + procedure, pass(x) :: asb_m => d_base_asb_m + procedure, pass(x) :: asb_e => d_base_asb_e + generic, public :: asb => asb_m, asb_e + procedure, pass(x) :: free => d_base_free + procedure, pass(x) :: reinit => d_base_reinit + procedure, pass(x) :: set_ncfs => d_base_set_ncfs + procedure, pass(x) :: get_ncfs => d_base_get_ncfs + procedure, pass(x) :: set_dupl => d_base_set_dupl + procedure, pass(x) :: get_dupl => d_base_get_dupl + procedure, pass(x) :: set_state => d_base_set_state + procedure, pass(x) :: set_null => d_base_set_null + procedure, pass(x) :: set_bld => d_base_set_bld + procedure, pass(x) :: set_upd => d_base_set_upd + procedure, pass(x) :: set_asb => d_base_set_asb + procedure, pass(x) :: get_state => d_base_get_state + procedure, pass(x) :: is_null => d_base_is_null + procedure, pass(x) :: is_bld => d_base_is_bld + procedure, pass(x) :: is_upd => d_base_is_upd + procedure, pass(x) :: is_asb => d_base_is_asb ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -228,6 +253,7 @@ module psb_d_base_vect_mod module procedure constructor, size_const end interface psb_d_base_vect + logical, parameter :: try_newins=.true. contains ! @@ -347,9 +373,28 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(n,x%v,info) +#ifdef TRY_NEWINS + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) +#endif end subroutine d_base_all + subroutine d_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_d_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = dzero + call x%set_host() + end if + + end subroutine d_base_reinit + !> Function base_mold: !! \memberof psb_d_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -395,20 +440,77 @@ contains !! \param info return code !! ! - subroutine d_base_ins_a(n,irl,val,dupl,x,info) + subroutine d_base_ins_a(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - +#ifdef TRY_NEWINS + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 + ! this row belongs to me + ! copy i-th row of block val in x + x%v(k) = val(i) + x%iv(k) = irl(i) + end if + enddo + call x%set_ncfs(k) + else + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + end if +#else if (.not.allocated(x%v)) then info = psb_err_invalid_vect_state_ else if (n > min(size(irl),size(val))) then @@ -445,6 +547,7 @@ contains ! !$ goto 9999 end select end if +#endif call x%set_host() if (info /= 0) then call psb_errpush(info,'base_vect_ins') @@ -453,11 +556,11 @@ contains end subroutine d_base_ins_a - subroutine d_base_ins_v(n,irl,val,dupl,x,info) + subroutine d_base_ins_v(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_d_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -470,7 +573,7 @@ contains if (irl%is_dev()) call irl%sync() if (val%is_dev()) call val%sync() if (x%is_dev()) call x%sync() - call x%ins(n,irl%v,val%v,dupl,info) + call x%ins(n,irl%v,val%v,dupl,maxr,info) if (info /= 0) then call psb_errpush(info,'base_vect_ins') @@ -521,12 +624,52 @@ contains integer(psb_mpk_), intent(in) :: n class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info - + integer(psb_ipk_) :: i,ncfs,xvsz + real(psb_dpk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine d_base_asb_m @@ -551,13 +694,54 @@ contains integer(psb_epk_), intent(in) :: n class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info - + integer(psb_ipk_) :: i, j + real(psb_dpk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + + if (try_newins) then + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') + if (x%is_bld()) then + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,x%get_ncfs() + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect_asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() + end subroutine d_base_asb_e ! @@ -645,7 +829,104 @@ contains & deallocate(x%comid,stat=info) end subroutine d_base_free_comid + function d_base_get_ncfs(x) result(res) + implicit none + class(psb_d_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function d_base_get_ncfs + function d_base_get_dupl(x) result(res) + implicit none + class(psb_d_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function d_base_get_dupl + + function d_base_get_state(x) result(res) + implicit none + class(psb_d_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function d_base_get_state + + function d_base_is_null(x) result(res) + implicit none + class(psb_d_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function d_base_is_null + + function d_base_is_bld(x) result(res) + implicit none + class(psb_d_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function d_base_is_bld + + function d_base_is_upd(x) result(res) + implicit none + class(psb_d_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function d_base_is_upd + + function d_base_is_asb(x) result(res) + implicit none + class(psb_d_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function d_base_is_asb + + subroutine d_base_set_ncfs(n,x) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine d_base_set_ncfs + + subroutine d_base_set_dupl(n,x) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine d_base_set_dupl + + subroutine d_base_set_state(n,x) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine d_base_set_state + + subroutine d_base_set_null(x) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine d_base_set_null + + subroutine d_base_set_bld(x) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine d_base_set_bld + + subroutine d_base_set_upd(x) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine d_base_set_upd + + subroutine d_base_set_asb(x) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_asb_ + end subroutine d_base_set_asb + ! ! The base version of SYNC & friends does nothing, it's just ! a placeholder. diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index 302e6fc1c..c52946cfb 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -45,9 +45,8 @@ module psb_d_vect_mod type psb_d_vect_type class(psb_d_base_vect_type), allocatable :: v - integer(psb_ipk_) :: nrmv = 0 - integer(psb_ipk_) :: remote_build=psb_matbld_noremote_ - integer(psb_ipk_) :: dupl = psb_dupl_add_ + integer(psb_ipk_) :: nrmv = 0 + integer(psb_ipk_) :: remote_build = psb_matbld_noremote_ real(psb_dpk_), allocatable :: rmtv(:) integer(psb_lpk_), allocatable :: rmidx(:) contains @@ -56,14 +55,26 @@ module psb_d_vect_mod procedure, pass(x) :: get_fmt => d_vect_get_fmt procedure, pass(x) :: is_remote_build => d_vect_is_remote_build procedure, pass(x) :: set_remote_build => d_vect_set_remote_build - procedure, pass(x) :: get_dupl => d_vect_get_dupl - procedure, pass(x) :: set_dupl => d_vect_set_dupl procedure, pass(x) :: get_nrmv => d_vect_get_nrmv procedure, pass(x) :: set_nrmv => d_vect_set_nrmv procedure, pass(x) :: all => d_vect_all procedure, pass(x) :: reall => d_vect_reall procedure, pass(x) :: zero => d_vect_zero procedure, pass(x) :: asb => d_vect_asb + procedure, pass(x) :: set_dupl => d_vect_set_dupl + procedure, pass(x) :: get_dupl => d_vect_get_dupl + procedure, pass(x) :: set_state => d_vect_set_state + procedure, pass(x) :: set_null => d_vect_set_null + procedure, pass(x) :: set_bld => d_vect_set_bld + procedure, pass(x) :: set_upd => d_vect_set_upd + procedure, pass(x) :: set_asb => d_vect_set_asb + procedure, pass(x) :: get_state => d_vect_get_state + procedure, pass(x) :: is_null => d_vect_is_null + procedure, pass(x) :: is_bld => d_vect_is_bld + procedure, pass(x) :: is_upd => d_vect_is_upd + procedure, pass(x) :: is_asb => d_vect_is_asb + procedure, pass(x) :: reinit => d_vect_reinit + procedure, pass(x) :: gthab => d_vect_gthab procedure, pass(x) :: gthzv => d_vect_gthzv generic, public :: gth => gthab, gthzv @@ -194,7 +205,11 @@ contains implicit none class(psb_d_vect_type), intent(in) :: x integer(psb_ipk_) :: res - res = x%dupl + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if end function d_vect_get_dupl subroutine d_vect_set_dupl(x,val) @@ -202,13 +217,93 @@ contains class(psb_d_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in), optional :: val - if (present(val)) then - x%dupl = val - else - x%dupl = psb_dupl_def_ + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_dupl(val) + else + call x%v%set_dupl(psb_dupl_def_) + end if end if end subroutine d_vect_set_dupl + function d_vect_get_state(x) result(res) + implicit none + class(psb_d_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if + end function d_vect_get_state + + function d_vect_is_null(x) result(res) + implicit none + class(psb_d_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_null_) + end function d_vect_is_null + + function d_vect_is_bld(x) result(res) + implicit none + class(psb_d_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_bld_) + end function d_vect_is_bld + + function d_vect_is_upd(x) result(res) + implicit none + class(psb_d_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_upd_) + end function d_vect_is_upd + + function d_vect_is_asb(x) result(res) + implicit none + class(psb_d_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_asb_) + end function d_vect_is_asb + + subroutine d_vect_set_state(n,x) + implicit none + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + if (allocated(x%v)) then + call x%v%set_state(n) + end if + end subroutine d_vect_set_state + + + subroutine d_vect_set_null(x) + implicit none + class(psb_d_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_null_) + end subroutine d_vect_set_null + + subroutine d_vect_set_bld(x) + implicit none + class(psb_d_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_bld_) + end subroutine d_vect_set_bld + + subroutine d_vect_set_upd(x) + implicit none + class(psb_d_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_upd_) + end subroutine d_vect_set_upd + + subroutine d_vect_set_asb(x) + implicit none + class(psb_d_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_asb_) + end subroutine d_vect_set_asb + + function d_vect_get_nrmv(x) result(res) implicit none class(psb_d_vect_type), intent(in) :: x @@ -457,8 +552,20 @@ contains else info = psb_err_alloc_dealloc_ end if + call x%set_bld() end subroutine d_vect_all + subroutine d_vect_reinit(x, info) + + implicit none + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) call x%v%reinit(info) + call x%set_upd() + + end subroutine d_vect_reinit + subroutine d_vect_reall(n, x, info) implicit none @@ -547,11 +654,11 @@ contains end subroutine d_vect_free - subroutine d_vect_ins_a(n,irl,val,x,info) + subroutine d_vect_ins_a(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -564,15 +671,15 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine d_vect_ins_a - subroutine d_vect_ins_v(n,irl,val,x,info) + subroutine d_vect_ins_v(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n,maxr class(psb_i_vect_type), intent(inout) :: irl class(psb_d_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -585,7 +692,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl%v,val%v,dupl,info) + call x%v%ins(n,irl%v,val%v,dupl,maxr,info) end subroutine d_vect_ins_v diff --git a/base/modules/tools/psb_d_tools_mod.F90 b/base/modules/tools/psb_d_tools_mod.F90 index b2ac3a66e..2d583317d 100644 --- a/base/modules/tools/psb_d_tools_mod.F90 +++ b/base/modules/tools/psb_d_tools_mod.F90 @@ -70,7 +70,7 @@ Module psb_d_tools_mod interface psb_geasb - subroutine psb_dasb_vect(x, desc_a, info,mold, scratch) + subroutine psb_dasb_vect(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -78,6 +78,7 @@ Module psb_d_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_d_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_dasb_vect subroutine psb_dasb_vect_r2(x, desc_a, info,mold, scratch) import @@ -250,16 +251,17 @@ Module psb_d_tools_mod end interface interface psb_spasb - subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, bld_and) + subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) import implicit none type(psb_dspmat_type), intent (inout) :: a type(psb_desc_type), intent(inout) :: desc_a integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_),optional, intent(in) :: upd + integer(psb_ipk_), optional, intent(in) :: upd character(len=*), optional, intent(in) :: afmt class(psb_d_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_dspasb end interface diff --git a/base/tools/psb_dallc.f90 b/base/tools/psb_dallc.f90 index 7b7b21f72..45116e074 100644 --- a/base/tools/psb_dallc.f90 +++ b/base/tools/psb_dallc.f90 @@ -111,10 +111,11 @@ subroutine psb_dalloc_vect(x, desc_a,info, dupl, bldmode) end if if (present(dupl)) then dupl_ = dupl - else - dupl_ = psb_dupl_def_ +!!$ else +!!$ dupl_ = psb_dupl_def_ end if - call x%set_dupl(dupl_) +!!$ call x%set_dupl(dupl_) + call x%set_bld() call x%set_remote_build(bldmode_) call x%set_nrmv(izero) if (x%is_remote_build()) then diff --git a/base/tools/psb_dasb.f90 b/base/tools/psb_dasb.f90 index 19a19ff14..ead3d1d02 100644 --- a/base/tools/psb_dasb.f90 +++ b/base/tools/psb_dasb.f90 @@ -51,7 +51,7 @@ ! scratch - logical, optional If true, allocate without checking/zeroing contents. ! default: .false. ! -subroutine psb_dasb_vect(x, desc_a, info, mold, scratch) +subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) use psb_base_mod, psb_protect_name => psb_dasb_vect implicit none @@ -60,6 +60,7 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_d_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt @@ -68,6 +69,7 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch) logical :: scratch_ integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name,ch_err + !logical, parameter :: try_newins = .true. info = psb_success_ name = 'psb_dgeasb_v' @@ -83,7 +85,6 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch) scratch_ = .false. if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) - dupl_ = x%get_dupl() ! ....verify blacs grid correctness.. if (np == -1) then info = psb_err_context_error_ @@ -94,46 +95,93 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch) call psb_errpush(info,name) goto 9999 end if - + nrow = desc_a%get_local_rows() ncol = desc_a%get_local_cols() if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol - - if (scratch_) then - call x%free(info) - call x%bld(ncol,mold=mold) - else - - if (x%is_remote_build()) then - block - integer(psb_lpk_), allocatable :: lvx(:) - real(psb_dpk_), allocatable :: vx(:) - integer(psb_ipk_), allocatable :: ivx(:) - integer(psb_ipk_) :: nrmv, nx, i - - nrmv = x%get_nrmv() - call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) - nx = size(vx) - call psb_realloc(nx,ivx,info) - call desc_a%g2l(lvx,ivx,info,owned=.true.) - call x%ins(nx,ivx,vx,info) - end block + if (try_newins) then +!!$ if (present(dupl)) then +!!$ call x%set_dupl(dupl) +!!$ end if + dupl_ = x%get_dupl() + + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold) + else + if (x%is_bld().and.present(dupl)) then + call x%set_dupl(dupl) + dupl_ = dupl + end if + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + real(psb_dpk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) end if + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' + else + dupl_ = x%get_dupl() - call x%asb(ncol,info) - ! ..update halo elements.. - call psb_halo(x,desc_a,info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold) + else + if (x%is_bld().and.present(dupl)) then +!!$ call x%set_dupl(dupl) + dupl_ = dupl + end if + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + real(psb_dpk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) end if - call x%cnv(mold) + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' end if - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': end' - call psb_erractionrestore(err_act) return diff --git a/base/tools/psb_dins.f90 b/base/tools/psb_dins.f90 index d35292298..009699aab 100644 --- a/base/tools/psb_dins.f90 +++ b/base/tools/psb_dins.f90 @@ -127,7 +127,7 @@ subroutine psb_dins_vect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -261,7 +261,7 @@ subroutine psb_dins_vect_v(m, irw, val, x, desc_a, info, local) call desc_a%indxmap%g2l(irw%v%v(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,lval,info) + call x%ins(m,irl,lval,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -368,7 +368,7 @@ subroutine psb_dins_vect_r2(m, irw, val, x, desc_a, info, local) do i=1,n if (.not.allocated(x(i)%v)) info = psb_err_invalid_vect_state_ - if (info == 0) call x(i)%ins(m,irl,val(:,i),info) + if (info == 0) call x(i)%ins(m,irl,val(:,i),loc_rows,info) if (info /= 0) exit end do if (info /= 0) then diff --git a/base/tools/psb_dspasb.f90 b/base/tools/psb_dspasb.f90 index 236568a18..61f20a399 100644 --- a/base/tools/psb_dspasb.f90 +++ b/base/tools/psb_dspasb.f90 @@ -44,7 +44,7 @@ ! psb_upd_perm_ Permutation(more memory) ! ! -subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, bld_and) +subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) use psb_base_mod, psb_protect_name => psb_dspasb use psb_sort_mod use psi_mod @@ -59,6 +59,7 @@ subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, bld_and) character(len=*), optional, intent(in) :: afmt class(psb_d_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and + integer(psb_ipk_), optional, intent(in) :: dupl !....Locals.... type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, err_act @@ -103,7 +104,12 @@ subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, bld_and) !check on errors encountered in psdspins if (a%is_bld()) then - dupl_ = a%get_dupl() + if (present(dupl)) then + dupl_ = dupl + else + dupl_ = a%get_dupl() + end if + ! ! First case: we come from a fresh build. ! @@ -180,7 +186,7 @@ subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, bld_and) if (bld_and_) then !!$ allocate(a%ad,mold=a%a) !!$ allocate(a%and,mold=a%a)o - call a%split_nd(n_row,n_col,info) +!!$ call a%split_nd(n_row,n_col,info) !!$ block !!$ character(len=1024) :: fname !!$ type(psb_d_coo_sparse_mat) :: acoo diff --git a/base/tools/psb_dspins.F90 b/base/tools/psb_dspins.F90 index a9cbbe4b6..d2a8e7793 100644 --- a/base/tools/psb_dspins.F90 +++ b/base/tools/psb_dspins.F90 @@ -138,7 +138,11 @@ subroutine psb_dspins(nz,ia,ja,val,a,desc_a,info,rebuild,local) if (desc_a%is_bld()) then - + if (.not.a%is_bld()) then + info = psb_err_invalid_a_and_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if if (local_) then info = psb_err_invalid_a_and_cd_state_ call psb_errpush(info,name) diff --git a/cuda/psb_d_cuda_vect_mod.F90 b/cuda/psb_d_cuda_vect_mod.F90 index 080c86862..f15e4bf08 100644 --- a/cuda/psb_d_cuda_vect_mod.F90 +++ b/cuda/psb_d_cuda_vect_mod.F90 @@ -1252,11 +1252,11 @@ contains call x%free(info) end subroutine d_cuda_vect_finalize - subroutine d_cuda_ins_v(n,irl,val,dupl,x,info) + subroutine d_cuda_ins_v(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_d_vect_cuda), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_d_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -1285,7 +1285,7 @@ contains if (.not.done_cuda) then if (irl%is_dev()) call irl%sync() if (val%is_dev()) call val%sync() - call x%ins(n,irl%v,val%v,dupl,info) + call x%ins(n,irl%v,val%v,dupl,maxr,info) end if if (info /= 0) then @@ -1295,11 +1295,11 @@ contains end subroutine d_cuda_ins_v - subroutine d_cuda_ins_a(n,irl,val,dupl,x,info) + subroutine d_cuda_ins_a(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_d_vect_cuda), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -1308,7 +1308,7 @@ contains info = 0 if (x%is_dev()) call x%sync() - call x%psb_d_base_vect_type%ins(n,irl,val,dupl,info) + call x%psb_d_base_vect_type%ins(n,irl,val,dupl,maxr,info) call x%set_host() end subroutine d_cuda_ins_a diff --git a/openacc/psb_d_oacc_vect_mod.F90 b/openacc/psb_d_oacc_vect_mod.F90 index 830b22161..d765b3ab9 100644 --- a/openacc/psb_d_oacc_vect_mod.F90 +++ b/openacc/psb_d_oacc_vect_mod.F90 @@ -620,11 +620,11 @@ contains end subroutine inner_gth end subroutine d_oacc_gthzv_x - subroutine d_oacc_ins_v(n, irl, val, dupl, x, info) + subroutine d_oacc_ins_v(n, irl, val, dupl, x,maxr, info) use psi_serial_mod implicit none class(psb_d_vect_oacc), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_d_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -661,7 +661,7 @@ contains type is (psb_d_vect_oacc) if (vval%is_dev()) call vval%sync() end select - call x%ins(n, irl%v, val%v, dupl, info) + call x%ins(n, irl%v, val%v, dupl,maxr, info) end if if (info /= 0) then @@ -671,11 +671,11 @@ contains end subroutine d_oacc_ins_v - subroutine d_oacc_ins_a(n, irl, val, dupl, x, info) + subroutine d_oacc_ins_a(n, irl, val, dupl, x,maxr, info) use psi_serial_mod implicit none class(psb_d_vect_oacc), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -684,7 +684,7 @@ contains info = 0 if (x%is_dev()) call x%sync() - call x%psb_d_base_vect_type%ins(n, irl, val, dupl, info) + call x%psb_d_base_vect_type%ins(n, irl, val, dupl,maxr, info) call x%set_host() diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index cac1c413b..5ff37a14e 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -606,9 +606,9 @@ contains t1 = psb_wtime() if (info == psb_success_) then if (present(amold)) then - call psb_spasb(a,desc_a,info,mold=amold) + call psb_spasb(a,desc_a,info,mold=amold,dupl=psb_dupl_add_) else - call psb_spasb(a,desc_a,info,afmt=afmt) + call psb_spasb(a,desc_a,info,afmt=afmt,dupl=psb_dupl_add_) end if end if call psb_barrier(ctxt) @@ -618,8 +618,8 @@ contains call psb_errpush(info,name,a_err=ch_err) goto 9999 end if - if (info == psb_success_) call psb_geasb(xv,desc_a,info,mold=vmold) - if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(xv,desc_a,info,mold=vmold,dupl=psb_dupl_add_) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold,dupl=psb_dupl_add_) if(info /= psb_success_) then info=psb_err_from_subroutine_ ch_err='asb rout.' From 0c84efb887a7c0b2796f937d93510f00ebaad947 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 6 Nov 2025 14:06:47 +0100 Subject: [PATCH 038/175] Working version with mods for building with dealii requests --- base/modules/psb_const_mod.F90 | 2 +- base/modules/serial/psb_c_base_vect_mod.F90 | 432 ++++++++++++++++--- base/modules/serial/psb_c_vect_mod.F90 | 174 +++++++- base/modules/serial/psb_d_base_vect_mod.F90 | 249 ++++++----- base/modules/serial/psb_d_vect_mod.F90 | 57 ++- base/modules/serial/psb_i_base_vect_mod.F90 | 434 +++++++++++++++++--- base/modules/serial/psb_i_vect_mod.F90 | 174 +++++++- base/modules/serial/psb_l_base_vect_mod.F90 | 434 +++++++++++++++++--- base/modules/serial/psb_l_vect_mod.F90 | 174 +++++++- base/modules/serial/psb_s_base_vect_mod.F90 | 432 ++++++++++++++++--- base/modules/serial/psb_s_vect_mod.F90 | 174 +++++++- base/modules/serial/psb_z_base_vect_mod.F90 | 432 ++++++++++++++++--- base/modules/serial/psb_z_vect_mod.F90 | 174 +++++++- base/modules/tools/psb_c_tools_mod.F90 | 6 +- base/modules/tools/psb_d_tools_mod.F90 | 4 +- base/modules/tools/psb_i_tools_mod.F90 | 3 +- base/modules/tools/psb_l_tools_mod.F90 | 3 +- base/modules/tools/psb_s_tools_mod.F90 | 6 +- base/modules/tools/psb_z_tools_mod.F90 | 6 +- base/tools/psb_callc.f90 | 8 +- base/tools/psb_casb.f90 | 110 +++-- base/tools/psb_cins.f90 | 10 +- base/tools/psb_cspasb.f90 | 12 +- base/tools/psb_dallc.f90 | 9 +- base/tools/psb_dasb.f90 | 34 +- base/tools/psb_dins.f90 | 4 +- base/tools/psb_dspins.F90 | 6 +- base/tools/psb_iallc.f90 | 8 +- base/tools/psb_iasb.f90 | 110 +++-- base/tools/psb_iins.f90 | 10 +- base/tools/psb_lallc.f90 | 8 +- base/tools/psb_lasb.f90 | 110 +++-- base/tools/psb_lins.f90 | 10 +- base/tools/psb_sallc.f90 | 8 +- base/tools/psb_sasb.f90 | 110 +++-- base/tools/psb_sins.f90 | 10 +- base/tools/psb_sspasb.f90 | 12 +- base/tools/psb_zallc.f90 | 8 +- base/tools/psb_zasb.f90 | 110 +++-- base/tools/psb_zins.f90 | 10 +- base/tools/psb_zspasb.f90 | 12 +- cuda/psb_c_cuda_vect_mod.F90 | 48 ++- cuda/psb_d_cuda_vect_mod.F90 | 40 +- cuda/psb_i_cuda_vect_mod.F90 | 48 ++- cuda/psb_s_cuda_vect_mod.F90 | 48 ++- cuda/psb_z_cuda_vect_mod.F90 | 48 ++- openacc/psb_c_oacc_vect_mod.F90 | 47 ++- openacc/psb_d_oacc_vect_mod.F90 | 47 ++- openacc/psb_i_oacc_vect_mod.F90 | 47 ++- openacc/psb_l_oacc_vect_mod.F90 | 47 ++- openacc/psb_s_oacc_vect_mod.F90 | 47 ++- openacc/psb_z_oacc_vect_mod.F90 | 47 ++- test/pdegen/psb_d_pde2d.F90 | 12 +- test/pdegen/psb_d_pde3d.F90 | 4 +- test/pdegen/psb_s_pde2d.F90 | 12 +- test/pdegen/psb_s_pde3d.F90 | 12 +- 56 files changed, 3760 insertions(+), 893 deletions(-) diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index f1e8949bb..e3509811e 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -332,7 +332,7 @@ module psb_const_mod contains procedure, pass(ctxt) :: get_i_ctxt => psb_get_i_ctxt end type psb_ctxt_type - + logical, parameter :: try_newins=.true. contains function psb_cmp_ctxt(ctxt1, ctxt2) result(res) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index 65286969a..3f4eb6589 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -65,6 +65,18 @@ module psb_c_base_vect_mod complex(psb_spk_), allocatable :: v(:) complex(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -88,6 +100,21 @@ module psb_c_base_vect_mod procedure, pass(x) :: asb_e => c_base_asb_e generic, public :: asb => asb_m, asb_e procedure, pass(x) :: free => c_base_free + procedure, pass(x) :: reinit => c_base_reinit + procedure, pass(x) :: set_ncfs => c_base_set_ncfs + procedure, pass(x) :: get_ncfs => c_base_get_ncfs + procedure, pass(x) :: set_dupl => c_base_set_dupl + procedure, pass(x) :: get_dupl => c_base_get_dupl + procedure, pass(x) :: set_state => c_base_set_state + procedure, pass(x) :: set_null => c_base_set_null + procedure, pass(x) :: set_bld => c_base_set_bld + procedure, pass(x) :: set_upd => c_base_set_upd + procedure, pass(x) :: set_asb => c_base_set_asb + procedure, pass(x) :: get_state => c_base_get_state + procedure, pass(x) :: is_null => c_base_is_null + procedure, pass(x) :: is_bld => c_base_is_bld + procedure, pass(x) :: is_upd => c_base_is_upd + procedure, pass(x) :: is_asb => c_base_is_asb ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -211,8 +238,6 @@ module psb_c_base_vect_mod generic, public :: addconst => addconst_a2,addconst_v2 - - end type psb_c_base_vect_type public :: psb_c_base_vect @@ -263,14 +288,22 @@ contains !! \brief Build method from an array !! \param x(:) input array to be copied !! - subroutine c_base_bld_x(x,this) + subroutine c_base_bld_x(x,this,scratch) use psb_realloc_mod implicit none complex(psb_spk_), intent(in) :: this(:) class(psb_c_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info integer(psb_ipk_) :: i + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(size(this),x%v,info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,'base_vect_bld') @@ -295,15 +328,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine c_base_bld_mn(x,n) + subroutine c_base_bld_mn(x,n,scratch) use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_c_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine c_base_bld_mn @@ -312,15 +353,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine c_base_bld_en(x,n) + subroutine c_base_bld_en(x,n,scratch) use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_c_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine c_base_bld_en @@ -340,9 +389,29 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine c_base_all + subroutine c_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_c_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = czero + call x%set_host() + call x%set_upd() + end if + + end subroutine c_base_reinit + !> Function base_mold: !! \memberof psb_c_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -388,55 +457,116 @@ contains !! \param info return code !! ! - subroutine c_base_ins_a(n,irl,val,dupl,x,info) + subroutine c_base_ins_a(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_c_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_spk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i)) = val(i) - end if - enddo - - case(psb_dupl_add_) - - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i)) = x%v(irl(i)) + val(i) + x%v(k) = val(i) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + else + isz = size(x%v) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if call x%set_host() if (info /= 0) then @@ -446,11 +576,11 @@ contains end subroutine c_base_ins_a - subroutine c_base_ins_v(n,irl,val,dupl,x,info) + subroutine c_base_ins_v(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_c_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_c_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -463,7 +593,7 @@ contains if (irl%is_dev()) call irl%sync() if (val%is_dev()) call val%sync() if (x%is_dev()) call x%sync() - call x%ins(n,irl%v,val%v,dupl,info) + call x%ins(n,irl%v,val%v,dupl,maxr,info) if (info /= 0) then call psb_errpush(info,'base_vect_ins') @@ -507,19 +637,70 @@ contains !! ! - subroutine c_base_asb_m(n, x, info) + subroutine c_base_asb_m(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_c_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + complex(psb_spk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine c_base_asb_m @@ -537,19 +718,70 @@ contains !! ! - subroutine c_base_asb_e(n, x, info) + subroutine c_base_asb_e(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_c_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + complex(psb_spk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') + if (x%is_bld()) then + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,x%get_ncfs() + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect_asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine c_base_asb_e @@ -572,9 +804,10 @@ contains if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') - + call x%set_null() end subroutine c_base_free @@ -637,7 +870,104 @@ contains if (allocated(x%comid)) & & deallocate(x%comid,stat=info) end subroutine c_base_free_comid + + function c_base_get_ncfs(x) result(res) + implicit none + class(psb_c_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function c_base_get_ncfs + + function c_base_get_dupl(x) result(res) + implicit none + class(psb_c_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function c_base_get_dupl + + function c_base_get_state(x) result(res) + implicit none + class(psb_c_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function c_base_get_state + + function c_base_is_null(x) result(res) + implicit none + class(psb_c_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function c_base_is_null + + function c_base_is_bld(x) result(res) + implicit none + class(psb_c_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function c_base_is_bld + + function c_base_is_upd(x) result(res) + implicit none + class(psb_c_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function c_base_is_upd + + function c_base_is_asb(x) result(res) + implicit none + class(psb_c_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function c_base_is_asb + + subroutine c_base_set_ncfs(n,x) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine c_base_set_ncfs + + subroutine c_base_set_dupl(n,x) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine c_base_set_dupl + + subroutine c_base_set_state(n,x) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine c_base_set_state + + subroutine c_base_set_null(x) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine c_base_set_null + + subroutine c_base_set_bld(x) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine c_base_set_bld + + subroutine c_base_set_upd(x) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine c_base_set_upd + + subroutine c_base_set_asb(x) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + x%bldstate = psb_vect_asb_ + end subroutine c_base_set_asb ! ! The base version of SYNC & friends does nothing, it's just diff --git a/base/modules/serial/psb_c_vect_mod.F90 b/base/modules/serial/psb_c_vect_mod.F90 index 9effe9efd..c820d937a 100644 --- a/base/modules/serial/psb_c_vect_mod.F90 +++ b/base/modules/serial/psb_c_vect_mod.F90 @@ -56,14 +56,26 @@ module psb_c_vect_mod procedure, pass(x) :: get_fmt => c_vect_get_fmt procedure, pass(x) :: is_remote_build => c_vect_is_remote_build procedure, pass(x) :: set_remote_build => c_vect_set_remote_build - procedure, pass(x) :: get_dupl => c_vect_get_dupl - procedure, pass(x) :: set_dupl => c_vect_set_dupl procedure, pass(x) :: get_nrmv => c_vect_get_nrmv procedure, pass(x) :: set_nrmv => c_vect_set_nrmv procedure, pass(x) :: all => c_vect_all procedure, pass(x) :: reall => c_vect_reall procedure, pass(x) :: zero => c_vect_zero procedure, pass(x) :: asb => c_vect_asb + procedure, pass(x) :: set_dupl => c_vect_set_dupl + procedure, pass(x) :: get_dupl => c_vect_get_dupl + procedure, pass(x) :: set_state => c_vect_set_state + procedure, pass(x) :: set_null => c_vect_set_null + procedure, pass(x) :: set_bld => c_vect_set_bld + procedure, pass(x) :: set_upd => c_vect_set_upd + procedure, pass(x) :: set_asb => c_vect_set_asb + procedure, pass(x) :: get_state => c_vect_get_state + procedure, pass(x) :: is_null => c_vect_is_null + procedure, pass(x) :: is_bld => c_vect_is_bld + procedure, pass(x) :: is_upd => c_vect_is_upd + procedure, pass(x) :: is_asb => c_vect_is_asb + procedure, pass(x) :: reinit => c_vect_reinit + procedure, pass(x) :: gthab => c_vect_gthab procedure, pass(x) :: gthzv => c_vect_gthzv generic, public :: gth => gthab, gthzv @@ -187,7 +199,11 @@ contains implicit none class(psb_c_vect_type), intent(in) :: x integer(psb_ipk_) :: res - res = x%dupl + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if end function c_vect_get_dupl subroutine c_vect_set_dupl(x,val) @@ -195,13 +211,92 @@ contains class(psb_c_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in), optional :: val - if (present(val)) then - x%dupl = val - else - x%dupl = psb_dupl_def_ + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_dupl(val) + else + call x%v%set_dupl(psb_dupl_def_) + end if end if end subroutine c_vect_set_dupl + function c_vect_get_state(x) result(res) + implicit none + class(psb_c_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if + end function c_vect_get_state + + function c_vect_is_null(x) result(res) + implicit none + class(psb_c_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_null_) + end function c_vect_is_null + + function c_vect_is_bld(x) result(res) + implicit none + class(psb_c_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_bld_) + end function c_vect_is_bld + + function c_vect_is_upd(x) result(res) + implicit none + class(psb_c_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_upd_) + end function c_vect_is_upd + + function c_vect_is_asb(x) result(res) + implicit none + class(psb_c_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_asb_) + end function c_vect_is_asb + + subroutine c_vect_set_state(n,x) + implicit none + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + if (allocated(x%v)) then + call x%v%set_state(n) + end if + end subroutine c_vect_set_state + + + subroutine c_vect_set_null(x) + implicit none + class(psb_c_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_null_) + end subroutine c_vect_set_null + + subroutine c_vect_set_bld(x) + implicit none + class(psb_c_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_bld_) + end subroutine c_vect_set_bld + + subroutine c_vect_set_upd(x) + implicit none + class(psb_c_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_upd_) + end subroutine c_vect_set_upd + + subroutine c_vect_set_asb(x) + implicit none + class(psb_c_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_asb_) + end subroutine c_vect_set_asb + function c_vect_get_nrmv(x) result(res) implicit none class(psb_c_vect_type), intent(in) :: x @@ -291,12 +386,21 @@ contains end if end subroutine c_vect_clone - subroutine c_vect_bld_x(x,invect,mold) + subroutine c_vect_bld_x(x,invect,mold,scratch) complex(psb_spk_), intent(in) :: invect(:) class(psb_c_vect_type), intent(inout) :: x class(psb_c_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + info = psb_success_ if (allocated(x%v)) & & call x%free(info) @@ -307,17 +411,25 @@ contains allocate(x%v,stat=info, mold=psb_c_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(invect) + if (info == psb_success_) call x%v%bld(invect,scratch=scratch_) end subroutine c_vect_bld_x - subroutine c_vect_bld_mn(x,n,mold) + subroutine c_vect_bld_mn(x,n,mold,scratch) integer(psb_mpk_), intent(in) :: n class(psb_c_vect_type), intent(inout) :: x class(psb_c_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info class(psb_c_base_vect_type), pointer :: mld + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if info = psb_success_ if (allocated(x%v)) & @@ -328,17 +440,25 @@ contains else allocate(x%v,stat=info, mold=psb_c_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine c_vect_bld_mn - subroutine c_vect_bld_en(x,n,mold) + subroutine c_vect_bld_en(x,n,mold,scratch) integer(psb_epk_), intent(in) :: n class(psb_c_vect_type), intent(inout) :: x class(psb_c_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info info = psb_success_ + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (allocated(x%v)) & & call x%free(info) @@ -348,7 +468,7 @@ contains else allocate(x%v,stat=info, mold=psb_c_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine c_vect_bld_en @@ -450,8 +570,19 @@ contains else info = psb_err_alloc_dealloc_ end if + call x%set_bld() end subroutine c_vect_all + subroutine c_vect_reinit(x, info) + implicit none + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) call x%v%reinit(info) + call x%set_upd() + + end subroutine c_vect_reinit + subroutine c_vect_reall(n, x, info) implicit none @@ -476,16 +607,17 @@ contains end subroutine c_vect_zero - subroutine c_vect_asb(n, x, info) + subroutine c_vect_asb(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: n class(psb_c_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch if (allocated(x%v)) then - call x%v%asb(n,info) + call x%v%asb(n,info,scratch=scratch) end if end subroutine c_vect_asb @@ -540,11 +672,11 @@ contains end subroutine c_vect_free - subroutine c_vect_ins_a(n,irl,val,x,info) + subroutine c_vect_ins_a(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_c_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_spk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -557,15 +689,15 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine c_vect_ins_a - subroutine c_vect_ins_v(n,irl,val,x,info) + subroutine c_vect_ins_v(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_c_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr class(psb_i_vect_type), intent(inout) :: irl class(psb_c_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -578,7 +710,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl%v,val%v,dupl,info) + call x%v%ins(n,irl%v,val%v,dupl,maxr,info) end subroutine c_vect_ins_v diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 3860d6553..7a3026eac 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -73,9 +73,9 @@ module psb_d_base_vect_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_vect_mod. - integer(psb_ipk_), private :: bldstate - integer(psb_ipk_), private :: dupl = psb_dupl_null_ - integer(psb_ipk_), private :: ncfs + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) contains ! @@ -89,15 +89,17 @@ module psb_d_base_vect_mod procedure, pass(x) :: mold => d_base_mold ! ! Insert/set. Assembly and free. + ! Assembly does almost nothing here, but is important + ! in derived classes. ! - procedure, pass(x) :: ins_a => d_base_ins_a - procedure, pass(x) :: ins_v => d_base_ins_v - generic, public :: ins => ins_a, ins_v - procedure, pass(x) :: zero => d_base_zero - procedure, pass(x) :: asb_m => d_base_asb_m - procedure, pass(x) :: asb_e => d_base_asb_e - generic, public :: asb => asb_m, asb_e - procedure, pass(x) :: free => d_base_free + procedure, pass(x) :: ins_a => d_base_ins_a + procedure, pass(x) :: ins_v => d_base_ins_v + generic, public :: ins => ins_a, ins_v + procedure, pass(x) :: zero => d_base_zero + procedure, pass(x) :: asb_m => d_base_asb_m + procedure, pass(x) :: asb_e => d_base_asb_e + generic, public :: asb => asb_m, asb_e + procedure, pass(x) :: free => d_base_free procedure, pass(x) :: reinit => d_base_reinit procedure, pass(x) :: set_ncfs => d_base_set_ncfs procedure, pass(x) :: get_ncfs => d_base_get_ncfs @@ -243,8 +245,6 @@ module psb_d_base_vect_mod procedure, pass(x) :: minquotient_a2 => d_base_minquotient_a2 generic, public :: minquotient => minquotient_v, minquotient_a2 - - end type psb_d_base_vect_type public :: psb_d_base_vect @@ -253,7 +253,6 @@ module psb_d_base_vect_mod module procedure constructor, size_const end interface psb_d_base_vect - logical, parameter :: try_newins=.true. contains ! @@ -296,14 +295,22 @@ contains !! \brief Build method from an array !! \param x(:) input array to be copied !! - subroutine d_base_bld_x(x,this) + subroutine d_base_bld_x(x,this,scratch) use psb_realloc_mod implicit none real(psb_dpk_), intent(in) :: this(:) class(psb_d_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info integer(psb_ipk_) :: i + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(size(this),x%v,info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,'base_vect_bld') @@ -328,15 +335,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine d_base_bld_mn(x,n) + subroutine d_base_bld_mn(x,n,scratch) use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_d_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine d_base_bld_mn @@ -345,15 +360,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine d_base_bld_en(x,n) + subroutine d_base_bld_en(x,n,scratch) use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_d_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine d_base_bld_en @@ -373,10 +396,10 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(n,x%v,info) -#ifdef TRY_NEWINS - call psb_realloc(n,x%iv,info) - call x%set_ncfs(0) -#endif + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine d_base_all @@ -391,6 +414,7 @@ contains call x%sync() x%v(:) = dzero call x%set_host() + call x%set_upd() end if end subroutine d_base_reinit @@ -444,7 +468,7 @@ contains use psi_serial_mod implicit none class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl,maxr + integer(psb_ipk_), intent(in) :: n, dupl, maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -453,56 +477,97 @@ contains info = 0 if (psb_errstatus_fatal()) return -#ifdef TRY_NEWINS - if (x%is_bld()) then - ncfs_ = x%get_ncfs() - isz = ncfs_ + n - call psb_ensure_size(isz,x%v,info) - call psb_ensure_size(isz,x%iv,info) - k = ncfs_ - do i = 1, n - !loop over all val's rows - ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= maxr)) then - k = k + 1 - ! this row belongs to me - ! copy i-th row of block val in x - x%v(k) = val(i) - x%iv(k) = irl(i) + + if (try_newins) then + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 + ! this row belongs to me + ! copy i-th row of block val in x + x%v(k) = val(i) + x%iv(k) = irl(i) + end if + enddo + call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select end if - enddo - call x%set_ncfs(k) + else + info = psb_err_invalid_vect_state_ + end if else - dupl_ = x%get_dupl() if (.not.allocated(x%v)) then info = psb_err_invalid_vect_state_ else if (n > min(size(irl),size(val))) then info = psb_err_invalid_input_ + else isz = size(x%v) - select case(dupl_) + select case(dupl) case(psb_dupl_ovwrt_) do i = 1, n !loop over all val's rows ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + if ((1 <= irl(i)).and.(irl(i) <= isz)) then ! this row belongs to me ! copy i-th row of block val in x x%v(irl(i)) = val(i) end if enddo - + case(psb_dupl_add_) - + do i = 1, n !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + if ((1 <= irl(i)).and.(irl(i) <= isz)) then ! this row belongs to me ! copy i-th row of block val in x x%v(irl(i)) = x%v(irl(i)) + val(i) end if enddo - + case default info = 321 ! !$ call psb_errpush(info,name) @@ -510,44 +575,6 @@ contains end select end if end if -#else - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v) - select case(dupl) - case(psb_dupl_ovwrt_) - do i = 1, n - !loop over all val's rows - ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i)) = val(i) - end if - enddo - - case(psb_dupl_add_) - - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i)) = x%v(irl(i)) + val(i) - end if - enddo - - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select - end if -#endif call x%set_host() if (info /= 0) then call psb_errpush(info,'base_vect_ins') @@ -560,7 +587,7 @@ contains use psi_serial_mod implicit none class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl,maxr + integer(psb_ipk_), intent(in) :: n, dupl, maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_d_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -617,17 +644,25 @@ contains !! ! - subroutine d_base_asb_m(n, x, info) + subroutine d_base_asb_m(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i,ncfs,xvsz + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz real(psb_dpk_), allocatable :: vv(:) + info = 0 - + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (try_newins) then if (x%is_bld()) then ncfs = x%get_ncfs() @@ -658,11 +693,14 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else + else if (x%is_upd().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') end if else if (x%get_nrows() < n) & @@ -687,17 +725,25 @@ contains !! ! - subroutine d_base_asb_e(n, x, info) + subroutine d_base_asb_e(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, j + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz real(psb_dpk_), allocatable :: vv(:) - info = 0 + info = 0 + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (try_newins) then if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') @@ -728,11 +774,14 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else + else if (x%is_upd().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') end if else if (x%get_nrows() < n) & @@ -741,7 +790,6 @@ contains & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') end if call x%sync() - end subroutine d_base_asb_e ! @@ -763,9 +811,10 @@ contains if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') - + call x%set_null() end subroutine d_base_free @@ -828,7 +877,7 @@ contains if (allocated(x%comid)) & & deallocate(x%comid,stat=info) end subroutine d_base_free_comid - + function d_base_get_ncfs(x) result(res) implicit none class(psb_d_base_vect_type), intent(in) :: x @@ -926,7 +975,7 @@ contains x%bldstate = psb_vect_asb_ end subroutine d_base_set_asb - + ! ! The base version of SYNC & friends does nothing, it's just ! a placeholder. diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index c52946cfb..7fd1a4005 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -45,8 +45,9 @@ module psb_d_vect_mod type psb_d_vect_type class(psb_d_base_vect_type), allocatable :: v - integer(psb_ipk_) :: nrmv = 0 - integer(psb_ipk_) :: remote_build = psb_matbld_noremote_ + integer(psb_ipk_) :: nrmv = 0 + integer(psb_ipk_) :: remote_build=psb_matbld_noremote_ + integer(psb_ipk_) :: dupl = psb_dupl_add_ real(psb_dpk_), allocatable :: rmtv(:) integer(psb_lpk_), allocatable :: rmidx(:) contains @@ -74,7 +75,7 @@ module psb_d_vect_mod procedure, pass(x) :: is_upd => d_vect_is_upd procedure, pass(x) :: is_asb => d_vect_is_asb procedure, pass(x) :: reinit => d_vect_reinit - + procedure, pass(x) :: gthab => d_vect_gthab procedure, pass(x) :: gthzv => d_vect_gthzv generic, public :: gth => gthab, gthzv @@ -303,7 +304,6 @@ contains call x%set_state(psb_vect_asb_) end subroutine d_vect_set_asb - function d_vect_get_nrmv(x) result(res) implicit none class(psb_d_vect_type), intent(in) :: x @@ -393,12 +393,21 @@ contains end if end subroutine d_vect_clone - subroutine d_vect_bld_x(x,invect,mold) + subroutine d_vect_bld_x(x,invect,mold,scratch) real(psb_dpk_), intent(in) :: invect(:) class(psb_d_vect_type), intent(inout) :: x class(psb_d_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + info = psb_success_ if (allocated(x%v)) & & call x%free(info) @@ -409,17 +418,25 @@ contains allocate(x%v,stat=info, mold=psb_d_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(invect) + if (info == psb_success_) call x%v%bld(invect,scratch=scratch_) end subroutine d_vect_bld_x - subroutine d_vect_bld_mn(x,n,mold) + subroutine d_vect_bld_mn(x,n,mold,scratch) integer(psb_mpk_), intent(in) :: n class(psb_d_vect_type), intent(inout) :: x class(psb_d_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info class(psb_d_base_vect_type), pointer :: mld + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if info = psb_success_ if (allocated(x%v)) & @@ -430,17 +447,25 @@ contains else allocate(x%v,stat=info, mold=psb_d_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine d_vect_bld_mn - subroutine d_vect_bld_en(x,n,mold) + subroutine d_vect_bld_en(x,n,mold,scratch) integer(psb_epk_), intent(in) :: n class(psb_d_vect_type), intent(inout) :: x class(psb_d_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info info = psb_success_ + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (allocated(x%v)) & & call x%free(info) @@ -450,7 +475,7 @@ contains else allocate(x%v,stat=info, mold=psb_d_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine d_vect_bld_en @@ -556,7 +581,6 @@ contains end subroutine d_vect_all subroutine d_vect_reinit(x, info) - implicit none class(psb_d_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info @@ -565,7 +589,7 @@ contains call x%set_upd() end subroutine d_vect_reinit - + subroutine d_vect_reall(n, x, info) implicit none @@ -590,16 +614,17 @@ contains end subroutine d_vect_zero - subroutine d_vect_asb(n, x, info) + subroutine d_vect_asb(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: n class(psb_d_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch if (allocated(x%v)) then - call x%v%asb(n,info) + call x%v%asb(n,info,scratch=scratch) end if end subroutine d_vect_asb @@ -658,7 +683,7 @@ contains use psi_serial_mod implicit none class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n,maxr + integer(psb_ipk_), intent(in) :: n, maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -679,7 +704,7 @@ contains use psi_serial_mod implicit none class(psb_d_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n,maxr + integer(psb_ipk_), intent(in) :: n, maxr class(psb_i_vect_type), intent(inout) :: irl class(psb_d_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index e2c64af37..5896d32e5 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -63,6 +63,18 @@ module psb_i_base_vect_mod integer(psb_ipk_), allocatable :: v(:) integer(psb_ipk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -86,6 +98,21 @@ module psb_i_base_vect_mod procedure, pass(x) :: asb_e => i_base_asb_e generic, public :: asb => asb_m, asb_e procedure, pass(x) :: free => i_base_free + procedure, pass(x) :: reinit => i_base_reinit + procedure, pass(x) :: set_ncfs => i_base_set_ncfs + procedure, pass(x) :: get_ncfs => i_base_get_ncfs + procedure, pass(x) :: set_dupl => i_base_set_dupl + procedure, pass(x) :: get_dupl => i_base_get_dupl + procedure, pass(x) :: set_state => i_base_set_state + procedure, pass(x) :: set_null => i_base_set_null + procedure, pass(x) :: set_bld => i_base_set_bld + procedure, pass(x) :: set_upd => i_base_set_upd + procedure, pass(x) :: set_asb => i_base_set_asb + procedure, pass(x) :: get_state => i_base_get_state + procedure, pass(x) :: is_null => i_base_is_null + procedure, pass(x) :: is_bld => i_base_is_bld + procedure, pass(x) :: is_upd => i_base_is_upd + procedure, pass(x) :: is_asb => i_base_is_asb ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -144,8 +171,6 @@ module psb_i_base_vect_mod - - end type psb_i_base_vect_type public :: psb_i_base_vect @@ -196,14 +221,22 @@ contains !! \brief Build method from an array !! \param x(:) input array to be copied !! - subroutine i_base_bld_x(x,this) + subroutine i_base_bld_x(x,this,scratch) use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: this(:) class(psb_i_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info integer(psb_ipk_) :: i + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(size(this),x%v,info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,'base_vect_bld') @@ -228,15 +261,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine i_base_bld_mn(x,n) + subroutine i_base_bld_mn(x,n,scratch) use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_i_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine i_base_bld_mn @@ -245,15 +286,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine i_base_bld_en(x,n) + subroutine i_base_bld_en(x,n,scratch) use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_i_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine i_base_bld_en @@ -273,9 +322,29 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine i_base_all + subroutine i_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = izero + call x%set_host() + call x%set_upd() + end if + + end subroutine i_base_reinit + !> Function base_mold: !! \memberof psb_i_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -321,55 +390,116 @@ contains !! \param info return code !! ! - subroutine i_base_ins_a(n,irl,val,dupl,x,info) + subroutine i_base_ins_a(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_ipk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i)) = val(i) + x%v(k) = val(i) + x%iv(k) = irl(i) end if enddo - - case(psb_dupl_add_) - - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i)) = x%v(irl(i)) + val(i) - end if - enddo - - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if call x%set_host() if (info /= 0) then @@ -379,11 +509,11 @@ contains end subroutine i_base_ins_a - subroutine i_base_ins_v(n,irl,val,dupl,x,info) + subroutine i_base_ins_v(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_i_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -396,7 +526,7 @@ contains if (irl%is_dev()) call irl%sync() if (val%is_dev()) call val%sync() if (x%is_dev()) call x%sync() - call x%ins(n,irl%v,val%v,dupl,info) + call x%ins(n,irl%v,val%v,dupl,maxr,info) if (info /= 0) then call psb_errpush(info,'base_vect_ins') @@ -440,19 +570,70 @@ contains !! ! - subroutine i_base_asb_m(n, x, info) + subroutine i_base_asb_m(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_i_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_ipk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine i_base_asb_m @@ -470,19 +651,70 @@ contains !! ! - subroutine i_base_asb_e(n, x, info) + subroutine i_base_asb_e(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_i_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_ipk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') + if (x%is_bld()) then + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,x%get_ncfs() + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect_asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine i_base_asb_e @@ -505,9 +737,10 @@ contains if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') - + call x%set_null() end subroutine i_base_free @@ -570,7 +803,104 @@ contains if (allocated(x%comid)) & & deallocate(x%comid,stat=info) end subroutine i_base_free_comid + + function i_base_get_ncfs(x) result(res) + implicit none + class(psb_i_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function i_base_get_ncfs + + function i_base_get_dupl(x) result(res) + implicit none + class(psb_i_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function i_base_get_dupl + + function i_base_get_state(x) result(res) + implicit none + class(psb_i_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function i_base_get_state + + function i_base_is_null(x) result(res) + implicit none + class(psb_i_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function i_base_is_null + + function i_base_is_bld(x) result(res) + implicit none + class(psb_i_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function i_base_is_bld + + function i_base_is_upd(x) result(res) + implicit none + class(psb_i_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function i_base_is_upd + + function i_base_is_asb(x) result(res) + implicit none + class(psb_i_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function i_base_is_asb + + subroutine i_base_set_ncfs(n,x) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine i_base_set_ncfs + + subroutine i_base_set_dupl(n,x) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine i_base_set_dupl + + subroutine i_base_set_state(n,x) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine i_base_set_state + + subroutine i_base_set_null(x) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine i_base_set_null + + subroutine i_base_set_bld(x) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine i_base_set_bld + + subroutine i_base_set_upd(x) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine i_base_set_upd + + subroutine i_base_set_asb(x) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + x%bldstate = psb_vect_asb_ + end subroutine i_base_set_asb ! ! The base version of SYNC & friends does nothing, it's just diff --git a/base/modules/serial/psb_i_vect_mod.F90 b/base/modules/serial/psb_i_vect_mod.F90 index 55ed7e9df..6012005c5 100644 --- a/base/modules/serial/psb_i_vect_mod.F90 +++ b/base/modules/serial/psb_i_vect_mod.F90 @@ -55,14 +55,26 @@ module psb_i_vect_mod procedure, pass(x) :: get_fmt => i_vect_get_fmt procedure, pass(x) :: is_remote_build => i_vect_is_remote_build procedure, pass(x) :: set_remote_build => i_vect_set_remote_build - procedure, pass(x) :: get_dupl => i_vect_get_dupl - procedure, pass(x) :: set_dupl => i_vect_set_dupl procedure, pass(x) :: get_nrmv => i_vect_get_nrmv procedure, pass(x) :: set_nrmv => i_vect_set_nrmv procedure, pass(x) :: all => i_vect_all procedure, pass(x) :: reall => i_vect_reall procedure, pass(x) :: zero => i_vect_zero procedure, pass(x) :: asb => i_vect_asb + procedure, pass(x) :: set_dupl => i_vect_set_dupl + procedure, pass(x) :: get_dupl => i_vect_get_dupl + procedure, pass(x) :: set_state => i_vect_set_state + procedure, pass(x) :: set_null => i_vect_set_null + procedure, pass(x) :: set_bld => i_vect_set_bld + procedure, pass(x) :: set_upd => i_vect_set_upd + procedure, pass(x) :: set_asb => i_vect_set_asb + procedure, pass(x) :: get_state => i_vect_get_state + procedure, pass(x) :: is_null => i_vect_is_null + procedure, pass(x) :: is_bld => i_vect_is_bld + procedure, pass(x) :: is_upd => i_vect_is_upd + procedure, pass(x) :: is_asb => i_vect_is_asb + procedure, pass(x) :: reinit => i_vect_reinit + procedure, pass(x) :: gthab => i_vect_gthab procedure, pass(x) :: gthzv => i_vect_gthzv generic, public :: gth => gthab, gthzv @@ -132,7 +144,11 @@ contains implicit none class(psb_i_vect_type), intent(in) :: x integer(psb_ipk_) :: res - res = x%dupl + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if end function i_vect_get_dupl subroutine i_vect_set_dupl(x,val) @@ -140,13 +156,92 @@ contains class(psb_i_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in), optional :: val - if (present(val)) then - x%dupl = val - else - x%dupl = psb_dupl_def_ + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_dupl(val) + else + call x%v%set_dupl(psb_dupl_def_) + end if end if end subroutine i_vect_set_dupl + function i_vect_get_state(x) result(res) + implicit none + class(psb_i_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if + end function i_vect_get_state + + function i_vect_is_null(x) result(res) + implicit none + class(psb_i_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_null_) + end function i_vect_is_null + + function i_vect_is_bld(x) result(res) + implicit none + class(psb_i_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_bld_) + end function i_vect_is_bld + + function i_vect_is_upd(x) result(res) + implicit none + class(psb_i_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_upd_) + end function i_vect_is_upd + + function i_vect_is_asb(x) result(res) + implicit none + class(psb_i_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_asb_) + end function i_vect_is_asb + + subroutine i_vect_set_state(n,x) + implicit none + class(psb_i_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + if (allocated(x%v)) then + call x%v%set_state(n) + end if + end subroutine i_vect_set_state + + + subroutine i_vect_set_null(x) + implicit none + class(psb_i_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_null_) + end subroutine i_vect_set_null + + subroutine i_vect_set_bld(x) + implicit none + class(psb_i_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_bld_) + end subroutine i_vect_set_bld + + subroutine i_vect_set_upd(x) + implicit none + class(psb_i_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_upd_) + end subroutine i_vect_set_upd + + subroutine i_vect_set_asb(x) + implicit none + class(psb_i_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_asb_) + end subroutine i_vect_set_asb + function i_vect_get_nrmv(x) result(res) implicit none class(psb_i_vect_type), intent(in) :: x @@ -236,12 +331,21 @@ contains end if end subroutine i_vect_clone - subroutine i_vect_bld_x(x,invect,mold) + subroutine i_vect_bld_x(x,invect,mold,scratch) integer(psb_ipk_), intent(in) :: invect(:) class(psb_i_vect_type), intent(inout) :: x class(psb_i_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + info = psb_success_ if (allocated(x%v)) & & call x%free(info) @@ -252,17 +356,25 @@ contains allocate(x%v,stat=info, mold=psb_i_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(invect) + if (info == psb_success_) call x%v%bld(invect,scratch=scratch_) end subroutine i_vect_bld_x - subroutine i_vect_bld_mn(x,n,mold) + subroutine i_vect_bld_mn(x,n,mold,scratch) integer(psb_mpk_), intent(in) :: n class(psb_i_vect_type), intent(inout) :: x class(psb_i_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info class(psb_i_base_vect_type), pointer :: mld + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if info = psb_success_ if (allocated(x%v)) & @@ -273,17 +385,25 @@ contains else allocate(x%v,stat=info, mold=psb_i_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine i_vect_bld_mn - subroutine i_vect_bld_en(x,n,mold) + subroutine i_vect_bld_en(x,n,mold,scratch) integer(psb_epk_), intent(in) :: n class(psb_i_vect_type), intent(inout) :: x class(psb_i_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info info = psb_success_ + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (allocated(x%v)) & & call x%free(info) @@ -293,7 +413,7 @@ contains else allocate(x%v,stat=info, mold=psb_i_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine i_vect_bld_en @@ -395,8 +515,19 @@ contains else info = psb_err_alloc_dealloc_ end if + call x%set_bld() end subroutine i_vect_all + subroutine i_vect_reinit(x, info) + implicit none + class(psb_i_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) call x%v%reinit(info) + call x%set_upd() + + end subroutine i_vect_reinit + subroutine i_vect_reall(n, x, info) implicit none @@ -421,16 +552,17 @@ contains end subroutine i_vect_zero - subroutine i_vect_asb(n, x, info) + subroutine i_vect_asb(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: n class(psb_i_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch if (allocated(x%v)) then - call x%v%asb(n,info) + call x%v%asb(n,info,scratch=scratch) end if end subroutine i_vect_asb @@ -485,11 +617,11 @@ contains end subroutine i_vect_free - subroutine i_vect_ins_a(n,irl,val,x,info) + subroutine i_vect_ins_a(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_i_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_ipk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -502,15 +634,15 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine i_vect_ins_a - subroutine i_vect_ins_v(n,irl,val,x,info) + subroutine i_vect_ins_v(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_i_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr class(psb_i_vect_type), intent(inout) :: irl class(psb_i_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -523,7 +655,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl%v,val%v,dupl,info) + call x%v%ins(n,irl%v,val%v,dupl,maxr,info) end subroutine i_vect_ins_v diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index cf30db749..1df397b33 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -64,6 +64,18 @@ module psb_l_base_vect_mod integer(psb_lpk_), allocatable :: v(:) integer(psb_lpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -87,6 +99,21 @@ module psb_l_base_vect_mod procedure, pass(x) :: asb_e => l_base_asb_e generic, public :: asb => asb_m, asb_e procedure, pass(x) :: free => l_base_free + procedure, pass(x) :: reinit => l_base_reinit + procedure, pass(x) :: set_ncfs => l_base_set_ncfs + procedure, pass(x) :: get_ncfs => l_base_get_ncfs + procedure, pass(x) :: set_dupl => l_base_set_dupl + procedure, pass(x) :: get_dupl => l_base_get_dupl + procedure, pass(x) :: set_state => l_base_set_state + procedure, pass(x) :: set_null => l_base_set_null + procedure, pass(x) :: set_bld => l_base_set_bld + procedure, pass(x) :: set_upd => l_base_set_upd + procedure, pass(x) :: set_asb => l_base_set_asb + procedure, pass(x) :: get_state => l_base_get_state + procedure, pass(x) :: is_null => l_base_is_null + procedure, pass(x) :: is_bld => l_base_is_bld + procedure, pass(x) :: is_upd => l_base_is_upd + procedure, pass(x) :: is_asb => l_base_is_asb ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -145,8 +172,6 @@ module psb_l_base_vect_mod - - end type psb_l_base_vect_type public :: psb_l_base_vect @@ -197,14 +222,22 @@ contains !! \brief Build method from an array !! \param x(:) input array to be copied !! - subroutine l_base_bld_x(x,this) + subroutine l_base_bld_x(x,this,scratch) use psb_realloc_mod implicit none integer(psb_lpk_), intent(in) :: this(:) class(psb_l_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info integer(psb_ipk_) :: i + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(size(this),x%v,info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,'base_vect_bld') @@ -229,15 +262,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine l_base_bld_mn(x,n) + subroutine l_base_bld_mn(x,n,scratch) use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_l_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine l_base_bld_mn @@ -246,15 +287,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine l_base_bld_en(x,n) + subroutine l_base_bld_en(x,n,scratch) use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_l_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine l_base_bld_en @@ -274,9 +323,29 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine l_base_all + subroutine l_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_l_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = lzero + call x%set_host() + call x%set_upd() + end if + + end subroutine l_base_reinit + !> Function base_mold: !! \memberof psb_l_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -322,55 +391,116 @@ contains !! \param info return code !! ! - subroutine l_base_ins_a(n,irl,val,dupl,x,info) + subroutine l_base_ins_a(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_l_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_lpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i)) = val(i) + x%v(k) = val(i) + x%iv(k) = irl(i) end if enddo - - case(psb_dupl_add_) - - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i)) = x%v(irl(i)) + val(i) - end if - enddo - - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if call x%set_host() if (info /= 0) then @@ -380,11 +510,11 @@ contains end subroutine l_base_ins_a - subroutine l_base_ins_v(n,irl,val,dupl,x,info) + subroutine l_base_ins_v(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_l_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_l_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -397,7 +527,7 @@ contains if (irl%is_dev()) call irl%sync() if (val%is_dev()) call val%sync() if (x%is_dev()) call x%sync() - call x%ins(n,irl%v,val%v,dupl,info) + call x%ins(n,irl%v,val%v,dupl,maxr,info) if (info /= 0) then call psb_errpush(info,'base_vect_ins') @@ -441,19 +571,70 @@ contains !! ! - subroutine l_base_asb_m(n, x, info) + subroutine l_base_asb_m(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_l_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_lpk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine l_base_asb_m @@ -471,19 +652,70 @@ contains !! ! - subroutine l_base_asb_e(n, x, info) + subroutine l_base_asb_e(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_l_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_lpk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') + if (x%is_bld()) then + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,x%get_ncfs() + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect_asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine l_base_asb_e @@ -506,9 +738,10 @@ contains if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') - + call x%set_null() end subroutine l_base_free @@ -571,7 +804,104 @@ contains if (allocated(x%comid)) & & deallocate(x%comid,stat=info) end subroutine l_base_free_comid + + function l_base_get_ncfs(x) result(res) + implicit none + class(psb_l_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function l_base_get_ncfs + + function l_base_get_dupl(x) result(res) + implicit none + class(psb_l_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function l_base_get_dupl + + function l_base_get_state(x) result(res) + implicit none + class(psb_l_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function l_base_get_state + + function l_base_is_null(x) result(res) + implicit none + class(psb_l_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function l_base_is_null + + function l_base_is_bld(x) result(res) + implicit none + class(psb_l_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function l_base_is_bld + + function l_base_is_upd(x) result(res) + implicit none + class(psb_l_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function l_base_is_upd + + function l_base_is_asb(x) result(res) + implicit none + class(psb_l_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function l_base_is_asb + + subroutine l_base_set_ncfs(n,x) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine l_base_set_ncfs + + subroutine l_base_set_dupl(n,x) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine l_base_set_dupl + + subroutine l_base_set_state(n,x) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine l_base_set_state + + subroutine l_base_set_null(x) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine l_base_set_null + + subroutine l_base_set_bld(x) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine l_base_set_bld + + subroutine l_base_set_upd(x) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine l_base_set_upd + + subroutine l_base_set_asb(x) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + x%bldstate = psb_vect_asb_ + end subroutine l_base_set_asb ! ! The base version of SYNC & friends does nothing, it's just diff --git a/base/modules/serial/psb_l_vect_mod.F90 b/base/modules/serial/psb_l_vect_mod.F90 index 6936e75f4..d9a91d111 100644 --- a/base/modules/serial/psb_l_vect_mod.F90 +++ b/base/modules/serial/psb_l_vect_mod.F90 @@ -56,14 +56,26 @@ module psb_l_vect_mod procedure, pass(x) :: get_fmt => l_vect_get_fmt procedure, pass(x) :: is_remote_build => l_vect_is_remote_build procedure, pass(x) :: set_remote_build => l_vect_set_remote_build - procedure, pass(x) :: get_dupl => l_vect_get_dupl - procedure, pass(x) :: set_dupl => l_vect_set_dupl procedure, pass(x) :: get_nrmv => l_vect_get_nrmv procedure, pass(x) :: set_nrmv => l_vect_set_nrmv procedure, pass(x) :: all => l_vect_all procedure, pass(x) :: reall => l_vect_reall procedure, pass(x) :: zero => l_vect_zero procedure, pass(x) :: asb => l_vect_asb + procedure, pass(x) :: set_dupl => l_vect_set_dupl + procedure, pass(x) :: get_dupl => l_vect_get_dupl + procedure, pass(x) :: set_state => l_vect_set_state + procedure, pass(x) :: set_null => l_vect_set_null + procedure, pass(x) :: set_bld => l_vect_set_bld + procedure, pass(x) :: set_upd => l_vect_set_upd + procedure, pass(x) :: set_asb => l_vect_set_asb + procedure, pass(x) :: get_state => l_vect_get_state + procedure, pass(x) :: is_null => l_vect_is_null + procedure, pass(x) :: is_bld => l_vect_is_bld + procedure, pass(x) :: is_upd => l_vect_is_upd + procedure, pass(x) :: is_asb => l_vect_is_asb + procedure, pass(x) :: reinit => l_vect_reinit + procedure, pass(x) :: gthab => l_vect_gthab procedure, pass(x) :: gthzv => l_vect_gthzv generic, public :: gth => gthab, gthzv @@ -133,7 +145,11 @@ contains implicit none class(psb_l_vect_type), intent(in) :: x integer(psb_ipk_) :: res - res = x%dupl + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if end function l_vect_get_dupl subroutine l_vect_set_dupl(x,val) @@ -141,13 +157,92 @@ contains class(psb_l_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in), optional :: val - if (present(val)) then - x%dupl = val - else - x%dupl = psb_dupl_def_ + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_dupl(val) + else + call x%v%set_dupl(psb_dupl_def_) + end if end if end subroutine l_vect_set_dupl + function l_vect_get_state(x) result(res) + implicit none + class(psb_l_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if + end function l_vect_get_state + + function l_vect_is_null(x) result(res) + implicit none + class(psb_l_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_null_) + end function l_vect_is_null + + function l_vect_is_bld(x) result(res) + implicit none + class(psb_l_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_bld_) + end function l_vect_is_bld + + function l_vect_is_upd(x) result(res) + implicit none + class(psb_l_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_upd_) + end function l_vect_is_upd + + function l_vect_is_asb(x) result(res) + implicit none + class(psb_l_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_asb_) + end function l_vect_is_asb + + subroutine l_vect_set_state(n,x) + implicit none + class(psb_l_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + if (allocated(x%v)) then + call x%v%set_state(n) + end if + end subroutine l_vect_set_state + + + subroutine l_vect_set_null(x) + implicit none + class(psb_l_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_null_) + end subroutine l_vect_set_null + + subroutine l_vect_set_bld(x) + implicit none + class(psb_l_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_bld_) + end subroutine l_vect_set_bld + + subroutine l_vect_set_upd(x) + implicit none + class(psb_l_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_upd_) + end subroutine l_vect_set_upd + + subroutine l_vect_set_asb(x) + implicit none + class(psb_l_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_asb_) + end subroutine l_vect_set_asb + function l_vect_get_nrmv(x) result(res) implicit none class(psb_l_vect_type), intent(in) :: x @@ -237,12 +332,21 @@ contains end if end subroutine l_vect_clone - subroutine l_vect_bld_x(x,invect,mold) + subroutine l_vect_bld_x(x,invect,mold,scratch) integer(psb_lpk_), intent(in) :: invect(:) class(psb_l_vect_type), intent(inout) :: x class(psb_l_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + info = psb_success_ if (allocated(x%v)) & & call x%free(info) @@ -253,17 +357,25 @@ contains allocate(x%v,stat=info, mold=psb_l_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(invect) + if (info == psb_success_) call x%v%bld(invect,scratch=scratch_) end subroutine l_vect_bld_x - subroutine l_vect_bld_mn(x,n,mold) + subroutine l_vect_bld_mn(x,n,mold,scratch) integer(psb_mpk_), intent(in) :: n class(psb_l_vect_type), intent(inout) :: x class(psb_l_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info class(psb_l_base_vect_type), pointer :: mld + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if info = psb_success_ if (allocated(x%v)) & @@ -274,17 +386,25 @@ contains else allocate(x%v,stat=info, mold=psb_l_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine l_vect_bld_mn - subroutine l_vect_bld_en(x,n,mold) + subroutine l_vect_bld_en(x,n,mold,scratch) integer(psb_epk_), intent(in) :: n class(psb_l_vect_type), intent(inout) :: x class(psb_l_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info info = psb_success_ + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (allocated(x%v)) & & call x%free(info) @@ -294,7 +414,7 @@ contains else allocate(x%v,stat=info, mold=psb_l_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine l_vect_bld_en @@ -396,8 +516,19 @@ contains else info = psb_err_alloc_dealloc_ end if + call x%set_bld() end subroutine l_vect_all + subroutine l_vect_reinit(x, info) + implicit none + class(psb_l_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) call x%v%reinit(info) + call x%set_upd() + + end subroutine l_vect_reinit + subroutine l_vect_reall(n, x, info) implicit none @@ -422,16 +553,17 @@ contains end subroutine l_vect_zero - subroutine l_vect_asb(n, x, info) + subroutine l_vect_asb(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: n class(psb_l_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch if (allocated(x%v)) then - call x%v%asb(n,info) + call x%v%asb(n,info,scratch=scratch) end if end subroutine l_vect_asb @@ -486,11 +618,11 @@ contains end subroutine l_vect_free - subroutine l_vect_ins_a(n,irl,val,x,info) + subroutine l_vect_ins_a(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_l_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_lpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -503,15 +635,15 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine l_vect_ins_a - subroutine l_vect_ins_v(n,irl,val,x,info) + subroutine l_vect_ins_v(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_l_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr class(psb_i_vect_type), intent(inout) :: irl class(psb_l_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -524,7 +656,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl%v,val%v,dupl,info) + call x%v%ins(n,irl%v,val%v,dupl,maxr,info) end subroutine l_vect_ins_v diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index 702a1af35..488bfbe23 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -65,6 +65,18 @@ module psb_s_base_vect_mod real(psb_spk_), allocatable :: v(:) real(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -88,6 +100,21 @@ module psb_s_base_vect_mod procedure, pass(x) :: asb_e => s_base_asb_e generic, public :: asb => asb_m, asb_e procedure, pass(x) :: free => s_base_free + procedure, pass(x) :: reinit => s_base_reinit + procedure, pass(x) :: set_ncfs => s_base_set_ncfs + procedure, pass(x) :: get_ncfs => s_base_get_ncfs + procedure, pass(x) :: set_dupl => s_base_set_dupl + procedure, pass(x) :: get_dupl => s_base_get_dupl + procedure, pass(x) :: set_state => s_base_set_state + procedure, pass(x) :: set_null => s_base_set_null + procedure, pass(x) :: set_bld => s_base_set_bld + procedure, pass(x) :: set_upd => s_base_set_upd + procedure, pass(x) :: set_asb => s_base_set_asb + procedure, pass(x) :: get_state => s_base_get_state + procedure, pass(x) :: is_null => s_base_is_null + procedure, pass(x) :: is_bld => s_base_is_bld + procedure, pass(x) :: is_upd => s_base_is_upd + procedure, pass(x) :: is_asb => s_base_is_asb ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -218,8 +245,6 @@ module psb_s_base_vect_mod procedure, pass(x) :: minquotient_a2 => s_base_minquotient_a2 generic, public :: minquotient => minquotient_v, minquotient_a2 - - end type psb_s_base_vect_type public :: psb_s_base_vect @@ -270,14 +295,22 @@ contains !! \brief Build method from an array !! \param x(:) input array to be copied !! - subroutine s_base_bld_x(x,this) + subroutine s_base_bld_x(x,this,scratch) use psb_realloc_mod implicit none real(psb_spk_), intent(in) :: this(:) class(psb_s_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info integer(psb_ipk_) :: i + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(size(this),x%v,info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,'base_vect_bld') @@ -302,15 +335,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine s_base_bld_mn(x,n) + subroutine s_base_bld_mn(x,n,scratch) use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_s_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine s_base_bld_mn @@ -319,15 +360,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine s_base_bld_en(x,n) + subroutine s_base_bld_en(x,n,scratch) use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_s_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine s_base_bld_en @@ -347,9 +396,29 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine s_base_all + subroutine s_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_s_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = szero + call x%set_host() + call x%set_upd() + end if + + end subroutine s_base_reinit + !> Function base_mold: !! \memberof psb_s_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -395,55 +464,116 @@ contains !! \param info return code !! ! - subroutine s_base_ins_a(n,irl,val,dupl,x,info) + subroutine s_base_ins_a(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_s_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_spk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i)) = val(i) - end if - enddo - - case(psb_dupl_add_) - - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i)) = x%v(irl(i)) + val(i) + x%v(k) = val(i) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + else + isz = size(x%v) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if call x%set_host() if (info /= 0) then @@ -453,11 +583,11 @@ contains end subroutine s_base_ins_a - subroutine s_base_ins_v(n,irl,val,dupl,x,info) + subroutine s_base_ins_v(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_s_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_s_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -470,7 +600,7 @@ contains if (irl%is_dev()) call irl%sync() if (val%is_dev()) call val%sync() if (x%is_dev()) call x%sync() - call x%ins(n,irl%v,val%v,dupl,info) + call x%ins(n,irl%v,val%v,dupl,maxr,info) if (info /= 0) then call psb_errpush(info,'base_vect_ins') @@ -514,19 +644,70 @@ contains !! ! - subroutine s_base_asb_m(n, x, info) + subroutine s_base_asb_m(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_s_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + real(psb_spk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine s_base_asb_m @@ -544,19 +725,70 @@ contains !! ! - subroutine s_base_asb_e(n, x, info) + subroutine s_base_asb_e(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_s_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + real(psb_spk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') + if (x%is_bld()) then + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,x%get_ncfs() + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect_asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine s_base_asb_e @@ -579,9 +811,10 @@ contains if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') - + call x%set_null() end subroutine s_base_free @@ -644,7 +877,104 @@ contains if (allocated(x%comid)) & & deallocate(x%comid,stat=info) end subroutine s_base_free_comid + + function s_base_get_ncfs(x) result(res) + implicit none + class(psb_s_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function s_base_get_ncfs + + function s_base_get_dupl(x) result(res) + implicit none + class(psb_s_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function s_base_get_dupl + + function s_base_get_state(x) result(res) + implicit none + class(psb_s_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function s_base_get_state + + function s_base_is_null(x) result(res) + implicit none + class(psb_s_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function s_base_is_null + + function s_base_is_bld(x) result(res) + implicit none + class(psb_s_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function s_base_is_bld + + function s_base_is_upd(x) result(res) + implicit none + class(psb_s_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function s_base_is_upd + + function s_base_is_asb(x) result(res) + implicit none + class(psb_s_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function s_base_is_asb + + subroutine s_base_set_ncfs(n,x) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine s_base_set_ncfs + + subroutine s_base_set_dupl(n,x) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine s_base_set_dupl + + subroutine s_base_set_state(n,x) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine s_base_set_state + + subroutine s_base_set_null(x) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine s_base_set_null + + subroutine s_base_set_bld(x) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine s_base_set_bld + + subroutine s_base_set_upd(x) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine s_base_set_upd + + subroutine s_base_set_asb(x) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + x%bldstate = psb_vect_asb_ + end subroutine s_base_set_asb ! ! The base version of SYNC & friends does nothing, it's just diff --git a/base/modules/serial/psb_s_vect_mod.F90 b/base/modules/serial/psb_s_vect_mod.F90 index 3e27495ac..ddb5590ba 100644 --- a/base/modules/serial/psb_s_vect_mod.F90 +++ b/base/modules/serial/psb_s_vect_mod.F90 @@ -56,14 +56,26 @@ module psb_s_vect_mod procedure, pass(x) :: get_fmt => s_vect_get_fmt procedure, pass(x) :: is_remote_build => s_vect_is_remote_build procedure, pass(x) :: set_remote_build => s_vect_set_remote_build - procedure, pass(x) :: get_dupl => s_vect_get_dupl - procedure, pass(x) :: set_dupl => s_vect_set_dupl procedure, pass(x) :: get_nrmv => s_vect_get_nrmv procedure, pass(x) :: set_nrmv => s_vect_set_nrmv procedure, pass(x) :: all => s_vect_all procedure, pass(x) :: reall => s_vect_reall procedure, pass(x) :: zero => s_vect_zero procedure, pass(x) :: asb => s_vect_asb + procedure, pass(x) :: set_dupl => s_vect_set_dupl + procedure, pass(x) :: get_dupl => s_vect_get_dupl + procedure, pass(x) :: set_state => s_vect_set_state + procedure, pass(x) :: set_null => s_vect_set_null + procedure, pass(x) :: set_bld => s_vect_set_bld + procedure, pass(x) :: set_upd => s_vect_set_upd + procedure, pass(x) :: set_asb => s_vect_set_asb + procedure, pass(x) :: get_state => s_vect_get_state + procedure, pass(x) :: is_null => s_vect_is_null + procedure, pass(x) :: is_bld => s_vect_is_bld + procedure, pass(x) :: is_upd => s_vect_is_upd + procedure, pass(x) :: is_asb => s_vect_is_asb + procedure, pass(x) :: reinit => s_vect_reinit + procedure, pass(x) :: gthab => s_vect_gthab procedure, pass(x) :: gthzv => s_vect_gthzv generic, public :: gth => gthab, gthzv @@ -194,7 +206,11 @@ contains implicit none class(psb_s_vect_type), intent(in) :: x integer(psb_ipk_) :: res - res = x%dupl + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if end function s_vect_get_dupl subroutine s_vect_set_dupl(x,val) @@ -202,13 +218,92 @@ contains class(psb_s_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in), optional :: val - if (present(val)) then - x%dupl = val - else - x%dupl = psb_dupl_def_ + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_dupl(val) + else + call x%v%set_dupl(psb_dupl_def_) + end if end if end subroutine s_vect_set_dupl + function s_vect_get_state(x) result(res) + implicit none + class(psb_s_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if + end function s_vect_get_state + + function s_vect_is_null(x) result(res) + implicit none + class(psb_s_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_null_) + end function s_vect_is_null + + function s_vect_is_bld(x) result(res) + implicit none + class(psb_s_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_bld_) + end function s_vect_is_bld + + function s_vect_is_upd(x) result(res) + implicit none + class(psb_s_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_upd_) + end function s_vect_is_upd + + function s_vect_is_asb(x) result(res) + implicit none + class(psb_s_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_asb_) + end function s_vect_is_asb + + subroutine s_vect_set_state(n,x) + implicit none + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + if (allocated(x%v)) then + call x%v%set_state(n) + end if + end subroutine s_vect_set_state + + + subroutine s_vect_set_null(x) + implicit none + class(psb_s_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_null_) + end subroutine s_vect_set_null + + subroutine s_vect_set_bld(x) + implicit none + class(psb_s_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_bld_) + end subroutine s_vect_set_bld + + subroutine s_vect_set_upd(x) + implicit none + class(psb_s_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_upd_) + end subroutine s_vect_set_upd + + subroutine s_vect_set_asb(x) + implicit none + class(psb_s_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_asb_) + end subroutine s_vect_set_asb + function s_vect_get_nrmv(x) result(res) implicit none class(psb_s_vect_type), intent(in) :: x @@ -298,12 +393,21 @@ contains end if end subroutine s_vect_clone - subroutine s_vect_bld_x(x,invect,mold) + subroutine s_vect_bld_x(x,invect,mold,scratch) real(psb_spk_), intent(in) :: invect(:) class(psb_s_vect_type), intent(inout) :: x class(psb_s_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + info = psb_success_ if (allocated(x%v)) & & call x%free(info) @@ -314,17 +418,25 @@ contains allocate(x%v,stat=info, mold=psb_s_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(invect) + if (info == psb_success_) call x%v%bld(invect,scratch=scratch_) end subroutine s_vect_bld_x - subroutine s_vect_bld_mn(x,n,mold) + subroutine s_vect_bld_mn(x,n,mold,scratch) integer(psb_mpk_), intent(in) :: n class(psb_s_vect_type), intent(inout) :: x class(psb_s_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info class(psb_s_base_vect_type), pointer :: mld + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if info = psb_success_ if (allocated(x%v)) & @@ -335,17 +447,25 @@ contains else allocate(x%v,stat=info, mold=psb_s_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine s_vect_bld_mn - subroutine s_vect_bld_en(x,n,mold) + subroutine s_vect_bld_en(x,n,mold,scratch) integer(psb_epk_), intent(in) :: n class(psb_s_vect_type), intent(inout) :: x class(psb_s_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info info = psb_success_ + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (allocated(x%v)) & & call x%free(info) @@ -355,7 +475,7 @@ contains else allocate(x%v,stat=info, mold=psb_s_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine s_vect_bld_en @@ -457,8 +577,19 @@ contains else info = psb_err_alloc_dealloc_ end if + call x%set_bld() end subroutine s_vect_all + subroutine s_vect_reinit(x, info) + implicit none + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) call x%v%reinit(info) + call x%set_upd() + + end subroutine s_vect_reinit + subroutine s_vect_reall(n, x, info) implicit none @@ -483,16 +614,17 @@ contains end subroutine s_vect_zero - subroutine s_vect_asb(n, x, info) + subroutine s_vect_asb(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: n class(psb_s_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch if (allocated(x%v)) then - call x%v%asb(n,info) + call x%v%asb(n,info,scratch=scratch) end if end subroutine s_vect_asb @@ -547,11 +679,11 @@ contains end subroutine s_vect_free - subroutine s_vect_ins_a(n,irl,val,x,info) + subroutine s_vect_ins_a(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_s_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_spk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -564,15 +696,15 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine s_vect_ins_a - subroutine s_vect_ins_v(n,irl,val,x,info) + subroutine s_vect_ins_v(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_s_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr class(psb_i_vect_type), intent(inout) :: irl class(psb_s_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -585,7 +717,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl%v,val%v,dupl,info) + call x%v%ins(n,irl%v,val%v,dupl,maxr,info) end subroutine s_vect_ins_v diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index bf1a276cd..fa7fb39a8 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -65,6 +65,18 @@ module psb_z_base_vect_mod complex(psb_dpk_), allocatable :: v(:) complex(psb_dpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -88,6 +100,21 @@ module psb_z_base_vect_mod procedure, pass(x) :: asb_e => z_base_asb_e generic, public :: asb => asb_m, asb_e procedure, pass(x) :: free => z_base_free + procedure, pass(x) :: reinit => z_base_reinit + procedure, pass(x) :: set_ncfs => z_base_set_ncfs + procedure, pass(x) :: get_ncfs => z_base_get_ncfs + procedure, pass(x) :: set_dupl => z_base_set_dupl + procedure, pass(x) :: get_dupl => z_base_get_dupl + procedure, pass(x) :: set_state => z_base_set_state + procedure, pass(x) :: set_null => z_base_set_null + procedure, pass(x) :: set_bld => z_base_set_bld + procedure, pass(x) :: set_upd => z_base_set_upd + procedure, pass(x) :: set_asb => z_base_set_asb + procedure, pass(x) :: get_state => z_base_get_state + procedure, pass(x) :: is_null => z_base_is_null + procedure, pass(x) :: is_bld => z_base_is_bld + procedure, pass(x) :: is_upd => z_base_is_upd + procedure, pass(x) :: is_asb => z_base_is_asb ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -211,8 +238,6 @@ module psb_z_base_vect_mod generic, public :: addconst => addconst_a2,addconst_v2 - - end type psb_z_base_vect_type public :: psb_z_base_vect @@ -263,14 +288,22 @@ contains !! \brief Build method from an array !! \param x(:) input array to be copied !! - subroutine z_base_bld_x(x,this) + subroutine z_base_bld_x(x,this,scratch) use psb_realloc_mod implicit none complex(psb_dpk_), intent(in) :: this(:) class(psb_z_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info integer(psb_ipk_) :: i + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(size(this),x%v,info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,'base_vect_bld') @@ -295,15 +328,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine z_base_bld_mn(x,n) + subroutine z_base_bld_mn(x,n,scratch) use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_z_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine z_base_bld_mn @@ -312,15 +353,23 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine z_base_bld_en(x,n) + subroutine z_base_bld_en(x,n,scratch) use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_z_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(n,x%v,info) - call x%asb(n,info) + call x%asb(n,info,scratch=scratch_) end subroutine z_base_bld_en @@ -340,9 +389,29 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine z_base_all + subroutine z_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_z_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = zzero + call x%set_host() + call x%set_upd() + end if + + end subroutine z_base_reinit + !> Function base_mold: !! \memberof psb_z_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -388,55 +457,116 @@ contains !! \param info return code !! ! - subroutine z_base_ins_a(n,irl,val,dupl,x,info) + subroutine z_base_ins_a(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_z_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i)) = val(i) - end if - enddo - - case(psb_dupl_add_) - - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i)) = x%v(irl(i)) + val(i) + x%v(k) = val(i) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + else + isz = size(x%v) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if call x%set_host() if (info /= 0) then @@ -446,11 +576,11 @@ contains end subroutine z_base_ins_a - subroutine z_base_ins_v(n,irl,val,dupl,x,info) + subroutine z_base_ins_v(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_z_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl, maxr class(psb_i_base_vect_type), intent(inout) :: irl class(psb_z_base_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -463,7 +593,7 @@ contains if (irl%is_dev()) call irl%sync() if (val%is_dev()) call val%sync() if (x%is_dev()) call x%sync() - call x%ins(n,irl%v,val%v,dupl,info) + call x%ins(n,irl%v,val%v,dupl,maxr,info) if (info /= 0) then call psb_errpush(info,'base_vect_ins') @@ -507,19 +637,70 @@ contains !! ! - subroutine z_base_asb_m(n, x, info) + subroutine z_base_asb_m(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_z_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + complex(psb_dpk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine z_base_asb_m @@ -537,19 +718,70 @@ contains !! ! - subroutine z_base_asb_e(n, x, info) + subroutine z_base_asb_e(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_epk_), intent(in) :: n class(psb_z_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + complex(psb_dpk_), allocatable :: vv(:) info = 0 - if (x%get_nrows() < n) & - & call psb_realloc(n,x%v,info) - if (info /= 0) & - & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') + if (x%is_bld()) then + call psb_realloc(n,vv,info) + vv(:) = dzero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,x%get_ncfs() + if (vv(x%iv(i)).ne.dzero) then + call psb_errpush(psb_err_duplicate_coo,'vect_asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if call x%sync() end subroutine z_base_asb_e @@ -572,9 +804,10 @@ contains if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') - + call x%set_null() end subroutine z_base_free @@ -637,7 +870,104 @@ contains if (allocated(x%comid)) & & deallocate(x%comid,stat=info) end subroutine z_base_free_comid + + function z_base_get_ncfs(x) result(res) + implicit none + class(psb_z_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function z_base_get_ncfs + + function z_base_get_dupl(x) result(res) + implicit none + class(psb_z_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function z_base_get_dupl + + function z_base_get_state(x) result(res) + implicit none + class(psb_z_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function z_base_get_state + + function z_base_is_null(x) result(res) + implicit none + class(psb_z_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function z_base_is_null + + function z_base_is_bld(x) result(res) + implicit none + class(psb_z_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function z_base_is_bld + + function z_base_is_upd(x) result(res) + implicit none + class(psb_z_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function z_base_is_upd + + function z_base_is_asb(x) result(res) + implicit none + class(psb_z_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function z_base_is_asb + + subroutine z_base_set_ncfs(n,x) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine z_base_set_ncfs + + subroutine z_base_set_dupl(n,x) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine z_base_set_dupl + + subroutine z_base_set_state(n,x) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine z_base_set_state + + subroutine z_base_set_null(x) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine z_base_set_null + + subroutine z_base_set_bld(x) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine z_base_set_bld + + subroutine z_base_set_upd(x) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine z_base_set_upd + + subroutine z_base_set_asb(x) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + x%bldstate = psb_vect_asb_ + end subroutine z_base_set_asb ! ! The base version of SYNC & friends does nothing, it's just diff --git a/base/modules/serial/psb_z_vect_mod.F90 b/base/modules/serial/psb_z_vect_mod.F90 index 79606f3b2..8f593d0ef 100644 --- a/base/modules/serial/psb_z_vect_mod.F90 +++ b/base/modules/serial/psb_z_vect_mod.F90 @@ -56,14 +56,26 @@ module psb_z_vect_mod procedure, pass(x) :: get_fmt => z_vect_get_fmt procedure, pass(x) :: is_remote_build => z_vect_is_remote_build procedure, pass(x) :: set_remote_build => z_vect_set_remote_build - procedure, pass(x) :: get_dupl => z_vect_get_dupl - procedure, pass(x) :: set_dupl => z_vect_set_dupl procedure, pass(x) :: get_nrmv => z_vect_get_nrmv procedure, pass(x) :: set_nrmv => z_vect_set_nrmv procedure, pass(x) :: all => z_vect_all procedure, pass(x) :: reall => z_vect_reall procedure, pass(x) :: zero => z_vect_zero procedure, pass(x) :: asb => z_vect_asb + procedure, pass(x) :: set_dupl => z_vect_set_dupl + procedure, pass(x) :: get_dupl => z_vect_get_dupl + procedure, pass(x) :: set_state => z_vect_set_state + procedure, pass(x) :: set_null => z_vect_set_null + procedure, pass(x) :: set_bld => z_vect_set_bld + procedure, pass(x) :: set_upd => z_vect_set_upd + procedure, pass(x) :: set_asb => z_vect_set_asb + procedure, pass(x) :: get_state => z_vect_get_state + procedure, pass(x) :: is_null => z_vect_is_null + procedure, pass(x) :: is_bld => z_vect_is_bld + procedure, pass(x) :: is_upd => z_vect_is_upd + procedure, pass(x) :: is_asb => z_vect_is_asb + procedure, pass(x) :: reinit => z_vect_reinit + procedure, pass(x) :: gthab => z_vect_gthab procedure, pass(x) :: gthzv => z_vect_gthzv generic, public :: gth => gthab, gthzv @@ -187,7 +199,11 @@ contains implicit none class(psb_z_vect_type), intent(in) :: x integer(psb_ipk_) :: res - res = x%dupl + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if end function z_vect_get_dupl subroutine z_vect_set_dupl(x,val) @@ -195,13 +211,92 @@ contains class(psb_z_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in), optional :: val - if (present(val)) then - x%dupl = val - else - x%dupl = psb_dupl_def_ + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_dupl(val) + else + call x%v%set_dupl(psb_dupl_def_) + end if end if end subroutine z_vect_set_dupl + function z_vect_get_state(x) result(res) + implicit none + class(psb_z_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if + end function z_vect_get_state + + function z_vect_is_null(x) result(res) + implicit none + class(psb_z_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_null_) + end function z_vect_is_null + + function z_vect_is_bld(x) result(res) + implicit none + class(psb_z_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_bld_) + end function z_vect_is_bld + + function z_vect_is_upd(x) result(res) + implicit none + class(psb_z_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_upd_) + end function z_vect_is_upd + + function z_vect_is_asb(x) result(res) + implicit none + class(psb_z_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_asb_) + end function z_vect_is_asb + + subroutine z_vect_set_state(n,x) + implicit none + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + if (allocated(x%v)) then + call x%v%set_state(n) + end if + end subroutine z_vect_set_state + + + subroutine z_vect_set_null(x) + implicit none + class(psb_z_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_null_) + end subroutine z_vect_set_null + + subroutine z_vect_set_bld(x) + implicit none + class(psb_z_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_bld_) + end subroutine z_vect_set_bld + + subroutine z_vect_set_upd(x) + implicit none + class(psb_z_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_upd_) + end subroutine z_vect_set_upd + + subroutine z_vect_set_asb(x) + implicit none + class(psb_z_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_asb_) + end subroutine z_vect_set_asb + function z_vect_get_nrmv(x) result(res) implicit none class(psb_z_vect_type), intent(in) :: x @@ -291,12 +386,21 @@ contains end if end subroutine z_vect_clone - subroutine z_vect_bld_x(x,invect,mold) + subroutine z_vect_bld_x(x,invect,mold,scratch) complex(psb_dpk_), intent(in) :: invect(:) class(psb_z_vect_type), intent(inout) :: x class(psb_z_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + info = psb_success_ if (allocated(x%v)) & & call x%free(info) @@ -307,17 +411,25 @@ contains allocate(x%v,stat=info, mold=psb_z_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(invect) + if (info == psb_success_) call x%v%bld(invect,scratch=scratch_) end subroutine z_vect_bld_x - subroutine z_vect_bld_mn(x,n,mold) + subroutine z_vect_bld_mn(x,n,mold,scratch) integer(psb_mpk_), intent(in) :: n class(psb_z_vect_type), intent(inout) :: x class(psb_z_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info class(psb_z_base_vect_type), pointer :: mld + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if info = psb_success_ if (allocated(x%v)) & @@ -328,17 +440,25 @@ contains else allocate(x%v,stat=info, mold=psb_z_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine z_vect_bld_mn - subroutine z_vect_bld_en(x,n,mold) + subroutine z_vect_bld_en(x,n,mold,scratch) integer(psb_epk_), intent(in) :: n class(psb_z_vect_type), intent(inout) :: x class(psb_z_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info info = psb_success_ + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (allocated(x%v)) & & call x%free(info) @@ -348,7 +468,7 @@ contains else allocate(x%v,stat=info, mold=psb_z_get_base_vect_default()) endif - if (info == psb_success_) call x%v%bld(n) + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) end subroutine z_vect_bld_en @@ -450,8 +570,19 @@ contains else info = psb_err_alloc_dealloc_ end if + call x%set_bld() end subroutine z_vect_all + subroutine z_vect_reinit(x, info) + implicit none + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) call x%v%reinit(info) + call x%set_upd() + + end subroutine z_vect_reinit + subroutine z_vect_reall(n, x, info) implicit none @@ -476,16 +607,17 @@ contains end subroutine z_vect_zero - subroutine z_vect_asb(n, x, info) + subroutine z_vect_asb(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: n class(psb_z_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch if (allocated(x%v)) then - call x%v%asb(n,info) + call x%v%asb(n,info,scratch=scratch) end if end subroutine z_vect_asb @@ -540,11 +672,11 @@ contains end subroutine z_vect_free - subroutine z_vect_ins_a(n,irl,val,x,info) + subroutine z_vect_ins_a(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_z_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(out) :: info @@ -557,15 +689,15 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine z_vect_ins_a - subroutine z_vect_ins_v(n,irl,val,x,info) + subroutine z_vect_ins_v(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_z_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n, maxr class(psb_i_vect_type), intent(inout) :: irl class(psb_z_vect_type), intent(inout) :: val integer(psb_ipk_), intent(out) :: info @@ -578,7 +710,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl%v,val%v,dupl,info) + call x%v%ins(n,irl%v,val%v,dupl,maxr,info) end subroutine z_vect_ins_v diff --git a/base/modules/tools/psb_c_tools_mod.F90 b/base/modules/tools/psb_c_tools_mod.F90 index 97ee169fd..cb39593f3 100644 --- a/base/modules/tools/psb_c_tools_mod.F90 +++ b/base/modules/tools/psb_c_tools_mod.F90 @@ -70,7 +70,7 @@ Module psb_c_tools_mod interface psb_geasb - subroutine psb_casb_vect(x, desc_a, info,mold, scratch) + subroutine psb_casb_vect(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -78,6 +78,7 @@ Module psb_c_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_casb_vect subroutine psb_casb_vect_r2(x, desc_a, info,mold, scratch) import @@ -250,13 +251,14 @@ Module psb_c_tools_mod end interface interface psb_spasb - subroutine psb_cspasb(a,desc_a, info, afmt, upd, mold, bld_and) + subroutine psb_cspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) import implicit none type(psb_cspmat_type), intent (inout) :: a type(psb_desc_type), intent(inout) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_),optional, intent(in) :: upd + integer(psb_ipk_),optional, intent(in) :: dupl character(len=*), optional, intent(in) :: afmt class(psb_c_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and diff --git a/base/modules/tools/psb_d_tools_mod.F90 b/base/modules/tools/psb_d_tools_mod.F90 index 2d583317d..da3051640 100644 --- a/base/modules/tools/psb_d_tools_mod.F90 +++ b/base/modules/tools/psb_d_tools_mod.F90 @@ -257,11 +257,11 @@ Module psb_d_tools_mod type(psb_dspmat_type), intent (inout) :: a type(psb_desc_type), intent(inout) :: desc_a integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional, intent(in) :: upd + integer(psb_ipk_),optional, intent(in) :: upd + integer(psb_ipk_),optional, intent(in) :: dupl character(len=*), optional, intent(in) :: afmt class(psb_d_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and - integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_dspasb end interface diff --git a/base/modules/tools/psb_i_tools_mod.F90 b/base/modules/tools/psb_i_tools_mod.F90 index 1c207fac3..f0ccfb72c 100644 --- a/base/modules/tools/psb_i_tools_mod.F90 +++ b/base/modules/tools/psb_i_tools_mod.F90 @@ -69,7 +69,7 @@ Module psb_i_tools_mod interface psb_geasb - subroutine psb_iasb_vect(x, desc_a, info,mold, scratch) + subroutine psb_iasb_vect(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -77,6 +77,7 @@ Module psb_i_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_iasb_vect subroutine psb_iasb_vect_r2(x, desc_a, info,mold, scratch) import diff --git a/base/modules/tools/psb_l_tools_mod.F90 b/base/modules/tools/psb_l_tools_mod.F90 index 058403d6f..56cdddcb1 100644 --- a/base/modules/tools/psb_l_tools_mod.F90 +++ b/base/modules/tools/psb_l_tools_mod.F90 @@ -69,7 +69,7 @@ Module psb_l_tools_mod interface psb_geasb - subroutine psb_lasb_vect(x, desc_a, info,mold, scratch) + subroutine psb_lasb_vect(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -77,6 +77,7 @@ Module psb_l_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_lasb_vect subroutine psb_lasb_vect_r2(x, desc_a, info,mold, scratch) import diff --git a/base/modules/tools/psb_s_tools_mod.F90 b/base/modules/tools/psb_s_tools_mod.F90 index 18addeda9..f6e97208a 100644 --- a/base/modules/tools/psb_s_tools_mod.F90 +++ b/base/modules/tools/psb_s_tools_mod.F90 @@ -70,7 +70,7 @@ Module psb_s_tools_mod interface psb_geasb - subroutine psb_sasb_vect(x, desc_a, info,mold, scratch) + subroutine psb_sasb_vect(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -78,6 +78,7 @@ Module psb_s_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_sasb_vect subroutine psb_sasb_vect_r2(x, desc_a, info,mold, scratch) import @@ -250,13 +251,14 @@ Module psb_s_tools_mod end interface interface psb_spasb - subroutine psb_sspasb(a,desc_a, info, afmt, upd, mold, bld_and) + subroutine psb_sspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) import implicit none type(psb_sspmat_type), intent (inout) :: a type(psb_desc_type), intent(inout) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_),optional, intent(in) :: upd + integer(psb_ipk_),optional, intent(in) :: dupl character(len=*), optional, intent(in) :: afmt class(psb_s_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and diff --git a/base/modules/tools/psb_z_tools_mod.F90 b/base/modules/tools/psb_z_tools_mod.F90 index fd9d5e225..f0e42c75a 100644 --- a/base/modules/tools/psb_z_tools_mod.F90 +++ b/base/modules/tools/psb_z_tools_mod.F90 @@ -70,7 +70,7 @@ Module psb_z_tools_mod interface psb_geasb - subroutine psb_zasb_vect(x, desc_a, info,mold, scratch) + subroutine psb_zasb_vect(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -78,6 +78,7 @@ Module psb_z_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_zasb_vect subroutine psb_zasb_vect_r2(x, desc_a, info,mold, scratch) import @@ -250,13 +251,14 @@ Module psb_z_tools_mod end interface interface psb_spasb - subroutine psb_zspasb(a,desc_a, info, afmt, upd, mold, bld_and) + subroutine psb_zspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) import implicit none type(psb_zspmat_type), intent (inout) :: a type(psb_desc_type), intent(inout) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_),optional, intent(in) :: upd + integer(psb_ipk_),optional, intent(in) :: dupl character(len=*), optional, intent(in) :: afmt class(psb_z_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and diff --git a/base/tools/psb_callc.f90 b/base/tools/psb_callc.f90 index 82348a785..9c31332bf 100644 --- a/base/tools/psb_callc.f90 +++ b/base/tools/psb_callc.f90 @@ -109,12 +109,10 @@ subroutine psb_calloc_vect(x, desc_a,info, dupl, bldmode) else bldmode_ = psb_matbld_noremote_ end if + call x%set_bld() if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - call x%set_dupl(dupl_) + call x%set_dupl(dupl) + end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) if (x%is_remote_build()) then diff --git a/base/tools/psb_casb.f90 b/base/tools/psb_casb.f90 index 83e2715bf..ad6e69d38 100644 --- a/base/tools/psb_casb.f90 +++ b/base/tools/psb_casb.f90 @@ -51,7 +51,7 @@ ! scratch - logical, optional If true, allocate without checking/zeroing contents. ! default: .false. ! -subroutine psb_casb_vect(x, desc_a, info, mold, scratch) +subroutine psb_casb_vect(x, desc_a, info, mold, scratch, dupl) use psb_base_mod, psb_protect_name => psb_casb_vect implicit none @@ -60,6 +60,7 @@ subroutine psb_casb_vect(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt @@ -80,10 +81,9 @@ subroutine psb_casb_vect(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. + scratch_ = .false. if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) - dupl_ = x%get_dupl() ! ....verify blacs grid correctness.. if (np == -1) then info = psb_err_context_error_ @@ -100,39 +100,83 @@ subroutine psb_casb_vect(x, desc_a, info, mold, scratch) if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol - if (scratch_) then - call x%free(info) - call x%bld(ncol,mold=mold) + dupl_ = x%get_dupl() + if (try_newins) then + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold,scratch=scratch_) + else + if (x%is_bld().and.present(dupl)) then + call x%set_dupl(dupl) + dupl_ = dupl + end if + + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + complex(psb_spk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) + end if + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' else - if (x%is_remote_build()) then - block - integer(psb_lpk_), allocatable :: lvx(:) - complex(psb_spk_), allocatable :: vx(:) - integer(psb_ipk_), allocatable :: ivx(:) - integer(psb_ipk_) :: nrmv, nx, i - - nrmv = x%get_nrmv() - call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) - nx = size(vx) - call psb_realloc(nx,ivx,info) - call desc_a%g2l(lvx,ivx,info,owned=.true.) - call x%ins(nx,ivx,vx,info) - end block - end if - - call x%asb(ncol,info) - ! ..update halo elements.. - call psb_halo(x,desc_a,info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold) + else + if (x%is_bld().and.present(dupl)) then + dupl_ = dupl + end if + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + complex(psb_spk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) end if - call x%cnv(mold) + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' end if - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': end' call psb_erractionrestore(err_act) return @@ -202,7 +246,7 @@ subroutine psb_casb_vect_r2(x, desc_a, info, mold, scratch) else do i=1, n dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info) + call x(i)%asb(ncol,info,scratch=scratch) if (info /= 0) exit ! ..update halo elements.. call psb_halo(x(i),desc_a,info) diff --git a/base/tools/psb_cins.f90 b/base/tools/psb_cins.f90 index 180520a38..ee0391a19 100644 --- a/base/tools/psb_cins.f90 +++ b/base/tools/psb_cins.f90 @@ -57,7 +57,7 @@ subroutine psb_cins_vect(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols + integer(psb_ipk_) :: i, loc_rows, loc_cols integer(psb_lpk_) :: mglob integer(psb_ipk_) :: dupl_ type(psb_ctxt_type) :: ctxt @@ -127,7 +127,7 @@ subroutine psb_cins_vect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -198,7 +198,7 @@ subroutine psb_cins_vect_v(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols,err_act + integer(psb_ipk_) :: i, loc_rows, loc_cols, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me @@ -261,7 +261,7 @@ subroutine psb_cins_vect_v(m, irw, val, x, desc_a, info, local) call desc_a%indxmap%g2l(irw%v%v(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,lval,info) + call x%ins(m,irl,lval,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -368,7 +368,7 @@ subroutine psb_cins_vect_r2(m, irw, val, x, desc_a, info, local) do i=1,n if (.not.allocated(x(i)%v)) info = psb_err_invalid_vect_state_ - if (info == 0) call x(i)%ins(m,irl,val(:,i),info) + if (info == 0) call x(i)%ins(m,irl,val(:,i),loc_rows,info) if (info /= 0) exit end do if (info /= 0) then diff --git a/base/tools/psb_cspasb.f90 b/base/tools/psb_cspasb.f90 index db8af75a7..1ada38e96 100644 --- a/base/tools/psb_cspasb.f90 +++ b/base/tools/psb_cspasb.f90 @@ -44,7 +44,7 @@ ! psb_upd_perm_ Permutation(more memory) ! ! -subroutine psb_cspasb(a,desc_a, info, afmt, upd, mold, bld_and) +subroutine psb_cspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) use psb_base_mod, psb_protect_name => psb_cspasb use psb_sort_mod use psi_mod @@ -59,6 +59,7 @@ subroutine psb_cspasb(a,desc_a, info, afmt, upd, mold, bld_and) character(len=*), optional, intent(in) :: afmt class(psb_c_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and + integer(psb_ipk_), optional, intent(in) :: dupl !....Locals.... type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, err_act @@ -103,7 +104,12 @@ subroutine psb_cspasb(a,desc_a, info, afmt, upd, mold, bld_and) !check on errors encountered in psdspins if (a%is_bld()) then - dupl_ = a%get_dupl() + if (present(dupl)) then + dupl_ = dupl + else + dupl_ = a%get_dupl() + end if + ! ! First case: we come from a fresh build. ! @@ -180,7 +186,7 @@ subroutine psb_cspasb(a,desc_a, info, afmt, upd, mold, bld_and) if (bld_and_) then !!$ allocate(a%ad,mold=a%a) !!$ allocate(a%and,mold=a%a)o - call a%split_nd(n_row,n_col,info) +!!$ call a%split_nd(n_row,n_col,info) !!$ block !!$ character(len=1024) :: fname !!$ type(psb_c_coo_sparse_mat) :: acoo diff --git a/base/tools/psb_dallc.f90 b/base/tools/psb_dallc.f90 index 45116e074..52c0ae903 100644 --- a/base/tools/psb_dallc.f90 +++ b/base/tools/psb_dallc.f90 @@ -109,13 +109,10 @@ subroutine psb_dalloc_vect(x, desc_a,info, dupl, bldmode) else bldmode_ = psb_matbld_noremote_ end if - if (present(dupl)) then - dupl_ = dupl -!!$ else -!!$ dupl_ = psb_dupl_def_ - end if -!!$ call x%set_dupl(dupl_) call x%set_bld() + if (present(dupl)) then + call x%set_dupl(dupl) + end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) if (x%is_remote_build()) then diff --git a/base/tools/psb_dasb.f90 b/base/tools/psb_dasb.f90 index ead3d1d02..eb15dc1ad 100644 --- a/base/tools/psb_dasb.f90 +++ b/base/tools/psb_dasb.f90 @@ -51,7 +51,7 @@ ! scratch - logical, optional If true, allocate without checking/zeroing contents. ! default: .false. ! -subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) +subroutine psb_dasb_vect(x, desc_a, info, mold, scratch, dupl) use psb_base_mod, psb_protect_name => psb_dasb_vect implicit none @@ -69,7 +69,6 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) logical :: scratch_ integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name,ch_err - !logical, parameter :: try_newins = .true. info = psb_success_ name = 'psb_dgeasb_v' @@ -82,7 +81,7 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. + scratch_ = .false. if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) ! ....verify blacs grid correctness.. @@ -95,32 +94,30 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) call psb_errpush(info,name) goto 9999 end if - + nrow = desc_a%get_local_rows() ncol = desc_a%get_local_cols() if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol - if (try_newins) then -!!$ if (present(dupl)) then -!!$ call x%set_dupl(dupl) -!!$ end if - dupl_ = x%get_dupl() + dupl_ = x%get_dupl() + if (try_newins) then if (scratch_) then call x%free(info) - call x%bld(ncol,mold=mold) + call x%bld(ncol,mold=mold,scratch=scratch_) else if (x%is_bld().and.present(dupl)) then - call x%set_dupl(dupl) + call x%set_dupl(dupl) dupl_ = dupl end if + if (x%is_remote_build()) then block integer(psb_lpk_), allocatable :: lvx(:) real(psb_dpk_), allocatable :: vx(:) integer(psb_ipk_), allocatable :: ivx(:) integer(psb_ipk_) :: nrmv, nx, i - + nrmv = x%get_nrmv() call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) nx = size(vx) @@ -129,8 +126,8 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) call x%ins(nx,ivx,vx,nrow,info) end block end if - - call x%asb(ncol,info) + + call x%asb(ncol,info,scratch=scratch) ! ..update halo elements.. call psb_halo(x,desc_a,info) if(info /= psb_success_) then @@ -143,14 +140,12 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': end' else - dupl_ = x%get_dupl() - + if (scratch_) then call x%free(info) call x%bld(ncol,mold=mold) else if (x%is_bld().and.present(dupl)) then -!!$ call x%set_dupl(dupl) dupl_ = dupl end if if (x%is_remote_build()) then @@ -169,7 +164,7 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) end block end if - call x%asb(ncol,info) + call x%asb(ncol,info,scratch=scratch) ! ..update halo elements.. call psb_halo(x,desc_a,info) if(info /= psb_success_) then @@ -182,6 +177,7 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch,dupl) if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': end' end if + call psb_erractionrestore(err_act) return @@ -250,7 +246,7 @@ subroutine psb_dasb_vect_r2(x, desc_a, info, mold, scratch) else do i=1, n dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info) + call x(i)%asb(ncol,info,scratch=scratch) if (info /= 0) exit ! ..update halo elements.. call psb_halo(x(i),desc_a,info) diff --git a/base/tools/psb_dins.f90 b/base/tools/psb_dins.f90 index 009699aab..daac97676 100644 --- a/base/tools/psb_dins.f90 +++ b/base/tools/psb_dins.f90 @@ -57,7 +57,7 @@ subroutine psb_dins_vect(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols + integer(psb_ipk_) :: i, loc_rows, loc_cols integer(psb_lpk_) :: mglob integer(psb_ipk_) :: dupl_ type(psb_ctxt_type) :: ctxt @@ -198,7 +198,7 @@ subroutine psb_dins_vect_v(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols,err_act + integer(psb_ipk_) :: i, loc_rows, loc_cols, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me diff --git a/base/tools/psb_dspins.F90 b/base/tools/psb_dspins.F90 index d2a8e7793..a9cbbe4b6 100644 --- a/base/tools/psb_dspins.F90 +++ b/base/tools/psb_dspins.F90 @@ -138,11 +138,7 @@ subroutine psb_dspins(nz,ia,ja,val,a,desc_a,info,rebuild,local) if (desc_a%is_bld()) then - if (.not.a%is_bld()) then - info = psb_err_invalid_a_and_cd_state_ - call psb_errpush(info,name) - goto 9999 - end if + if (local_) then info = psb_err_invalid_a_and_cd_state_ call psb_errpush(info,name) diff --git a/base/tools/psb_iallc.f90 b/base/tools/psb_iallc.f90 index 21d4d8a56..d708e3241 100644 --- a/base/tools/psb_iallc.f90 +++ b/base/tools/psb_iallc.f90 @@ -109,12 +109,10 @@ subroutine psb_ialloc_vect(x, desc_a,info, dupl, bldmode) else bldmode_ = psb_matbld_noremote_ end if + call x%set_bld() if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - call x%set_dupl(dupl_) + call x%set_dupl(dupl) + end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) if (x%is_remote_build()) then diff --git a/base/tools/psb_iasb.f90 b/base/tools/psb_iasb.f90 index f5e5669f1..ec8536b9c 100644 --- a/base/tools/psb_iasb.f90 +++ b/base/tools/psb_iasb.f90 @@ -51,7 +51,7 @@ ! scratch - logical, optional If true, allocate without checking/zeroing contents. ! default: .false. ! -subroutine psb_iasb_vect(x, desc_a, info, mold, scratch) +subroutine psb_iasb_vect(x, desc_a, info, mold, scratch, dupl) use psb_base_mod, psb_protect_name => psb_iasb_vect implicit none @@ -60,6 +60,7 @@ subroutine psb_iasb_vect(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt @@ -80,10 +81,9 @@ subroutine psb_iasb_vect(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. + scratch_ = .false. if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) - dupl_ = x%get_dupl() ! ....verify blacs grid correctness.. if (np == -1) then info = psb_err_context_error_ @@ -100,39 +100,83 @@ subroutine psb_iasb_vect(x, desc_a, info, mold, scratch) if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol - if (scratch_) then - call x%free(info) - call x%bld(ncol,mold=mold) + dupl_ = x%get_dupl() + if (try_newins) then + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold,scratch=scratch_) + else + if (x%is_bld().and.present(dupl)) then + call x%set_dupl(dupl) + dupl_ = dupl + end if + + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + integer(psb_ipk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) + end if + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' else - if (x%is_remote_build()) then - block - integer(psb_lpk_), allocatable :: lvx(:) - integer(psb_ipk_), allocatable :: vx(:) - integer(psb_ipk_), allocatable :: ivx(:) - integer(psb_ipk_) :: nrmv, nx, i - - nrmv = x%get_nrmv() - call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) - nx = size(vx) - call psb_realloc(nx,ivx,info) - call desc_a%g2l(lvx,ivx,info,owned=.true.) - call x%ins(nx,ivx,vx,info) - end block - end if - - call x%asb(ncol,info) - ! ..update halo elements.. - call psb_halo(x,desc_a,info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold) + else + if (x%is_bld().and.present(dupl)) then + dupl_ = dupl + end if + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + integer(psb_ipk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) end if - call x%cnv(mold) + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' end if - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': end' call psb_erractionrestore(err_act) return @@ -202,7 +246,7 @@ subroutine psb_iasb_vect_r2(x, desc_a, info, mold, scratch) else do i=1, n dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info) + call x(i)%asb(ncol,info,scratch=scratch) if (info /= 0) exit ! ..update halo elements.. call psb_halo(x(i),desc_a,info) diff --git a/base/tools/psb_iins.f90 b/base/tools/psb_iins.f90 index 4fa534297..598af33ff 100644 --- a/base/tools/psb_iins.f90 +++ b/base/tools/psb_iins.f90 @@ -57,7 +57,7 @@ subroutine psb_iins_vect(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols + integer(psb_ipk_) :: i, loc_rows, loc_cols integer(psb_lpk_) :: mglob integer(psb_ipk_) :: dupl_ type(psb_ctxt_type) :: ctxt @@ -127,7 +127,7 @@ subroutine psb_iins_vect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -198,7 +198,7 @@ subroutine psb_iins_vect_v(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols,err_act + integer(psb_ipk_) :: i, loc_rows, loc_cols, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me @@ -261,7 +261,7 @@ subroutine psb_iins_vect_v(m, irw, val, x, desc_a, info, local) call desc_a%indxmap%g2l(irw%v%v(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,lval,info) + call x%ins(m,irl,lval,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -368,7 +368,7 @@ subroutine psb_iins_vect_r2(m, irw, val, x, desc_a, info, local) do i=1,n if (.not.allocated(x(i)%v)) info = psb_err_invalid_vect_state_ - if (info == 0) call x(i)%ins(m,irl,val(:,i),info) + if (info == 0) call x(i)%ins(m,irl,val(:,i),loc_rows,info) if (info /= 0) exit end do if (info /= 0) then diff --git a/base/tools/psb_lallc.f90 b/base/tools/psb_lallc.f90 index a781e55a2..e89b4b15e 100644 --- a/base/tools/psb_lallc.f90 +++ b/base/tools/psb_lallc.f90 @@ -109,12 +109,10 @@ subroutine psb_lalloc_vect(x, desc_a,info, dupl, bldmode) else bldmode_ = psb_matbld_noremote_ end if + call x%set_bld() if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - call x%set_dupl(dupl_) + call x%set_dupl(dupl) + end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) if (x%is_remote_build()) then diff --git a/base/tools/psb_lasb.f90 b/base/tools/psb_lasb.f90 index baf553209..61e3de946 100644 --- a/base/tools/psb_lasb.f90 +++ b/base/tools/psb_lasb.f90 @@ -51,7 +51,7 @@ ! scratch - logical, optional If true, allocate without checking/zeroing contents. ! default: .false. ! -subroutine psb_lasb_vect(x, desc_a, info, mold, scratch) +subroutine psb_lasb_vect(x, desc_a, info, mold, scratch, dupl) use psb_base_mod, psb_protect_name => psb_lasb_vect implicit none @@ -60,6 +60,7 @@ subroutine psb_lasb_vect(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt @@ -80,10 +81,9 @@ subroutine psb_lasb_vect(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. + scratch_ = .false. if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) - dupl_ = x%get_dupl() ! ....verify blacs grid correctness.. if (np == -1) then info = psb_err_context_error_ @@ -100,39 +100,83 @@ subroutine psb_lasb_vect(x, desc_a, info, mold, scratch) if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol - if (scratch_) then - call x%free(info) - call x%bld(ncol,mold=mold) + dupl_ = x%get_dupl() + if (try_newins) then + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold,scratch=scratch_) + else + if (x%is_bld().and.present(dupl)) then + call x%set_dupl(dupl) + dupl_ = dupl + end if + + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + integer(psb_lpk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) + end if + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' else - if (x%is_remote_build()) then - block - integer(psb_lpk_), allocatable :: lvx(:) - integer(psb_lpk_), allocatable :: vx(:) - integer(psb_ipk_), allocatable :: ivx(:) - integer(psb_ipk_) :: nrmv, nx, i - - nrmv = x%get_nrmv() - call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) - nx = size(vx) - call psb_realloc(nx,ivx,info) - call desc_a%g2l(lvx,ivx,info,owned=.true.) - call x%ins(nx,ivx,vx,info) - end block - end if - - call x%asb(ncol,info) - ! ..update halo elements.. - call psb_halo(x,desc_a,info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold) + else + if (x%is_bld().and.present(dupl)) then + dupl_ = dupl + end if + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + integer(psb_lpk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) end if - call x%cnv(mold) + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' end if - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': end' call psb_erractionrestore(err_act) return @@ -202,7 +246,7 @@ subroutine psb_lasb_vect_r2(x, desc_a, info, mold, scratch) else do i=1, n dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info) + call x(i)%asb(ncol,info,scratch=scratch) if (info /= 0) exit ! ..update halo elements.. call psb_halo(x(i),desc_a,info) diff --git a/base/tools/psb_lins.f90 b/base/tools/psb_lins.f90 index 90da8111d..dc41d022c 100644 --- a/base/tools/psb_lins.f90 +++ b/base/tools/psb_lins.f90 @@ -57,7 +57,7 @@ subroutine psb_lins_vect(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols + integer(psb_ipk_) :: i, loc_rows, loc_cols integer(psb_lpk_) :: mglob integer(psb_ipk_) :: dupl_ type(psb_ctxt_type) :: ctxt @@ -127,7 +127,7 @@ subroutine psb_lins_vect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -198,7 +198,7 @@ subroutine psb_lins_vect_v(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols,err_act + integer(psb_ipk_) :: i, loc_rows, loc_cols, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me @@ -261,7 +261,7 @@ subroutine psb_lins_vect_v(m, irw, val, x, desc_a, info, local) call desc_a%indxmap%g2l(irw%v%v(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,lval,info) + call x%ins(m,irl,lval,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -368,7 +368,7 @@ subroutine psb_lins_vect_r2(m, irw, val, x, desc_a, info, local) do i=1,n if (.not.allocated(x(i)%v)) info = psb_err_invalid_vect_state_ - if (info == 0) call x(i)%ins(m,irl,val(:,i),info) + if (info == 0) call x(i)%ins(m,irl,val(:,i),loc_rows,info) if (info /= 0) exit end do if (info /= 0) then diff --git a/base/tools/psb_sallc.f90 b/base/tools/psb_sallc.f90 index d318e45f2..143e032bb 100644 --- a/base/tools/psb_sallc.f90 +++ b/base/tools/psb_sallc.f90 @@ -109,12 +109,10 @@ subroutine psb_salloc_vect(x, desc_a,info, dupl, bldmode) else bldmode_ = psb_matbld_noremote_ end if + call x%set_bld() if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - call x%set_dupl(dupl_) + call x%set_dupl(dupl) + end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) if (x%is_remote_build()) then diff --git a/base/tools/psb_sasb.f90 b/base/tools/psb_sasb.f90 index 315e24ff0..0fe6f5451 100644 --- a/base/tools/psb_sasb.f90 +++ b/base/tools/psb_sasb.f90 @@ -51,7 +51,7 @@ ! scratch - logical, optional If true, allocate without checking/zeroing contents. ! default: .false. ! -subroutine psb_sasb_vect(x, desc_a, info, mold, scratch) +subroutine psb_sasb_vect(x, desc_a, info, mold, scratch, dupl) use psb_base_mod, psb_protect_name => psb_sasb_vect implicit none @@ -60,6 +60,7 @@ subroutine psb_sasb_vect(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt @@ -80,10 +81,9 @@ subroutine psb_sasb_vect(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. + scratch_ = .false. if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) - dupl_ = x%get_dupl() ! ....verify blacs grid correctness.. if (np == -1) then info = psb_err_context_error_ @@ -100,39 +100,83 @@ subroutine psb_sasb_vect(x, desc_a, info, mold, scratch) if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol - if (scratch_) then - call x%free(info) - call x%bld(ncol,mold=mold) + dupl_ = x%get_dupl() + if (try_newins) then + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold,scratch=scratch_) + else + if (x%is_bld().and.present(dupl)) then + call x%set_dupl(dupl) + dupl_ = dupl + end if + + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + real(psb_spk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) + end if + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' else - if (x%is_remote_build()) then - block - integer(psb_lpk_), allocatable :: lvx(:) - real(psb_spk_), allocatable :: vx(:) - integer(psb_ipk_), allocatable :: ivx(:) - integer(psb_ipk_) :: nrmv, nx, i - - nrmv = x%get_nrmv() - call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) - nx = size(vx) - call psb_realloc(nx,ivx,info) - call desc_a%g2l(lvx,ivx,info,owned=.true.) - call x%ins(nx,ivx,vx,info) - end block - end if - - call x%asb(ncol,info) - ! ..update halo elements.. - call psb_halo(x,desc_a,info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold) + else + if (x%is_bld().and.present(dupl)) then + dupl_ = dupl + end if + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + real(psb_spk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) end if - call x%cnv(mold) + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' end if - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': end' call psb_erractionrestore(err_act) return @@ -202,7 +246,7 @@ subroutine psb_sasb_vect_r2(x, desc_a, info, mold, scratch) else do i=1, n dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info) + call x(i)%asb(ncol,info,scratch=scratch) if (info /= 0) exit ! ..update halo elements.. call psb_halo(x(i),desc_a,info) diff --git a/base/tools/psb_sins.f90 b/base/tools/psb_sins.f90 index ddead81ff..25c7248a6 100644 --- a/base/tools/psb_sins.f90 +++ b/base/tools/psb_sins.f90 @@ -57,7 +57,7 @@ subroutine psb_sins_vect(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols + integer(psb_ipk_) :: i, loc_rows, loc_cols integer(psb_lpk_) :: mglob integer(psb_ipk_) :: dupl_ type(psb_ctxt_type) :: ctxt @@ -127,7 +127,7 @@ subroutine psb_sins_vect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -198,7 +198,7 @@ subroutine psb_sins_vect_v(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols,err_act + integer(psb_ipk_) :: i, loc_rows, loc_cols, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me @@ -261,7 +261,7 @@ subroutine psb_sins_vect_v(m, irw, val, x, desc_a, info, local) call desc_a%indxmap%g2l(irw%v%v(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,lval,info) + call x%ins(m,irl,lval,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -368,7 +368,7 @@ subroutine psb_sins_vect_r2(m, irw, val, x, desc_a, info, local) do i=1,n if (.not.allocated(x(i)%v)) info = psb_err_invalid_vect_state_ - if (info == 0) call x(i)%ins(m,irl,val(:,i),info) + if (info == 0) call x(i)%ins(m,irl,val(:,i),loc_rows,info) if (info /= 0) exit end do if (info /= 0) then diff --git a/base/tools/psb_sspasb.f90 b/base/tools/psb_sspasb.f90 index 110097c53..60d1c25f8 100644 --- a/base/tools/psb_sspasb.f90 +++ b/base/tools/psb_sspasb.f90 @@ -44,7 +44,7 @@ ! psb_upd_perm_ Permutation(more memory) ! ! -subroutine psb_sspasb(a,desc_a, info, afmt, upd, mold, bld_and) +subroutine psb_sspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) use psb_base_mod, psb_protect_name => psb_sspasb use psb_sort_mod use psi_mod @@ -59,6 +59,7 @@ subroutine psb_sspasb(a,desc_a, info, afmt, upd, mold, bld_and) character(len=*), optional, intent(in) :: afmt class(psb_s_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and + integer(psb_ipk_), optional, intent(in) :: dupl !....Locals.... type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, err_act @@ -103,7 +104,12 @@ subroutine psb_sspasb(a,desc_a, info, afmt, upd, mold, bld_and) !check on errors encountered in psdspins if (a%is_bld()) then - dupl_ = a%get_dupl() + if (present(dupl)) then + dupl_ = dupl + else + dupl_ = a%get_dupl() + end if + ! ! First case: we come from a fresh build. ! @@ -180,7 +186,7 @@ subroutine psb_sspasb(a,desc_a, info, afmt, upd, mold, bld_and) if (bld_and_) then !!$ allocate(a%ad,mold=a%a) !!$ allocate(a%and,mold=a%a)o - call a%split_nd(n_row,n_col,info) +!!$ call a%split_nd(n_row,n_col,info) !!$ block !!$ character(len=1024) :: fname !!$ type(psb_s_coo_sparse_mat) :: acoo diff --git a/base/tools/psb_zallc.f90 b/base/tools/psb_zallc.f90 index b43e57cac..fa7518fa7 100644 --- a/base/tools/psb_zallc.f90 +++ b/base/tools/psb_zallc.f90 @@ -109,12 +109,10 @@ subroutine psb_zalloc_vect(x, desc_a,info, dupl, bldmode) else bldmode_ = psb_matbld_noremote_ end if + call x%set_bld() if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - call x%set_dupl(dupl_) + call x%set_dupl(dupl) + end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) if (x%is_remote_build()) then diff --git a/base/tools/psb_zasb.f90 b/base/tools/psb_zasb.f90 index decbfdec3..e21eaf7fe 100644 --- a/base/tools/psb_zasb.f90 +++ b/base/tools/psb_zasb.f90 @@ -51,7 +51,7 @@ ! scratch - logical, optional If true, allocate without checking/zeroing contents. ! default: .false. ! -subroutine psb_zasb_vect(x, desc_a, info, mold, scratch) +subroutine psb_zasb_vect(x, desc_a, info, mold, scratch, dupl) use psb_base_mod, psb_protect_name => psb_zasb_vect implicit none @@ -60,6 +60,7 @@ subroutine psb_zasb_vect(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt @@ -80,10 +81,9 @@ subroutine psb_zasb_vect(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. + scratch_ = .false. if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) - dupl_ = x%get_dupl() ! ....verify blacs grid correctness.. if (np == -1) then info = psb_err_context_error_ @@ -100,39 +100,83 @@ subroutine psb_zasb_vect(x, desc_a, info, mold, scratch) if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol - if (scratch_) then - call x%free(info) - call x%bld(ncol,mold=mold) + dupl_ = x%get_dupl() + if (try_newins) then + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold,scratch=scratch_) + else + if (x%is_bld().and.present(dupl)) then + call x%set_dupl(dupl) + dupl_ = dupl + end if + + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + complex(psb_dpk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) + end if + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' else - if (x%is_remote_build()) then - block - integer(psb_lpk_), allocatable :: lvx(:) - complex(psb_dpk_), allocatable :: vx(:) - integer(psb_ipk_), allocatable :: ivx(:) - integer(psb_ipk_) :: nrmv, nx, i - - nrmv = x%get_nrmv() - call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) - nx = size(vx) - call psb_realloc(nx,ivx,info) - call desc_a%g2l(lvx,ivx,info,owned=.true.) - call x%ins(nx,ivx,vx,info) - end block - end if - - call x%asb(ncol,info) - ! ..update halo elements.. - call psb_halo(x,desc_a,info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 + if (scratch_) then + call x%free(info) + call x%bld(ncol,mold=mold) + else + if (x%is_bld().and.present(dupl)) then + dupl_ = dupl + end if + if (x%is_remote_build()) then + block + integer(psb_lpk_), allocatable :: lvx(:) + complex(psb_dpk_), allocatable :: vx(:) + integer(psb_ipk_), allocatable :: ivx(:) + integer(psb_ipk_) :: nrmv, nx, i + + nrmv = x%get_nrmv() + call psb_remote_vect(nrmv,x%rmtv,x%rmidx,desc_a,vx,lvx,info) + nx = size(vx) + call psb_realloc(nx,ivx,info) + call desc_a%g2l(lvx,ivx,info,owned=.true.) + call x%ins(nx,ivx,vx,nrow,info) + end block + end if + + call x%asb(ncol,info,scratch=scratch) + ! ..update halo elements.. + call psb_halo(x,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='psb_halo') + goto 9999 + end if + call x%cnv(mold) end if - call x%cnv(mold) + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': end' end if - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': end' call psb_erractionrestore(err_act) return @@ -202,7 +246,7 @@ subroutine psb_zasb_vect_r2(x, desc_a, info, mold, scratch) else do i=1, n dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info) + call x(i)%asb(ncol,info,scratch=scratch) if (info /= 0) exit ! ..update halo elements.. call psb_halo(x(i),desc_a,info) diff --git a/base/tools/psb_zins.f90 b/base/tools/psb_zins.f90 index 43e5d5cd2..1c16eb961 100644 --- a/base/tools/psb_zins.f90 +++ b/base/tools/psb_zins.f90 @@ -57,7 +57,7 @@ subroutine psb_zins_vect(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols + integer(psb_ipk_) :: i, loc_rows, loc_cols integer(psb_lpk_) :: mglob integer(psb_ipk_) :: dupl_ type(psb_ctxt_type) :: ctxt @@ -127,7 +127,7 @@ subroutine psb_zins_vect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -198,7 +198,7 @@ subroutine psb_zins_vect_v(m, irw, val, x, desc_a, info, local) logical, intent(in), optional :: local !locals..... - integer(psb_ipk_) :: i, loc_rows,loc_cols,err_act + integer(psb_ipk_) :: i, loc_rows, loc_cols, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me @@ -261,7 +261,7 @@ subroutine psb_zins_vect_v(m, irw, val, x, desc_a, info, local) call desc_a%indxmap%g2l(irw%v%v(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,lval,info) + call x%ins(m,irl,lval,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 @@ -368,7 +368,7 @@ subroutine psb_zins_vect_r2(m, irw, val, x, desc_a, info, local) do i=1,n if (.not.allocated(x(i)%v)) info = psb_err_invalid_vect_state_ - if (info == 0) call x(i)%ins(m,irl,val(:,i),info) + if (info == 0) call x(i)%ins(m,irl,val(:,i),loc_rows,info) if (info /= 0) exit end do if (info /= 0) then diff --git a/base/tools/psb_zspasb.f90 b/base/tools/psb_zspasb.f90 index 2cb53368a..deba9edc2 100644 --- a/base/tools/psb_zspasb.f90 +++ b/base/tools/psb_zspasb.f90 @@ -44,7 +44,7 @@ ! psb_upd_perm_ Permutation(more memory) ! ! -subroutine psb_zspasb(a,desc_a, info, afmt, upd, mold, bld_and) +subroutine psb_zspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) use psb_base_mod, psb_protect_name => psb_zspasb use psb_sort_mod use psi_mod @@ -59,6 +59,7 @@ subroutine psb_zspasb(a,desc_a, info, afmt, upd, mold, bld_and) character(len=*), optional, intent(in) :: afmt class(psb_z_base_sparse_mat), intent(in), optional :: mold logical, intent(in), optional :: bld_and + integer(psb_ipk_), optional, intent(in) :: dupl !....Locals.... type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, err_act @@ -103,7 +104,12 @@ subroutine psb_zspasb(a,desc_a, info, afmt, upd, mold, bld_and) !check on errors encountered in psdspins if (a%is_bld()) then - dupl_ = a%get_dupl() + if (present(dupl)) then + dupl_ = dupl + else + dupl_ = a%get_dupl() + end if + ! ! First case: we come from a fresh build. ! @@ -180,7 +186,7 @@ subroutine psb_zspasb(a,desc_a, info, afmt, upd, mold, bld_and) if (bld_and_) then !!$ allocate(a%ad,mold=a%a) !!$ allocate(a%and,mold=a%a)o - call a%split_nd(n_row,n_col,info) +!!$ call a%split_nd(n_row,n_col,info) !!$ block !!$ character(len=1024) :: fname !!$ type(psb_z_coo_sparse_mat) :: acoo diff --git a/cuda/psb_c_cuda_vect_mod.F90 b/cuda/psb_c_cuda_vect_mod.F90 index 95f6d6025..96c8ec1ff 100644 --- a/cuda/psb_c_cuda_vect_mod.F90 +++ b/cuda/psb_c_cuda_vect_mod.F90 @@ -560,12 +560,20 @@ contains end subroutine c_cuda_sctb_buf - subroutine c_cuda_bld_x(x,this) + subroutine c_cuda_bld_x(x,this,scratch) use psb_base_mod complex(psb_spk_), intent(in) :: this(:) class(psb_c_vect_cuda), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(size(this),x%v,info) if (info /= 0) then info=psb_err_alloc_request_ @@ -578,11 +586,19 @@ contains end subroutine c_cuda_bld_x - subroutine c_cuda_bld_mn(x,n) + subroutine c_cuda_bld_mn(x,n,scratch) integer(psb_mpk_), intent(in) :: n class(psb_c_vect_cuda), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_ipk_) :: info + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call x%all(n,info) if (info /= 0) then call psb_errpush(info,'c_cuda_bld_n',i_err=(/n,n,n,n,n/)) @@ -679,26 +695,34 @@ contains call x%set_scal(czero) end subroutine c_cuda_zero - subroutine c_cuda_asb_m(n, x, info) + subroutine c_cuda_asb_m(n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_mpk_), intent(in) :: n class(psb_c_vect_cuda), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ integer(psb_mpk_) :: nd - + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if if (x%is_dev()) then nd = getMultiVecDeviceSize(x%deviceVect) if (nd < n) then call x%sync() - call x%psb_c_base_vect_type%asb(n,info) + call x%psb_c_base_vect_type%asb(n,info,scratch=scratch_) if (info == psb_success_) call x%sync_space(info) call x%set_host() end if else ! if (x%get_nrows() Date: Tue, 11 Nov 2025 17:07:42 +0100 Subject: [PATCH 039/175] Exposed bldmode and remote assembly --- cbind/base/psb_c_tools_cbind_mod.F90 | 32 ++++++++ cbind/base/psb_d_tools_cbind_mod.F90 | 32 ++++++++ cbind/base/psb_s_tools_cbind_mod.F90 | 32 ++++++++ cbind/base/psb_z_tools_cbind_mod.F90 | 32 ++++++++ cbind/psb_c_cbase.h | 104 ++++++++++++++++++++++++++ cbind/psb_c_dbase.h | 108 +++++++++++++++++++++++++++ cbind/psb_c_sbase.h | 105 ++++++++++++++++++++++++++ cbind/psb_c_zbase.h | 105 ++++++++++++++++++++++++++ 8 files changed, 550 insertions(+) create mode 100644 cbind/psb_c_cbase.h create mode 100644 cbind/psb_c_dbase.h create mode 100644 cbind/psb_c_sbase.h create mode 100644 cbind/psb_c_zbase.h diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index b7895de2a..644d2e1e4 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -67,6 +67,38 @@ contains return end function psb_c_cgeall_remote + function psb_c_cgeall_remote_options(xh,cdh,bldmode,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + integer(psb_c_ipk_), value :: bldmode + + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info,bldmode=bldmode,dupl=dupl) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_cgeall_remote + function psb_c_cgeasb(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 2de6990c2..c22198ef9 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -67,6 +67,38 @@ contains return end function psb_c_dgeall_remote + function psb_c_dgeall_remote_options(xh,cdh,bldmode,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + integer(psb_c_ipk_), value :: bldmode + + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info,bldmode=bldmode,dupl=dupl) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_dgeall_remote + function psb_c_dgeasb(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 517ad361b..7870d20c3 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -67,6 +67,38 @@ contains return end function psb_c_sgeall_remote + function psb_c_sgeall_remote_options(xh,cdh,bldmode,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + integer(psb_c_ipk_), value :: bldmode + + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info,bldmode=bldmode,dupl=dupl) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_sgeall_remote + function psb_c_sgeasb(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 3e94b715a..534a88695 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -67,6 +67,38 @@ contains return end function psb_c_zgeall_remote + function psb_c_zgeall_remote_options(xh,cdh,bldmode,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + integer(psb_c_ipk_), value :: bldmode + + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info,bldmode=bldmode,dupl=dupl) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_zgeall_remote + function psb_c_zgeasb(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/psb_c_cbase.h b/cbind/psb_c_cbase.h new file mode 100644 index 000000000..90b5ad099 --- /dev/null +++ b/cbind/psb_c_cbase.h @@ -0,0 +1,104 @@ +#ifndef PSB_C_CBASE_ +#define PSB_C_CBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_CVECTOR { + void *cvector; +} psb_c_cvector; + +typedef struct PSB_C_CSPMAT { + void *cspmat; +} psb_c_cspmat; + + +/* dense vectors */ +psb_c_cvector* psb_c_new_cvector(); +psb_i_t psb_c_cvect_get_nrows(psb_c_cvector *xh); +psb_c_t *psb_c_cvect_get_cpy( psb_c_cvector *xh); +psb_i_t psb_c_cvect_f_get_cpy(psb_c_t *v, psb_c_cvector *xh); +psb_i_t psb_c_cvect_zero(psb_c_cvector *xh); +psb_i_t *psb_c_cvect_f_get_pnt(psb_c_cvector *xh); + +psb_i_t psb_c_cgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeall_remote(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeall_remote_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); +psb_i_t psb_c_cgeins(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, + psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, + psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); + +/* sparse matrices*/ +psb_c_cspmat* psb_c_new_cspmat(); +psb_i_t psb_c_cspall(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspall_remote(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspasb(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspfree(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, + const psb_c_t *val, psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cmat_get_nrows(psb_c_cspmat *mh); +psb_i_t psb_c_cmat_get_ncols(psb_c_cspmat *mh); +psb_l_t psb_c_cnnz(psb_c_cspmat *mh,psb_c_descriptor *cdh); +bool psb_c_cis_matupd(psb_c_cspmat *mh,psb_c_descriptor *cdh); +bool psb_c_cis_matasb(psb_c_cspmat *mh,psb_c_descriptor *cdh); +bool psb_c_cis_matbld(psb_c_cspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_cset_matupd(psb_c_cspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_cset_matasb(psb_c_cspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_cset_matbld(psb_c_cspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_ccopy_mat(psb_c_cspmat *ah,psb_c_cspmat *bh,psb_c_descriptor *cdh); + +/* psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_csprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); +psb_i_t psb_c_cmat_name_print(psb_c_cspmat *mh, char *name); +psb_i_t psb_c_cvect_set_scal(psb_c_cvector *xh, psb_c_t val); +psb_i_t psb_c_cvect_set_vect(psb_c_cvector *xh, psb_c_t *val, psb_i_t n); + +/* psblas computational routines */ +psb_c_t psb_c_cgedot(psb_c_cvector *xh, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrm2(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgeamax(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgeasum(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrmi(psb_c_cspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeaxpby(psb_c_t alpha, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeaxpbyz(psb_c_t alpha, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_cvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspmm(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspmm_opt(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); +psb_i_t psb_c_cspsm(psb_c_t alpha, psb_c_cspmat *th, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +/* Additional computational routines */ +psb_i_t psb_c_cgemlt(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_cgemlt2(psb_c_t alpha, psb_c_cvector *xh, psb_c_cvector *yh, psb_c_t beta, psb_c_cvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgediv(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_cgediv_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_cgediv2(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *zh,psb_c_descriptor *cdh); +psb_i_t psb_c_cgediv2_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *zh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_cgeinv(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_cgeinv_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_cgeabs(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *cdh); +psb_i_t psb_c_cgecmp(psb_c_cvector *xh,psb_s_t ch,psb_c_cvector *zh,psb_c_descriptor *cdh); +bool psb_c_cgecmpmat(psb_c_cspmat *ah,psb_c_cspmat *bh,psb_s_t tol,psb_c_descriptor *cdh); +bool psb_c_cgecmpmat_val(psb_c_cspmat *ah,psb_c_t val,psb_s_t tol,psb_c_descriptor *cdh); +psb_i_t psb_c_cgeaddconst(psb_c_cvector *xh,psb_c_t bh,psb_c_cvector *zh,psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrm2_weight(psb_c_cvector *xh,psb_c_cvector *wh,psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrm2_weightmask(psb_c_cvector *xh,psb_c_cvector *wh,psb_c_cvector *idvh,psb_c_descriptor *cdh); +psb_i_t psb_c_cspscal(psb_c_t alpha, psb_c_cspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_cspscalpid(psb_c_t alpha, psb_c_cspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_cspaxpby(psb_c_t alpha, psb_c_cspmat *ah, psb_c_t beta, psb_c_cspmat *bh, psb_c_descriptor *cdh); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/psb_c_dbase.h b/cbind/psb_c_dbase.h new file mode 100644 index 000000000..6053268c3 --- /dev/null +++ b/cbind/psb_c_dbase.h @@ -0,0 +1,108 @@ +#ifndef PSB_C_DBASE_ +#define PSB_C_DBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_DVECTOR { + void *dvector; +} psb_c_dvector; + +typedef struct PSB_C_DSPMAT { + void *dspmat; +} psb_c_dspmat; + + +/* dense vectors */ +psb_c_dvector* psb_c_new_dvector(); +psb_i_t psb_c_dvect_get_nrows(psb_c_dvector *xh); +psb_d_t *psb_c_dvect_get_cpy( psb_c_dvector *xh); +psb_i_t psb_c_dvect_f_get_cpy(psb_d_t *v, psb_c_dvector *xh); +psb_i_t psb_c_dvect_zero(psb_c_dvector *xh); +psb_d_t *psb_c_dvect_f_get_pnt( psb_c_dvector *xh); + +psb_i_t psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeall_remote(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeall_remote_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); +psb_i_t psb_c_dgeins(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, + psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, + psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); + +/* sparse matrices*/ +psb_c_dspmat* psb_c_new_dspmat(); +psb_i_t psb_c_dspall(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspall_remote(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspasb(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspfree(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, + const psb_d_t *val, psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dmat_get_nrows(psb_c_dspmat *mh); +psb_i_t psb_c_dmat_get_ncols(psb_c_dspmat *mh); +psb_l_t psb_c_dnnz(psb_c_dspmat *mh,psb_c_descriptor *cdh); +bool psb_c_dis_matupd(psb_c_dspmat *mh,psb_c_descriptor *cdh); +bool psb_c_dis_matasb(psb_c_dspmat *mh,psb_c_descriptor *cdh); +bool psb_c_dis_matbld(psb_c_dspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_dset_matupd(psb_c_dspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_dset_matasb(psb_c_dspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_dset_matbld(psb_c_dspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_dcopy_mat(psb_c_dspmat *ah,psb_c_dspmat *bh,psb_c_descriptor *cdh); + +/* psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); +psb_i_t psb_c_dmat_name_print(psb_c_dspmat *mh, char *name); +psb_i_t psb_c_dvect_set_scal(psb_c_dvector *xh, psb_d_t val); +psb_i_t psb_c_dvect_set_vect(psb_c_dvector *xh, psb_d_t *val, psb_i_t n); + +/* psblas computational routines */ +psb_d_t psb_c_dgedot(psb_c_dvector *xh, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrm2(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgeamax(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgeasum(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrmi(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaxpby(psb_d_t alpha, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaxpbyz(psb_d_t alpha, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_dvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspmm(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspmm_opt(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); +psb_i_t psb_c_dspsm(psb_d_t alpha, psb_c_dspmat *th, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +/* Additional computational routines */ +psb_i_t psb_c_dgemlt(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgemlt2(psb_d_t alpha, psb_c_dvector *xh, psb_c_dvector *yh, psb_d_t beta, psb_c_dvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgediv(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgediv_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_dgediv2(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_dvector *zh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgediv2_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_dvector *zh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_dgeinv(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgeinv_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_dgeabs(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgecmp(psb_c_dvector *xh,psb_d_t ch,psb_c_dvector *zh,psb_c_descriptor *cdh); +bool psb_c_dgecmpmat(psb_c_dspmat *ah,psb_c_dspmat *bh,psb_d_t tol,psb_c_descriptor *cdh); +bool psb_c_dgecmpmat_val(psb_c_dspmat *ah,psb_d_t val,psb_d_t tol,psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaddconst(psb_c_dvector *xh,psb_d_t bh,psb_c_dvector *zh,psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrm2_weight(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrm2_weightmask(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_dvector *idvh,psb_c_descriptor *cdh); +psb_i_t psb_c_dmask(psb_c_dvector *ch,psb_c_dvector *xh,psb_c_dvector *mh, bool *t, psb_c_descriptor *cdh); +psb_d_t psb_c_dgemin(psb_c_dvector *xh,psb_c_descriptor *cdh); +psb_d_t psb_c_dminquotient(psb_c_dvector *xh,psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspscal(psb_d_t alpha, psb_c_dspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_dspscalpid(psb_d_t alpha, psb_c_dspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_dspaxpby(psb_d_t alpha, psb_c_dspmat *ah, psb_d_t beta, psb_c_dspmat *bh, psb_c_descriptor *cdh); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/psb_c_sbase.h b/cbind/psb_c_sbase.h new file mode 100644 index 000000000..46d1874a5 --- /dev/null +++ b/cbind/psb_c_sbase.h @@ -0,0 +1,105 @@ +#ifndef PSB_C_SBASE_ +#define PSB_C_SBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_SVECTOR { + void *svector; +} psb_c_svector; + +typedef struct PSB_C_SSPMAT { + void *sspmat; +} psb_c_sspmat; + + +/* dense vectors */ +psb_c_svector* psb_c_new_svector(); +psb_i_t psb_c_svect_get_nrows(psb_c_svector *xh); +psb_s_t *psb_c_svect_get_cpy( psb_c_svector *xh); +psb_i_t psb_c_svect_f_get_cpy(psb_s_t *v, psb_c_svector *xh); +psb_i_t psb_c_svect_zero(psb_c_svector *xh); +psb_s_t *psb_c_svect_f_get_pnt( psb_c_svector *xh); + +psb_i_t psb_c_sgeall(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeall_remote(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeall_remote_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); +psb_i_t psb_c_sgeins(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, + psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, + psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); + +/* sparse matrices*/ +psb_c_sspmat* psb_c_new_sspmat(); +psb_i_t psb_c_sspall(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspall_remote(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspasb(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspfree(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, + const psb_s_t *val, psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_smat_get_nrows(psb_c_sspmat *mh); +psb_i_t psb_c_smat_get_ncols(psb_c_sspmat *mh); +psb_l_t psb_c_snnz(psb_c_sspmat *mh,psb_c_descriptor *cdh); +bool psb_c_sis_matupd(psb_c_sspmat *mh,psb_c_descriptor *cdh); +bool psb_c_sis_matasb(psb_c_sspmat *mh,psb_c_descriptor *cdh); +bool psb_c_sis_matbld(psb_c_sspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_sset_matupd(psb_c_sspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_sset_matasb(psb_c_sspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_sset_matbld(psb_c_sspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_scopy_mat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_c_descriptor *cdh); + +/* psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_ssprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); +psb_i_t psb_c_smat_name_print(psb_c_sspmat *mh, char *name); +psb_i_t psb_c_svect_set_scal(psb_c_svector *xh, psb_s_t val); +psb_i_t psb_c_svect_set_vect(psb_c_svector *xh, psb_s_t *val, psb_i_t n); + +/* psblas computational routines */ +psb_s_t psb_c_sgedot(psb_c_svector *xh, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrm2(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgeamax(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgeasum(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrmi(psb_c_sspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeaxpby(psb_s_t alpha, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeaxpbyz(psb_s_t alpha, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_svector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspmm(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspmm_opt(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); +psb_i_t psb_c_sspsm(psb_s_t alpha, psb_c_sspmat *th, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +/* Additional computational routines */ +psb_i_t psb_c_sgemlt(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgemlt2(psb_s_t alpha, psb_c_svector *xh, psb_c_svector *yh, psb_s_t beta, psb_c_svector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgediv(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgediv_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_sgediv2(psb_c_svector *xh,psb_c_svector *yh,psb_c_svector *zh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgediv2_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_svector *zh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_sgeinv(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgeinv_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_sgeabs(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgecmp(psb_c_svector *xh,psb_s_t ch,psb_c_svector *zh,psb_c_descriptor *cdh); +bool psb_c_sgecmpmat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_s_t tol,psb_c_descriptor *cdh); +bool psb_c_sgecmpmat_val(psb_c_sspmat *ah,psb_s_t val,psb_s_t tol,psb_c_descriptor *cdh); +psb_i_t psb_c_sgeaddconst(psb_c_svector *xh,psb_s_t bh,psb_c_svector *zh,psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrm2_weight(psb_c_svector *xh,psb_c_svector *wh,psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrm2_weightmask(psb_c_svector *xh,psb_c_svector *wh,psb_c_svector *idvh,psb_c_descriptor *cdh); +psb_i_t psb_c_smask(psb_c_svector *ch,psb_c_svector *xh,psb_c_svector *mh, bool *t, psb_c_descriptor *cdh); +psb_s_t psb_c_sgemin(psb_c_svector *xh,psb_c_descriptor *cdh); +psb_i_t psb_c_sspscal(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_sspscalpid(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_sspaxpby(psb_s_t alpha, psb_c_sspmat *ah, psb_s_t beta, psb_c_sspmat *bh, psb_c_descriptor *cdh); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/psb_c_zbase.h b/cbind/psb_c_zbase.h new file mode 100644 index 000000000..09fc85250 --- /dev/null +++ b/cbind/psb_c_zbase.h @@ -0,0 +1,105 @@ +#ifndef PSB_C_ZBASE_ +#define PSB_C_ZBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_ZVECTOR { + void *zvector; +} psb_c_zvector; + +typedef struct PSB_C_ZSPMAT { + void *zspmat; +} psb_c_zspmat; + + +/* dense vectors */ +psb_c_zvector* psb_c_new_zvector(); +psb_i_t psb_c_zvect_get_nrows(psb_c_zvector *xh); +psb_z_t *psb_c_zvect_get_cpy( psb_c_zvector *xh); +psb_i_t psb_c_zvect_f_get_cpy(psb_z_t *v, psb_c_zvector *xh); +psb_i_t psb_c_zvect_zero(psb_c_zvector *xh); +psb_z_t *psb_c_zvect_f_get_pnt( psb_c_zvector *xh); + +psb_i_t psb_c_zgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeall_remote(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeall_remote_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); +psb_i_t psb_c_zgeins(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, + psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, + psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); + +/* sparse matrices*/ +psb_c_zspmat* psb_c_new_zspmat(); +psb_i_t psb_c_zspall(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspall_remote(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspasb(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspfree(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, + const psb_z_t *val, psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zmat_get_nrows(psb_c_zspmat *mh); +psb_i_t psb_c_zmat_get_ncols(psb_c_zspmat *mh); +psb_l_t psb_c_znnz(psb_c_zspmat *mh,psb_c_descriptor *cdh); +bool psb_c_zis_matupd(psb_c_zspmat *mh,psb_c_descriptor *cdh); +bool psb_c_zis_matasb(psb_c_zspmat *mh,psb_c_descriptor *cdh); +bool psb_c_zis_matbld(psb_c_zspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_zset_matupd(psb_c_zspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_zset_matasb(psb_c_zspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_zset_matbld(psb_c_zspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_zcopy_mat(psb_c_zspmat *ah,psb_c_zspmat *bh,psb_c_descriptor *cdh); + + +/* psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_zsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); +psb_i_t psb_c_zmat_name_print(psb_c_zspmat *mh, char *name); +psb_i_t psb_c_zvect_set_scal(psb_c_zvector *xh, psb_z_t val); +psb_i_t psb_c_zvect_set_vect(psb_c_zvector *xh, psb_z_t *val, psb_i_t n); + +/* psblas computational routines */ +psb_z_t psb_c_zgedot(psb_c_zvector *xh, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrm2(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgeamax(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgeasum(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrmi(psb_c_zspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeaxpby(psb_z_t alpha, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeaxpbyz(psb_z_t alpha, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_zvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspmm(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspmm_opt(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); +psb_i_t psb_c_zspsm(psb_z_t alpha, psb_c_zspmat *th, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +/* Additional computational routines */ +psb_i_t psb_c_zgemlt(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgemlt2(psb_z_t alpha, psb_c_zvector *xh, psb_c_zvector *yh, psb_z_t beta, psb_c_zvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgediv(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgediv_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_zgediv2(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_zvector *zh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgediv2_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_zvector *zh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_zgeinv(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgeinv_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_zgeabs(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgecmp(psb_c_zvector *xh,psb_d_t ch,psb_c_zvector *zh,psb_c_descriptor *cdh); +bool psb_c_zgecmpmat(psb_c_zspmat *ah,psb_c_zspmat *bh,psb_d_t tol,psb_c_descriptor *cdh); +bool psb_c_zgecmpmat_val(psb_c_zspmat *ah,psb_z_t val,psb_d_t tol,psb_c_descriptor *cdh); +psb_i_t psb_c_zgeaddconst(psb_c_zvector *xh,psb_z_t bh,psb_c_zvector *zh,psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrm2_weight(psb_c_zvector *xh,psb_c_zvector *wh,psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrm2_weightmask(psb_c_zvector *xh,psb_c_zvector *wh,psb_c_zvector *idvh,psb_c_descriptor *cdh); +psb_i_t psb_c_zspscal(psb_z_t alpha, psb_c_zspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_zspscalpid(psb_z_t alpha, psb_c_zspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_zspaxpby(psb_z_t alpha, psb_c_zspmat *ah, psb_z_t beta, psb_c_zspmat *bh, psb_c_descriptor *cdh); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif From 22eafb91402d6467355d93e60e25b41721077a5a Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Tue, 11 Nov 2025 17:10:15 +0100 Subject: [PATCH 040/175] Fixed naming of function --- cbind/base/psb_c_tools_cbind_mod.F90 | 2 +- cbind/base/psb_d_tools_cbind_mod.F90 | 2 +- cbind/base/psb_s_tools_cbind_mod.F90 | 2 +- cbind/base/psb_z_tools_cbind_mod.F90 | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index 644d2e1e4..0abc4e347 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -97,7 +97,7 @@ contains res = min(0,info) return - end function psb_c_cgeall_remote + end function psb_c_cgeall_remote_options function psb_c_cgeasb(xh,cdh) bind(c) result(res) diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index c22198ef9..69bfe3b8c 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -97,7 +97,7 @@ contains res = min(0,info) return - end function psb_c_dgeall_remote + end function psb_c_dgeall_remote_options function psb_c_dgeasb(xh,cdh) bind(c) result(res) diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 7870d20c3..651f3e644 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -97,7 +97,7 @@ contains res = min(0,info) return - end function psb_c_sgeall_remote + end function psb_c_sgeall_remote_options function psb_c_sgeasb(xh,cdh) bind(c) result(res) diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 534a88695..c6b2ab0b2 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -97,7 +97,7 @@ contains res = min(0,info) return - end function psb_c_zgeall_remote + end function psb_c_zgeall_remote_options function psb_c_zgeasb(xh,cdh) bind(c) result(res) From ce33f44f6a2140c70c230a6cd3c714521f474425 Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Tue, 11 Nov 2025 17:18:06 +0100 Subject: [PATCH 041/175] Exposed named constants as macro for bldmode --- cbind/psb_c_base.h | 138 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 cbind/psb_c_base.h diff --git a/cbind/psb_c_base.h b/cbind/psb_c_base.h new file mode 100644 index 000000000..d0b59ef0a --- /dev/null +++ b/cbind/psb_c_base.h @@ -0,0 +1,138 @@ +#ifndef PSB_C_BASE__ +#define PSB_C_BASE__ +#ifdef __cplusplus +extern "C" { + /*typedef char _Bool;*/ +#endif + +#include +#ifdef __cplusplus +#include +#else +#include +#endif +#include +#include +#include +#include +#include + +#include "psb_config.h" +#include "psb_types.h" + + + typedef struct PSB_C_DESCRIPTOR { + void *descriptor; + } psb_c_descriptor; + + + typedef struct PSB_C_CTXT { + psb_i_t *ctxt; + } psb_c_ctxt; + + + + void psb_c_check_error(psb_c_ctxt cctxt); + psb_i_t psb_c_error(); + psb_i_t psb_c_clean_errstack(); + void psb_c_print_errmsg(); + char *psb_c_pop_errmsg(); + psb_i_t psb_c_f2c_errmsg(char *, psb_i_t); + void psb_c_seterraction_ret(); + void psb_c_seterraction_print(); + void psb_c_seterraction_abort(); + + /* Environment routines */ + void psb_c_init(psb_c_ctxt *cctxt); + void psb_c_init_from_fint(psb_c_ctxt *cctxt, psb_i_t f_comm); + void psb_c_exit(psb_c_ctxt cctxt); + void psb_c_exit_ctxt(psb_c_ctxt cctxt); + void psb_c_abort(psb_c_ctxt cctxt); + void psb_c_barrier(psb_c_ctxt cctxt); + void psb_c_info(psb_c_ctxt cctxt, psb_i_t *iam, psb_i_t *np); + void psb_c_get_i_ctxt(psb_c_ctxt cctxt, psb_i_t *ictxt, psb_i_t *info); + bool psb_c_cmp_ctxt(psb_c_ctxt cctxt1, psb_c_ctxt cctxt2); + psb_d_t psb_c_wtime(); + psb_i_t psb_c_get_errstatus(); + + psb_i_t psb_c_get_index_base(); + void psb_c_set_index_base(psb_i_t base); + + void psb_c_mbcast(psb_c_ctxt cctxt, psb_i_t n, psb_m_t *v, psb_i_t root); + void psb_c_ibcast(psb_c_ctxt cctxt, psb_i_t n, psb_i_t *v, psb_i_t root); + void psb_c_lbcast(psb_c_ctxt cctxt, psb_i_t n, psb_l_t *v, psb_i_t root); + void psb_c_ebcast(psb_c_ctxt cctxt, psb_i_t n, psb_e_t *v, psb_i_t root); + void psb_c_sbcast(psb_c_ctxt cctxt, psb_i_t n, psb_s_t *v, psb_i_t root); + void psb_c_dbcast(psb_c_ctxt cctxt, psb_i_t n, psb_d_t *v, psb_i_t root); + void psb_c_cbcast(psb_c_ctxt cctxt, psb_i_t n, psb_c_t *v, psb_i_t root); + void psb_c_zbcast(psb_c_ctxt cctxt, psb_i_t n, psb_z_t *v, psb_i_t root); + void psb_c_hbcast(psb_c_ctxt cctxt, const char *v, psb_i_t root); + + /* Descriptor/integer routines */ + psb_c_descriptor* psb_c_new_descriptor(); + void psb_c_delete_descriptor(psb_c_descriptor *); + psb_c_ctxt* psb_c_new_ctxt(); + void psb_c_delete_ctxt(psb_c_ctxt *); + psb_i_t psb_c_cdall_vg(psb_l_t ng, psb_i_t *vg, psb_c_ctxt cctxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_vl(psb_i_t nl, psb_l_t *vl, psb_c_ctxt cctxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_vl_lidx(psb_i_t nl, psb_l_t *vl, psb_i_t *lidx, psb_c_ctxt cctxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_nl(psb_i_t nl, psb_c_ctxt cctxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_repl(psb_l_t n, psb_c_ctxt cctxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdasb(psb_c_descriptor *cd); + psb_i_t psb_c_cdfree(psb_c_descriptor *cd); + psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd); + psb_i_t psb_c_cdins_lidx(psb_i_t nz, const psb_l_t *ja, const psb_i_t *lidx, psb_c_descriptor *cd); + bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); + bool psb_c_cd_is_asb(psb_c_descriptor *cd); + + psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); + psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); + psb_l_t psb_c_cd_get_global_cols(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_global_indices(psb_l_t idx[], psb_i_t nidx, bool owned, psb_c_descriptor *cd); + psb_i_t psb_c_g2l(psb_c_descriptor *cdh,psb_l_t gindex,bool cowned); + + + /* legal values for upd argument */ +#define psb_upd_srch_ 98764 +#define psb_upd_perm_ 98765 +#define psb_upd_def_ psb_upd_srch_ + /* legal values for dupl argument */ +#define psb_dupl_ovwrt_ 0 +#define psb_dupl_add_ 1 +#define psb_dupl_err_ 2 +#define psb_dupl_def_ psb_dupl_ovwrt_ +/* legal values for bldmode argument */ +#define psb_matbld_noremote_ 0 +#define psb_matbld_remote_ 1 + + /* legal values for afmt */ +#define PSB_AFMT_CSR "CSR" +#define PSB_AFMT_CSC "CSC" +#define PSB_AFMT_COO "COO" +#define PSB_AFMT_RSB "RSB" + + /* Transpose argument */ +#define psb_NoTrans_ "N" +#define psb_Trans_ "T" +#define psb_ConjTrans_ "C" + + /* legal values for halo swap modes argument */ +#define psb_swap_send_ 1 +#define psb_swap_recv_ 2 +#define psb_swap_sync_ 4 +#define psb_swap_mpi_ 8 + + /* legal values for ovrl update argument */ +#define psb_none_ 0 +#define psb_sum_ 1 +#define psb_avg_ 2 +#define psb_square_root_ 3 +#define psb_setzero_ 4 + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif From dea2186d76c09218813872f64f963b7c6aae7591 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 13 Nov 2025 09:15:05 +0100 Subject: [PATCH 042/175] Updated configure to expose constants to the C interface --- base/modules/psb_config.h.in | 8 ++++++++ base/modules/psb_const_mod.F90 | 3 ++- configure | 20 ++++++++++++++++++++ configure.ac | 14 ++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/base/modules/psb_config.h.in b/base/modules/psb_config.h.in index e02580156..b26340d7b 100644 --- a/base/modules/psb_config.h.in +++ b/base/modules/psb_config.h.in @@ -9,6 +9,14 @@ #define PSB_VERSION_PATCHLEVEL @PSBLASPATCH@ #define PSB_VERSION_STRING @PSBLASSTRING@ +#define PSB_DUPL_NULL @PSBLASDUPNUL@ +#define PSB_DUPL_ADD @PSBLASDUPADD@ +#define PSB_DUPL_OVWRT @PSBLASDUPOVW@ +#define PSB_DUPL_ERR @PSBLASDUPERR@ +#define PSB_MATBLD_NOREMOTE @PSBLASBLDNOR@ +#define PSB_MATBLD_REMOTE @PSBLASBLDRMT@ + + @CSERIALMPI@ @PSB_IPKDEF@ diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index e3509811e..5f229ac8f 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -208,7 +208,8 @@ module psb_const_mod integer(psb_ipk_), parameter :: psb_invalid_ = -1 integer(psb_ipk_), parameter :: psb_spmat_null_=0, psb_spmat_bld_=1 integer(psb_ipk_), parameter :: psb_spmat_asb_=2, psb_spmat_upd_=4 - integer(psb_ipk_), parameter :: psb_matbld_noremote_=0, psb_matbld_remote_=1 + integer(psb_ipk_), parameter :: psb_matbld_noremote_ = 0 + integer(psb_ipk_), parameter :: psb_matbld_remote_ = 1 integer(psb_ipk_), parameter :: psb_vect_null_=0, psb_vect_bld_=1 integer(psb_ipk_), parameter :: psb_vect_asb_=2, psb_vect_upd_=4 diff --git a/configure b/configure index ad040b1ab..9f7434aaa 100755 --- a/configure +++ b/configure @@ -690,6 +690,12 @@ CINTMETIS CHAVEMETIS CHAVE_OPENMP CSERIALMPI +PSBLASBLDRMT +PSBLASBLDNOR +PSBLASDUPERR +PSBLASDUPOVW +PSBLASDUPADD +PSBLASDUPNUL PSBLASSTRING PSBLASPATCH PSBLASMINOR @@ -8758,6 +8764,13 @@ PSBLASMAJOR=`cat $CFILE| grep version_major | $AWK '{print $6;}'`; PSBLASMINOR=`cat $CFILE| grep version_minor| $AWK '{print $6;}'`; PSBLASPATCH=`cat $CFILE| grep patchlevel| $AWK '{print $6;}'`; PSBLASSTRING=`cat $CFILE | grep version_string | $AWK '{print $6;}'`; +PSBLASDUPNUL=`cat $CFILE| grep dupl_null | $AWK '{print $6;}'`; +PSBLASDUPADD=`cat $CFILE| grep "psb_dupl_add_ =" | $AWK '{print $6;}'`; +PSBLASDUPOVW=`cat $CFILE| grep dupl_ovwrt| $AWK '{print $6;}'`; +PSBLASDUPERR=`cat $CFILE| grep dupl_err| $AWK '{print $6;}'`; +PSBLASBLDNOR=`cat $CFILE| grep matbld_noremote| $AWK '{print $6;}'`; +PSBLASBLDRMT=`cat $CFILE| grep matbld_remote| $AWK '{print $6;}'`; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: version $PSBLASSTRING" >&5 printf "%s\n" " version $PSBLASSTRING" >&6; } @@ -11710,6 +11723,13 @@ FDEFINES=$(PSBFDEFINES) + + + + + + + diff --git a/configure.ac b/configure.ac index c2eade583..ecaa89de3 100644 --- a/configure.ac +++ b/configure.ac @@ -689,6 +689,13 @@ PSBLASMAJOR=`cat $CFILE| grep version_major | $AWK '{print $6;}'`; PSBLASMINOR=`cat $CFILE| grep version_minor| $AWK '{print $6;}'`; PSBLASPATCH=`cat $CFILE| grep patchlevel| $AWK '{print $6;}'`; PSBLASSTRING=`cat $CFILE | grep version_string | $AWK '{print $6;}'`; +PSBLASDUPNUL=`cat $CFILE| grep dupl_null | $AWK '{print $6;}'`; +PSBLASDUPADD=`cat $CFILE| grep "psb_dupl_add_ =" | $AWK '{print $6;}'`; +PSBLASDUPOVW=`cat $CFILE| grep dupl_ovwrt| $AWK '{print $6;}'`; +PSBLASDUPERR=`cat $CFILE| grep dupl_err| $AWK '{print $6;}'`; +PSBLASBLDNOR=`cat $CFILE| grep matbld_noremote| $AWK '{print $6;}'`; +PSBLASBLDRMT=`cat $CFILE| grep matbld_remote| $AWK '{print $6;}'`; + AC_MSG_RESULT([ version $PSBLASSTRING]) ############################################################################### @@ -1065,6 +1072,13 @@ AC_SUBST(PSBLASMAJOR) AC_SUBST(PSBLASMINOR) AC_SUBST(PSBLASPATCH) AC_SUBST(PSBLASSTRING) +AC_SUBST(PSBLASDUPNUL) +AC_SUBST(PSBLASDUPADD) +AC_SUBST(PSBLASDUPOVW) +AC_SUBST(PSBLASDUPERR) +AC_SUBST(PSBLASBLDNOR) +AC_SUBST(PSBLASBLDRMT) + AC_SUBST(CSERIALMPI) AC_SUBST(CHAVE_OPENMP) AC_SUBST(CHAVEMETIS) From 3c791b537037b14ca41bd648eefad6bacf85e450 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 14 Nov 2025 10:55:29 +0100 Subject: [PATCH 043/175] Fixed file renamed into CMakeLists --- base/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt index c2b1fe8f0..b7a7d22ca 100644 --- a/base/CMakeLists.txt +++ b/base/CMakeLists.txt @@ -272,7 +272,7 @@ set(PSB_base_source_files tools/psb_zsprn.f90 tools/psb_get_overlap.f90 serial/psb_crwextd.f90 - serial/psb_zspspmm.f90 + serial/psb_zspspmm.F90 serial/psb_drwextd.f90 serial/psb_dnumbmm.f90 serial/psb_damax_s.f90 @@ -343,14 +343,14 @@ set(PSB_base_source_files serial/psb_dsymbmm.f90 serial/psb_samax_s.f90 serial/psb_lsame.f90 - serial/psb_dspspmm.f90 + serial/psb_dspspmm.F90 serial/psb_ssymbmm.f90 serial/psb_cgeprt.f90 serial/psb_sgeprt.f90 # serial/psi_i2_serial_impl.F90 serial/psi_e_serial_impl.F90 serial/psb_zsymbmm.f90 - serial/psb_cspspmm.f90 + serial/psb_cspspmm.F90 serial/psb_aspxpby.f90 serial/psi_s_serial_impl.F90 serial/psb_zamax_s.f90 @@ -359,7 +359,7 @@ set(PSB_base_source_files serial/psb_casum_s.f90 serial/psi_d_serial_impl.F90 serial/psi_c_serial_impl.F90 - serial/psb_sspspmm.f90 + serial/psb_sspspmm.F90 serial/psb_cnumbmm.f90 psblas/psb_damax.f90 psblas/psb_dspmm.f90 From 82666d517ad9393dfac413a8c3aeb9c147e88e08 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 14 Nov 2025 11:40:47 +0100 Subject: [PATCH 044/175] Update release news --- ReleaseNews | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ReleaseNews b/ReleaseNews index e1d7a2b80..cf60dc524 100644 --- a/ReleaseNews +++ b/ReleaseNews @@ -2,10 +2,13 @@ WHAT'S NEW Version 3.9 1. PSBLAS3-EXT has been folded into the main library 2. Renamed GPU into CUDA. - 3. Highly experimental OpenACC support. + 3. Highly experimental OpenACC support. Requires a Fortran compiler which + supports SUBMODULES, e.g GNU Fortran version 12 or later 4. The iterative solvers are now defined in psb_linsolve_mod and implemented in libpsb_linsolve.a; existing code using - Krylov methods will work with no changes. + Krylov methods will work with no changes. + 5. In the linsolve directory we now have an interface for + Richardson interations Version 3.8.0-2 1. CTXT is now an opaque object. From b81518bb8310c2b54c34f24015a72ee23155d52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20Pep=C3=A8=20Sciarria?= Date: Fri, 14 Nov 2025 12:40:20 +0100 Subject: [PATCH 045/175] Add variable about psblas version for psb_config.h generation --- CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index be929dd04..9b931b1e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,6 +132,13 @@ include("${CMAKE_CURRENT_LIST_DIR}/cmake/CapitalizeString.cmake") message(STATUS "Using compiler ${CMAKE_C_COMPILER};") +# Define Major and Minor Version and Patch Level, String Version +set(PSBLASMAJOR "3") +set(PSBLASMINOR "9") +set(PSBLASPATCH "0") +set(PSBLASSTRING "3.9.0") + + # Set default values for IPK_SIZE and LPK_SIZE set(DEFAULT_IPK_SIZE 4) set(DEFAULT_LPK_SIZE 8) From 14f27ed9d870bf5be16e8a001a61d41f34194678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20Pep=C3=A8=20Sciarria?= Date: Fri, 14 Nov 2025 12:42:08 +0100 Subject: [PATCH 046/175] delete build tracking --- .../api/v1/query/client-vscode/query.json | 1 - build/CMakeCache.txt | 559 ----- build/CMakeFiles/3.26.5/CMakeCCompiler.cmake | 72 - .../3.26.5/CMakeDetermineCompilerABI_C.bin | Bin 17448 -> 0 bytes .../CMakeDetermineCompilerABI_Fortran.bin | Bin 17960 -> 0 bytes .../3.26.5/CMakeFortranCompiler.cmake | 61 - build/CMakeFiles/3.26.5/CMakeSystem.cmake | 15 - .../3.26.5/CompilerIdC/CMakeCCompilerId.c | 866 ------- build/CMakeFiles/3.26.5/CompilerIdC/a.out | Bin 17568 -> 0 bytes .../CMakeFortranCompilerId.F | 1114 --------- .../CMakeFiles/3.26.5/CompilerIdFortran/a.out | Bin 17864 -> 0 bytes build/CMakeFiles/CMakeConfigureLog.yaml | 1990 ----------------- build/CMakeFiles/CheckTypeSize/INT_SIZE.bin | Bin 17296 -> 0 bytes build/CMakeFiles/CheckTypeSize/LONG_SIZE.bin | Bin 17296 -> 0 bytes .../CMakeFiles/CheckTypeSize/VOID_P_SIZE.bin | Bin 17296 -> 0 bytes .../FortranCInterface/CMakeCache.txt | 289 --- .../CMakeDirectoryInformation.cmake | 16 - .../FortranCInterface.dir/DependInfo.cmake | 33 - .../FortranCInterface.dir/build.make | 141 -- .../FortranCInterface.dir/cmake_clean.cmake | 12 - .../compiler_depend.make | 2 - .../FortranCInterface.dir/compiler_depend.ts | 2 - .../FortranCInterface.dir/depend.internal | 9 - .../FortranCInterface.dir/depend.make | 6 - .../FortranCInterface.dir/flags.make | 12 - .../FortranCInterface.dir/fortran.internal | 2 - .../CMakeFiles/FortranCInterface.dir/link.txt | 1 - .../FortranCInterface.dir/progress.make | 5 - .../CMakeFiles/Makefile.cmake | 79 - .../FortranCInterface/CMakeFiles/Makefile2 | 169 -- .../CMakeFiles/TargetDirectories.txt | 5 - .../CMakeFiles/cmake.check_cache | 1 - .../CMakeFiles/myfort.dir/DependInfo.cmake | 33 - .../CMakeFiles/myfort.dir/build.make | 155 -- .../CMakeFiles/myfort.dir/cmake_clean.cmake | 13 - .../myfort.dir/cmake_clean_Fortran.cmake | 10 - .../myfort.dir/cmake_clean_target.cmake | 3 - .../myfort.dir/compiler_depend.make | 2 - .../CMakeFiles/myfort.dir/compiler_depend.ts | 2 - .../CMakeFiles/myfort.dir/depend.internal | 11 - .../CMakeFiles/myfort.dir/depend.make | 16 - .../CMakeFiles/myfort.dir/flags.make | 10 - .../CMakeFiles/myfort.dir/fortran.internal | 4 - .../CMakeFiles/myfort.dir/link.txt | 2 - .../myfort.dir/my_module.f90.o.provides.build | 0 .../CMakeFiles/myfort.dir/my_module.mod.stamp | Bin 246 -> 0 bytes .../myfort.dir/mymodule.f90.o.provides.build | 0 .../CMakeFiles/myfort.dir/mymodule.mod.stamp | Bin 245 -> 0 bytes .../CMakeFiles/myfort.dir/progress.make | 6 - .../CMakeFiles/progress.marks | 1 - .../CMakeFiles/symbols.dir/C.includecache | 66 - .../CMakeFiles/symbols.dir/DependInfo.cmake | 57 - .../CMakeFiles/symbols.dir/build.make | 530 ----- .../CMakeFiles/symbols.dir/cmake_clean.cmake | 38 - .../symbols.dir/cmake_clean_target.cmake | 3 - .../symbols.dir/compiler_depend.make | 2 - .../CMakeFiles/symbols.dir/compiler_depend.ts | 2 - .../CMakeFiles/symbols.dir/depend.internal | 61 - .../CMakeFiles/symbols.dir/depend.make | 61 - .../CMakeFiles/symbols.dir/flags.make | 10 - .../CMakeFiles/symbols.dir/link.txt | 2 - .../CMakeFiles/symbols.dir/progress.make | 31 - .../FortranCInterface/FortranCInterface | Bin 18064 -> 0 bytes .../CMakeFiles/FortranCInterface/Input.cmake | 3 - build/CMakeFiles/FortranCInterface/Makefile | 1154 ---------- .../CMakeFiles/FortranCInterface/Output.cmake | 34 - .../FortranCInterface/cmake_install.cmake | 49 - .../FortranCInterface/exe-Release.cmake | 1 - .../symbols/MYMODULE_mp_MYSUB-UPPER.c | 4 - .../FortranCInterface/symbols/MYSUB-UPPER.c | 4 - .../symbols/MY_MODULE_mp_MY_SUB-UPPER.c | 4 - .../FortranCInterface/symbols/MY_SUB-UPPER.c | 4 - .../symbols/_QMmy_modulePmy_sub.c | 4 - .../symbols/_QMmymodulePmysub.c | 4 - .../symbols/__my_module_MOD_my_sub.c | 4 - .../symbols/__my_module_NMOD_my_sub.c | 4 - .../symbols/__my_module__my_sub.c | 4 - .../symbols/__mymodule_MOD_mysub.c | 4 - .../symbols/__mymodule_NMOD_mysub.c | 4 - .../symbols/__mymodule__mysub.c | 4 - .../symbols/my_moduleSmy_sub.c | 4 - .../symbols/my_module_MP_my_sub.c | 4 - .../symbols/my_module_mp_my_sub_.c | 4 - .../symbols/my_module_my_sub_.c | 4 - .../FortranCInterface/symbols/my_sub.c | 4 - .../FortranCInterface/symbols/my_sub_.c | 4 - .../FortranCInterface/symbols/my_sub__.c | 4 - .../symbols/mymoduleSmysub.c | 4 - .../symbols/mymodule_MP_mysub.c | 4 - .../symbols/mymodule_mp_mysub_.c | 4 - .../symbols/mymodule_mysub_.c | 4 - .../FortranCInterface/symbols/mysub.c | 4 - .../FortranCInterface/symbols/mysub_.c | 4 - build/CMakeFiles/cmake.check_cache | 1 - 94 files changed, 7935 deletions(-) delete mode 100644 build/.cmake/api/v1/query/client-vscode/query.json delete mode 100644 build/CMakeCache.txt delete mode 100644 build/CMakeFiles/3.26.5/CMakeCCompiler.cmake delete mode 100755 build/CMakeFiles/3.26.5/CMakeDetermineCompilerABI_C.bin delete mode 100755 build/CMakeFiles/3.26.5/CMakeDetermineCompilerABI_Fortran.bin delete mode 100644 build/CMakeFiles/3.26.5/CMakeFortranCompiler.cmake delete mode 100644 build/CMakeFiles/3.26.5/CMakeSystem.cmake delete mode 100644 build/CMakeFiles/3.26.5/CompilerIdC/CMakeCCompilerId.c delete mode 100755 build/CMakeFiles/3.26.5/CompilerIdC/a.out delete mode 100644 build/CMakeFiles/3.26.5/CompilerIdFortran/CMakeFortranCompilerId.F delete mode 100755 build/CMakeFiles/3.26.5/CompilerIdFortran/a.out delete mode 100644 build/CMakeFiles/CMakeConfigureLog.yaml delete mode 100755 build/CMakeFiles/CheckTypeSize/INT_SIZE.bin delete mode 100755 build/CMakeFiles/CheckTypeSize/LONG_SIZE.bin delete mode 100755 build/CMakeFiles/CheckTypeSize/VOID_P_SIZE.bin delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeCache.txt delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/CMakeDirectoryInformation.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/DependInfo.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/build.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/cmake_clean.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/compiler_depend.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/compiler_depend.ts delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.internal delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/flags.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/fortran.internal delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/link.txt delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/progress.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/Makefile.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/Makefile2 delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/TargetDirectories.txt delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/cmake.check_cache delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/DependInfo.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/build.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean_Fortran.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean_target.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/compiler_depend.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/compiler_depend.ts delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.internal delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/flags.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/fortran.internal delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/link.txt delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/my_module.f90.o.provides.build delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/my_module.mod.stamp delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/mymodule.f90.o.provides.build delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/mymodule.mod.stamp delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/progress.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/progress.marks delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/C.includecache delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/DependInfo.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/build.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/cmake_clean.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/cmake_clean_target.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/compiler_depend.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/compiler_depend.ts delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.internal delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/flags.make delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/link.txt delete mode 100644 build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/progress.make delete mode 100755 build/CMakeFiles/FortranCInterface/FortranCInterface delete mode 100644 build/CMakeFiles/FortranCInterface/Input.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/Makefile delete mode 100644 build/CMakeFiles/FortranCInterface/Output.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/cmake_install.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/exe-Release.cmake delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/my_sub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/my_sub_.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/my_sub__.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/mysub.c delete mode 100644 build/CMakeFiles/FortranCInterface/symbols/mysub_.c delete mode 100644 build/CMakeFiles/cmake.check_cache diff --git a/build/.cmake/api/v1/query/client-vscode/query.json b/build/.cmake/api/v1/query/client-vscode/query.json deleted file mode 100644 index 82bb96424..000000000 --- a/build/.cmake/api/v1/query/client-vscode/query.json +++ /dev/null @@ -1 +0,0 @@ -{"requests":[{"kind":"cache","version":2},{"kind":"codemodel","version":2},{"kind":"toolchains","version":1},{"kind":"cmakeFiles","version":1}]} \ No newline at end of file diff --git a/build/CMakeCache.txt b/build/CMakeCache.txt deleted file mode 100644 index a9a8618a8..000000000 --- a/build/CMakeCache.txt +++ /dev/null @@ -1,559 +0,0 @@ -# This is the CMakeCache file. -# For build in directory: /home/stack/test_psblas/psblas3/build -# It was generated by CMake: /usr/bin/cmake -# You can edit this file to change values found and used by cmake. -# If you do not want to change any of the values, simply exit the editor. -# If you do want to change a value, simply edit, save, and exit the editor. -# The syntax for the file is as follows: -# KEY:TYPE=VALUE -# KEY is the name of a variable in the cache. -# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. -# VALUE is the current value for the KEY. - -######################## -# EXTERNAL cache entries -######################## - -//Path to a program. -CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line - -//Path to a program. -CMAKE_AR:FILEPATH=/usr/bin/ar - -//No help, variable specified on the command line. -CMAKE_BUILD_TYPE:STRING=Debug - -//Enable/Disable color output during build. -CMAKE_COLOR_MAKEFILE:BOOL=ON - -//No help, variable specified on the command line. -CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ - -//No help, variable specified on the command line. -CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc - -//A wrapper around 'ar' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar - -//A wrapper around 'ranlib' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib - -//Flags used by the C compiler during all build types. -CMAKE_C_FLAGS:STRING= - -//Code coverage C compiler flags -CMAKE_C_FLAGS_CODECOVERAGE:STRING=-fprofile-arcs -ftest-coverage -O0 - -//Flags used by the C compiler during DEBUG builds. -CMAKE_C_FLAGS_DEBUG:STRING=-g - -//Flags used by the C compiler during MINSIZEREL builds. -CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG - -//Flags used by the C compiler during RELEASE builds. -CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG - -//Flags used by the C compiler during RELWITHDEBINFO builds. -CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG - -//Path to a program. -CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND - -//Flags used by the linker during all build types. -CMAKE_EXE_LINKER_FLAGS:STRING= - -//Flags used by the linker during DEBUG builds. -CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during MINSIZEREL builds. -CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during RELEASE builds. -CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during RELWITHDEBINFO builds. -CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//No help, variable specified on the command line. -CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE - -//Value Computed by CMake. -CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/stack/test_psblas/psblas3/build/CMakeFiles/pkgRedirects - -//Fortran compiler -CMAKE_Fortran_COMPILER:FILEPATH=/usr/bin/gfortran - -//A wrapper around 'ar' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_Fortran_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar - -//A wrapper around 'ranlib' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_Fortran_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib - -//Flags used by the Fortran compiler during all build types. -CMAKE_Fortran_FLAGS:STRING= - -//Code coverage Fortran compiler flags -CMAKE_Fortran_FLAGS_CODECOVERAGE:STRING=-fprofile-arcs -ftest-coverage -O0 - -//Flags used by the Fortran compiler during DEBUG builds. -CMAKE_Fortran_FLAGS_DEBUG:STRING=-g - -//Flags used by the Fortran compiler during MINSIZEREL builds. -CMAKE_Fortran_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG -Os - -//Flags used by the Fortran compiler during RELEASE builds. -CMAKE_Fortran_FLAGS_RELEASE:STRING=-O3 -DNDEBUG -O3 - -//Flags used by the Fortran compiler during RELWITHDEBINFO builds. -CMAKE_Fortran_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG - -//Install path prefix, prepended onto install directories. -CMAKE_INSTALL_PREFIX:PATH=/usr/local - -//Path to a program. -CMAKE_LINKER:FILEPATH=/usr/bin/ld - -//Path to a program. -CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake - -//Flags used by the linker during the creation of modules during -// all build types. -CMAKE_MODULE_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of modules during -// DEBUG builds. -CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of modules during -// MINSIZEREL builds. -CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of modules during -// RELEASE builds. -CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of modules during -// RELWITHDEBINFO builds. -CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Path to a program. -CMAKE_NM:FILEPATH=/usr/bin/nm - -//Path to a program. -CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy - -//Path to a program. -CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump - -//Value Computed by CMake -CMAKE_PROJECT_DESCRIPTION:STATIC= - -//Value Computed by CMake -CMAKE_PROJECT_HOMEPAGE_URL:STATIC= - -//Value Computed by CMake -CMAKE_PROJECT_NAME:STATIC=psblas - -//Value Computed by CMake -CMAKE_PROJECT_VERSION:STATIC=3.5.0 - -//Value Computed by CMake -CMAKE_PROJECT_VERSION_MAJOR:STATIC=3 - -//Value Computed by CMake -CMAKE_PROJECT_VERSION_MINOR:STATIC=5 - -//Value Computed by CMake -CMAKE_PROJECT_VERSION_PATCH:STATIC=0 - -//Value Computed by CMake -CMAKE_PROJECT_VERSION_TWEAK:STATIC= - -//Path to a program. -CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib - -//Path to a program. -CMAKE_READELF:FILEPATH=/usr/bin/readelf - -//Flags used by the linker during the creation of shared libraries -// during all build types. -CMAKE_SHARED_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of shared libraries -// during DEBUG builds. -CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of shared libraries -// during MINSIZEREL builds. -CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of shared libraries -// during RELEASE builds. -CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of shared libraries -// during RELWITHDEBINFO builds. -CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//If set, runtime paths are not added when installing shared libraries, -// but are added when building. -CMAKE_SKIP_INSTALL_RPATH:BOOL=NO - -//If set, runtime paths are not added when using shared libraries. -CMAKE_SKIP_RPATH:BOOL=NO - -//Flags used by the linker during the creation of static libraries -// during all build types. -CMAKE_STATIC_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of static libraries -// during DEBUG builds. -CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of static libraries -// during MINSIZEREL builds. -CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of static libraries -// during RELEASE builds. -CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of static libraries -// during RELWITHDEBINFO builds. -CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Path to a program. -CMAKE_STRIP:FILEPATH=/usr/bin/strip - -//If this value is on, makefiles will be generated without the -// .SILENT directive, and all commands will be echoed to the console -// during the make. This is useful for debugging only. With Visual -// Studio IDE projects all commands are done without /nologo. -CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE - -//Git command line client -GIT_EXECUTABLE:FILEPATH=/usr/bin/git - -//Executable for running MPI programs. -MPIEXEC_EXECUTABLE:FILEPATH=MPIEXEC_EXECUTABLE-NOTFOUND - -//Maximum number of processors available to run MPI applications. -MPIEXEC_MAX_NUMPROCS:STRING=20 - -//Flag used by MPI to specify the number of processes for mpiexec; -// the next option will be the number of processes. -MPIEXEC_NUMPROC_FLAG:STRING=-n - -//These flags will be placed after all flags passed to mpiexec. -MPIEXEC_POSTFLAGS:STRING= - -//These flags will be directly before the executable that is being -// run by mpiexec. -MPIEXEC_PREFLAGS:STRING= - -//MPI Fortran additional include directories -MPI_Fortran_ADDITIONAL_INCLUDE_DIRS:STRING= - -//MPI compiler for Fortran -MPI_Fortran_COMPILER:FILEPATH=MPI_Fortran_COMPILER-NOTFOUND - -//MPI Fortran compiler wrapper include directories -MPI_Fortran_COMPILER_INCLUDE_DIRS:STRING= - -//MPI Fortran compilation definitions -MPI_Fortran_COMPILE_DEFINITIONS:STRING= - -//MPI Fortran compilation flags -MPI_Fortran_COMPILE_OPTIONS:STRING= - -//Path to a file. -MPI_Fortran_F77_HEADER_DIR:PATH=MPI_Fortran_F77_HEADER_DIR-NOTFOUND - -//MPI Fortran libraries to link against -MPI_Fortran_LIB_NAMES:STRING= - -//MPI Fortran linker flags -MPI_Fortran_LINK_FLAGS:STRING= - -//Path to a file. -MPI_Fortran_MODULE_DIR:PATH=MPI_Fortran_MODULE_DIR-NOTFOUND - -//Arguments to supply to pkg-config -PKG_CONFIG_ARGN:STRING= - -//pkg-config executable -PKG_CONFIG_EXECUTABLE:FILEPATH=/usr/bin/pkg-config - -//Build enabling linkage to programs using OpenCoarrays -PSBLAS_USE_OpenCoarrays:BOOL=OFF - -//Value Computed by CMake -psblas_BINARY_DIR:STATIC=/home/stack/test_psblas/psblas3/build - -//Value Computed by CMake -psblas_IS_TOP_LEVEL:STATIC=ON - -//Value Computed by CMake -psblas_SOURCE_DIR:STATIC=/home/stack/test_psblas/psblas3 - - -######################## -# INTERNAL cache entries -######################## - -//ADVANCED property for variable: CMAKE_ADDR2LINE -CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_AR -CMAKE_AR-ADVANCED:INTERNAL=1 -//STRINGS property for variable: CMAKE_BUILD_TYPE -CMAKE_BUILD_TYPE-STRINGS:INTERNAL=Debug;Release;MinSizeRel;RelWithDebInfo;CodeCoverage -//This is the directory where this CMakeCache.txt was created -CMAKE_CACHEFILE_DIR:INTERNAL=/home/stack/test_psblas/psblas3/build -//Major version of cmake used to create the current loaded cache -CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 -//Minor version of cmake used to create the current loaded cache -CMAKE_CACHE_MINOR_VERSION:INTERNAL=26 -//Patch version of cmake used to create the current loaded cache -CMAKE_CACHE_PATCH_VERSION:INTERNAL=5 -//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE -CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 -//Path to CMake executable. -CMAKE_COMMAND:INTERNAL=/usr/bin/cmake -//Path to cpack program executable. -CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack -//Path to ctest program executable. -CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest -//ADVANCED property for variable: CMAKE_C_COMPILER -CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER_AR -CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB -CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS -CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG -CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL -CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE -CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO -CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_DLLTOOL -CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 -//Path to cache edit program executable. -CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake -//Executable file format -CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS -CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG -CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL -CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE -CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//Name of external makefile project generator. -CMAKE_EXTRA_GENERATOR:INTERNAL= -//ADVANCED property for variable: CMAKE_Fortran_COMPILER -CMAKE_Fortran_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_Fortran_COMPILER_AR -CMAKE_Fortran_COMPILER_AR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_Fortran_COMPILER_RANLIB -CMAKE_Fortran_COMPILER_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_Fortran_FLAGS -CMAKE_Fortran_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_Fortran_FLAGS_DEBUG -CMAKE_Fortran_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_Fortran_FLAGS_MINSIZEREL -CMAKE_Fortran_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_Fortran_FLAGS_RELEASE -CMAKE_Fortran_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_Fortran_FLAGS_RELWITHDEBINFO -CMAKE_Fortran_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//Name of generator. -CMAKE_GENERATOR:INTERNAL=Unix Makefiles -//Generator instance identifier. -CMAKE_GENERATOR_INSTANCE:INTERNAL= -//Name of generator platform. -CMAKE_GENERATOR_PLATFORM:INTERNAL= -//Name of generator toolset. -CMAKE_GENERATOR_TOOLSET:INTERNAL= -//Source directory with the top level CMakeLists.txt file for this -// project -CMAKE_HOME_DIRECTORY:INTERNAL=/home/stack/test_psblas/psblas3 -//Install .so files without execute permission. -CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0 -//ADVANCED property for variable: CMAKE_LINKER -CMAKE_LINKER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MAKE_PROGRAM -CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS -CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG -CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL -CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE -CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_NM -CMAKE_NM-ADVANCED:INTERNAL=1 -//number of local generators -CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 -//ADVANCED property for variable: CMAKE_OBJCOPY -CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_OBJDUMP -CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 -//Platform information initialized -CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_RANLIB -CMAKE_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_READELF -CMAKE_READELF-ADVANCED:INTERNAL=1 -//Path to CMake installation. -CMAKE_ROOT:INTERNAL=/usr/share/cmake -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS -CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG -CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL -CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE -CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH -CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SKIP_RPATH -CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS -CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG -CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL -CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE -CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STRIP -CMAKE_STRIP-ADVANCED:INTERNAL=1 -//uname command -CMAKE_UNAME:INTERNAL=/usr/bin/uname -//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE -CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 -//Details about finding Git -FIND_PACKAGE_MESSAGE_DETAILS_Git:INTERNAL=[/usr/bin/git][v2.43.5()] -//ADVANCED property for variable: GIT_EXECUTABLE -GIT_EXECUTABLE-ADVANCED:INTERNAL=1 -//Test HAVE_EXTENDS_TYPE_OF -HAVE_EXTENDS_TYPE_OF:INTERNAL=1 -//Test HAVE_FINAL -HAVE_FINAL:INTERNAL=1 -//Test HAVE_FLUSH_STMT -HAVE_FLUSH_STMT:INTERNAL=1 -//Result of TRY_COMPILE -HAVE_INT_SIZE:INTERNAL=TRUE -//Test HAVE_ISO_FORTRAN_ENV -HAVE_ISO_FORTRAN_ENV:INTERNAL=1 -//Result of TRY_COMPILE -HAVE_LONG_SIZE:INTERNAL=TRUE -//Test HAVE_MOLD -HAVE_MOLD:INTERNAL=1 -//Test HAVE_MOVE_ALLOC -HAVE_MOVE_ALLOC:INTERNAL=1 -//Test HAVE_SAME_TYPE_AS -HAVE_SAME_TYPE_AS:INTERNAL=1 -//Have include stddef.h -HAVE_STDDEF_H:INTERNAL=1 -//Have include stdint.h -HAVE_STDINT_H:INTERNAL=1 -//Have include sys/types.h -HAVE_SYS_TYPES_H:INTERNAL=1 -//Result of TRY_COMPILE -HAVE_VOID_P_SIZE:INTERNAL=TRUE -//Test HAVE_VOLATILE -HAVE_VOLATILE:INTERNAL=1 -//CHECK_TYPE_SIZE: sizeof(int) -INT_SIZE:INTERNAL=4 -//CHECK_TYPE_SIZE: sizeof(long) -LONG_SIZE:INTERNAL=8 -//ADVANCED property for variable: MPIEXEC_EXECUTABLE -MPIEXEC_EXECUTABLE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPIEXEC_MAX_NUMPROCS -MPIEXEC_MAX_NUMPROCS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPIEXEC_NUMPROC_FLAG -MPIEXEC_NUMPROC_FLAG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPIEXEC_POSTFLAGS -MPIEXEC_POSTFLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPIEXEC_PREFLAGS -MPIEXEC_PREFLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_ADDITIONAL_INCLUDE_DIRS -MPI_Fortran_ADDITIONAL_INCLUDE_DIRS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_COMPILER -MPI_Fortran_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_COMPILER_INCLUDE_DIRS -MPI_Fortran_COMPILER_INCLUDE_DIRS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_COMPILE_DEFINITIONS -MPI_Fortran_COMPILE_DEFINITIONS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_COMPILE_OPTIONS -MPI_Fortran_COMPILE_OPTIONS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_F77_HEADER_DIR -MPI_Fortran_F77_HEADER_DIR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_LIB_NAMES -MPI_Fortran_LIB_NAMES-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_LINK_FLAGS -MPI_Fortran_LINK_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: MPI_Fortran_MODULE_DIR -MPI_Fortran_MODULE_DIR-ADVANCED:INTERNAL=1 -MPI_Fortran_PKG_CFLAGS:INTERNAL= -MPI_Fortran_PKG_CFLAGS_I:INTERNAL= -MPI_Fortran_PKG_CFLAGS_OTHER:INTERNAL= -MPI_Fortran_PKG_FOUND:INTERNAL= -MPI_Fortran_PKG_INCLUDEDIR:INTERNAL= -MPI_Fortran_PKG_LIBDIR:INTERNAL= -MPI_Fortran_PKG_LIBS:INTERNAL= -MPI_Fortran_PKG_LIBS_L:INTERNAL= -MPI_Fortran_PKG_LIBS_OTHER:INTERNAL= -MPI_Fortran_PKG_LIBS_PATHS:INTERNAL= -MPI_Fortran_PKG_MODULE_NAME:INTERNAL= -MPI_Fortran_PKG_PREFIX:INTERNAL= -MPI_Fortran_PKG_STATIC_CFLAGS:INTERNAL= -MPI_Fortran_PKG_STATIC_CFLAGS_I:INTERNAL= -MPI_Fortran_PKG_STATIC_CFLAGS_OTHER:INTERNAL= -MPI_Fortran_PKG_STATIC_LIBDIR:INTERNAL= -MPI_Fortran_PKG_STATIC_LIBS:INTERNAL= -MPI_Fortran_PKG_STATIC_LIBS_L:INTERNAL= -MPI_Fortran_PKG_STATIC_LIBS_OTHER:INTERNAL= -MPI_Fortran_PKG_STATIC_LIBS_PATHS:INTERNAL= -MPI_Fortran_PKG_VERSION:INTERNAL= -MPI_Fortran_PKG_mpi-fort_INCLUDEDIR:INTERNAL= -MPI_Fortran_PKG_mpi-fort_LIBDIR:INTERNAL= -MPI_Fortran_PKG_mpi-fort_PREFIX:INTERNAL= -MPI_Fortran_PKG_mpi-fort_VERSION:INTERNAL= -//Result of TRY_COMPILE -MPI_RESULT_Fortran_test_mpi_F08_MODULE:INTERNAL=FALSE -//Result of TRY_COMPILE -MPI_RESULT_Fortran_test_mpi_F77_HEADER:INTERNAL=FALSE -//Result of TRY_COMPILE -MPI_RESULT_Fortran_test_mpi_F77_HEADER_NOKIND:INTERNAL=FALSE -//Result of TRY_COMPILE -MPI_RESULT_Fortran_test_mpi_F90_MODULE:INTERNAL=FALSE -//ADVANCED property for variable: PKG_CONFIG_ARGN -PKG_CONFIG_ARGN-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: PKG_CONFIG_EXECUTABLE -PKG_CONFIG_EXECUTABLE-ADVANCED:INTERNAL=1 -//CHECK_TYPE_SIZE: sizeof(void *) -VOID_P_SIZE:INTERNAL=8 -//linker supports push/pop state -_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE -__pkg_config_checked_MPI_Fortran_PKG:INTERNAL=1 - diff --git a/build/CMakeFiles/3.26.5/CMakeCCompiler.cmake b/build/CMakeFiles/3.26.5/CMakeCCompiler.cmake deleted file mode 100644 index 835f98017..000000000 --- a/build/CMakeFiles/3.26.5/CMakeCCompiler.cmake +++ /dev/null @@ -1,72 +0,0 @@ -set(CMAKE_C_COMPILER "/usr/bin/gcc") -set(CMAKE_C_COMPILER_ARG1 "") -set(CMAKE_C_COMPILER_ID "GNU") -set(CMAKE_C_COMPILER_VERSION "11.5.0") -set(CMAKE_C_COMPILER_VERSION_INTERNAL "") -set(CMAKE_C_COMPILER_WRAPPER "") -set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") -set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") -set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") -set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") -set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") -set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") -set(CMAKE_C17_COMPILE_FEATURES "c_std_17") -set(CMAKE_C23_COMPILE_FEATURES "c_std_23") - -set(CMAKE_C_PLATFORM_ID "Linux") -set(CMAKE_C_SIMULATE_ID "") -set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") -set(CMAKE_C_SIMULATE_VERSION "") - - - - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_MT "") -set(CMAKE_COMPILER_IS_GNUCC 1) -set(CMAKE_C_COMPILER_LOADED 1) -set(CMAKE_C_COMPILER_WORKS TRUE) -set(CMAKE_C_ABI_COMPILED TRUE) - -set(CMAKE_C_COMPILER_ENV_VAR "CC") - -set(CMAKE_C_COMPILER_ID_RUN 1) -set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) -set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) -set(CMAKE_C_LINKER_PREFERENCE 10) - -# Save compiler ABI information. -set(CMAKE_C_SIZEOF_DATA_PTR "8") -set(CMAKE_C_COMPILER_ABI "ELF") -set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") -set(CMAKE_C_LIBRARY_ARCHITECTURE "") - -if(CMAKE_C_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_C_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") -endif() - -if(CMAKE_C_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "") -endif() - -set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") -if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) - set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") -endif() - - - - - -set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/11/include;/usr/local/include;/usr/include") -set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") -set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/11;/usr/lib64;/lib64;/usr/lib") -set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/CMakeFiles/3.26.5/CMakeDetermineCompilerABI_C.bin b/build/CMakeFiles/3.26.5/CMakeDetermineCompilerABI_C.bin deleted file mode 100755 index 17c078b1d58388cb90c60d287bf4f74395b7b6c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17448 zcmeHOU2Ggz6+XM0I8K|yPSPLKgl2%KY7n0FI*D;znvUbYUCD7w?4(6WnT$PSd&GLz z?9Ntp)k2^J;Z`l?fgcGWRYIyjyp*bHi&VhHs8z*7(+3a_eMo^y6%-nN6`?B2IrpBk zo*8eVP$7`eTzTi*^WF2Ed*{rZnR`9=etu|lIGsv?q%<4>(u{UXLHY>ry-z5Wv0m5? z7TgLSgcd|L;m=YfBy~>YuhY6fWGmZcP!g|$GD=zzxmRfbBBg~SiMO6C&T84US*s$U zUF*bCMXUp#pU4_lATrET^%>d^7?#ek+{-+XVIIZCGPSvNMDs+x!MqDBg-78c-Z=Bd znJ03E?L|sFsg3mO<#_gHEYwKX(jWzsp^gA?-o4Dbm+eIkvb{*EgVMxXf%|^y8)x2% zq1?a<$5G^d4TDIj?~}-*xLj+J%Y1_CyV7-7O=*uJS%qxTpXxc3ExMgWzf@c7T^Wps%VxJCP`juO>Qf_QCn0?fRte)Us%vor>s0=;`_FvrwXb~m*-fkPg)P4w{Q8SM z4?QD3s7|t>M11N4lBi66f?bOw&aNhgw7Ej*{)adX8mg5RVI%O6w4)V(wQoH=wf!hTw)itHf?H%ZIGCx zFdDm2m+SlN*S>+>B8^WXoi5yMsSNcMih-oJL%8^&vWp>Ht{vf*LO5NgBqb3@B9KHN zi9iy8BmzkUk_aRb_elrV@|I%uZuAk38{PWf|b$V2u`(t7G z^-t%Qf0KXscNfPehjOdASM#sD(z4Tn`izfBkZB13I{i z9kkXj%(U&p$&2u*z31-g$6~1MKAB&B>+J{X_4>=3vxubbTU%M1S#Mn1J`2eH508@J z@@X#2@(YUn+UJpTw-1U(;t&c>kU&YcVK-n(y2 z)uZCvh%D8Tq$C1K1d<3O5lAACL?DSk5`iQFNd%GzBoRm=@ZX6*s_|v5d3}Yk;p2T( z{{gQ&W4jAM<#bo?ePPS7!tvp$zF^7rDrL_-T`3&3N5+N=b`$De&xa1wR9x z9xY5xjt<#FV}phMF|<(S&Xj)|*C7xgwI_4uew6erZspy2-9ovFauVhJ7wh#ol$7Y( zDy7r|Cm^-hp4zi*ODla7r|*KaW+0E8+sI&WOFLm*_;V5CLbJ%Kv`3UMBs?j737P@kZIZ$s$#) zr6#$`<=2sdXw+}Lkqd?p2KkBR9~f5D*2^ZV|IEvUK1QW)#sE-*}v zY;~#XdJEMouGh}uzZE)5<-jwiVPd@RAWRJOjHlQ50N(bB|pFlRW+Q~K3Rzv z_B_eJR*>gV)c!h<=UEiTry<8Lif?Q5tth@7q#s1_9RRrgC7v?S*4Xb6F3VsqeW9uS zPLTIP)P5Jp`yh(%hGx&R4F0!J_60=k@o8^aVMygOa1(Si#czhaO>uepM_pw=-fnUH z7BJ3Q5s=;wo8Zs&2#CrN{H3r&`j5c|d6doUClF8LTUYKqHV4{WLikGT`pz*f?{BgH z9A;9me!kQ`N{`|%1smi4L&V8H#O|#hEBlSt@eRbAwf~~B-=P*+VHWq8>2y6dAO$;s zR$5Uq)DhqSzQ9Dd}BZS0pdIHEDb(itVyL85pTzS8}FZMi0?{oyiZ?c`*=V972*c_ z42!oA-Ed#rb@OTzAL>A#wV> ztXtVn{JcI&e$ZatEe_jf5#O1E|_p26XS?Nllbet9Vcl_i*|IP;$E*5>Dz zkP^~t8hAuZ2aY+P@dgI44!`JC`i~Z{aeis0Y_ET(v8Vi5bnN<0X+u%b4}zi>DaEtJ zN{3JMA5))pY~0K>_^Gk}V}${PaR6x#<+(IJcmnK^(c?$^NA2Uo!xKZ3_GJH2{33*g zu?=O`HEttQO%Hvd0^4()zyTE_bW4ifWQIy~$C>R`%l4d8a%neO;W%2ke#x#?Jr|vn z@Zc70H8^wd1C}0x*$Y1HT$`#^*{9n3X4|;4jlOEpsneFXru*2`r2sIiOY?yURQ+-(qS#o5r{@p>OzJ0K2Hqkbse55rSq0Mc=D0)6xyTSrGjz|=49TNAXWpO2 zy2|Ja59UGu^J6`D&6U&gynF<<8O(tfcMN#hxsn~N^v;-{H! zaAooKGYpSohD?PoQxh}*`M(FdQFTe4^rM8i^N7;d06KBOiJU-o;i zu;KoOrOw3b|0%*@zRVY1V7?pUOZ)|X6*Dw8Snw|4akX8L407 zHq21nasDC$N5qi*h$?aqX5`wCiOk<#$Z5i$7&5wfJ%{O%O5EkT iY(-3Bry2U#afg6~4QhIPN31>n6c%T0B4sNriX4@dL*p?fA7GBgZjLng&5T8Sk#`75nP! zY#LXk4GJl8lL&)&^hXf^3Goo1Mn$L(Xt#tm2@jDJR8RJD+h(7L5ix1w3jxpU6$ z?0RfUK?0$<$mb%~Wi z6^dvUHGnLGpDIgG+Bufb`t1UiwPY6niM%GvNU2uHYosOwOKu@b9?L^i-+d&Rhbr<; z5$_c7ST>M7OO7YT1b-#Y9FfMO3@nIgL`W8D5D#eqfk17Zy6XTujp=7KjnMmjN zw(RZdZ0T$d<}$&J(gNFsbzq+w9JxvO_lW{x6h?V0R*{b7!H!3t`_|mi`x9TkIbVF` zmBd(E-=pjU>qHw&$fqVr9n1J9fw#Cpj^bh)0j$vl$9+*;@b@o*=K*)~bIT(5eT(2v zEP{V;5&YMS;6m3YQ<=1$vkcSHb)gUK*s90kW_&V{v*PBCt$oQ%I=;ggPsZ&s_matp zjA@w$`pIPVbUqa~6H%c%VEuM8Va4?rcyr*$$xXyfJvwEWMigqa?Hne#xTR;ZRw9$m zIZ?~i&@d;#N{3DurCmxHiL?Nnn}S`j1A!FgI%QE5j8O}tc3a+vr3`BdfmQ^fw&CFL zP;Z~UG1%5F1|!?Xc8v9m=v@$1?stCZfA&A@i$3_LKxg9q@%_(!5l+K^xE?S}SpEl) ze7;S+{y7+d{i1`)&)le@nH9zv0WShx1pfCU@R#~` zzM<{EP^%qWemW$CcA#MSi>I{xKdC(?8(-{r4&dT-&%?I9S%n{b|(ws28OEQ`B*ackThH{}^?g+MPQh^+!<0DcZSN(6K$?KM&2EzEzufPTT+d z+~|&ha3OqBJAVAZMyP&uADF*75v*_i6i|df`(tHwRy(|98Z5NK%S{xU=B?GRYZrs| zu3b_*Q{TJ~dB;eC{gAZp=tZ&NqBb+9J@Mj=+7t5u&G(dc`l7W896U)5YKvzk>YMw^ ze5`-p79Vg${>q!QnHSF90ekV(@|S?%yXDyIv59iyFn(x%{$4cHK6wFe;vd4$Y5V7W zcdye9j}{NE`obtoEe|}MuSfOxGO5}&1>gB+9>&I(IoCQk``_?cD;`GE^EKLjF#g?v zlUDs>NO&C4v+BiSQ9FKM{>@^sK~cr=0|J0LC^>#$4zPVP_bTLYVyqpOpf+>->@MWl z>LXV|(PIO^#)2Z)I_%Kh0{KL1j&Xn|ZdS1b;LYzMg;KB!Wb9|Ab~aWT|`) zmU_vHfENKT0$v2X2zU|jBH%^9i+~paF9QF51hQAC(uqov@2BvaJWQ;=W~(KgKl$eJ zddje_Q08*t@psbreh$-IqblW9aw`OX*SwZ=zUR4`^b_Qdt z-)Mt8u}no(em97+K;``HpGxh!3=1JO*+Q%)$)faap{h#APX)6i`Tmi=`FjW9g&I}n z7~f4gw|h6)@wb0mKfG&{`=gLOybP8)*9*6gQm>_Qa`Rsk{9So<13KyZ_z20JBqvDj zA$bo;*Sld3SATm{IBy1f*7@3uaA}Rl z59k$ZKlFC@R+3?t~W(hw$Ud+?D;pXQQ@%PYJ=4SIE@maoI8*b~`CECnweUs|M z@GX@B5Zopjr<`^Hc*fS{iU-6lSA3bc(-mJ{8Ye6L*ObP`N_<6W9IeD_h1>WO5SIuZ zw<_%~6+He`;+Khn%QzMgaMhr=R@$!=iYs1M>Wh{3^`+}fB@Vq*QJs*?2gDVn^(4;1 zfM^s2SNkhV*R4wXRf4ZqmH2AmHeLqA8o}SWSK7nXL{*)T%m?6VrMco)iD6fqucDQ% z0)nr$)%Z1H*KV}}^ntcayj-jRLBVBRJ}BY-rjUUK(#?K5;C@jj_*^A(fvZ;#7j*72 zK1DdsPZ+-oGCon>Uu++yd*SDUr@GbgKMFYd=lKrWV)_yMd}85o{4L;a?Vkr6{qPtg zpXCCEfx-6R$5)t^$t|pOfQI>CRK#zJF!B6lvH0LT$_M>z>Rq)@iM6%J-#MH0-B zbjz3&0OYJZeB2lnaOxCGS#u#YU$N!+hEC8ERojpxp-`;#cF!Yunc>7n4`|cmZDYEufu}4 z(oV;68GXt~$8c#JFE0bPj+Jhe-0@tFYmFs!ITJa;jr_n_My{yNM9N+;qw^#z9)9EvGn_NW*fytO&}f|71EJ z%$k{O+_a`0(0D!pOFrZJ$iVkHE zG6M;e%O))m#NI4|R(vmPWiJYv85w|Je2TjLR1CPR*$lh?+YHWwVNo*$C@OjVc)m5p1n|jJW;M z2sVe|hfQVvZsPAI{%$D4#Pu_u_y0>!hWuVMf>a=Wfe5oUEcr0&S`fdl0){bR|AOWP zIK{zKJrl>eoaug0oP34&3h}c}W5^R+lHaJ}^L%cW3~%MYkRRr=+wWHK`F?zkCMWz{ zkL|15{~+;8)hMcMs@MX*eQ>7g`X7Zt+<)ftdjCU;&1$zrXg;3u0$JGFW#t|C>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_C) -# define COMPILER_ID "SunPro" -# if __SUNPRO_C >= 0x5100 - /* __SUNPRO_C = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# endif - -#elif defined(__HP_cc) -# define COMPILER_ID "HP" - /* __HP_cc = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) - -#elif defined(__DECC) -# define COMPILER_ID "Compaq" - /* __DECC_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) - -#elif defined(__IBMC__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 -# define COMPILER_ID "XL" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__TINYC__) -# define COMPILER_ID "TinyCC" - -#elif defined(__BCC__) -# define COMPILER_ID "Bruce" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) -# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - -#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) -# define COMPILER_ID "SDCC" -# if defined(__SDCC_VERSION_MAJOR) -# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) -# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) -# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) -# else - /* SDCC = VRP */ -# define COMPILER_VERSION_MAJOR DEC(SDCC/100) -# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) -# define COMPILER_VERSION_PATCH DEC(SDCC % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if !defined(__STDC__) && !defined(__clang__) -# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) -# define C_VERSION "90" -# else -# define C_VERSION -# endif -#elif __STDC_VERSION__ > 201710L -# define C_VERSION "23" -#elif __STDC_VERSION__ >= 201710L -# define C_VERSION "17" -#elif __STDC_VERSION__ >= 201000L -# define C_VERSION "11" -#elif __STDC_VERSION__ >= 199901L -# define C_VERSION "99" -#else -# define C_VERSION "90" -#endif -const char* info_language_standard_default = - "INFO" ":" "standard_default[" C_VERSION "]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -#ifdef ID_VOID_MAIN -void main() {} -#else -# if defined(__CLASSIC_C__) -int main(argc, argv) int argc; char *argv[]; -# else -int main(int argc, char* argv[]) -# endif -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} -#endif diff --git a/build/CMakeFiles/3.26.5/CompilerIdC/a.out b/build/CMakeFiles/3.26.5/CompilerIdC/a.out deleted file mode 100755 index 7e669b670c0f23b2a532833b43b7eb3ab6299674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17568 zcmeHPYit}>6+XM0hf|W+Nt%!}Z8M0dBvQTJbsX1mNji>SW64QO?4(5|os4(J_KJO& z-C3|pfru6=H;R-B36OXw6{r+YMJmz$;ZavcEtM*i{y>7NKN8eRRVi&M9tx;rIp^MU z);r@(6e=X7YOcIid<-SQo4V z6K;pwU=<=O@Mo$Lk~$~y4{==}vWe{yD2ca~GD?~Od8^U@L`n-u5^pJ)oYgY5QmZ1N zMeD>$}!*ScqwlB3XsDTy~YzR~c=#B^Pr(9V97c64Zf2dz2j2Na$F|>YpTF&o@Y7$u?!B6O z4FVA~j>j9vDfl5gjoYyn88 z0CmFP@X*0tyFIz51MH!(L$>Rcys2#2_ex`jdUM5sH|9*_JajRYFBaH^txX#mVjCnT zF^tA0)aCg8{IPFhw}|7FNT-YUm?}ekg<>G-%{p9sQQ74>T#g;#SL$#&PEm>?5Je!0 zKoo%}0#O8_2t*NxBJg2|z+anh|Cja9+fCN#m6zH8tgkKj@#+QZq2Dwus@z7By`qK;Pm#i0GT(!Z3>gMkt>u;0E<{b~$>=&2Rv(}mY%I}$#uaf(H zSNzRbRe`HoQ@z-{;}j7WS)%>ZRCs3ZPe|;(YRzA^o`2^a>-j4QEB1o*%2oenbg-Wt zG*vH7Ht)d6i}0zvr}pQu7%H2NS@Una`9QT=ePQJ|BC!*TXBQ`z8rQtT1hW70qhvV$ zrMIp5%EcG^->3Fir#Huta=QO*>)TfBLi4lG{Og5S|NDr)hg0)L_@zd;GHibKl!^1) znuq5aS)%8kHNsE#zkgy;wNo9Z+L57FMk$Iw6oDuLQ3Rq0L=lK05Je!0Koo%}0#O8_ z2;5i%VzoDGjqQgH4;<;v6!SCLoL3shx0EM>c7byH^IoZ(Ef&U8Dy7p&ok{JLOzH$E z#!SxfCyS;0_%OX)WzZ>QrpGyt?-dKKQ*!a$;iOZ^`Qz!kxWt?Fy#m!zu9Y1*tXdV@ zp19k<=Fxk+v3IN0PojJn~WOPv%cl)@!oZ-;@?G21Vkx{Koo%}0#O8_2t*Nx zA`nF&ia->BC;}hS2;fU#N*DNhYWe1pzR{$#Rtub1nJTxA^(UFPjdl4hdOPbfmAZv> zi@$@WIT|G?|NGTyk@Ry3lZ5`p8)erDlT`IBHOU1ozljt~c`e{0EVr`U%u>W^&Rk%B zQtwH|*RT}+)v9jKdA7%w&#HYA7o3JF{Ru8-`u|PHcjeb=fPwF=DV110!txs|pJF-K z+uLpI!si3K4V?DleBWqKwRfcMO7Amv9rawpa(pgmZQl+5h4tRu&~v=IVM&oi zkn3I$$EzmCE{LzK^{XJh4x|qR@%2z!Pg7Trfacn|kUAKj>$SjTzTO1!4IuZAAifdg zz7fPXL8I$l0-p}b`hlQ5-W5!<9#Z)PY=Nx}@sEPl5SP0|&{YEDE*QpdfsvDD0HpiK z3V5#?08u%BzZjNC|1sFWLfOcE6!AFTo#nh^bD&iygr5x^-)Y9>J}>rP#!L*B_Ltg6 z=~4W}V0rwXMx6XZ=)C%svR{52Uqif6`>(ZM?1E!a9BDYS8(Z53f}^|xIfc1m(nj7H$(Vqh__&W7-3vn16)FUV|*=) zaKDo0>0cxq`-8#w9ZdKq`!_=VSI4#gaC|l)PJZP6@i_b0iui{3@_6nf9OK+&n#xl4 zs~2&Dx%J`%;v3`3uX`EgXFbsOeU#eO7GOrUiN$pRsL(7!>bh3ymrf{5M`_2>~Q1&bMF=GanR#(}6-plaI9+o{X~y~xRVzUL-WjVXP@&7R46 znk_HVun`mGGB-#qp0jOS8pmN$)z&IPAAvVv*I6g04vDUb-^6K!UaSEm%X4|(nLz26 zw49b)wt#E%W+16Xz*B`va;8+A@k;(&9W+tN;%dmO%TUk3p;qdMNiv^y%F~c^=L%Sb zmVQZ>NIR4nD>jy4h#Vq7lDZKjeT*k0srO-7Q60OaH_iQR+C_$FnxQ+MW=J00Ir(e` zD=wlh+$3jmn9o_dK0s zoG9y_Wj@Qr%2x6uKaM||g9=~9ld{g&z_R*OyUsA!iL#zA<4#%cyR)8*dAaTjJQU)~ z_~Jo&$%@HP+oesIe=ipO1LwTb{&NXa8J}am?Eflu5pKVOIL*<8zrg$j=Fc*Z_A!P( z;mb%Xix`;-U!DteaYN-f0Gg;oKI+rwP@y@z@MZk`1oP#2g0x@kMAG<(o(YI9-aLCv2dvX zC9%`mk}miqETCi0r%P>|EB{|W{*M6lKT5)rQe#%!ou|k z|10gtwV0v0!~7pIa6k;%kEkNIV@8e*naF(b^|U7Ri6QgD{g;ZR@3V;#yY^_! u;tK;^hwsFn#6ynD8pI@anxVHd`?P!@= 1900 - PRINT *, 'INFO:simulate_version[019.00]' -# elif _MSC_VER >= 1800 - PRINT *, 'INFO:simulate_version[018.00]' -# elif _MSC_VER >= 1700 - PRINT *, 'INFO:simulate_version[017.00]' -# elif _MSC_VER >= 1600 - PRINT *, 'INFO:simulate_version[016.00]' -# elif _MSC_VER >= 1500 - PRINT *, 'INFO:simulate_version[015.00]' -# elif _MSC_VER >= 1400 - PRINT *, 'INFO:simulate_version[014.00]' -# elif _MSC_VER >= 1310 - PRINT *, 'INFO:simulate_version[013.01]' -# else - PRINT *, 'INFO:simulate_version[013.00]' -# endif -#endif -#if defined(__INTEL_LLVM_COMPILER) - PRINT *, 'INFO:compiler[IntelLLVM]' -! __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and -! later. Look for 6 digit vs. 8 digit version number to decide encoding. -! VVVV is no smaller than the current year when a version is released. -# if __INTEL_LLVM_COMPILER < 1000000 -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) -# else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) -# endif -#elif defined(__INTEL_COMPILER) && __INTEL_COMPILER == 201900 - PRINT *, 'INFO:compiler[IntelLLVM]' -! ifx 2021.1 forgot to define __INTEL_LLVM_COMPILER. -! Instead it defines __INTEL_COMPILER == 201900. -# define COMPILER_VERSION_MAJOR DEC(2021) -# define COMPILER_VERSION_MINOR DEC(1) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -#elif defined(__INTEL_COMPILER) || defined(__ICC) - PRINT *, 'INFO:compiler[Intel]' -! __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later. -# if __INTEL_COMPILER < 2021 -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) -! The third version component from --version is an update index, -! but no macro is provided for it. -# define COMPILER_VERSION_PATCH DEC(0) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -#elif defined(__SUNPRO_F95) - PRINT *, 'INFO:compiler[SunPro]' -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F95>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_F95>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_F95 & 0xF) -#elif defined(__SUNPRO_F90) - PRINT *, 'INFO:compiler[SunPro]' -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F90>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_F90>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_F90 & 0xF) -#elif defined(_CRAYFTN) - PRINT *, 'INFO:compiler[Cray]' -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) -# if defined(_RELEASE_PATCHLEVEL) -# define COMPILER_VERSION_PATCH DEC(_RELEASE_PATCHLEVEL) -# endif -#elif defined(__G95__) - PRINT *, 'INFO:compiler[G95]' -# define COMPILER_VERSION_MAJOR DEC(__G95__) -# define COMPILER_VERSION_MINOR DEC(__G95_MINOR__) -#elif defined(__PATHSCALE__) - PRINT *, 'INFO:compiler[PathScale]' -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif -#elif defined(__ABSOFT__) - PRINT *, 'INFO:compiler[Absoft]' -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) - PRINT *, 'INFO:compiler[LCC]' -# define COMPILER_VERSION_MAJOR DEC(1) -# define COMPILER_VERSION_MINOR DEC(__LCC__ - 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -#elif defined(__GNUC__) - PRINT *, 'INFO:compiler[GNU]' -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -#elif defined(__IBMC__) -# if defined(__COMPILER_VER__) - PRINT *, 'INFO:compiler[zOS]' -# elif __IBMC__ >= 800 - PRINT *, 'INFO:compiler[XL]' -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) -# else - PRINT *, 'INFO:compiler[VisualAge]' -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) -# endif -#elif defined(__NVCOMPILER) || defined(__NVCOMPILER_LLVM__) - PRINT *, 'INFO:compiler[NVHPC]' -# if defined(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# else -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# endif -# if defined(__NVCOMPILER_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# else -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# endif -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# elif defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif -#elif defined(__PGI) - PRINT *, 'INFO:compiler[PGI]' -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif -#elif defined(__FLANG) - PRINT *, 'INFO:compiler[Flang]' -# define COMPILER_VERSION_MAJOR DEC(__FLANG_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__FLANG_MINOR__) -# if defined(__FLANG_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__FLANG_PATCHLEVEL__) -# endif -#elif defined(__flang__) - PRINT *, 'INFO:compiler[LLVMFlang]' -# define COMPILER_VERSION_MAJOR DEC(__flang_major__) -# define COMPILER_VERSION_MINOR DEC(__flang_minor__) -# if defined(__flang_patchlevel__) -# define COMPILER_VERSION_PATCH DEC(__flang_patchlevel__) -# endif -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) - PRINT *, 'INFO:compiler[VisualAge]' -#elif defined(__hpux) || defined(__hpux__) - PRINT *, 'INFO:compiler[HP]' -#elif defined(NAGFOR) - PRINT *, 'INFO:compiler[NAG]' -#define COMPILER_VERSION_MAJOR DEC(__NAG_COMPILER_RELEASE/10) -#define COMPILER_VERSION_MINOR DEC(__NAG_COMPILER_RELEASE % 10) -#define COMPILER_VERSION_PATCH DEC(__NAG_COMPILER_BUILD) -#elif defined(__FUJITSU) - PRINT *, 'INFO:compiler[Fujitsu]' -# if defined(__FRT_major__) -# define COMPILER_VERSION_MAJOR DEC(__FRT_major__) -# define COMPILER_VERSION_MINOR DEC(__FRT_minor__) -# define COMPILER_VERSION_PATCH DEC(__FRT_patchlevel__) -# elif defined(__FRT_version__) - PRINT *, 'INFO:compiler_version['//__FRT_version__//']' -# endif -#else - PRINT *, 'INFO:compiler[]' -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - PRINT *, 'INFO:compiler_wrapper[CrayPrgEnv]' -#endif - -#if 0 -! Identify the platform -#endif -#if defined(__linux) || defined(__linux__) || defined(linux) - PRINT *, 'INFO:platform[Linux]' -#elif defined(__CYGWIN__) - PRINT *, 'INFO:platform[Cygwin]' -#elif defined(__MINGW32__) - PRINT *, 'INFO:platform[MinGW]' -#elif defined(__APPLE__) - PRINT *, 'INFO:platform[Darwin]' -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) - PRINT *, 'INFO:platform[Windows]' -#elif defined(__FreeBSD__) || defined(__FreeBSD) - PRINT *, 'INFO:platform[FreeBSD]' -#elif defined(__NetBSD__) || defined(__NetBSD) - PRINT *, 'INFO:platform[NetBSD]' -#elif defined(__OpenBSD__) || defined(__OPENBSD) - PRINT *, 'INFO:platform[OpenBSD]' -#elif defined(__sun) || defined(sun) - PRINT *, 'INFO:platform[SunOS]' -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) - PRINT *, 'INFO:platform[AIX]' -#elif defined(__hpux) || defined(__hpux__) - PRINT *, 'INFO:platform[HP-UX]' -#elif defined(__HAIKU__) - PRINT *, 'INFO:platform[Haiku]' -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) - PRINT *, 'INFO:platform[BeOS]' -#elif defined(__QNX__) || defined(__QNXNTO__) - PRINT *, 'INFO:platform[QNX]' -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) - PRINT *, 'INFO:platform[Tru64]' -#elif defined(__riscos) || defined(__riscos__) - PRINT *, 'INFO:platform[RISCos]' -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) - PRINT *, 'INFO:platform[SINIX]' -#elif defined(__UNIX_SV__) - PRINT *, 'INFO:platform[UNIX_SV]' -#elif defined(__bsdos__) - PRINT *, 'INFO:platform[BSDOS]' -#elif defined(_MPRAS) || defined(MPRAS) - PRINT *, 'INFO:platform[MP-RAS]' -#elif defined(__osf) || defined(__osf__) - PRINT *, 'INFO:platform[OSF1]' -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) - PRINT *, 'INFO:platform[SCO_SV]' -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) - PRINT *, 'INFO:platform[ULTRIX]' -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) - PRINT *, 'INFO:platform[Xenix]' -#else - PRINT *, 'INFO:platform[]' -#endif -#if defined(_WIN32) && (defined(__INTEL_COMPILER) || defined(__ICC)) -# if defined(_M_IA64) - PRINT *, 'INFO:arch[IA64]' -# elif defined(_M_X64) || defined(_M_AMD64) - PRINT *, 'INFO:arch[x64]' -# elif defined(_M_IX86) - PRINT *, 'INFO:arch[X86]' -# endif -#endif - -#if 0 -! Encode compiler version digits -#endif -#define DEC_8(n) (((n) / 10000000) % 10) -#define DEC_7(n) (((n) / 1000000) % 10) -#define DEC_6(n) (((n) / 100000) % 10) -#define DEC_5(n) (((n) / 10000) % 10) -#define DEC_4(n) (((n) / 1000) % 10) -#define DEC_3(n) (((n) / 100) % 10) -#define DEC_2(n) (((n) / 10) % 10) -#define DEC_1(n) (((n) ) % 10) -#define HEX_8(n) ((n)>>28 & 0xF) -#define HEX_7(n) ((n)>>24 & 0xF) -#define HEX_6(n) ((n)>>20 & 0xF) -#define HEX_5(n) ((n)>>16 & 0xF) -#define HEX_4(n) ((n)>>12 & 0xF) -#define HEX_3(n) ((n)>>8 & 0xF) -#define HEX_2(n) ((n)>>4 & 0xF) -#define HEX_1(n) ((n) & 0xF) - -#if defined(COMPILER_VERSION_MAJOR) -# undef DEC -# undef HEX -# define DEC(n) DEC_1(n) -# define HEX(n) HEX_1(n) -# if COMPILER_VERSION_MAJOR == 0 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[0]' -# elif COMPILER_VERSION_MAJOR == 1 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[1]' -# elif COMPILER_VERSION_MAJOR == 2 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[2]' -# elif COMPILER_VERSION_MAJOR == 3 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[3]' -# elif COMPILER_VERSION_MAJOR == 4 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[4]' -# elif COMPILER_VERSION_MAJOR == 5 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[5]' -# elif COMPILER_VERSION_MAJOR == 6 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[6]' -# elif COMPILER_VERSION_MAJOR == 7 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[7]' -# elif COMPILER_VERSION_MAJOR == 8 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[8]' -# elif COMPILER_VERSION_MAJOR == 9 - PRINT *, 'INFO:compiler_version_MAJOR_digit_1[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_2(n) -# define HEX(n) HEX_2(n) -# if COMPILER_VERSION_MAJOR == 0 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[0]' -# elif COMPILER_VERSION_MAJOR == 1 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[1]' -# elif COMPILER_VERSION_MAJOR == 2 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[2]' -# elif COMPILER_VERSION_MAJOR == 3 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[3]' -# elif COMPILER_VERSION_MAJOR == 4 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[4]' -# elif COMPILER_VERSION_MAJOR == 5 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[5]' -# elif COMPILER_VERSION_MAJOR == 6 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[6]' -# elif COMPILER_VERSION_MAJOR == 7 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[7]' -# elif COMPILER_VERSION_MAJOR == 8 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[8]' -# elif COMPILER_VERSION_MAJOR == 9 - PRINT *, 'INFO:compiler_version_MAJOR_digit_2[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_3(n) -# define HEX(n) HEX_3(n) -# if COMPILER_VERSION_MAJOR == 0 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[0]' -# elif COMPILER_VERSION_MAJOR == 1 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[1]' -# elif COMPILER_VERSION_MAJOR == 2 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[2]' -# elif COMPILER_VERSION_MAJOR == 3 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[3]' -# elif COMPILER_VERSION_MAJOR == 4 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[4]' -# elif COMPILER_VERSION_MAJOR == 5 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[5]' -# elif COMPILER_VERSION_MAJOR == 6 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[6]' -# elif COMPILER_VERSION_MAJOR == 7 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[7]' -# elif COMPILER_VERSION_MAJOR == 8 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[8]' -# elif COMPILER_VERSION_MAJOR == 9 - PRINT *, 'INFO:compiler_version_MAJOR_digit_3[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_4(n) -# define HEX(n) HEX_4(n) -# if COMPILER_VERSION_MAJOR == 0 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[0]' -# elif COMPILER_VERSION_MAJOR == 1 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[1]' -# elif COMPILER_VERSION_MAJOR == 2 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[2]' -# elif COMPILER_VERSION_MAJOR == 3 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[3]' -# elif COMPILER_VERSION_MAJOR == 4 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[4]' -# elif COMPILER_VERSION_MAJOR == 5 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[5]' -# elif COMPILER_VERSION_MAJOR == 6 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[6]' -# elif COMPILER_VERSION_MAJOR == 7 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[7]' -# elif COMPILER_VERSION_MAJOR == 8 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[8]' -# elif COMPILER_VERSION_MAJOR == 9 - PRINT *, 'INFO:compiler_version_MAJOR_digit_4[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_5(n) -# define HEX(n) HEX_5(n) -# if COMPILER_VERSION_MAJOR == 0 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[0]' -# elif COMPILER_VERSION_MAJOR == 1 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[1]' -# elif COMPILER_VERSION_MAJOR == 2 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[2]' -# elif COMPILER_VERSION_MAJOR == 3 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[3]' -# elif COMPILER_VERSION_MAJOR == 4 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[4]' -# elif COMPILER_VERSION_MAJOR == 5 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[5]' -# elif COMPILER_VERSION_MAJOR == 6 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[6]' -# elif COMPILER_VERSION_MAJOR == 7 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[7]' -# elif COMPILER_VERSION_MAJOR == 8 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[8]' -# elif COMPILER_VERSION_MAJOR == 9 - PRINT *, 'INFO:compiler_version_MAJOR_digit_5[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_6(n) -# define HEX(n) HEX_6(n) -# if COMPILER_VERSION_MAJOR == 0 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[0]' -# elif COMPILER_VERSION_MAJOR == 1 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[1]' -# elif COMPILER_VERSION_MAJOR == 2 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[2]' -# elif COMPILER_VERSION_MAJOR == 3 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[3]' -# elif COMPILER_VERSION_MAJOR == 4 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[4]' -# elif COMPILER_VERSION_MAJOR == 5 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[5]' -# elif COMPILER_VERSION_MAJOR == 6 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[6]' -# elif COMPILER_VERSION_MAJOR == 7 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[7]' -# elif COMPILER_VERSION_MAJOR == 8 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[8]' -# elif COMPILER_VERSION_MAJOR == 9 - PRINT *, 'INFO:compiler_version_MAJOR_digit_6[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_7(n) -# define HEX(n) HEX_7(n) -# if COMPILER_VERSION_MAJOR == 0 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[0]' -# elif COMPILER_VERSION_MAJOR == 1 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[1]' -# elif COMPILER_VERSION_MAJOR == 2 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[2]' -# elif COMPILER_VERSION_MAJOR == 3 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[3]' -# elif COMPILER_VERSION_MAJOR == 4 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[4]' -# elif COMPILER_VERSION_MAJOR == 5 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[5]' -# elif COMPILER_VERSION_MAJOR == 6 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[6]' -# elif COMPILER_VERSION_MAJOR == 7 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[7]' -# elif COMPILER_VERSION_MAJOR == 8 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[8]' -# elif COMPILER_VERSION_MAJOR == 9 - PRINT *, 'INFO:compiler_version_MAJOR_digit_7[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_8(n) -# define HEX(n) HEX_8(n) -# if COMPILER_VERSION_MAJOR == 0 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[0]' -# elif COMPILER_VERSION_MAJOR == 1 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[1]' -# elif COMPILER_VERSION_MAJOR == 2 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[2]' -# elif COMPILER_VERSION_MAJOR == 3 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[3]' -# elif COMPILER_VERSION_MAJOR == 4 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[4]' -# elif COMPILER_VERSION_MAJOR == 5 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[5]' -# elif COMPILER_VERSION_MAJOR == 6 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[6]' -# elif COMPILER_VERSION_MAJOR == 7 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[7]' -# elif COMPILER_VERSION_MAJOR == 8 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[8]' -# elif COMPILER_VERSION_MAJOR == 9 - PRINT *, 'INFO:compiler_version_MAJOR_digit_8[9]' -# endif - -#endif -#if defined(COMPILER_VERSION_MINOR) -# undef DEC -# undef HEX -# define DEC(n) DEC_1(n) -# define HEX(n) HEX_1(n) -# if COMPILER_VERSION_MINOR == 0 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[0]' -# elif COMPILER_VERSION_MINOR == 1 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[1]' -# elif COMPILER_VERSION_MINOR == 2 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[2]' -# elif COMPILER_VERSION_MINOR == 3 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[3]' -# elif COMPILER_VERSION_MINOR == 4 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[4]' -# elif COMPILER_VERSION_MINOR == 5 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[5]' -# elif COMPILER_VERSION_MINOR == 6 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[6]' -# elif COMPILER_VERSION_MINOR == 7 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[7]' -# elif COMPILER_VERSION_MINOR == 8 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[8]' -# elif COMPILER_VERSION_MINOR == 9 - PRINT *, 'INFO:compiler_version_MINOR_digit_1[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_2(n) -# define HEX(n) HEX_2(n) -# if COMPILER_VERSION_MINOR == 0 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[0]' -# elif COMPILER_VERSION_MINOR == 1 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[1]' -# elif COMPILER_VERSION_MINOR == 2 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[2]' -# elif COMPILER_VERSION_MINOR == 3 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[3]' -# elif COMPILER_VERSION_MINOR == 4 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[4]' -# elif COMPILER_VERSION_MINOR == 5 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[5]' -# elif COMPILER_VERSION_MINOR == 6 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[6]' -# elif COMPILER_VERSION_MINOR == 7 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[7]' -# elif COMPILER_VERSION_MINOR == 8 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[8]' -# elif COMPILER_VERSION_MINOR == 9 - PRINT *, 'INFO:compiler_version_MINOR_digit_2[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_3(n) -# define HEX(n) HEX_3(n) -# if COMPILER_VERSION_MINOR == 0 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[0]' -# elif COMPILER_VERSION_MINOR == 1 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[1]' -# elif COMPILER_VERSION_MINOR == 2 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[2]' -# elif COMPILER_VERSION_MINOR == 3 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[3]' -# elif COMPILER_VERSION_MINOR == 4 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[4]' -# elif COMPILER_VERSION_MINOR == 5 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[5]' -# elif COMPILER_VERSION_MINOR == 6 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[6]' -# elif COMPILER_VERSION_MINOR == 7 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[7]' -# elif COMPILER_VERSION_MINOR == 8 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[8]' -# elif COMPILER_VERSION_MINOR == 9 - PRINT *, 'INFO:compiler_version_MINOR_digit_3[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_4(n) -# define HEX(n) HEX_4(n) -# if COMPILER_VERSION_MINOR == 0 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[0]' -# elif COMPILER_VERSION_MINOR == 1 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[1]' -# elif COMPILER_VERSION_MINOR == 2 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[2]' -# elif COMPILER_VERSION_MINOR == 3 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[3]' -# elif COMPILER_VERSION_MINOR == 4 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[4]' -# elif COMPILER_VERSION_MINOR == 5 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[5]' -# elif COMPILER_VERSION_MINOR == 6 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[6]' -# elif COMPILER_VERSION_MINOR == 7 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[7]' -# elif COMPILER_VERSION_MINOR == 8 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[8]' -# elif COMPILER_VERSION_MINOR == 9 - PRINT *, 'INFO:compiler_version_MINOR_digit_4[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_5(n) -# define HEX(n) HEX_5(n) -# if COMPILER_VERSION_MINOR == 0 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[0]' -# elif COMPILER_VERSION_MINOR == 1 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[1]' -# elif COMPILER_VERSION_MINOR == 2 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[2]' -# elif COMPILER_VERSION_MINOR == 3 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[3]' -# elif COMPILER_VERSION_MINOR == 4 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[4]' -# elif COMPILER_VERSION_MINOR == 5 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[5]' -# elif COMPILER_VERSION_MINOR == 6 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[6]' -# elif COMPILER_VERSION_MINOR == 7 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[7]' -# elif COMPILER_VERSION_MINOR == 8 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[8]' -# elif COMPILER_VERSION_MINOR == 9 - PRINT *, 'INFO:compiler_version_MINOR_digit_5[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_6(n) -# define HEX(n) HEX_6(n) -# if COMPILER_VERSION_MINOR == 0 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[0]' -# elif COMPILER_VERSION_MINOR == 1 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[1]' -# elif COMPILER_VERSION_MINOR == 2 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[2]' -# elif COMPILER_VERSION_MINOR == 3 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[3]' -# elif COMPILER_VERSION_MINOR == 4 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[4]' -# elif COMPILER_VERSION_MINOR == 5 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[5]' -# elif COMPILER_VERSION_MINOR == 6 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[6]' -# elif COMPILER_VERSION_MINOR == 7 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[7]' -# elif COMPILER_VERSION_MINOR == 8 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[8]' -# elif COMPILER_VERSION_MINOR == 9 - PRINT *, 'INFO:compiler_version_MINOR_digit_6[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_7(n) -# define HEX(n) HEX_7(n) -# if COMPILER_VERSION_MINOR == 0 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[0]' -# elif COMPILER_VERSION_MINOR == 1 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[1]' -# elif COMPILER_VERSION_MINOR == 2 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[2]' -# elif COMPILER_VERSION_MINOR == 3 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[3]' -# elif COMPILER_VERSION_MINOR == 4 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[4]' -# elif COMPILER_VERSION_MINOR == 5 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[5]' -# elif COMPILER_VERSION_MINOR == 6 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[6]' -# elif COMPILER_VERSION_MINOR == 7 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[7]' -# elif COMPILER_VERSION_MINOR == 8 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[8]' -# elif COMPILER_VERSION_MINOR == 9 - PRINT *, 'INFO:compiler_version_MINOR_digit_7[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_8(n) -# define HEX(n) HEX_8(n) -# if COMPILER_VERSION_MINOR == 0 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[0]' -# elif COMPILER_VERSION_MINOR == 1 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[1]' -# elif COMPILER_VERSION_MINOR == 2 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[2]' -# elif COMPILER_VERSION_MINOR == 3 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[3]' -# elif COMPILER_VERSION_MINOR == 4 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[4]' -# elif COMPILER_VERSION_MINOR == 5 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[5]' -# elif COMPILER_VERSION_MINOR == 6 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[6]' -# elif COMPILER_VERSION_MINOR == 7 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[7]' -# elif COMPILER_VERSION_MINOR == 8 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[8]' -# elif COMPILER_VERSION_MINOR == 9 - PRINT *, 'INFO:compiler_version_MINOR_digit_8[9]' -# endif - -#endif -#if defined(COMPILER_VERSION_PATCH) -# undef DEC -# undef HEX -# define DEC(n) DEC_1(n) -# define HEX(n) HEX_1(n) -# if COMPILER_VERSION_PATCH == 0 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[0]' -# elif COMPILER_VERSION_PATCH == 1 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[1]' -# elif COMPILER_VERSION_PATCH == 2 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[2]' -# elif COMPILER_VERSION_PATCH == 3 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[3]' -# elif COMPILER_VERSION_PATCH == 4 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[4]' -# elif COMPILER_VERSION_PATCH == 5 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[5]' -# elif COMPILER_VERSION_PATCH == 6 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[6]' -# elif COMPILER_VERSION_PATCH == 7 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[7]' -# elif COMPILER_VERSION_PATCH == 8 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[8]' -# elif COMPILER_VERSION_PATCH == 9 - PRINT *, 'INFO:compiler_version_PATCH_digit_1[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_2(n) -# define HEX(n) HEX_2(n) -# if COMPILER_VERSION_PATCH == 0 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[0]' -# elif COMPILER_VERSION_PATCH == 1 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[1]' -# elif COMPILER_VERSION_PATCH == 2 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[2]' -# elif COMPILER_VERSION_PATCH == 3 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[3]' -# elif COMPILER_VERSION_PATCH == 4 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[4]' -# elif COMPILER_VERSION_PATCH == 5 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[5]' -# elif COMPILER_VERSION_PATCH == 6 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[6]' -# elif COMPILER_VERSION_PATCH == 7 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[7]' -# elif COMPILER_VERSION_PATCH == 8 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[8]' -# elif COMPILER_VERSION_PATCH == 9 - PRINT *, 'INFO:compiler_version_PATCH_digit_2[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_3(n) -# define HEX(n) HEX_3(n) -# if COMPILER_VERSION_PATCH == 0 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[0]' -# elif COMPILER_VERSION_PATCH == 1 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[1]' -# elif COMPILER_VERSION_PATCH == 2 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[2]' -# elif COMPILER_VERSION_PATCH == 3 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[3]' -# elif COMPILER_VERSION_PATCH == 4 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[4]' -# elif COMPILER_VERSION_PATCH == 5 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[5]' -# elif COMPILER_VERSION_PATCH == 6 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[6]' -# elif COMPILER_VERSION_PATCH == 7 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[7]' -# elif COMPILER_VERSION_PATCH == 8 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[8]' -# elif COMPILER_VERSION_PATCH == 9 - PRINT *, 'INFO:compiler_version_PATCH_digit_3[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_4(n) -# define HEX(n) HEX_4(n) -# if COMPILER_VERSION_PATCH == 0 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[0]' -# elif COMPILER_VERSION_PATCH == 1 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[1]' -# elif COMPILER_VERSION_PATCH == 2 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[2]' -# elif COMPILER_VERSION_PATCH == 3 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[3]' -# elif COMPILER_VERSION_PATCH == 4 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[4]' -# elif COMPILER_VERSION_PATCH == 5 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[5]' -# elif COMPILER_VERSION_PATCH == 6 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[6]' -# elif COMPILER_VERSION_PATCH == 7 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[7]' -# elif COMPILER_VERSION_PATCH == 8 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[8]' -# elif COMPILER_VERSION_PATCH == 9 - PRINT *, 'INFO:compiler_version_PATCH_digit_4[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_5(n) -# define HEX(n) HEX_5(n) -# if COMPILER_VERSION_PATCH == 0 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[0]' -# elif COMPILER_VERSION_PATCH == 1 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[1]' -# elif COMPILER_VERSION_PATCH == 2 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[2]' -# elif COMPILER_VERSION_PATCH == 3 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[3]' -# elif COMPILER_VERSION_PATCH == 4 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[4]' -# elif COMPILER_VERSION_PATCH == 5 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[5]' -# elif COMPILER_VERSION_PATCH == 6 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[6]' -# elif COMPILER_VERSION_PATCH == 7 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[7]' -# elif COMPILER_VERSION_PATCH == 8 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[8]' -# elif COMPILER_VERSION_PATCH == 9 - PRINT *, 'INFO:compiler_version_PATCH_digit_5[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_6(n) -# define HEX(n) HEX_6(n) -# if COMPILER_VERSION_PATCH == 0 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[0]' -# elif COMPILER_VERSION_PATCH == 1 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[1]' -# elif COMPILER_VERSION_PATCH == 2 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[2]' -# elif COMPILER_VERSION_PATCH == 3 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[3]' -# elif COMPILER_VERSION_PATCH == 4 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[4]' -# elif COMPILER_VERSION_PATCH == 5 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[5]' -# elif COMPILER_VERSION_PATCH == 6 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[6]' -# elif COMPILER_VERSION_PATCH == 7 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[7]' -# elif COMPILER_VERSION_PATCH == 8 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[8]' -# elif COMPILER_VERSION_PATCH == 9 - PRINT *, 'INFO:compiler_version_PATCH_digit_6[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_7(n) -# define HEX(n) HEX_7(n) -# if COMPILER_VERSION_PATCH == 0 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[0]' -# elif COMPILER_VERSION_PATCH == 1 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[1]' -# elif COMPILER_VERSION_PATCH == 2 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[2]' -# elif COMPILER_VERSION_PATCH == 3 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[3]' -# elif COMPILER_VERSION_PATCH == 4 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[4]' -# elif COMPILER_VERSION_PATCH == 5 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[5]' -# elif COMPILER_VERSION_PATCH == 6 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[6]' -# elif COMPILER_VERSION_PATCH == 7 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[7]' -# elif COMPILER_VERSION_PATCH == 8 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[8]' -# elif COMPILER_VERSION_PATCH == 9 - PRINT *, 'INFO:compiler_version_PATCH_digit_7[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_8(n) -# define HEX(n) HEX_8(n) -# if COMPILER_VERSION_PATCH == 0 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[0]' -# elif COMPILER_VERSION_PATCH == 1 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[1]' -# elif COMPILER_VERSION_PATCH == 2 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[2]' -# elif COMPILER_VERSION_PATCH == 3 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[3]' -# elif COMPILER_VERSION_PATCH == 4 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[4]' -# elif COMPILER_VERSION_PATCH == 5 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[5]' -# elif COMPILER_VERSION_PATCH == 6 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[6]' -# elif COMPILER_VERSION_PATCH == 7 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[7]' -# elif COMPILER_VERSION_PATCH == 8 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[8]' -# elif COMPILER_VERSION_PATCH == 9 - PRINT *, 'INFO:compiler_version_PATCH_digit_8[9]' -# endif - -#endif -#if defined(COMPILER_VERSION_TWEAK) -# undef DEC -# undef HEX -# define DEC(n) DEC_1(n) -# define HEX(n) HEX_1(n) -# if COMPILER_VERSION_TWEAK == 0 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[0]' -# elif COMPILER_VERSION_TWEAK == 1 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[1]' -# elif COMPILER_VERSION_TWEAK == 2 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[2]' -# elif COMPILER_VERSION_TWEAK == 3 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[3]' -# elif COMPILER_VERSION_TWEAK == 4 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[4]' -# elif COMPILER_VERSION_TWEAK == 5 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[5]' -# elif COMPILER_VERSION_TWEAK == 6 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[6]' -# elif COMPILER_VERSION_TWEAK == 7 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[7]' -# elif COMPILER_VERSION_TWEAK == 8 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[8]' -# elif COMPILER_VERSION_TWEAK == 9 - PRINT *, 'INFO:compiler_version_TWEAK_digit_1[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_2(n) -# define HEX(n) HEX_2(n) -# if COMPILER_VERSION_TWEAK == 0 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[0]' -# elif COMPILER_VERSION_TWEAK == 1 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[1]' -# elif COMPILER_VERSION_TWEAK == 2 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[2]' -# elif COMPILER_VERSION_TWEAK == 3 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[3]' -# elif COMPILER_VERSION_TWEAK == 4 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[4]' -# elif COMPILER_VERSION_TWEAK == 5 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[5]' -# elif COMPILER_VERSION_TWEAK == 6 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[6]' -# elif COMPILER_VERSION_TWEAK == 7 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[7]' -# elif COMPILER_VERSION_TWEAK == 8 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[8]' -# elif COMPILER_VERSION_TWEAK == 9 - PRINT *, 'INFO:compiler_version_TWEAK_digit_2[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_3(n) -# define HEX(n) HEX_3(n) -# if COMPILER_VERSION_TWEAK == 0 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[0]' -# elif COMPILER_VERSION_TWEAK == 1 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[1]' -# elif COMPILER_VERSION_TWEAK == 2 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[2]' -# elif COMPILER_VERSION_TWEAK == 3 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[3]' -# elif COMPILER_VERSION_TWEAK == 4 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[4]' -# elif COMPILER_VERSION_TWEAK == 5 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[5]' -# elif COMPILER_VERSION_TWEAK == 6 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[6]' -# elif COMPILER_VERSION_TWEAK == 7 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[7]' -# elif COMPILER_VERSION_TWEAK == 8 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[8]' -# elif COMPILER_VERSION_TWEAK == 9 - PRINT *, 'INFO:compiler_version_TWEAK_digit_3[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_4(n) -# define HEX(n) HEX_4(n) -# if COMPILER_VERSION_TWEAK == 0 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[0]' -# elif COMPILER_VERSION_TWEAK == 1 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[1]' -# elif COMPILER_VERSION_TWEAK == 2 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[2]' -# elif COMPILER_VERSION_TWEAK == 3 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[3]' -# elif COMPILER_VERSION_TWEAK == 4 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[4]' -# elif COMPILER_VERSION_TWEAK == 5 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[5]' -# elif COMPILER_VERSION_TWEAK == 6 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[6]' -# elif COMPILER_VERSION_TWEAK == 7 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[7]' -# elif COMPILER_VERSION_TWEAK == 8 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[8]' -# elif COMPILER_VERSION_TWEAK == 9 - PRINT *, 'INFO:compiler_version_TWEAK_digit_4[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_5(n) -# define HEX(n) HEX_5(n) -# if COMPILER_VERSION_TWEAK == 0 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[0]' -# elif COMPILER_VERSION_TWEAK == 1 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[1]' -# elif COMPILER_VERSION_TWEAK == 2 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[2]' -# elif COMPILER_VERSION_TWEAK == 3 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[3]' -# elif COMPILER_VERSION_TWEAK == 4 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[4]' -# elif COMPILER_VERSION_TWEAK == 5 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[5]' -# elif COMPILER_VERSION_TWEAK == 6 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[6]' -# elif COMPILER_VERSION_TWEAK == 7 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[7]' -# elif COMPILER_VERSION_TWEAK == 8 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[8]' -# elif COMPILER_VERSION_TWEAK == 9 - PRINT *, 'INFO:compiler_version_TWEAK_digit_5[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_6(n) -# define HEX(n) HEX_6(n) -# if COMPILER_VERSION_TWEAK == 0 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[0]' -# elif COMPILER_VERSION_TWEAK == 1 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[1]' -# elif COMPILER_VERSION_TWEAK == 2 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[2]' -# elif COMPILER_VERSION_TWEAK == 3 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[3]' -# elif COMPILER_VERSION_TWEAK == 4 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[4]' -# elif COMPILER_VERSION_TWEAK == 5 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[5]' -# elif COMPILER_VERSION_TWEAK == 6 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[6]' -# elif COMPILER_VERSION_TWEAK == 7 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[7]' -# elif COMPILER_VERSION_TWEAK == 8 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[8]' -# elif COMPILER_VERSION_TWEAK == 9 - PRINT *, 'INFO:compiler_version_TWEAK_digit_6[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_7(n) -# define HEX(n) HEX_7(n) -# if COMPILER_VERSION_TWEAK == 0 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[0]' -# elif COMPILER_VERSION_TWEAK == 1 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[1]' -# elif COMPILER_VERSION_TWEAK == 2 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[2]' -# elif COMPILER_VERSION_TWEAK == 3 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[3]' -# elif COMPILER_VERSION_TWEAK == 4 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[4]' -# elif COMPILER_VERSION_TWEAK == 5 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[5]' -# elif COMPILER_VERSION_TWEAK == 6 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[6]' -# elif COMPILER_VERSION_TWEAK == 7 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[7]' -# elif COMPILER_VERSION_TWEAK == 8 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[8]' -# elif COMPILER_VERSION_TWEAK == 9 - PRINT *, 'INFO:compiler_version_TWEAK_digit_7[9]' -# endif - -# undef DEC -# undef HEX -# define DEC(n) DEC_8(n) -# define HEX(n) HEX_8(n) -# if COMPILER_VERSION_TWEAK == 0 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[0]' -# elif COMPILER_VERSION_TWEAK == 1 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[1]' -# elif COMPILER_VERSION_TWEAK == 2 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[2]' -# elif COMPILER_VERSION_TWEAK == 3 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[3]' -# elif COMPILER_VERSION_TWEAK == 4 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[4]' -# elif COMPILER_VERSION_TWEAK == 5 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[5]' -# elif COMPILER_VERSION_TWEAK == 6 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[6]' -# elif COMPILER_VERSION_TWEAK == 7 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[7]' -# elif COMPILER_VERSION_TWEAK == 8 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[8]' -# elif COMPILER_VERSION_TWEAK == 9 - PRINT *, 'INFO:compiler_version_TWEAK_digit_8[9]' -# endif - -#endif - - END diff --git a/build/CMakeFiles/3.26.5/CompilerIdFortran/a.out b/build/CMakeFiles/3.26.5/CompilerIdFortran/a.out deleted file mode 100755 index 6a1b24fe433f446d50e356b86b6d1ed96aa03431..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17864 zcmeHP4Qw366`s4xj{}Kq0s%uPxq<@;jn6*EHoiuDC2iG0Dq0Cap@txwRB94hQB|mFBLpRZ{1_2RpfuO_X5PE~ z$=;ods#aBRoZC0=&G){UeLFil`!o4U^V$}#$0Im-#cF}tSg9sWYAeKnRZ=C}3NcS; z!Y>wySzws~KTVdPR5_M^^r`}uMTGN#M87i3NU7Q6l~NOeCASbI`k6_itdd2umC90- zDjof1VwQA4`^WOW3l)wf<1+R6Rk`qMDnoLvBo%_C)emDcQK8@ytCSzh2PiIIC&_-O zqTdnnJ3@XeO9{`CPq@if#jE4A)J1j$Zr$jSvC=#CDwsy!&^q= z)6}<~{Fap~o@M2l%&@FcX2Fu{y9N9(F4IkXm^-PyY{x;Pc(U|R1(k!bp1PXK!AQkm zEIu+?F}k9zqOK;8N(8DU0^5ak;Nfp=zg2k0#01(XjPh7qLOPb8Ec@JoV;^sO@c#S1 z{pMd6KH;DL(!R%;1M5T#CiLenfjXA)5B2FL^zplZvCVGwWm)WZfPFsvoT&v2ZuV_i z>_5q3e=Ljr`7Cy!>-|HCxSle?Nki9#-qy8Fk3^Hv{#eS0CcD-(4kqH!u5iy_RF%1x z^!Fu_Mly^%`aQ{*5!EB$CiILQ3sZg3q~1FaPKJAdTH!2^RMgND!$vF-Pg$)*Xf**a zoa_gb4!x?E+CCJH#RceGCHAdaGz?*`P8Rh77_}g3ca4N2Lt$e84OM99RlwG@ZEG6! z>cH|E(c03{+11(5uCIXbQSw56Qh(UDJn%OMItTZIUwrdXIIVo*Vz6Pt^1~qc{2BP@ zTQH(}#Z^>(^d=2qa*QIA)Q?&0*8V$XvGcis4reX)Ig&wb$}~-8a2V%v9}RwsorYYA zTVkD5oh}IyzrteYF;Es1HiZZjB2b7xAp(U66e3WF!2d}E-Y>c8rUk=AUPy1(^G|yg({OgJTN!VA*em;e&v;E8S^Y1lj6#ppkx0?mn{th?( zFXZQMHE9(89^yasiLL#oQFXRInxFq|lSc6$ApVEV0&M>yZv0=#&%e{8QT$WHA217$ zztWBWyZQOAGielm*=JS%JoI;4d=8`PjL*~g`6o>p#jg>6+$_NMC*1gdo1eemq*43> z#9wR{Ab*J)|NHs*XPY#Ne>d?z`LQiNPoe6JkI$R;{Mu{MDE?=Nzuhdr_IJ4Pek8JHfjjFT#H{|Dk+oVzaMOUl-^RQWf?SI6L|CapxJ53tJUq$=@vjF)k z-T3d!&wrgsqxd%w|Dm(C_#8&n8J`{b`6o>p#Xm;;akBv1pK#;@m z0^~1o<9{wc|7?>+@gE`nCqJ~s=P6X3@p&yj|6Y?u@t-CBcC!H6-{Ho8IzNA_Nu&7v z*Qow^>TkC8pGMW${yDz9=kMDljp7dx|HEbhw*L_~{%i8{?=)!?|1j|f%mU=EbmL!@ zpZ_|OM)7}#_z!(xi_c+Ho$bcjf2rH)$0AG2$;a3y{AA z)ZGX7%h}xa6Q$$#eG(cUnF>90>(oQdko^Nd<^tq}(sE7w8lO5IJ9#FZK6Val&wwTl z?w9jHIp5CAu(6+HQmCcSn;cct57EYq+_iQ;)>@V}>5w90Y8BT=g_@ z%Qsg|i?3#yxY}vr>ZXaiVVbxVxo~ammiX0X-(L%^dYXJW<7eT^89xgyXZ$Rmbs%N4)%4PA|)O#jQ?U#z%X@w4J`#m|b%6+bI3SNyEFT=BEwa>dVzQ}Jtpm!fHW z1_a4NKg=(}{6gQ#DvN^x`T_cmSgag4klaYJkL2AX(XX|! zvEIJ~9tkY<2ZMpyK$X9`s=B7?hTx6uN>k z#`@$)JRXbp`}=!)oi&Ly8|%aIc%mm3cP(zct-fk>d8E3kwl3@s1S(ToQjzFzsuI5I zt_=6YD&h$v8t4@p*4Hl=8yf3_qOqlZMGj!g+WLxMj`G$9;8@>=Y|ZsmBDMiGwl>7# zF#{@;)lgn>l41kH*Um<)w;~xGO!Tso!={`aMs=RyeH9J_tqtX#<>6pvZO0RI46#o; zF~6iTmTnjx6E4lc!{fv#jTde_6Xf4VW0)HzLH;a1Er#2=Fh`rYt@lx#7`|M|2f;0) z@yUww!Lv19e_^-#1h22K+h>S-U3q3^#z#ATR%TqZ+h=FSPrJQHxQ#nLF-P!tWyfD2 zc-*twFBCjJ+U;<)pt#!Y^Mv2kUYzNRc6^E8eq*;oFZF9ylg#_XMS|ClSPOk(zUYQm zG0p^EyJxOf)-oSFt>EjF-M&D$jgvlcso?M7?RdC~(DlY{F9Wk?HOagWuA)t@cD{Pr zU3`MCvQGPzBGj$fjCh%xA>K>djG(NBp9e~~zxfFe0_ld|0Cuk^7JRM}T;Qq|v`;yX z?*Q3(Uc&hMA>*;^FSZZUgYfgX#Q*1DM}D5?AQsc}@bkDF$3KDHt^FT>9eH?+kclP1?`zZ$AXPA7(ku z{_|t7&xidQqxj2bY0#cFiMO^+W)S6g7W@yuUh2}$ zePEwYzE<&P!@(aQY4}G4<>rTgL=eBBvX2LWK`gLpuwmSjle=ASA^aN(->Ivlnigtqj4j-Mf4@Z zL$JzfWN2s$xL7nDCpRUP+)-~(R?M=8GOowTx-W<}E zG1Sy4^wzZ)r|fOD}ptiBr-0XaqQkB?46>LIxlZ9iZ+!5CLD- zl!xlq%7gPj93G1GLahnlf=xhHpvd6Zi2$5lLvYrJ0Nv5ZT?aevjoi~f*f5f@o)H7i z(0@mls?PnZI zoR{IV3)cC5V2b=Ts+*4yx1Y>n7i6%h?9cZNRa9X&0l9wm=ly?-{MQhU?=N-1|BO=jz$ z69*mseBaewu3Uba@l+W;{%rm|WQyTOr%UGkjMwcu@vO7_3;32;{P{laKm`~fF-~cw z&h~eq0Q(Nt&-Z)$|1j|Xw}Aa06Z>%-&wve&Kl}52;n7M&3qA}=fi3&9{0MATf0*bi zY?TtEDFwFd$I=VVR)4-v(8%9;ybxJJpjfh8DLf8c1u8a)|DB&#{wp004psaU9CeZ< diff --git a/build/CMakeFiles/CMakeConfigureLog.yaml b/build/CMakeFiles/CMakeConfigureLog.yaml deleted file mode 100644 index c53072372..000000000 --- a/build/CMakeFiles/CMakeConfigureLog.yaml +++ /dev/null @@ -1,1990 +0,0 @@ - ---- -events: - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:204 (message)" - - "CMakeLists.txt:33 (project)" - message: | - The system is: Linux - 5.14.0-503.26.1.el9_5.x86_64 - x86_64 - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/usr/share/cmake/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt:33 (project)" - message: | - Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. - Compiler: /usr/bin/gcc - Build flags: - Id flags: - - The output was: - 0 - - - Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" - - The C compiler identification is GNU, found in: - /home/stack/test_psblas/psblas3/build/CMakeFiles/3.26.5/CompilerIdC/a.out - - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/usr/share/cmake/Modules/CMakeDetermineFortranCompiler.cmake:179 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt:33 (project)" - message: | - Compiling the Fortran compiler identification source file "CMakeFortranCompilerId.F" succeeded. - Compiler: /usr/bin/gfortran - Build flags: - Id flags: -v - - The output was: - 0 - Driving: /usr/bin/gfortran -v CMakeFortranCompilerId.F -l gfortran -l m -shared-libgcc - Using built-in specs. - COLLECT_GCC=/usr/bin/gfortran - COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) - COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'a-' - /usr/libexec/gcc/x86_64-redhat-linux/11/f951 CMakeFortranCompilerId.F -ffixed-form -cpp=/tmp/cc7AsLCb.f90 -quiet -v CMakeFortranCompilerId.F -quiet -dumpdir a- -dumpbase CMakeFortranCompilerId.F -dumpbase-ext .F -mtune=generic -march=x86-64-v2 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-redhat-linux/11/finclude -fpre-include=/usr/include/finclude/math-vector-fortran.h -o /tmp/cc2kjZnf.s - GNU Fortran (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux) - compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5), GMP version 6.2.0, MPFR version 4.1.0-p9, MPC version 1.2.1, isl version none - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../x86_64-redhat-linux/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/lib/gcc/x86_64-redhat-linux/11/finclude - /usr/lib/gcc/x86_64-redhat-linux/11/include - /usr/local/include - /usr/include - End of search list. - GNU Fortran2008 (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux) - compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5), GMP version 6.2.0, MPFR version 4.1.0-p9, MPC version 1.2.1, isl version none - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'a-' - as -v --64 -o /tmp/ccyIjjRf.o /tmp/cc2kjZnf.s - GNU assembler version 2.35.2 (x86_64-redhat-linux) using BFD version version 2.35.2-54.el9 - Reading specs from /usr/lib/gcc/x86_64-redhat-linux/11/libgfortran.spec - rename spec lib to liborig - COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'a-' - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'a.' - /usr/libexec/gcc/x86_64-redhat-linux/11/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccqbY7hk.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lquadmath -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/11 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../.. /tmp/ccyIjjRf.o -lgfortran -lm -lgcc_s -lgcc -lquadmath -lm -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/11/crtend.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o - COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'a.' - - - Compilation of the Fortran compiler identification source "CMakeFortranCompilerId.F" produced "a.out" - - The Fortran compiler identification is GNU, found in: - /home/stack/test_psblas/psblas3/build/CMakeFiles/3.26.5/CompilerIdFortran/a.out - - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" - - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:33 (project)" - checks: - - "Detecting C compiler ABI info" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vZUzbr" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vZUzbr" - cmakeVariables: - CMAKE_C_FLAGS: "" - CMAKE_C_FLAGS_DEBUG: "-g" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "CMAKE_C_ABI_COMPILED" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vZUzbr - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_544f0/fast && /usr/bin/gmake -f CMakeFiles/cmTC_544f0.dir/build.make CMakeFiles/cmTC_544f0.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vZUzbr' - Building C object CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o - /usr/bin/gcc -v -o CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c - Using built-in specs. - COLLECT_GCC=/usr/bin/gcc - OFFLOAD_TARGET_NAMES=nvptx-none - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_544f0.dir/' - /usr/libexec/gcc/x86_64-redhat-linux/11/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_544f0.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64-v2 -version -o /tmp/ccKJvLd5.s - GNU C17 (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux) - compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5), GMP version 6.2.0, MPFR version 4.1.0-p9, MPC version 1.2.1, isl version none - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../x86_64-redhat-linux/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/lib/gcc/x86_64-redhat-linux/11/include - /usr/local/include - /usr/include - End of search list. - GNU C17 (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux) - compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5), GMP version 6.2.0, MPFR version 4.1.0-p9, MPC version 1.2.1, isl version none - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - Compiler executable checksum: 908485988b78eea6a554fb7238e689b4 - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_544f0.dir/' - as -v --64 -o CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o /tmp/ccKJvLd5.s - GNU assembler version 2.35.2 (x86_64-redhat-linux) using BFD version version 2.35.2-54.el9 - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.' - Linking C executable cmTC_544f0 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_544f0.dir/link.txt --verbose=1 - /usr/bin/gcc -v CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o -o cmTC_544f0 - Using built-in specs. - COLLECT_GCC=/usr/bin/gcc - COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_544f0' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'cmTC_544f0.' - /usr/libexec/gcc/x86_64-redhat-linux/11/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc0OYvRE.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_544f0 /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/11 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../.. CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-redhat-linux/11/crtend.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_544f0' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'cmTC_544f0.' - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vZUzbr' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" - - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:33 (project)" - message: | - Parsed C implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/lib/gcc/x86_64-redhat-linux/11/include] - add: [/usr/local/include] - add: [/usr/include] - end of search list found - collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/11/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/11/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/lib/gcc/x86_64-redhat-linux/11/include;/usr/local/include;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:152 (message)" - - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:33 (project)" - message: | - Parsed C implicit link information: - link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - ignore line: [Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vZUzbr] - ignore line: [] - ignore line: [Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_544f0/fast && /usr/bin/gmake -f CMakeFiles/cmTC_544f0.dir/build.make CMakeFiles/cmTC_544f0.dir/build] - ignore line: [gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vZUzbr'] - ignore line: [Building C object CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o] - ignore line: [/usr/bin/gcc -v -o CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/gcc] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c c++ fortran lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_544f0.dir/'] - ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/11/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_544f0.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64-v2 -version -o /tmp/ccKJvLd5.s] - ignore line: [GNU C17 (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux)] - ignore line: [ compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5) GMP version 6.2.0 MPFR version 4.1.0-p9 MPC version 1.2.1 isl version none] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../x86_64-redhat-linux/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/11/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [GNU C17 (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux)] - ignore line: [ compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5) GMP version 6.2.0 MPFR version 4.1.0-p9 MPC version 1.2.1 isl version none] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [Compiler executable checksum: 908485988b78eea6a554fb7238e689b4] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_544f0.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o /tmp/ccKJvLd5.s] - ignore line: [GNU assembler version 2.35.2 (x86_64-redhat-linux) using BFD version version 2.35.2-54.el9] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.'] - ignore line: [Linking C executable cmTC_544f0] - ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_544f0.dir/link.txt --verbose=1] - ignore line: [/usr/bin/gcc -v CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o -o cmTC_544f0 ] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/gcc] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c c++ fortran lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) ] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_544f0' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'cmTC_544f0.'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/11/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc0OYvRE.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_544f0 /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/11 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../.. CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-redhat-linux/11/crtend.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/11/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/cc0OYvRE.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_544f0] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/11] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/11] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/11/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/11/../../..] - arg [CMakeFiles/cmTC_544f0.dir/CMakeCCompilerABI.c.o] ==> ignore - arg [-lgcc] ==> lib [gcc] - arg [--push-state] ==> ignore - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--pop-state] ==> ignore - arg [-lc] ==> lib [c] - arg [-lgcc] ==> lib [gcc] - arg [--push-state] ==> ignore - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--pop-state] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/11/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/crtend.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/11] ==> [/usr/lib/gcc/x86_64-redhat-linux/11] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/11/../../..] ==> [/usr/lib] - implicit libs: [gcc;gcc_s;c;gcc;gcc_s] - implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/11/crtend.o;/usr/lib64/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/11;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" - - "/usr/share/cmake/Modules/CMakeTestFortranCompiler.cmake:20 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:33 (project)" - checks: - - "Detecting Fortran compiler ABI info" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-kiW4pQ" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-kiW4pQ" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "CMAKE_Fortran_ABI_COMPILED" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-kiW4pQ - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_23114/fast && /usr/bin/gmake -f CMakeFiles/cmTC_23114.dir/build.make CMakeFiles/cmTC_23114.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-kiW4pQ' - Building Fortran object CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o - /usr/bin/gfortran -v -c /usr/share/cmake/Modules/CMakeFortranCompilerABI.F90 -o CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o - Using built-in specs. - COLLECT_GCC=/usr/bin/gfortran - OFFLOAD_TARGET_NAMES=nvptx-none - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) - COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_23114.dir/' - /usr/libexec/gcc/x86_64-redhat-linux/11/f951 /usr/share/cmake/Modules/CMakeFortranCompilerABI.F90 -cpp=/tmp/ccdHSoGv.f90 -quiet -v /usr/share/cmake/Modules/CMakeFortranCompilerABI.F90 -quiet -dumpdir CMakeFiles/cmTC_23114.dir/ -dumpbase CMakeFortranCompilerABI.F90.F90 -dumpbase-ext .F90 -mtune=generic -march=x86-64-v2 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-redhat-linux/11/finclude -fpre-include=/usr/include/finclude/math-vector-fortran.h -o /tmp/cciyyGd1.s - GNU Fortran (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux) - compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5), GMP version 6.2.0, MPFR version 4.1.0-p9, MPC version 1.2.1, isl version none - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../x86_64-redhat-linux/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/lib/gcc/x86_64-redhat-linux/11/finclude - /usr/lib/gcc/x86_64-redhat-linux/11/include - /usr/local/include - /usr/include - End of search list. - GNU Fortran2008 (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux) - compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5), GMP version 6.2.0, MPFR version 4.1.0-p9, MPC version 1.2.1, isl version none - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_23114.dir/' - as -v --64 -o CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o /tmp/cciyyGd1.s - GNU assembler version 2.35.2 (x86_64-redhat-linux) using BFD version version 2.35.2-54.el9 - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.' - Linking Fortran executable cmTC_23114 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_23114.dir/link.txt --verbose=1 - /usr/bin/gfortran -v CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o -o cmTC_23114 - Driving: /usr/bin/gfortran -v CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o -o cmTC_23114 -l gfortran -l m -shared-libgcc - Using built-in specs. - COLLECT_GCC=/usr/bin/gfortran - COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) - Reading specs from /usr/lib/gcc/x86_64-redhat-linux/11/libgfortran.spec - rename spec lib to liborig - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_23114' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'cmTC_23114-' - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_23114' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'cmTC_23114.' - /usr/libexec/gcc/x86_64-redhat-linux/11/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccA0e4rs.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lquadmath -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_23114 /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/11 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../.. CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o -lgfortran -lm -lgcc_s -lgcc -lquadmath -lm -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/11/crtend.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_23114' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'cmTC_23114.' - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-kiW4pQ' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" - - "/usr/share/cmake/Modules/CMakeTestFortranCompiler.cmake:20 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:33 (project)" - message: | - Parsed Fortran implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/lib/gcc/x86_64-redhat-linux/11/finclude] - add: [/usr/lib/gcc/x86_64-redhat-linux/11/include] - add: [/usr/local/include] - add: [/usr/include] - end of search list found - collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/11/finclude] ==> [/usr/lib/gcc/x86_64-redhat-linux/11/finclude] - collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/11/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/11/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/lib/gcc/x86_64-redhat-linux/11/finclude;/usr/lib/gcc/x86_64-redhat-linux/11/include;/usr/local/include;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:152 (message)" - - "/usr/share/cmake/Modules/CMakeTestFortranCompiler.cmake:20 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:33 (project)" - message: | - Parsed Fortran implicit link information: - link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - ignore line: [Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-kiW4pQ] - ignore line: [] - ignore line: [Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_23114/fast && /usr/bin/gmake -f CMakeFiles/cmTC_23114.dir/build.make CMakeFiles/cmTC_23114.dir/build] - ignore line: [gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-kiW4pQ'] - ignore line: [Building Fortran object CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o] - ignore line: [/usr/bin/gfortran -v -c /usr/share/cmake/Modules/CMakeFortranCompilerABI.F90 -o CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/gfortran] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c c++ fortran lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_23114.dir/'] - ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/11/f951 /usr/share/cmake/Modules/CMakeFortranCompilerABI.F90 -cpp=/tmp/ccdHSoGv.f90 -quiet -v /usr/share/cmake/Modules/CMakeFortranCompilerABI.F90 -quiet -dumpdir CMakeFiles/cmTC_23114.dir/ -dumpbase CMakeFortranCompilerABI.F90.F90 -dumpbase-ext .F90 -mtune=generic -march=x86-64-v2 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-redhat-linux/11/finclude -fpre-include=/usr/include/finclude/math-vector-fortran.h -o /tmp/cciyyGd1.s] - ignore line: [GNU Fortran (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux)] - ignore line: [ compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5) GMP version 6.2.0 MPFR version 4.1.0-p9 MPC version 1.2.1 isl version none] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/11/../../../../x86_64-redhat-linux/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/11/finclude] - ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/11/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [GNU Fortran2008 (GCC) version 11.5.0 20240719 (Red Hat 11.5.0-5) (x86_64-redhat-linux)] - ignore line: [ compiled by GNU C version 11.5.0 20240719 (Red Hat 11.5.0-5) GMP version 6.2.0 MPFR version 4.1.0-p9 MPC version 1.2.1 isl version none] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_23114.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o /tmp/cciyyGd1.s] - ignore line: [GNU assembler version 2.35.2 (x86_64-redhat-linux) using BFD version version 2.35.2-54.el9] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.'] - ignore line: [Linking Fortran executable cmTC_23114] - ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_23114.dir/link.txt --verbose=1] - ignore line: [/usr/bin/gfortran -v CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o -o cmTC_23114 ] - ignore line: [Driving: /usr/bin/gfortran -v CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o -o cmTC_23114 -l gfortran -l m -shared-libgcc] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/gfortran] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c c++ fortran lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --without-isl --enable-multilib --with-linker-hash-style=gnu --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC) ] - ignore line: [Reading specs from /usr/lib/gcc/x86_64-redhat-linux/11/libgfortran.spec] - ignore line: [rename spec lib to liborig] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_23114' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'cmTC_23114-'] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/11/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/11/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_23114' '-shared-libgcc' '-mtune=generic' '-march=x86-64-v2' '-dumpdir' 'cmTC_23114.'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/11/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccA0e4rs.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lquadmath -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_23114 /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/11 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/11/../../.. CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o -lgfortran -lm -lgcc_s -lgcc -lquadmath -lm -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/11/crtend.o /usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/11/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccA0e4rs.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lquadmath] ==> ignore - arg [-plugin-opt=-pass-through=-lm] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_23114] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/11] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/11] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/11/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/11/../../..] - arg [CMakeFiles/cmTC_23114.dir/CMakeFortranCompilerABI.F90.o] ==> ignore - arg [-lgfortran] ==> lib [gfortran] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lquadmath] ==> lib [quadmath] - arg [-lm] ==> lib [m] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-redhat-linux/11/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/crtend.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/11] ==> [/usr/lib/gcc/x86_64-redhat-linux/11] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/11/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/11/../../..] ==> [/usr/lib] - implicit libs: [gfortran;m;gcc_s;gcc;quadmath;m;c;gcc_s;gcc] - implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/11/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/11/crtend.o;/usr/lib64/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/11;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FortranCInterface/Detect.cmake:49 (try_compile)" - - "/usr/share/cmake/Modules/FortranCInterface.cmake:224 (include)" - - "CMakeLists.txt:86 (include)" - checks: - - "Detecting Fortran/C Interface" - description: "Fortran/C interface test project" - directories: - source: "/usr/share/cmake/Modules/FortranCInterface" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface" - buildResult: - variable: "FortranCInterface_COMPILED" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile FortranCInterface && /usr/bin/cmake -S/usr/share/cmake/Modules/FortranCInterface -B/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface --check-build-system CMakeFiles/Makefile.cmake 0 - /usr/bin/gmake -f CMakeFiles/Makefile2 FortranCInterface - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - /usr/bin/cmake -S/usr/share/cmake/Modules/FortranCInterface -B/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface --check-build-system CMakeFiles/Makefile.cmake 0 - /usr/bin/cmake -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 39 - /usr/bin/gmake -f CMakeFiles/Makefile2 CMakeFiles/FortranCInterface.dir/all - gmake[2]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - /usr/bin/gmake -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/depend - gmake[3]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - cd /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /usr/share/cmake/Modules/FortranCInterface /usr/share/cmake/Modules/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/DependInfo.cmake - Dependee "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/DependInfo.cmake" is newer than depender "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.internal". - Dependee "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.internal". - Scanning dependencies of target myfort - gmake[3]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - /usr/bin/gmake -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/build - gmake[3]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - [ 2%] Building Fortran object CMakeFiles/myfort.dir/my_module.f90.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /usr/share/cmake/Modules/FortranCInterface/my_module.f90 -o CMakeFiles/myfort.dir/my_module.f90.o - /usr/bin/cmake -E cmake_copy_f90_mod my_module.mod CMakeFiles/myfort.dir/my_module.mod.stamp GNU - /usr/bin/cmake -E touch CMakeFiles/myfort.dir/my_module.f90.o.provides.build - [ 5%] Building Fortran object CMakeFiles/myfort.dir/mymodule.f90.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /usr/share/cmake/Modules/FortranCInterface/mymodule.f90 -o CMakeFiles/myfort.dir/mymodule.f90.o - /usr/bin/cmake -E cmake_copy_f90_mod mymodule.mod CMakeFiles/myfort.dir/mymodule.mod.stamp GNU - /usr/bin/cmake -E touch CMakeFiles/myfort.dir/mymodule.f90.o.provides.build - [ 7%] Building Fortran object CMakeFiles/myfort.dir/mysub.f.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /usr/share/cmake/Modules/FortranCInterface/mysub.f -o CMakeFiles/myfort.dir/mysub.f.o - [ 10%] Building Fortran object CMakeFiles/myfort.dir/my_sub.f.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /usr/share/cmake/Modules/FortranCInterface/my_sub.f -o CMakeFiles/myfort.dir/my_sub.f.o - [ 12%] Linking Fortran static library libmyfort.a - /usr/bin/cmake -P CMakeFiles/myfort.dir/cmake_clean_target.cmake - /usr/bin/cmake -E cmake_link_script CMakeFiles/myfort.dir/link.txt --verbose=1 - /usr/bin/ar qc libmyfort.a CMakeFiles/myfort.dir/mysub.f.o CMakeFiles/myfort.dir/my_sub.f.o CMakeFiles/myfort.dir/mymodule.f90.o CMakeFiles/myfort.dir/my_module.f90.o - /usr/bin/ranlib libmyfort.a - gmake[3]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - [ 12%] Built target myfort - /usr/bin/gmake -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/depend - gmake[3]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - cd /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /usr/share/cmake/Modules/FortranCInterface /usr/share/cmake/Modules/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/DependInfo.cmake - Dependee "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/DependInfo.cmake" is newer than depender "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.internal". - Dependee "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.internal". - Scanning dependencies of target symbols - gmake[3]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - /usr/bin/gmake -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/build - gmake[3]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - [ 15%] Building C object CMakeFiles/symbols.dir/mymodule_.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/mymodule_.c.o -c /usr/share/cmake/Modules/FortranCInterface/mymodule_.c - [ 17%] Building C object CMakeFiles/symbols.dir/my_module_.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/my_module_.c.o -c /usr/share/cmake/Modules/FortranCInterface/my_module_.c - [ 20%] Building C object CMakeFiles/symbols.dir/MY_MODULE.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/MY_MODULE.c.o -c /usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c - [ 23%] Building C object CMakeFiles/symbols.dir/MYMODULE.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/MYMODULE.c.o -c /usr/share/cmake/Modules/FortranCInterface/MYMODULE.c - [ 25%] Building C object CMakeFiles/symbols.dir/symbols/my_sub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub.c - [ 28%] Building C object CMakeFiles/symbols.dir/symbols/my_sub_.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/my_sub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c - [ 30%] Building C object CMakeFiles/symbols.dir/symbols/my_sub__.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/my_sub__.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c - [ 33%] Building C object CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c - [ 35%] Building C object CMakeFiles/symbols.dir/symbols/mysub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub.c - [ 38%] Building C object CMakeFiles/symbols.dir/symbols/mysub_.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/mysub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub_.c - [ 41%] Building C object CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c - [ 43%] Building C object CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c - [ 46%] Building C object CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c - [ 48%] Building C object CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c - [ 51%] Building C object CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c - [ 53%] Building C object CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c - [ 56%] Building C object CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c - [ 58%] Building C object CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c - [ 61%] Building C object CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c - [ 64%] Building C object CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c - [ 66%] Building C object CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c - [ 69%] Building C object CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c - [ 71%] Building C object CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c - [ 74%] Building C object CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c - [ 76%] Building C object CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c - [ 79%] Building C object CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c - [ 82%] Building C object CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c - [ 84%] Building C object CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c - [ 87%] Building C object CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o - /usr/bin/gcc -O3 -DNDEBUG -fPIC -o CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c - [ 89%] Linking C static library libsymbols.a - /usr/bin/cmake -P CMakeFiles/symbols.dir/cmake_clean_target.cmake - /usr/bin/cmake -E cmake_link_script CMakeFiles/symbols.dir/link.txt --verbose=1 - /usr/bin/ar qc libsymbols.a CMakeFiles/symbols.dir/mymodule_.c.o CMakeFiles/symbols.dir/my_module_.c.o CMakeFiles/symbols.dir/MY_MODULE.c.o CMakeFiles/symbols.dir/MYMODULE.c.o CMakeFiles/symbols.dir/symbols/my_sub.c.o CMakeFiles/symbols.dir/symbols/my_sub_.c.o CMakeFiles/symbols.dir/symbols/my_sub__.c.o "CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o" CMakeFiles/symbols.dir/symbols/mysub.c.o CMakeFiles/symbols.dir/symbols/mysub_.c.o "CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o" CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o "CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o" CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o "CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o" CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o - /usr/bin/ranlib libsymbols.a - gmake[3]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - [ 89%] Built target symbols - /usr/bin/gmake -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/depend - gmake[3]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - cd /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /usr/share/cmake/Modules/FortranCInterface /usr/share/cmake/Modules/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/DependInfo.cmake - Dependee "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/DependInfo.cmake" is newer than depender "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.internal". - Dependee "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.internal". - Scanning dependencies of target FortranCInterface - gmake[3]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - /usr/bin/gmake -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/build - gmake[3]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - [ 92%] Building Fortran object CMakeFiles/FortranCInterface.dir/main.F.o - /usr/bin/gfortran -DCALL_MOD -O3 -DNDEBUG -O3 -c /usr/share/cmake/Modules/FortranCInterface/main.F -o CMakeFiles/FortranCInterface.dir/main.F.o - [ 94%] Building Fortran object CMakeFiles/FortranCInterface.dir/call_sub.f.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /usr/share/cmake/Modules/FortranCInterface/call_sub.f -o CMakeFiles/FortranCInterface.dir/call_sub.f.o - [ 97%] Building Fortran object CMakeFiles/FortranCInterface.dir/call_mod.f90.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /usr/share/cmake/Modules/FortranCInterface/call_mod.f90 -o CMakeFiles/FortranCInterface.dir/call_mod.f90.o - [100%] Linking Fortran executable FortranCInterface - /usr/bin/cmake -E cmake_link_script CMakeFiles/FortranCInterface.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/FortranCInterface.dir/main.F.o CMakeFiles/FortranCInterface.dir/call_sub.f.o CMakeFiles/FortranCInterface.dir/call_mod.f90.o -o FortranCInterface libsymbols.a libmyfort.a - gmake[3]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - [100%] Built target FortranCInterface - gmake[2]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - /usr/bin/cmake -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 0 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CheckIncludeFile.cmake:95 (try_compile)" - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:252 (check_include_file)" - - "CMakeLists.txt:116 (CHECK_TYPE_SIZE)" - checks: - - "Looking for sys/types.h" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xzOAnd" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xzOAnd" - cmakeVariables: - CMAKE_C_FLAGS: "" - CMAKE_C_FLAGS_RELEASE: "-O3 -DNDEBUG" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_SYS_TYPES_H" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xzOAnd - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_6aa40/fast && /usr/bin/gmake -f CMakeFiles/cmTC_6aa40.dir/build.make CMakeFiles/cmTC_6aa40.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xzOAnd» - Building C object CMakeFiles/cmTC_6aa40.dir/CheckIncludeFile.c.o - /usr/bin/gcc -O3 -DNDEBUG -o CMakeFiles/cmTC_6aa40.dir/CheckIncludeFile.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xzOAnd/CheckIncludeFile.c - Linking C executable cmTC_6aa40 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6aa40.dir/link.txt --verbose=1 - /usr/bin/gcc -O3 -DNDEBUG CMakeFiles/cmTC_6aa40.dir/CheckIncludeFile.c.o -o cmTC_6aa40 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xzOAnd» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CheckIncludeFile.cmake:95 (try_compile)" - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:253 (check_include_file)" - - "CMakeLists.txt:116 (CHECK_TYPE_SIZE)" - checks: - - "Looking for stdint.h" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2iBYQP" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2iBYQP" - cmakeVariables: - CMAKE_C_FLAGS: "" - CMAKE_C_FLAGS_RELEASE: "-O3 -DNDEBUG" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_STDINT_H" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2iBYQP - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_b9f59/fast && /usr/bin/gmake -f CMakeFiles/cmTC_b9f59.dir/build.make CMakeFiles/cmTC_b9f59.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2iBYQP» - Building C object CMakeFiles/cmTC_b9f59.dir/CheckIncludeFile.c.o - /usr/bin/gcc -O3 -DNDEBUG -o CMakeFiles/cmTC_b9f59.dir/CheckIncludeFile.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2iBYQP/CheckIncludeFile.c - Linking C executable cmTC_b9f59 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b9f59.dir/link.txt --verbose=1 - /usr/bin/gcc -O3 -DNDEBUG CMakeFiles/cmTC_b9f59.dir/CheckIncludeFile.c.o -o cmTC_b9f59 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2iBYQP» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CheckIncludeFile.cmake:95 (try_compile)" - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:254 (check_include_file)" - - "CMakeLists.txt:116 (CHECK_TYPE_SIZE)" - checks: - - "Looking for stddef.h" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tL7Sid" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tL7Sid" - cmakeVariables: - CMAKE_C_FLAGS: "" - CMAKE_C_FLAGS_RELEASE: "-O3 -DNDEBUG" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_STDDEF_H" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tL7Sid - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_98262/fast && /usr/bin/gmake -f CMakeFiles/cmTC_98262.dir/build.make CMakeFiles/cmTC_98262.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tL7Sid» - Building C object CMakeFiles/cmTC_98262.dir/CheckIncludeFile.c.o - /usr/bin/gcc -O3 -DNDEBUG -o CMakeFiles/cmTC_98262.dir/CheckIncludeFile.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tL7Sid/CheckIncludeFile.c - Linking C executable cmTC_98262 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_98262.dir/link.txt --verbose=1 - /usr/bin/gcc -O3 -DNDEBUG CMakeFiles/cmTC_98262.dir/CheckIncludeFile.c.o -o cmTC_98262 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tL7Sid» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:148 (try_compile)" - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:273 (__check_type_size_impl)" - - "CMakeLists.txt:116 (CHECK_TYPE_SIZE)" - checks: - - "Check size of void *" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-gclrC2" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-gclrC2" - cmakeVariables: - CMAKE_C_FLAGS: "" - CMAKE_C_FLAGS_RELEASE: "-O3 -DNDEBUG" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_VOID_P_SIZE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-gclrC2 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_0eb3a/fast && /usr/bin/gmake -f CMakeFiles/cmTC_0eb3a.dir/build.make CMakeFiles/cmTC_0eb3a.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-gclrC2» - Building C object CMakeFiles/cmTC_0eb3a.dir/VOID_P_SIZE.c.o - /usr/bin/gcc -O3 -DNDEBUG -o CMakeFiles/cmTC_0eb3a.dir/VOID_P_SIZE.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-gclrC2/VOID_P_SIZE.c - Linking C executable cmTC_0eb3a - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0eb3a.dir/link.txt --verbose=1 - /usr/bin/gcc -O3 -DNDEBUG CMakeFiles/cmTC_0eb3a.dir/VOID_P_SIZE.c.o -o cmTC_0eb3a - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-gclrC2» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:148 (try_compile)" - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:273 (__check_type_size_impl)" - - "CMakeLists.txt:123 (CHECK_TYPE_SIZE)" - checks: - - "Check size of int" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vWOxP4" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vWOxP4" - cmakeVariables: - CMAKE_C_FLAGS: "" - CMAKE_C_FLAGS_RELEASE: "-O3 -DNDEBUG" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_INT_SIZE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vWOxP4 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_eba3f/fast && /usr/bin/gmake -f CMakeFiles/cmTC_eba3f.dir/build.make CMakeFiles/cmTC_eba3f.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vWOxP4» - Building C object CMakeFiles/cmTC_eba3f.dir/INT_SIZE.c.o - /usr/bin/gcc -O3 -DNDEBUG -o CMakeFiles/cmTC_eba3f.dir/INT_SIZE.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vWOxP4/INT_SIZE.c - Linking C executable cmTC_eba3f - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_eba3f.dir/link.txt --verbose=1 - /usr/bin/gcc -O3 -DNDEBUG CMakeFiles/cmTC_eba3f.dir/INT_SIZE.c.o -o cmTC_eba3f - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vWOxP4» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:148 (try_compile)" - - "/usr/share/cmake/Modules/CheckTypeSize.cmake:273 (__check_type_size_impl)" - - "CMakeLists.txt:124 (CHECK_TYPE_SIZE)" - checks: - - "Check size of long" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Z31KGP" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Z31KGP" - cmakeVariables: - CMAKE_C_FLAGS: "" - CMAKE_C_FLAGS_RELEASE: "-O3 -DNDEBUG" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_LONG_SIZE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Z31KGP - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_aa9c4/fast && /usr/bin/gmake -f CMakeFiles/cmTC_aa9c4.dir/build.make CMakeFiles/cmTC_aa9c4.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Z31KGP» - Building C object CMakeFiles/cmTC_aa9c4.dir/LONG_SIZE.c.o - /usr/bin/gcc -O3 -DNDEBUG -o CMakeFiles/cmTC_aa9c4.dir/LONG_SIZE.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Z31KGP/LONG_SIZE.c - Linking C executable cmTC_aa9c4 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_aa9c4.dir/link.txt --verbose=1 - /usr/bin/gcc -O3 -DNDEBUG CMakeFiles/cmTC_aa9c4.dir/LONG_SIZE.c.o -o cmTC_aa9c4 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Z31KGP» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/usr/share/cmake/Modules/CheckFortranSourceCompiles.cmake:101 (cmake_check_source_compiles)" - - "CMakeLists.txt:140 (CHECK_Fortran_SOURCE_COMPILES)" - checks: - - "Performing Test HAVE_MOVE_ALLOC" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1vuZna" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1vuZna" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_MOVE_ALLOC" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1vuZna - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f5070/fast && /usr/bin/gmake -f CMakeFiles/cmTC_f5070.dir/build.make CMakeFiles/cmTC_f5070.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1vuZna» - Building Fortran object CMakeFiles/cmTC_f5070.dir/src.f90.o - /usr/bin/gfortran -DHAVE_MOVE_ALLOC -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1vuZna/src.f90 -o CMakeFiles/cmTC_f5070.dir/src.f90.o - Linking Fortran executable cmTC_f5070 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f5070.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/cmTC_f5070.dir/src.f90.o -o cmTC_f5070 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1vuZna» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/usr/share/cmake/Modules/CheckFortranSourceCompiles.cmake:101 (cmake_check_source_compiles)" - - "CMakeLists.txt:155 (CHECK_Fortran_SOURCE_COMPILES)" - checks: - - "Performing Test HAVE_VOLATILE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-yiIfw8" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-yiIfw8" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_VOLATILE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-yiIfw8 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_72594/fast && /usr/bin/gmake -f CMakeFiles/cmTC_72594.dir/build.make CMakeFiles/cmTC_72594.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-yiIfw8» - Building Fortran object CMakeFiles/cmTC_72594.dir/src.f90.o - /usr/bin/gfortran -DHAVE_VOLATILE -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-yiIfw8/src.f90 -o CMakeFiles/cmTC_72594.dir/src.f90.o - Linking Fortran executable cmTC_72594 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_72594.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/cmTC_72594.dir/src.f90.o -o cmTC_72594 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-yiIfw8» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/usr/share/cmake/Modules/CheckFortranSourceCompiles.cmake:101 (cmake_check_source_compiles)" - - "CMakeLists.txt:164 (CHECK_Fortran_SOURCE_COMPILES)" - checks: - - "Performing Test HAVE_ISO_FORTRAN_ENV" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojFOlk" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojFOlk" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_ISO_FORTRAN_ENV" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojFOlk - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_c3d48/fast && /usr/bin/gmake -f CMakeFiles/cmTC_c3d48.dir/build.make CMakeFiles/cmTC_c3d48.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojFOlk» - Building Fortran object CMakeFiles/cmTC_c3d48.dir/src.f90.o - /usr/bin/gfortran -DHAVE_ISO_FORTRAN_ENV -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojFOlk/src.f90 -o CMakeFiles/cmTC_c3d48.dir/src.f90.o - Linking Fortran executable cmTC_c3d48 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c3d48.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/cmTC_c3d48.dir/src.f90.o -o cmTC_c3d48 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojFOlk» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/usr/share/cmake/Modules/CheckFortranSourceCompiles.cmake:101 (cmake_check_source_compiles)" - - "CMakeLists.txt:173 (CHECK_Fortran_SOURCE_COMPILES)" - checks: - - "Performing Test HAVE_FLUSH_STMT" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-sTuQx0" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-sTuQx0" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_FLUSH_STMT" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-sTuQx0 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_b5485/fast && /usr/bin/gmake -f CMakeFiles/cmTC_b5485.dir/build.make CMakeFiles/cmTC_b5485.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-sTuQx0» - Building Fortran object CMakeFiles/cmTC_b5485.dir/src.f90.o - /usr/bin/gfortran -DHAVE_FLUSH_STMT -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-sTuQx0/src.f90 -o CMakeFiles/cmTC_b5485.dir/src.f90.o - Linking Fortran executable cmTC_b5485 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b5485.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/cmTC_b5485.dir/src.f90.o -o cmTC_b5485 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-sTuQx0» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/usr/share/cmake/Modules/CheckFortranSourceCompiles.cmake:101 (cmake_check_source_compiles)" - - "CMakeLists.txt:182 (CHECK_Fortran_SOURCE_COMPILES)" - checks: - - "Performing Test HAVE_FINAL" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Q3uFf9" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Q3uFf9" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_FINAL" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Q3uFf9 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_7d8c6/fast && /usr/bin/gmake -f CMakeFiles/cmTC_7d8c6.dir/build.make CMakeFiles/cmTC_7d8c6.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Q3uFf9» - Building Fortran object CMakeFiles/cmTC_7d8c6.dir/src.f90.o - /usr/bin/gfortran -DHAVE_FINAL -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Q3uFf9/src.f90 -o CMakeFiles/cmTC_7d8c6.dir/src.f90.o - Linking Fortran executable cmTC_7d8c6 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7d8c6.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/cmTC_7d8c6.dir/src.f90.o -o cmTC_7d8c6 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Q3uFf9» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/usr/share/cmake/Modules/CheckFortranSourceCompiles.cmake:101 (cmake_check_source_compiles)" - - "CMakeLists.txt:208 (CHECK_Fortran_SOURCE_COMPILES)" - checks: - - "Performing Test HAVE_MOLD" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-GUJ846" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-GUJ846" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_MOLD" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-GUJ846 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_99d2a/fast && /usr/bin/gmake -f CMakeFiles/cmTC_99d2a.dir/build.make CMakeFiles/cmTC_99d2a.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-GUJ846» - Building Fortran object CMakeFiles/cmTC_99d2a.dir/src.f90.o - /usr/bin/gfortran -DHAVE_MOLD -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-GUJ846/src.f90 -o CMakeFiles/cmTC_99d2a.dir/src.f90.o - Linking Fortran executable cmTC_99d2a - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_99d2a.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/cmTC_99d2a.dir/src.f90.o -o cmTC_99d2a - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-GUJ846» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/usr/share/cmake/Modules/CheckFortranSourceCompiles.cmake:101 (cmake_check_source_compiles)" - - "CMakeLists.txt:228 (CHECK_Fortran_SOURCE_COMPILES)" - checks: - - "Performing Test HAVE_EXTENDS_TYPE_OF" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-zzAf3d" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-zzAf3d" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_EXTENDS_TYPE_OF" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-zzAf3d - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_8bab2/fast && /usr/bin/gmake -f CMakeFiles/cmTC_8bab2.dir/build.make CMakeFiles/cmTC_8bab2.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-zzAf3d» - Building Fortran object CMakeFiles/cmTC_8bab2.dir/src.f90.o - /usr/bin/gfortran -DHAVE_EXTENDS_TYPE_OF -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-zzAf3d/src.f90 -o CMakeFiles/cmTC_8bab2.dir/src.f90.o - Linking Fortran executable cmTC_8bab2 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8bab2.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/cmTC_8bab2.dir/src.f90.o -o cmTC_8bab2 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-zzAf3d» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/usr/share/cmake/Modules/CheckFortranSourceCompiles.cmake:101 (cmake_check_source_compiles)" - - "CMakeLists.txt:245 (CHECK_Fortran_SOURCE_COMPILES)" - checks: - - "Performing Test HAVE_SAME_TYPE_AS" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-4OoVKj" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-4OoVKj" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "HAVE_SAME_TYPE_AS" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-4OoVKj - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f0b77/fast && /usr/bin/gmake -f CMakeFiles/cmTC_f0b77.dir/build.make CMakeFiles/cmTC_f0b77.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-4OoVKj» - Building Fortran object CMakeFiles/cmTC_f0b77.dir/src.f90.o - /usr/bin/gfortran -DHAVE_SAME_TYPE_AS -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-4OoVKj/src.f90 -o CMakeFiles/cmTC_f0b77.dir/src.f90.o - Linking Fortran executable cmTC_f0b77 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f0b77.dir/link.txt --verbose=1 - /usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/cmTC_f0b77.dir/src.f90.o -o cmTC_f0b77 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-4OoVKj» - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1297 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-bfqc9N" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-bfqc9N" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-bfqc9N - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_7738b/fast && /usr/bin/gmake -f CMakeFiles/cmTC_7738b.dir/build.make CMakeFiles/cmTC_7738b.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-bfqc9N» - Building Fortran object CMakeFiles/cmTC_7738b.dir/test_mpi.f90.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-bfqc9N/test_mpi.f90 -o CMakeFiles/cmTC_7738b.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-bfqc9N/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_7738b.dir/build.make:78: CMakeFiles/cmTC_7738b.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-bfqc9N» - gmake: *** [Makefile:127: cmTC_7738b/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1298 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F90_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-i9XxqG" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-i9XxqG" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F90_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-i9XxqG - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_15c1f/fast && /usr/bin/gmake -f CMakeFiles/cmTC_15c1f.dir/build.make CMakeFiles/cmTC_15c1f.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-i9XxqG» - Building Fortran object CMakeFiles/cmTC_15c1f.dir/test_mpi.f90.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-i9XxqG/test_mpi.f90 -o CMakeFiles/cmTC_15c1f.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-i9XxqG/test_mpi.f90:2:11: - - 2 | use mpi - | 1 - Fatal Error: Cannot open module file â€mpi.mod’ for reading at (1): File o directory non esistente - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_15c1f.dir/build.make:78: CMakeFiles/cmTC_15c1f.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-i9XxqG» - gmake: *** [Makefile:127: cmTC_15c1f/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1299 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F08_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tXqhj7" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tXqhj7" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F08_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tXqhj7 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_ae6b8/fast && /usr/bin/gmake -f CMakeFiles/cmTC_ae6b8.dir/build.make CMakeFiles/cmTC_ae6b8.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tXqhj7» - Building Fortran object CMakeFiles/cmTC_ae6b8.dir/test_mpi.f90.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tXqhj7/test_mpi.f90 -o CMakeFiles/cmTC_ae6b8.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tXqhj7/test_mpi.f90:2:11: - - 2 | use mpi_f08 - | 1 - Fatal Error: Cannot open module file â€mpi_f08.mod’ for reading at (1): File o directory non esistente - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_ae6b8.dir/build.make:78: CMakeFiles/cmTC_ae6b8.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tXqhj7» - gmake: *** [Makefile:127: cmTC_ae6b8/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1315 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER_NOKIND" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-8TuEAH" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-8TuEAH" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_RELEASE: "-O3 -DNDEBUG -O3" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER_NOKIND" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-8TuEAH - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_9db40/fast && /usr/bin/gmake -f CMakeFiles/cmTC_9db40.dir/build.make CMakeFiles/cmTC_9db40.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-8TuEAH» - Building Fortran object CMakeFiles/cmTC_9db40.dir/test_mpi.f90.o - /usr/bin/gfortran -O3 -DNDEBUG -O3 -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-8TuEAH/test_mpi.f90 -o CMakeFiles/cmTC_9db40.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-8TuEAH/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_9db40.dir/build.make:78: CMakeFiles/cmTC_9db40.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-8TuEAH» - gmake: *** [Makefile:127: cmTC_9db40/fast] Errore 2 - - exitCode: 2 -... - ---- -events: - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1297 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-UMwmqb" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-UMwmqb" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-UMwmqb - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_524ad/fast && /usr/bin/gmake -f CMakeFiles/cmTC_524ad.dir/build.make CMakeFiles/cmTC_524ad.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-UMwmqb» - Building Fortran object CMakeFiles/cmTC_524ad.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-UMwmqb/test_mpi.f90 -o CMakeFiles/cmTC_524ad.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-UMwmqb/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_524ad.dir/build.make:78: CMakeFiles/cmTC_524ad.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-UMwmqb» - gmake: *** [Makefile:127: cmTC_524ad/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1298 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F90_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-coYAVI" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-coYAVI" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F90_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-coYAVI - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_1014b/fast && /usr/bin/gmake -f CMakeFiles/cmTC_1014b.dir/build.make CMakeFiles/cmTC_1014b.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-coYAVI» - Building Fortran object CMakeFiles/cmTC_1014b.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-coYAVI/test_mpi.f90 -o CMakeFiles/cmTC_1014b.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-coYAVI/test_mpi.f90:2:11: - - 2 | use mpi - | 1 - Fatal Error: Cannot open module file â€mpi.mod’ for reading at (1): File o directory non esistente - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_1014b.dir/build.make:78: CMakeFiles/cmTC_1014b.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-coYAVI» - gmake: *** [Makefile:127: cmTC_1014b/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1299 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F08_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vL99Xm" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vL99Xm" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F08_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vL99Xm - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_c2cc5/fast && /usr/bin/gmake -f CMakeFiles/cmTC_c2cc5.dir/build.make CMakeFiles/cmTC_c2cc5.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vL99Xm» - Building Fortran object CMakeFiles/cmTC_c2cc5.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vL99Xm/test_mpi.f90 -o CMakeFiles/cmTC_c2cc5.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vL99Xm/test_mpi.f90:2:11: - - 2 | use mpi_f08 - | 1 - Fatal Error: Cannot open module file â€mpi_f08.mod’ for reading at (1): File o directory non esistente - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_c2cc5.dir/build.make:78: CMakeFiles/cmTC_c2cc5.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vL99Xm» - gmake: *** [Makefile:127: cmTC_c2cc5/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1315 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER_NOKIND" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-RQB76r" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-RQB76r" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER_NOKIND" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-RQB76r - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_431d7/fast && /usr/bin/gmake -f CMakeFiles/cmTC_431d7.dir/build.make CMakeFiles/cmTC_431d7.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-RQB76r» - Building Fortran object CMakeFiles/cmTC_431d7.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-RQB76r/test_mpi.f90 -o CMakeFiles/cmTC_431d7.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-RQB76r/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_431d7.dir/build.make:78: CMakeFiles/cmTC_431d7.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-RQB76r» - gmake: *** [Makefile:127: cmTC_431d7/fast] Errore 2 - - exitCode: 2 -... - ---- -events: - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1297 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-SAnnF7" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-SAnnF7" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-SAnnF7 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_cbb0b/fast && /usr/bin/gmake -f CMakeFiles/cmTC_cbb0b.dir/build.make CMakeFiles/cmTC_cbb0b.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-SAnnF7» - Building Fortran object CMakeFiles/cmTC_cbb0b.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-SAnnF7/test_mpi.f90 -o CMakeFiles/cmTC_cbb0b.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-SAnnF7/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_cbb0b.dir/build.make:78: CMakeFiles/cmTC_cbb0b.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-SAnnF7» - gmake: *** [Makefile:127: cmTC_cbb0b/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1298 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F90_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Ys1dnw" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Ys1dnw" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F90_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Ys1dnw - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_5b19c/fast && /usr/bin/gmake -f CMakeFiles/cmTC_5b19c.dir/build.make CMakeFiles/cmTC_5b19c.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Ys1dnw» - Building Fortran object CMakeFiles/cmTC_5b19c.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Ys1dnw/test_mpi.f90 -o CMakeFiles/cmTC_5b19c.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Ys1dnw/test_mpi.f90:2:11: - - 2 | use mpi - | 1 - Fatal Error: Cannot open module file â€mpi.mod’ for reading at (1): File o directory non esistente - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_5b19c.dir/build.make:78: CMakeFiles/cmTC_5b19c.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-Ys1dnw» - gmake: *** [Makefile:127: cmTC_5b19c/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1299 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F08_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-pdmtht" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-pdmtht" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F08_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-pdmtht - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_06cbe/fast && /usr/bin/gmake -f CMakeFiles/cmTC_06cbe.dir/build.make CMakeFiles/cmTC_06cbe.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-pdmtht» - Building Fortran object CMakeFiles/cmTC_06cbe.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-pdmtht/test_mpi.f90 -o CMakeFiles/cmTC_06cbe.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-pdmtht/test_mpi.f90:2:11: - - 2 | use mpi_f08 - | 1 - Fatal Error: Cannot open module file â€mpi_f08.mod’ for reading at (1): File o directory non esistente - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_06cbe.dir/build.make:78: CMakeFiles/cmTC_06cbe.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-pdmtht» - gmake: *** [Makefile:127: cmTC_06cbe/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1315 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER_NOKIND" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-aEJCsV" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-aEJCsV" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER_NOKIND" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-aEJCsV - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_a3900/fast && /usr/bin/gmake -f CMakeFiles/cmTC_a3900.dir/build.make CMakeFiles/cmTC_a3900.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-aEJCsV» - Building Fortran object CMakeFiles/cmTC_a3900.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-aEJCsV/test_mpi.f90 -o CMakeFiles/cmTC_a3900.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-aEJCsV/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_a3900.dir/build.make:78: CMakeFiles/cmTC_a3900.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-aEJCsV» - gmake: *** [Makefile:127: cmTC_a3900/fast] Errore 2 - - exitCode: 2 -... - ---- -events: - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1297 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2XsXJi" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2XsXJi" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2XsXJi - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_52d38/fast && /usr/bin/gmake -f CMakeFiles/cmTC_52d38.dir/build.make CMakeFiles/cmTC_52d38.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2XsXJi» - Building Fortran object CMakeFiles/cmTC_52d38.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2XsXJi/test_mpi.f90 -o CMakeFiles/cmTC_52d38.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2XsXJi/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_52d38.dir/build.make:78: CMakeFiles/cmTC_52d38.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-2XsXJi» - gmake: *** [Makefile:127: cmTC_52d38/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1298 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F90_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-LhedCa" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-LhedCa" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F90_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-LhedCa - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_4e06b/fast && /usr/bin/gmake -f CMakeFiles/cmTC_4e06b.dir/build.make CMakeFiles/cmTC_4e06b.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-LhedCa» - Building Fortran object CMakeFiles/cmTC_4e06b.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-LhedCa/test_mpi.f90 -o CMakeFiles/cmTC_4e06b.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-LhedCa/test_mpi.f90:2:11: - - 2 | use mpi - | 1 - Fatal Error: Cannot open module file â€mpi.mod’ for reading at (1): File o directory non esistente - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_4e06b.dir/build.make:78: CMakeFiles/cmTC_4e06b.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-LhedCa» - gmake: *** [Makefile:127: cmTC_4e06b/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1299 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F08_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0OAZU7" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0OAZU7" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F08_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0OAZU7 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_bc7a8/fast && /usr/bin/gmake -f CMakeFiles/cmTC_bc7a8.dir/build.make CMakeFiles/cmTC_bc7a8.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0OAZU7» - Building Fortran object CMakeFiles/cmTC_bc7a8.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0OAZU7/test_mpi.f90 -o CMakeFiles/cmTC_bc7a8.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0OAZU7/test_mpi.f90:2:11: - - 2 | use mpi_f08 - | 1 - Fatal Error: Cannot open module file â€mpi_f08.mod’ for reading at (1): File o directory non esistente - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_bc7a8.dir/build.make:78: CMakeFiles/cmTC_bc7a8.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0OAZU7» - gmake: *** [Makefile:127: cmTC_bc7a8/fast] Errore 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1315 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER_NOKIND" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vQkMCr" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vQkMCr" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER_NOKIND" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vQkMCr - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_e9f74/fast && /usr/bin/gmake -f CMakeFiles/cmTC_e9f74.dir/build.make CMakeFiles/cmTC_e9f74.dir/build - gmake[1]: ingresso nella directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vQkMCr» - Building Fortran object CMakeFiles/cmTC_e9f74.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vQkMCr/test_mpi.f90 -o CMakeFiles/cmTC_e9f74.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vQkMCr/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_e9f74.dir/build.make:78: CMakeFiles/cmTC_e9f74.dir/test_mpi.f90.o] Errore 1 - gmake[1]: uscita dalla directory «/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-vQkMCr» - gmake: *** [Makefile:127: cmTC_e9f74/fast] Errore 2 - - exitCode: 2 -... - ---- -events: - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1297 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0h21oj" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0h21oj" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0h21oj - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_dd541/fast && /usr/bin/gmake -f CMakeFiles/cmTC_dd541.dir/build.make CMakeFiles/cmTC_dd541.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0h21oj' - Building Fortran object CMakeFiles/cmTC_dd541.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0h21oj/test_mpi.f90 -o CMakeFiles/cmTC_dd541.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0h21oj/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_dd541.dir/build.make:78: CMakeFiles/cmTC_dd541.dir/test_mpi.f90.o] Error 1 - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-0h21oj' - gmake: *** [Makefile:127: cmTC_dd541/fast] Error 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1298 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F90_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojGJ9i" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojGJ9i" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F90_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojGJ9i - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_51fcc/fast && /usr/bin/gmake -f CMakeFiles/cmTC_51fcc.dir/build.make CMakeFiles/cmTC_51fcc.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojGJ9i' - Building Fortran object CMakeFiles/cmTC_51fcc.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojGJ9i/test_mpi.f90 -o CMakeFiles/cmTC_51fcc.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojGJ9i/test_mpi.f90:2:11: - - 2 | use mpi - | 1 - Fatal Error: Cannot open module file 'mpi.mod' for reading at (1): No such file or directory - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_51fcc.dir/build.make:78: CMakeFiles/cmTC_51fcc.dir/test_mpi.f90.o] Error 1 - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ojGJ9i' - gmake: *** [Makefile:127: cmTC_51fcc/fast] Error 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1299 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F08_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xNufd9" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xNufd9" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F08_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xNufd9 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_786a7/fast && /usr/bin/gmake -f CMakeFiles/cmTC_786a7.dir/build.make CMakeFiles/cmTC_786a7.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xNufd9' - Building Fortran object CMakeFiles/cmTC_786a7.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xNufd9/test_mpi.f90 -o CMakeFiles/cmTC_786a7.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xNufd9/test_mpi.f90:2:11: - - 2 | use mpi_f08 - | 1 - Fatal Error: Cannot open module file 'mpi_f08.mod' for reading at (1): No such file or directory - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_786a7.dir/build.make:78: CMakeFiles/cmTC_786a7.dir/test_mpi.f90.o] Error 1 - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-xNufd9' - gmake: *** [Makefile:127: cmTC_786a7/fast] Error 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1315 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER_NOKIND" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-MlwQLV" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-MlwQLV" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER_NOKIND" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-MlwQLV - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_69864/fast && /usr/bin/gmake -f CMakeFiles/cmTC_69864.dir/build.make CMakeFiles/cmTC_69864.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-MlwQLV' - Building Fortran object CMakeFiles/cmTC_69864.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-MlwQLV/test_mpi.f90 -o CMakeFiles/cmTC_69864.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-MlwQLV/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_69864.dir/build.make:78: CMakeFiles/cmTC_69864.dir/test_mpi.f90.o] Error 1 - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-MlwQLV' - gmake: *** [Makefile:127: cmTC_69864/fast] Error 2 - - exitCode: 2 -... - ---- -events: - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1297 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ZI8vA3" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ZI8vA3" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ZI8vA3 - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_602e3/fast && /usr/bin/gmake -f CMakeFiles/cmTC_602e3.dir/build.make CMakeFiles/cmTC_602e3.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ZI8vA3' - Building Fortran object CMakeFiles/cmTC_602e3.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ZI8vA3/test_mpi.f90 -o CMakeFiles/cmTC_602e3.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ZI8vA3/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_602e3.dir/build.make:78: CMakeFiles/cmTC_602e3.dir/test_mpi.f90.o] Error 1 - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-ZI8vA3' - gmake: *** [Makefile:127: cmTC_602e3/fast] Error 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1298 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F90_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-7Tgd8E" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-7Tgd8E" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F90_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-7Tgd8E - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_7897e/fast && /usr/bin/gmake -f CMakeFiles/cmTC_7897e.dir/build.make CMakeFiles/cmTC_7897e.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-7Tgd8E' - Building Fortran object CMakeFiles/cmTC_7897e.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-7Tgd8E/test_mpi.f90 -o CMakeFiles/cmTC_7897e.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-7Tgd8E/test_mpi.f90:2:11: - - 2 | use mpi - | 1 - Fatal Error: Cannot open module file 'mpi.mod' for reading at (1): No such file or directory - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_7897e.dir/build.make:78: CMakeFiles/cmTC_7897e.dir/test_mpi.f90.o] Error 1 - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-7Tgd8E' - gmake: *** [Makefile:127: cmTC_7897e/fast] Error 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1299 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F08_MODULE" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1Vme6C" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1Vme6C" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F08_MODULE" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1Vme6C - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_02759/fast && /usr/bin/gmake -f CMakeFiles/cmTC_02759.dir/build.make CMakeFiles/cmTC_02759.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1Vme6C' - Building Fortran object CMakeFiles/cmTC_02759.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1Vme6C/test_mpi.f90 -o CMakeFiles/cmTC_02759.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1Vme6C/test_mpi.f90:2:11: - - 2 | use mpi_f08 - | 1 - Fatal Error: Cannot open module file 'mpi_f08.mod' for reading at (1): No such file or directory - compilation terminated. - gmake[1]: *** [CMakeFiles/cmTC_02759.dir/build.make:78: CMakeFiles/cmTC_02759.dir/test_mpi.f90.o] Error 1 - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-1Vme6C' - gmake: *** [Makefile:127: cmTC_02759/fast] Error 2 - - exitCode: 2 - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/FindMPI.cmake:1278 (try_compile)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1315 (_MPI_try_staged_settings)" - - "/usr/share/cmake/Modules/FindMPI.cmake:1645 (_MPI_check_lang_works)" - - "CMakeLists.txt:271 (find_package)" - description: "The MPI test test_mpi for Fortran in mode F77_HEADER_NOKIND" - directories: - source: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tv4k0R" - binary: "/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tv4k0R" - cmakeVariables: - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_Fortran_FLAGS: "" - CMAKE_Fortran_FLAGS_DEBUG: "-g" - CMAKE_MODULE_PATH: "/home/stack/test_psblas/psblas3/cmake" - buildResult: - variable: "MPI_RESULT_Fortran_test_mpi_F77_HEADER_NOKIND" - cached: true - stdout: | - Change Dir: /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tv4k0R - - Run Build Command(s):/usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_acaf4/fast && /usr/bin/gmake -f CMakeFiles/cmTC_acaf4.dir/build.make CMakeFiles/cmTC_acaf4.dir/build - gmake[1]: Entering directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tv4k0R' - Building Fortran object CMakeFiles/cmTC_acaf4.dir/test_mpi.f90.o - /usr/bin/gfortran -c /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tv4k0R/test_mpi.f90 -o CMakeFiles/cmTC_acaf4.dir/test_mpi.f90.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tv4k0R/test_mpi.f90:3: Error: Can't open included file 'mpif.h' - gmake[1]: *** [CMakeFiles/cmTC_acaf4.dir/build.make:78: CMakeFiles/cmTC_acaf4.dir/test_mpi.f90.o] Error 1 - gmake[1]: Leaving directory '/home/stack/test_psblas/psblas3/build/CMakeFiles/CMakeScratch/TryCompile-tv4k0R' - gmake: *** [Makefile:127: cmTC_acaf4/fast] Error 2 - - exitCode: 2 -... diff --git a/build/CMakeFiles/CheckTypeSize/INT_SIZE.bin b/build/CMakeFiles/CheckTypeSize/INT_SIZE.bin deleted file mode 100755 index 861460ce03ef755c6cc514389a37165d21fab45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17296 zcmeHOeQX>@6@Pb^54$9>lQgMmLcJ1cmHgrLo#VLfLDO~obtfFh*ls>3>1KVmwy)TC z?%f*fsD(%=LZOWmR0;k<1du9KLLx~0qkkZ96_iqmKT-suNFccpmC9#Rz7!#pp z&bymU6cADc+R^R4d2inD&CHwG-I?2cUl<%2N+uE@DG3LGxOA(fMEVTS`fYz07j#vCo>KkKR z+E8X7&3+WRM~gwI)b~lmkzejM$uN&|eYYEjm4vn^lv(JUD^2xucg__%=1S$orH-ZE zo{pYwvsN*?6oA@Ab_#;f_cBlA|9topzqt0}Ye!dJIPuM6`4d*_ z?(hFuY*3w~Ly7P-2P9FM93s0LN|w z$w56ZJd!`uZ+DsdyTQ&+9=3~a)txETJhwV|xPPuvb|;;wITuaL%vZ{6!q%#hir5D6 zNdmpG9eEkwSHAL9oEAyE6X~@2n58l_SI7sF-u21F7L{H1$z|+Fe#0lHaf(yyf!G7F z2VxJz9*8{$0dikl@sjncxwAiNx~#gFE7V(l z@TFGVrCn}m$4vt1Xa1N!_vVwibJucbe{+3oaxk-!c_a7w>jrMA>pPxDD}S9fTiTyf zc+$VT#$L#sfAnRl=luF_5qac>w*#wwlB;g6ueP+GAt2VKDC#dO{R34Z`)=mWUC+Jt zr^j-y-ALsUS8{LO^zKCi9c-YfzB;YiDR`>?%%d4BhQ;lV=gz(J?&*5Her0_-N)jh8 zU${KI*0`2-OZD&fU)KFperb4uS{0|*1F;8U55yjbJrH{!_CV}`*aNW#Vh_X~h&}MX z>48M!&6;k1est(awpKdrK9R=MebV@hyZnT0h)QI zU9ZQ{Aof7)f!G7F2VxJz9*8{t(I!QDt}Kc-(1o+ znv^zaf*U_e6eLH38XMwlTkhsgRAFxytsW-cu}ZW-9obb={sztdB37Rr|y*xJ6d{ zOI*(I4~)onNa>aAa0!)l$_rpYgHUs@b+1@)S4vl0xGIuB+?n4`6d9pT` zO+#q{Pk}a+$|VmgRMl`^+hiu7j9*WCr9wy5ovRcC6q0FhNT}z(`UV;&)^OjR#C|8! zh}k&G*BZ^$u#U@RLZfu#THSdEJ97ORd>u#GSz!FmJLpK6&?q}nCNxrq>)LgPHcML{ zThV=uY&T8jr&?q-ULzi zlN2F^vnWsE zQ(CT7R)?opelaxe&$4_qB!3a*30U(F^@q|o@JK|A*A3V zO1~Ap!~G>2lA`=W4yFi_@H}Z!4Zd}L?m~G2Zk;C?ly8%Yd~_7$hL4x*vXb9Aubx7A zE6%s@ym}ht+mg3lU!PlpG~W&b|Be62Mj zn0p1~+mf5$6py?7PyZ~*aU3OH@F7P1gzbd;^%mY0w?pK|QwJHT~b>d=zRss0h0-vwNS;y0nT%DOrC$1A3KON^)sCpT*f)Po$X0SbH z2J)km_C)?ugZNY~m8UBM~4Moq5+TF3!&{BgDtqw2BC*+V;?R z-{C=faCE@N7^;C2qkV_-{fNSKn?0E0(%ir}*ux`74)u-LM}~$b1}E*wzC$B}hzQ4V zS$7+~!0o8cw7cx4O3z=YCmtCw?>{+K=q?oV#5!5P{%JyQ-EdurzPsKS~ErA@* zB@?(LvKLAeA2wC1u}u|WX4@D)COxIVvdCyLOlLV?LEXw_kqQy*0SOvm%8rKv>^C+~kJ(f$oDS-iLFB(r}^KgEhtf4Ki&!*c4AlmkC!^hO9k{$F4-sxHYB{W>0gyga82wUNTH^($kZ#SQ7V zLwH#qw{6ub^8bebxLd-)%Z!))H`dXHR>9BK11Vhp_pp@OFL;ToP8%AwN0Y`mT>lTT z#E+MC`Ef%-jyI4xBmNih8<@dWg_?sTll8mAUx)RD7y5I=wD|C{&d+f?yy%f_O2P|$ z8)Y>1e7Q8%c@j@Aaq~3)C<#vd_&bzQ{{=7mhE;aFfo1+Ac%koMp&#GaU!*lku2Zog zIH5N}cvX7^WMDQo0&JWyEC`@K07cnm`o%T{j4vP>Yz07o>%x!>KkKR z+E8X7&3+WRPm4jQ)b|O*kzXD*$uN&|efJxOm4vn^lv(JQD^7KHb<7po=ZdAprS_$s z?)L63vsyMg6@c1BbUr55yjb zJrH{!_CV}`*aNW#Vh{X3c;K&1kN-1w;SY_uS2w)d0g!uT#Y@(1<}UoG@w)0>E?;Z< z!55lwmv+6W4L1p-pZVkP#dl8UF8(%m;dgh&CI>PrnYVK{ZWy?wuI+jit^94;Y-;HTH7u(lc*RJ(o6olgLwdyaP4DgKo&Gh%K1mAwo0>_M#^a|bQ{Aof7)f!G7F2VxJz9*8{UIp% z?5HkR3+_U-1OKq-aHfjwrLyOmd6*c>9)yX$YzF!Uvpo+`9308EXC6>K)QdL8hRNDM zHVwrIJO$cNEEPShP*uZuZIhXRGJZYn74z*CcdnclP)Mf1A)%iC>KkaBSVO)05(k}3 zJ!a!LUu!g1!#XaP360W`YjyVn?8xi4yvyb+@A zCn?wravuunZvnZV1?6}*Wd8-_TfvBwZv&YJLH+GekCX8gq@bxD@8J{Ue~Ha-0>3Z{ zrxfe}c`o?NQqThOJP68nLe%{%h5trMTtHAC@Aj7E7pZ&-c0+5V{888&DVMu{&{PWK z=@ynh2F4jHAf)F*1N^xb5F&FJj|7&;{4rP|hcrr`{(nutcAzh|D7C3Gz-gpW`bCr{ z@hL6WDyzd;mR|{t`^zj}4ar|ac>>n_L;az21&>6;c-=rb)hp`%gx4FOCiatm67med@{XE&M8oYjf?p6Bh=Se5ZTl|%AeiY?Kg#4V6ub)?EQQnO6 zEj+I(C~rxwzrL1OKRiEQQTEqY{2I!4B)3Cj$Uom8InEQgP8%3{RoQ`a?TNTw zbu3mZ6ui}eiwRl<;A;zfz7}R3Pe*cfWHKGNPN@HMoL9c$Wy~^0B;lID_M90Q89g>+ zPYi!@03XZ6(sbFTcOrmlRc{eL8O+04Oq1=++j)v=sv^EnwrA$bQ_h@S@XD2{?JO=q zzC6D$=X!3zOh;?j)3`XWol3=7w%w9fS%&F~Gw<4k#rgSVg!nj{mJtC}+a4V6Jvv|y z9P76+h^qgEW4%X*`w)c-H+vw*rMdobu!lxQkMxe%ql1GJ1C#b-?~#!KM1%vmtcMNX zatn^OlLV?LkXw_kqQy*0SOvm#o#i>OPC+~kH(f$oDS-iLFBY(rZ! zKf{Vrf4Ki&!E)-8lmkC!^hO9k{$F4-sxHYB{Td#Ayga82wUNTH^($kZ#dYboLU>sp zx9-p?^8bebxLd-)8;qC!%kvowt%9Ge2U58H?_eplU+@xFE%Da-0%+}Pzvzb{ysXPl z7+ULuUm5e_e-Xcp8C+GUIY=^Dzf1geSYLRdKSNBD4=?Nd9LK|p9@(ZOywG=1Mq|&H zOMO2e@$?cmPxFtG;KYx&P)7a}yzCoR+3^OJ`IF#<-o`>dzP`UmYm{84Vnc93?}qTQ z&TD0Sc)n0w{&Wu+vL)@8_1E5q#HY|8*<|&)X~BQ0F3}mOU+7lMP~Bnt5(^HCBHIyG z=pM|-*pQ0sldfenpkEXjALS33`>dkLK}~M*!jJI683LDO~o?<_fqYrAfsr0ezF+CJ5H zXYSU>jv{I)pej_6LO+C0NKqD+lf?94^};r= zU>|%Iwji z9vB`SIo5A?nTNW;9+^CD=iIV8m#=tkdGdJwLaFFZIx`C{x|l1JitNJHrlE$|28l@w zqp=HhxxPRC_9Yw^aeNZ#wEmQ(GBj2w29iGT;o^(RZuxMzc7)&d;dGs%6h$D4Koo%} z0#O8_2t*NxA`nI3{~-c@Yu@*d%()L6GcRwx*$I&O=9(9;-pHK$MdLNqy-c>+{L`0O zaFuqgxg8e?WS{!;$oY4k&z%2V=G-4{jZF@w)>79qZ@+EelDfM4W%Tm#tl8ZD4aFz> zYa8mt%!Makr+O}IzCz;2ZErVL{XAE_wYuKizDh)_O-Zz0QTB(+Bo5xmoWGTM^Dj?j z-n^a2#NNuhbH{rG9dxjR#_Ia4YNzn2{?#W_SPV;HT&WuBBxh2-t)X+%ptm(ZSz0-dKxlfS6Ktl^*Nj!dy7{9((cKGiG zSVin%lu?Qz5Je!0Koo%}0#O8_2t*NxA`nF&ia->BPd5TBJ1o_Jb^e}OzPY4tG$}P{ zfeSxN<+icj%Dm68F5gABu`b^yKgN27zk{Z=BPA*S`<-fu^vem0g#N}GW$z}7RP`-2 z$u%y2h!ji(EkM?mt*q~6DWZWhH`t%lJI(l3mcqYN)$O^;_V}_{wNK)LOJt?L#^p@^ z)P#Ij9@c>2{{FOa0KZH=Xrxl+VKZrTCA+$lpHCez4vf1wBjb2n(9v}e{tfHH2cd5& z-MyIV>NyPKQ|aT0H!0I=Or(*Offn;~1vdSy`#% z+{H>K{==fvnaOt)OP*_HVPY(O2qyZ|Dd-n?Mdt6hkByXx4D%ypB13JsuD1KMS=#zIw_OmLEg&Gje0y@+gDMKCqVX1)Z?4rY^a~jwdYp7{g&GEsvd8sJ=f~-MhJVJBw#DZ zbEw|_A&}=;J&sR9j$b|A1V$*n4P+eD+i!>3J{ey@0-9_4J$x|!FR=wq;TJ~1lz<%| zzYG4d1ndO)J*dZbLD=&wf&Yz^eF63M__VhyKcw;r*aNMh_@l5l6ql!ey{iPsuUim* z42)^34y50QP4L%h9f-D|`zqV72k=XX$6zBq)E`P$@Q8(6uj`1Df0;j!Ev4V!5evEQ(};()|6^s} z0^j5QqFPH~_Hk?&?H~z`lZRDOb~q#N;_wVF0EPa|$@sI}Z#h2K4{3W&Gh zcngjz5AmJxyYH_vY#$t-FDd`E>S~!wi0_DRhsHpBUL_nh?$b@o_>uDeDBiwS%?D+E zg80sO6HN1Um;ckR5{}nV_6t72tY5L8V84FL_6GZr`PVw)JK}rps`o?04fg35TjJE7 zkmptBQl(6rw>oh$L9+mSZGpe9xp~LaJGnYjsZN|H)c*87uWZ>%nI+tjgmVVlbLL>` z1WKc@Te?^TpYcO>ad24J+Ofel(bcja^N)SFp3Ruc?9_awU6ip)}(x*g3CM zuGr4fGGt4I#Rb=Mb7nH!!k)$Hf$fyb&Wi08z48jomYsrY=aveE6{PqynRW4t&mnv=!u)lc9E!b)n zC_Evn*%u*ir|K)QG^&K1OprK)s`Mgt^2Q#-)#45D(%DUuhZn=^# z73&lm%dmS65x}Gi2&U&QO?RHJ^n4B(qG^V{r13QV3vs}3VheNg=~9nUN0XO=u1y#Iwn>o>e*@!77E%%5bRudLs= zSlLRR=ubVU`1vv)ll`sq?$V#+xhL2NX8e5l-91Y$ zJTV#Sym1QhpT(k2aE&MJzs&8w%zWwp7IqPAzk@hE6NSIV{59q;GmqLB!$bHo1IZ&s zroxwXa4$Dh*1c$=68Z3_ucAV0R^iLM@-^nm`dQj9b|Sxyd|CsGF7wZ;%s05QVEY+{ z3z#8O;mbVr2J@%cQ0fo%|2tSteUfsJd5T&H0m%Os*o~@7@+7~Dho3LMQwH-t@f%~F z;TrmCfG_jo)*aeJ{{JBa?v|+VI`gIfwRyCmP4Khzx)iMchgeGO7ryMPmi^ZI>)1Nh ze&}ZbzRb%{8QSWU-x%`}e}QRUhqDSb1__h-yX?OX+KVod=6}sTzRdG8ydPfd$Tua? zMczb=u07u_wRxWGr7hD>Cg^hQb(2E>s0Veyc$&n8+N(&7eBT CMakeFiles/FortranCInterface.dir/main.F.i - -CMakeFiles/FortranCInterface.dir/main.F.s: cmake_force - @echo "Compiling Fortran source to assembly CMakeFiles/FortranCInterface.dir/main.F.s" - /usr/bin/gfortran $(Fortran_DEFINES) -DCALL_MOD $(Fortran_INCLUDES) $(Fortran_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/main.F -o CMakeFiles/FortranCInterface.dir/main.F.s - -CMakeFiles/FortranCInterface.dir/call_sub.f.o: CMakeFiles/FortranCInterface.dir/flags.make -CMakeFiles/FortranCInterface.dir/call_sub.f.o: /usr/share/cmake/Modules/FortranCInterface/call_sub.f - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building Fortran object CMakeFiles/FortranCInterface.dir/call_sub.f.o" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -c /usr/share/cmake/Modules/FortranCInterface/call_sub.f -o CMakeFiles/FortranCInterface.dir/call_sub.f.o - -CMakeFiles/FortranCInterface.dir/call_sub.f.i: cmake_force - @echo "Preprocessing Fortran source to CMakeFiles/FortranCInterface.dir/call_sub.f.i" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/call_sub.f > CMakeFiles/FortranCInterface.dir/call_sub.f.i - -CMakeFiles/FortranCInterface.dir/call_sub.f.s: cmake_force - @echo "Compiling Fortran source to assembly CMakeFiles/FortranCInterface.dir/call_sub.f.s" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/call_sub.f -o CMakeFiles/FortranCInterface.dir/call_sub.f.s - -CMakeFiles/FortranCInterface.dir/call_mod.f90.o: CMakeFiles/FortranCInterface.dir/flags.make -CMakeFiles/FortranCInterface.dir/call_mod.f90.o: /usr/share/cmake/Modules/FortranCInterface/call_mod.f90 - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building Fortran object CMakeFiles/FortranCInterface.dir/call_mod.f90.o" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -c /usr/share/cmake/Modules/FortranCInterface/call_mod.f90 -o CMakeFiles/FortranCInterface.dir/call_mod.f90.o - -CMakeFiles/FortranCInterface.dir/call_mod.f90.i: cmake_force - @echo "Preprocessing Fortran source to CMakeFiles/FortranCInterface.dir/call_mod.f90.i" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/call_mod.f90 > CMakeFiles/FortranCInterface.dir/call_mod.f90.i - -CMakeFiles/FortranCInterface.dir/call_mod.f90.s: cmake_force - @echo "Compiling Fortran source to assembly CMakeFiles/FortranCInterface.dir/call_mod.f90.s" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/call_mod.f90 -o CMakeFiles/FortranCInterface.dir/call_mod.f90.s - -# Object files for target FortranCInterface -FortranCInterface_OBJECTS = \ -"CMakeFiles/FortranCInterface.dir/main.F.o" \ -"CMakeFiles/FortranCInterface.dir/call_sub.f.o" \ -"CMakeFiles/FortranCInterface.dir/call_mod.f90.o" - -# External object files for target FortranCInterface -FortranCInterface_EXTERNAL_OBJECTS = - -FortranCInterface: CMakeFiles/FortranCInterface.dir/main.F.o -FortranCInterface: CMakeFiles/FortranCInterface.dir/call_sub.f.o -FortranCInterface: CMakeFiles/FortranCInterface.dir/call_mod.f90.o -FortranCInterface: CMakeFiles/FortranCInterface.dir/build.make -FortranCInterface: libsymbols.a -FortranCInterface: libmyfort.a -FortranCInterface: CMakeFiles/FortranCInterface.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking Fortran executable FortranCInterface" - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/FortranCInterface.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/FortranCInterface.dir/build: FortranCInterface -.PHONY : CMakeFiles/FortranCInterface.dir/build - -CMakeFiles/FortranCInterface.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/FortranCInterface.dir/cmake_clean.cmake -.PHONY : CMakeFiles/FortranCInterface.dir/clean - -CMakeFiles/FortranCInterface.dir/depend: - cd /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/share/cmake/Modules/FortranCInterface /usr/share/cmake/Modules/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/DependInfo.cmake -.PHONY : CMakeFiles/FortranCInterface.dir/depend - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/cmake_clean.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/cmake_clean.cmake deleted file mode 100644 index c245613c4..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/cmake_clean.cmake +++ /dev/null @@ -1,12 +0,0 @@ -file(REMOVE_RECURSE - "CMakeFiles/FortranCInterface.dir/call_mod.f90.o" - "CMakeFiles/FortranCInterface.dir/call_sub.f.o" - "CMakeFiles/FortranCInterface.dir/main.F.o" - "FortranCInterface" - "FortranCInterface.pdb" -) - -# Per-language clean rules from dependency scanning. -foreach(lang Fortran) - include(CMakeFiles/FortranCInterface.dir/cmake_clean_${lang}.cmake OPTIONAL) -endforeach() diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/compiler_depend.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/compiler_depend.make deleted file mode 100644 index 7070c7a50..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/compiler_depend.make +++ /dev/null @@ -1,2 +0,0 @@ -# Empty compiler generated dependencies file for FortranCInterface. -# This may be replaced when dependencies are built. diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/compiler_depend.ts b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/compiler_depend.ts deleted file mode 100644 index 8e4d2e48b..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/compiler_depend.ts +++ /dev/null @@ -1,2 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Timestamp file for compiler generated dependencies management for FortranCInterface. diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.internal b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.internal deleted file mode 100644 index 84a6a6c3c..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.internal +++ /dev/null @@ -1,9 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -CMakeFiles/FortranCInterface.dir/call_mod.f90.o - /usr/share/cmake/Modules/FortranCInterface/call_mod.f90 -CMakeFiles/FortranCInterface.dir/call_sub.f.o - /usr/share/cmake/Modules/FortranCInterface/call_sub.f -CMakeFiles/FortranCInterface.dir/main.F.o - /usr/share/cmake/Modules/FortranCInterface/main.F diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.make deleted file mode 100644 index e43a6b9f2..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/depend.make +++ /dev/null @@ -1,6 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# Note that incremental build could trigger a call to cmake_copy_f90_mod on each re-build -CMakeFiles/FortranCInterface.dir/call_mod.f90.o: CMakeFiles/myfort.dir/my_module.mod.stamp -CMakeFiles/FortranCInterface.dir/call_mod.f90.o: CMakeFiles/myfort.dir/mymodule.mod.stamp diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/flags.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/flags.make deleted file mode 100644 index 7342adb39..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/flags.make +++ /dev/null @@ -1,12 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# compile Fortran with /usr/bin/gfortran -Fortran_DEFINES = - -Fortran_INCLUDES = - -Fortran_FLAGS = -O3 -DNDEBUG -O3 - -# Custom defines: CMakeFiles/FortranCInterface.dir/main.F.o_DEFINES = CALL_MOD - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/fortran.internal b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/fortran.internal deleted file mode 100644 index 1b732d31a..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/fortran.internal +++ /dev/null @@ -1,2 +0,0 @@ -# The fortran modules provided by this target. -provides diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/link.txt b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/link.txt deleted file mode 100644 index 8d9fc6371..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/link.txt +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/gfortran -O3 -DNDEBUG -O3 CMakeFiles/FortranCInterface.dir/main.F.o CMakeFiles/FortranCInterface.dir/call_sub.f.o CMakeFiles/FortranCInterface.dir/call_mod.f90.o -o FortranCInterface libsymbols.a libmyfort.a diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/progress.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/progress.make deleted file mode 100644 index a69a57e8e..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir/progress.make +++ /dev/null @@ -1,5 +0,0 @@ -CMAKE_PROGRESS_1 = 1 -CMAKE_PROGRESS_2 = 2 -CMAKE_PROGRESS_3 = 3 -CMAKE_PROGRESS_4 = 4 - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/Makefile.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/Makefile.cmake deleted file mode 100644 index de96fdc4f..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/Makefile.cmake +++ /dev/null @@ -1,79 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# The generator used is: -set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") - -# The top level Makefile was generated from the following files: -set(CMAKE_MAKEFILE_DEPENDS - "CMakeCache.txt" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/3.26.5/CMakeCCompiler.cmake" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/3.26.5/CMakeFortranCompiler.cmake" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/3.26.5/CMakeSystem.cmake" - "Input.cmake" - "/usr/share/cmake/Modules/CMakeCInformation.cmake" - "/usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake" - "/usr/share/cmake/Modules/CMakeFortranInformation.cmake" - "/usr/share/cmake/Modules/CMakeGenericSystem.cmake" - "/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake" - "/usr/share/cmake/Modules/CMakeLanguageInformation.cmake" - "/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake" - "/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake" - "/usr/share/cmake/Modules/CheckCSourceCompiles.cmake" - "/usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake" - "/usr/share/cmake/Modules/Compiler/GNU-C.cmake" - "/usr/share/cmake/Modules/Compiler/GNU-Fortran.cmake" - "/usr/share/cmake/Modules/Compiler/GNU.cmake" - "/usr/share/cmake/Modules/FortranCInterface/CMakeLists.txt" - "/usr/share/cmake/Modules/FortranCInterface/symbol.c.in" - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake" - "/usr/share/cmake/Modules/Platform/Linux-GNU-C.cmake" - "/usr/share/cmake/Modules/Platform/Linux-GNU-Fortran.cmake" - "/usr/share/cmake/Modules/Platform/Linux-GNU.cmake" - "/usr/share/cmake/Modules/Platform/Linux.cmake" - "/usr/share/cmake/Modules/Platform/UnixPaths.cmake" - ) - -# The corresponding makefile is: -set(CMAKE_MAKEFILE_OUTPUTS - "Makefile" - "CMakeFiles/cmake.check_cache" - ) - -# Byproducts of CMake generate step: -set(CMAKE_MAKEFILE_PRODUCTS - "symbols/my_sub.c" - "symbols/my_sub_.c" - "symbols/my_sub__.c" - "symbols/MY_SUB-UPPER.c" - "symbols/mysub.c" - "symbols/mysub_.c" - "symbols/MYSUB-UPPER.c" - "symbols/__my_module_MOD_my_sub.c" - "symbols/__my_module_NMOD_my_sub.c" - "symbols/__my_module__my_sub.c" - "symbols/__mymodule_MOD_mysub.c" - "symbols/__mymodule_NMOD_mysub.c" - "symbols/__mymodule__mysub.c" - "symbols/my_moduleSmy_sub.c" - "symbols/my_module_mp_my_sub_.c" - "symbols/MY_MODULE_mp_MY_SUB-UPPER.c" - "symbols/my_module_my_sub_.c" - "symbols/my_module_MP_my_sub.c" - "symbols/mymoduleSmysub.c" - "symbols/mymodule_mp_mysub_.c" - "symbols/MYMODULE_mp_MYSUB-UPPER.c" - "symbols/mymodule_mysub_.c" - "symbols/mymodule_MP_mysub.c" - "symbols/_QMmy_modulePmy_sub.c" - "symbols/_QMmymodulePmysub.c" - "exe-Release.cmake" - "CMakeFiles/CMakeDirectoryInformation.cmake" - ) - -# Dependency information for all targets: -set(CMAKE_DEPEND_INFO_FILES - "CMakeFiles/myfort.dir/DependInfo.cmake" - "CMakeFiles/symbols.dir/DependInfo.cmake" - "CMakeFiles/FortranCInterface.dir/DependInfo.cmake" - ) diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/Makefile2 b/build/CMakeFiles/FortranCInterface/CMakeFiles/Makefile2 deleted file mode 100644 index ecd07c323..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/Makefile2 +++ /dev/null @@ -1,169 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# Default target executed when no arguments are given to make. -default_target: all -.PHONY : default_target - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - -# Disable VCS-based implicit rules. -% : %,v - -# Disable VCS-based implicit rules. -% : RCS/% - -# Disable VCS-based implicit rules. -% : RCS/%,v - -# Disable VCS-based implicit rules. -% : SCCS/s.% - -# Disable VCS-based implicit rules. -% : s.% - -.SUFFIXES: .hpux_make_needs_suffix_list - -# Command-line flag to silence nested $(MAKE). -$(VERBOSE)MAKESILENT = -s - -#Suppress display of executed commands. -$(VERBOSE).SILENT: - -# A target that is always out of date. -cmake_force: -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/bin/cmake - -# The command to remove a file. -RM = /usr/bin/cmake -E rm -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /usr/share/cmake/Modules/FortranCInterface - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface - -#============================================================================= -# Directory level rules for the build root directory - -# The main recursive "all" target. -all: CMakeFiles/myfort.dir/all -all: CMakeFiles/symbols.dir/all -all: CMakeFiles/FortranCInterface.dir/all -.PHONY : all - -# The main recursive "preinstall" target. -preinstall: -.PHONY : preinstall - -# The main recursive "clean" target. -clean: CMakeFiles/myfort.dir/clean -clean: CMakeFiles/symbols.dir/clean -clean: CMakeFiles/FortranCInterface.dir/clean -.PHONY : clean - -#============================================================================= -# Target rules for target CMakeFiles/myfort.dir - -# All Build rule for target. -CMakeFiles/myfort.dir/all: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/depend - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=5,6,7,8,9 "Built target myfort" -.PHONY : CMakeFiles/myfort.dir/all - -# Build rule for subdir invocation for target. -CMakeFiles/myfort.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 5 - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/myfort.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 0 -.PHONY : CMakeFiles/myfort.dir/rule - -# Convenience name for target. -myfort: CMakeFiles/myfort.dir/rule -.PHONY : myfort - -# clean rule for target. -CMakeFiles/myfort.dir/clean: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/clean -.PHONY : CMakeFiles/myfort.dir/clean - -#============================================================================= -# Target rules for target CMakeFiles/symbols.dir - -# All Build rule for target. -CMakeFiles/symbols.dir/all: CMakeFiles/myfort.dir/all - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/depend - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 "Built target symbols" -.PHONY : CMakeFiles/symbols.dir/all - -# Build rule for subdir invocation for target. -CMakeFiles/symbols.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 35 - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/symbols.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 0 -.PHONY : CMakeFiles/symbols.dir/rule - -# Convenience name for target. -symbols: CMakeFiles/symbols.dir/rule -.PHONY : symbols - -# clean rule for target. -CMakeFiles/symbols.dir/clean: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/clean -.PHONY : CMakeFiles/symbols.dir/clean - -#============================================================================= -# Target rules for target CMakeFiles/FortranCInterface.dir - -# All Build rule for target. -CMakeFiles/FortranCInterface.dir/all: CMakeFiles/myfort.dir/all -CMakeFiles/FortranCInterface.dir/all: CMakeFiles/symbols.dir/all - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/depend - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=1,2,3,4 "Built target FortranCInterface" -.PHONY : CMakeFiles/FortranCInterface.dir/all - -# Build rule for subdir invocation for target. -CMakeFiles/FortranCInterface.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 39 - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/FortranCInterface.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 0 -.PHONY : CMakeFiles/FortranCInterface.dir/rule - -# Convenience name for target. -FortranCInterface: CMakeFiles/FortranCInterface.dir/rule -.PHONY : FortranCInterface - -# clean rule for target. -CMakeFiles/FortranCInterface.dir/clean: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/clean -.PHONY : CMakeFiles/FortranCInterface.dir/clean - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/TargetDirectories.txt b/build/CMakeFiles/FortranCInterface/CMakeFiles/TargetDirectories.txt deleted file mode 100644 index cb18ce57e..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/TargetDirectories.txt +++ /dev/null @@ -1,5 +0,0 @@ -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/FortranCInterface.dir -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/edit_cache.dir -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/rebuild_cache.dir diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/cmake.check_cache b/build/CMakeFiles/FortranCInterface/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd7317..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/DependInfo.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/DependInfo.cmake deleted file mode 100644 index 15642fb1f..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/DependInfo.cmake +++ /dev/null @@ -1,33 +0,0 @@ - -# Consider dependencies only in project. -set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) - -# The set of languages for which implicit dependencies are needed: -set(CMAKE_DEPENDS_LANGUAGES - "Fortran" - ) -# The set of files for implicit dependencies of each language: -set(CMAKE_DEPENDS_CHECK_Fortran - "/usr/share/cmake/Modules/FortranCInterface/my_module.f90" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/my_module.f90.o" - "/usr/share/cmake/Modules/FortranCInterface/my_sub.f" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/my_sub.f.o" - "/usr/share/cmake/Modules/FortranCInterface/mymodule.f90" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/mymodule.f90.o" - "/usr/share/cmake/Modules/FortranCInterface/mysub.f" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/mysub.f.o" - ) -set(CMAKE_Fortran_COMPILER_ID "GNU") -set(CMAKE_Fortran_SUBMODULE_SEP "@") -set(CMAKE_Fortran_SUBMODULE_EXT ".smod") - -# The include file search paths: -set(CMAKE_Fortran_TARGET_INCLUDE_PATH - ) - -# The set of dependency files which are needed: -set(CMAKE_DEPENDS_DEPENDENCY_FILES - ) - -# Targets to which this target links which contain Fortran sources. -set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES - ) - -# Fortran module output directory. -set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/build.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/build.make deleted file mode 100644 index 6f252ea22..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/build.make +++ /dev/null @@ -1,155 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - -# Disable VCS-based implicit rules. -% : %,v - -# Disable VCS-based implicit rules. -% : RCS/% - -# Disable VCS-based implicit rules. -% : RCS/%,v - -# Disable VCS-based implicit rules. -% : SCCS/s.% - -# Disable VCS-based implicit rules. -% : s.% - -.SUFFIXES: .hpux_make_needs_suffix_list - -# Command-line flag to silence nested $(MAKE). -$(VERBOSE)MAKESILENT = -s - -#Suppress display of executed commands. -$(VERBOSE).SILENT: - -# A target that is always out of date. -cmake_force: -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/bin/cmake - -# The command to remove a file. -RM = /usr/bin/cmake -E rm -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /usr/share/cmake/Modules/FortranCInterface - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface - -# Include any dependencies generated for this target. -include CMakeFiles/myfort.dir/depend.make -# Include any dependencies generated by the compiler for this target. -include CMakeFiles/myfort.dir/compiler_depend.make - -# Include the progress variables for this target. -include CMakeFiles/myfort.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/myfort.dir/flags.make - -CMakeFiles/myfort.dir/mysub.f.o: CMakeFiles/myfort.dir/flags.make -CMakeFiles/myfort.dir/mysub.f.o: /usr/share/cmake/Modules/FortranCInterface/mysub.f - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building Fortran object CMakeFiles/myfort.dir/mysub.f.o" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -c /usr/share/cmake/Modules/FortranCInterface/mysub.f -o CMakeFiles/myfort.dir/mysub.f.o - -CMakeFiles/myfort.dir/mysub.f.i: cmake_force - @echo "Preprocessing Fortran source to CMakeFiles/myfort.dir/mysub.f.i" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/mysub.f > CMakeFiles/myfort.dir/mysub.f.i - -CMakeFiles/myfort.dir/mysub.f.s: cmake_force - @echo "Compiling Fortran source to assembly CMakeFiles/myfort.dir/mysub.f.s" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/mysub.f -o CMakeFiles/myfort.dir/mysub.f.s - -CMakeFiles/myfort.dir/my_sub.f.o: CMakeFiles/myfort.dir/flags.make -CMakeFiles/myfort.dir/my_sub.f.o: /usr/share/cmake/Modules/FortranCInterface/my_sub.f - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building Fortran object CMakeFiles/myfort.dir/my_sub.f.o" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -c /usr/share/cmake/Modules/FortranCInterface/my_sub.f -o CMakeFiles/myfort.dir/my_sub.f.o - -CMakeFiles/myfort.dir/my_sub.f.i: cmake_force - @echo "Preprocessing Fortran source to CMakeFiles/myfort.dir/my_sub.f.i" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/my_sub.f > CMakeFiles/myfort.dir/my_sub.f.i - -CMakeFiles/myfort.dir/my_sub.f.s: cmake_force - @echo "Compiling Fortran source to assembly CMakeFiles/myfort.dir/my_sub.f.s" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/my_sub.f -o CMakeFiles/myfort.dir/my_sub.f.s - -CMakeFiles/myfort.dir/mymodule.f90.o: CMakeFiles/myfort.dir/flags.make -CMakeFiles/myfort.dir/mymodule.f90.o: /usr/share/cmake/Modules/FortranCInterface/mymodule.f90 - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building Fortran object CMakeFiles/myfort.dir/mymodule.f90.o" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -c /usr/share/cmake/Modules/FortranCInterface/mymodule.f90 -o CMakeFiles/myfort.dir/mymodule.f90.o - -CMakeFiles/myfort.dir/mymodule.f90.i: cmake_force - @echo "Preprocessing Fortran source to CMakeFiles/myfort.dir/mymodule.f90.i" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/mymodule.f90 > CMakeFiles/myfort.dir/mymodule.f90.i - -CMakeFiles/myfort.dir/mymodule.f90.s: cmake_force - @echo "Compiling Fortran source to assembly CMakeFiles/myfort.dir/mymodule.f90.s" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/mymodule.f90 -o CMakeFiles/myfort.dir/mymodule.f90.s - -CMakeFiles/myfort.dir/my_module.f90.o: CMakeFiles/myfort.dir/flags.make -CMakeFiles/myfort.dir/my_module.f90.o: /usr/share/cmake/Modules/FortranCInterface/my_module.f90 - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building Fortran object CMakeFiles/myfort.dir/my_module.f90.o" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -c /usr/share/cmake/Modules/FortranCInterface/my_module.f90 -o CMakeFiles/myfort.dir/my_module.f90.o - -CMakeFiles/myfort.dir/my_module.f90.i: cmake_force - @echo "Preprocessing Fortran source to CMakeFiles/myfort.dir/my_module.f90.i" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/my_module.f90 > CMakeFiles/myfort.dir/my_module.f90.i - -CMakeFiles/myfort.dir/my_module.f90.s: cmake_force - @echo "Compiling Fortran source to assembly CMakeFiles/myfort.dir/my_module.f90.s" - /usr/bin/gfortran $(Fortran_DEFINES) $(Fortran_INCLUDES) $(Fortran_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/my_module.f90 -o CMakeFiles/myfort.dir/my_module.f90.s - -# Object files for target myfort -myfort_OBJECTS = \ -"CMakeFiles/myfort.dir/mysub.f.o" \ -"CMakeFiles/myfort.dir/my_sub.f.o" \ -"CMakeFiles/myfort.dir/mymodule.f90.o" \ -"CMakeFiles/myfort.dir/my_module.f90.o" - -# External object files for target myfort -myfort_EXTERNAL_OBJECTS = - -libmyfort.a: CMakeFiles/myfort.dir/mysub.f.o -libmyfort.a: CMakeFiles/myfort.dir/my_sub.f.o -libmyfort.a: CMakeFiles/myfort.dir/mymodule.f90.o -libmyfort.a: CMakeFiles/myfort.dir/my_module.f90.o -libmyfort.a: CMakeFiles/myfort.dir/build.make -libmyfort.a: CMakeFiles/myfort.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking Fortran static library libmyfort.a" - $(CMAKE_COMMAND) -P CMakeFiles/myfort.dir/cmake_clean_target.cmake - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/myfort.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/myfort.dir/build: libmyfort.a -.PHONY : CMakeFiles/myfort.dir/build - -CMakeFiles/myfort.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/myfort.dir/cmake_clean.cmake -.PHONY : CMakeFiles/myfort.dir/clean - -CMakeFiles/myfort.dir/depend: - cd /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/share/cmake/Modules/FortranCInterface /usr/share/cmake/Modules/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/DependInfo.cmake -.PHONY : CMakeFiles/myfort.dir/depend - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean.cmake deleted file mode 100644 index 53f9fd569..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean.cmake +++ /dev/null @@ -1,13 +0,0 @@ -file(REMOVE_RECURSE - "CMakeFiles/myfort.dir/my_module.f90.o" - "CMakeFiles/myfort.dir/my_sub.f.o" - "CMakeFiles/myfort.dir/mymodule.f90.o" - "CMakeFiles/myfort.dir/mysub.f.o" - "libmyfort.a" - "libmyfort.pdb" -) - -# Per-language clean rules from dependency scanning. -foreach(lang Fortran) - include(CMakeFiles/myfort.dir/cmake_clean_${lang}.cmake OPTIONAL) -endforeach() diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean_Fortran.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean_Fortran.cmake deleted file mode 100644 index 884a249b7..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean_Fortran.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# Remove fortran modules provided by this target. -FILE(REMOVE - "my_module.mod" - "MY_MODULE.mod" - "CMakeFiles/myfort.dir/my_module.mod.stamp" - - "mymodule.mod" - "MYMODULE.mod" - "CMakeFiles/myfort.dir/mymodule.mod.stamp" - ) diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean_target.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean_target.cmake deleted file mode 100644 index 6ce4b0874..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/cmake_clean_target.cmake +++ /dev/null @@ -1,3 +0,0 @@ -file(REMOVE_RECURSE - "libmyfort.a" -) diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/compiler_depend.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/compiler_depend.make deleted file mode 100644 index fa410b017..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/compiler_depend.make +++ /dev/null @@ -1,2 +0,0 @@ -# Empty compiler generated dependencies file for myfort. -# This may be replaced when dependencies are built. diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/compiler_depend.ts b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/compiler_depend.ts deleted file mode 100644 index bf71a882d..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/compiler_depend.ts +++ /dev/null @@ -1,2 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Timestamp file for compiler generated dependencies management for myfort. diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.internal b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.internal deleted file mode 100644 index 4855e5940..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.internal +++ /dev/null @@ -1,11 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -CMakeFiles/myfort.dir/my_module.f90.o - /usr/share/cmake/Modules/FortranCInterface/my_module.f90 -CMakeFiles/myfort.dir/my_sub.f.o - /usr/share/cmake/Modules/FortranCInterface/my_sub.f -CMakeFiles/myfort.dir/mymodule.f90.o - /usr/share/cmake/Modules/FortranCInterface/mymodule.f90 -CMakeFiles/myfort.dir/mysub.f.o - /usr/share/cmake/Modules/FortranCInterface/mysub.f diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.make deleted file mode 100644 index 1d1cafdaf..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/depend.make +++ /dev/null @@ -1,16 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# Note that incremental build could trigger a call to cmake_copy_f90_mod on each re-build -CMakeFiles/myfort.dir/my_module.f90.o.provides.build: CMakeFiles/myfort.dir/my_module.mod.stamp -CMakeFiles/myfort.dir/my_module.mod.stamp: CMakeFiles/myfort.dir/my_module.f90.o - $(CMAKE_COMMAND) -E cmake_copy_f90_mod my_module.mod CMakeFiles/myfort.dir/my_module.mod.stamp GNU -CMakeFiles/myfort.dir/my_module.f90.o.provides.build: - $(CMAKE_COMMAND) -E touch CMakeFiles/myfort.dir/my_module.f90.o.provides.build -CMakeFiles/myfort.dir/build: CMakeFiles/myfort.dir/my_module.f90.o.provides.build -CMakeFiles/myfort.dir/mymodule.f90.o.provides.build: CMakeFiles/myfort.dir/mymodule.mod.stamp -CMakeFiles/myfort.dir/mymodule.mod.stamp: CMakeFiles/myfort.dir/mymodule.f90.o - $(CMAKE_COMMAND) -E cmake_copy_f90_mod mymodule.mod CMakeFiles/myfort.dir/mymodule.mod.stamp GNU -CMakeFiles/myfort.dir/mymodule.f90.o.provides.build: - $(CMAKE_COMMAND) -E touch CMakeFiles/myfort.dir/mymodule.f90.o.provides.build -CMakeFiles/myfort.dir/build: CMakeFiles/myfort.dir/mymodule.f90.o.provides.build diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/flags.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/flags.make deleted file mode 100644 index 6006a712f..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/flags.make +++ /dev/null @@ -1,10 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# compile Fortran with /usr/bin/gfortran -Fortran_DEFINES = - -Fortran_INCLUDES = - -Fortran_FLAGS = -O3 -DNDEBUG -O3 - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/fortran.internal b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/fortran.internal deleted file mode 100644 index 064a4d1b1..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/fortran.internal +++ /dev/null @@ -1,4 +0,0 @@ -# The fortran modules provided by this target. -provides - my_module.mod - mymodule.mod diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/link.txt b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/link.txt deleted file mode 100644 index 98dd9fa69..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/link.txt +++ /dev/null @@ -1,2 +0,0 @@ -/usr/bin/ar qc libmyfort.a CMakeFiles/myfort.dir/mysub.f.o CMakeFiles/myfort.dir/my_sub.f.o CMakeFiles/myfort.dir/mymodule.f90.o CMakeFiles/myfort.dir/my_module.f90.o -/usr/bin/ranlib libmyfort.a diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/my_module.f90.o.provides.build b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/my_module.f90.o.provides.build deleted file mode 100644 index e69de29bb..000000000 diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/my_module.mod.stamp b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/my_module.mod.stamp deleted file mode 100644 index efd876725c086c420a8eb009e907631634d42dd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmVB;nkI=eQ`uG7!%x1cz-`6QhUohn(O5DP5@8CLFDtOSP1J zAq|(Nm8n({+(c7EhOB1l6vAq>hYh+$XZKmEn=lL*r_1IgPvyvCtDlf+&_IMSj}qv* w|Jom|tPzrOm~0~JtR3LF9e0Mw~-&;S4c diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/mymodule.f90.o.provides.build b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/mymodule.f90.o.provides.build deleted file mode 100644 index e69de29bb..000000000 diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/mymodule.mod.stamp b/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/mymodule.mod.stamp deleted file mode 100644 index 5828da0f4f6e14e3a5913fdcfc2efc80c4553301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmV=Cl]+)([">]) - -#IncludeRegexScan: ^.*$ - -#IncludeRegexComplain: ^$ - -#IncludeRegexTransform: - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub.c - -/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub_.c - -/usr/share/cmake/Modules/FortranCInterface/MYMODULE.c - -/usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c - -/usr/share/cmake/Modules/FortranCInterface/my_module_.c - -/usr/share/cmake/Modules/FortranCInterface/mymodule_.c - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/DependInfo.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/DependInfo.cmake deleted file mode 100644 index 446ae6675..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/DependInfo.cmake +++ /dev/null @@ -1,57 +0,0 @@ - -# Consider dependencies only in project. -set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) - -# The set of languages for which implicit dependencies are needed: -set(CMAKE_DEPENDS_LANGUAGES - "C" - ) -# The set of files for implicit dependencies of each language: -set(CMAKE_DEPENDS_CHECK_C - "/usr/share/cmake/Modules/FortranCInterface/MYMODULE.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/MYMODULE.c.o" - "/usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/MY_MODULE.c.o" - "/usr/share/cmake/Modules/FortranCInterface/my_module_.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/my_module_.c.o" - "/usr/share/cmake/Modules/FortranCInterface/mymodule_.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/mymodule_.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/my_sub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/my_sub_.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/my_sub__.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/mysub.c.o" - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub_.c" "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/symbols/mysub_.c.o" - ) -set(CMAKE_C_COMPILER_ID "GNU") - -# The include file search paths: -set(CMAKE_C_TARGET_INCLUDE_PATH - ) - -# The set of dependency files which are needed: -set(CMAKE_DEPENDS_DEPENDENCY_FILES - ) - -# Targets to which this target links which contain Fortran sources. -set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES - "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/myfort.dir/DependInfo.cmake" - ) - -# Fortran module output directory. -set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/build.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/build.make deleted file mode 100644 index 36a44d8c2..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/build.make +++ /dev/null @@ -1,530 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - -# Disable VCS-based implicit rules. -% : %,v - -# Disable VCS-based implicit rules. -% : RCS/% - -# Disable VCS-based implicit rules. -% : RCS/%,v - -# Disable VCS-based implicit rules. -% : SCCS/s.% - -# Disable VCS-based implicit rules. -% : s.% - -.SUFFIXES: .hpux_make_needs_suffix_list - -# Command-line flag to silence nested $(MAKE). -$(VERBOSE)MAKESILENT = -s - -#Suppress display of executed commands. -$(VERBOSE).SILENT: - -# A target that is always out of date. -cmake_force: -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/bin/cmake - -# The command to remove a file. -RM = /usr/bin/cmake -E rm -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /usr/share/cmake/Modules/FortranCInterface - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface - -# Include any dependencies generated for this target. -include CMakeFiles/symbols.dir/depend.make -# Include any dependencies generated by the compiler for this target. -include CMakeFiles/symbols.dir/compiler_depend.make - -# Include the progress variables for this target. -include CMakeFiles/symbols.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/symbols.dir/flags.make - -CMakeFiles/symbols.dir/mymodule_.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/mymodule_.c.o: /usr/share/cmake/Modules/FortranCInterface/mymodule_.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/symbols.dir/mymodule_.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/mymodule_.c.o -c /usr/share/cmake/Modules/FortranCInterface/mymodule_.c - -CMakeFiles/symbols.dir/mymodule_.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/mymodule_.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/mymodule_.c > CMakeFiles/symbols.dir/mymodule_.c.i - -CMakeFiles/symbols.dir/mymodule_.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/mymodule_.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/mymodule_.c -o CMakeFiles/symbols.dir/mymodule_.c.s - -CMakeFiles/symbols.dir/my_module_.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/my_module_.c.o: /usr/share/cmake/Modules/FortranCInterface/my_module_.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object CMakeFiles/symbols.dir/my_module_.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/my_module_.c.o -c /usr/share/cmake/Modules/FortranCInterface/my_module_.c - -CMakeFiles/symbols.dir/my_module_.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/my_module_.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/my_module_.c > CMakeFiles/symbols.dir/my_module_.c.i - -CMakeFiles/symbols.dir/my_module_.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/my_module_.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/my_module_.c -o CMakeFiles/symbols.dir/my_module_.c.s - -CMakeFiles/symbols.dir/MY_MODULE.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/MY_MODULE.c.o: /usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object CMakeFiles/symbols.dir/MY_MODULE.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/MY_MODULE.c.o -c /usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c - -CMakeFiles/symbols.dir/MY_MODULE.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/MY_MODULE.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c > CMakeFiles/symbols.dir/MY_MODULE.c.i - -CMakeFiles/symbols.dir/MY_MODULE.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/MY_MODULE.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c -o CMakeFiles/symbols.dir/MY_MODULE.c.s - -CMakeFiles/symbols.dir/MYMODULE.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/MYMODULE.c.o: /usr/share/cmake/Modules/FortranCInterface/MYMODULE.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object CMakeFiles/symbols.dir/MYMODULE.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/MYMODULE.c.o -c /usr/share/cmake/Modules/FortranCInterface/MYMODULE.c - -CMakeFiles/symbols.dir/MYMODULE.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/MYMODULE.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /usr/share/cmake/Modules/FortranCInterface/MYMODULE.c > CMakeFiles/symbols.dir/MYMODULE.c.i - -CMakeFiles/symbols.dir/MYMODULE.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/MYMODULE.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /usr/share/cmake/Modules/FortranCInterface/MYMODULE.c -o CMakeFiles/symbols.dir/MYMODULE.c.s - -CMakeFiles/symbols.dir/symbols/my_sub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/my_sub.c.o: symbols/my_sub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object CMakeFiles/symbols.dir/symbols/my_sub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub.c - -CMakeFiles/symbols.dir/symbols/my_sub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/my_sub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub.c > CMakeFiles/symbols.dir/symbols/my_sub.c.i - -CMakeFiles/symbols.dir/symbols/my_sub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/my_sub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub.c -o CMakeFiles/symbols.dir/symbols/my_sub.c.s - -CMakeFiles/symbols.dir/symbols/my_sub_.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/my_sub_.c.o: symbols/my_sub_.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object CMakeFiles/symbols.dir/symbols/my_sub_.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/my_sub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c - -CMakeFiles/symbols.dir/symbols/my_sub_.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/my_sub_.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c > CMakeFiles/symbols.dir/symbols/my_sub_.c.i - -CMakeFiles/symbols.dir/symbols/my_sub_.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/my_sub_.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c -o CMakeFiles/symbols.dir/symbols/my_sub_.c.s - -CMakeFiles/symbols.dir/symbols/my_sub__.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/my_sub__.c.o: symbols/my_sub__.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object CMakeFiles/symbols.dir/symbols/my_sub__.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/my_sub__.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c - -CMakeFiles/symbols.dir/symbols/my_sub__.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/my_sub__.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c > CMakeFiles/symbols.dir/symbols/my_sub__.c.i - -CMakeFiles/symbols.dir/symbols/my_sub__.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/my_sub__.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c -o CMakeFiles/symbols.dir/symbols/my_sub__.c.s - -CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o: symbols/MY_SUB-UPPER.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building C object CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c - -CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c > CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.i - -CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c -o CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.s - -CMakeFiles/symbols.dir/symbols/mysub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/mysub.c.o: symbols/mysub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building C object CMakeFiles/symbols.dir/symbols/mysub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub.c - -CMakeFiles/symbols.dir/symbols/mysub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/mysub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub.c > CMakeFiles/symbols.dir/symbols/mysub.c.i - -CMakeFiles/symbols.dir/symbols/mysub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/mysub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub.c -o CMakeFiles/symbols.dir/symbols/mysub.c.s - -CMakeFiles/symbols.dir/symbols/mysub_.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/mysub_.c.o: symbols/mysub_.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building C object CMakeFiles/symbols.dir/symbols/mysub_.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/mysub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub_.c - -CMakeFiles/symbols.dir/symbols/mysub_.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/mysub_.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub_.c > CMakeFiles/symbols.dir/symbols/mysub_.c.i - -CMakeFiles/symbols.dir/symbols/mysub_.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/mysub_.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub_.c -o CMakeFiles/symbols.dir/symbols/mysub_.c.s - -CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o: symbols/MYSUB-UPPER.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building C object CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c - -CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c > CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.i - -CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c -o CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.s - -CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o: symbols/__my_module_MOD_my_sub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building C object CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c - -CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c > CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.i - -CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c -o CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.s - -CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o: symbols/__my_module_NMOD_my_sub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building C object CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c - -CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c > CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.i - -CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c -o CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.s - -CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o: symbols/__my_module__my_sub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building C object CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c - -CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c > CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.i - -CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c -o CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.s - -CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o: symbols/__mymodule_MOD_mysub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building C object CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c - -CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c > CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.i - -CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c -o CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.s - -CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o: symbols/__mymodule_NMOD_mysub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building C object CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c - -CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c > CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.i - -CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c -o CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.s - -CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o: symbols/__mymodule__mysub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building C object CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c - -CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c > CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.i - -CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c -o CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.s - -CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o: symbols/my_moduleSmy_sub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building C object CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c - -CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c > CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.i - -CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c -o CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.s - -CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o: symbols/my_module_mp_my_sub_.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building C object CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c - -CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c > CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.i - -CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c -o CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.s - -CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o: symbols/MY_MODULE_mp_MY_SUB-UPPER.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building C object CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c - -CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c > CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.i - -CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c -o CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.s - -CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o: symbols/my_module_my_sub_.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building C object CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c - -CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c > CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.i - -CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c -o CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.s - -CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o: symbols/my_module_MP_my_sub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building C object CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c - -CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c > CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.i - -CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c -o CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.s - -CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o: symbols/mymoduleSmysub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building C object CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c - -CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c > CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.i - -CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c -o CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.s - -CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o: symbols/mymodule_mp_mysub_.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building C object CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c - -CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c > CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.i - -CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c -o CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.s - -CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o: symbols/MYMODULE_mp_MYSUB-UPPER.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Building C object CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c - -CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c > CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.i - -CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c -o CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.s - -CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o: symbols/mymodule_mysub_.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_26) "Building C object CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c - -CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c > CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.i - -CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c -o CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.s - -CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o: symbols/mymodule_MP_mysub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_27) "Building C object CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c - -CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c > CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.i - -CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c -o CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.s - -CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o: symbols/_QMmy_modulePmy_sub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_28) "Building C object CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c - -CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c > CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.i - -CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c -o CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.s - -CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o: CMakeFiles/symbols.dir/flags.make -CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o: symbols/_QMmymodulePmysub.c - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_29) "Building C object CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o -c /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c - -CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.i: cmake_force - @echo "Preprocessing C source to CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.i" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c > CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.i - -CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.s: cmake_force - @echo "Compiling C source to assembly CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.s" - /usr/bin/gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c -o CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.s - -# Object files for target symbols -symbols_OBJECTS = \ -"CMakeFiles/symbols.dir/mymodule_.c.o" \ -"CMakeFiles/symbols.dir/my_module_.c.o" \ -"CMakeFiles/symbols.dir/MY_MODULE.c.o" \ -"CMakeFiles/symbols.dir/MYMODULE.c.o" \ -"CMakeFiles/symbols.dir/symbols/my_sub.c.o" \ -"CMakeFiles/symbols.dir/symbols/my_sub_.c.o" \ -"CMakeFiles/symbols.dir/symbols/my_sub__.c.o" \ -"CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o" \ -"CMakeFiles/symbols.dir/symbols/mysub.c.o" \ -"CMakeFiles/symbols.dir/symbols/mysub_.c.o" \ -"CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o" \ -"CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o" \ -"CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o" \ -"CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o" \ -"CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o" \ -"CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o" \ -"CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o" \ -"CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o" \ -"CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o" \ -"CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o" \ -"CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o" \ -"CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o" \ -"CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o" \ -"CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o" \ -"CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o" \ -"CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o" \ -"CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o" \ -"CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o" \ -"CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o" - -# External object files for target symbols -symbols_EXTERNAL_OBJECTS = - -libsymbols.a: CMakeFiles/symbols.dir/mymodule_.c.o -libsymbols.a: CMakeFiles/symbols.dir/my_module_.c.o -libsymbols.a: CMakeFiles/symbols.dir/MY_MODULE.c.o -libsymbols.a: CMakeFiles/symbols.dir/MYMODULE.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/my_sub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/my_sub_.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/my_sub__.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/mysub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/mysub_.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o -libsymbols.a: CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o -libsymbols.a: CMakeFiles/symbols.dir/build.make -libsymbols.a: CMakeFiles/symbols.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles --progress-num=$(CMAKE_PROGRESS_30) "Linking C static library libsymbols.a" - $(CMAKE_COMMAND) -P CMakeFiles/symbols.dir/cmake_clean_target.cmake - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/symbols.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/symbols.dir/build: libsymbols.a -.PHONY : CMakeFiles/symbols.dir/build - -CMakeFiles/symbols.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/symbols.dir/cmake_clean.cmake -.PHONY : CMakeFiles/symbols.dir/clean - -CMakeFiles/symbols.dir/depend: - cd /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/share/cmake/Modules/FortranCInterface /usr/share/cmake/Modules/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/DependInfo.cmake -.PHONY : CMakeFiles/symbols.dir/depend - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/cmake_clean.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/cmake_clean.cmake deleted file mode 100644 index a8b218db3..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/cmake_clean.cmake +++ /dev/null @@ -1,38 +0,0 @@ -file(REMOVE_RECURSE - "CMakeFiles/symbols.dir/MYMODULE.c.o" - "CMakeFiles/symbols.dir/MY_MODULE.c.o" - "CMakeFiles/symbols.dir/my_module_.c.o" - "CMakeFiles/symbols.dir/mymodule_.c.o" - "CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o" - "CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o" - "CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o" - "CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o" - "CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o" - "CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o" - "CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o" - "CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o" - "CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o" - "CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o" - "CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o" - "CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o" - "CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o" - "CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o" - "CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o" - "CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o" - "CMakeFiles/symbols.dir/symbols/my_sub.c.o" - "CMakeFiles/symbols.dir/symbols/my_sub_.c.o" - "CMakeFiles/symbols.dir/symbols/my_sub__.c.o" - "CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o" - "CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o" - "CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o" - "CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o" - "CMakeFiles/symbols.dir/symbols/mysub.c.o" - "CMakeFiles/symbols.dir/symbols/mysub_.c.o" - "libsymbols.a" - "libsymbols.pdb" -) - -# Per-language clean rules from dependency scanning. -foreach(lang C) - include(CMakeFiles/symbols.dir/cmake_clean_${lang}.cmake OPTIONAL) -endforeach() diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/cmake_clean_target.cmake b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/cmake_clean_target.cmake deleted file mode 100644 index aec1a03bf..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/cmake_clean_target.cmake +++ /dev/null @@ -1,3 +0,0 @@ -file(REMOVE_RECURSE - "libsymbols.a" -) diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/compiler_depend.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/compiler_depend.make deleted file mode 100644 index dd189e7fa..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/compiler_depend.make +++ /dev/null @@ -1,2 +0,0 @@ -# Empty compiler generated dependencies file for symbols. -# This may be replaced when dependencies are built. diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/compiler_depend.ts b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/compiler_depend.ts deleted file mode 100644 index 13e893185..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/compiler_depend.ts +++ /dev/null @@ -1,2 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Timestamp file for compiler generated dependencies management for symbols. diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.internal b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.internal deleted file mode 100644 index b5c1a71cf..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.internal +++ /dev/null @@ -1,61 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -CMakeFiles/symbols.dir/MYMODULE.c.o - /usr/share/cmake/Modules/FortranCInterface/MYMODULE.c -CMakeFiles/symbols.dir/MY_MODULE.c.o - /usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c -CMakeFiles/symbols.dir/my_module_.c.o - /usr/share/cmake/Modules/FortranCInterface/my_module_.c -CMakeFiles/symbols.dir/mymodule_.c.o - /usr/share/cmake/Modules/FortranCInterface/mymodule_.c -CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c -CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c -CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c -CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c -CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c -CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c -CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c -CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c -CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c -CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c -CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c -CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c -CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c -CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c -CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c -CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c -CMakeFiles/symbols.dir/symbols/my_sub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub.c -CMakeFiles/symbols.dir/symbols/my_sub_.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c -CMakeFiles/symbols.dir/symbols/my_sub__.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c -CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c -CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c -CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c -CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c -CMakeFiles/symbols.dir/symbols/mysub.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub.c -CMakeFiles/symbols.dir/symbols/mysub_.c.o - /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/symbols/mysub_.c diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.make deleted file mode 100644 index 94a370924..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/depend.make +++ /dev/null @@ -1,61 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -CMakeFiles/symbols.dir/MYMODULE.c.o: \ - /usr/share/cmake/Modules/FortranCInterface/MYMODULE.c -CMakeFiles/symbols.dir/MY_MODULE.c.o: \ - /usr/share/cmake/Modules/FortranCInterface/MY_MODULE.c -CMakeFiles/symbols.dir/my_module_.c.o: \ - /usr/share/cmake/Modules/FortranCInterface/my_module_.c -CMakeFiles/symbols.dir/mymodule_.c.o: \ - /usr/share/cmake/Modules/FortranCInterface/mymodule_.c -CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o: \ - symbols/MYMODULE_mp_MYSUB-UPPER.c -CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o: \ - symbols/MYSUB-UPPER.c -CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o: \ - symbols/MY_MODULE_mp_MY_SUB-UPPER.c -CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o: \ - symbols/MY_SUB-UPPER.c -CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o: \ - symbols/_QMmy_modulePmy_sub.c -CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o: \ - symbols/_QMmymodulePmysub.c -CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o: \ - symbols/__my_module_MOD_my_sub.c -CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o: \ - symbols/__my_module_NMOD_my_sub.c -CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o: \ - symbols/__my_module__my_sub.c -CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o: \ - symbols/__mymodule_MOD_mysub.c -CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o: \ - symbols/__mymodule_NMOD_mysub.c -CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o: \ - symbols/__mymodule__mysub.c -CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o: \ - symbols/my_moduleSmy_sub.c -CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o: \ - symbols/my_module_MP_my_sub.c -CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o: \ - symbols/my_module_mp_my_sub_.c -CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o: \ - symbols/my_module_my_sub_.c -CMakeFiles/symbols.dir/symbols/my_sub.c.o: \ - symbols/my_sub.c -CMakeFiles/symbols.dir/symbols/my_sub_.c.o: \ - symbols/my_sub_.c -CMakeFiles/symbols.dir/symbols/my_sub__.c.o: \ - symbols/my_sub__.c -CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o: \ - symbols/mymoduleSmysub.c -CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o: \ - symbols/mymodule_MP_mysub.c -CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o: \ - symbols/mymodule_mp_mysub_.c -CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o: \ - symbols/mymodule_mysub_.c -CMakeFiles/symbols.dir/symbols/mysub.c.o: \ - symbols/mysub.c -CMakeFiles/symbols.dir/symbols/mysub_.c.o: \ - symbols/mysub_.c diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/flags.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/flags.make deleted file mode 100644 index 2fbfa8bfe..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/flags.make +++ /dev/null @@ -1,10 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# compile C with /usr/bin/gcc -C_DEFINES = - -C_INCLUDES = - -C_FLAGS = -O3 -DNDEBUG -fPIC - diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/link.txt b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/link.txt deleted file mode 100644 index 1d194a736..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/link.txt +++ /dev/null @@ -1,2 +0,0 @@ -/usr/bin/ar qc libsymbols.a CMakeFiles/symbols.dir/mymodule_.c.o CMakeFiles/symbols.dir/my_module_.c.o CMakeFiles/symbols.dir/MY_MODULE.c.o CMakeFiles/symbols.dir/MYMODULE.c.o CMakeFiles/symbols.dir/symbols/my_sub.c.o CMakeFiles/symbols.dir/symbols/my_sub_.c.o CMakeFiles/symbols.dir/symbols/my_sub__.c.o "CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o" CMakeFiles/symbols.dir/symbols/mysub.c.o CMakeFiles/symbols.dir/symbols/mysub_.c.o "CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o" CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o "CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o" CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o "CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o" CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o -/usr/bin/ranlib libsymbols.a diff --git a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/progress.make b/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/progress.make deleted file mode 100644 index ed5e732eb..000000000 --- a/build/CMakeFiles/FortranCInterface/CMakeFiles/symbols.dir/progress.make +++ /dev/null @@ -1,31 +0,0 @@ -CMAKE_PROGRESS_1 = 10 -CMAKE_PROGRESS_2 = 11 -CMAKE_PROGRESS_3 = 12 -CMAKE_PROGRESS_4 = 13 -CMAKE_PROGRESS_5 = 14 -CMAKE_PROGRESS_6 = 15 -CMAKE_PROGRESS_7 = 16 -CMAKE_PROGRESS_8 = 17 -CMAKE_PROGRESS_9 = 18 -CMAKE_PROGRESS_10 = 19 -CMAKE_PROGRESS_11 = 20 -CMAKE_PROGRESS_12 = 21 -CMAKE_PROGRESS_13 = 22 -CMAKE_PROGRESS_14 = 23 -CMAKE_PROGRESS_15 = 24 -CMAKE_PROGRESS_16 = 25 -CMAKE_PROGRESS_17 = 26 -CMAKE_PROGRESS_18 = 27 -CMAKE_PROGRESS_19 = 28 -CMAKE_PROGRESS_20 = 29 -CMAKE_PROGRESS_21 = 30 -CMAKE_PROGRESS_22 = 31 -CMAKE_PROGRESS_23 = 32 -CMAKE_PROGRESS_24 = 33 -CMAKE_PROGRESS_25 = 34 -CMAKE_PROGRESS_26 = 35 -CMAKE_PROGRESS_27 = 36 -CMAKE_PROGRESS_28 = 37 -CMAKE_PROGRESS_29 = 38 -CMAKE_PROGRESS_30 = 39 - diff --git a/build/CMakeFiles/FortranCInterface/FortranCInterface b/build/CMakeFiles/FortranCInterface/FortranCInterface deleted file mode 100755 index 9d334ae94cc3994a7d41968ff480981fbe20586f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18064 zcmeHPeQX@X6@Pb^4+Dwq1d?y}mp9PTYsN z+oLf>Z6aEU&>{u?C{&^nw5YB6A+;)%sv@;Up%5hgFsiDef`o;jHHCr^P#IL^`rhn& z=iT+%rB$U??T)9wwq=tcBGQs z9NW#Yok*!iq{NeALfd|h=l)0>HPUUVk%CE6zW`pl<7{`F`6Bz7FOuq@bnFc){jbzF z!gfz+$_+fB#Z^Y+tu_oIrM}Oh9Sx=;}GZgiwv>b_Iz%ldtZA#-ImW4 zt0&q{?C);t-ltbedWT|AyQmJ@rv{JS2;q}3OBjbyjm0IbQ+aB9cw*q{uivrh+4mcM zu_N)Fn)gF+4gp+I!U4zZ{t`j+~5t2uJNHERuLX`QSHj_l>}Bm`>%VxSXKuM-OeJ zk)Px8`Rn5N=ll4qTlt#UPMD1cC?z z5eOm>L?DPj5P={9{}T~-zv=RillQ*eko?;E7ux}nU!AqWwYlWI&orD>{i}7ohH&kw z*YUThHI6ybvsCuxd=1l8e;}Q1QQw?Hm3%Gy2{XTH*5dGMy1iUDhiYtgfu1s;xJ(IE zLsKhI{jt9coqqB5P@X*p*j`+?6P_$ z`M|*(GLjFhpCEBy$=ZfpX{0=M<$~ILQ|n2xJIfOJ2Nb`ngT$Wm$&-7DM&o8L?DPj5P={9K?H&b1QGbZi9pEpwh^EoUkulp?C#T~ zo;FIYxD6dm4EI!K3KOOLErl7QQk^hv^ME$y;Ti_A3#D{5pD~UM_mhUa+sLiUoOmu8 zvqC!}*BnRgg}B}GZmsqx${(S82IVU#EtH!UYqk4OzJT%-ly9T_fbjQfwN2QGohWyq z+>7#Bl-HshLrL#wDTVGHh0uxS(2h+T8_pn3@9lQtHje&3Lxlc~&4fj9qc+I9v0YSz z+e`1%YE%Y|&56dA8=5ZqLc>Y8{<3SX?%Z`H!BkHkw|V5LSNr{q&Dq8Vh0{!a0ex;q z35XwIocg(lxO&fu_z>eyBEE#Uyu&9m^8W&E#P{N_BToLEIQ8XkxXpWTgn|@AAc#N^ zfgl1w1cC?z5eOm>L?DR3e`y59x5QP;qAYRhqS7grqCe!(X>LJD%70+1b)CLlq_oKv zI3bFw+-BAnxV}qSm+zW)ur70r%UD0h-!apiijtInc)nI5{jo@#g#C>+%Ivy0sp?y3 zlCxY+b3jTj+X60P*}`%gOA+;NA^E$;Fc+w~8s=sGM=z==eaaTFv_7tKf()2YPSn**6{Q=&52xFv1DcR6dW7r z>4al_Ju&D@^z2`Qm^j?i7F(lyuor!d43W2io+#vw;g72gxnj=33RN|nw|%nWBIDQ5 zRxZ_6&g4reG4f!xu?Mt|Cz{jK0X*2dE7WPm>T5W@%VS9Uu9x$3E)(g;kz;@R8h+$_ zu*l~HKR>f@EMw{vvA`P zkaZMpd>!25>t}uaJm}_csGtAb_{REq(v3HO-}xm17l53X-24kc&Tnq~qWXEzjpJ2; zccMEjCzdGY{9(+LgX@&;P?PnD6 zX2*UmmE2B#!Wd7Ev%Fupi*O-1} z^D;&FGvQ&M>q2|AQl`ap?RYascVR~NKD@t4XHCmqS=Szmwc~wS{ST?Q?k-ifVtNUe zap66iVVP4vYq<0T@RBb*itDnFQ?aV}y=4lP7m^uP!AQ|kGFk(cE*Vq#(uA2e(pITl zG0f@-NR_jApov2>=pN2RO_}*T zz1-3#L1poEmOgnP3jDeZn_8HmcVw9He=EiX-q&CXPK@>*888Np_S5<~1MkC)fuv!B z$^KC=1`iJ(>OE`>Clbd7#*DGvLx%^D*#G&Xy+?-nqzP#0T8JktMkaN<-t2$0L~j@u z*QIksqgu(N*IKb>q)p4T7vf>nxX!QMft4@&R*4D1=}O7Sn#DA&4m2hz6>*r(8|r4+ zv@!(Y&9gC`Lyj!R@pAOD^srEQb?C#U>U~7Bm>S(=Pl4_p9S5@oWNf-;(EEHx~ONe zymM#MXe*j+VejR(h2+t(S;(cZ))M-{A6->oJHtT&9S^nw9z&q>ludOVaq5lgscu?U zIX6+Y@Ob^VB)Vh5Q$C&ERg(L4S!XWyGhD2=k|+6T+-S}(_Hth@>#8*@b0(U5I8!$& zPJ6lkm-W@VoMg<)bxPnNkG&P1tS?4|z?v;86F zE%9@nCAN<`?D6hwMf@H|jAA1Gf$s23ed*k0map9gBT!ME8?gtz{uuz;E<_VRxP zp3rQITWwMQ_16D9mN@O}^U5o1lV(r)GzZ{`F|4feH6TE~r2R7A-unsdH*@_=ue%m| z@BSn8i`8*bqhL`R8J`LB9~$-Y*`q?=wY-=1yB1Vds~l q+J&3MUCv+hJX>OCTiCzjJ+@r*IQKLM=V1Q!BL{8!Ydi)X75)xGXOwOL diff --git a/build/CMakeFiles/FortranCInterface/Input.cmake b/build/CMakeFiles/FortranCInterface/Input.cmake deleted file mode 100644 index d56b4653d..000000000 --- a/build/CMakeFiles/FortranCInterface/Input.cmake +++ /dev/null @@ -1,3 +0,0 @@ -set(CMAKE_Fortran_COMPILER_ID "GNU") -set(FortranCInterface_GLOBAL_SYMBOLS "") -set(FortranCInterface_MODULE_SYMBOLS "") diff --git a/build/CMakeFiles/FortranCInterface/Makefile b/build/CMakeFiles/FortranCInterface/Makefile deleted file mode 100644 index f8827e25f..000000000 --- a/build/CMakeFiles/FortranCInterface/Makefile +++ /dev/null @@ -1,1154 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.26 - -# Default target executed when no arguments are given to make. -default_target: all -.PHONY : default_target - -# Allow only one "make -f Makefile2" at a time, but pass parallelism. -.NOTPARALLEL: - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - -# Disable VCS-based implicit rules. -% : %,v - -# Disable VCS-based implicit rules. -% : RCS/% - -# Disable VCS-based implicit rules. -% : RCS/%,v - -# Disable VCS-based implicit rules. -% : SCCS/s.% - -# Disable VCS-based implicit rules. -% : s.% - -.SUFFIXES: .hpux_make_needs_suffix_list - -# Command-line flag to silence nested $(MAKE). -$(VERBOSE)MAKESILENT = -s - -#Suppress display of executed commands. -$(VERBOSE).SILENT: - -# A target that is always out of date. -cmake_force: -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/bin/cmake - -# The command to remove a file. -RM = /usr/bin/cmake -E rm -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /usr/share/cmake/Modules/FortranCInterface - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface - -#============================================================================= -# Targets provided globally by CMake. - -# Special rule for the target edit_cache -edit_cache: - @echo "Running CMake cache editor..." - /usr/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : edit_cache - -# Special rule for the target edit_cache -edit_cache/fast: edit_cache -.PHONY : edit_cache/fast - -# Special rule for the target rebuild_cache -rebuild_cache: - @echo "Running CMake to regenerate build system..." - /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : rebuild_cache - -# Special rule for the target rebuild_cache -rebuild_cache/fast: rebuild_cache -.PHONY : rebuild_cache/fast - -# The main all target -all: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface//CMakeFiles/progress.marks - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all - $(CMAKE_COMMAND) -E cmake_progress_start /home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/CMakeFiles 0 -.PHONY : all - -# The main clean target -clean: - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean -.PHONY : clean - -# The main clean target -clean/fast: clean -.PHONY : clean/fast - -# Prepare targets for installation. -preinstall: all - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall -.PHONY : preinstall - -# Prepare targets for installation. -preinstall/fast: - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall -.PHONY : preinstall/fast - -# clear depends -depend: - $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 -.PHONY : depend - -#============================================================================= -# Target rules for targets named myfort - -# Build rule for target. -myfort: cmake_check_build_system - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 myfort -.PHONY : myfort - -# fast build rule for target. -myfort/fast: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/build -.PHONY : myfort/fast - -#============================================================================= -# Target rules for targets named symbols - -# Build rule for target. -symbols: cmake_check_build_system - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 symbols -.PHONY : symbols - -# fast build rule for target. -symbols/fast: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/build -.PHONY : symbols/fast - -#============================================================================= -# Target rules for targets named FortranCInterface - -# Build rule for target. -FortranCInterface: cmake_check_build_system - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 FortranCInterface -.PHONY : FortranCInterface - -# fast build rule for target. -FortranCInterface/fast: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/build -.PHONY : FortranCInterface/fast - -MYMODULE.o: MYMODULE.c.o -.PHONY : MYMODULE.o - -# target to build an object file -MYMODULE.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/MYMODULE.c.o -.PHONY : MYMODULE.c.o - -MYMODULE.i: MYMODULE.c.i -.PHONY : MYMODULE.i - -# target to preprocess a source file -MYMODULE.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/MYMODULE.c.i -.PHONY : MYMODULE.c.i - -MYMODULE.s: MYMODULE.c.s -.PHONY : MYMODULE.s - -# target to generate assembly for a file -MYMODULE.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/MYMODULE.c.s -.PHONY : MYMODULE.c.s - -MY_MODULE.o: MY_MODULE.c.o -.PHONY : MY_MODULE.o - -# target to build an object file -MY_MODULE.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/MY_MODULE.c.o -.PHONY : MY_MODULE.c.o - -MY_MODULE.i: MY_MODULE.c.i -.PHONY : MY_MODULE.i - -# target to preprocess a source file -MY_MODULE.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/MY_MODULE.c.i -.PHONY : MY_MODULE.c.i - -MY_MODULE.s: MY_MODULE.c.s -.PHONY : MY_MODULE.s - -# target to generate assembly for a file -MY_MODULE.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/MY_MODULE.c.s -.PHONY : MY_MODULE.c.s - -call_mod.o: call_mod.f90.o -.PHONY : call_mod.o - -# target to build an object file -call_mod.f90.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/call_mod.f90.o -.PHONY : call_mod.f90.o - -call_mod.i: call_mod.f90.i -.PHONY : call_mod.i - -# target to preprocess a source file -call_mod.f90.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/call_mod.f90.i -.PHONY : call_mod.f90.i - -call_mod.s: call_mod.f90.s -.PHONY : call_mod.s - -# target to generate assembly for a file -call_mod.f90.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/call_mod.f90.s -.PHONY : call_mod.f90.s - -call_sub.o: call_sub.f.o -.PHONY : call_sub.o - -# target to build an object file -call_sub.f.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/call_sub.f.o -.PHONY : call_sub.f.o - -call_sub.i: call_sub.f.i -.PHONY : call_sub.i - -# target to preprocess a source file -call_sub.f.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/call_sub.f.i -.PHONY : call_sub.f.i - -call_sub.s: call_sub.f.s -.PHONY : call_sub.s - -# target to generate assembly for a file -call_sub.f.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/call_sub.f.s -.PHONY : call_sub.f.s - -main.o: main.F.o -.PHONY : main.o - -# target to build an object file -main.F.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/main.F.o -.PHONY : main.F.o - -main.i: main.F.i -.PHONY : main.i - -# target to preprocess a source file -main.F.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/main.F.i -.PHONY : main.F.i - -main.s: main.F.s -.PHONY : main.s - -# target to generate assembly for a file -main.F.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/FortranCInterface.dir/build.make CMakeFiles/FortranCInterface.dir/main.F.s -.PHONY : main.F.s - -my_module.o: my_module.f90.o -.PHONY : my_module.o - -# target to build an object file -my_module.f90.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/my_module.f90.o -.PHONY : my_module.f90.o - -my_module.i: my_module.f90.i -.PHONY : my_module.i - -# target to preprocess a source file -my_module.f90.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/my_module.f90.i -.PHONY : my_module.f90.i - -my_module.s: my_module.f90.s -.PHONY : my_module.s - -# target to generate assembly for a file -my_module.f90.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/my_module.f90.s -.PHONY : my_module.f90.s - -my_module_.o: my_module_.c.o -.PHONY : my_module_.o - -# target to build an object file -my_module_.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/my_module_.c.o -.PHONY : my_module_.c.o - -my_module_.i: my_module_.c.i -.PHONY : my_module_.i - -# target to preprocess a source file -my_module_.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/my_module_.c.i -.PHONY : my_module_.c.i - -my_module_.s: my_module_.c.s -.PHONY : my_module_.s - -# target to generate assembly for a file -my_module_.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/my_module_.c.s -.PHONY : my_module_.c.s - -my_sub.o: my_sub.f.o -.PHONY : my_sub.o - -# target to build an object file -my_sub.f.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/my_sub.f.o -.PHONY : my_sub.f.o - -my_sub.i: my_sub.f.i -.PHONY : my_sub.i - -# target to preprocess a source file -my_sub.f.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/my_sub.f.i -.PHONY : my_sub.f.i - -my_sub.s: my_sub.f.s -.PHONY : my_sub.s - -# target to generate assembly for a file -my_sub.f.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/my_sub.f.s -.PHONY : my_sub.f.s - -mymodule.o: mymodule.f90.o -.PHONY : mymodule.o - -# target to build an object file -mymodule.f90.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/mymodule.f90.o -.PHONY : mymodule.f90.o - -mymodule.i: mymodule.f90.i -.PHONY : mymodule.i - -# target to preprocess a source file -mymodule.f90.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/mymodule.f90.i -.PHONY : mymodule.f90.i - -mymodule.s: mymodule.f90.s -.PHONY : mymodule.s - -# target to generate assembly for a file -mymodule.f90.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/mymodule.f90.s -.PHONY : mymodule.f90.s - -mymodule_.o: mymodule_.c.o -.PHONY : mymodule_.o - -# target to build an object file -mymodule_.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/mymodule_.c.o -.PHONY : mymodule_.c.o - -mymodule_.i: mymodule_.c.i -.PHONY : mymodule_.i - -# target to preprocess a source file -mymodule_.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/mymodule_.c.i -.PHONY : mymodule_.c.i - -mymodule_.s: mymodule_.c.s -.PHONY : mymodule_.s - -# target to generate assembly for a file -mymodule_.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/mymodule_.c.s -.PHONY : mymodule_.c.s - -mysub.o: mysub.f.o -.PHONY : mysub.o - -# target to build an object file -mysub.f.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/mysub.f.o -.PHONY : mysub.f.o - -mysub.i: mysub.f.i -.PHONY : mysub.i - -# target to preprocess a source file -mysub.f.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/mysub.f.i -.PHONY : mysub.f.i - -mysub.s: mysub.f.s -.PHONY : mysub.s - -# target to generate assembly for a file -mysub.f.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/myfort.dir/build.make CMakeFiles/myfort.dir/mysub.f.s -.PHONY : mysub.f.s - -symbols/MYMODULE_mp_MYSUB-UPPER.o: symbols/MYMODULE_mp_MYSUB-UPPER.c.o -.PHONY : symbols/MYMODULE_mp_MYSUB-UPPER.o - -# target to build an object file -symbols/MYMODULE_mp_MYSUB-UPPER.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.o -.PHONY : symbols/MYMODULE_mp_MYSUB-UPPER.c.o - -symbols/MYMODULE_mp_MYSUB-UPPER.i: symbols/MYMODULE_mp_MYSUB-UPPER.c.i -.PHONY : symbols/MYMODULE_mp_MYSUB-UPPER.i - -# target to preprocess a source file -symbols/MYMODULE_mp_MYSUB-UPPER.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.i -.PHONY : symbols/MYMODULE_mp_MYSUB-UPPER.c.i - -symbols/MYMODULE_mp_MYSUB-UPPER.s: symbols/MYMODULE_mp_MYSUB-UPPER.c.s -.PHONY : symbols/MYMODULE_mp_MYSUB-UPPER.s - -# target to generate assembly for a file -symbols/MYMODULE_mp_MYSUB-UPPER.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MYMODULE_mp_MYSUB-UPPER.c.s -.PHONY : symbols/MYMODULE_mp_MYSUB-UPPER.c.s - -symbols/MYSUB-UPPER.o: symbols/MYSUB-UPPER.c.o -.PHONY : symbols/MYSUB-UPPER.o - -# target to build an object file -symbols/MYSUB-UPPER.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.o -.PHONY : symbols/MYSUB-UPPER.c.o - -symbols/MYSUB-UPPER.i: symbols/MYSUB-UPPER.c.i -.PHONY : symbols/MYSUB-UPPER.i - -# target to preprocess a source file -symbols/MYSUB-UPPER.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.i -.PHONY : symbols/MYSUB-UPPER.c.i - -symbols/MYSUB-UPPER.s: symbols/MYSUB-UPPER.c.s -.PHONY : symbols/MYSUB-UPPER.s - -# target to generate assembly for a file -symbols/MYSUB-UPPER.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MYSUB-UPPER.c.s -.PHONY : symbols/MYSUB-UPPER.c.s - -symbols/MY_MODULE_mp_MY_SUB-UPPER.o: symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o -.PHONY : symbols/MY_MODULE_mp_MY_SUB-UPPER.o - -# target to build an object file -symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o -.PHONY : symbols/MY_MODULE_mp_MY_SUB-UPPER.c.o - -symbols/MY_MODULE_mp_MY_SUB-UPPER.i: symbols/MY_MODULE_mp_MY_SUB-UPPER.c.i -.PHONY : symbols/MY_MODULE_mp_MY_SUB-UPPER.i - -# target to preprocess a source file -symbols/MY_MODULE_mp_MY_SUB-UPPER.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.i -.PHONY : symbols/MY_MODULE_mp_MY_SUB-UPPER.c.i - -symbols/MY_MODULE_mp_MY_SUB-UPPER.s: symbols/MY_MODULE_mp_MY_SUB-UPPER.c.s -.PHONY : symbols/MY_MODULE_mp_MY_SUB-UPPER.s - -# target to generate assembly for a file -symbols/MY_MODULE_mp_MY_SUB-UPPER.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MY_MODULE_mp_MY_SUB-UPPER.c.s -.PHONY : symbols/MY_MODULE_mp_MY_SUB-UPPER.c.s - -symbols/MY_SUB-UPPER.o: symbols/MY_SUB-UPPER.c.o -.PHONY : symbols/MY_SUB-UPPER.o - -# target to build an object file -symbols/MY_SUB-UPPER.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.o -.PHONY : symbols/MY_SUB-UPPER.c.o - -symbols/MY_SUB-UPPER.i: symbols/MY_SUB-UPPER.c.i -.PHONY : symbols/MY_SUB-UPPER.i - -# target to preprocess a source file -symbols/MY_SUB-UPPER.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.i -.PHONY : symbols/MY_SUB-UPPER.c.i - -symbols/MY_SUB-UPPER.s: symbols/MY_SUB-UPPER.c.s -.PHONY : symbols/MY_SUB-UPPER.s - -# target to generate assembly for a file -symbols/MY_SUB-UPPER.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/MY_SUB-UPPER.c.s -.PHONY : symbols/MY_SUB-UPPER.c.s - -symbols/_QMmy_modulePmy_sub.o: symbols/_QMmy_modulePmy_sub.c.o -.PHONY : symbols/_QMmy_modulePmy_sub.o - -# target to build an object file -symbols/_QMmy_modulePmy_sub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.o -.PHONY : symbols/_QMmy_modulePmy_sub.c.o - -symbols/_QMmy_modulePmy_sub.i: symbols/_QMmy_modulePmy_sub.c.i -.PHONY : symbols/_QMmy_modulePmy_sub.i - -# target to preprocess a source file -symbols/_QMmy_modulePmy_sub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.i -.PHONY : symbols/_QMmy_modulePmy_sub.c.i - -symbols/_QMmy_modulePmy_sub.s: symbols/_QMmy_modulePmy_sub.c.s -.PHONY : symbols/_QMmy_modulePmy_sub.s - -# target to generate assembly for a file -symbols/_QMmy_modulePmy_sub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/_QMmy_modulePmy_sub.c.s -.PHONY : symbols/_QMmy_modulePmy_sub.c.s - -symbols/_QMmymodulePmysub.o: symbols/_QMmymodulePmysub.c.o -.PHONY : symbols/_QMmymodulePmysub.o - -# target to build an object file -symbols/_QMmymodulePmysub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.o -.PHONY : symbols/_QMmymodulePmysub.c.o - -symbols/_QMmymodulePmysub.i: symbols/_QMmymodulePmysub.c.i -.PHONY : symbols/_QMmymodulePmysub.i - -# target to preprocess a source file -symbols/_QMmymodulePmysub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.i -.PHONY : symbols/_QMmymodulePmysub.c.i - -symbols/_QMmymodulePmysub.s: symbols/_QMmymodulePmysub.c.s -.PHONY : symbols/_QMmymodulePmysub.s - -# target to generate assembly for a file -symbols/_QMmymodulePmysub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/_QMmymodulePmysub.c.s -.PHONY : symbols/_QMmymodulePmysub.c.s - -symbols/__my_module_MOD_my_sub.o: symbols/__my_module_MOD_my_sub.c.o -.PHONY : symbols/__my_module_MOD_my_sub.o - -# target to build an object file -symbols/__my_module_MOD_my_sub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.o -.PHONY : symbols/__my_module_MOD_my_sub.c.o - -symbols/__my_module_MOD_my_sub.i: symbols/__my_module_MOD_my_sub.c.i -.PHONY : symbols/__my_module_MOD_my_sub.i - -# target to preprocess a source file -symbols/__my_module_MOD_my_sub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.i -.PHONY : symbols/__my_module_MOD_my_sub.c.i - -symbols/__my_module_MOD_my_sub.s: symbols/__my_module_MOD_my_sub.c.s -.PHONY : symbols/__my_module_MOD_my_sub.s - -# target to generate assembly for a file -symbols/__my_module_MOD_my_sub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module_MOD_my_sub.c.s -.PHONY : symbols/__my_module_MOD_my_sub.c.s - -symbols/__my_module_NMOD_my_sub.o: symbols/__my_module_NMOD_my_sub.c.o -.PHONY : symbols/__my_module_NMOD_my_sub.o - -# target to build an object file -symbols/__my_module_NMOD_my_sub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.o -.PHONY : symbols/__my_module_NMOD_my_sub.c.o - -symbols/__my_module_NMOD_my_sub.i: symbols/__my_module_NMOD_my_sub.c.i -.PHONY : symbols/__my_module_NMOD_my_sub.i - -# target to preprocess a source file -symbols/__my_module_NMOD_my_sub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.i -.PHONY : symbols/__my_module_NMOD_my_sub.c.i - -symbols/__my_module_NMOD_my_sub.s: symbols/__my_module_NMOD_my_sub.c.s -.PHONY : symbols/__my_module_NMOD_my_sub.s - -# target to generate assembly for a file -symbols/__my_module_NMOD_my_sub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module_NMOD_my_sub.c.s -.PHONY : symbols/__my_module_NMOD_my_sub.c.s - -symbols/__my_module__my_sub.o: symbols/__my_module__my_sub.c.o -.PHONY : symbols/__my_module__my_sub.o - -# target to build an object file -symbols/__my_module__my_sub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.o -.PHONY : symbols/__my_module__my_sub.c.o - -symbols/__my_module__my_sub.i: symbols/__my_module__my_sub.c.i -.PHONY : symbols/__my_module__my_sub.i - -# target to preprocess a source file -symbols/__my_module__my_sub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.i -.PHONY : symbols/__my_module__my_sub.c.i - -symbols/__my_module__my_sub.s: symbols/__my_module__my_sub.c.s -.PHONY : symbols/__my_module__my_sub.s - -# target to generate assembly for a file -symbols/__my_module__my_sub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__my_module__my_sub.c.s -.PHONY : symbols/__my_module__my_sub.c.s - -symbols/__mymodule_MOD_mysub.o: symbols/__mymodule_MOD_mysub.c.o -.PHONY : symbols/__mymodule_MOD_mysub.o - -# target to build an object file -symbols/__mymodule_MOD_mysub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.o -.PHONY : symbols/__mymodule_MOD_mysub.c.o - -symbols/__mymodule_MOD_mysub.i: symbols/__mymodule_MOD_mysub.c.i -.PHONY : symbols/__mymodule_MOD_mysub.i - -# target to preprocess a source file -symbols/__mymodule_MOD_mysub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.i -.PHONY : symbols/__mymodule_MOD_mysub.c.i - -symbols/__mymodule_MOD_mysub.s: symbols/__mymodule_MOD_mysub.c.s -.PHONY : symbols/__mymodule_MOD_mysub.s - -# target to generate assembly for a file -symbols/__mymodule_MOD_mysub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule_MOD_mysub.c.s -.PHONY : symbols/__mymodule_MOD_mysub.c.s - -symbols/__mymodule_NMOD_mysub.o: symbols/__mymodule_NMOD_mysub.c.o -.PHONY : symbols/__mymodule_NMOD_mysub.o - -# target to build an object file -symbols/__mymodule_NMOD_mysub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.o -.PHONY : symbols/__mymodule_NMOD_mysub.c.o - -symbols/__mymodule_NMOD_mysub.i: symbols/__mymodule_NMOD_mysub.c.i -.PHONY : symbols/__mymodule_NMOD_mysub.i - -# target to preprocess a source file -symbols/__mymodule_NMOD_mysub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.i -.PHONY : symbols/__mymodule_NMOD_mysub.c.i - -symbols/__mymodule_NMOD_mysub.s: symbols/__mymodule_NMOD_mysub.c.s -.PHONY : symbols/__mymodule_NMOD_mysub.s - -# target to generate assembly for a file -symbols/__mymodule_NMOD_mysub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule_NMOD_mysub.c.s -.PHONY : symbols/__mymodule_NMOD_mysub.c.s - -symbols/__mymodule__mysub.o: symbols/__mymodule__mysub.c.o -.PHONY : symbols/__mymodule__mysub.o - -# target to build an object file -symbols/__mymodule__mysub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.o -.PHONY : symbols/__mymodule__mysub.c.o - -symbols/__mymodule__mysub.i: symbols/__mymodule__mysub.c.i -.PHONY : symbols/__mymodule__mysub.i - -# target to preprocess a source file -symbols/__mymodule__mysub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.i -.PHONY : symbols/__mymodule__mysub.c.i - -symbols/__mymodule__mysub.s: symbols/__mymodule__mysub.c.s -.PHONY : symbols/__mymodule__mysub.s - -# target to generate assembly for a file -symbols/__mymodule__mysub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/__mymodule__mysub.c.s -.PHONY : symbols/__mymodule__mysub.c.s - -symbols/my_moduleSmy_sub.o: symbols/my_moduleSmy_sub.c.o -.PHONY : symbols/my_moduleSmy_sub.o - -# target to build an object file -symbols/my_moduleSmy_sub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.o -.PHONY : symbols/my_moduleSmy_sub.c.o - -symbols/my_moduleSmy_sub.i: symbols/my_moduleSmy_sub.c.i -.PHONY : symbols/my_moduleSmy_sub.i - -# target to preprocess a source file -symbols/my_moduleSmy_sub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.i -.PHONY : symbols/my_moduleSmy_sub.c.i - -symbols/my_moduleSmy_sub.s: symbols/my_moduleSmy_sub.c.s -.PHONY : symbols/my_moduleSmy_sub.s - -# target to generate assembly for a file -symbols/my_moduleSmy_sub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_moduleSmy_sub.c.s -.PHONY : symbols/my_moduleSmy_sub.c.s - -symbols/my_module_MP_my_sub.o: symbols/my_module_MP_my_sub.c.o -.PHONY : symbols/my_module_MP_my_sub.o - -# target to build an object file -symbols/my_module_MP_my_sub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.o -.PHONY : symbols/my_module_MP_my_sub.c.o - -symbols/my_module_MP_my_sub.i: symbols/my_module_MP_my_sub.c.i -.PHONY : symbols/my_module_MP_my_sub.i - -# target to preprocess a source file -symbols/my_module_MP_my_sub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.i -.PHONY : symbols/my_module_MP_my_sub.c.i - -symbols/my_module_MP_my_sub.s: symbols/my_module_MP_my_sub.c.s -.PHONY : symbols/my_module_MP_my_sub.s - -# target to generate assembly for a file -symbols/my_module_MP_my_sub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_MP_my_sub.c.s -.PHONY : symbols/my_module_MP_my_sub.c.s - -symbols/my_module_mp_my_sub_.o: symbols/my_module_mp_my_sub_.c.o -.PHONY : symbols/my_module_mp_my_sub_.o - -# target to build an object file -symbols/my_module_mp_my_sub_.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.o -.PHONY : symbols/my_module_mp_my_sub_.c.o - -symbols/my_module_mp_my_sub_.i: symbols/my_module_mp_my_sub_.c.i -.PHONY : symbols/my_module_mp_my_sub_.i - -# target to preprocess a source file -symbols/my_module_mp_my_sub_.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.i -.PHONY : symbols/my_module_mp_my_sub_.c.i - -symbols/my_module_mp_my_sub_.s: symbols/my_module_mp_my_sub_.c.s -.PHONY : symbols/my_module_mp_my_sub_.s - -# target to generate assembly for a file -symbols/my_module_mp_my_sub_.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_mp_my_sub_.c.s -.PHONY : symbols/my_module_mp_my_sub_.c.s - -symbols/my_module_my_sub_.o: symbols/my_module_my_sub_.c.o -.PHONY : symbols/my_module_my_sub_.o - -# target to build an object file -symbols/my_module_my_sub_.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.o -.PHONY : symbols/my_module_my_sub_.c.o - -symbols/my_module_my_sub_.i: symbols/my_module_my_sub_.c.i -.PHONY : symbols/my_module_my_sub_.i - -# target to preprocess a source file -symbols/my_module_my_sub_.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.i -.PHONY : symbols/my_module_my_sub_.c.i - -symbols/my_module_my_sub_.s: symbols/my_module_my_sub_.c.s -.PHONY : symbols/my_module_my_sub_.s - -# target to generate assembly for a file -symbols/my_module_my_sub_.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_module_my_sub_.c.s -.PHONY : symbols/my_module_my_sub_.c.s - -symbols/my_sub.o: symbols/my_sub.c.o -.PHONY : symbols/my_sub.o - -# target to build an object file -symbols/my_sub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub.c.o -.PHONY : symbols/my_sub.c.o - -symbols/my_sub.i: symbols/my_sub.c.i -.PHONY : symbols/my_sub.i - -# target to preprocess a source file -symbols/my_sub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub.c.i -.PHONY : symbols/my_sub.c.i - -symbols/my_sub.s: symbols/my_sub.c.s -.PHONY : symbols/my_sub.s - -# target to generate assembly for a file -symbols/my_sub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub.c.s -.PHONY : symbols/my_sub.c.s - -symbols/my_sub_.o: symbols/my_sub_.c.o -.PHONY : symbols/my_sub_.o - -# target to build an object file -symbols/my_sub_.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub_.c.o -.PHONY : symbols/my_sub_.c.o - -symbols/my_sub_.i: symbols/my_sub_.c.i -.PHONY : symbols/my_sub_.i - -# target to preprocess a source file -symbols/my_sub_.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub_.c.i -.PHONY : symbols/my_sub_.c.i - -symbols/my_sub_.s: symbols/my_sub_.c.s -.PHONY : symbols/my_sub_.s - -# target to generate assembly for a file -symbols/my_sub_.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub_.c.s -.PHONY : symbols/my_sub_.c.s - -symbols/my_sub__.o: symbols/my_sub__.c.o -.PHONY : symbols/my_sub__.o - -# target to build an object file -symbols/my_sub__.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub__.c.o -.PHONY : symbols/my_sub__.c.o - -symbols/my_sub__.i: symbols/my_sub__.c.i -.PHONY : symbols/my_sub__.i - -# target to preprocess a source file -symbols/my_sub__.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub__.c.i -.PHONY : symbols/my_sub__.c.i - -symbols/my_sub__.s: symbols/my_sub__.c.s -.PHONY : symbols/my_sub__.s - -# target to generate assembly for a file -symbols/my_sub__.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/my_sub__.c.s -.PHONY : symbols/my_sub__.c.s - -symbols/mymoduleSmysub.o: symbols/mymoduleSmysub.c.o -.PHONY : symbols/mymoduleSmysub.o - -# target to build an object file -symbols/mymoduleSmysub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.o -.PHONY : symbols/mymoduleSmysub.c.o - -symbols/mymoduleSmysub.i: symbols/mymoduleSmysub.c.i -.PHONY : symbols/mymoduleSmysub.i - -# target to preprocess a source file -symbols/mymoduleSmysub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.i -.PHONY : symbols/mymoduleSmysub.c.i - -symbols/mymoduleSmysub.s: symbols/mymoduleSmysub.c.s -.PHONY : symbols/mymoduleSmysub.s - -# target to generate assembly for a file -symbols/mymoduleSmysub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymoduleSmysub.c.s -.PHONY : symbols/mymoduleSmysub.c.s - -symbols/mymodule_MP_mysub.o: symbols/mymodule_MP_mysub.c.o -.PHONY : symbols/mymodule_MP_mysub.o - -# target to build an object file -symbols/mymodule_MP_mysub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.o -.PHONY : symbols/mymodule_MP_mysub.c.o - -symbols/mymodule_MP_mysub.i: symbols/mymodule_MP_mysub.c.i -.PHONY : symbols/mymodule_MP_mysub.i - -# target to preprocess a source file -symbols/mymodule_MP_mysub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.i -.PHONY : symbols/mymodule_MP_mysub.c.i - -symbols/mymodule_MP_mysub.s: symbols/mymodule_MP_mysub.c.s -.PHONY : symbols/mymodule_MP_mysub.s - -# target to generate assembly for a file -symbols/mymodule_MP_mysub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_MP_mysub.c.s -.PHONY : symbols/mymodule_MP_mysub.c.s - -symbols/mymodule_mp_mysub_.o: symbols/mymodule_mp_mysub_.c.o -.PHONY : symbols/mymodule_mp_mysub_.o - -# target to build an object file -symbols/mymodule_mp_mysub_.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.o -.PHONY : symbols/mymodule_mp_mysub_.c.o - -symbols/mymodule_mp_mysub_.i: symbols/mymodule_mp_mysub_.c.i -.PHONY : symbols/mymodule_mp_mysub_.i - -# target to preprocess a source file -symbols/mymodule_mp_mysub_.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.i -.PHONY : symbols/mymodule_mp_mysub_.c.i - -symbols/mymodule_mp_mysub_.s: symbols/mymodule_mp_mysub_.c.s -.PHONY : symbols/mymodule_mp_mysub_.s - -# target to generate assembly for a file -symbols/mymodule_mp_mysub_.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_mp_mysub_.c.s -.PHONY : symbols/mymodule_mp_mysub_.c.s - -symbols/mymodule_mysub_.o: symbols/mymodule_mysub_.c.o -.PHONY : symbols/mymodule_mysub_.o - -# target to build an object file -symbols/mymodule_mysub_.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.o -.PHONY : symbols/mymodule_mysub_.c.o - -symbols/mymodule_mysub_.i: symbols/mymodule_mysub_.c.i -.PHONY : symbols/mymodule_mysub_.i - -# target to preprocess a source file -symbols/mymodule_mysub_.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.i -.PHONY : symbols/mymodule_mysub_.c.i - -symbols/mymodule_mysub_.s: symbols/mymodule_mysub_.c.s -.PHONY : symbols/mymodule_mysub_.s - -# target to generate assembly for a file -symbols/mymodule_mysub_.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mymodule_mysub_.c.s -.PHONY : symbols/mymodule_mysub_.c.s - -symbols/mysub.o: symbols/mysub.c.o -.PHONY : symbols/mysub.o - -# target to build an object file -symbols/mysub.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mysub.c.o -.PHONY : symbols/mysub.c.o - -symbols/mysub.i: symbols/mysub.c.i -.PHONY : symbols/mysub.i - -# target to preprocess a source file -symbols/mysub.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mysub.c.i -.PHONY : symbols/mysub.c.i - -symbols/mysub.s: symbols/mysub.c.s -.PHONY : symbols/mysub.s - -# target to generate assembly for a file -symbols/mysub.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mysub.c.s -.PHONY : symbols/mysub.c.s - -symbols/mysub_.o: symbols/mysub_.c.o -.PHONY : symbols/mysub_.o - -# target to build an object file -symbols/mysub_.c.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mysub_.c.o -.PHONY : symbols/mysub_.c.o - -symbols/mysub_.i: symbols/mysub_.c.i -.PHONY : symbols/mysub_.i - -# target to preprocess a source file -symbols/mysub_.c.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mysub_.c.i -.PHONY : symbols/mysub_.c.i - -symbols/mysub_.s: symbols/mysub_.c.s -.PHONY : symbols/mysub_.s - -# target to generate assembly for a file -symbols/mysub_.c.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/symbols.dir/build.make CMakeFiles/symbols.dir/symbols/mysub_.c.s -.PHONY : symbols/mysub_.c.s - -# Help Target -help: - @echo "The following are some of the valid targets for this Makefile:" - @echo "... all (the default if no target is provided)" - @echo "... clean" - @echo "... depend" - @echo "... edit_cache" - @echo "... rebuild_cache" - @echo "... FortranCInterface" - @echo "... myfort" - @echo "... symbols" - @echo "... MYMODULE.o" - @echo "... MYMODULE.i" - @echo "... MYMODULE.s" - @echo "... MY_MODULE.o" - @echo "... MY_MODULE.i" - @echo "... MY_MODULE.s" - @echo "... call_mod.o" - @echo "... call_mod.i" - @echo "... call_mod.s" - @echo "... call_sub.o" - @echo "... call_sub.i" - @echo "... call_sub.s" - @echo "... main.o" - @echo "... main.i" - @echo "... main.s" - @echo "... my_module.o" - @echo "... my_module.i" - @echo "... my_module.s" - @echo "... my_module_.o" - @echo "... my_module_.i" - @echo "... my_module_.s" - @echo "... my_sub.o" - @echo "... my_sub.i" - @echo "... my_sub.s" - @echo "... mymodule.o" - @echo "... mymodule.i" - @echo "... mymodule.s" - @echo "... mymodule_.o" - @echo "... mymodule_.i" - @echo "... mymodule_.s" - @echo "... mysub.o" - @echo "... mysub.i" - @echo "... mysub.s" - @echo "... symbols/MYMODULE_mp_MYSUB-UPPER.o" - @echo "... symbols/MYMODULE_mp_MYSUB-UPPER.i" - @echo "... symbols/MYMODULE_mp_MYSUB-UPPER.s" - @echo "... symbols/MYSUB-UPPER.o" - @echo "... symbols/MYSUB-UPPER.i" - @echo "... symbols/MYSUB-UPPER.s" - @echo "... symbols/MY_MODULE_mp_MY_SUB-UPPER.o" - @echo "... symbols/MY_MODULE_mp_MY_SUB-UPPER.i" - @echo "... symbols/MY_MODULE_mp_MY_SUB-UPPER.s" - @echo "... symbols/MY_SUB-UPPER.o" - @echo "... symbols/MY_SUB-UPPER.i" - @echo "... symbols/MY_SUB-UPPER.s" - @echo "... symbols/_QMmy_modulePmy_sub.o" - @echo "... symbols/_QMmy_modulePmy_sub.i" - @echo "... symbols/_QMmy_modulePmy_sub.s" - @echo "... symbols/_QMmymodulePmysub.o" - @echo "... symbols/_QMmymodulePmysub.i" - @echo "... symbols/_QMmymodulePmysub.s" - @echo "... symbols/__my_module_MOD_my_sub.o" - @echo "... symbols/__my_module_MOD_my_sub.i" - @echo "... symbols/__my_module_MOD_my_sub.s" - @echo "... symbols/__my_module_NMOD_my_sub.o" - @echo "... symbols/__my_module_NMOD_my_sub.i" - @echo "... symbols/__my_module_NMOD_my_sub.s" - @echo "... symbols/__my_module__my_sub.o" - @echo "... symbols/__my_module__my_sub.i" - @echo "... symbols/__my_module__my_sub.s" - @echo "... symbols/__mymodule_MOD_mysub.o" - @echo "... symbols/__mymodule_MOD_mysub.i" - @echo "... symbols/__mymodule_MOD_mysub.s" - @echo "... symbols/__mymodule_NMOD_mysub.o" - @echo "... symbols/__mymodule_NMOD_mysub.i" - @echo "... symbols/__mymodule_NMOD_mysub.s" - @echo "... symbols/__mymodule__mysub.o" - @echo "... symbols/__mymodule__mysub.i" - @echo "... symbols/__mymodule__mysub.s" - @echo "... symbols/my_moduleSmy_sub.o" - @echo "... symbols/my_moduleSmy_sub.i" - @echo "... symbols/my_moduleSmy_sub.s" - @echo "... symbols/my_module_MP_my_sub.o" - @echo "... symbols/my_module_MP_my_sub.i" - @echo "... symbols/my_module_MP_my_sub.s" - @echo "... symbols/my_module_mp_my_sub_.o" - @echo "... symbols/my_module_mp_my_sub_.i" - @echo "... symbols/my_module_mp_my_sub_.s" - @echo "... symbols/my_module_my_sub_.o" - @echo "... symbols/my_module_my_sub_.i" - @echo "... symbols/my_module_my_sub_.s" - @echo "... symbols/my_sub.o" - @echo "... symbols/my_sub.i" - @echo "... symbols/my_sub.s" - @echo "... symbols/my_sub_.o" - @echo "... symbols/my_sub_.i" - @echo "... symbols/my_sub_.s" - @echo "... symbols/my_sub__.o" - @echo "... symbols/my_sub__.i" - @echo "... symbols/my_sub__.s" - @echo "... symbols/mymoduleSmysub.o" - @echo "... symbols/mymoduleSmysub.i" - @echo "... symbols/mymoduleSmysub.s" - @echo "... symbols/mymodule_MP_mysub.o" - @echo "... symbols/mymodule_MP_mysub.i" - @echo "... symbols/mymodule_MP_mysub.s" - @echo "... symbols/mymodule_mp_mysub_.o" - @echo "... symbols/mymodule_mp_mysub_.i" - @echo "... symbols/mymodule_mp_mysub_.s" - @echo "... symbols/mymodule_mysub_.o" - @echo "... symbols/mymodule_mysub_.i" - @echo "... symbols/mymodule_mysub_.s" - @echo "... symbols/mysub.o" - @echo "... symbols/mysub.i" - @echo "... symbols/mysub.s" - @echo "... symbols/mysub_.o" - @echo "... symbols/mysub_.i" - @echo "... symbols/mysub_.s" -.PHONY : help - - - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - diff --git a/build/CMakeFiles/FortranCInterface/Output.cmake b/build/CMakeFiles/FortranCInterface/Output.cmake deleted file mode 100644 index 1382ed6e0..000000000 --- a/build/CMakeFiles/FortranCInterface/Output.cmake +++ /dev/null @@ -1,34 +0,0 @@ -# Global symbol without underscore. -set(FortranCInterface_GLOBAL_SYMBOL "mysub_") -set(FortranCInterface_GLOBAL_PREFIX "") -set(FortranCInterface_GLOBAL_SUFFIX "_") -set(FortranCInterface_GLOBAL_CASE "LOWER") -set(FortranCInterface_GLOBAL_MACRO "(name,NAME) name##_") - -# Global symbol with underscore. -set(FortranCInterface_GLOBAL__SYMBOL "my_sub_") -set(FortranCInterface_GLOBAL__PREFIX "") -set(FortranCInterface_GLOBAL__SUFFIX "_") -set(FortranCInterface_GLOBAL__CASE "LOWER") -set(FortranCInterface_GLOBAL__MACRO "(name,NAME) name##_") - -# Module symbol without underscore. -set(FortranCInterface_MODULE_SYMBOL "__mymodule_MOD_mysub") -set(FortranCInterface_MODULE_PREFIX "__") -set(FortranCInterface_MODULE_MIDDLE "_MOD_") -set(FortranCInterface_MODULE_SUFFIX "") -set(FortranCInterface_MODULE_CASE "LOWER") -set(FortranCInterface_MODULE_MACRO "(mod_name,name, mod_NAME,NAME) __##mod_name##_MOD_##name") - -# Module symbol with underscore. -set(FortranCInterface_MODULE__SYMBOL "__my_module_MOD_my_sub") -set(FortranCInterface_MODULE__PREFIX "__") -set(FortranCInterface_MODULE__MIDDLE "_MOD_") -set(FortranCInterface_MODULE__SUFFIX "") -set(FortranCInterface_MODULE__CASE "LOWER") -set(FortranCInterface_MODULE__MACRO "(mod_name,name, mod_NAME,NAME) __##mod_name##_MOD_##name") - -# Summarize what was found. -set(FortranCInterface_GLOBAL_FOUND 1) -set(FortranCInterface_MODULE_FOUND 1) - diff --git a/build/CMakeFiles/FortranCInterface/cmake_install.cmake b/build/CMakeFiles/FortranCInterface/cmake_install.cmake deleted file mode 100644 index e900143d2..000000000 --- a/build/CMakeFiles/FortranCInterface/cmake_install.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# Install script for directory: /usr/share/cmake/Modules/FortranCInterface - -# Set the install prefix -if(NOT DEFINED CMAKE_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX "/usr/local") -endif() -string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") - -# Set the install configuration name. -if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) - if(BUILD_TYPE) - string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" - CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") - else() - set(CMAKE_INSTALL_CONFIG_NAME "Release") - endif() - message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") -endif() - -# Set the component getting installed. -if(NOT CMAKE_INSTALL_COMPONENT) - if(COMPONENT) - message(STATUS "Install component: \"${COMPONENT}\"") - set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") - else() - set(CMAKE_INSTALL_COMPONENT) - endif() -endif() - -# Install shared libraries without execute permission? -if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) - set(CMAKE_INSTALL_SO_NO_EXE "0") -endif() - -# Is this installation the result of a crosscompile? -if(NOT DEFINED CMAKE_CROSSCOMPILING) - set(CMAKE_CROSSCOMPILING "FALSE") -endif() - -if(CMAKE_INSTALL_COMPONENT) - set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") -else() - set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") -endif() - -string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT - "${CMAKE_INSTALL_MANIFEST_FILES}") -file(WRITE "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/${CMAKE_INSTALL_MANIFEST}" - "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/build/CMakeFiles/FortranCInterface/exe-Release.cmake b/build/CMakeFiles/FortranCInterface/exe-Release.cmake deleted file mode 100644 index 21104f384..000000000 --- a/build/CMakeFiles/FortranCInterface/exe-Release.cmake +++ /dev/null @@ -1 +0,0 @@ -set(FortranCInterface_EXE "/home/stack/test_psblas/psblas3/build/CMakeFiles/FortranCInterface/FortranCInterface") diff --git a/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c b/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c deleted file mode 100644 index bc176973b..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/MYMODULE_mp_MYSUB-UPPER.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* MYMODULE_mp_MYSUB(void) -{ - return "INFO:symbol[MYMODULE_mp_MYSUB]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c b/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c deleted file mode 100644 index 3ec16d0b5..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/MYSUB-UPPER.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* MYSUB(void) -{ - return "INFO:symbol[MYSUB]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c b/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c deleted file mode 100644 index d74980d86..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/MY_MODULE_mp_MY_SUB-UPPER.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* MY_MODULE_mp_MY_SUB(void) -{ - return "INFO:symbol[MY_MODULE_mp_MY_SUB]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c b/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c deleted file mode 100644 index c9de0bf02..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/MY_SUB-UPPER.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* MY_SUB(void) -{ - return "INFO:symbol[MY_SUB]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c b/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c deleted file mode 100644 index aa5a1245a..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/_QMmy_modulePmy_sub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* _QMmy_modulePmy_sub(void) -{ - return "INFO:symbol[_QMmy_modulePmy_sub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c b/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c deleted file mode 100644 index 14abed240..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/_QMmymodulePmysub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* _QMmymodulePmysub(void) -{ - return "INFO:symbol[_QMmymodulePmysub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c b/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c deleted file mode 100644 index bab5b8a00..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/__my_module_MOD_my_sub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* __my_module_MOD_my_sub(void) -{ - return "INFO:symbol[__my_module_MOD_my_sub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c b/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c deleted file mode 100644 index 44bc79b8c..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/__my_module_NMOD_my_sub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* __my_module_NMOD_my_sub(void) -{ - return "INFO:symbol[__my_module_NMOD_my_sub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c b/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c deleted file mode 100644 index 2a315ede7..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/__my_module__my_sub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* __my_module__my_sub(void) -{ - return "INFO:symbol[__my_module__my_sub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c b/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c deleted file mode 100644 index c412a986b..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/__mymodule_MOD_mysub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* __mymodule_MOD_mysub(void) -{ - return "INFO:symbol[__mymodule_MOD_mysub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c b/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c deleted file mode 100644 index fe22ef09f..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/__mymodule_NMOD_mysub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* __mymodule_NMOD_mysub(void) -{ - return "INFO:symbol[__mymodule_NMOD_mysub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c b/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c deleted file mode 100644 index 42ede0eeb..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/__mymodule__mysub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* __mymodule__mysub(void) -{ - return "INFO:symbol[__mymodule__mysub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c b/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c deleted file mode 100644 index 3aaa979fa..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/my_moduleSmy_sub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* my_module$my_sub(void) -{ - return "INFO:symbol[my_module$my_sub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c b/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c deleted file mode 100644 index 79e7ece2d..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/my_module_MP_my_sub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* my_module_MP_my_sub(void) -{ - return "INFO:symbol[my_module_MP_my_sub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c b/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c deleted file mode 100644 index f36fa7657..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/my_module_mp_my_sub_.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* my_module_mp_my_sub_(void) -{ - return "INFO:symbol[my_module_mp_my_sub_]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c b/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c deleted file mode 100644 index ec85c53ff..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/my_module_my_sub_.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* my_module_my_sub_(void) -{ - return "INFO:symbol[my_module_my_sub_]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/my_sub.c b/build/CMakeFiles/FortranCInterface/symbols/my_sub.c deleted file mode 100644 index ce80fd825..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/my_sub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* my_sub(void) -{ - return "INFO:symbol[my_sub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c b/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c deleted file mode 100644 index 693daeb4d..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/my_sub_.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* my_sub_(void) -{ - return "INFO:symbol[my_sub_]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c b/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c deleted file mode 100644 index deddc23bf..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/my_sub__.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* my_sub__(void) -{ - return "INFO:symbol[my_sub__]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c b/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c deleted file mode 100644 index 6528fb5d1..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/mymoduleSmysub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* mymodule$mysub(void) -{ - return "INFO:symbol[mymodule$mysub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c b/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c deleted file mode 100644 index 2f394a2ad..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/mymodule_MP_mysub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* mymodule_MP_mysub(void) -{ - return "INFO:symbol[mymodule_MP_mysub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c b/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c deleted file mode 100644 index e308e5142..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/mymodule_mp_mysub_.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* mymodule_mp_mysub_(void) -{ - return "INFO:symbol[mymodule_mp_mysub_]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c b/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c deleted file mode 100644 index 1fb07773e..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/mymodule_mysub_.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* mymodule_mysub_(void) -{ - return "INFO:symbol[mymodule_mysub_]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/mysub.c b/build/CMakeFiles/FortranCInterface/symbols/mysub.c deleted file mode 100644 index fa32bd7eb..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/mysub.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* mysub(void) -{ - return "INFO:symbol[mysub]"; -} diff --git a/build/CMakeFiles/FortranCInterface/symbols/mysub_.c b/build/CMakeFiles/FortranCInterface/symbols/mysub_.c deleted file mode 100644 index 5d98d30b6..000000000 --- a/build/CMakeFiles/FortranCInterface/symbols/mysub_.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* mysub_(void) -{ - return "INFO:symbol[mysub_]"; -} diff --git a/build/CMakeFiles/cmake.check_cache b/build/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd7317..000000000 --- a/build/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file From 41cc9e8af83a4c63a3605c56ea6f97e10c8025b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20Pep=C3=A8=20Sciarria?= Date: Fri, 14 Nov 2025 12:43:53 +0100 Subject: [PATCH 047/175] hot fix: add " " to PSBLASSTRING --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b931b1e6..96bcb7574 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -136,7 +136,7 @@ message(STATUS "Using compiler ${CMAKE_C_COMPILER};") set(PSBLASMAJOR "3") set(PSBLASMINOR "9") set(PSBLASPATCH "0") -set(PSBLASSTRING "3.9.0") +set(PSBLASSTRING "\"3.9.0\"") # Set default values for IPK_SIZE and LPK_SIZE From dff0c0648616acd22a981a3225afbbbf514b7309 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 19 Nov 2025 14:36:16 +0100 Subject: [PATCH 048/175] Improve messaging from configure and docs --- configure | 8 ++++++-- configure.ac | 4 +++- docs/psblas-3.9.pdf | 6 +++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/configure b/configure index ad040b1ab..d13f81465 100755 --- a/configure +++ b/configure @@ -13085,7 +13085,9 @@ fi LIBRARYPATH : ${LIBRARYPATH} INCLUDEPATH : ${INCLUDEPATH} - MODULE_PATH : ${MODULE_PATH} + MODULE_PATH : ${MODULE_PATH} + + INSTALL_DIR : ${INSTALL_DIR} If you are satisfied, run 'make' to build ${PACKAGE_NAME} and its documentation; otherwise type ./configure --help=short for a complete list of configure options specific to ${PACKAGE_NAME}. @@ -13125,7 +13127,9 @@ printf "%s\n" "$as_me: LIBRARYPATH : ${LIBRARYPATH} INCLUDEPATH : ${INCLUDEPATH} - MODULE_PATH : ${MODULE_PATH} + MODULE_PATH : ${MODULE_PATH} + + INSTALL_DIR : ${INSTALL_DIR} If you are satisfied, run 'make' to build ${PACKAGE_NAME} and its documentation; otherwise type ./configure --help=short for a complete list of configure options specific to ${PACKAGE_NAME}. diff --git a/configure.ac b/configure.ac index c2eade583..38360bf27 100644 --- a/configure.ac +++ b/configure.ac @@ -1164,7 +1164,9 @@ dnl Note : we should use LDLIBS sooner or later! LIBRARYPATH : ${LIBRARYPATH} INCLUDEPATH : ${INCLUDEPATH} - MODULE_PATH : ${MODULE_PATH} + MODULE_PATH : ${MODULE_PATH} + + INSTALL_DIR : ${INSTALL_DIR} If you are satisfied, run 'make' to build ${PACKAGE_NAME} and its documentation; otherwise type ./configure --help=short for a complete list of configure options specific to ${PACKAGE_NAME}. diff --git a/docs/psblas-3.9.pdf b/docs/psblas-3.9.pdf index 4bbd69b48..f22775fd3 100644 --- a/docs/psblas-3.9.pdf +++ b/docs/psblas-3.9.pdf @@ -38872,8 +38872,8 @@ endobj 2478 0 obj << /Title (Parallel Sparse BLAS V. 3.9.0) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id$) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() -/CreationDate (D:20251008095233+02'00') -/ModDate (D:20251008095233+02'00') +/CreationDate (D:20251117160928+01'00') +/ModDate (D:20251117160928+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> @@ -38916,7 +38916,7 @@ endobj /W [1 3 1] /Root 2477 0 R /Info 2478 0 R -/ID [ ] +/ID [ ] /Length 12400 >> stream From 29af092fd634d26202e151fbe858cc39d107849a Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 20 Nov 2025 14:58:21 +0100 Subject: [PATCH 049/175] Require SUBMODULES and bump minimum GNU version to 6.0 --- config/pac.m4 | 51 +++++++++++++++++++++++++++++++++++ configure | 73 ++++++++++++++++++++++++++++++++++++++++++++------- configure.ac | 24 ++++++++++------- 3 files changed, 130 insertions(+), 18 deletions(-) diff --git a/config/pac.m4 b/config/pac.m4 index 90340c8d7..9cb556476 100644 --- a/config/pac.m4 +++ b/config/pac.m4 @@ -956,6 +956,57 @@ end program xtt], AC_LANG_POP([Fortran]) ]) +dnl @synopsis PAC_FORTRAN_TEST_SUBMODULES( [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl +dnl Will try to compile a program checking the SUBMODULES Fortran support. +dnl +dnl Will use MPIFC, otherwise '$FC'. +dnl +dnl If the test passes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. +dnl Note : This file will be likely to induce the compiler to create a module file +dnl (for a module called conftest). +dnl Depending on the compiler flags, this could cause a conftest.mod file to appear +dnl in the present directory, or in another, or with another name. So be warned! +dnl +dnl @author Salvatore Filippone +AC_DEFUN(PAC_FORTRAN_TEST_SUBMODULES, +dnl Warning : square brackets are EVIL! +[AC_MSG_CHECKING([support for Fortran SUBMODULES]) +AC_LANG_PUSH([Fortran]) + ac_exeext='' + ac_ext='F90' + dnl ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + ac_fc=${MPIFC-$FC}; + AC_COMPILE_IFELSE([ +module conftest + + interface + module subroutine foo(v) + integer, intent(inout) :: v(:) + end subroutine foo + end interface +end module conftest +submodule (conftest) conftest_impl + +contains + module subroutine foo(v) + integer, intent(inout) :: v(:) + integer :: i + do i=1,size(v) + v(i)=i + end do + end subroutine foo +end submodule ], + [ AC_MSG_RESULT([yes]) + ifelse([$1], , :, [ $1])], + [ AC_MSG_RESULT([no]) + echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD + ifelse([$2], , , [ $2])]) +AC_LANG_POP([Fortran]) +]) + + dnl @synopsis PAC_CHECK_BLACS dnl dnl Will try to find the BLACS diff --git a/configure b/configure index d13f81465..e6b1d36ff 100755 --- a/configure +++ b/configure @@ -8110,7 +8110,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for TR15581. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8159,7 +8159,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for EXTENDS. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8224,7 +8224,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for CLASS and type bound procedures. - Please get a Fortran compiler that supports them, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports them, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8275,7 +8275,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for SOURCE= allocation. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8316,7 +8316,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for MOVE_ALLOC. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8356,7 +8356,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for ISO_C_BINDING. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8407,7 +8407,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for SAME_TYPE_AS. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8456,7 +8456,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for EXTENDS_TYPE_OF. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8507,7 +8507,7 @@ printf "%s\n" "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 as_fn_error $? "Sorry, cannot build PSBLAS without support for MOLD= allocation. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; esac fi @@ -8520,6 +8520,61 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for Fortran SUBMODULES" >&5 +printf %s "checking support for Fortran SUBMODULES... " >&6; } +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + ac_exeext='' + ac_ext='F90' + ac_fc=${MPIFC-$FC}; + cat > conftest.$ac_ext <<_ACEOF + +module conftest + + interface + module subroutine foo(v) + integer, intent(inout) :: v(:) + end subroutine foo + end interface +end module conftest +submodule (conftest) conftest_impl + +contains + module subroutine foo(v) + integer, intent(inout) :: v(:) + integer :: i + do i=1,size(v) + v(i)=i + end do + end subroutine foo +end submodule +_ACEOF +if ac_fn_fc_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + : +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + as_fn_error $? "Sorry, cannot build without support for SUBMODULES. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0." "$LINENO" 5 ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for Fortran VOLATILE" >&5 printf %s "checking support for Fortran VOLATILE... " >&6; } ac_ext=${ac_fc_srcext-f} diff --git a/configure.ac b/configure.ac index 38360bf27..eb645bdb9 100644 --- a/configure.ac +++ b/configure.ac @@ -599,55 +599,61 @@ fi PAC_FORTRAN_TEST_TR15581( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for TR15581. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])] ) PAC_FORTRAN_TEST_EXTENDS( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for EXTENDS. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])] ) PAC_FORTRAN_TEST_CLASS_TBP( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for CLASS and type bound procedures. - Please get a Fortran compiler that supports them, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports them, e.g. GNU Fortran 6.0.])] ) PAC_FORTRAN_TEST_SOURCE( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for SOURCE= allocation. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])] ) PAC_FORTRAN_HAVE_MOVE_ALLOC( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for MOVE_ALLOC. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])] ) PAC_FORTRAN_TEST_ISO_C_BIND( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for ISO_C_BINDING. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])] ) PAC_FORTRAN_TEST_SAME_TYPE( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for SAME_TYPE_AS. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])] ) PAC_FORTRAN_TEST_EXTENDS_TYPE( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for EXTENDS_TYPE_OF. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])] ) PAC_FORTRAN_TEST_MOLD( [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for MOLD= allocation. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])] +) + +PAC_FORTRAN_TEST_SUBMODULES( + [], + [AC_MSG_ERROR([Sorry, cannot build without support for SUBMODULES. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 6.0.])], ) PAC_FORTRAN_TEST_VOLATILE( From e508de917f14439b27c20ec71843932481182b43 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 21 Nov 2025 13:51:21 +0100 Subject: [PATCH 050/175] Fix CUDA include copying --- cuda/Makefile | 4 ++-- cuda/spgpu/Makefile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cuda/Makefile b/cuda/Makefile index 5e0aaa283..6fbf2cbd7 100755 --- a/cuda/Makefile +++ b/cuda/Makefile @@ -52,11 +52,11 @@ lib: objs ilib cudalib spgpulib /bin/cp -p $(LIBNAME) $(LIBDIR) -objs: spgpuinc $(OBJS) iobjs cudaobjs spgpuobjs +objs: $(OBJS) iobjs cudaobjs spgpuobjs /bin/cp -p *$(.mod) $(MODDIR) /bin/cp -p *.h $(INCDIR) -#$(COBJS): spgpuinc +$(OBJS) iobjs cudaobjs spgpuobjs: spgpuinc spgpuinc: $(MAKE) -C spgpu incl diff --git a/cuda/spgpu/Makefile b/cuda/spgpu/Makefile index 75302a509..8f70b61d9 100644 --- a/cuda/spgpu/Makefile +++ b/cuda/spgpu/Makefile @@ -13,7 +13,7 @@ CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) all: incl objs -objs: $(OBJS) iobjs +objs: incl $(OBJS) iobjs lib: objs iobjs ilib $(AR) $(LIBNAME) $(OBJS) From d887d5ee8a3c1bb4ce52cb0884e3a433f0152a12 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 21 Nov 2025 15:13:10 +0100 Subject: [PATCH 051/175] Split mods from impl in build process --- Make.inc.in | 2 ++ Makefile | 28 +++++++++++++++++++++------- configure | 8 ++++++++ configure.ac | 6 ++++++ cuda/Makefile | 5 +++-- ext/Makefile | 12 +++++++----- linsolve/Makefile | 4 +++- openacc/Makefile | 4 +++- prec/Makefile | 5 ++++- util/Makefile | 5 ++++- 10 files changed, 61 insertions(+), 18 deletions(-) diff --git a/Make.inc.in b/Make.inc.in index ceba77b82..33164e1c8 100755 --- a/Make.inc.in +++ b/Make.inc.in @@ -70,12 +70,14 @@ UTILMODNAME=@UTILMODNAME@ CBINDLIBNAME=libpsb_cbind.a OACCD=@OACCD@ +OACCMODS=@OACCMODS@ OACCLD=@OACCLD@ FCOPENACC=@FCOPENACC@ CCOPENACC=@CCOPENACC@ CXXOPENACC=@CXXOPENACC@ CUDAD=@CUDAD@ +CUDAMODS=@CUDAMODS@ CUDALD=@CUDALD@ LCUDA=@LCUDA@ diff --git a/Makefile b/Makefile index fd18a38c9..131b90a37 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Make.inc -all: dirs based precd linslvd utild cbindd extd $(CUDAD) $(OACCD) libd +all: dirs mods based precd linslvd utild cbindd extd $(CUDAD) $(OACCD) libd @echo "=====================================" @echo "PSBLAS libraries Compilation Successful." @@ -9,12 +9,26 @@ dirs: (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) (if test ! -d modules ; then mkdir modules; fi;) -precd: based -utild: based -linslvd: precd -extd: based -cudad: extd -oaccd: extd +mods: basemods precmods linsolvemods extmods $(CUDAMODS) $(OACCMODS) +basemods: + $(MAKE) -C base mods +precmods: basemods + $(MAKE) -C prec mods +extmods: basemods + $(MAKE) -C ext mods +linsolvemods: precmods + $(MAKE) -C linsolve mods +cudamods: extmods + $(MAKE) -C cuda mods +oaccmods: extmods + $(MAKE) -C openacc mods + +precd: basemods based +utild: basemods based +linslvd: linsolvemods precd +extd: extmods based +cudad: cudamods extd +oaccd: oaccmods extd cbindd: based precd linslvd utild libd: based precd linslvd utild cbindd extd $(CUDALD) $(OACCLD) diff --git a/configure b/configure index e6b1d36ff..b7c67d8a3 100755 --- a/configure +++ b/configure @@ -653,6 +653,7 @@ LIBRSB_INCLUDES LIBRSB_LIBS LCUDA CUDALD +CUDAMODS CUDAD CUDEFINES CUDA_NVCC @@ -672,6 +673,7 @@ CXXOPENACC CCOPENACC FCOPENACC OACCLD +OACCMODS OACCD METISINCFILE UTILLIBNAME @@ -10922,6 +10924,7 @@ printf "%s\n" "$as_me: For CUDA I need psb_ipk_ to be 4 bytes but it is $pac_cv_ CUDA_CC=""; SPGPU_LIBS=""; CUDAD=""; + CUDAMODS=""; CUDALD=""; CUDEFINES=""; CUDA_DEFINES=""; @@ -11171,6 +11174,7 @@ printf "%s\n" "$as_me: Unsupported CUDA version ${PSB_CUDA_VERSION} disabling CU CUDA_CC=""; SPGPU_LIBS=""; CUDAD=""; + CUDAMODS=""; CUDALD=""; CUDEFINES=""; CUDA_DEFINES=""; @@ -11190,6 +11194,7 @@ printf "%s\n" "$as_me: CUDA version ${PSB_CUDA_VERSION}" >&6;} CVERSIONCUDA="#define PSB_CUDA_VERSION ${PSB_CUDA_VERSION}" SPGPU_LIBS="-lspgpu"; CUDAD=cudad; + CUDAMODS=cudamods; CUDALD=cudald; LCUDA="-lpsb_cuda"; EXTRALDLIBS="-lstdc++"; @@ -11611,6 +11616,7 @@ fi CXXOPENACC="$CXXOPENACC $EXTRAOPENACC"; FCOPENACC="$FCOPENACC $EXTRAOPENACC"; OACCD=oaccd; + OACCMODS=oaccmods; OACCLD=oaccld; #FCOPT="$FCOPT $FCOPENACC"; @@ -11770,6 +11776,8 @@ FDEFINES=$(PSBFDEFINES) + + diff --git a/configure.ac b/configure.ac index eb645bdb9..c082b5845 100644 --- a/configure.ac +++ b/configure.ac @@ -852,6 +852,7 @@ if test "x$pac_cv_ipk_size" != "x4"; then CUDA_CC=""; SPGPU_LIBS=""; CUDAD=""; + CUDAMODS=""; CUDALD=""; CUDEFINES=""; CUDA_DEFINES=""; @@ -876,6 +877,7 @@ else CUDA_CC=""; SPGPU_LIBS=""; CUDAD=""; + CUDAMODS=""; CUDALD=""; CUDEFINES=""; CUDA_DEFINES=""; @@ -894,6 +896,7 @@ else CVERSIONCUDA="#define PSB_CUDA_VERSION ${PSB_CUDA_VERSION}" SPGPU_LIBS="-lspgpu"; CUDAD=cudad; + CUDAMODS=cudamods; CUDALD=cudald; LCUDA="-lpsb_cuda"; EXTRALDLIBS="-lstdc++"; @@ -954,6 +957,7 @@ dnl fi FCOPENACC="$FCOPENACC $EXTRAOPENACC"; dnl AC_MSG_NOTICE([OpenACC 3 flags CC $CCOPENACC CXX $CXXOPENACC FC $FCOPENACC]) OACCD=oaccd; + OACCMODS=oaccmods; OACCLD=oaccld; #FCOPT="$FCOPT $FCOPENACC"; @@ -1090,6 +1094,7 @@ AC_SUBST(METHDLIBNAME) AC_SUBST(UTILLIBNAME) AC_SUBST(METISINCFILE) AC_SUBST(OACCD) +AC_SUBST(OACCMODS) AC_SUBST(OACCLD) AC_SUBST(FCOPENACC) AC_SUBST(CCOPENACC) @@ -1113,6 +1118,7 @@ AC_SUBST(PSB_CUDA_SHORT_VERSION) AC_SUBST(CUDA_NVCC) AC_SUBST(CUDEFINES) AC_SUBST(CUDAD) +AC_SUBST(CUDAMODS) AC_SUBST(CUDALD) AC_SUBST(LCUDA) AC_SUBST(LIBRSB_LIBS) diff --git a/cuda/Makefile b/cuda/Makefile index 6fbf2cbd7..2a8bb94f5 100755 --- a/cuda/Makefile +++ b/cuda/Makefile @@ -47,14 +47,15 @@ COBJS= elldev.o hlldev.o diagdev.o hdiagdev.o vectordev.o ivectordev.o dnsdev.o OBJS=$(COBJS) $(FOBJS) -lib: objs ilib cudalib spgpulib +lib: mods objs ilib cudalib spgpulib $(AR) $(LIBNAME) $(OBJS) /bin/cp -p $(LIBNAME) $(LIBDIR) -objs: $(OBJS) iobjs cudaobjs spgpuobjs +mods: $(FOBJS) /bin/cp -p *$(.mod) $(MODDIR) /bin/cp -p *.h $(INCDIR) +objs: mods $(OBJS) iobjs cudaobjs spgpuobjs $(OBJS) iobjs cudaobjs spgpuobjs: spgpuinc diff --git a/ext/Makefile b/ext/Makefile index 6ef24cbae..4b30d8b58 100755 --- a/ext/Makefile +++ b/ext/Makefile @@ -14,7 +14,7 @@ CINCLUDES= LIBNAME=libpsb_ext.a -FOBJS= psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o \ +MODOBJS=psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o \ psb_s_hll_mat_mod.o psb_s_ell_mat_mod.o \ psb_c_hll_mat_mod.o psb_c_ell_mat_mod.o \ psb_z_hll_mat_mod.o psb_z_ell_mat_mod.o \ @@ -31,13 +31,15 @@ FOBJS= psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o \ COBJS= -OBJS=$(COBJS) $(FOBJS) +OBJS=$(COBJS) $(MODOBJS) lib: objs ilib $(AR) $(LIBNAME) $(OBJS) /bin/cp -p $(LIBNAME) $(LIBDIR) -objs: $(OBJS) iobjs +objs: mods $(OBJS) iobjs + +mods: $(MODOBJS) /bin/cp -p *$(.mod) $(MODDIR) @@ -65,11 +67,11 @@ psb_s_hll_mat_mod.o psb_c_hll_mat_mod.o psb_d_hll_mat_mod.o psb_z_hll_mat_mod.o: ilib: objs $(MAKE) -C impl lib LIBNAME=$(LIBNAME) -iobjs: $(OBJS) +iobjs: mods $(MAKE) -C impl objs clean: cclean iclean - /bin/rm -f $(FOBJS) *$(.mod) *.a + /bin/rm -f $(MODOBJS) *$(.mod) *.a cclean: /bin/rm -f $(COBJS) diff --git a/linsolve/Makefile b/linsolve/Makefile index c8fa3ac74..f97222e69 100644 --- a/linsolve/Makefile +++ b/linsolve/Makefile @@ -18,7 +18,9 @@ LIBNAME=$(METHDLIBNAME) FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) -objs: $(OBJS) impld +objs: mods $(OBJS) impld + +mods: $(MODOBJS) /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) lib: objs diff --git a/openacc/Makefile b/openacc/Makefile index 6b1f3fbb3..ed40e0369 100644 --- a/openacc/Makefile +++ b/openacc/Makefile @@ -38,7 +38,9 @@ lib: objs ilib $(AR) $(LIBNAME) $(OBJS) /bin/cp -p $(LIBNAME) $(LIBDIR) -objs: $(OBJS) iobjs +objs: mods $(OBJS) iobjs + +mods: $(FOBJS) /bin/cp -p *$(.mod) $(MODDIR) iobjs: $(OBJS) diff --git a/prec/Makefile b/prec/Makefile index 5d7523f43..c934fe436 100644 --- a/prec/Makefile +++ b/prec/Makefile @@ -28,8 +28,11 @@ COBJS= FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) OBJS=$(F90OBJS) $(COBJS) $(MPFOBJS) $(MODOBJS) -objs: $(OBJS) impld +objs: mods $(OBJS) impld + +mods: $(MODOBJS) /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) + lib: objs $(MAKE) -C impl lib $(AR) $(HERE)/$(LIBNAME) $(OBJS) diff --git a/util/Makefile b/util/Makefile index 968208997..67dfd6e81 100644 --- a/util/Makefile +++ b/util/Makefile @@ -29,8 +29,11 @@ LIBNAME=$(UTILLIBNAME) FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) CINCLUDES=-I. -I$(INCDIR) -objs: $(OBJS) +objs: mods $(OBJS) + +mods: $(MODOBJS) /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) + lib: $(HERE)/$(LIBNAME) /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) From 0432f8c8769efbcbe3c22dab5e5a2f9d50d2fb78 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Sat, 22 Nov 2025 11:27:08 +0100 Subject: [PATCH 052/175] Fix dependencies in main Makefile --- Makefile | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 131b90a37..d59aefe27 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ dirs: (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) (if test ! -d modules ; then mkdir modules; fi;) -mods: basemods precmods linsolvemods extmods $(CUDAMODS) $(OACCMODS) +mods: basemods precmods linsolvemods extmods $(CUDAMODS) $(OACCMODS) utilmods basemods: $(MAKE) -C base mods precmods: basemods @@ -18,13 +18,15 @@ extmods: basemods $(MAKE) -C ext mods linsolvemods: precmods $(MAKE) -C linsolve mods +utilmods: basemods + $(MAKE) -C util mods cudamods: extmods $(MAKE) -C cuda mods oaccmods: extmods $(MAKE) -C openacc mods precd: basemods based -utild: basemods based +utild: utilmods based linslvd: linsolvemods precd extd: extmods based cudad: cudamods extd @@ -44,21 +46,21 @@ oaccld: oaccd $(MAKE) -C openacc lib -based: +based: basemods $(MAKE) -C base objs -precd: +precd: precmods $(MAKE) -C prec objs -linslvd: +linslvd: linsolvemods $(MAKE) -C linsolve objs -utild: +utild: utilmods $(MAKE) -C util objs -cbindd: +cbindd: based $(MAKE) -C cbind objs -extd: +extd: extmods $(MAKE) -C ext objs -cudad: +cudad: cudamods $(MAKE) -C cuda objs -oaccd: +oaccd: oaccmods $(MAKE) -C openacc objs From dbc3c59e534f4295bcbab1c8f32c2bbc150f2da8 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Sat, 22 Nov 2025 12:04:53 +0100 Subject: [PATCH 053/175] Improve Makefile dependencies --- Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index d59aefe27..de601928a 100644 --- a/Makefile +++ b/Makefile @@ -9,14 +9,14 @@ dirs: (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) (if test ! -d modules ; then mkdir modules; fi;) -mods: basemods precmods linsolvemods extmods $(CUDAMODS) $(OACCMODS) utilmods +mods: basemods precmods linslvmods extmods $(CUDAMODS) $(OACCMODS) utilmods basemods: $(MAKE) -C base mods precmods: basemods $(MAKE) -C prec mods extmods: basemods $(MAKE) -C ext mods -linsolvemods: precmods +linslvmods: precmods $(MAKE) -C linsolve mods utilmods: basemods $(MAKE) -C util mods @@ -27,11 +27,11 @@ oaccmods: extmods precd: basemods based utild: utilmods based -linslvd: linsolvemods precd +linslvd: linslvmods precd extd: extmods based cudad: cudamods extd oaccd: oaccmods extd -cbindd: based precd linslvd utild +cbindd: basemods precmods linslvmods utilmods libd: based precd linslvd utild cbindd extd $(CUDALD) $(OACCLD) $(MAKE) -C base lib @@ -50,11 +50,11 @@ based: basemods $(MAKE) -C base objs precd: precmods $(MAKE) -C prec objs -linslvd: linsolvemods +linslvd: linslvmods $(MAKE) -C linsolve objs utild: utilmods $(MAKE) -C util objs -cbindd: based +cbindd: basemods precmods linslvmods utilmods $(MAKE) -C cbind objs extd: extmods $(MAKE) -C ext objs From 24a85013abff8411a48ffb747ec2e178dc6c9c39 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Sat, 22 Nov 2025 19:42:32 +0100 Subject: [PATCH 054/175] Further fixes for Makefile dependencies --- Makefile | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index de601928a..7cbd21755 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,8 @@ dirs: (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) (if test ! -d modules ; then mkdir modules; fi;) -mods: basemods precmods linslvmods extmods $(CUDAMODS) $(OACCMODS) utilmods +mods: basemods utilmods extmods precmods linslvmods $(CUDAMODS) $(OACCMODS) + basemods: $(MAKE) -C base mods precmods: basemods @@ -25,12 +26,12 @@ cudamods: extmods oaccmods: extmods $(MAKE) -C openacc mods -precd: basemods based -utild: utilmods based -linslvd: linslvmods precd -extd: extmods based -cudad: cudamods extd -oaccd: oaccmods extd +precd: based +utild: based +linslvd: precd +extd: based +cudad: extd +oaccd: extd cbindd: basemods precmods linslvmods utilmods libd: based precd linslvd utild cbindd extd $(CUDALD) $(OACCLD) @@ -46,17 +47,17 @@ oaccld: oaccd $(MAKE) -C openacc lib -based: basemods +based: mods $(MAKE) -C base objs -precd: precmods +precd: based $(MAKE) -C prec objs -linslvd: linslvmods +linslvd: precd $(MAKE) -C linsolve objs -utild: utilmods +utild: based $(MAKE) -C util objs cbindd: basemods precmods linslvmods utilmods $(MAKE) -C cbind objs -extd: extmods +extd: based $(MAKE) -C ext objs cudad: cudamods $(MAKE) -C cuda objs From 43fcc53344cdb133c4b07f7bc9d6e15ef996d932 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 24 Nov 2025 17:00:39 +0100 Subject: [PATCH 055/175] Final (hopefully) version of Makefile dependencies --- Makefile | 39 +++++++++++---------------------------- base/modules/Makefile | 4 ++-- cuda/Makefile | 4 ++-- linsolve/Makefile | 2 +- openacc/Makefile | 2 +- prec/Makefile | 2 +- util/Makefile | 2 +- 7 files changed, 19 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index 7cbd21755..fd18a38c9 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Make.inc -all: dirs mods based precd linslvd utild cbindd extd $(CUDAD) $(OACCD) libd +all: dirs based precd linslvd utild cbindd extd $(CUDAD) $(OACCD) libd @echo "=====================================" @echo "PSBLAS libraries Compilation Successful." @@ -9,30 +9,13 @@ dirs: (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) (if test ! -d modules ; then mkdir modules; fi;) -mods: basemods utilmods extmods precmods linslvmods $(CUDAMODS) $(OACCMODS) - -basemods: - $(MAKE) -C base mods -precmods: basemods - $(MAKE) -C prec mods -extmods: basemods - $(MAKE) -C ext mods -linslvmods: precmods - $(MAKE) -C linsolve mods -utilmods: basemods - $(MAKE) -C util mods -cudamods: extmods - $(MAKE) -C cuda mods -oaccmods: extmods - $(MAKE) -C openacc mods - precd: based utild: based -linslvd: precd +linslvd: precd extd: based cudad: extd oaccd: extd -cbindd: basemods precmods linslvmods utilmods +cbindd: based precd linslvd utild libd: based precd linslvd utild cbindd extd $(CUDALD) $(OACCLD) $(MAKE) -C base lib @@ -47,21 +30,21 @@ oaccld: oaccd $(MAKE) -C openacc lib -based: mods +based: $(MAKE) -C base objs -precd: based +precd: $(MAKE) -C prec objs -linslvd: precd +linslvd: $(MAKE) -C linsolve objs -utild: based +utild: $(MAKE) -C util objs -cbindd: basemods precmods linslvmods utilmods +cbindd: $(MAKE) -C cbind objs -extd: based +extd: $(MAKE) -C ext objs -cudad: cudamods +cudad: $(MAKE) -C cuda objs -oaccd: oaccmods +oaccd: $(MAKE) -C openacc objs diff --git a/base/modules/Makefile b/base/modules/Makefile index dd13cb2b7..b582b8b76 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -123,8 +123,8 @@ FINCLUDES=$(FMFLAG)$(LIBDIR) $(FMFLAG). $(FIFLAG). objs: $(MODULES) $(OBJS) $(MPFOBJS) - /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) - /bin/cp -p $(CPUPDFLAG) psb_config.h psb_types.h $(INCDIR) + $(INSTALL) -p $(CPUPDFLAG) *$(.mod) $(MODDIR) + $(INSTALL) -p $(CPUPDFLAG) psb_config.h psb_types.h $(INCDIR) lib: objs $(LIBDIR)/$(LIBNAME) diff --git a/cuda/Makefile b/cuda/Makefile index 2a8bb94f5..258d9059e 100755 --- a/cuda/Makefile +++ b/cuda/Makefile @@ -53,8 +53,8 @@ lib: mods objs ilib cudalib spgpulib mods: $(FOBJS) - /bin/cp -p *$(.mod) $(MODDIR) - /bin/cp -p *.h $(INCDIR) + $(INSTALL) -p *$(.mod) $(MODDIR) + $(INSTALL) -p *.h $(INCDIR) objs: mods $(OBJS) iobjs cudaobjs spgpuobjs $(OBJS) iobjs cudaobjs spgpuobjs: spgpuinc diff --git a/linsolve/Makefile b/linsolve/Makefile index f97222e69..fa64b1b7e 100644 --- a/linsolve/Makefile +++ b/linsolve/Makefile @@ -21,7 +21,7 @@ FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) objs: mods $(OBJS) impld mods: $(MODOBJS) - /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) + $(INSTALL) -p $(CPUPDFLAG) *$(.mod) $(MODDIR) lib: objs $(MAKE) -C impl lib diff --git a/openacc/Makefile b/openacc/Makefile index ed40e0369..6976955bc 100644 --- a/openacc/Makefile +++ b/openacc/Makefile @@ -41,7 +41,7 @@ lib: objs ilib objs: mods $(OBJS) iobjs mods: $(FOBJS) - /bin/cp -p *$(.mod) $(MODDIR) + $(INSTALL) -p *$(.mod) $(MODDIR) iobjs: $(OBJS) $(MAKE) -C impl objs diff --git a/prec/Makefile b/prec/Makefile index c934fe436..6121840d9 100644 --- a/prec/Makefile +++ b/prec/Makefile @@ -31,7 +31,7 @@ OBJS=$(F90OBJS) $(COBJS) $(MPFOBJS) $(MODOBJS) objs: mods $(OBJS) impld mods: $(MODOBJS) - /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) + $(INSTALL) -p $(CPUPDFLAG) *$(.mod) $(MODDIR) lib: objs $(MAKE) -C impl lib diff --git a/util/Makefile b/util/Makefile index 67dfd6e81..f19650899 100644 --- a/util/Makefile +++ b/util/Makefile @@ -32,7 +32,7 @@ CINCLUDES=-I. -I$(INCDIR) objs: mods $(OBJS) mods: $(MODOBJS) - /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) + $(INSTALL) -p $(CPUPDFLAG) *$(.mod) $(MODDIR) lib: $(HERE)/$(LIBNAME) /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) From 53331170109a773a1437cc29d0f445436cad914b Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 27 Nov 2025 15:13:29 +0100 Subject: [PATCH 056/175] Fix vect_clone, expose to C interface --- base/modules/serial/psb_c_vect_mod.F90 | 2 +- base/modules/serial/psb_d_vect_mod.F90 | 2 +- base/modules/serial/psb_i_vect_mod.F90 | 2 +- base/modules/serial/psb_l_vect_mod.F90 | 2 +- base/modules/serial/psb_s_vect_mod.F90 | 2 +- base/modules/serial/psb_z_vect_mod.F90 | 2 +- cbind/base/psb_c_cbase.h | 1 + cbind/base/psb_c_dbase.h | 1 + cbind/base/psb_c_sbase.h | 1 + cbind/base/psb_c_serial_cbind_mod.F90 | 24 ++++++++++++++++++++++++ cbind/base/psb_c_zbase.h | 1 + cbind/base/psb_d_serial_cbind_mod.F90 | 24 ++++++++++++++++++++++++ cbind/base/psb_s_serial_cbind_mod.F90 | 24 ++++++++++++++++++++++++ cbind/base/psb_z_serial_cbind_mod.F90 | 24 ++++++++++++++++++++++++ cbind/psb_c_base.h | 3 --- cbind/psb_c_cbase.h | 2 +- cbind/psb_c_dbase.h | 2 +- cbind/psb_c_sbase.h | 2 +- cbind/psb_c_zbase.h | 2 +- 19 files changed, 110 insertions(+), 13 deletions(-) diff --git a/base/modules/serial/psb_c_vect_mod.F90 b/base/modules/serial/psb_c_vect_mod.F90 index c820d937a..9c387c134 100644 --- a/base/modules/serial/psb_c_vect_mod.F90 +++ b/base/modules/serial/psb_c_vect_mod.F90 @@ -382,7 +382,7 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - call y%bld(x%get_vect(),mold=x%v) + allocate(y%v,source=x%v, stat=info) end if end subroutine c_vect_clone diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index 7fd1a4005..4aaab1704 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -389,7 +389,7 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - call y%bld(x%get_vect(),mold=x%v) + allocate(y%v,source=x%v, stat=info) end if end subroutine d_vect_clone diff --git a/base/modules/serial/psb_i_vect_mod.F90 b/base/modules/serial/psb_i_vect_mod.F90 index 6012005c5..9276093d9 100644 --- a/base/modules/serial/psb_i_vect_mod.F90 +++ b/base/modules/serial/psb_i_vect_mod.F90 @@ -327,7 +327,7 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - call y%bld(x%get_vect(),mold=x%v) + allocate(y%v,source=x%v, stat=info) end if end subroutine i_vect_clone diff --git a/base/modules/serial/psb_l_vect_mod.F90 b/base/modules/serial/psb_l_vect_mod.F90 index d9a91d111..06afda3a0 100644 --- a/base/modules/serial/psb_l_vect_mod.F90 +++ b/base/modules/serial/psb_l_vect_mod.F90 @@ -328,7 +328,7 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - call y%bld(x%get_vect(),mold=x%v) + allocate(y%v,source=x%v, stat=info) end if end subroutine l_vect_clone diff --git a/base/modules/serial/psb_s_vect_mod.F90 b/base/modules/serial/psb_s_vect_mod.F90 index ddb5590ba..781050135 100644 --- a/base/modules/serial/psb_s_vect_mod.F90 +++ b/base/modules/serial/psb_s_vect_mod.F90 @@ -389,7 +389,7 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - call y%bld(x%get_vect(),mold=x%v) + allocate(y%v,source=x%v, stat=info) end if end subroutine s_vect_clone diff --git a/base/modules/serial/psb_z_vect_mod.F90 b/base/modules/serial/psb_z_vect_mod.F90 index 8f593d0ef..4820e794a 100644 --- a/base/modules/serial/psb_z_vect_mod.F90 +++ b/base/modules/serial/psb_z_vect_mod.F90 @@ -382,7 +382,7 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - call y%bld(x%get_vect(),mold=x%v) + allocate(y%v,source=x%v, stat=info) end if end subroutine z_vect_clone diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index bff9633a7..0b8899239 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -22,6 +22,7 @@ psb_c_t *psb_c_cvect_get_cpy( psb_c_cvector *xh); psb_i_t psb_c_cvect_f_get_cpy(psb_c_t *v, psb_c_cvector *xh); psb_i_t psb_c_cvect_zero(psb_c_cvector *xh); psb_i_t *psb_c_cvect_f_get_pnt(psb_c_cvector *xh); +psb_i_t psb_c_cvect_clone(psb_c_cvector *xh,psb_c_cvector *yh); psb_i_t psb_c_cgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeall_remote(psb_c_cvector *xh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index 591f885b2..b68837bb8 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -22,6 +22,7 @@ psb_d_t *psb_c_dvect_get_cpy( psb_c_dvector *xh); psb_i_t psb_c_dvect_f_get_cpy(psb_d_t *v, psb_c_dvector *xh); psb_i_t psb_c_dvect_zero(psb_c_dvector *xh); psb_d_t *psb_c_dvect_f_get_pnt( psb_c_dvector *xh); +psb_i_t psb_c_dvect_clone(psb_c_dvector *xh,psb_c_dvector *yh); psb_i_t psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeall_remote(psb_c_dvector *xh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index 68abefdd9..cb302760c 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -22,6 +22,7 @@ psb_s_t *psb_c_svect_get_cpy( psb_c_svector *xh); psb_i_t psb_c_svect_f_get_cpy(psb_s_t *v, psb_c_svector *xh); psb_i_t psb_c_svect_zero(psb_c_svector *xh); psb_s_t *psb_c_svect_f_get_pnt( psb_c_svector *xh); +psb_i_t psb_c_svect_clone(psb_c_svector *xh,psb_c_svector *yh); psb_i_t psb_c_sgeall(psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeall_remote(psb_c_svector *xh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_serial_cbind_mod.F90 b/cbind/base/psb_c_serial_cbind_mod.F90 index b298d84ae..c0feeebd6 100644 --- a/cbind/base/psb_c_serial_cbind_mod.F90 +++ b/cbind/base/psb_c_serial_cbind_mod.F90 @@ -205,4 +205,28 @@ contains end function psb_c_cvect_set_vect + function psb_c_cvect_clone(xh,yh) bind(c) result(info) + implicit none + + integer(psb_c_ipk_) :: info + type(psb_c_cvector) :: xh,yh + + type(psb_c_vect_type), pointer :: xp,yp + + info = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + call xp%clone(yp,info) + + end function psb_c_cvect_clone + end module psb_c_serial_cbind_mod diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index 9a27e9c0b..9c5ed8684 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -22,6 +22,7 @@ psb_z_t *psb_c_zvect_get_cpy( psb_c_zvector *xh); psb_i_t psb_c_zvect_f_get_cpy(psb_z_t *v, psb_c_zvector *xh); psb_i_t psb_c_zvect_zero(psb_c_zvector *xh); psb_z_t *psb_c_zvect_f_get_pnt( psb_c_zvector *xh); +psb_i_t psb_c_zvect_clone(psb_c_zvector *xh,psb_c_zvector *yh); psb_i_t psb_c_zgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeall_remote(psb_c_zvector *xh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index 984f826f6..96a5b32cf 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -205,4 +205,28 @@ contains end function psb_c_dvect_set_vect + function psb_c_dvect_clone(xh,yh) bind(c) result(info) + implicit none + + integer(psb_c_ipk_) :: info + type(psb_c_dvector) :: xh,yh + + type(psb_d_vect_type), pointer :: xp,yp + + info = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + call xp%clone(yp,info) + + end function psb_c_dvect_clone + end module psb_d_serial_cbind_mod diff --git a/cbind/base/psb_s_serial_cbind_mod.F90 b/cbind/base/psb_s_serial_cbind_mod.F90 index 83dac1a5d..0f1e6dce4 100644 --- a/cbind/base/psb_s_serial_cbind_mod.F90 +++ b/cbind/base/psb_s_serial_cbind_mod.F90 @@ -205,4 +205,28 @@ contains end function psb_c_svect_set_vect + function psb_c_svect_clone(xh,yh) bind(c) result(info) + implicit none + + integer(psb_c_ipk_) :: info + type(psb_c_svector) :: xh,yh + + type(psb_s_vect_type), pointer :: xp,yp + + info = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + call xp%clone(yp,info) + + end function psb_c_svect_clone + end module psb_s_serial_cbind_mod diff --git a/cbind/base/psb_z_serial_cbind_mod.F90 b/cbind/base/psb_z_serial_cbind_mod.F90 index b61060b98..742f7d93f 100644 --- a/cbind/base/psb_z_serial_cbind_mod.F90 +++ b/cbind/base/psb_z_serial_cbind_mod.F90 @@ -205,4 +205,28 @@ contains end function psb_c_zvect_set_vect + function psb_c_zvect_clone(xh,yh) bind(c) result(info) + implicit none + + integer(psb_c_ipk_) :: info + type(psb_c_zvector) :: xh,yh + + type(psb_z_vect_type), pointer :: xp,yp + + info = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + call xp%clone(yp,info) + + end function psb_c_zvect_clone + end module psb_z_serial_cbind_mod diff --git a/cbind/psb_c_base.h b/cbind/psb_c_base.h index d0b59ef0a..ec130a9fc 100644 --- a/cbind/psb_c_base.h +++ b/cbind/psb_c_base.h @@ -102,9 +102,6 @@ extern "C" { #define psb_dupl_add_ 1 #define psb_dupl_err_ 2 #define psb_dupl_def_ psb_dupl_ovwrt_ -/* legal values for bldmode argument */ -#define psb_matbld_noremote_ 0 -#define psb_matbld_remote_ 1 /* legal values for afmt */ #define PSB_AFMT_CSR "CSR" diff --git a/cbind/psb_c_cbase.h b/cbind/psb_c_cbase.h index 90b5ad099..0b8899239 100644 --- a/cbind/psb_c_cbase.h +++ b/cbind/psb_c_cbase.h @@ -22,10 +22,10 @@ psb_c_t *psb_c_cvect_get_cpy( psb_c_cvector *xh); psb_i_t psb_c_cvect_f_get_cpy(psb_c_t *v, psb_c_cvector *xh); psb_i_t psb_c_cvect_zero(psb_c_cvector *xh); psb_i_t *psb_c_cvect_f_get_pnt(psb_c_cvector *xh); +psb_i_t psb_c_cvect_clone(psb_c_cvector *xh,psb_c_cvector *yh); psb_i_t psb_c_cgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeall_remote(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_cgeall_remote_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); psb_i_t psb_c_cgeins(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, diff --git a/cbind/psb_c_dbase.h b/cbind/psb_c_dbase.h index 6053268c3..b68837bb8 100644 --- a/cbind/psb_c_dbase.h +++ b/cbind/psb_c_dbase.h @@ -22,10 +22,10 @@ psb_d_t *psb_c_dvect_get_cpy( psb_c_dvector *xh); psb_i_t psb_c_dvect_f_get_cpy(psb_d_t *v, psb_c_dvector *xh); psb_i_t psb_c_dvect_zero(psb_c_dvector *xh); psb_d_t *psb_c_dvect_f_get_pnt( psb_c_dvector *xh); +psb_i_t psb_c_dvect_clone(psb_c_dvector *xh,psb_c_dvector *yh); psb_i_t psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeall_remote(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeall_remote_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); psb_i_t psb_c_dgeins(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, diff --git a/cbind/psb_c_sbase.h b/cbind/psb_c_sbase.h index 46d1874a5..cb302760c 100644 --- a/cbind/psb_c_sbase.h +++ b/cbind/psb_c_sbase.h @@ -22,10 +22,10 @@ psb_s_t *psb_c_svect_get_cpy( psb_c_svector *xh); psb_i_t psb_c_svect_f_get_cpy(psb_s_t *v, psb_c_svector *xh); psb_i_t psb_c_svect_zero(psb_c_svector *xh); psb_s_t *psb_c_svect_f_get_pnt( psb_c_svector *xh); +psb_i_t psb_c_svect_clone(psb_c_svector *xh,psb_c_svector *yh); psb_i_t psb_c_sgeall(psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeall_remote(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_sgeall_remote_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); psb_i_t psb_c_sgeins(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, diff --git a/cbind/psb_c_zbase.h b/cbind/psb_c_zbase.h index 09fc85250..9c5ed8684 100644 --- a/cbind/psb_c_zbase.h +++ b/cbind/psb_c_zbase.h @@ -22,10 +22,10 @@ psb_z_t *psb_c_zvect_get_cpy( psb_c_zvector *xh); psb_i_t psb_c_zvect_f_get_cpy(psb_z_t *v, psb_c_zvector *xh); psb_i_t psb_c_zvect_zero(psb_c_zvector *xh); psb_z_t *psb_c_zvect_f_get_pnt( psb_c_zvector *xh); +psb_i_t psb_c_zvect_clone(psb_c_zvector *xh,psb_c_zvector *yh); psb_i_t psb_c_zgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeall_remote(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_zgeall_remote_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); psb_i_t psb_c_zgeins(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, From c1ca1665e7c09903bad9f6588e25be47e50bdfe5 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 2 Dec 2025 17:34:10 +0100 Subject: [PATCH 057/175] Fixes to vector status and build processing for dealii --- base/modules/serial/psb_c_base_vect_mod.F90 | 29 ++++++++++++++++-- base/modules/serial/psb_c_vect_mod.F90 | 34 +++++++++++++++++++-- base/modules/serial/psb_d_base_vect_mod.F90 | 29 ++++++++++++++++-- base/modules/serial/psb_d_vect_mod.F90 | 34 +++++++++++++++++++-- base/modules/serial/psb_i_base_vect_mod.F90 | 29 ++++++++++++++++-- base/modules/serial/psb_i_vect_mod.F90 | 34 +++++++++++++++++++-- base/modules/serial/psb_l_base_vect_mod.F90 | 29 ++++++++++++++++-- base/modules/serial/psb_l_vect_mod.F90 | 34 +++++++++++++++++++-- base/modules/serial/psb_s_base_vect_mod.F90 | 29 ++++++++++++++++-- base/modules/serial/psb_s_vect_mod.F90 | 34 +++++++++++++++++++-- base/modules/serial/psb_z_base_vect_mod.F90 | 29 ++++++++++++++++-- base/modules/serial/psb_z_vect_mod.F90 | 34 +++++++++++++++++++-- base/tools/psb_callc.f90 | 3 +- base/tools/psb_dallc.f90 | 3 +- base/tools/psb_iallc.f90 | 3 +- base/tools/psb_lallc.f90 | 3 +- base/tools/psb_sallc.f90 | 3 +- base/tools/psb_zallc.f90 | 3 +- 18 files changed, 348 insertions(+), 48 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index 3f4eb6589..ed1b45974 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -115,6 +115,7 @@ module psb_c_base_vect_mod procedure, pass(x) :: is_bld => c_base_is_bld procedure, pass(x) :: is_upd => c_base_is_upd procedure, pass(x) :: is_asb => c_base_is_asb + procedure, pass(x) :: base_cpy => c_base_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -686,7 +687,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -700,7 +701,9 @@ contains & call psb_realloc(n,x%v,info) if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') - end if + end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine c_base_asb_m @@ -767,7 +770,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -782,6 +785,8 @@ contains if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine c_base_asb_e @@ -1063,6 +1068,24 @@ contains res = .true. end function c_base_is_sync + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine c_base_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_c_base_vect_type), intent(in) :: x + class(psb_c_base_vect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine c_base_cpy ! ! Size info. diff --git a/base/modules/serial/psb_c_vect_mod.F90 b/base/modules/serial/psb_c_vect_mod.F90 index 9c387c134..274bd5712 100644 --- a/base/modules/serial/psb_c_vect_mod.F90 +++ b/base/modules/serial/psb_c_vect_mod.F90 @@ -64,6 +64,8 @@ module psb_c_vect_mod procedure, pass(x) :: asb => c_vect_asb procedure, pass(x) :: set_dupl => c_vect_set_dupl procedure, pass(x) :: get_dupl => c_vect_get_dupl + procedure, pass(x) :: set_ncfs => c_vect_set_ncfs + procedure, pass(x) :: get_ncfs => c_vect_get_ncfs procedure, pass(x) :: set_state => c_vect_set_state procedure, pass(x) :: set_null => c_vect_set_null procedure, pass(x) :: set_bld => c_vect_set_bld @@ -200,9 +202,9 @@ contains class(psb_c_vect_type), intent(in) :: x integer(psb_ipk_) :: res if (allocated(x%v)) then - res = x%v%get_state() + res = x%v%get_dupl() else - res = psb_vect_null_ + res = psb_dupl_null_ end if end function c_vect_get_dupl @@ -220,6 +222,31 @@ contains end if end subroutine c_vect_set_dupl + function c_vect_get_ncfs(x) result(res) + implicit none + class(psb_c_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_ncfs() + else + res = 0 + end if + end function c_vect_get_ncfs + + subroutine c_vect_set_ncfs(x,val) + implicit none + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_ncfs(val) + else + call x%v%set_ncfs(0) + end if + end if + end subroutine c_vect_set_ncfs + function c_vect_get_state(x) result(res) implicit none class(psb_c_vect_type), intent(in) :: x @@ -311,7 +338,6 @@ contains x%nrmv = val end subroutine c_vect_set_nrmv - function c_vect_is_remote_build(x) result(res) implicit none @@ -618,6 +644,7 @@ contains if (allocated(x%v)) then call x%v%asb(n,info,scratch=scratch) + call x%set_asb() end if end subroutine c_vect_asb @@ -732,6 +759,7 @@ contains if (allocated(x%v%v)) then call x%v%sync() if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%base_cpy(tmp) call x%v%free(info) endif end if diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 7a3026eac..71b921cdd 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -115,6 +115,7 @@ module psb_d_base_vect_mod procedure, pass(x) :: is_bld => d_base_is_bld procedure, pass(x) :: is_upd => d_base_is_upd procedure, pass(x) :: is_asb => d_base_is_asb + procedure, pass(x) :: base_cpy => d_base_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -693,7 +694,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -707,7 +708,9 @@ contains & call psb_realloc(n,x%v,info) if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') - end if + end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine d_base_asb_m @@ -774,7 +777,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -789,6 +792,8 @@ contains if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine d_base_asb_e @@ -1070,6 +1075,24 @@ contains res = .true. end function d_base_is_sync + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine d_base_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_d_base_vect_type), intent(in) :: x + class(psb_d_base_vect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine d_base_cpy ! ! Size info. diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index 4aaab1704..4e0226533 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -64,6 +64,8 @@ module psb_d_vect_mod procedure, pass(x) :: asb => d_vect_asb procedure, pass(x) :: set_dupl => d_vect_set_dupl procedure, pass(x) :: get_dupl => d_vect_get_dupl + procedure, pass(x) :: set_ncfs => d_vect_set_ncfs + procedure, pass(x) :: get_ncfs => d_vect_get_ncfs procedure, pass(x) :: set_state => d_vect_set_state procedure, pass(x) :: set_null => d_vect_set_null procedure, pass(x) :: set_bld => d_vect_set_bld @@ -207,9 +209,9 @@ contains class(psb_d_vect_type), intent(in) :: x integer(psb_ipk_) :: res if (allocated(x%v)) then - res = x%v%get_state() + res = x%v%get_dupl() else - res = psb_vect_null_ + res = psb_dupl_null_ end if end function d_vect_get_dupl @@ -227,6 +229,31 @@ contains end if end subroutine d_vect_set_dupl + function d_vect_get_ncfs(x) result(res) + implicit none + class(psb_d_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_ncfs() + else + res = 0 + end if + end function d_vect_get_ncfs + + subroutine d_vect_set_ncfs(x,val) + implicit none + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_ncfs(val) + else + call x%v%set_ncfs(0) + end if + end if + end subroutine d_vect_set_ncfs + function d_vect_get_state(x) result(res) implicit none class(psb_d_vect_type), intent(in) :: x @@ -318,7 +345,6 @@ contains x%nrmv = val end subroutine d_vect_set_nrmv - function d_vect_is_remote_build(x) result(res) implicit none @@ -625,6 +651,7 @@ contains if (allocated(x%v)) then call x%v%asb(n,info,scratch=scratch) + call x%set_asb() end if end subroutine d_vect_asb @@ -739,6 +766,7 @@ contains if (allocated(x%v%v)) then call x%v%sync() if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%base_cpy(tmp) call x%v%free(info) endif end if diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 5896d32e5..f55815cfc 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -113,6 +113,7 @@ module psb_i_base_vect_mod procedure, pass(x) :: is_bld => i_base_is_bld procedure, pass(x) :: is_upd => i_base_is_upd procedure, pass(x) :: is_asb => i_base_is_asb + procedure, pass(x) :: base_cpy => i_base_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -619,7 +620,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -633,7 +634,9 @@ contains & call psb_realloc(n,x%v,info) if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') - end if + end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine i_base_asb_m @@ -700,7 +703,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -715,6 +718,8 @@ contains if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine i_base_asb_e @@ -996,6 +1001,24 @@ contains res = .true. end function i_base_is_sync + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine i_base_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i_base_vect_type), intent(in) :: x + class(psb_i_base_vect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine i_base_cpy ! ! Size info. diff --git a/base/modules/serial/psb_i_vect_mod.F90 b/base/modules/serial/psb_i_vect_mod.F90 index 9276093d9..91230644e 100644 --- a/base/modules/serial/psb_i_vect_mod.F90 +++ b/base/modules/serial/psb_i_vect_mod.F90 @@ -63,6 +63,8 @@ module psb_i_vect_mod procedure, pass(x) :: asb => i_vect_asb procedure, pass(x) :: set_dupl => i_vect_set_dupl procedure, pass(x) :: get_dupl => i_vect_get_dupl + procedure, pass(x) :: set_ncfs => i_vect_set_ncfs + procedure, pass(x) :: get_ncfs => i_vect_get_ncfs procedure, pass(x) :: set_state => i_vect_set_state procedure, pass(x) :: set_null => i_vect_set_null procedure, pass(x) :: set_bld => i_vect_set_bld @@ -145,9 +147,9 @@ contains class(psb_i_vect_type), intent(in) :: x integer(psb_ipk_) :: res if (allocated(x%v)) then - res = x%v%get_state() + res = x%v%get_dupl() else - res = psb_vect_null_ + res = psb_dupl_null_ end if end function i_vect_get_dupl @@ -165,6 +167,31 @@ contains end if end subroutine i_vect_set_dupl + function i_vect_get_ncfs(x) result(res) + implicit none + class(psb_i_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_ncfs() + else + res = 0 + end if + end function i_vect_get_ncfs + + subroutine i_vect_set_ncfs(x,val) + implicit none + class(psb_i_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_ncfs(val) + else + call x%v%set_ncfs(0) + end if + end if + end subroutine i_vect_set_ncfs + function i_vect_get_state(x) result(res) implicit none class(psb_i_vect_type), intent(in) :: x @@ -256,7 +283,6 @@ contains x%nrmv = val end subroutine i_vect_set_nrmv - function i_vect_is_remote_build(x) result(res) implicit none @@ -563,6 +589,7 @@ contains if (allocated(x%v)) then call x%v%asb(n,info,scratch=scratch) + call x%set_asb() end if end subroutine i_vect_asb @@ -677,6 +704,7 @@ contains if (allocated(x%v%v)) then call x%v%sync() if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%base_cpy(tmp) call x%v%free(info) endif end if diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index 1df397b33..6059ff36d 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -114,6 +114,7 @@ module psb_l_base_vect_mod procedure, pass(x) :: is_bld => l_base_is_bld procedure, pass(x) :: is_upd => l_base_is_upd procedure, pass(x) :: is_asb => l_base_is_asb + procedure, pass(x) :: base_cpy => l_base_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -620,7 +621,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -634,7 +635,9 @@ contains & call psb_realloc(n,x%v,info) if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') - end if + end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine l_base_asb_m @@ -701,7 +704,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -716,6 +719,8 @@ contains if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine l_base_asb_e @@ -997,6 +1002,24 @@ contains res = .true. end function l_base_is_sync + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine l_base_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_l_base_vect_type), intent(in) :: x + class(psb_l_base_vect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine l_base_cpy ! ! Size info. diff --git a/base/modules/serial/psb_l_vect_mod.F90 b/base/modules/serial/psb_l_vect_mod.F90 index 06afda3a0..c1f6ca8f5 100644 --- a/base/modules/serial/psb_l_vect_mod.F90 +++ b/base/modules/serial/psb_l_vect_mod.F90 @@ -64,6 +64,8 @@ module psb_l_vect_mod procedure, pass(x) :: asb => l_vect_asb procedure, pass(x) :: set_dupl => l_vect_set_dupl procedure, pass(x) :: get_dupl => l_vect_get_dupl + procedure, pass(x) :: set_ncfs => l_vect_set_ncfs + procedure, pass(x) :: get_ncfs => l_vect_get_ncfs procedure, pass(x) :: set_state => l_vect_set_state procedure, pass(x) :: set_null => l_vect_set_null procedure, pass(x) :: set_bld => l_vect_set_bld @@ -146,9 +148,9 @@ contains class(psb_l_vect_type), intent(in) :: x integer(psb_ipk_) :: res if (allocated(x%v)) then - res = x%v%get_state() + res = x%v%get_dupl() else - res = psb_vect_null_ + res = psb_dupl_null_ end if end function l_vect_get_dupl @@ -166,6 +168,31 @@ contains end if end subroutine l_vect_set_dupl + function l_vect_get_ncfs(x) result(res) + implicit none + class(psb_l_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_ncfs() + else + res = 0 + end if + end function l_vect_get_ncfs + + subroutine l_vect_set_ncfs(x,val) + implicit none + class(psb_l_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_ncfs(val) + else + call x%v%set_ncfs(0) + end if + end if + end subroutine l_vect_set_ncfs + function l_vect_get_state(x) result(res) implicit none class(psb_l_vect_type), intent(in) :: x @@ -257,7 +284,6 @@ contains x%nrmv = val end subroutine l_vect_set_nrmv - function l_vect_is_remote_build(x) result(res) implicit none @@ -564,6 +590,7 @@ contains if (allocated(x%v)) then call x%v%asb(n,info,scratch=scratch) + call x%set_asb() end if end subroutine l_vect_asb @@ -678,6 +705,7 @@ contains if (allocated(x%v%v)) then call x%v%sync() if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%base_cpy(tmp) call x%v%free(info) endif end if diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index 488bfbe23..7bb3f5fec 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -115,6 +115,7 @@ module psb_s_base_vect_mod procedure, pass(x) :: is_bld => s_base_is_bld procedure, pass(x) :: is_upd => s_base_is_upd procedure, pass(x) :: is_asb => s_base_is_asb + procedure, pass(x) :: base_cpy => s_base_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -693,7 +694,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -707,7 +708,9 @@ contains & call psb_realloc(n,x%v,info) if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') - end if + end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine s_base_asb_m @@ -774,7 +777,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -789,6 +792,8 @@ contains if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine s_base_asb_e @@ -1070,6 +1075,24 @@ contains res = .true. end function s_base_is_sync + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine s_base_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_s_base_vect_type), intent(in) :: x + class(psb_s_base_vect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine s_base_cpy ! ! Size info. diff --git a/base/modules/serial/psb_s_vect_mod.F90 b/base/modules/serial/psb_s_vect_mod.F90 index 781050135..fab3fdb22 100644 --- a/base/modules/serial/psb_s_vect_mod.F90 +++ b/base/modules/serial/psb_s_vect_mod.F90 @@ -64,6 +64,8 @@ module psb_s_vect_mod procedure, pass(x) :: asb => s_vect_asb procedure, pass(x) :: set_dupl => s_vect_set_dupl procedure, pass(x) :: get_dupl => s_vect_get_dupl + procedure, pass(x) :: set_ncfs => s_vect_set_ncfs + procedure, pass(x) :: get_ncfs => s_vect_get_ncfs procedure, pass(x) :: set_state => s_vect_set_state procedure, pass(x) :: set_null => s_vect_set_null procedure, pass(x) :: set_bld => s_vect_set_bld @@ -207,9 +209,9 @@ contains class(psb_s_vect_type), intent(in) :: x integer(psb_ipk_) :: res if (allocated(x%v)) then - res = x%v%get_state() + res = x%v%get_dupl() else - res = psb_vect_null_ + res = psb_dupl_null_ end if end function s_vect_get_dupl @@ -227,6 +229,31 @@ contains end if end subroutine s_vect_set_dupl + function s_vect_get_ncfs(x) result(res) + implicit none + class(psb_s_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_ncfs() + else + res = 0 + end if + end function s_vect_get_ncfs + + subroutine s_vect_set_ncfs(x,val) + implicit none + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_ncfs(val) + else + call x%v%set_ncfs(0) + end if + end if + end subroutine s_vect_set_ncfs + function s_vect_get_state(x) result(res) implicit none class(psb_s_vect_type), intent(in) :: x @@ -318,7 +345,6 @@ contains x%nrmv = val end subroutine s_vect_set_nrmv - function s_vect_is_remote_build(x) result(res) implicit none @@ -625,6 +651,7 @@ contains if (allocated(x%v)) then call x%v%asb(n,info,scratch=scratch) + call x%set_asb() end if end subroutine s_vect_asb @@ -739,6 +766,7 @@ contains if (allocated(x%v%v)) then call x%v%sync() if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%base_cpy(tmp) call x%v%free(info) endif end if diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index fa7fb39a8..3c7383e66 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -115,6 +115,7 @@ module psb_z_base_vect_mod procedure, pass(x) :: is_bld => z_base_is_bld procedure, pass(x) :: is_upd => z_base_is_upd procedure, pass(x) :: is_asb => z_base_is_asb + procedure, pass(x) :: base_cpy => z_base_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -686,7 +687,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -700,7 +701,9 @@ contains & call psb_realloc(n,x%v,info) if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') - end if + end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine z_base_asb_m @@ -767,7 +770,7 @@ contains end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) - else if (x%is_upd().or.scratch_) then + else if (x%is_upd().or.x%is_asb().or.scratch_) then if (x%get_nrows() < n) & & call psb_realloc(n,x%v,info) if (info /= 0) & @@ -782,6 +785,8 @@ contains if (info /= 0) & & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') end if + call x%set_host() + call x%set_asb() call x%sync() end subroutine z_base_asb_e @@ -1063,6 +1068,24 @@ contains res = .true. end function z_base_is_sync + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine z_base_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_z_base_vect_type), intent(in) :: x + class(psb_z_base_vect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine z_base_cpy ! ! Size info. diff --git a/base/modules/serial/psb_z_vect_mod.F90 b/base/modules/serial/psb_z_vect_mod.F90 index 4820e794a..9d1d49d59 100644 --- a/base/modules/serial/psb_z_vect_mod.F90 +++ b/base/modules/serial/psb_z_vect_mod.F90 @@ -64,6 +64,8 @@ module psb_z_vect_mod procedure, pass(x) :: asb => z_vect_asb procedure, pass(x) :: set_dupl => z_vect_set_dupl procedure, pass(x) :: get_dupl => z_vect_get_dupl + procedure, pass(x) :: set_ncfs => z_vect_set_ncfs + procedure, pass(x) :: get_ncfs => z_vect_get_ncfs procedure, pass(x) :: set_state => z_vect_set_state procedure, pass(x) :: set_null => z_vect_set_null procedure, pass(x) :: set_bld => z_vect_set_bld @@ -200,9 +202,9 @@ contains class(psb_z_vect_type), intent(in) :: x integer(psb_ipk_) :: res if (allocated(x%v)) then - res = x%v%get_state() + res = x%v%get_dupl() else - res = psb_vect_null_ + res = psb_dupl_null_ end if end function z_vect_get_dupl @@ -220,6 +222,31 @@ contains end if end subroutine z_vect_set_dupl + function z_vect_get_ncfs(x) result(res) + implicit none + class(psb_z_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_ncfs() + else + res = 0 + end if + end function z_vect_get_ncfs + + subroutine z_vect_set_ncfs(x,val) + implicit none + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_ncfs(val) + else + call x%v%set_ncfs(0) + end if + end if + end subroutine z_vect_set_ncfs + function z_vect_get_state(x) result(res) implicit none class(psb_z_vect_type), intent(in) :: x @@ -311,7 +338,6 @@ contains x%nrmv = val end subroutine z_vect_set_nrmv - function z_vect_is_remote_build(x) result(res) implicit none @@ -618,6 +644,7 @@ contains if (allocated(x%v)) then call x%v%asb(n,info,scratch=scratch) + call x%set_asb() end if end subroutine z_vect_asb @@ -732,6 +759,7 @@ contains if (allocated(x%v%v)) then call x%v%sync() if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%base_cpy(tmp) call x%v%free(info) endif end if diff --git a/base/tools/psb_callc.f90 b/base/tools/psb_callc.f90 index 9c31332bf..85ccbf6a9 100644 --- a/base/tools/psb_callc.f90 +++ b/base/tools/psb_callc.f90 @@ -95,8 +95,7 @@ subroutine psb_calloc_vect(x, desc_a,info, dupl, bldmode) goto 9999 endif - allocate(psb_c_base_vect_type :: x%v, stat=info) - if (info == 0) call x%all(nr,info) + call x%all(nr,info) if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') diff --git a/base/tools/psb_dallc.f90 b/base/tools/psb_dallc.f90 index 52c0ae903..a8ef4672d 100644 --- a/base/tools/psb_dallc.f90 +++ b/base/tools/psb_dallc.f90 @@ -95,8 +95,7 @@ subroutine psb_dalloc_vect(x, desc_a,info, dupl, bldmode) goto 9999 endif - allocate(psb_d_base_vect_type :: x%v, stat=info) - if (info == 0) call x%all(nr,info) + call x%all(nr,info) if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') diff --git a/base/tools/psb_iallc.f90 b/base/tools/psb_iallc.f90 index d708e3241..95558fe21 100644 --- a/base/tools/psb_iallc.f90 +++ b/base/tools/psb_iallc.f90 @@ -95,8 +95,7 @@ subroutine psb_ialloc_vect(x, desc_a,info, dupl, bldmode) goto 9999 endif - allocate(psb_i_base_vect_type :: x%v, stat=info) - if (info == 0) call x%all(nr,info) + call x%all(nr,info) if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') diff --git a/base/tools/psb_lallc.f90 b/base/tools/psb_lallc.f90 index e89b4b15e..8bb369c36 100644 --- a/base/tools/psb_lallc.f90 +++ b/base/tools/psb_lallc.f90 @@ -95,8 +95,7 @@ subroutine psb_lalloc_vect(x, desc_a,info, dupl, bldmode) goto 9999 endif - allocate(psb_l_base_vect_type :: x%v, stat=info) - if (info == 0) call x%all(nr,info) + call x%all(nr,info) if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') diff --git a/base/tools/psb_sallc.f90 b/base/tools/psb_sallc.f90 index 143e032bb..7e6649ddd 100644 --- a/base/tools/psb_sallc.f90 +++ b/base/tools/psb_sallc.f90 @@ -95,8 +95,7 @@ subroutine psb_salloc_vect(x, desc_a,info, dupl, bldmode) goto 9999 endif - allocate(psb_s_base_vect_type :: x%v, stat=info) - if (info == 0) call x%all(nr,info) + call x%all(nr,info) if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') diff --git a/base/tools/psb_zallc.f90 b/base/tools/psb_zallc.f90 index fa7518fa7..96d567fce 100644 --- a/base/tools/psb_zallc.f90 +++ b/base/tools/psb_zallc.f90 @@ -95,8 +95,7 @@ subroutine psb_zalloc_vect(x, desc_a,info, dupl, bldmode) goto 9999 endif - allocate(psb_z_base_vect_type :: x%v, stat=info) - if (info == 0) call x%all(nr,info) + call x%all(nr,info) if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') From 339efde7967e6800aad2c60ca0c94acdda1f89e7 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 3 Dec 2025 17:35:03 +0100 Subject: [PATCH 058/175] Changed library names and machinery for CUDA. --- Make.inc.in | 6 ++---- configure | 13 +++---------- configure.ac | 11 +++-------- cuda/Makefile | 2 +- cuda/spgpu/Makefile | 5 +++-- cuda/spgpu/kernels/Makefile | 2 +- test/cudakern/Makefile | 2 +- 7 files changed, 14 insertions(+), 27 deletions(-) diff --git a/Make.inc.in b/Make.inc.in index 33164e1c8..7df66de8c 100755 --- a/Make.inc.in +++ b/Make.inc.in @@ -79,9 +79,7 @@ CXXOPENACC=@CXXOPENACC@ CUDAD=@CUDAD@ CUDAMODS=@CUDAMODS@ CUDALD=@CUDALD@ -LCUDA=@LCUDA@ - -SPGPU_LIBS=@SPGPU_LIBS@ +LPSB_CUDA=@LPSB_CUDA@ CUDA_DIR=@CUDA_DIR@ CUDA_INCLUDES=@CUDA_INCLUDES@ @@ -104,4 +102,4 @@ CUDEFINES=@CUDEFINES@ @PSBLASRULES@ -PSBGPULDLIBS=$(LCUDA) $(SPGPU_LIBS) $(CUDA_LIBS) $(PSBLDLIBS) $(LIBS) \ No newline at end of file +PSBGPULDLIBS=$(LPSB_CUDA) $(CUDA_LIBS) $(PSBLDLIBS) $(LIBS) \ No newline at end of file diff --git a/configure b/configure index b7c67d8a3..eac4ccfd4 100755 --- a/configure +++ b/configure @@ -651,7 +651,7 @@ LIBRSB_DIR LIBRSB_INCDIR LIBRSB_INCLUDES LIBRSB_LIBS -LCUDA +LPSB_CUDA CUDALD CUDAMODS CUDAD @@ -667,7 +667,6 @@ FCUDEFINES CUDA_DEFINES CUDA_DIR EXTRALDLIBS -SPGPU_LIBS SPGPU_FLAGS CXXOPENACC CCOPENACC @@ -10922,9 +10921,7 @@ printf "%s\n" "$as_me: For CUDA I need psb_ipk_ to be 4 bytes but it is $pac_cv_ pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; CUDA_CC=""; - SPGPU_LIBS=""; CUDAD=""; - CUDAMODS=""; CUDALD=""; CUDEFINES=""; CUDA_DEFINES=""; @@ -11172,9 +11169,7 @@ printf "%s\n" "$as_me: Unsupported CUDA version ${PSB_CUDA_VERSION} disabling CU pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; CUDA_CC=""; - SPGPU_LIBS=""; CUDAD=""; - CUDAMODS=""; CUDALD=""; CUDEFINES=""; CUDA_DEFINES=""; @@ -11192,11 +11187,10 @@ printf "%s\n" "$as_me: CUDA version ${PSB_CUDA_VERSION}" >&6;} CHAVECUDA="#define PSB_HAVE_CUDA" CSHORTVCUDA="#define PSB_CUDA_SHORT_VERSION ${PSB_CUDA_SHORT_VERSION}" CVERSIONCUDA="#define PSB_CUDA_VERSION ${PSB_CUDA_VERSION}" - SPGPU_LIBS="-lspgpu"; - CUDAD=cudad; + CUDAD=cudad; CUDAMODS=cudamods; CUDALD=cudald; - LCUDA="-lpsb_cuda"; + LPSB_CUDA="-lpsb_cuda"; EXTRALDLIBS="-lstdc++"; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: At this point GPUTARGET is $CUDAD $CUDALD" >&5 printf "%s\n" "$as_me: At this point GPUTARGET is $CUDAD $CUDALD" >&6;} @@ -11778,7 +11772,6 @@ FDEFINES=$(PSBFDEFINES) - ############################################################################### diff --git a/configure.ac b/configure.ac index c082b5845..a4001041b 100644 --- a/configure.ac +++ b/configure.ac @@ -850,9 +850,7 @@ if test "x$pac_cv_ipk_size" != "x4"; then pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; CUDA_CC=""; - SPGPU_LIBS=""; CUDAD=""; - CUDAMODS=""; CUDALD=""; CUDEFINES=""; CUDA_DEFINES=""; @@ -875,9 +873,7 @@ else pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; CUDA_CC=""; - SPGPU_LIBS=""; CUDAD=""; - CUDAMODS=""; CUDALD=""; CUDEFINES=""; CUDA_DEFINES=""; @@ -894,11 +890,11 @@ else CHAVECUDA="#define PSB_HAVE_CUDA" CSHORTVCUDA="#define PSB_CUDA_SHORT_VERSION ${PSB_CUDA_SHORT_VERSION}" CVERSIONCUDA="#define PSB_CUDA_VERSION ${PSB_CUDA_VERSION}" - SPGPU_LIBS="-lspgpu"; + dnl SPGPU_LIBS="-lspgpu"; CUDAD=cudad; CUDAMODS=cudamods; CUDALD=cudald; - LCUDA="-lpsb_cuda"; + LPSB_CUDA="-lpsb_cuda"; EXTRALDLIBS="-lstdc++"; AC_MSG_NOTICE([At this point GPUTARGET is $CUDAD $CUDALD]) @@ -1101,7 +1097,6 @@ AC_SUBST(CCOPENACC) AC_SUBST(CXXOPENACC) AC_SUBST(SPGPU_FLAGS) -AC_SUBST(SPGPU_LIBS) dnl AC_SUBST(SPGPU_DIR) dnl AC_SUBST(SPGPU_INCLUDES) dnl AC_SUBST(SPGPU_INCDIR) @@ -1120,7 +1115,7 @@ AC_SUBST(CUDEFINES) AC_SUBST(CUDAD) AC_SUBST(CUDAMODS) AC_SUBST(CUDALD) -AC_SUBST(LCUDA) +AC_SUBST(LPSB_CUDA) AC_SUBST(LIBRSB_LIBS) AC_SUBST(LIBRSB_INCLUDES) AC_SUBST(LIBRSB_INCDIR) diff --git a/cuda/Makefile b/cuda/Makefile index 258d9059e..1e62895b4 100755 --- a/cuda/Makefile +++ b/cuda/Makefile @@ -55,7 +55,7 @@ lib: mods objs ilib cudalib spgpulib mods: $(FOBJS) $(INSTALL) -p *$(.mod) $(MODDIR) $(INSTALL) -p *.h $(INCDIR) -objs: mods $(OBJS) iobjs cudaobjs spgpuobjs +objs: $(OBJS) iobjs cudaobjs spgpuobjs $(OBJS) iobjs cudaobjs spgpuobjs: spgpuinc diff --git a/cuda/spgpu/Makefile b/cuda/spgpu/Makefile index 8f70b61d9..c87b133b6 100644 --- a/cuda/spgpu/Makefile +++ b/cuda/spgpu/Makefile @@ -3,10 +3,11 @@ include $(TOP)/Make.inc # # Libraries used # +UP=.. LIBDIR=$(TOP)/lib INCDIR=$(TOP)/include MODDIR=$(TOP)/modules -LIBNAME=libspgpu.a +LIBNAME=$(UP)/libpsb_cuda.a OBJS=coo.o core.o dia.o ell.o hdia.o hell.o CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) @@ -17,7 +18,7 @@ objs: incl $(OBJS) iobjs lib: objs iobjs ilib $(AR) $(LIBNAME) $(OBJS) - /bin/cp -p $(LIBNAME) $(LIBDIR) +# /bin/cp -p $(LIBNAME) $(LIBDIR) iobjs: $(MAKE) -C kernels objs diff --git a/cuda/spgpu/kernels/Makefile b/cuda/spgpu/kernels/Makefile index 37113c754..a45bb8c0c 100644 --- a/cuda/spgpu/kernels/Makefile +++ b/cuda/spgpu/kernels/Makefile @@ -7,7 +7,7 @@ LIBDIR=$(TOP)/lib INCDIR=$(TOP)/include MODDIR=$(TOP)/modules UP=.. -LIBNAME=$(UP)/libspgpu.a +LIBNAME=$(UP)/libpsb_cuda.a CINCLUDES=-I$(INCDIR) CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) OBJS=cabs.o camax.o casum.o caxpby.o caxy.o cdot.o cgath.o \ diff --git a/test/cudakern/Makefile b/test/cudakern/Makefile index a7752f0a2..34e5bed66 100755 --- a/test/cudakern/Makefile +++ b/test/cudakern/Makefile @@ -8,7 +8,7 @@ PSBLIBDIR=$(TOPDIR)/lib/ OPTDIR=$(LIBDIR) PSBINCDIR=$(TOPDIR)/include PSBMODDIR=$(TOPDIR)/modules -PSBLAS_LIB= -L$(LIBDIR) -L$(PSBLIBDIR) $(LCUDA) -lpsb_ext -lpsb_util -lpsb_base +PSBLAS_LIB= -L$(LIBDIR) -L$(PSBLIBDIR) $(LPSB_CUDA) -lpsb_ext -lpsb_util -lpsb_base INCDIR=$(TOPDIR)/include MODDIR=$(TOPDIR)/modules From 97665684e61566e767ed650d809daa528891b57e Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 3 Dec 2025 17:37:01 +0100 Subject: [PATCH 059/175] Fix CUDA library names and configry --- Make.inc.in | 6 ++---- configure | 11 +++-------- configure.ac | 9 +++------ cuda/spgpu/Makefile | 5 +++-- cuda/spgpu/kernels/Makefile | 2 +- test/cudakern/Makefile | 2 +- 6 files changed, 13 insertions(+), 22 deletions(-) diff --git a/Make.inc.in b/Make.inc.in index ceba77b82..be1aa4e79 100755 --- a/Make.inc.in +++ b/Make.inc.in @@ -77,9 +77,7 @@ CXXOPENACC=@CXXOPENACC@ CUDAD=@CUDAD@ CUDALD=@CUDALD@ -LCUDA=@LCUDA@ - -SPGPU_LIBS=@SPGPU_LIBS@ +LPSB_CUDA=@LPSB_CUDA@ CUDA_DIR=@CUDA_DIR@ CUDA_INCLUDES=@CUDA_INCLUDES@ @@ -102,4 +100,4 @@ CUDEFINES=@CUDEFINES@ @PSBLASRULES@ -PSBGPULDLIBS=$(LCUDA) $(SPGPU_LIBS) $(CUDA_LIBS) $(PSBLDLIBS) $(LIBS) \ No newline at end of file +PSBGPULDLIBS=$(LPSB_CUDA) $(CUDA_LIBS) $(PSBLDLIBS) $(LIBS) \ No newline at end of file diff --git a/configure b/configure index 9f7434aaa..58245e7ba 100755 --- a/configure +++ b/configure @@ -651,7 +651,7 @@ LIBRSB_DIR LIBRSB_INCDIR LIBRSB_INCLUDES LIBRSB_LIBS -LCUDA +LPSB_CUDA CUDALD CUDAD CUDEFINES @@ -666,7 +666,6 @@ FCUDEFINES CUDA_DEFINES CUDA_DIR EXTRALDLIBS -SPGPU_LIBS SPGPU_FLAGS CXXOPENACC CCOPENACC @@ -10878,7 +10877,6 @@ printf "%s\n" "$as_me: For CUDA I need psb_ipk_ to be 4 bytes but it is $pac_cv_ pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; CUDA_CC=""; - SPGPU_LIBS=""; CUDAD=""; CUDALD=""; CUDEFINES=""; @@ -11127,7 +11125,6 @@ printf "%s\n" "$as_me: Unsupported CUDA version ${PSB_CUDA_VERSION} disabling CU pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; CUDA_CC=""; - SPGPU_LIBS=""; CUDAD=""; CUDALD=""; CUDEFINES=""; @@ -11146,10 +11143,9 @@ printf "%s\n" "$as_me: CUDA version ${PSB_CUDA_VERSION}" >&6;} CHAVECUDA="#define PSB_HAVE_CUDA" CSHORTVCUDA="#define PSB_CUDA_SHORT_VERSION ${PSB_CUDA_SHORT_VERSION}" CVERSIONCUDA="#define PSB_CUDA_VERSION ${PSB_CUDA_VERSION}" - SPGPU_LIBS="-lspgpu"; - CUDAD=cudad; + CUDAD=cudad; CUDALD=cudald; - LCUDA="-lpsb_cuda"; + LPSB_CUDA="-lpsb_cuda"; EXTRALDLIBS="-lstdc++"; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: At this point GPUTARGET is $CUDAD $CUDALD" >&5 printf "%s\n" "$as_me: At this point GPUTARGET is $CUDAD $CUDALD" >&6;} @@ -11735,7 +11731,6 @@ FDEFINES=$(PSBFDEFINES) - ############################################################################### diff --git a/configure.ac b/configure.ac index ecaa89de3..dab9954e3 100644 --- a/configure.ac +++ b/configure.ac @@ -851,7 +851,6 @@ if test "x$pac_cv_ipk_size" != "x4"; then pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; CUDA_CC=""; - SPGPU_LIBS=""; CUDAD=""; CUDALD=""; CUDEFINES=""; @@ -875,7 +874,6 @@ else pac_cv_cuda="no"; PSB_HAVE_CUDA="no"; CUDA_CC=""; - SPGPU_LIBS=""; CUDAD=""; CUDALD=""; CUDEFINES=""; @@ -893,10 +891,10 @@ else CHAVECUDA="#define PSB_HAVE_CUDA" CSHORTVCUDA="#define PSB_CUDA_SHORT_VERSION ${PSB_CUDA_SHORT_VERSION}" CVERSIONCUDA="#define PSB_CUDA_VERSION ${PSB_CUDA_VERSION}" - SPGPU_LIBS="-lspgpu"; + dnl SPGPU_LIBS="-lspgpu"; CUDAD=cudad; CUDALD=cudald; - LCUDA="-lpsb_cuda"; + LPSB_CUDA="-lpsb_cuda"; EXTRALDLIBS="-lstdc++"; AC_MSG_NOTICE([At this point GPUTARGET is $CUDAD $CUDALD]) @@ -1104,7 +1102,6 @@ AC_SUBST(CCOPENACC) AC_SUBST(CXXOPENACC) AC_SUBST(SPGPU_FLAGS) -AC_SUBST(SPGPU_LIBS) dnl AC_SUBST(SPGPU_DIR) dnl AC_SUBST(SPGPU_INCLUDES) dnl AC_SUBST(SPGPU_INCDIR) @@ -1122,7 +1119,7 @@ AC_SUBST(CUDA_NVCC) AC_SUBST(CUDEFINES) AC_SUBST(CUDAD) AC_SUBST(CUDALD) -AC_SUBST(LCUDA) +AC_SUBST(LPSB_CUDA) AC_SUBST(LIBRSB_LIBS) AC_SUBST(LIBRSB_INCLUDES) AC_SUBST(LIBRSB_INCDIR) diff --git a/cuda/spgpu/Makefile b/cuda/spgpu/Makefile index 75302a509..9c4836603 100644 --- a/cuda/spgpu/Makefile +++ b/cuda/spgpu/Makefile @@ -3,10 +3,11 @@ include $(TOP)/Make.inc # # Libraries used # +UP=.. LIBDIR=$(TOP)/lib INCDIR=$(TOP)/include MODDIR=$(TOP)/modules -LIBNAME=libspgpu.a +LIBNAME=$(UP)/libpsb_cuda.a OBJS=coo.o core.o dia.o ell.o hdia.o hell.o CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) @@ -17,7 +18,7 @@ objs: $(OBJS) iobjs lib: objs iobjs ilib $(AR) $(LIBNAME) $(OBJS) - /bin/cp -p $(LIBNAME) $(LIBDIR) +# /bin/cp -p $(LIBNAME) $(LIBDIR) iobjs: $(MAKE) -C kernels objs diff --git a/cuda/spgpu/kernels/Makefile b/cuda/spgpu/kernels/Makefile index 37113c754..a45bb8c0c 100644 --- a/cuda/spgpu/kernels/Makefile +++ b/cuda/spgpu/kernels/Makefile @@ -7,7 +7,7 @@ LIBDIR=$(TOP)/lib INCDIR=$(TOP)/include MODDIR=$(TOP)/modules UP=.. -LIBNAME=$(UP)/libspgpu.a +LIBNAME=$(UP)/libpsb_cuda.a CINCLUDES=-I$(INCDIR) CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) OBJS=cabs.o camax.o casum.o caxpby.o caxy.o cdot.o cgath.o \ diff --git a/test/cudakern/Makefile b/test/cudakern/Makefile index a7752f0a2..34e5bed66 100755 --- a/test/cudakern/Makefile +++ b/test/cudakern/Makefile @@ -8,7 +8,7 @@ PSBLIBDIR=$(TOPDIR)/lib/ OPTDIR=$(LIBDIR) PSBINCDIR=$(TOPDIR)/include PSBMODDIR=$(TOPDIR)/modules -PSBLAS_LIB= -L$(LIBDIR) -L$(PSBLIBDIR) $(LCUDA) -lpsb_ext -lpsb_util -lpsb_base +PSBLAS_LIB= -L$(LIBDIR) -L$(PSBLIBDIR) $(LPSB_CUDA) -lpsb_ext -lpsb_util -lpsb_base INCDIR=$(TOPDIR)/include MODDIR=$(TOPDIR)/modules From 4aaf72d1e815d4b4800dcccf45b908c6bc844f8d Mon Sep 17 00:00:00 2001 From: Marco Feder Date: Thu, 4 Dec 2025 00:35:41 +0100 Subject: [PATCH 060/175] Expose dgeasb with dupl options --- cbind/base/psb_c_dbase.h | 1 + cbind/base/psb_d_tools_cbind_mod.F90 | 33 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index b68837bb8..437bc7073 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -31,6 +31,7 @@ psb_i_t psb_c_dgeins(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeasb_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 69bfe3b8c..c83e0868f 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -129,6 +129,39 @@ contains return end function psb_c_dgeasb +function psb_c_dgeasb_options(xh,cdh,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info,dupl=dupl) + res = min(0,info) + + return + end function psb_c_dgeasb_options + + function psb_c_dgefree(xh,cdh) bind(c) result(res) implicit none From fd27654d93ab0bafe8e5d082ee3fbd2b75083c6f Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 4 Dec 2025 14:22:25 +0100 Subject: [PATCH 061/175] Fix DUPL_DEF value in psb_config.h --- base/modules/psb_config.h.in | 1 + configure | 3 +++ configure.ac | 2 ++ 3 files changed, 6 insertions(+) diff --git a/base/modules/psb_config.h.in b/base/modules/psb_config.h.in index b26340d7b..7bb4dd48c 100644 --- a/base/modules/psb_config.h.in +++ b/base/modules/psb_config.h.in @@ -13,6 +13,7 @@ #define PSB_DUPL_ADD @PSBLASDUPADD@ #define PSB_DUPL_OVWRT @PSBLASDUPOVW@ #define PSB_DUPL_ERR @PSBLASDUPERR@ +#define PSB_DUPL_DEF @PSBLASDUPDEF@ #define PSB_MATBLD_NOREMOTE @PSBLASBLDNOR@ #define PSB_MATBLD_REMOTE @PSBLASBLDRMT@ diff --git a/configure b/configure index 58245e7ba..b3ca98129 100755 --- a/configure +++ b/configure @@ -691,6 +691,7 @@ CHAVE_OPENMP CSERIALMPI PSBLASBLDRMT PSBLASBLDNOR +PSBLASDUPDEF PSBLASDUPERR PSBLASDUPOVW PSBLASDUPADD @@ -8767,6 +8768,7 @@ PSBLASDUPNUL=`cat $CFILE| grep dupl_null | $AWK '{print $6;}'`; PSBLASDUPADD=`cat $CFILE| grep "psb_dupl_add_ =" | $AWK '{print $6;}'`; PSBLASDUPOVW=`cat $CFILE| grep dupl_ovwrt| $AWK '{print $6;}'`; PSBLASDUPERR=`cat $CFILE| grep dupl_err| $AWK '{print $6;}'`; +PSBLASDUPDEF=`cat $CFILE| grep dupl_def| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$//`; PSBLASBLDNOR=`cat $CFILE| grep matbld_noremote| $AWK '{print $6;}'`; PSBLASBLDRMT=`cat $CFILE| grep matbld_remote| $AWK '{print $6;}'`; @@ -11731,6 +11733,7 @@ FDEFINES=$(PSBFDEFINES) + ############################################################################### diff --git a/configure.ac b/configure.ac index dab9954e3..ec88f2f36 100644 --- a/configure.ac +++ b/configure.ac @@ -693,6 +693,7 @@ PSBLASDUPNUL=`cat $CFILE| grep dupl_null | $AWK '{print $6;}'`; PSBLASDUPADD=`cat $CFILE| grep "psb_dupl_add_ =" | $AWK '{print $6;}'`; PSBLASDUPOVW=`cat $CFILE| grep dupl_ovwrt| $AWK '{print $6;}'`; PSBLASDUPERR=`cat $CFILE| grep dupl_err| $AWK '{print $6;}'`; +PSBLASDUPDEF=`cat $CFILE| grep dupl_def| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$//`; PSBLASBLDNOR=`cat $CFILE| grep matbld_noremote| $AWK '{print $6;}'`; PSBLASBLDRMT=`cat $CFILE| grep matbld_remote| $AWK '{print $6;}'`; @@ -1074,6 +1075,7 @@ AC_SUBST(PSBLASDUPNUL) AC_SUBST(PSBLASDUPADD) AC_SUBST(PSBLASDUPOVW) AC_SUBST(PSBLASDUPERR) +AC_SUBST(PSBLASDUPDEF) AC_SUBST(PSBLASBLDNOR) AC_SUBST(PSBLASBLDRMT) From a401f60215905d2df3e9bd8f48e8b5e61da61d53 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 4 Dec 2025 14:22:49 +0100 Subject: [PATCH 062/175] Fix expose geasb options to all variants S/D/C/Z. --- cbind/base/psb_c_cbase.h | 3 +++ cbind/base/psb_c_dbase.h | 2 ++ cbind/base/psb_c_sbase.h | 3 +++ cbind/base/psb_c_tools_cbind_mod.F90 | 32 ++++++++++++++++++++++++++++ cbind/base/psb_c_zbase.h | 3 +++ cbind/base/psb_d_tools_cbind_mod.F90 | 5 ++--- cbind/base/psb_s_tools_cbind_mod.F90 | 32 ++++++++++++++++++++++++++++ cbind/base/psb_z_tools_cbind_mod.F90 | 32 ++++++++++++++++++++++++++++ cbind/psb_c_cbase.h | 3 +++ cbind/psb_c_dbase.h | 3 +++ cbind/psb_c_sbase.h | 3 +++ cbind/psb_c_zbase.h | 3 +++ 12 files changed, 121 insertions(+), 3 deletions(-) diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index 0b8899239..d33307afe 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -26,11 +26,14 @@ psb_i_t psb_c_cvect_clone(psb_c_cvector *xh,psb_c_cvector *yh); psb_i_t psb_c_cgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeall_remote(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeall_remote_options(psb_c_cvector *xh, psb_c_descriptor *cdh, + psb_i_t bldmode, psb_i_t duple); psb_i_t psb_c_cgeins(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeasb_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index 437bc7073..c615eba14 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -26,6 +26,8 @@ psb_i_t psb_c_dvect_clone(psb_c_dvector *xh,psb_c_dvector *yh); psb_i_t psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeall_remote(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeall_remote_options(psb_c_dvector *xh, psb_c_descriptor *cdh, + psb_i_t bldmode, psb_i_t duple); psb_i_t psb_c_dgeins(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index cb302760c..875caccae 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -26,11 +26,14 @@ psb_i_t psb_c_svect_clone(psb_c_svector *xh,psb_c_svector *yh); psb_i_t psb_c_sgeall(psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeall_remote(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeall_remote_options(psb_c_svector *xh, psb_c_descriptor *cdh, + psb_i_t bldmode, psb_i_t duple); psb_i_t psb_c_sgeins(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeasb_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index 0abc4e347..b3270c582 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -129,6 +129,38 @@ contains return end function psb_c_cgeasb + function psb_c_cgeasb_options(xh,cdh,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info,dupl=dupl) + res = min(0,info) + + return + end function psb_c_cgeasb_options + function psb_c_cgefree(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index 9c5ed8684..4d67b703d 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -26,11 +26,14 @@ psb_i_t psb_c_zvect_clone(psb_c_zvector *xh,psb_c_zvector *yh); psb_i_t psb_c_zgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeall_remote(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeall_remote_options(psb_c_zvector *xh, psb_c_descriptor *cdh, + psb_i_t bldmode, psb_i_t duple); psb_i_t psb_c_zgeins(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeasb_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index c83e0868f..ea11b922b 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -129,7 +129,7 @@ contains return end function psb_c_dgeasb -function psb_c_dgeasb_options(xh,cdh,dupl) bind(c) result(res) + function psb_c_dgeasb_options(xh,cdh,dupl) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res @@ -160,8 +160,7 @@ function psb_c_dgeasb_options(xh,cdh,dupl) bind(c) result(res) return end function psb_c_dgeasb_options - - + function psb_c_dgefree(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 651f3e644..0b25a8404 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -129,6 +129,38 @@ contains return end function psb_c_sgeasb + function psb_c_sgeasb_options(xh,cdh,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info,dupl=dupl) + res = min(0,info) + + return + end function psb_c_sgeasb_options + function psb_c_sgefree(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index c6b2ab0b2..41c170eb0 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -129,6 +129,38 @@ contains return end function psb_c_zgeasb + function psb_c_zgeasb_options(xh,cdh,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info,dupl=dupl) + res = min(0,info) + + return + end function psb_c_zgeasb_options + function psb_c_zgefree(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/psb_c_cbase.h b/cbind/psb_c_cbase.h index 0b8899239..d33307afe 100644 --- a/cbind/psb_c_cbase.h +++ b/cbind/psb_c_cbase.h @@ -26,11 +26,14 @@ psb_i_t psb_c_cvect_clone(psb_c_cvector *xh,psb_c_cvector *yh); psb_i_t psb_c_cgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeall_remote(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeall_remote_options(psb_c_cvector *xh, psb_c_descriptor *cdh, + psb_i_t bldmode, psb_i_t duple); psb_i_t psb_c_cgeins(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeasb_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/psb_c_dbase.h b/cbind/psb_c_dbase.h index b68837bb8..c615eba14 100644 --- a/cbind/psb_c_dbase.h +++ b/cbind/psb_c_dbase.h @@ -26,11 +26,14 @@ psb_i_t psb_c_dvect_clone(psb_c_dvector *xh,psb_c_dvector *yh); psb_i_t psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeall_remote(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeall_remote_options(psb_c_dvector *xh, psb_c_descriptor *cdh, + psb_i_t bldmode, psb_i_t duple); psb_i_t psb_c_dgeins(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeasb_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/psb_c_sbase.h b/cbind/psb_c_sbase.h index cb302760c..875caccae 100644 --- a/cbind/psb_c_sbase.h +++ b/cbind/psb_c_sbase.h @@ -26,11 +26,14 @@ psb_i_t psb_c_svect_clone(psb_c_svector *xh,psb_c_svector *yh); psb_i_t psb_c_sgeall(psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeall_remote(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeall_remote_options(psb_c_svector *xh, psb_c_descriptor *cdh, + psb_i_t bldmode, psb_i_t duple); psb_i_t psb_c_sgeins(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeasb_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/psb_c_zbase.h b/cbind/psb_c_zbase.h index 9c5ed8684..4d67b703d 100644 --- a/cbind/psb_c_zbase.h +++ b/cbind/psb_c_zbase.h @@ -26,11 +26,14 @@ psb_i_t psb_c_zvect_clone(psb_c_zvector *xh,psb_c_zvector *yh); psb_i_t psb_c_zgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeall_remote(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeall_remote_options(psb_c_zvector *xh, psb_c_descriptor *cdh, + psb_i_t bldmode, psb_i_t duple); psb_i_t psb_c_zgeins(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeasb_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); From 5885caaab957cd96eb344e8c9950a255d21054a1 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 5 Dec 2025 13:45:58 +0100 Subject: [PATCH 063/175] Fix krylov -> linsolve in CBIND --- cbind/CMakeLists.txt | 12 +-- cbind/Makefile | 10 +- cbind/{krylov => linsolve}/Makefile | 10 +- .../psb_base_linsolve_cbind_mod.f90} | 4 +- .../psb_clinsolve_cbind_mod.f90} | 99 ++++++++++++++++++- .../psb_dlinsolve_cbind_mod.f90} | 99 ++++++++++++++++++- .../psb_linsolve_cbind.h} | 22 ++++- .../psb_slinsolve_cbind_mod.f90} | 99 ++++++++++++++++++- .../psb_zlinsolve_cbind_mod.f90} | 99 ++++++++++++++++++- cbind/test/pdegen/pdegen3dc.c | 2 +- 10 files changed, 423 insertions(+), 33 deletions(-) rename cbind/{krylov => linsolve}/Makefile (59%) rename cbind/{krylov/psb_base_krylov_cbind_mod.f90 => linsolve/psb_base_linsolve_cbind_mod.f90} (89%) rename cbind/{krylov/psb_ckrylov_cbind_mod.f90 => linsolve/psb_clinsolve_cbind_mod.f90} (50%) rename cbind/{krylov/psb_dkrylov_cbind_mod.f90 => linsolve/psb_dlinsolve_cbind_mod.f90} (50%) rename cbind/{krylov/psb_krylov_cbind.h => linsolve/psb_linsolve_cbind.h} (73%) rename cbind/{krylov/psb_skrylov_cbind_mod.f90 => linsolve/psb_slinsolve_cbind_mod.f90} (50%) rename cbind/{krylov/psb_zkrylov_cbind_mod.f90 => linsolve/psb_zlinsolve_cbind_mod.f90} (50%) diff --git a/cbind/CMakeLists.txt b/cbind/CMakeLists.txt index 284976254..1f7bb259e 100644 --- a/cbind/CMakeLists.txt +++ b/cbind/CMakeLists.txt @@ -26,11 +26,11 @@ set(PSB_cbind_source_files util/psb_util_cbind_mod.f90 util/psb_d_util_cbind_mod.f90 util/psb_z_util_cbind_mod.f90 - krylov/psb_ckrylov_cbind_mod.f90 - krylov/psb_base_krylov_cbind_mod.f90 - krylov/psb_skrylov_cbind_mod.f90 - krylov/psb_dkrylov_cbind_mod.f90 - krylov/psb_zkrylov_cbind_mod.f90 + linsolve/psb_clinsolve_cbind_mod.f90 + linsolve/psb_base_linsolve_cbind_mod.f90 + linsolve/psb_slinsolve_cbind_mod.f90 + linsolve/psb_dlinsolve_cbind_mod.f90 + linsolve/psb_zlinsolve_cbind_mod.f90 prec/psb_dprec_cbind_mod.f90 prec/psb_cprec_cbind_mod.f90 prec/psb_prec_cbind_mod.f90 @@ -75,7 +75,7 @@ list(APPEND PSB_cbind_header_C_files util/psb_c_sutil.h util/psb_c_cutil.h util/psb_util_cbind.h - krylov/psb_krylov_cbind.h + linsolve/psb_linsolve_cbind.h prec/psb_c_sprec.h prec/psb_c_cprec.h prec/psb_prec_cbind.h diff --git a/cbind/Makefile b/cbind/Makefile index 9724c7115..3be3bd8ff 100644 --- a/cbind/Makefile +++ b/cbind/Makefile @@ -6,13 +6,13 @@ INCDIR=../include MODDIR=../modules/ LIBNAME=$(CBINDLIBNAME) -objs: based precd krylovd utild +objs: based precd linsolved utild /bin/cp -p $(CPUPDFLAG) *.h $(INCDIR) /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) lib: objs cd base && $(MAKE) lib LIBNAME=$(LIBNAME) cd prec && $(MAKE) lib LIBNAME=$(LIBNAME) - cd krylov && $(MAKE) lib LIBNAME=$(LIBNAME) + cd linsolve && $(MAKE) lib LIBNAME=$(LIBNAME) cd util && $(MAKE) lib LIBNAME=$(LIBNAME) /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) @@ -21,15 +21,15 @@ based: cd base && $(MAKE) objs LIBNAME=$(LIBNAME) precd: based cd prec && $(MAKE) objs LIBNAME=$(LIBNAME) -krylovd: based precd - cd krylov && $(MAKE) objs LIBNAME=$(LIBNAME) +linsolved: based precd + cd linsolve && $(MAKE) objs LIBNAME=$(LIBNAME) utild: based cd util && $(MAKE) objs LIBNAME=$(LIBNAME) clean: cd base && $(MAKE) clean cd prec && $(MAKE) clean - cd krylov && $(MAKE) clean + cd linsolve && $(MAKE) clean cd util && $(MAKE) clean veryclean: clean diff --git a/cbind/krylov/Makefile b/cbind/linsolve/Makefile similarity index 59% rename from cbind/krylov/Makefile rename to cbind/linsolve/Makefile index 041e23d4f..c0c64c676 100644 --- a/cbind/krylov/Makefile +++ b/cbind/linsolve/Makefile @@ -8,12 +8,12 @@ HERE=.. FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) -OBJS=psb_base_krylov_cbind_mod.o \ -psb_skrylov_cbind_mod.o psb_dkrylov_cbind_mod.o psb_ckrylov_cbind_mod.o psb_zkrylov_cbind_mod.o -CMOD=psb_krylov_cbind.h +OBJS=psb_base_linsolve_cbind_mod.o \ +psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o +CMOD=psb_linsolve_cbind.h -LIBNAME=$(CKRYLOVLIBNAME) +LIBNAME=$(CLINSOLVELIBNAME) objs: $(OBJS) $(CMOD) @@ -23,7 +23,7 @@ lib: objs $(RANLIB) $(HERE)/$(LIBNAME) /bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR) -psb_skrylov_cbind_mod.o psb_dkrylov_cbind_mod.o psb_ckrylov_cbind_mod.o psb_zkrylov_cbind_mod.o: psb_base_krylov_cbind_mod.o +psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o: psb_base_linsolve_cbind_mod.o veryclean: clean /bin/rm -f $(HERE)/$(LIBNAME) diff --git a/cbind/krylov/psb_base_krylov_cbind_mod.f90 b/cbind/linsolve/psb_base_linsolve_cbind_mod.f90 similarity index 89% rename from cbind/krylov/psb_base_krylov_cbind_mod.f90 rename to cbind/linsolve/psb_base_linsolve_cbind_mod.f90 index 88ba819b1..a00a68bf0 100644 --- a/cbind/krylov/psb_base_krylov_cbind_mod.f90 +++ b/cbind/linsolve/psb_base_linsolve_cbind_mod.f90 @@ -1,4 +1,4 @@ -module psb_base_krylov_cbind_mod +module psb_base_linsolve_cbind_mod use iso_c_binding use psb_objhandle_mod @@ -26,4 +26,4 @@ contains end function psb_c_DefaultSolverOptions -end module psb_base_krylov_cbind_mod +end module psb_base_linsolve_cbind_mod diff --git a/cbind/krylov/psb_ckrylov_cbind_mod.f90 b/cbind/linsolve/psb_clinsolve_cbind_mod.f90 similarity index 50% rename from cbind/krylov/psb_ckrylov_cbind_mod.f90 rename to cbind/linsolve/psb_clinsolve_cbind_mod.f90 index 758ecd025..29a0b2fc1 100644 --- a/cbind/krylov/psb_ckrylov_cbind_mod.f90 +++ b/cbind/linsolve/psb_clinsolve_cbind_mod.f90 @@ -1,6 +1,6 @@ -module psb_ckrylov_cbind_mod +module psb_clinsolve_cbind_mod - use psb_base_krylov_cbind_mod + use psb_base_linsolve_cbind_mod contains @@ -102,4 +102,97 @@ contains end function psb_c_ckrylov_opt -end module psb_ckrylov_cbind_mod + function psb_c_crichardson(ah,ph,bh,xh,cdh,options) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_cspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_cprec) :: ph + type(psb_c_cvector) :: bh,xh + type(solveroptions) :: options + + res= psb_c_crichardson_opt(ah, ph, bh, xh, options%eps,cdh, & + & itmax=options%itmax, iter=options%iter,& + & itrace=options%itrace, istop=options%istop,& + & irst=options%irst, err=options%err) + + end function psb_c_crichardson + + + function psb_c_crichardson_opt(ah,ph,bh,xh,eps,cdh,& + & itmax,iter,err,itrace,irst,istop) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_cspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_cprec) :: ph + type(psb_c_cvector) :: bh,xh + integer(psb_c_ipk_), value :: itmax,itrace,irst,istop + real(c_double), value :: eps + integer(psb_c_ipk_) :: iter + real(c_double) :: err + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + type(psb_cprec_type), pointer :: precp + type(psb_c_vect_type), pointer :: xp, bp + + integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter + character(len=20) :: fmethd + real(psb_spk_) :: feps,ferr + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(bh%item)) then + call c_f_pointer(bh%item,bp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + feps = eps + fitmax = itmax + fitrace = itrace + first = irst + fistop = istop + + call psb_crichardson_vect(ap, precp, bp, xp, feps, & + & descp, info,& + & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& + & err=ferr) + iter = fiter + err = ferr + res = info + + end function psb_c_crichardson_opt + +end module psb_clinsolve_cbind_mod diff --git a/cbind/krylov/psb_dkrylov_cbind_mod.f90 b/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 similarity index 50% rename from cbind/krylov/psb_dkrylov_cbind_mod.f90 rename to cbind/linsolve/psb_dlinsolve_cbind_mod.f90 index b11190677..35612ec35 100644 --- a/cbind/krylov/psb_dkrylov_cbind_mod.f90 +++ b/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 @@ -1,6 +1,6 @@ -module psb_dkrylov_cbind_mod +module psb_dlinsolve_cbind_mod - use psb_base_krylov_cbind_mod + use psb_base_linsolve_cbind_mod contains @@ -102,4 +102,97 @@ contains end function psb_c_dkrylov_opt -end module psb_dkrylov_cbind_mod + function psb_c_drichardson(ah,ph,bh,xh,cdh,options) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_dspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_dprec) :: ph + type(psb_c_dvector) :: bh,xh + type(solveroptions) :: options + + res= psb_c_drichardson_opt(ah, ph, bh, xh, options%eps,cdh, & + & itmax=options%itmax, iter=options%iter,& + & itrace=options%itrace, istop=options%istop,& + & irst=options%irst, err=options%err) + + end function psb_c_drichardson + + + function psb_c_drichardson_opt(ah,ph,bh,xh,eps,cdh,& + & itmax,iter,err,itrace,irst,istop) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_dspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_dprec) :: ph + type(psb_c_dvector) :: bh,xh + integer(psb_c_ipk_), value :: itmax,itrace,irst,istop + real(c_double), value :: eps + integer(psb_c_ipk_) :: iter + real(c_double) :: err + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + type(psb_dprec_type), pointer :: precp + type(psb_d_vect_type), pointer :: xp, bp + + integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter + character(len=20) :: fmethd + real(psb_dpk_) :: feps,ferr + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(bh%item)) then + call c_f_pointer(bh%item,bp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + feps = eps + fitmax = itmax + fitrace = itrace + first = irst + fistop = istop + + call psb_drichardson_vect(ap, precp, bp, xp, feps, & + & descp, info,& + & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& + & err=ferr) + iter = fiter + err = ferr + res = info + + end function psb_c_drichardson_opt + +end module psb_dlinsolve_cbind_mod diff --git a/cbind/krylov/psb_krylov_cbind.h b/cbind/linsolve/psb_linsolve_cbind.h similarity index 73% rename from cbind/krylov/psb_krylov_cbind.h rename to cbind/linsolve/psb_linsolve_cbind.h index 4ed45746b..6dd7aa3c8 100644 --- a/cbind/krylov/psb_krylov_cbind.h +++ b/cbind/linsolve/psb_linsolve_cbind.h @@ -1,5 +1,5 @@ -#ifndef PSB_KRYL_CBIND_ -#define PSB_KRYL_CBIND_ +#ifndef PSB_LINSLV_CBIND_ +#define PSB_LINSLV_CBIND_ #include "psb_base_cbind.h" #include "psb_prec_cbind.h" @@ -42,6 +42,24 @@ int psb_c_zkrylov(const char *method, psb_c_zspmat *ah, psb_c_zprec *ph, psb_c_zvector *bh, psb_c_zvector *xh, psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + + +int psb_c_srichardson(psb_c_sspmat *ah, psb_c_sprec *ph, + psb_c_svector *bh, psb_c_svector *xh, + psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + +int psb_c_drichardson(psb_c_dspmat *ah, psb_c_dprec *ph, + psb_c_dvector *bh, psb_c_dvector *xh, + psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + +int psb_c_crichardson(psb_c_cspmat *ah, psb_c_cprec *ph, + psb_c_cvector *bh, psb_c_cvector *xh, + psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + +int psb_c_zrichardson(psb_c_zspmat *ah, psb_c_zprec *ph, + psb_c_zvector *bh, psb_c_zvector *xh, + psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + #define PSB_VALID_KRYLOV_METHODS_STRINGS "CG","CGS","BICG","BICGSTAB","RGMRES","BICGSTABL","FCG","GCR" #define PSB_VALID_KRYLOV_METHODS_STRING "CG CGS BICG BICGSTAB RGMRES BICGSTABL FCG GCR" diff --git a/cbind/krylov/psb_skrylov_cbind_mod.f90 b/cbind/linsolve/psb_slinsolve_cbind_mod.f90 similarity index 50% rename from cbind/krylov/psb_skrylov_cbind_mod.f90 rename to cbind/linsolve/psb_slinsolve_cbind_mod.f90 index 41bb95064..e1823bd87 100644 --- a/cbind/krylov/psb_skrylov_cbind_mod.f90 +++ b/cbind/linsolve/psb_slinsolve_cbind_mod.f90 @@ -1,6 +1,6 @@ -module psb_skrylov_cbind_mod +module psb_slinsolve_cbind_mod - use psb_base_krylov_cbind_mod + use psb_base_linsolve_cbind_mod contains @@ -102,4 +102,97 @@ contains end function psb_c_skrylov_opt -end module psb_skrylov_cbind_mod + function psb_c_srichardson(ah,ph,bh,xh,cdh,options) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_sspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_sprec) :: ph + type(psb_c_svector) :: bh,xh + type(solveroptions) :: options + + res= psb_c_srichardson_opt(ah, ph, bh, xh, options%eps,cdh, & + & itmax=options%itmax, iter=options%iter,& + & itrace=options%itrace, istop=options%istop,& + & irst=options%irst, err=options%err) + + end function psb_c_srichardson + + + function psb_c_srichardson_opt(ah,ph,bh,xh,eps,cdh,& + & itmax,iter,err,itrace,irst,istop) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_sspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_sprec) :: ph + type(psb_c_svector) :: bh,xh + integer(psb_c_ipk_), value :: itmax,itrace,irst,istop + real(c_double), value :: eps + integer(psb_c_ipk_) :: iter + real(c_double) :: err + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + type(psb_sprec_type), pointer :: precp + type(psb_s_vect_type), pointer :: xp, bp + + integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter + character(len=20) :: fmethd + real(psb_spk_) :: feps,ferr + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(bh%item)) then + call c_f_pointer(bh%item,bp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + feps = eps + fitmax = itmax + fitrace = itrace + first = irst + fistop = istop + + call psb_srichardson_vect(ap, precp, bp, xp, feps, & + & descp, info,& + & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& + & err=ferr) + iter = fiter + err = ferr + res = info + + end function psb_c_srichardson_opt + +end module psb_slinsolve_cbind_mod diff --git a/cbind/krylov/psb_zkrylov_cbind_mod.f90 b/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 similarity index 50% rename from cbind/krylov/psb_zkrylov_cbind_mod.f90 rename to cbind/linsolve/psb_zlinsolve_cbind_mod.f90 index 37f24be78..3234c72ca 100644 --- a/cbind/krylov/psb_zkrylov_cbind_mod.f90 +++ b/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 @@ -1,6 +1,6 @@ -module psb_zkrylov_cbind_mod +module psb_zlinsolve_cbind_mod - use psb_base_krylov_cbind_mod + use psb_base_linsolve_cbind_mod contains @@ -102,4 +102,97 @@ contains end function psb_c_zkrylov_opt -end module psb_zkrylov_cbind_mod + function psb_c_zrichardson(ah,ph,bh,xh,cdh,options) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_zspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_zprec) :: ph + type(psb_c_zvector) :: bh,xh + type(solveroptions) :: options + + res= psb_c_zrichardson_opt(ah, ph, bh, xh, options%eps,cdh, & + & itmax=options%itmax, iter=options%iter,& + & itrace=options%itrace, istop=options%istop,& + & irst=options%irst, err=options%err) + + end function psb_c_zrichardson + + + function psb_c_zrichardson_opt(ah,ph,bh,xh,eps,cdh,& + & itmax,iter,err,itrace,irst,istop) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_zspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_zprec) :: ph + type(psb_c_zvector) :: bh,xh + integer(psb_c_ipk_), value :: itmax,itrace,irst,istop + real(c_double), value :: eps + integer(psb_c_ipk_) :: iter + real(c_double) :: err + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + type(psb_zprec_type), pointer :: precp + type(psb_z_vect_type), pointer :: xp, bp + + integer(psb_c_ipk_) :: info,fitmax,fitrace,first,fistop,fiter + character(len=20) :: fmethd + real(psb_dpk_) :: feps,ferr + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(bh%item)) then + call c_f_pointer(bh%item,bp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + feps = eps + fitmax = itmax + fitrace = itrace + first = irst + fistop = istop + + call psb_zrichardson_vect(ap, precp, bp, xp, feps, & + & descp, info,& + & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& + & err=ferr) + iter = fiter + err = ferr + res = info + + end function psb_c_zrichardson_opt + +end module psb_zlinsolve_cbind_mod diff --git a/cbind/test/pdegen/pdegen3dc.c b/cbind/test/pdegen/pdegen3dc.c index 2d8061805..d9f95b238 100644 --- a/cbind/test/pdegen/pdegen3dc.c +++ b/cbind/test/pdegen/pdegen3dc.c @@ -74,7 +74,7 @@ #include "psb_base_cbind.h" #include "psb_prec_cbind.h" -#include "psb_krylov_cbind.h" +#include "psb_linsolve_cbind.h" #define LINEBUFSIZE 1024 #define NBMAX 20 From 54d1d4420b9b4f9b9d5b825e8621961c08b07ac5 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 11 Dec 2025 10:22:58 +0100 Subject: [PATCH 064/175] Contributors list mods --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 34b2aff87..3f4169d85 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,7 @@ Salvatore Filippone - Pasqua D'Ambra - Alfredo Buttari - Daniela di Serafino +- Thomas Amestoy - Michele Martone - Michele Colajanni - Fabio Cerioni From 01610305b2866815f0bb5fef4f75e748aea7981a Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 12 Dec 2025 22:44:03 +0100 Subject: [PATCH 065/175] Rename base/internals into base/auxil. Fix aplusat in CMakeLists --- base/CMakeLists.txt | 44 ++++++++++--------- base/Makefile | 12 ++--- base/{internals => auxil}/Makefile | 0 .../psi_a2a_fnd_owner.F90 | 0 .../psi_adjcncy_fnd_owner.F90 | 0 .../psi_bld_glb_dep_list.F90 | 0 base/{internals => auxil}/psi_bld_tmphalo.f90 | 0 base/{internals => auxil}/psi_bld_tmpovrl.f90 | 0 .../{internals => auxil}/psi_compute_size.f90 | 0 .../psi_crea_bnd_elem.f90 | 0 base/{internals => auxil}/psi_crea_index.f90 | 0 .../psi_crea_ovr_elem.f90 | 0 base/{internals => auxil}/psi_desc_impl.f90 | 0 base/{internals => auxil}/psi_desc_index.F90 | 0 base/{internals => auxil}/psi_fnd_owner.F90 | 0 .../psi_graph_fnd_owner.F90 | 0 base/{internals => auxil}/psi_hash_impl.f90 | 0 .../psi_indx_map_fnd_owner.F90 | 0 base/{internals => auxil}/psi_sort_dl.f90 | 0 base/{internals => auxil}/psi_srtlist.f90 | 0 .../psi_symm_dep_list.F90 | 0 base/{internals => auxil}/psi_xtr_loc_dl.F90 | 0 22 files changed, 30 insertions(+), 26 deletions(-) rename base/{internals => auxil}/Makefile (100%) rename base/{internals => auxil}/psi_a2a_fnd_owner.F90 (100%) rename base/{internals => auxil}/psi_adjcncy_fnd_owner.F90 (100%) rename base/{internals => auxil}/psi_bld_glb_dep_list.F90 (100%) rename base/{internals => auxil}/psi_bld_tmphalo.f90 (100%) rename base/{internals => auxil}/psi_bld_tmpovrl.f90 (100%) rename base/{internals => auxil}/psi_compute_size.f90 (100%) rename base/{internals => auxil}/psi_crea_bnd_elem.f90 (100%) rename base/{internals => auxil}/psi_crea_index.f90 (100%) rename base/{internals => auxil}/psi_crea_ovr_elem.f90 (100%) rename base/{internals => auxil}/psi_desc_impl.f90 (100%) rename base/{internals => auxil}/psi_desc_index.F90 (100%) rename base/{internals => auxil}/psi_fnd_owner.F90 (100%) rename base/{internals => auxil}/psi_graph_fnd_owner.F90 (100%) rename base/{internals => auxil}/psi_hash_impl.f90 (100%) rename base/{internals => auxil}/psi_indx_map_fnd_owner.F90 (100%) rename base/{internals => auxil}/psi_sort_dl.f90 (100%) rename base/{internals => auxil}/psi_srtlist.f90 (100%) rename base/{internals => auxil}/psi_symm_dep_list.F90 (100%) rename base/{internals => auxil}/psi_xtr_loc_dl.F90 (100%) diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt index b7a7d22ca..f2b83f913 100644 --- a/base/CMakeLists.txt +++ b/base/CMakeLists.txt @@ -122,25 +122,25 @@ set(PSB_base_source_files comm/psb_mgather_a.f90 comm/psb_dgather.f90 comm/psb_lhalo.f90 - internals/psi_bld_glb_dep_list.F90 - internals/psi_graph_fnd_owner.F90 - internals/psi_sort_dl.f90 - internals/psi_indx_map_fnd_owner.F90 - internals/psi_fnd_owner.F90 - internals/psi_bld_tmpovrl.f90 - internals/psi_symm_dep_list.F90 - internals/psi_desc_impl.f90 -### internals/psi_compute_size.f90 - internals/psi_hash_impl.f90 - internals/psi_crea_ovr_elem.f90 - internals/psi_a2a_fnd_owner.F90 - internals/psi_bld_tmphalo.f90 - internals/psi_crea_bnd_elem.f90 - internals/psi_desc_index.F90 - internals/psi_xtr_loc_dl.F90 - internals/psi_crea_index.f90 - internals/psi_srtlist.f90 - internals/psi_adjcncy_fnd_owner.F90 + auxil/psi_bld_glb_dep_list.F90 + auxil/psi_graph_fnd_owner.F90 + auxil/psi_sort_dl.f90 + auxil/psi_indx_map_fnd_owner.F90 + auxil/psi_fnd_owner.F90 + auxil/psi_bld_tmpovrl.f90 + auxil/psi_symm_dep_list.F90 + auxil/psi_desc_impl.f90 +### auxil/psi_compute_size.f90 + auxil/psi_hash_impl.f90 + auxil/psi_crea_ovr_elem.f90 + auxil/psi_a2a_fnd_owner.F90 + auxil/psi_bld_tmphalo.f90 + auxil/psi_crea_bnd_elem.f90 + auxil/psi_desc_index.F90 + auxil/psi_xtr_loc_dl.F90 + auxil/psi_crea_index.f90 + auxil/psi_srtlist.f90 + auxil/psi_adjcncy_fnd_owner.F90 tools/psb_sins.f90 tools/psb_zspasb.f90 tools/psb_zspalloc.f90 @@ -271,7 +271,11 @@ set(PSB_base_source_files tools/psb_dasb_a.f90 tools/psb_zsprn.f90 tools/psb_get_overlap.f90 - serial/psb_crwextd.f90 + serial/psb_saplusat.f90 + serial/psb_daplusat.f90 + serial/psb_caplusat.f90 + serial/psb_zaplusat.f90 + serial/psb_crwextd.f90 serial/psb_zspspmm.F90 serial/psb_drwextd.f90 serial/psb_dnumbmm.f90 diff --git a/base/Makefile b/base/Makefile index 3348013f3..56b09fecb 100644 --- a/base/Makefile +++ b/base/Makefile @@ -6,18 +6,18 @@ INCDIR=../include MODDIR=../modules LIBNAME=$(BASELIBNAME) -objs: mods sr cm in pb tl +objs: mods sr cm ax pb tl lib: objs $(MAKE) -C modules lib LIBNAME=$(BASELIBNAME) F90="$(MPF90)" F90COPT="$(F90COPT) $(MPI_OPT)" $(MAKE) -C serial lib LIBNAME=$(BASELIBNAME) $(MAKE) -C comm lib LIBNAME=$(BASELIBNAME) - $(MAKE) -C internals lib LIBNAME=$(BASELIBNAME) + $(MAKE) -C auxil lib LIBNAME=$(BASELIBNAME) $(MAKE) -C psblas lib LIBNAME=$(BASELIBNAME) $(MAKE) -C tools lib LIBNAME=$(BASELIBNAME) /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) -sr cm in pb tl: mods +sr cm ax pb tl: mods mods: $(MAKE) -C modules objs F90="$(MPF90)" F90COPT="$(F90COPT) $(MPI_OPT)" @@ -25,8 +25,8 @@ sr: $(MAKE) -C serial objs cm: $(MAKE) -C comm objs -in: - $(MAKE) -C internals objs +ax: + $(MAKE) -C auxil objs pb: $(MAKE) -C psblas objs tl: @@ -35,7 +35,7 @@ tl: clean: ($(MAKE) -C modules clean) ($(MAKE) -C comm clean) - ($(MAKE) -C internals clean) + ($(MAKE) -C auxil clean) ($(MAKE) -C tools clean) ($(MAKE) -C serial clean) ($(MAKE) -C psblas clean) diff --git a/base/internals/Makefile b/base/auxil/Makefile similarity index 100% rename from base/internals/Makefile rename to base/auxil/Makefile diff --git a/base/internals/psi_a2a_fnd_owner.F90 b/base/auxil/psi_a2a_fnd_owner.F90 similarity index 100% rename from base/internals/psi_a2a_fnd_owner.F90 rename to base/auxil/psi_a2a_fnd_owner.F90 diff --git a/base/internals/psi_adjcncy_fnd_owner.F90 b/base/auxil/psi_adjcncy_fnd_owner.F90 similarity index 100% rename from base/internals/psi_adjcncy_fnd_owner.F90 rename to base/auxil/psi_adjcncy_fnd_owner.F90 diff --git a/base/internals/psi_bld_glb_dep_list.F90 b/base/auxil/psi_bld_glb_dep_list.F90 similarity index 100% rename from base/internals/psi_bld_glb_dep_list.F90 rename to base/auxil/psi_bld_glb_dep_list.F90 diff --git a/base/internals/psi_bld_tmphalo.f90 b/base/auxil/psi_bld_tmphalo.f90 similarity index 100% rename from base/internals/psi_bld_tmphalo.f90 rename to base/auxil/psi_bld_tmphalo.f90 diff --git a/base/internals/psi_bld_tmpovrl.f90 b/base/auxil/psi_bld_tmpovrl.f90 similarity index 100% rename from base/internals/psi_bld_tmpovrl.f90 rename to base/auxil/psi_bld_tmpovrl.f90 diff --git a/base/internals/psi_compute_size.f90 b/base/auxil/psi_compute_size.f90 similarity index 100% rename from base/internals/psi_compute_size.f90 rename to base/auxil/psi_compute_size.f90 diff --git a/base/internals/psi_crea_bnd_elem.f90 b/base/auxil/psi_crea_bnd_elem.f90 similarity index 100% rename from base/internals/psi_crea_bnd_elem.f90 rename to base/auxil/psi_crea_bnd_elem.f90 diff --git a/base/internals/psi_crea_index.f90 b/base/auxil/psi_crea_index.f90 similarity index 100% rename from base/internals/psi_crea_index.f90 rename to base/auxil/psi_crea_index.f90 diff --git a/base/internals/psi_crea_ovr_elem.f90 b/base/auxil/psi_crea_ovr_elem.f90 similarity index 100% rename from base/internals/psi_crea_ovr_elem.f90 rename to base/auxil/psi_crea_ovr_elem.f90 diff --git a/base/internals/psi_desc_impl.f90 b/base/auxil/psi_desc_impl.f90 similarity index 100% rename from base/internals/psi_desc_impl.f90 rename to base/auxil/psi_desc_impl.f90 diff --git a/base/internals/psi_desc_index.F90 b/base/auxil/psi_desc_index.F90 similarity index 100% rename from base/internals/psi_desc_index.F90 rename to base/auxil/psi_desc_index.F90 diff --git a/base/internals/psi_fnd_owner.F90 b/base/auxil/psi_fnd_owner.F90 similarity index 100% rename from base/internals/psi_fnd_owner.F90 rename to base/auxil/psi_fnd_owner.F90 diff --git a/base/internals/psi_graph_fnd_owner.F90 b/base/auxil/psi_graph_fnd_owner.F90 similarity index 100% rename from base/internals/psi_graph_fnd_owner.F90 rename to base/auxil/psi_graph_fnd_owner.F90 diff --git a/base/internals/psi_hash_impl.f90 b/base/auxil/psi_hash_impl.f90 similarity index 100% rename from base/internals/psi_hash_impl.f90 rename to base/auxil/psi_hash_impl.f90 diff --git a/base/internals/psi_indx_map_fnd_owner.F90 b/base/auxil/psi_indx_map_fnd_owner.F90 similarity index 100% rename from base/internals/psi_indx_map_fnd_owner.F90 rename to base/auxil/psi_indx_map_fnd_owner.F90 diff --git a/base/internals/psi_sort_dl.f90 b/base/auxil/psi_sort_dl.f90 similarity index 100% rename from base/internals/psi_sort_dl.f90 rename to base/auxil/psi_sort_dl.f90 diff --git a/base/internals/psi_srtlist.f90 b/base/auxil/psi_srtlist.f90 similarity index 100% rename from base/internals/psi_srtlist.f90 rename to base/auxil/psi_srtlist.f90 diff --git a/base/internals/psi_symm_dep_list.F90 b/base/auxil/psi_symm_dep_list.F90 similarity index 100% rename from base/internals/psi_symm_dep_list.F90 rename to base/auxil/psi_symm_dep_list.F90 diff --git a/base/internals/psi_xtr_loc_dl.F90 b/base/auxil/psi_xtr_loc_dl.F90 similarity index 100% rename from base/internals/psi_xtr_loc_dl.F90 rename to base/auxil/psi_xtr_loc_dl.F90 From a9b653e03beaa8d0fe59e45968711ca551f04138 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 10:53:09 +0100 Subject: [PATCH 066/175] Update readme --- README.md | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3f4169d85..2532d920e 100644 --- a/README.md +++ b/README.md @@ -51,10 +51,11 @@ The main reference for the serial sparse BLAS is: ## Installing -To compile and run our software you will need the following -prerequisites (see also SERIAL below): + To compile (using configure/make/make install) and run our software + you will need the following + prerequisites (see also SERIAL below): -1. A working version of MPI + 1. A working version of MPI. 2. A version of the BLAS; if you don't have a specific version for your platform you may try ATLAS available from @@ -94,7 +95,7 @@ the paths with `--with-libs`, or explicitly specifying the names in > (see [http://modules.sourceforge.net/](http://modules.sourceforge.net/)), and load the relevant > variables with (e.g.) > ``` -> module load gcc/13.2.0 openmpi/4.1.6 +> module load gcc/14.2.0 openmpi/5.0.8 > ``` > This will delegate to the modules setup to make sure that the version of > openmpi in use is the one compiled with the gnu46 compilers. After the @@ -121,7 +122,7 @@ entities that were previously separated: | PSBLAS-EXT | a library providing additional storage formats for matrices and vectors | | SPGPU | a package of kernels for NVIDIA GPUs originally written by Davide Barbieri and Salvatore Filippone; see the license file [cuda/License-spgpu.md](cuda/License-spgpu.md) | -Moreover, the module and library previously called psb_krylovv are now called +Moreover, the module and library previously called psb_krylov are now called psb_linsolve, but their usage is otherwise unchanged. ### OpenACC @@ -155,8 +156,15 @@ which is asking for 4-bytes local indices, and 8-bytes global indices ## CMAKE There is initial support for building with CMAKE. As of this time, it does not compile the CUDA part. -## LLVM -The library has been successfully compiled and tested with LLVM version 20.1.0-rc2. +## MPI and Compilers + The library has been successfully compiled and tested with multiple compilers + and MPI implementations; this release has been successfully tested with: + - MPICH 4.2.3, 4.3.0, 4.3.2 + - OpenMPI 4.1.8. 5.0.7, 5.0.8, 5.0.9 + combined with wither + - GNU compilers 10.5.0, 11.5.0, 12.5.0, 13.3.0, 14.3.0, 15.2.0 + - LLVM 20.1.0 and 21.1.0 + Moreover, it has been tested with the Intel OneAPI toolchain versions 2025.2 and 2025.3 ## Documentation From 5997912a98ca3633a74b08d0646e5ce0c32e523b Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 10:55:40 +0100 Subject: [PATCH 067/175] Further updates --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2532d920e..795ffaff3 100644 --- a/README.md +++ b/README.md @@ -161,9 +161,12 @@ There is initial support for building with CMAKE. As of this time, it does not c and MPI implementations; this release has been successfully tested with: - MPICH 4.2.3, 4.3.0, 4.3.2 - OpenMPI 4.1.8. 5.0.7, 5.0.8, 5.0.9 - combined with wither + + combined with + - GNU compilers 10.5.0, 11.5.0, 12.5.0, 13.3.0, 14.3.0, 15.2.0 - LLVM 20.1.0 and 21.1.0 + Moreover, it has been tested with the Intel OneAPI toolchain versions 2025.2 and 2025.3 ## Documentation From 8f3f1e4a2fd433e664b85acf4d001cd8123e5475 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 10:56:53 +0100 Subject: [PATCH 068/175] Updates readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 795ffaff3..8893a5563 100644 --- a/README.md +++ b/README.md @@ -165,7 +165,7 @@ There is initial support for building with CMAKE. As of this time, it does not c combined with - GNU compilers 10.5.0, 11.5.0, 12.5.0, 13.3.0, 14.3.0, 15.2.0 - - LLVM 20.1.0 and 21.1.0 + - LLVM 20.1.0 and 21.1.0 (except OpenMPI 4.1.8 which does not build with LLVM) Moreover, it has been tested with the Intel OneAPI toolchain versions 2025.2 and 2025.3 From ee62a7df5252a4d7b636818c516c5c9ea2c0b98c Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 11:03:01 +0100 Subject: [PATCH 069/175] Updates --- README.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8893a5563..fa4a68b6d 100644 --- a/README.md +++ b/README.md @@ -57,9 +57,7 @@ The main reference for the serial sparse BLAS is: 1. A working version of MPI. -2. A version of the BLAS; if you don't have a specific version for your - platform you may try ATLAS available from - http://math-atlas.sourceforge.net/ +2. A version of the BLAS; you can specify a specific version with `--with-blas` 3. We have had good results with the METIS library, from https://github.com/KarypisLab/METIS. @@ -71,12 +69,12 @@ The main reference for the serial sparse BLAS is: We use the C interface to AMD. 6. If you have CUDA available, use - --enable-cuda to compile CUDA-enabled methods - --with-cudadir= to specify the CUDA toolkit location - --with-cudacc=XX,YY,ZZ to specify a list of target CCs (compute - capabilities) to compile the CUDA code for. + - `--enable-cuda` to compile CUDA-enabled methods + - `--with-cudadir=` to specify the CUDA toolkit location + - `--with-cudacc=XX,YY,ZZ` to specify a list of target CCs (compute + capabilities). -The configure script will generate a Make.inc file suitable for building +The configure script will generate a `Make.inc` file suitable for building the library. The script is capable of recognizing the needed libraries with their default names; if they are in unusual places consider adding the paths with `--with-libs`, or explicitly specifying the names in @@ -219,16 +217,16 @@ Salvatore Filippone **Contributors** (_roughly reverse cronological order_): +- Fabio Durastante - Luca Pepè Sciarria - Theophane Loloum -- Fabio Durastante - Dimitri Walther +- Pasqua D'Ambra - Andea Di Iorio - Stefano Petrilli - Soren Rasmussen - Zaak Beekman - Ambra Abdullahi Hassan -- Pasqua D'Ambra - Alfredo Buttari - Daniela di Serafino - Thomas Amestoy From b954ae6090123f695d8a68e0aded8c927eab52ec Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 12:24:35 +0100 Subject: [PATCH 070/175] README updates --- README.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index fa4a68b6d..233605dee 100644 --- a/README.md +++ b/README.md @@ -105,10 +105,17 @@ After you have Make.inc fixed, run make ``` to compile the library; go to the test directory and its subdirectories -to get test programs done. If you specify `--prefix=/path` you can do make -install and the libraries will be installed under `/path/lib`, while the +to get test programs done. If you specify `--prefix=/path` you can do + ``` + make install + ``` +and the libraries will be installed under `/path/lib`, while the module files will be installed under `/path/modules`. The regular and experimental C interface header files are under `/path/include`. +If `/path` is a system directory, you may need + ``` + sudo make install + ``` ### Packaging changes, CUDA and GPU support @@ -125,7 +132,7 @@ psb_linsolve, but their usage is otherwise unchanged. ### OpenACC There is a highly experimental version of an OpenACC interface, -you can access it by speficifying +you can compile it by speficifying ```bash --enable-openacc --with-extraopenacc="-foffload=nvptx-none=-march=sm_70" ``` @@ -143,7 +150,7 @@ cover what we use internally, it's not a complete replacement). ### Integers We have two kind of integers: IPK for local indices, and LPK for -global indices. They can be specified independently at configure time, +global indices. Their size can be specified at configure time, e.g. ```bash --with-ipk=4 --with-lpk=8 @@ -172,8 +179,8 @@ There is initial support for building with CMAKE. As of this time, it does not c Further information on installation and configuration can be found in the documentation. See [docs/psblas-3.9.pdf](docs/psblas-3.9.pdf); an HTML version of the same document is available in docs/html. Please consult the sample programs, especially -- [test/pargen/psb_s_pde2d.F90](test/pargen/psb_s_pde2d.F90) [test/pargen/psb_d_pde2d.F90](test/pargen/psb_d_pde2d.F90) -- [test/pargen/psb_s_pde2d.F90](test/pargen/psb_s_pde3d.F90) [test/pargen/psb_d_pde2d.F90](test/pargen/psb_d_pde3d.F90) +- [test/pdegen/psb_s_pde2d.F90](test/pdegen/psb_s_pde2d.F90) [test/pdegen/psb_d_pde2d.F90](test/pdegen/psb_d_pde2d.F90) +- [test/pdegen/psb_s_pde2d.F90](test/pdegen/psb_s_pde3d.F90) [test/pdegen/psb_d_pde2d.F90](test/pdegens/psb_d_pde3d.F90) which contain examples for the solution of linear systems obtained by the discretization of a generic second-order differential equation in two: ```math From f3fcd3a41a3eece663338939bf2bffa2da47927e Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 14:10:13 +0100 Subject: [PATCH 071/175] Improved error messaging for sample programs. --- test/fileread/getp.f90 | 8 ++++++-- test/pdegen/psb_d_pde2d.F90 | 14 +++++++------- test/pdegen/psb_d_pde3d.F90 | 14 +++++++------- test/pdegen/psb_s_pde2d.F90 | 14 +++++++------- test/pdegen/psb_s_pde3d.F90 | 14 +++++++------- 5 files changed, 34 insertions(+), 30 deletions(-) diff --git a/test/fileread/getp.f90 b/test/fileread/getp.f90 index db8207b60..2a32f7de7 100644 --- a/test/fileread/getp.f90 +++ b/test/fileread/getp.f90 @@ -67,7 +67,9 @@ contains write(psb_err_unit,*) 'Opened file ',trim(filename),' for input' end if else - inp_unit=psb_inp_unit + write(psb_err_unit,*) 'Usage: psb_d_fileread ctrl-file ' + call psb_abort(ctxt) + stop end if ! Read Input Parameters read(inp_unit,*) ip @@ -187,7 +189,9 @@ contains write(psb_err_unit,*) 'Opened file ',trim(filename),' for input' end if else - inp_unit=inp_unit + write(psb_err_unit,*) 'Usage: psb_s_fileread ctrl-file ' + call psb_abort(ctxt) + stop end if ! Read Input Parameters read(inp_unit,*) ip diff --git a/test/pdegen/psb_d_pde2d.F90 b/test/pdegen/psb_d_pde2d.F90 index e04ec6780..780a183da 100644 --- a/test/pdegen/psb_d_pde2d.F90 +++ b/test/pdegen/psb_d_pde2d.F90 @@ -877,7 +877,9 @@ contains write(psb_err_unit,*) 'Opened file ',trim(filename),' for input' end if else - inp_unit=psb_inp_unit + call pr_usage(psb_err_unit) + call psb_abort(ctxt) + stop end if read(inp_unit,*) ip if (ip >= 3) then @@ -1012,12 +1014,10 @@ contains ! subroutine pr_usage(iout) integer(psb_ipk_) :: iout - write(iout,*)'incorrect parameter(s) found' - write(iout,*)' usage: pde2d90 methd prec dim & - &[ipart istop itmax itrace]' - write(iout,*)' where:' - write(iout,*)' methd: cgstab cgs rgmres bicgstabl' - write(iout,*)' prec : bjac diag none' + write(iout,*)' usage: psb_d_pde2d cntrl-file ' + write(iout,*)' where ctrl-file contains the following:' + write(iout,*)' methd BICGSTAB CGS BICG BICGSTABL RGMRES FCG CGR RICHARDSON' + write(iout,*)' prec bjac diag none' write(iout,*)' dim number of points along each axis' write(iout,*)' the size of the resulting linear ' write(iout,*)' system is dim**2' diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index cac1c413b..567ec0295 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -933,7 +933,9 @@ contains write(psb_err_unit,*) 'Opened file ',trim(filename),' for input' end if else - inp_unit=psb_inp_unit + call pr_usage(psb_err_unit) + call psb_abort(ctxt) + stop end if read(inp_unit,*) ip if (ip >= 3) then @@ -1070,12 +1072,10 @@ contains ! subroutine pr_usage(iout) integer(psb_ipk_) :: iout - write(iout,*)'incorrect parameter(s) found' - write(iout,*)' usage: pde3d90 methd prec dim & - &[istop itmax itrace]' - write(iout,*)' where:' - write(iout,*)' methd: cgstab cgs rgmres bicgstabl' - write(iout,*)' prec : bjac diag none' + write(iout,*)' usage: psb_d_pde3d cntrl-file ' + write(iout,*)' where ctrl-file contains the following:' + write(iout,*)' methd BICGSTAB CGS BICG BICGSTABL RGMRES FCG CGR RICHARDSON' + write(iout,*)' prec bjac diag none' write(iout,*)' dim number of points along each axis' write(iout,*)' the size of the resulting linear ' write(iout,*)' system is dim**3' diff --git a/test/pdegen/psb_s_pde2d.F90 b/test/pdegen/psb_s_pde2d.F90 index 121980bf1..179994e87 100644 --- a/test/pdegen/psb_s_pde2d.F90 +++ b/test/pdegen/psb_s_pde2d.F90 @@ -877,7 +877,9 @@ contains write(psb_err_unit,*) 'Opened file ',trim(filename),' for input' end if else - inp_unit=psb_inp_unit + call pr_usage(psb_err_unit) + call psb_abort(ctxt) + stop end if read(inp_unit,*) ip if (ip >= 3) then @@ -1012,12 +1014,10 @@ contains ! subroutine pr_usage(iout) integer(psb_ipk_) :: iout - write(iout,*)'incorrect parameter(s) found' - write(iout,*)' usage: pde2d90 methd prec dim & - &[ipart istop itmax itrace]' - write(iout,*)' where:' - write(iout,*)' methd: cgstab cgs rgmres bicgstabl' - write(iout,*)' prec : bjac diag none' + write(iout,*)' usage: psb_s_pde2d cntrl-file ' + write(iout,*)' where ctrl-file contains the following:' + write(iout,*)' methd BICGSTAB CGS BICG BICGSTABL RGMRES FCG CGR RICHARDSON' + write(iout,*)' prec bjac diag none' write(iout,*)' dim number of points along each axis' write(iout,*)' the size of the resulting linear ' write(iout,*)' system is dim**2' diff --git a/test/pdegen/psb_s_pde3d.F90 b/test/pdegen/psb_s_pde3d.F90 index 49b7e9796..00edf0466 100644 --- a/test/pdegen/psb_s_pde3d.F90 +++ b/test/pdegen/psb_s_pde3d.F90 @@ -933,7 +933,9 @@ contains write(psb_err_unit,*) 'Opened file ',trim(filename),' for input' end if else - inp_unit=psb_inp_unit + call pr_usage(psb_err_unit) + call psb_abort(ctxt) + stop end if read(inp_unit,*) ip if (ip >= 3) then @@ -1070,12 +1072,10 @@ contains ! subroutine pr_usage(iout) integer(psb_ipk_) :: iout - write(iout,*)'incorrect parameter(s) found' - write(iout,*)' usage: pde3d90 methd prec dim & - &[istop itmax itrace]' - write(iout,*)' where:' - write(iout,*)' methd: cgstab cgs rgmres bicgstabl' - write(iout,*)' prec : bjac diag none' + write(iout,*)' usage: psb_s_pde3d cntrl-file ' + write(iout,*)' where ctrl-file contains the following:' + write(iout,*)' methd BICGSTAB CGS BICG BICGSTABL RGMRES FCG CGR RICHARDSON' + write(iout,*)' prec bjac diag none' write(iout,*)' dim number of points along each axis' write(iout,*)' the size of the resulting linear ' write(iout,*)' system is dim**3' From e68a5eb0b7b83a868d05645431308f98ef96ff6c Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 14:25:32 +0100 Subject: [PATCH 072/175] Updates for README --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 233605dee..ea665a9a4 100644 --- a/README.md +++ b/README.md @@ -105,18 +105,20 @@ After you have Make.inc fixed, run make ``` to compile the library; go to the test directory and its subdirectories -to get test programs done. If you specify `--prefix=/path` you can do +to get test programs done. +You can then install with ``` make install ``` -and the libraries will be installed under `/path/lib`, while the -module files will be installed under `/path/modules`. The regular and -experimental C interface header files are under `/path/include`. + We recommend specifying `--prefix=/path` in the configure step, so that + the libraries will be installed under `/path/lib`, + the module files will be installed under `/path/modules`, the documentation under `/path/docs` and so on. +The C interface header files are under `/path/include`. If `/path` is a system directory, you may need ``` sudo make install ``` - +If you do not specifye `--with-prefix` the usual default of `/usr` applies. ### Packaging changes, CUDA and GPU support This version of PSBLAS incorporates into a single package three From 67044d0dc418f271c2728c876342ab3cb52e22c6 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 14:40:42 +0100 Subject: [PATCH 073/175] README updates --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ea665a9a4..063b0d3b5 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,15 @@ The main reference for the serial sparse BLAS is: - `--enable-cuda` to compile CUDA-enabled methods - `--with-cudadir=` to specify the CUDA toolkit location - `--with-cudacc=XX,YY,ZZ` to specify a list of target CCs (compute - capabilities). + capabilities). + CUDA versions have specific compatibility requirements; + for instance: + - CUDA version 11.8 supports GNU compilers up to version 11 + - CUDA version 12.3 supports GNU compilers up to version 12 + - CUDA versions 12.3 through 12.6 support GNU compilers up to version 13 + - CUDA versions 12.8 and 12.9 support GNU compilers up to version 14 + - CUDA version 13.0 supports GNU compilers up to version 15 + For further information please refer to the CUDA documentation. The configure script will generate a `Make.inc` file suitable for building the library. The script is capable of recognizing the needed libraries From 996bcabab1534b22249d2bddb1632208a29d776f Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 14:42:59 +0100 Subject: [PATCH 074/175] README jupdates --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 063b0d3b5..95c9b84b5 100644 --- a/README.md +++ b/README.md @@ -74,13 +74,12 @@ The main reference for the serial sparse BLAS is: - `--with-cudacc=XX,YY,ZZ` to specify a list of target CCs (compute capabilities). CUDA versions have specific compatibility requirements; - for instance: + for example: - CUDA version 11.8 supports GNU compilers up to version 11 - - CUDA version 12.3 supports GNU compilers up to version 12 - CUDA versions 12.3 through 12.6 support GNU compilers up to version 13 - CUDA versions 12.8 and 12.9 support GNU compilers up to version 14 - - CUDA version 13.0 supports GNU compilers up to version 15 - For further information please refer to the CUDA documentation. + - CUDA version 13.0 supports GNU compilers up to version 15 + For further information please refer to the CUDA documentation. The configure script will generate a `Make.inc` file suitable for building the library. The script is capable of recognizing the needed libraries From a519c4fa5cdb5da98a02f79a2cfb6859a6bc8954 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 17 Dec 2025 15:39:37 +0100 Subject: [PATCH 075/175] README updates --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 95c9b84b5..6a34a28d1 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,8 @@ The main reference for the serial sparse BLAS is: - CUDA versions 12.3 through 12.6 support GNU compilers up to version 13 - CUDA versions 12.8 and 12.9 support GNU compilers up to version 14 - CUDA version 13.0 supports GNU compilers up to version 15 - For further information please refer to the CUDA documentation. + For further information please refer to the CUDA documentation at + https://developer.nvidia.com/cuda/gpus The configure script will generate a `Make.inc` file suitable for building the library. The script is capable of recognizing the needed libraries From 506d673ad1d3e0434b14d5b700d2e790c3b50d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20Pep=C3=A8=20Sciarria?= Date: Fri, 19 Dec 2025 10:56:41 +0100 Subject: [PATCH 076/175] Update README.md's section for cmake building --- README.md | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a34a28d1..9c8f58673 100644 --- a/README.md +++ b/README.md @@ -169,8 +169,52 @@ which is asking for 4-bytes local indices, and 8-bytes global indices (this is the default). ## CMAKE -There is initial support for building with CMAKE. As of this time, it does not compile the CUDA part. +PSBLAS supports building with CMake (version 3.11 or higher). This method handles the automatic detection of compilers, MPI, and linear algebra libraries. +Standard Compilation (Without CUDA) +To perform a standard compilation, run: +### 1. Create and enter a dedicated build directory +``` +mkdir build +cd build +``` +### 2. Configure the project +``` +cmake .. +``` +### 3. Compile the libraries +``` +make +``` +If you wish to install PSBLAS in a specific location (similar to using the --prefix option in the legacy configure script), you must define the CMAKE_INSTALL_PREFIX variable. +To set a custom installation path, run the configuration command as follows: +#### Example: Installing PSBLAS to a specific folder in your home directory +``` +cmake -DCMAKE_INSTALL_PREFIX=/home/user/psblas_install +``` +### Compiling with CUDA Support +To enable GPU support via CUDA, you must set the PSB_BUILD_CUDA option to ON during the configuration step. +Important Compatibility Note: CUDA support is strictly incompatible with 8-byte local integers. If you manually set CMAKE_PSB_IPK to 8, CUDA support will be automatically disabled by the system. +To build with CUDA enabled: +``` +cmake -DPSB_BUILD_CUDA=ON .. +``` +The compilation then proceed as before through make +When this flag is active, CMake will search for the CUDAToolkit, enable the CUDA language, and define necessary macros such as PSB_HAVE_CUDA. + +### Customizing Integer Sizes +You can override the default integer sizes (4-byte local IPK and 8-byte global LPK) using the following variables: +Example: Using 8-byte global integers (default) and 4-byte local integers +``` +cmake -DCMAKE_PSB_IPK=4 -DCMAKE_PSB_LPK=8 .. +``` + +### 4. Installation +To install the libraries, header files, and Fortran modules to your system (or a custom path defined by -DCMAKE_INSTALL_PREFIX), run: +``` +make install +``` +The files will be organized into the lib, include, and modules subdirectories within the installation prefix, same as the configure build. ## MPI and Compilers The library has been successfully compiled and tested with multiple compilers and MPI implementations; this release has been successfully tested with: From c980ce8712ddb3578d799bf41174dafd72713f21 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 23 Dec 2025 11:43:42 +0100 Subject: [PATCH 077/175] Update list of compilers --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c8f58673..fbb55f5af 100644 --- a/README.md +++ b/README.md @@ -223,7 +223,7 @@ The files will be organized into the lib, include, and modules subdirectories wi combined with - - GNU compilers 10.5.0, 11.5.0, 12.5.0, 13.3.0, 14.3.0, 15.2.0 + - GNU compilers 10.5.0, 11.5.0, 12.5.0, 13.3.0, 14.2.0 14.3.0, 15.2.0 - LLVM 20.1.0 and 21.1.0 (except OpenMPI 4.1.8 which does not build with LLVM) Moreover, it has been tested with the Intel OneAPI toolchain versions 2025.2 and 2025.3 From 5eb4f55406042497ba6f0fcd763259d8806e2149 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 23 Dec 2025 11:48:37 +0100 Subject: [PATCH 078/175] README updates --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index fbb55f5af..fd7c63ca2 100644 --- a/README.md +++ b/README.md @@ -227,6 +227,9 @@ The files will be organized into the lib, include, and modules subdirectories wi - LLVM 20.1.0 and 21.1.0 (except OpenMPI 4.1.8 which does not build with LLVM) Moreover, it has been tested with the Intel OneAPI toolchain versions 2025.2 and 2025.3 + + As of this release, the NVIDIA compiler 25.7 fails to handle our code. + Cray, IBM and NAg compilers have been used for testing in the past, but not on this version. ## Documentation From 7e0347281e4dfee9cd8a59cad0df0efc305bcbc0 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 23 Dec 2025 15:07:22 +0100 Subject: [PATCH 079/175] Docs updates. --- docs/html/index.html | 2 +- docs/html/psblas.png | Bin 4604 -> 1125 bytes docs/html/userhtml.html | 2 +- docs/html/userhtml22x.png | Bin 1405 -> 1139 bytes docs/html/userhtml23x.png | Bin 1222 -> 1307 bytes docs/html/userhtml24x.png | Bin 985 -> 1164 bytes docs/html/userhtml33x.png | Bin 1743 -> 1766 bytes docs/html/userhtml6.html | 2 +- docs/html/userhtml7.html | 2 +- docs/html/userhtml8.html | 2 +- docs/html/userhtmlli1.html | 2 +- docs/html/userhtmlli2.html | 10 +- docs/html/userhtmlse1.html | 54 +- docs/html/userhtmlse11.html | 5 +- docs/html/userhtmlse2.html | 286 +- docs/html/userhtmlse3.html | 16 +- docs/html/userhtmlse4.html | 6 +- docs/html/userhtmlse6.html | 499 +- docs/html/userhtmlse7.html | 640 +-- docs/html/userhtmlse8.html | 45 +- docs/psblas-3.9.pdf | 9802 ++++++++++++++++++----------------- docs/src/datastruct.tex | 8 +- docs/src/error.tex | 16 +- docs/src/figures/psblas.eps | 80 +- docs/src/figures/psblas.fig | 25 +- docs/src/figures/psblas.pdf | Bin 7196 -> 7032 bytes docs/src/figures/psblas.png | Bin 4604 -> 1125 bytes docs/src/intro.tex | 93 +- docs/src/methods.tex | 4 +- docs/src/penv.tex | 9 +- docs/src/psbrout.tex | 6 +- docs/src/toolsrout.tex | 34 +- docs/src/userguide.tex | 2 +- docs/src/userhtml.tex | 2 +- 34 files changed, 5827 insertions(+), 5827 deletions(-) diff --git a/docs/html/index.html b/docs/html/index.html index aca213556..0fb6b60e3 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -23,7 +23,7 @@ class="pplb7t-">Alfredo Buttari
      Fabio Durastante
      Software version: 3.9.0
      June 9th, 2025 +class="newline" />December 23rd, 2025 diff --git a/docs/html/psblas.png b/docs/html/psblas.png index c904340d8ba923dde6ace3f3930af97886e8abac..33a35ba0126d3bd49413ffcd3037271d5e24de16 100644 GIT binary patch literal 1125 zcmV-r1e*JaP)*ImL7V2A zMO$TiX75_R&BA!iT}Qx7j1jBfhGRCv#t)ya=Rb&TO z!!waYH6I(VMFp^53F8)POs)Ik0H$xgNn7prw_iINNx-%&{)t9!z;js^523H?tbP~J zS;VmNc{HlSV-|1iM|&7^3C3*KdNgiplH4?#=vSePs6V@T9mv<+ybhU88LB?6@ts~j z@An3-k?Zed|=Ew;KRmd);4JXUq=fi5Cb727E< zE>5ycZbLEs#CC zHER*JBD)1LXo@^m^i2v_Zhoxbk6D~;_c@+BZNYz1YAiDXW(V?%P8;&int}4w!W>a} r#slT6fjK)+TM}0yy2d1~jN^X+%j|me&zW~<00000NkvXXu0mjfXS*LC literal 4604 zcmZ`-cQhPYw?~jWqlD2S6MaM(5~B_>%48UWh%!1+M;8$_gb|`fMi(S{XY>+Rk3k3` zB1i}sJ$f$@01^Urxt#cIl3>yRbe;?4^IbrNEpmAIEc2s)ee_SE8V7*VwH_<#_sGw| zVIWNkPPPQzgqa!`@{Y|lrTzb7Dh4_00CKYH;fZcO>es5s z9BlEjSPfw)04D&2P4C^vrA~~Z@dRP``9e@2O@3Mke=;iAtdPee`3mFees284}9kG#vvi|=o5d`@l; zE<8VQK6tvq7XhG=7SPKTbd4?!=&NJC=UgP4MQNgL>TGumfYtK9(l>OpU^xj%OB|FF zsd#2$Enm?_F2Pbn{rS~UZA7kz5Njmmk%$nE6^YA5z zbWHZ;@T2ADH+z`u9=dghxb>MDFHb{Z-3!#M+-2h=?uj%P!y@Y#9;6Lsg zQu%v|F=8E7JpyZuYWQq=mfJ@lv^^jjQPTU3gIgyzUfzjFxhm@(NXl(72EwdFM?aj+ zi$uCpJhBXdc)z$|XZc4)9amq2TjipkE$l_%_Z%DC;J{3kqO-RMCz#WF?__~1`6hh8 zX*a4Lm&9*hLGy9_(zV()sEXGoo3ocf#Z>TNr`_s)K?;z*6XV>qFncl1bqhlYdZ24o zZ5T)^gxS18SUN=oBuT{%3Vr5tq^F5AwOS^2>w?~Ayyuq{a>DvR7TBn*bJOiX224MM zKIXM0mK-()T3-%IRh`avpdD@BJk+Fue{0ODHT(vi1RGA4&!0f{OlBEwy0MMbs&h1q zD6(dRqNr8MdWHNK3)Q4?W9C z)rK}NRdp$k4@C7790tv@531J>-Nn)~!|;M2+mKaN-Aej<1|Abz4@B=4S*9 z-5zmKEH(O~*ukBwuoHk^M%_ag?H6JiK8r93)eyUVA^IJ?Ak9xc=VLy=@ueo90e)(< z5g70Zf_=*@f_k#4k)ypqPnZv zTh^;eeNb>%!tid)NM53bd*)Lb#In`OxQNN*Qd5~x9sPTb+qm*=mcOBL5bOVcywblG zLH$G%e1j&!d%I9$A>A~pD9>8C&$4Y9Xng2Bc0 z8cR(LVZ-Gjb3;h0!Vmk^5fOOSRx4+vpoeLmI$D{5?AD^qV zM`;_xO55*yDbt_k^7H1A^Othuc`z7z8kJnS`+biQ)p%>w>!$N*oKGO>1iB+8EN)|VRc zwnTG+2haZ4##xSdrl?`WQe&eysIC_sZom0V-)*~QMbC$i6X3mkf&R6dOTpD6U2*;E zI%fIg$&{{ezh==R?E4T%PIsvkI|R6R^mQWdHSdEmQ!jD)B6KR*kb=%g$m|v{*l|3a{%qJJ*!pcsiRHV}eq?=QWFa!RSMId`b3@Y# z3u3z(@e7je$@6#e+tsAQ11B+xAWqM$G~f^}d@RmjBLA(IpKjs3N7c(kRA1<@O@V9! zn(MMAvxpaty;$??587lEz-1~nS!4I@w-?h%A_sAC!8u(UW3m=DVB&UgS}8mNOv7{g z%AScQy&O=zJ4KPbp~Kh#UQ0Ja z7vSBklu+#R`@nY>K!pPO)yA3^3-3?s+`pMUxWuaai^JpBYGSN|LvS|hqE1Zc?}ax) z`u0KtO+GPDYLR=l-8#^cP)4ob?3FH-IJOLy#PyDGQcM8|^lcbE8(m6{w?C}j%Zo?u z1%}T&ejplxFm*!-M^nGhW^dI0YGnryq>P3TKUeo)Aee?@SFctUg8}29U4bgRTPG7(*&fXSIbTKO?GowXZDu^Eik`c%p7V zBhmx~trb_-qbpdq89e zuTUZz(=PbGB*aW)Gw?1$mVfjzIIGF*uS_QlaE2a4! zXuB@3+7aS9R#MypyCRUR_cLufGF-2U8Z zZ@KMUS1-MDDQRPD03y3e*8+DR&&?jjBCElA18**oTslZ!@x1iqrE3A>d&G$5;jrJ^ zYgbP!XiK8bz#FvLy$lW0S3os~$|uq6$&PO1j=(DGh2s9J{;537tyT>Wu|&WhSFaJP1YIpXj9QU@fAAIL(^$c_D?>88e^R4Q<^;jzKI9*8J^b| zjXeL@;yCf!08{q1e2f?I+6rlk5eAz^udKX&&_=BxR=K50o^~ssPTW^`8luh7{4t#U z$vt5Y+es-{cM5+UyO>}?H38E)G$vBYaI1NU=1w8w6Uf=8TX}gbxo<{I==iONw#sgN zah5@`f|n^8c6)IM9jCPt^VwDwi^dc z_j%NS^U>r|H$UMfc*)jkn5?Uml%&@eBSRza8|YvXoeN2pVK&OK|2kyYwwt+~_gLuVSLgx0 z2Hx)~F#nnYJ)Wv$ads!qp@r>+Fy$-XQo=YM+U7!v33*oV6DN#MqI+j9hc1>L0DGiu zW)kQWXsLOOS5qfW<{15gsDI5DUK!heczG=DV_;Lw;j5$E( z&x7V-V{6LVgt5%q#hGGf*7@zSNDpQFD6^%&aI4>CnHd;%)Q)tR!W_UO)3t@YiWyQt zN&>39f9$cWSmA|QMB2HQoj1c0N$w*%r)rmE$Hs-d}vYia}U6Q}$em5bUkI}2v3U3CoQvkb-O z>Lb%ZpJp7066o@D-;y7gKm@XbkVG~UrNS(vL~TX>7H3W`N^^JWs;nOuqIZL=JyEB7{so$7VY20GNxPYq4}a=J|zRXvduL)-RL{(=F_!wq7=-nwS1bg7x~ zug7|Ir@u@zz4rt-mC~`JSpN7$u)~u|>-3~)A4nQS;n0)9?3YnuGNalP#ArCA;(+QB zSVv&K*(aQ&K?P6Ei0&Dmh=}iCiu}8_7eP`r>Cfkeo%np6NPuRr+Ci0{>?Dt2#^V?D zN5N|`J8^V^bw{0I6^K|<+C>H>@|5~NCBWtIcb2j_}NE*d6l#n>t`(Y0%M$pj}SuFi?7bd&Ks6EEfy(3N(Y+Lm!#a9+fz&6%>B3yNA8A!{h(op`2n` z_`-qbuLuvl6f~Umab8Fdp9l8N4;+ym{uD5IIe$r*3{(Ot(fiEb>>sAuIA5F_1)r{g kxT?K}ElynOrUb8=u7Ubr%E=vS^o1z}MokA*iL?&=4?Q$~ga7~l diff --git a/docs/html/userhtml.html b/docs/html/userhtml.html index aca213556..0fb6b60e3 100644 --- a/docs/html/userhtml.html +++ b/docs/html/userhtml.html @@ -23,7 +23,7 @@ class="pplb7t-">Alfredo Buttari
      Fabio Durastante
      Software version: 3.9.0
      June 9th, 2025 +class="newline" />December 23rd, 2025 diff --git a/docs/html/userhtml22x.png b/docs/html/userhtml22x.png index f0a71dab616aebb7446efa74ba0881a09cc7a838..d2003c619bc726697337023123c608c29d889003 100644 GIT binary patch delta 1133 zcmV-z1d{vx3iAjdiBL{Q4GJ0x0000DNk~Le0001r0000L2nGNE0GYRT@{u7Ie*`5- zL_t(&1>IVUQ4~QC?Y0a6H3A6%Gy*XL)Cj-~ju0qAKqFAh0L=i&05VX>pshE)Is3-h z`Rv|ti?52h{dCXgbx%+CENW&l6{@;xW;eBVTIC)xTISdyGX<^fx5@#JrVI#B)rE-c zHMX-$`Tr6fTx^Vojxhku^< z`{JQA24K=Su=R}j6OkPe`BBmp5jey@GI$34lI}x#SL5P7c&Lp5d`=mMvVm@>>KUEj zW3MtJ%D$Ps@70|n#&WSv9>$IVXc@;8N4Yh#Cu0qVElEV4o7r7&8=Tmsf0TUv< z%UCX^@Zd3J3_xuh%N#{jcU1L4RX_Lvun{~*1PS0?Sgdj&qpH`~7o%PR=)X;#wE~f- z*#8ue2lHGY&*FSm_^EL*mWR37BRC2t3j$!&ka$L@Dk>U0zlhI7Fb ztzW4O0e!U71v=i%m`KzDe^w2cE5^6re2|ZwiwGjvb<$3jizz(J(jLrFLSji0&U_*X zvi=k-f0JG&qsLw@UdJSriIc_W>F-ctmCE`1n6Sk@{JV8s$F}L@$N;fO5KXhm_YfCR zehd#z7fv|~dxVIRtj;uNKx9ax2Ub`%Qn3CR=QKH#xR}BN_yM+R5BkE2f1^ZTy8%JiHsB1o?>HzE zUq*!tUcm8aP+aGLB(M9xjFAQ3nAQ%Q74h5yrSPfyBK`@7d;=deOI)mjhppLz_QP4& z0>m%>e0f|dUm1?Cy{^AzJ0Lq-QbLw82VSrBnw7{X-BKSsD?u)_7v1F$t^ zxtPiW^+S2Qe+_$xgawJY9}E)5^MS)iSo+IJED25Dm+l#|+a5kg zSt4fZl~NKRF)f>0fvqi8RR06Ua?!-YEbM_*>O(E>aS~aL7ChF+f44QScCMm}9-W6E z+sj3Xhm?Ds3~$vQ04f`JOBe|E!t8#W8jQMKM(-swL+x{}_q|*U@i13=1ma!7h6J?g zx!zb@84Lex=$hY+x+2g}TXTHg%0-QbIojhlwod{K^R#8e00000NkvXXu0mjf)!hw_ delta 1401 zcmV-<1%~?b2>l8niBL{Q4GJ0x0000DNk~Le0001k0000L2nGNE0A-?GIFTV2e+4f| zL_t(&1?`&gl@vt~#;be;fEWRq!Ko2=WN>H%Y6f>9_zdB^2v9OWA^^}R$AR-S%Ke)`ufNAZxOjB(8uuhe+9Ze#<%v_ zn}_ni9#r)O_sr}`&!z`&m$xGFBwE!W@b>!J%>FvWZx7J^&Fu4I$Hreo9-GTCc0?qxgAGt&-+R_bYJGe5*RUwyBvs z9{3Tj7SLSZ=Nqc}&^b)ce-HR|y3qvJ3SI3szyU0HWK7B65Botxo|>78$dwzG?hxQ~ z!FMymj%q<@);4H`8}}huNE+;h;6Z(R-%9Gi)i|6Hd6&L0@MCTyKZOvWD;6i!EJ2XFv09t-$30fF1Re@8hX_K->ZxQ3Vs zLKlfMJ0Fw4&TRAez3(BC@^gE($6k-IeIek^qELy`Tw`n(UQN9a_O1&oeCp3y*d;%b zZl)(9o{cex$%0233jw?E%j48M@;$ysXCO;wZHW#+TZ!uQ%BJFLyVwUG;gmqeFSeL9 zcvZX~ zga`FHAMbVq`*YbIV=fI)C~KVqZB>e9WuC-sDmX{P^3Ds8XRsE}!l1$$j}Z=_#iOhd zH$yIQE?7*&T7 zGCOwXe`oqT3F6U=1-5Rpn2TR8N6W2apBHG8#|VcWkF@^hvx((Np1%M0!<+~EsKoYa zZ!Thvu@?|sbap-edv6}GO`Na}x?t=(?j$G-n12Jirk;zCtVRQ1Iae?-nH_h<)G)guvk>74r>Dyyo8s`?18$1~^LHLf5h z?7QvA@c>N81?CcwbLZUCSl(ur8(U=UpNQZM`k5LpB5YTUN9_wfLIrsP6I zu0&)tmZv4;Rw`cwRlT4CeI7CaBiMm+?$eNQn~GWq)0(3`9)PL1U{a5?W4*qQAvRn} z?#98m7=%Xh*d*izRmJHLf9=@!eY_KqCTaIUB{A1W&h_9w_kgjOV-V=D_cf8P6g*Wy zU&y$kPRKVeMFde3Ta+Qn126*@aIWiEIjF*h%gD_ftVy^@+=ZV!g5W;~!1iH)iTa7( zH<$}#xbV6CP9?qeJa)CDbnXL!&CeGE89H7tMDWhRB*g>dxBk?1e>4{&g0$i=#SPbl z^Y_|tDY=^n7DR*a=!;0yiBup@q#K>QxegNJ42W#4Xqf{e=?@V(_STpMHa{Z;_&`L4 z(L!#3C=Y4}&J0Gmn6T({y2<42~a1ptm2ZHX3$S-T-i3M9^ETKf-P!S)tS1j@wN)&A1oI6EwO-FwlysdKsd=y985L0l$ymQyNqH@qi*|2qrBson| zPNhKXZNi}FXJbMjXMtnn$_N;nIskM)a*sutZE_KCTLyBUf5CD*08?;*=+#?m#G#^D zk-YZUa0$8pI+#ckQGh4Db#N{S{FOq7z!sN!v)^0v@{|sN2sWtHK!?5XO9wLpxeJWz zJ6nhx55OocXbU)LF5NJIQ=r6#OUT`FFax$lkc#aM4%GR^NFX}Bu^$0m!(r(NxQ_ve zZ!W?`!AOShf1k4eg-q71P?9+FN&;VyXh%NQ=Xe0da?wPu#4eITi4A9yn|4PHbOnR0 z|NJsVUm1bh#+^Uj?l}(()H&7%eWFKh>yx@N*{vFzn$y}@>q5S_@3p~TC=tZUGT1(& zJYf77F1UkWlC>-*Q|el3!<_vlkQ)J@DXHWHMZM`Lf2D{gM6vQV7b9cRDAsRVt~Bak z9>^hfi6|GWL0;AJz*<+*hI7g7%iH>44@wj(`S<*Ug#Tu3wWoel@#?oSHSfP}AIbyd&2ho)F&TYA zeZy_EYt)8Q%N>!cIVrC9d3tqmbRiMN4pXC0DD)=&9?AoBn2L)qR~ur(x#c!REr~^9 zUKF`}BlAt{{RcSa6vffbUt=5YOL?Gk;mgEiT=3w7#Cos|=al<5la{=pyNy^p00000 LNkvXXu0mjfW+7+4 delta 1216 zcmV;x1V8(m3dRW`iBL{Q4GJ0x0000DNk~Le0001h0000L2nGNE0FIUBJCPw6e|Skm zK~!i3<(iLi6*myZcQX_apaLktfeJ!8Afy6F2X+YzB^WA5oDNJn06H)o#L$75-_56o z-ktv5y%(_gW<2*sw~{`sc2~PPdkDdPG`Rc25W>gWx_e~)Z}f8Nl>@-vhH*a9j}Uw)-L2&f-yZHRf58RZ9fdK_ zpNp3rQ0ROYLio@jesmDtLkM@*OhjKZd(e9nZq;3iExbXKd(N^Ib}%8b<*ZDry(j#% z#;Cnlh=n6L$|Nh#yGq-5XJ(xJi}0TG<30VJ#J2RQwRA;~n(p+DV|B+l&ZG70MVhU= z8N0>3lmv1fzHOCCB`5*h)u7MMQGjF6Z0hEy*1TUNd*amtOC zYhw=DrAU6DJdUhvzEbjnD6g|Jm*#t2sU(#JN7sfgFbV}33fBai{_i$fC0G-{} zv6L8rEcstEdwwkM2XSmgC`wd33#FFIRVsjmcPH|{_R7RP~|>90 zHHI7rgQY0(d-VQfgXX}CiXV>#bjLX0v--e^4f;#%b8O`evfMTQR|AkDUl%NK2#N&M z)&~cdER9W+_l!Le@Ry=6|h3esgqo3v!+dnA#HXjM5>iiv7%|+>&y{yp@ag`faV=-p7 zgrra7l4wYG8fz*8Reshks5shI^Dc4M1=CdOM?5 zjjWT-y7S34gg4`{Pp6f%PpkbXQ8SY%psKrOcH1{rNuU47qlCYbJ|Uij4`ZRKGZEP< zkl$tBe;%rOq^i%RQnVJwD;t2Se;$a)3p4v3E32yes(KHr#5*&)!Z*l?`)(t+iSwar zgWe)?YGw~ZWmBliF+#xDkBGp+f9B*x1RLFXk2c8WV(0ix3smo7NTos-VZ=$!6gf2>y-IR|7HyiFhI ziGGO4VKB$mfO*NCm%1tVy6GXnGdv{@T+F!x-k~bTPkkn0M?`-41M7E$fK)<*zPW`1 zi0>ypRsx9OMHeNEm+(ZG??SaWCyQ~My04fB$9=IsfotfqB$2JoacltCkZ@ByDfyOA zAPX7}#!7h($1>$wf0)@Zk|Y}9+ny7%5il>=F|#iN766`$Jz$KfI9{j%I7#Djs1z1> zlOY`aTqXu$8#b=5OoMF4z2!i14@H_Vux-HUFW!8HGho^Ed3BCk0}yFWB=A7%!scU> zzBa90z=h{5_`RQgmPRSS0}LwVXi#Ti3AJgED;RuVxQl_je+otu8bb=zIOe(+48Q@m zkHx`#V}m<)`~*(-8-IxK8V1FU!tWH2B=&iTBL=ix#$r$6H*Tc|1w7k48l z`A&jT@tl8iK#mim3dh_R+|kTHX!{Avz-46`-Pb&n_um``iYCh&^kbiF$>d|DzL{)| zl1+^lx3M%sf4z={;)DDH`s{^$=^^ocp*`&5zbTJ#+P>5SH=><#8gjKb#_gt;tnC7Q zq5jPp6xX0_Tl|~EvRP|Iu-kI5LYA;wzRi9xw_-wPf<@IIo_BfPmA_DL7+gk_YA_7J9XfTHP*}2|F z9t5~&8F=$IHBRMpmxhOIt!oV_8~1bGx(CoxansyfC1DS$idzas7rl=af1vq3nAx8S z^0lCoT*q@mLEmUqs%!VI-wJnk`g}tRzWO8m}?m5|7e%5rKl5 zET|+~uu8_>ZV$9LxKzaB#lCPkQm!jOgSjX1czEYIxfbXp3GkWsH7R2X48V`>t=KMH z*_c@&?jnefk-aj5#YKQ8e^^aOzL2&D&b<Gf4H$GsCMRzVhzIF zs5Zsz7!$9a7yvD@JwTR1k~5;bIeZh5%M1ZJ4{jr1NkNPqBQv|sFigVCCaPW0h^+5( zbc1#RYsiL+=HBcYurS5pcZI2gtddt<9Bx>%assH>GrGB5L$z#l)j+9r1NY?Ke#AQb z6|B&8lfXhj)HWFAf6TE6Ze~iCw-Z=HHe_BNQwHTWFym zZs>Xl*F;M~jj(CtZf}gvdUCR%ctuZ*#qVWQV*EsM;WRgqdVh)+TERyV8S%2>Jq08Y zOT|3tXWg1e=V+#QIS%RFOP@?MlIiRKypj5%UcsL6Lw$l;f2FtoTG==sd=@+?1Jd$j zAxRfF^W=&4l}ytyk2Fi?!~(c02LchYuRCv{eI7@_xk=f0zze0eoE6=ptKd$7-QT<` zyrjjJg?5>C)3VhxJiYU&X|w|H<7ha#jP~{0|B{XFwyAGP>nVCIx0`)HJwm_E%>16( z3RD#_^dd?|D3UlRXdo~xh9~+_V#$o~wxk^3AJ{5mp`lV?{Qv*}07*qoM6N<$g5;OS A=Kufz diff --git a/docs/html/userhtml33x.png b/docs/html/userhtml33x.png index 6e996fedef366ac7e9a510549cd70503de6e7626..bb148bb5f81c3ad61194c4dca95518d4e2252250 100644 GIT binary patch delta 1764 zcmV zYyL8hWQZ}wpSzx`4Ku@8pT`*QwcpKr&FlwVUvj;DtvSLdzO?123Cb2T`)FowV~qdQ zeD|@jI&wdL(d~;6LZ>5ZtBCtsSw$K1xBg+mmlz}4O}hfheAV+uiEhUjCv}j0p#b<* zf4`->iGaS)+mn6YZ)VuTf1McPt9{>58>=ICfGn&GLDqW^LMZO%s{VAtaHDMC*}b_? z7ms6%eFpjKKma-##3s-iY~o`GVHPHX^QmNdc0g9fCipA{O^pnVRE>vn6I8!Y`!(0j z2t-{dDIdOXL3Q1QA~OqHGxIquE<%}pXgq?E*M^h`tTA#NlLTmv!Iy3SF zw#j&pXO_3Y1oC`yWOeg6h`^#hC0Z(CQoleM7uzhE5YXW_Atb$^qeN3%Ai({uYdGG) zbr(*iz{z-*eD7!k!4i^__5kPjOYh@(Xr(iZqd|d$zJs%zPDh@|HqjgUm>mQaJ1aED z%*ZM!)A)6Vi~|MGoT*axDckIHu6Up>tN~<9*-ilt2X5ENe^A5w3?|112WR9RFcdhP zs&Zbt2|ytv=5REIC3f)Mw}XTBmX zM$V%iTiJjTe*yd2AGG!k*B{R145)-!w#gWStfYterTLm!snIx^`JsnezE6gLB0XT8p{_&!-k!%Uv6=7`nw9HlYB*!JDGpWvF7CVkI7ge>>5|{G>rs85Hvi1lt2ybhbzLQPCON$hf;7tM_tB9 zJqqT`$ke$$ZX534tPyO2|1AFA1b^Uq>`A`6|U*+TK z{&njby5M>LpvPI{(0u4f7xklHgdEK2Y1ea8Ue_F%1NuR?Te{IR1Wwl>_Q)X{?oDNz zf9NEQv5)-nft__)Qy%FJB_*Aj6gCQ+{L)cHl(13HDB5_f2#6FV3PZDFBQmSmMGZT& zce)}2zqEp`j_n$sGWu*Yhu8^C*1eB}R%~{4Vn`nK9G-^|eu5R3y4FRAPA6y6F~5yH zzjlXD3iIQOE2aU=iMqYC4RSUZvdtDqe-`NN5Kux*Rz{7K2PYPXfCs(7~g7;Bq)Zt?atR-Sy#I(Mp( zcfm@n=Yw?pFxy>N(SowrO}jsHDwxcX0kqpW{E8JTro+Fg7P>)J17;Nf0000=yWjrN*%o6A8%_sib~ncO>2xHTAE&INujW_RhP7a3 zPeKUy^7%1dGka)emuB`nzjup)e@@WV$zgNo0^|T!X7)Etz>zSs z3!XXjan>9{_%_D)rZe^|gm5>6z?uf1vlc`==#RBFMU3$s6QJ9s6RiPK?(M6rgAl^o z5CS#Hy_$~XER2h_abxev0Wal%5K8sAAta~$(D(ch!nx!i9Ur}pCC7#ke?Dl950{!( zbDk|V-xBlOL8=YC_(6AYi0j@_Aw1Rnz38H-`Ag+<;8To|&*$Lxk1@u_W(KJ+e+{J4 z5I`SN8h%r2YemY>TKt|48v~u8yT`}OV`l6NB>Cc)&$ocV8XFE_W;nr1ML(SGr^8Vx zZNnf)Wibla{`=CnV_{}je<7r(Wqr?}EQm3FUAfOQFuePHW7dM1Q4;(WLSSt~>DLh1 zQtMGk^<9kdpQ&?-u+i)9Q$O1ZyBeBEpc-)3I8j|gZMeI3ivaslYw=Z#kgE62#n2e$ z;@xE#)zG|>gR7l2$NZU29P-lJH7mG|F(T6- zL}nP;wV8SJBbx2%e`q=QXU6D(IEdGQOM<=Xt)DX@`VoTi^-3<*ye0@3`JSL_y7eWr zvQg}PjZCG9JjtQmX-Rv`j3|>Lk6(AlI1rwivio}EC@5|9CXh3A6${i@$e5y@hz_TP z#q;%%Dn4MLA^@;PgdQRiPhn}YIr#uGiq$eNWee~86_SwFe}heQ8+dMu4Qvz=b{#E- zR`Pg+&hZ|@>}-AxoPAV^f}#7uOQ43x*fDpOwSj!B&5=qG|3zI{qMbW1&H>hNkfBtc z$jp9rJFyT!?%+F!p#D%=J{FHEHnRr>2HpX`mkl^vk2siTMkUN-|f1fKkG)7uvEH=!{_&!v#AtcWr(sd0f$6LC`olU(7ph=Qk! zquuEkyFsjxau0#p|8+h{jWnFRxQ`;LT>iO1cJs7LG9nV*yBF;*!z?x`3=tywC^@X_ zagHwcZ1U_mbXISb8bE%(#+;LoHA5z$!k9ITVoVVce{0*xiQz+J5R{qGEPK|O$RmqK z>?Hw-IH8n4jZLkZqa?#3@FSO9X9f_7^xR7(4Qv$MtwzLi%d>lJC9u)ykV7_64vZtQ zIvq+KbL?%%v;vID``(FPdGnMHS>%yFp50NjBcFi2TA~+zYBMC_KGZn-;p6T^HuRdw?=?u5NqsLj~5UHS-{Mqc)Zl73-)hdBhhjzHv#76aO^pfV8sss7LWS!0_kMxF;l1?Wb{p2K> ze_q|7fW10LtmCyLfH6wx49$=|hE`LI8n=6

      -

      1In our prototype implementation we provide sample scatter/gather routines.

      diff --git a/docs/html/userhtml7.html b/docs/html/userhtml7.html index aed722b35..e0a1208fc 100644 --- a/docs/html/userhtml7.html +++ b/docs/html/userhtml7.html @@ -11,7 +11,7 @@
      -

      2This is the normal situation when the pattern of the sparse matrix is symmetric, which is equivalent to diff --git a/docs/html/userhtml8.html b/docs/html/userhtml8.html index 61ffca5a8..45b2dc72d 100644 --- a/docs/html/userhtml8.html +++ b/docs/html/userhtml8.html @@ -11,7 +11,7 @@

      -

      3The subroutine style psb_gefree — Frees a
        6.16 psb_gelp — Applies a left permutation to a dense matrix
        6.17 psb_glob_to_loc — Global to local indices convertion +href="userhtmlse6.html#x12-950006.17" id="QQ2-12-124">psb_glob_to_loc — Global to local indices conversion

        6.18 psb_loc_to_glob — Local to global indices conversion
        6.19

      The software architecture allows us to offer support for many alternatives in the implementation, including usage of heterogeneous platforms, and computations -performed on GPUs throuh CUDA. There is support for GPU computations through -OpenACC, but it is at this time a highly experimental version; we plan to +performed on GPUs throuh CUDA. There is also support for GPU computations +through OpenACC, but it is at this time a highly experimental version; we plan to also look at using accelerators through OpenMP as support from compilers improves.

      The project is lead by Salvatore Filippone; a number of people have been @@ -58,7 +58,7 @@ chronological order:
      Dario Pascucci

      -
    5. -

      +

      Communication routines

      -

      handling halo and overlap communications; +

      handling halo and overlap communications;

      -

      +

      Data management and auxiliary routines

      -

      including: +

      including:

      • -

        Parallel environment management +

        Parallel environment management

      • -

        Communication descriptors allocation; +

        Communication descriptors allocation;

      • -

        Dense and sparse matrix allocation; +

        Dense and sparse matrix allocation;

      • -

        Dense and sparse matrix build and update; +

        Dense and sparse matrix build and update;

      • -

        Sparse matrix and data distribution preprocessing.

      +

      Sparse matrix and data distribution preprocessing.

      -

      +

      Preconditioner routines

      -

      +

      -

      +

      Iterative methods

      -

      a subset of classical and Krylov subspace iterative methods

      -

      The following naming scheme has been adopted for all the symbols internally defined +

      a subset of classical and Krylov subspace iterative methods +

      The following naming scheme has been adopted for all the symbols internally defined in the PSBLAS software package:

      • -

        all symbols (i.e. subroutine names, data types...) are prefixed by

        all symbols (i.e. subroutine names, data types...) are prefixed by psb_

      • -

        all data type names are suffixed by

        all data type names are suffixed by _type

      • -

        all constants are suffixed by

        all constants are suffixed by _

      • -

        all top-level subroutine names follow the rule

        all top-level subroutine names follow the rule psb_xxname where xx can be either:

        • -

          ge: the routine is related to dense data,

        • -

          sp: the routine is related to sparse data,

        • -

          cd: the routine is related to communication descriptor (see 3).

        -

        For example the

        For example the psb_geins, psb_spins and psb_cdins perform the same @@ -339,33 +341,33 @@ class="cmtt-10">psb_cdins perform the same href="userhtmlse6.html#x12-780006">6) on dense matrices, sparse matrices and communication descriptors respectively. Interface overloading allows the usage of the same subroutine names for both real and complex data.

      -

      In the description of the subroutines, arguments or argument entries are classified +

      In the description of the subroutines, arguments or argument entries are classified as:

      -

      +

      global

      -

      For input arguments, the value must be the same on all processes +

      For input arguments, the value must be the same on all processes participating in the subroutine call; for output arguments the value is guaranteed to be the same.

      -

      +

      local

      -

      Each process has its own value(s) independently.

      -

      To finish our general description, we define a version string with the constant +

      Each process has its own value(s) independently. +

      To finish our general description, we define a version string with the constant

      psb_version_string_
      -

      whose current value is

      whose current value is 3.9.0 -

      +

      2.3 Application structure

      -

      The main underlying principle of the PSBLAS library is that the library objects are +

      The main underlying principle of the PSBLAS library is that the library objects are created and exist with reference to a discretized space to which there corresponds an index space and a matrix sparsity pattern. As an example, consider a cell-centered finite-volume discretization of the Navier-Stokes equations on a @@ -375,13 +377,13 @@ class="zplmr7m-">n is isomorphic to the set of cell centers, whereas the pattern of the associated linear system matrix is isomorphic to the adjacency graph imposed on the discretization mesh by the discretization stencil. -

      Thus the first order of business is to establish an index space, and this is done +

      Thus the first order of business is to establish an index space, and this is done with a call to psb_cdall in which we specify the size of the index space n and the allocation of the elements of the index space to the various processes making up the MPI (virtual) parallel machine. -

      The index space is partitioned among processes, and this creates a mapping from +

      The index space is partitioned among processes, and this creates a mapping from the “global” numbering 1n to a numbering “local” to each process; each process i, each element of which corresponds t element of 1n. The user does not set explicitly this mapping; when the application -needs to indicate to which element of the index space a certain item is related, -such as the row and column index of a matrix coefficient, it does so in the +needs to indicate to which element of the index space a certain item is related, such +as the row and column index of a matrix coefficient, it usually does so in the “global” numbering, and the library will translate into the appropriate “local” numbering. -

      For a given index space 1

      For a given index space 1n there are many possible associated topologies, i.e. many different discretization stencils; thus the description of the index space is not @@ -423,51 +425,51 @@ class="zplmr7m-">ncol class="zplmr7m-x-x-60">i, denoting elements of the index space that are not assigned to process i; however the -variables associated with them are needed to complete computations associated with +class="zplmr7m-">i; the variables +associated with them are needed to complete computations associated with the sparse matrix A, and thus they have to be fetched from (neighbouring) processes. The descriptor of the index space is built exactly for the purpose of properly sequencing the communication steps required to achieve this objective. -

      A simple application structure will walk through the index space allocation, +

      A simple application structure will walk through the index space allocation, matrix/vector creation and linear system solution as follows:

      1. -

        Initialize parallel environment with

        Initialize parallel environment with psb_init;

      2. -

        Initialize index space with

        Initialize index space with psb_cdall;

      3. -

        Allocate sparse matrix and dense vectors with

        Allocate sparse matrix and dense vectors with psb_spall and psb_geall;

      4. -

        Loop over all local rows, generate matrix and vector entries, and insert +

        Loop over all local rows, generate matrix and vector entries, and insert them with psb_spins and psb_geins

      5. -

        Assemble the various entities: +

        Assemble the various entities:

        1. -

          psb_cdasb,

        2. -

          psb_spasb, @@ -475,12 +477,12 @@ class="cmtt-10">psb_spasb,

        3. -

          psb_geasb;

      6. -

        Choose the preconditioner to be used with

        Choose the preconditioner to be used with prec%init and prec%set, and build it with 3

      7. -

        Call one of the iterative drivers with the method of choice, e.g.

        Call one of the iterative drivers with the method of choice, e.g. psb_krylov with bicgstab.

      -

      This is the structure of the sample programs in the directory

      This is the structure of the sample programs in the directory test/pargen/. -

      For a simulation in which the same discretization mesh is used over multiple +

      For a simulation in which the same discretization mesh is used over multiple time steps, the following structure may be more appropriate:

      1. -

        Initialize parallel environment with

        Initialize parallel environment with psb_init

      2. -

        Initialize index space with

        Initialize index space with psb_cdall

      3. -

        Loop over the topology of the discretization mesh and build the +

        Loop over the topology of the discretization mesh and build the descriptor with psb_cdins;

      4. -

        Assemble the descriptor with

        Assemble the descriptor with psb_cdasb;

      5. -

        Allocate the sparse matrices and dense vectors with;

        Allocate the sparse matrices and dense vectors with; psb_spall and psb_geall; @@ -532,34 +534,34 @@ class="cmtt-10">psb_geall;

      6. -

        Loop over the time steps: +

        Loop over the time steps:

        1. -

          If after first time step, reinitialize the sparse matrix with

          If after first time step, reinitialize the sparse matrix with psb_sprn; also zero out the dense vectors;

        2. -

          Loop over the mesh, generate the coefficients and insert/update +

          Loop over the mesh, generate the coefficients and insert/update them with psb_spins and psb_geins;

        3. -

          Assemble with

          Assemble with psb_spasb and psb_geasb;

        4. -

          +

        5. -

          Choose the preconditioner to be used with

          Choose the preconditioner to be used with prec%init and prec%set, and build it with prec%build;

        6. -

          Call one of the iterative drivers with the method of choice, e.g. +

          Call one of the iterative drivers with the method of choice, e.g. psb_krylov with bicgstab.

      -

      The insertion routines will be called as many times as needed; they only need to be +

      The insertion routines will be called as many times as needed; they only need to be called on the data that is actually allocated to the current process, i.e. each process generates its own data. -

      In principle there is no specific order in the calls to

      In principle there is no specific order in the calls to psb_spins, nor is there a requirement to build a matrix row in its entirety before calling the routine; this allows the application programmer to walk through the discretization mesh element by element, generating the main part of a given matrix row but also contributions to the rows corresponding to neighbouring elements. -

      From a functional point of view it is even possible to execute one call for each +

      From a functional point of view it is even possible to execute one call for each nonzero coefficient; however this would have a substantial computational overhead. It is therefore advisable to pack a certain amount of data into each call to the insertion routine, say touching on a few tens of rows; the best @@ -595,23 +597,23 @@ process and pass it in a single call to psb_spins; this, however, would entail a doubling of memory occupation, and thus would be almost always far from optimal. -

      +

      2.3.1 User-defined index mappings
      -

      PSBLAS supports user-defined global to local index mappings, subject to the +

      PSBLAS supports user-defined global to local index mappings, subject to the constraints outlined in sec. 2.3:

      1. -

        The set of indices owned locally must be mapped to the set 1

        The set of indices owned locally must be mapped to the set 1nrowi;

      2. -

        The set of halo points must be mapped to the set

        The set of halo points must be mapped to the set nrowi + 1ncol i;

      -

      but otherwise the mapping is arbitrary. The user application is responsible to ensure +

      but otherwise the mapping is arbitrary. The user application is responsible to ensure consistency of this mapping; some errors may be caught by the library, but this is not guaranteed. The application structure to support this usage is as follows:

      1. -

        Initialize index +

        Initialize index space with psb_cdall(ictx,desc,info,vl=vl,lidx=lidx) passing the vectors lidx(:) containing the corresponding local

      2. -

        Add the halo points

        Add the halo points ja(:) and their associated local indices lidx(:) with a(some) call(s) to psb_cdins(nz,ja,desc,info,lidx=lidx);

      3. -

        Assemble the descriptor with

        Assemble the descriptor with psb_cdasb;

      4. psb_cdasb; -

        Build the sparse matrices and vectors, optionally making use in +

        Build the sparse matrices and vectors, optionally making use in psb_spins and psb_geins of the local argument specifying that the class="cmtt-10">ia, ja and irw, respectively, are already local indices.

      -

      +

      2.4 Programming model

      -

      The PSBLAS librarary is based on the Single Program Multiple Data (SPMD) +

      The PSBLAS librarary is based on the Single Program Multiple Data (SPMD) programming model: each process participating in the computation performs the same actions on a chunk of data. Parallelism is thus data-driven. -

      Because of this structure, many subroutines coordinate their action across the +

      Because of this structure, many subroutines coordinate their action across the various processes, thus providing an implicit synchronization point, and therefore must be called simultaneously by all processes participating in the computation. This is certainly true for the data allocation and assembly routines, for all the computational routines and for some of the tools routines. -

      However there are many cases where no synchronization, and indeed no -communication among processes, is implied; for instance, all the routines in sec. 3 -are only acting on the local data structures, and thus may be called independently. -The most important case is that of the coefficient insertion routines: since the number -of coefficients in the sparse and dense matrices varies among the processors, and -since the user is free to choose an arbitrary order in builiding the matrix entries, -these routines cannot imply a synchronization. -

      Throughout this user’s guide each subroutine will be clearly indicated +

      However there are cases where no synchronization, and indeed no communication +among processes, is implied; for instance, all the routines in sec. 3 are only acting on +the local data structures, and thus may be called independently. The most important +case is that of the coefficient insertion routines: since the number of coefficients in the +sparse and dense matrices varies among the processors, and since the user is free to +choose an arbitrary order in builiding the matrix entries, these routines cannot imply +a synchronization. +

      Throughout this user’s guide each subroutine will be clearly indicated as:

      -

      +

      Synchronous:

      -

      must be called simultaneously by all the processes in the relevant +

      must be called simultaneously by all the processes in the relevant communication context;

      -

      +

      Asynchronous:

      -

      may be called in a totally independent manner.

      +

      may be called in a totally independent manner. diff --git a/docs/html/userhtmlse3.html b/docs/html/userhtmlse3.html index 3c6a86a70..3559a29b2 100644 --- a/docs/html/userhtmlse3.html +++ b/docs/html/userhtmlse3.html @@ -60,8 +60,8 @@ class="pplb7t-">psb_epk_

      -

      Kind parameter for 8-bytes integer data, as is always used by the sizeof - methods; +

      Kind parameter for 8-bytes integer data, as is always returned by the + sizeof methods;

      3.1 Descriptor data structure

      -

      All the general matrix informations and elements to be exchanged among processes -are stored within a data structure of the type

      All the general matrix information and the identification of elements to be +exchanged among processes are stored within a data structure of the type +psb_desc_type. Every structure of this -type is associated with a discretization pattern and enables data communications -and other operations that are necessary for implementing the various algorithms of -interest to us. +class="cmtt-10">_type. Every structure of this type is associated with a discretization +pattern and enables data communications and other operations that are necessary +for implementing the various algorithms of interest to us.

      The data structure itself psb_desc_type can be treated as an opaque object handled via the tools routines of Sec. 6 or the query routines detailed below; diff --git a/docs/html/userhtmlse4.html b/docs/html/userhtmlse4.html index 6f8120285..27dbb623e 100644 --- a/docs/html/userhtmlse4.html +++ b/docs/html/userhtmlse4.html @@ -3129,7 +3129,7 @@ class="zplmr7m-">x and class="zplmr7m-">y

      dot ← x(i)y(i).
+src=

      psb_gemlt(x, y, desc_a, info) @@ -3314,7 +3314,7 @@ class="zplmr7m-">x and class="zplmr7m-">y

      / ←  x(i)/y(i).
+src=

      psb_gediv(x, y, desc_a, info, [flag) @@ -3516,7 +3516,7 @@ class="zplmr7m-">x and puts it into class="zplmr7m-">y

      / ←  1/x(i).
+src=

      psb_geinv(x, y, desc_a, info, [flag) diff --git a/docs/html/userhtmlse6.html b/docs/html/userhtmlse6.html index c26876b8f..f81690a72 100644 --- a/docs/html/userhtmlse6.html +++ b/docs/html/userhtmlse6.html @@ -1286,9 +1286,9 @@ class="pplb7t-x-x-120">Notes class="enumerate" id="x12-85006x3">

      Providing a good estimate for the number of nonzeroes nnz in the - assembled matrix may substantially improve performance in the matrix - build phase, as it will reduce or eliminate the need for (potentially - multiple) data reallocations; + assembled matrix may improve performance in the matrix build phase, + as it will reduce or eliminate the need for (potentially multiple) data + reallocations;

    6. @@ -1621,7 +1621,7 @@ class="zplmr7y-">- 1 should be one of the local indices, but are
    7. Coefficients from different rows may also be mixed up freely in a single - call, according to the application needs; + call (in COO format), according to the application needs;

    8. @@ -2673,7 +2673,7 @@ class="newline" />An integer value; 0 means no error has been detected.6.17 psb_glob_to_loc — Global to local indices convertion + id="x12-950006.17">psb_glob_to_loc — Global to local indices conversion @@ -2707,7 +2707,8 @@ class="newline" />Type: required
      Intent: in, inout.
      Specified as: a rank one integer array.
      Specified as: a rank one integer array of global indices, i.e. psb_lpk_.

      @@ -2790,8 +2791,11 @@ class="description">

      If y is present, then y is overwritten with the translated integer indices, - and x is left unchanged. Scope: x is left unchanged; since y contains local indices it should use + psb_ipk_. Scope: global
      Type: optional
      out.
      An integer value; 0 means no error has been detected.

      Notes -

        -
      1. +
          +
        1. If an input index is out of range, then the corresponding output index is set to a negative number;

        2. @@ -2858,7 +2862,10 @@ class="description"> x
      -

      An integer vector of indices to be converted.

      An integer vector of indices to be converted; if y is present, they are local + indices, i.e. psb_ipk_
      Scope: local
      Type: in, inout.
      Specified as: a rank one integer array.

      -

      +

      desc_a

      -

      the communication descriptor.

      the communication descriptor.
      Scope:local.
      Type:psb_desc_type.

      -

      +

      iact

      -

      specifies action to be taken in case of range errors. Scope:

      specifies action to be taken in case of range errors. Scope: global
      Type: optional
      Ignore, Warning or Abort, default Ignore.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      x

      -

      If y is not present, then x is overwritten with the translated integer - indices. Scope:

      If y is not present, then x is overwritten with the translated integer global + indices, i.e. psb_lpk_ Scope: global
      Type: required
      Intent: inout.
      Specified as: a rank one integer array.

      -

      +

      y

      -

      If y is not present, then y is overwritten with the translated integer - indices, and

      If y not present, then y is overwritten with the translated global indices + i.e. psb_lpk_, and x is left unchanged. Scope: global
      Type: Intent: out.
      Specified as: a rank one integer array.

      -

      +

      info

      -

      Error code.

      Error code.
      Scope: local
      Type: An integer value; 0 means no error has been detected.

      call psb_is_owned(x, desc_a) -

      -

      +

      +

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      x

      -

      Integer index.

      Integer index.
      Scope: local
      Type: in.
      Specified as: a scalar integer.

      -

      +

      desc_a

      -

      the communication descriptor.

      the communication descriptor.
      Scope:local.
      Type:psb_desc_type.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      Function value

      -

      A logical mask which is true if

      A logical mask which is true if x is owned by the current process Scope: local
      required
      Intent: out.

      -

      Notes

      1. -

        This routine returns a

        This routine returns a .true. value for an index that is strictly owned by the current process, excluding the halo indices

      @@ -3055,26 +3064,26 @@ class="cmtt-10">.true. value for an index that is strictly
       call psb_owned_index(y, x, desc_a, info)
       
      -

      -

      +

      +

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      x

      -

      Integer indices.

      Integer indices.
      Scope: local
      Type: in, inout.
      Specified as: a scalar or a rank one integer array.

      -

      +

      desc_a

      -

      the communication descriptor.

      the communication descriptor.
      Scope:local.
      Type:psb_desc_type.

      -

      +

      iact

      -

      specifies action to be taken in case of range errors. Scope:

      specifies action to be taken in case of range errors. Scope: global
      Type: optional
      Ignore, Warning or Abort, default Ignore.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      y

      -

      A logical mask which is true for all corresponding entries of

      A logical mask which is true for all corresponding entries of x that are owned by the current process Scope: local
      Intent: out.
      Specified as: a scalar or rank one logical array.

      -

      +

      info

      -

      Error code.

      Error code.
      Scope: local
      Type: required
      Intent: out.
      An integer value; 0 means no error has been detected.

      -

      Notes

      1. -

        This routine returns a

        This routine returns a .true. value for those indices that are strictly owned by the current process, excluding the halo indices

      @@ -3173,26 +3182,26 @@ class="cmtt-10">.true. value for those indices that ar
       call psb_is_local(x, desc_a)
       
      -

      -

      +

      +

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      x

      -

      Integer index.

      Integer index.
      Scope: local
      Type: in.
      Specified as: a scalar integer.

      -

      +

      desc_a

      -

      the communication descriptor.

      the communication descriptor.
      Scope:local.
      Type:psb_desc_type.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      Function value

      -

      A logical mask which is true if

      A logical mask which is true if x is local to the current process Scope: local
      required
      Intent: out.

      -

      Notes

      1. -

        This routine returns a

        This routine returns a .true. value for an index that is local to the current process, including the halo indices

      @@ -3262,26 +3271,26 @@ class="cmtt-10">.true. value for an index that is local to
       call psb_local_index(y, x, desc_a, info)
       
      -

      -

      +

      +

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      x

      -

      Integer indices.

      Integer indices.
      Scope: local
      Type: in, inout.
      Specified as: a scalar or a rank one integer array.

      -

      +

      desc_a

      -

      the communication descriptor.

      the communication descriptor.
      Scope:local.
      Type:psb_desc_type.

      -

      +

      iact

      -

      specifies action to be taken in case of range errors. Scope:

      specifies action to be taken in case of range errors. Scope: global
      Type: optional
      Ignore, Warning or Abort, default Ignore.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      y

      -

      A logical mask which is true for all corresponding entries of

      A logical mask which is true for all corresponding entries of x that are local to the current process Scope: local
      Intent: out.
      Specified as: a scalar or rank one logical array.

      -

      +

      info

      -

      Error code.

      Error code.
      Scope: local
      Type: required
      Intent: out.
      An integer value; 0 means no error has been detected.

      -

      Notes

      1. -

        This routine returns a

        This routine returns a .true. value for those indices that are local to the current process, including the halo indices.

      @@ -3380,26 +3389,26 @@ class="cmtt-10">.true. value for those indices that are loc
       call psb_get_boundary(bndel, desc, info)
       
      -

      -

      +

      +

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      desc

      -

      the communication descriptor.

      the communication descriptor.
      Scope:local.
      Type:psb_desc_type.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      bndel

      -

      The list of boundary elements on the calling process, in local numbering.

      The list of boundary elements on the calling process, in local numbering.
      Scope: local
      Type: Specified as: a rank one array with the ALLOCATABLE attribute, integer.

      -

      +

      info

      -

      Error code.

      Error code.
      Scope: local
      Type: required
      Intent: out.
      An integer value; 0 means no error has been detected.

      -

      Notes

      1. -

        If there are no boundary elements (i.e., if the local part of the connectivity +

        If there are no boundary elements (i.e., if the local part of the connectivity graph is self-contained) the output vector is set to the “not allocated” state.

      2. -

        Otherwise the size of

        Otherwise the size of bndel will be exactly equal to the number of boundary elements.

      @@ -3474,26 +3483,26 @@ class="cmtt-10">bndel will be exactly equal to the nu
       call psb_get_overlap(ovrel, desc, info)
       
      -

      -

      +

      +

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      desc

      -

      the communication descriptor.

      the communication descriptor.
      Scope:local.
      Type:psb_desc_type.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      ovrel

      -

      The list of overlap elements on the calling process, in local numbering.

      The list of overlap elements on the calling process, in local numbering.
      Scope: local
      Type: Specified as: a rank one array with the ALLOCATABLE attribute, integer.

      -

      +

      info

      -

      Error code.

      Error code.
      Scope: local
      Type: required
      Intent: out.
      An integer value; 0 means no error has been detected.

      -

      Notes

      1. -

        If there are no overlap elements the output vector is set to the “not +

        If there are no overlap elements the output vector is set to the “not allocated” state.

      2. -

        Otherwise the size of

        Otherwise the size of ovrel will be exactly equal to the number of overlap elements.

      @@ -3568,26 +3577,26 @@ class="cmtt-10">ovrel will be exactly equal to the number o call psb_sp_getrow(row, a, nz, ia, ja, val, info, &               & append, nzin, lrw) -

      -

      +

      +

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      row

      -

      The (first) row to be extracted.

      The (first) row to be extracted.
      Scope:local
      Type:in.
      Specified as: an integer > 0.

      -

      +

      a

      -

      the matrix from which to get rows.

      the matrix from which to get rows.
      Scope:local
      Type:psb_Tspmat_type.

      -

      +

      append

      -

      Whether to append or overwrite existing output.

      Whether to append or overwrite existing output.
      Scope:local
      Type:Specified as: a logical value default: false (overwrite).

      -

      +

      nzin

      -

      Input size to be appended to.

      Input size to be appended to.
      Scope:local
      Type:Specified as: an integer > 0. When append is true, specifies how many entries in the output vectors are already filled.

      -

      +

      lrw

      -

      The last row to be extracted.

      The last row to be extracted.
      Scope:local
      Type:Specified as: an integer > 0, default: row.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      nz

      -

      the number of elements returned by this call.

      the number of elements returned by this call.
      Scope:local.
      Type:Intent: out.
      Returned as: an integer scalar.

      -

      +

      ia

      -

      the row indices.

      the row indices.
      Scope:local.
      Type:inout.
      Specified as: an integer array with the ALLOCATABLE attribute.

      -

      +

      ja

      -

      the column indices of the elements to be inserted.

      the column indices of the elements to be inserted.
      Scope:local.
      Type:inout.
      Specified as: an integer array with the ALLOCATABLE attribute.

      -

      +

      val

      -

      the elements to be inserted.

      the elements to be inserted.
      Scope:local.
      Type:inout.
      Specified as: a real array with the ALLOCATABLE attribute.

      -

      +

      info

      -

      Error code.

      Error code.
      Scope: local
      Type: required
      Intent: out.
      An integer value; 0 means no error has been detected.

      -

      Notes

      1. -

        The output

        The output nz is always the size of the output generated by the current call; thus, if append=.true., the total output size will be nzin+1:nzin+nz of the

      2. -

        When

        When append=.true. the output arrays are reallocated as necessary;

      3. -

        The row and column indices are returned in the local numbering +

        The row and column indices are returned in the local numbering scheme; if the global numbering is desired, the user may employ the psb_loc_to_glob routine on the output.

      @@ -3770,7 +3779,7 @@ class="cmtt-10">psb_loc_to_glob routine on the output.
    9. 6.26 psb_sizeof — Memory occupation

      -

      This function computes the memory occupation of a PSBLAS object. +

      This function computes the memory occupation of a PSBLAS object. @@ -3779,26 +3788,26 @@ isz = psb_sizeof(a) isz = psb_sizeof(desc_a) isz = psb_sizeof(prec) -

      -

      +

      +

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      a

      -

      A sparse matrix

      A sparse matrix A.
      Scope: local
      psb_Tspmat_type.

      -

      +

      desc_a

      -

      Communication descriptor.

      Communication descriptor.
      Scope: local
      Type: psb_desc_type.

      -

      +

      prec

      -

      Scope:

      Scope: local
      Type: required
      _type.

      -

      +

      On Return

      -

      -

      +

      +

      Function value

      -

      The memory occupation of the object specified in the calling sequence, in +

      The memory occupation of the object specified in the calling sequence, in bytes.
      Scope: local
      Returned as: an integer(psb_long_int_k_) number.

      +class="cmtt-10">integer(psb_lpk_) number.

      6.27 Sorting utilities —

      -

      psb_isort — Sorting by the Insertion-sort algorithm -

      psb_msort — Sorting by the Merge-sort algorithm -

      psb_qsort — Sorting by the Quicksort algorithm -

      psb_hsort — Sorting by the Heapsort algorithm @@ -3891,38 +3900,38 @@ call psb_msort(x,ix,dir,flag,reord) call psb_qsort(x,ix,dir,flag,reord) call psb_hsort(x,ix,dir,flag,reord) -

      -

      These serial routines sort a sequence

      +

      These serial routines sort a sequence X into ascending or descending order. The argument meaning is identical for all calls; the only difference is the algorithm used to accomplish the task (see Usage Notes below).

      -

      +

      Type:

      -

      Asynchronous. +

      Asynchronous.

      -

      +

      On Entry

      -

      -

      +

      +

      x

      -

      The sequence to be sorted.

      The sequence to be sorted.
      Type:required.
      Specified as: an integer, real or complex array of rank 1.

      -

      +

      ix

      -

      A vector of indices.

      A vector of indices.
      Type:optional.
      Specified as: an integer array of (at least) the same size as sort_noreord_x_.

      -

      +

      dir

      -

      The desired ordering.

      The desired ordering.
      Type:optional.
      Specified as: an integer value:

      -

      +

      Integer and real data:

      -

      psb_sort_up_, psb_sort_down_, psb_asort_up_, @@ -3959,11 +3968,11 @@ class="cmtt-10">psb_sort_up_.

      -

      +

      Complex data:

      -

      psb_lsort_up_, psb_lsort_down_, psb_asort_up_, @@ -3971,11 +3980,11 @@ class="cmtt-10">psb_asort_up_, class="cmtt-10">psb_asort_down_; default psb_lsort_up_.

      -

      +

      flag

      -

      Whether to keep the original values in

      Whether to keep the original values in IX.
      Type:optional.
      psb_sort_keep_idx_; default psb_sort_ovw_idx_.

      -

      +

      reord

      -

      Whether to reorder the input vector

      Whether to reorder the input vector x or just return IX for further usage.
      psb_sort_noreord_x_; default psb_sort_reord_x_.

      -

      +

      -

      +

      On Return

      -

      -

      +

      +

      x

      -

      The sequence of values; if

      The sequence of values; if reord=psb_sort_reord_x_ it will be in the chosen ordering.
      Type:required.
      Specified as: an integer, real or complex array of rank 1.

      -

      +

      ix

      -

      A vector of indices.

      A vector of indices.
      Type: Optional
      An integer array of rank 1, whose x in the original sequence.

      -

      Notes

      1. -

        For integer or real data the sorting can be performed in the up/down +

        For integer or real data the sorting can be performed in the up/down direction, on the natural or absolute values;

      2. -

        For complex data the sorting can be done in a lexicographic order (i.e.: +

        For complex data the sorting can be done in a lexicographic order (i.e.: sort on the real part with ties broken according to the imaginary part) or on the absolute values;

      3. -

        The routines return the items in the chosen ordering; the output +

        The routines return the items in the chosen ordering; the output difference is the handling of ties (i.e. items with an equal value) in the original input. With the insertion-sort or merge-sort algorithms ties are preserved in the same relative order as they had in the original sequence, @@ -4058,7 +4067,7 @@ class="pplb7t-x-x-120">Notes

      4. -

        If

        If reord = psb_ix in this case is flagged as an

      5. -

        If

        If flag = psb_) occupied

      6. -

        If

        If flag = psb_(:) have already been initialized by the user; -

        Three sorting algorithms have a similar

        Three sorting algorithms have a similar O(n log ); of the other three,

        1. -

          The the best case running time for insertion sort is

          The best case running time for insertion sort is Ω(n) while the - average and worst case are ) while the + average and worst case are O(n2); however for very short input +class="zplmr7t-">); moreover, for very short input sequences this is likely to be the fastest method;

        2. -

          The worst case running time +

          The worst case running time for quicksort is O(); the algorithm implemented here follows the

        3. -

          The worst case running time for merge-sort and heap-sort is +

          The worst case running time for merge-sort and heap-sort is O() as the average case;

        4. -

          The merge-sort algorithm is implemented to take advantage of - subsequences that may be already in the desired ordering prior to - the subroutine call; this situation is relatively common when dealing - with groups of indices of sparse matrix entries, thus merge-sort is - the preferred choice when a sorting is needed by other routines in - the library.

        +

        The merge-sort algorithm is implemented to take advantage of + subsequences that may be already in the desired ordering prior + to the subroutine call; this situation is relatively common when + dealing with groups of indices of sparse matrix entries, thus + merge-sort is the preferred choice when a sorting routine is needed + for preprocessing matrix data.

    diff --git a/docs/html/userhtmlse7.html b/docs/html/userhtmlse7.html index 575dfb437..64a918049 100644 --- a/docs/html/userhtmlse7.html +++ b/docs/html/userhtmlse7.html @@ -204,7 +204,7 @@ class="newline" />Type: required.
    Intent: out.
    Specified as: an integer value. Returned as: an integer value. -1 iam Type: required.
    Intent: out.
    Specified as: an integer variable.   +class="newline" />Returned as: an integer variable.  

    Notes

      @@ -333,12 +333,12 @@ class="cmtt-10">MPI_Finalize, class="enumerate" id="x13-109006x3">

      If the user whishes to use multiple communication contexts in the same program, or to enter and exit multiple times into the parallel - environment, this routine may be called to selectively close the - contexts with close=.false., while on the last call it should be called - with close=.true. to shutdown in a clean way the entire parallel - environment.

    + environment, this routine may be called to selectively close the contexts + with close=.false., while on the last instance it should close in a clean + way the entire parallel environment with close=.true. +
@@ -350,27 +350,27 @@ class="cmtt-10">close=.true. to shutdown in a clean wa
 icomm = psb_get_mpi_comm(ctxt)
 
-

-

This function returns the MPI communicator associated with a PSBLAS +

+

This function returns the MPI communicator associated with a PSBLAS context

-

+

Type:

-

Asynchronous. +

Asynchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: required.
Intent: in.
Specified as: an integer variable.

-

+

-

+

On Return

-

-

+

+

Function value

-

The MPI communicator associated with the PSBLAS virtual parallel +

The MPI communicator associated with the PSBLAS virtual parallel machine.
Scope: global.
required.
Intent: out.

-

Notes The subroutine version psb_get_mpicomm is still available but is deprecated. @@ -414,27 +414,27 @@ deprecated.

 rank = psb_get_mpi_rank(ctxt, id)
 
-

-

This function returns the MPI rank of the PSBLAS process

+

This function returns the MPI rank of the PSBLAS process id

-

+

Type:

-

Asynchronous. +

Asynchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

id

-

Identifier of a process in the PSBLAS virtual parallel machine.

Identifier of a process in the PSBLAS virtual parallel machine.
Scope: local.
Type: id np-

-

+

-

+

On Return

-

-

+

+

Funciton value

-

The MPI rank associated with the PSBLAS process

The MPI rank associated with the PSBLAS process id.
Scope: local.
required.
Intent: out.

-

Notes The subroutine version psb_get_rank is still available but is deprecated. @@ -498,27 +498,27 @@ class="cmtt-10">psb_get_rank is still available but is depr

 time = psb_wtime()
 
-

-

This function returns a wall clock timer. The resolution of the timer is dependent +

+

This function returns a wall clock timer. The resolution of the timer is dependent on the underlying parallel environment implementation.

-

+

Type:

-

Asynchronous. +

Asynchronous.

-

+

On Exit

-

-

+

+

Function value

-

the elapsed time in seconds.

the elapsed time in seconds.
Returned as: a real(psb_dpk_) variable.

@@ -532,27 +532,27 @@ class="cmtt-10">real(psb_dpk_) variable.
 call psb_barrier(ctxt)
 
-

-

This subroutine acts as an explicit synchronization point for the PSBLAS parallel +

+

This subroutine acts as an explicit synchronization point for the PSBLAS parallel virtual machine.

-

+

Type:

-

Synchronous. +

Synchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Specified as: an integer variable.

 call psb_abort(ctxt)
 
-

-

This subroutine aborts computation on the parallel virtual machine. +

+

This subroutine aborts computation on the parallel virtual machine.

-

+

Type:

-

Asynchronous. +

Asynchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Specified as: an integer variable.

 call psb_bcast(ctxt, dat [, root, mode, request])
 
-

-

This subroutine implements a broadcast operation based on the underlying +

+

This subroutine implements a broadcast operation based on the underlying communication library.

-

+

Type:

-

Synchronous. +

Synchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

dat

-

On the root process, the data to be broadcast.

On the root process, the data to be broadcast.
Scope: global.
Type: Specified as: an integer, real or complex variable, which may a scalar or rank 1 array.  Type, kind, rank and size must agree on all processes.

-

+

root

-

Root process holding data to be broadcast.

Root process holding data to be broadcast.
Scope: global.
Type: - 1, default 0  

-

+

mode

-

Whether the call is started in non-blocking mode and completed later, or +

Whether the call is started in non-blocking mode and completed later, or is executed synchronously.
Scope: global.
psb_collective_end_. Default: both fields a selected (i.e. require synchronous completion).

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: Intent: inout.
If mode specifies non-blocking action, then this variable must be present.

-

+

-

+

On Return

-

-

+

+

dat

-

On all processes other than root, the broadcasted data.

On all processes other than root, the broadcasted data.
Scope: global.
Type: Specified as: an integer, real or complex variable, which may or a rank 1 or 2 array, or a character or logical scalar.  Type, kind, rank and size must agree on all processes.

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: mode specifies non-blocking action, then th -

Notes

  1. -

    The

    The dat argument is both input and output, and its value may be changed even on processes different from the final result destination.

  2. -

    The

    The mode argument can be built with the bitwise IOR() operator; in the following example, the argument is forcing immediate completion, hence the @@ -768,27 +768,27 @@ class="cmtt-10">IOR() operator; in the class="cmtt-10">request argument needs not be specified:

    -

    +

       call psb_bcast(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
     
    -

    +

  3. -

    When splitting the operation in two calls, the

    When splitting the operation in two calls, the dat argument must not be accessed between calls:

    -

    +

       call psb_bcast(ctxt,dat,mode=psb_collective_start_,request=bcast_request)
       ....... ! Do not access dat
       call psb_bcast(ctxt,dat,mode=psb_collective_end_, request=bcast_request)
     
    -

    +

@@ -801,27 +801,27 @@ class="pplri7t-">must not be
 call psb_sum(ctxt, dat [, root, mode, request])
 
-

-

This subroutine implements a sum reduction operation based on the underlying +

+

This subroutine implements a sum reduction operation based on the underlying communication library.

-

+

Type:

-

Synchronous. +

Synchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

dat

-

The local contribution to the global sum.

The local contribution to the global sum.
Scope: global.
Type: Specified as: an integer, real or complex variable, which may or a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes.

-

+

root

-

Process to hold the final sum, or

Process to hold the final sum, or -1 to make it available on all processes.
Scope: global.
- 1, default -1.  

-

+

mode

-

Whether the call is started in non-blocking mode and completed later, or +

Whether the call is started in non-blocking mode and completed later, or is executed synchronously.
Scope: global.
psb_collective_end_. Default: both fields a selected (i.e. require synchronous completion).

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: Intent: inout.
If mode specifies non-blocking action, then this variable must be present.

-

+

-

+

On Return

-

-

+

+

dat

-

On destination process(es), the result of the sum operation.

On destination process(es), the result of the sum operation.
Scope: global.
Type: Specified as: an integer, real or complex variable, which may or a rank 1 or 2 array.
Type, kind, rank and size must agree on all processes.

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: mode specifies non-blocking action, then th -

Notes

  1. -

    The

    The dat argument is both input and output, and its value may be changed even on processes different from the final result destination.

  2. -

    The

    The mode argument can be built with the bitwise IOR() operator; in the following example, the argument is forcing immediate completion, hence the @@ -961,27 +961,27 @@ class="cmtt-10">IOR() operator; in the class="cmtt-10">request argument needs not be specified:

    -

    +

       call psb_sum(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
     
    -

    +

  3. -

    When splitting the operation in two calls, the

    When splitting the operation in two calls, the dat argument must not be accessed between calls:

    -

    +

       call psb_sum(ctxt,dat,mode=psb_collective_start_,request=sum_request)
       ....... ! Do not access dat
       call psb_sum(ctxt,dat,mode=psb_collective_end_,request=sum_request)
     
    -

    +

@@ -994,27 +994,27 @@ class="pplri7t-">must not be
 call psb_max(ctxt, dat [, root, mode, request])
 
-

-

This subroutine implements a maximum valuereduction operation based on the +

+

This subroutine implements a maximum valuereduction operation based on the underlying communication library.

-

+

Type:

-

Synchronous. +

Synchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

dat

-

The local contribution to the global maximum.

The local contribution to the global maximum.
Scope: local.
Type: inout.
Specified as: an integer or real variable, which may be a scalar, or a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes.

-

+

root

-

Process to hold the final maximum, or

Process to hold the final maximum, or -1 to make it available on all processes.
Scope:

-

+

mode

-

Whether the call is started in non-blocking mode and completed later, or +

Whether the call is started in non-blocking mode and completed later, or is executed synchronously.
Scope: global.
psb_collective_end_. Default: both fields a selected (i.e. require synchronous completion).

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: Intent: inout.
If mode specifies non-blocking action, then this variable must be present.

-

+

-

+

On Return

-

-

+

+

dat

-

On destination process(es), the result of the maximum operation.

On destination process(es), the result of the maximum operation.
Scope: global.
Type: in.
Specified as: an integer or real variable, which may be a scalar, or a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes.

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: mode specifies non-blocking action, then th -

Notes

  1. -

    The

    The dat argument is both input and output, and its value may be changed even on processes different from the final result destination.

  2. -

    The

    The mode argument can be built with the bitwise IOR() operator; in the following example, the argument is forcing immediate completion, hence the @@ -1154,27 +1154,27 @@ class="cmtt-10">IOR() operator; in the class="cmtt-10">request argument needs not be specified:

    -

    +

       call psb_max(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
     
    -

    +

  3. -

    When splitting the operation in two calls, the

    When splitting the operation in two calls, the dat argument must not be accessed between calls:

    -

    +

       call psb_max(ctxt,dat,mode=psb_collective_start_,request=max_request)
       ....... ! Do not access dat
       call psb_max(ctxt,dat,mode=psb_collective_end_,request=max_request)
     
    -

    +

@@ -1187,27 +1187,27 @@ class="pplri7t-">must not be
 call psb_min(ctxt, dat [, root, mode, request])
 
-

-

This subroutine implements a minimum value reduction operation based on the +

+

This subroutine implements a minimum value reduction operation based on the underlying communication library.

-

+

Type:

-

Synchronous. +

Synchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

dat

-

The local contribution to the global minimum.

The local contribution to the global minimum.
Scope: local.
Type: inout.
Specified as: an integer or real variable, which may be a scalar, or a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes.

-

+

root

-

Process to hold the final value, or

Process to hold the final value, or -1 to make it available on all processes.
Scope: global.

-

+

mode

-

Whether the call is started in non-blocking mode and completed later, or +

Whether the call is started in non-blocking mode and completed later, or is executed synchronously.
Scope: global.
psb_collective_end_. Default: both fields a selected (i.e. require synchronous completion).

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: Intent: inout.
If mode specifies non-blocking action, then this variable must be present.

-

+

-

+

On Return

-

-

+

+

dat

-

On destination process(es), the result of the minimum operation.

On destination process(es), the result of the minimum operation.
Scope: global.
Type: Specified as: an integer or real variable, which may be a scal 1 or 2 array.
Type, kind, rank and size must agree on all processes.

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: mode specifies non-blocking action, then th -

Notes

  1. -

    The

    The dat argument is both input and output, and its value may be changed even on processes different from the final result destination.

  2. -

    The

    The mode argument can be built with the bitwise IOR() operator; in the following example, the argument is forcing immediate completion, hence the @@ -1347,27 +1347,27 @@ class="cmtt-10">IOR() operator; in the class="cmtt-10">request argument needs not be specified:

    -

    +

       call psb_min(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
     
    -

    +

  3. -

    When splitting the operation in two calls, the

    When splitting the operation in two calls, the dat argument must not be accessed between calls:

    -

    +

       call psb_min(ctxt,dat,mode=psb_collective_start_,request=min_request)
       ....... ! Do not access dat
       call psb_min(ctxt,dat,mode=psb_collective_end_,request=min_request)
     
    -

    +

@@ -1380,27 +1380,27 @@ class="pplri7t-">must not be
 call psb_amx(ctxt, dat [, root, mode, request])
 
-

-

This subroutine implements a maximum absolute value reduction operation +

+

This subroutine implements a maximum absolute value reduction operation based on the underlying communication library.

-

+

Type:

-

Synchronous. +

Synchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

dat

-

The local contribution to the global maximum.

The local contribution to the global maximum.
Scope: local.
Type: Specified as: an integer, real or complex variable, which may or a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes.

-

+

root

-

Process to hold the final value, or

Process to hold the final value, or -1 to make it available on all processes.
Scope: global.

-

+

mode

-

Whether the call is started in non-blocking mode and completed later, or +

Whether the call is started in non-blocking mode and completed later, or is executed synchronously.
Scope: global.
psb_collective_end_. Default: both fields a selected (i.e. require synchronous completion).

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: Intent: inout.
If mode specifies non-blocking action, then this variable must be present.

-

+

-

+

On Return

-

-

+

+

dat

-

On destination process(es), the result of the maximum operation.

On destination process(es), the result of the maximum operation.
Scope: global.
Type: Specified as: an integer, real or complex variable, which may or a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes.

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: mode specifies non-blocking action, then th -

Notes

  1. -

    The

    The dat argument is both input and output, and its value may be changed even on processes different from the final result destination.

  2. -

    The

    The mode argument can be built with the bitwise IOR() operator; in the following example, the argument is forcing immediate completion, hence the @@ -1541,27 +1541,27 @@ class="cmtt-10">IOR() operator; in the class="cmtt-10">request argument needs not be specified:

    -

    +

       call psb_amx(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
     
    -

    +

  3. -

    When splitting the operation in two calls, the

    When splitting the operation in two calls, the dat argument must not be accessed between calls:

    -

    +

       call psb_amx(ctxt,dat,mode=psb_collective_start_,request=amx_request)
       ....... ! Do not access dat
       call psb_amx(ctxt,dat,mode=psb_collective_end_,request=amx_request)
     
    -

    +

@@ -1574,27 +1574,27 @@ class="pplri7t-">must not be
 call psb_amn(ctxt, dat [, root, mode, request])
 
-

-

This subroutine implements a minimum absolute value reduction operation +

+

This subroutine implements a minimum absolute value reduction operation based on the underlying communication library.

-

+

Type:

-

Synchronous. +

Synchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

dat

-

The local contribution to the global minimum.

The local contribution to the global minimum.
Scope: local.
Type: Specified as: an integer, real or complex variable, which may or a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes.

-

+

root

-

Process to hold the final value, or

Process to hold the final value, or -1 to make it available on all processes.
Scope: global.

-

+

mode

-

Whether the call is started in non-blocking mode and completed later, or +

Whether the call is started in non-blocking mode and completed later, or is executed synchronously.
Scope: global.
psb_collective_end_. Default: both fields a selected (i.e. require synchronous completion).

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: Intent: inout.
If mode specifies non-blocking action, then this variable must be present.

-

+

-

+

On Return

-

-

+

+

dat

-

On destination process(es), the result of the minimum operation.

On destination process(es), the result of the minimum operation.
Scope: global.
Type: Specified as: an integer, real or complex variable, which may or a rank 1 or 2 array.
Type, kind, rank and size must agree on all processes.

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: mode specifies non-blocking action, then th -

Notes

  1. -

    The

    The dat argument is both input and output, and its value may be changed even on processes different from the final result destination.

  2. -

    The

    The mode argument can be built with the bitwise IOR() operator; in the following example, the argument is forcing immediate completion, hence the @@ -1735,27 +1735,27 @@ class="cmtt-10">IOR() operator; in the class="cmtt-10">request argument needs not be specified:

    -

    +

       call psb_amn(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
     
    -

    +

  3. -

    When splitting the operation in two calls, the

    When splitting the operation in two calls, the dat argument must not be accessed between calls:

    -

    +

       call psb_amn(ctxt,dat,mode=psb_collective_start_,request=amn_request)
       ....... ! Do not access dat
       call psb_amn(ctxt,dat,mode=psb_collective_end_,request=amn_request)
     
    -

    +

@@ -1768,27 +1768,27 @@ class="pplri7t-">must not be
 call psb_nrm2(ctxt, dat [, root, mode, request])
 
-

-

This subroutine implements a 2-norm value reduction operation based on the +

+

This subroutine implements a 2-norm value reduction operation based on the underlying communication library.

-

+

Type:

-

Synchronous. +

Synchronous.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

dat

-

The local contribution to the global minimum.

The local contribution to the global minimum.
Scope: local.
Type: inout.
Specified as: a real variable, which may be a scalar, or a rank 1 array.  Kind, rank and size must agree on all processes.

-

+

root

-

Process to hold the final value, or

Process to hold the final value, or -1 to make it available on all processes.
Scope: global.

-

+

mode

-

Whether the call is started in non-blocking mode and completed later, or +

Whether the call is started in non-blocking mode and completed later, or is executed synchronously.
Scope: global.
psb_collective_end_. Default: both fields a selected (i.e. require synchronous completion).

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: Intent: inout.
If mode specifies non-blocking action, then this variable must be present.

-

+

-

+

On Return

-

-

+

+

dat

-

On destination process(es), the result of the 2-norm reduction.

On destination process(es), the result of the 2-norm reduction.
Scope: global.
Type: inout.
Specified as: a real variable, which may be a scalar, or a rank 1 array.
Kind, rank and size must agree on all processes.

-

+

request

-

A request variable to check for operation completion.

A request variable to check for operation completion.
Scope: local.
Type: mode specifies non-blocking action, then th -

Notes

  1. -

    This reduction is appropriate to compute the results of multiple (local) +

    This reduction is appropriate to compute the results of multiple (local) NRM2 operations at the same time.

  2. -

    Denoting by

    Denoting by dati the value of the variable dat on process -

    with care taken to avoid unnecessary overflow. +

    with care taken to avoid unnecessary overflow.

  3. -

    The

    The dat argument is both input and output, and its value may be changed even on processes different from the final result destination.

  4. -

    The

    The mode argument can be built with the bitwise IOR() operator; in the following example, the argument is forcing immediate completion, hence the @@ -1949,15 +1949,15 @@ class="cmtt-10">IOR() operator; in the class="cmtt-10">request argument needs not be specified:

    -

    +

       call psb_nrm2(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
     
    -

    +

  5. -

    When splitting the operation in two calls, the

    When splitting the operation in two calls, the dat argument must not be accessed between calls: @@ -1966,13 +1966,13 @@ class="pplri7t-">must not be

    -

    +

       call psb_nrm2(ctxt,dat,mode=psb_collective_start_,request=nrm2_request)
       ....... ! Do not access dat
       call psb_nrm2(ctxt,dat,mode=psb_collective_end_,request=nrm2_request)
     
    -

    +

@@ -1985,26 +1985,26 @@ class="pplri7t-">must not be
 call psb_snd(ctxt, dat, dst, m)
 
-

-

This subroutine sends a packet of data to a destination. +

+

This subroutine sends a packet of data to a destination.

-

+

Type:

-

Synchronous: see usage notes. +

Synchronous: see usage notes.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

dat

-

The data to be sent.

The data to be sent.
Scope: local.
Type: Specified as: an integer, real or complex variable, which may class="zplmr7m-">m is not specified, size must agree as well.

-

+

dst

-

Destination process.

Destination process.
Scope: global.
Type:

-

+

m

-

Number of rows.

Number of rows.
Scope: global.
Type: (dat, 1); must have the same value on sending and receiving processes.

-

+

-

+

On Return

-

-

+

Notes

  1. -

    This subroutine implies a synchronization, but only between the calling +

    This subroutine implies a synchronization, but only between the calling process and the destination process dst.

@@ -2107,26 +2107,26 @@ class="zplmr7m-">dst.
 call psb_rcv(ctxt, dat, src, m)
 
-

-

This subroutine receives a packet of data to a destination. +

+

This subroutine receives a packet of data to a destination.

-

+

Type:

-

Synchronous: see usage notes. +

Synchronous: see usage notes.

-

+

On Entry

-

-

+

+

ctxt

-

the communication context identifying the virtual parallel machine.

the communication context identifying the virtual parallel machine.
Scope: global.
Type: Intent: in.
Specified as: an integer variable.

-

+

src

-

Source process.

Source process.
Scope: global.
Type: np- 1.

-

+

m

-

Number of rows.

Number of rows.
Scope: global.
Type: ); must have the same -

+

-

+

On Return

-

-

+

+

dat

-

The data to be received.

The data to be received.
Scope: local.
Type: Specified as: an integer, real or complex variable, which may rank must agree on sender and receiver process; if m is not specified, size must agree as well.

-

Notes

  1. -

    This subroutine implies a synchronization, but only between the calling +

    This subroutine implies a synchronization, but only between the calling process and the source process src.

diff --git a/docs/html/userhtmlse8.html b/docs/html/userhtmlse8.html index 029136a82..6094efdec 100644 --- a/docs/html/userhtmlse8.html +++ b/docs/html/userhtmlse8.html @@ -18,10 +18,10 @@ href="userhtmlse5.html#tailuserhtmlse8.html">tail] [up]

8 Error handling

-

The PSBLAS library error handling policy has been completely rewritten in version -2.0. The idea behind the design of this new error handling strategy is to keep error +

The PSBLAS library error handling policy has been defined at the time version 2.0 +was written. The idea behind the design of error handling strategy is to keep error messages on a stack allowing the user to trace back up to the point where the first -error message has been generated. Every routine in the PSBLAS-2.0 library has, as +error message has been generated. Every routine in the PSBLAS library has, as last non-optional argument, an integer info variable; whenever, inside the routine, an error is detected, this variable is set to a value corresponding to a @@ -38,16 +38,16 @@ execution.

Figure 5 shows the layout of a generic psb_foo routine with respect to the -PSBLAS-2.0 error handling policy. It is possible to see how, whenever an error -condition is detected, the info variable is set to the corresponding error code which -is, then, pushed on top of the stack by means of the psb_errpush. An error condition -may be directly detected inside a routine or indirectly checking the error code -returned returned by a called routine. Whenever an error is encountered, after it has -been pushed on stack, the program execution skips to a point where the error -condition is handled; the error condition is handled either by returning control to the -caller routine or by calling the info variable is set to the corresponding error code which is, then, +pushed on top of the stack by means of the psb_errpush. An error condition may be +directly detected inside a routine or indirectly checking the error code returned +returned by a called routine. Whenever an error is encountered, after it has been +pushed on stack, the program execution skips to a point where the error condition is +handled; the error condition is handled either by returning control to the caller +routine or by calling the psb\_error routine which prints the content of the error stack and aborts the program execution, according to the choice made by the user with


Figure 6 reports a sample error message generated by the PSBLAS-2.0 -library. This error has been generated by the fact that the user has chosen the -invalid “FOO” storage format to represent the sparse matrix. From this -error message it is possible to see that the error has been detected inside -the psb_cest subroutine called by psb_spasb ... by process 0 (i.e. the root -process). +href="#x14-124026r6">6 reports a sample error message generated by the PSBLAS library. This +error has been generated by the fact that the user has chosen the invalid “FOO” +storage format to represent the sparse matrix. From this error message it is possible +to see that the error has been detected inside the psb_cest subroutine called by +psb_spasb ... by process 0 (i.e. the root process). @@ -331,8 +330,8 @@ Aborting...


Listing 6: A sample PSBLAS-3.0 error message. Process 0 detected an error +>Listing 6: A sample PSBLAS error message. Process 0 detected an error condition inside the psb_cest subroutine
diff --git a/docs/psblas-3.9.pdf b/docs/psblas-3.9.pdf index f22775fd3..2411eb8f1 100644 --- a/docs/psblas-3.9.pdf +++ b/docs/psblas-3.9.pdf @@ -418,7 +418,7 @@ stream % 379 0 obj << /S /GoTo /D (subsection.6.17) >> % 382 0 obj -(\376\377\0006\000.\0001\0007\000\040\000p\000s\000b\000\137\000g\000l\000o\000b\000\137\000t\000o\000\137\000l\000o\000c\000\040\040\024\000\040\000G\000l\000o\000b\000a\000l\000\040\000t\000o\000\040\000l\000o\000c\000a\000l\000\040\000i\000n\000d\000i\000c\000e\000s\000\040\000c\000o\000n\000v\000e\000r\000t\000i\000o\000n) +(\376\377\0006\000.\0001\0007\000\040\000p\000s\000b\000\137\000g\000l\000o\000b\000\137\000t\000o\000\137\000l\000o\000c\000\040\040\024\000\040\000G\000l\000o\000b\000a\000l\000\040\000t\000o\000\040\000l\000o\000c\000a\000l\000\040\000i\000n\000d\000i\000c\000e\000s\000\040\000c\000o\000n\000v\000e\000r\000s\000i\000o\000n) % 383 0 obj << /S /GoTo /D (subsection.6.18) >> % 386 0 obj @@ -665,7 +665,7 @@ endstream endobj 682 0 obj << -/Length 767 +/Length 777 >> stream 0 g 0 G @@ -674,21 +674,21 @@ stream 0 g 0 G 0 g 0 G BT -/F75 24.7871 Tf 169.511 628.583 Td [(PSBLAS)-250(3.9.0)-250(User)-55(')55(s)-250(guide)]TJ +/F75 24.7871 Tf 169.511 628.503 Td [(PSBLAS)-250(3.9.0)-250(User)-55(')55(s)-250(guide)]TJ ET q -1 0 0 1 125.3 611.955 cm +1 0 0 1 125.3 611.875 cm 0 0 343.711 4.981 re f Q BT -/F78 14.3462 Tf 156.541 588.762 Td [(A)-250(r)18(efer)18(ence)-250(guide)-250(for)-250(the)-250(Parallel)-250(Sparse)-250(BLAS)-250(library)]TJ +/F78 14.3462 Tf 156.541 588.682 Td [(A)-250(r)18(efer)18(ence)-250(guide)-250(for)-250(the)-250(Parallel)-250(Sparse)-250(BLAS)-250(library)]TJ 0 g 0 G 0 g 0 G 0 g 0 G 0 g 0 G 0 g 0 G ET -1 0 0 1 168.637 349.474 cm +1 0 0 1 168.637 349.314 cm q .42964 0 0 .42964 0 0 cm q @@ -699,9 +699,9 @@ Q 0 g 0 G 0 g 0 G 0 g 0 G -1 0 0 1 -168.637 -349.474 cm +1 0 0 1 -168.637 -349.314 cm BT -/F75 9.9626 Tf 365.51 270.624 Td [(by)-250(Salvatore)-250(Filippone)]TJ 34.042 -11.956 Td [(Alfredo)-250(Buttari)]TJ -8.847 -11.955 Td [(Fabio)-250(Durastante)]TJ/F84 9.9626 Tf 16.987 -11.955 Td [(June)-250(9th,)-250(2025)]TJ +/F75 9.9626 Tf 365.51 270.385 Td [(by)-250(Salvatore)-250(Filippone)]TJ 34.042 -11.956 Td [(Alfredo)-250(Buttari)]TJ -8.847 -11.955 Td [(Fabio)-250(Durastante)]TJ/F84 9.9626 Tf -13.589 -11.955 Td [(December)-250(23r)18(d,)-250(2025)]TJ 0 g 0 G 0 g 0 G ET @@ -2588,9 +2588,9 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F84 9.9626 Tf 192.009 645.674 Td [(loc)-250(\227)-250(Global)-250(to)-250(local)-250(indices)-250(convertion)]TJ +/F84 9.9626 Tf 192.009 645.674 Td [(loc)-250(\227)-250(Global)-250(to)-250(local)-250(indices)-250(conversion)]TJ 0 g 0 G - [-457(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-359(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G [-1500(98)]TJ 0 g 0 G @@ -4138,7 +4138,7 @@ stream /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 641.868 367.818 653.928] +/Rect [113.843 641.868 368.794 653.928] /A << /S /GoTo /D (subsection.6.17) >> >> % 802 0 obj @@ -4524,13 +4524,13 @@ endstream endobj 893 0 obj << -/Length 4149 +/Length 4155 >> stream 0 g 0 G 0 g 0 G BT -/F75 14.3462 Tf 99.895 705.784 Td [(Preface)]TJ/F84 9.9626 Tf 0.98 0 0 1 99.587 683.082 Tm [(This)-249(manual)-250(describes)-249(the)-250(main)-250(featur)19(es)-250(of)-249(PSBLAS,)-250(a)-249(library)-250(for)-249(parallel)-250(sparse)]TJ 1 0 0 1 99.895 671.127 Tm [(computations)-250(that)-250(has)-250(been)-250(developed)-250(over)-250(a)-250(number)-250(of)-250(years.)]TJ 1.01 0 0 1 114.839 659.172 Tm [(Our)-248(work)-248(has)-248(been)-247(mainly)-248(devoted)-248(to)-248(pr)18(oviding)-248(a)-248(foundational)-248(toolkit)-247(on)]TJ 1.02 0 0 1 99.477 647.217 Tm [(which)-264(many)-265(algorithms)-264(can)-264(be)-265(implemented;)-274(the)-264(toolkit)-264(has)-265(pr)18(oven)-264(its)-265(ef)18(fec-)]TJ 1.02 0 0 1 99.895 635.261 Tm [(tiveness)-269(and)-268(\003exibility)-269(in)-268(many)-269(ways.)-374(The)-268(PSBLAS)-269(component)-268(deals)-269(mostly)]TJ 1.02 0 0 1 99.477 623.306 Tm [(with)-285(the)-286(computational)-285(kernels)-286(and)-285(envir)17(onment)-285(handling;)-306(it)-285(supports)-286(com-)]TJ 1.017 0 0 1 99.596 611.351 Tm [(putations)-245(on)-246(normal)-245(CPUs,)-246(including)-245(the)-245(usage)-246(of)-245(OpenMP)-246(for)-245(parallellizing)]TJ 1 0 0 1 99.895 599.396 Tm [(acr)18(oss)-250(multiple)-250(cor)18(es.)]TJ 1.02 0 0 1 114.839 587.441 Tm [(This)-283(foundational)-284(package)-283(pr)17(ovides)-283(linear)-283(solvers)-284(and)-283(some)-284(very)-283(simple)]TJ 1.019 0 0 1 99.596 575.486 Tm [(pr)18(econditioners;)-247(the)-246(companion)-246(package)-246(AMG4PSBLAS)-247(exp)1(lor)17(es)-246(how)-246(to)-246(use)]TJ 0.981 0 0 1 99.895 563.53 Tm [(the)-256(base)-256(toolkit)-256(to)-256(build)-256(much)-256(mor)18(e)-256(sophisticated)-256(pr)19(econditioners)-256(which)-256(can)-256(be)]TJ 1 0 0 1 99.596 551.575 Tm [(plugged)-250(seamlessly)-250(into)-250(the)-250(base)-250(solvers.)]TJ 0.98 0 0 1 114.839 539.62 Tm [(The)-253(softwar)19(e)-253(ar)18(chite)1(ctur)18(e)-253(allows)-252(us)-253(to)-253(of)19(f)-1(er)-252(support)-253(for)-252(many)-253(alternatives)-253(in)]TJ 1.005 0 0 1 99.895 527.665 Tm [(the)-249(implementation,)-250(including)-249(usage)-249(of)-250(heter)18(ogeneous)-249(platforms,)-249(and)-250(compu-)]TJ 1.02 0 0 1 99.895 515.71 Tm [(tations)-245(performed)-245(on)-245(GPUs)-246(thr)18(ouh)-245(CUDA.)-245(Ther)17(e)-245(is)-245(support)-245(for)-245(GPU)-245(compu-)]TJ 1.007 0 0 1 99.895 503.755 Tm [(tations)-247(thr)17(ough)-247(OpenACC,)-247(but)-248(it)-247(is)-248(at)-247(this)-248(time)-247(a)-248(highly)-247(experimental)-247(version;)]TJ 1.02 0 0 1 99.477 491.799 Tm [(we)-281(plan)-281(to)-281(also)-281(look)-281(at)-281(using)-281(accelerato)1(rs)-281(thr)17(ough)-281(OpenMP)-281(as)-281(support)-280(fr)17(om)]TJ 1 0 0 1 99.895 479.844 Tm [(compilers)-250(impr)18(oves.)]TJ 1.02 0 0 1 114.839 467.889 Tm [(The)-272(pr)17(oject)-272(is)-272(lead)-272(by)-272(Salvator)17(e)-272(Filippone;)-285(a)-273(numb)1(er)-273(of)-272(people)-272(have)-272(been)]TJ 1.02 0 0 1 99.895 455.934 Tm [(contributing)-317(to)-317(this)-318(package)-317(over)-317(the)-317(years;)-353(contributors)-318(in)-317(r)18(oughly)-317(r)17(everse)]TJ 1 0 0 1 99.895 443.979 Tm [(chr)18(onological)-250(or)18(der:)]TJ 14.944 -11.955 Td [(Luca)-250(Pep)]TJ 41.494 0.025 Td [(\036)]TJ -0.727 -0.025 Td [(e)-250(Sciarria)]TJ -40.767 -11.956 Td [(Theophane)-250(Loloum)]TJ 0 -11.955 Td [(Dimitri)-250(W)92(alther)]TJ 0 -11.955 Td [(Andea)-250(Di)-250(Iorio)]TJ 0 -11.955 Td [(Stefano)-250(Petrilli)]TJ 0 -11.955 Td [(Sor)18(en)-250(Rasmussen)]TJ 0 -11.955 Td [(Zaak)-250(Beekman)]TJ 0 -11.956 Td [(Ambra)-250(Abdullahi)-250(Hassan)]TJ 0 -11.955 Td [(Pasqua)-250(D'Ambra)]TJ 0 -11.955 Td [(Daniela)-250(di)-250(Sera\002no)]TJ 0 -11.955 Td [(Michele)-250(Martone)]TJ 0 -11.955 Td [(Michele)-250(Colajanni)]TJ 0 -11.955 Td [(Fabio)-250(Cerioni)]TJ 0 -11.956 Td [(Stefano)-250(Maiolatesi)]TJ 0 -11.955 Td [(Dario)-250(Pascucci)]TJ +/F75 14.3462 Tf 99.895 705.784 Td [(Preface)]TJ/F84 9.9626 Tf 0.98 0 0 1 99.587 683.082 Tm [(This)-249(manual)-250(describes)-249(the)-250(main)-250(featur)19(es)-250(of)-249(PSBLAS,)-250(a)-249(library)-250(for)-249(parallel)-250(sparse)]TJ 1 0 0 1 99.895 671.127 Tm [(computations)-250(that)-250(has)-250(been)-250(developed)-250(over)-250(a)-250(number)-250(of)-250(years.)]TJ 1.01 0 0 1 114.839 659.172 Tm [(Our)-248(work)-248(has)-248(been)-247(mainly)-248(devoted)-248(to)-248(pr)18(oviding)-248(a)-248(foundational)-248(toolkit)-247(on)]TJ 1.02 0 0 1 99.477 647.217 Tm [(which)-264(many)-265(algorithms)-264(can)-264(be)-265(implemented;)-274(the)-264(toolkit)-264(has)-265(pr)18(oven)-264(its)-265(ef)18(fec-)]TJ 1.02 0 0 1 99.895 635.261 Tm [(tiveness)-269(and)-268(\003exibility)-269(in)-268(many)-269(ways.)-374(The)-268(PSBLAS)-269(component)-268(deals)-269(mostly)]TJ 1.02 0 0 1 99.477 623.306 Tm [(with)-285(the)-286(computational)-285(kernels)-286(and)-285(envir)17(onment)-285(handling;)-306(it)-285(supports)-286(com-)]TJ 1.017 0 0 1 99.596 611.351 Tm [(putations)-245(on)-246(normal)-245(CPUs,)-246(including)-245(the)-245(usage)-246(of)-245(OpenMP)-246(for)-245(parallellizing)]TJ 1 0 0 1 99.895 599.396 Tm [(acr)18(oss)-250(multiple)-250(cor)18(es.)]TJ 1.02 0 0 1 114.839 587.441 Tm [(This)-283(foundational)-284(package)-283(pr)17(ovides)-283(linear)-283(solvers)-284(and)-283(some)-284(very)-283(simple)]TJ 1.019 0 0 1 99.596 575.486 Tm [(pr)18(econditioners;)-247(the)-246(companion)-246(package)-246(AMG4PSBLAS)-247(exp)1(lor)17(es)-246(how)-246(to)-246(use)]TJ 0.981 0 0 1 99.895 563.53 Tm [(the)-256(base)-256(toolkit)-256(to)-256(build)-256(much)-256(mor)18(e)-256(sophisticated)-256(pr)19(econditioners)-256(which)-256(can)-256(be)]TJ 1 0 0 1 99.596 551.575 Tm [(plugged)-250(seamlessly)-250(into)-250(the)-250(base)-250(solvers.)]TJ 1.016 0 0 1 114.839 539.62 Tm [(The)-246(softwar)18(e)-246(ar)18(chitectur)18(e)-246(allows)-246(us)-245(to)-246(of)18(fer)-246(suppor)1(t)-246(for)-246(many)-246(alter)1(natives)]TJ 1.008 0 0 1 99.895 527.665 Tm [(in)-247(the)-247(implementation,)-247(including)-247(usage)-247(of)-247(heter)18(ogeneous)-247(platforms,)-247(and)-247(com-)]TJ 1.02 0 0 1 99.596 515.71 Tm [(putations)-274(p)1(erformed)-274(on)-273(GPUs)-274(thr)18(ouh)-274(CUDA.)-273(Ther)17(e)-273(is)-274(also)-273(support)-274(for)-273(GPU)]TJ 1.02 0 0 1 99.895 503.755 Tm [(computations)-260(thr)17(ough)-260(OpenACC,)-260(but)-261(it)-260(is)-260(at)-261(th)1(is)-261(time)-260(a)-260(highly)-261(experimental)]TJ 0.989 0 0 1 99.616 491.799 Tm [(version;)-252(we)-253(plan)-252(to)-252(also)-252(look)-252(at)-253(using)-252(accelerators)-252(thr)18(ough)-252(OpenMP)-252(as)-252(support)]TJ 1 0 0 1 99.895 479.844 Tm [(fr)18(om)-250(compilers)-250(impr)18(oves.)]TJ 1.02 0 0 1 114.839 467.889 Tm [(The)-272(pr)17(oject)-272(is)-272(lead)-272(by)-272(Salvator)17(e)-272(Filippone;)-285(a)-273(numb)1(er)-273(of)-272(people)-272(have)-272(been)]TJ 1.02 0 0 1 99.895 455.934 Tm [(contributing)-317(to)-317(this)-318(package)-317(over)-317(the)-317(years;)-353(contributors)-318(in)-317(r)18(oughly)-317(r)17(everse)]TJ 1 0 0 1 99.895 443.979 Tm [(chr)18(onological)-250(or)18(der:)]TJ 14.944 -11.955 Td [(Luca)-250(Pep)]TJ 41.494 0.025 Td [(\036)]TJ -0.727 -0.025 Td [(e)-250(Sciarria)]TJ -40.767 -11.956 Td [(Theophane)-250(Loloum)]TJ 0 -11.955 Td [(Dimitri)-250(W)92(alther)]TJ 0 -11.955 Td [(Andea)-250(Di)-250(Iorio)]TJ 0 -11.955 Td [(Stefano)-250(Petrilli)]TJ 0 -11.955 Td [(Sor)18(en)-250(Rasmussen)]TJ 0 -11.955 Td [(Zaak)-250(Beekman)]TJ 0 -11.956 Td [(Ambra)-250(Abdullahi)-250(Hassan)]TJ 0 -11.955 Td [(Pasqua)-250(D'Ambra)]TJ 0 -11.955 Td [(Daniela)-250(di)-250(Sera\002no)]TJ 0 -11.955 Td [(Michele)-250(Martone)]TJ 0 -11.955 Td [(Michele)-250(Colajanni)]TJ 0 -11.955 Td [(Fabio)-250(Cerioni)]TJ 0 -11.956 Td [(Stefano)-250(Maiolatesi)]TJ 0 -11.955 Td [(Dario)-250(Pascucci)]TJ 0 g 0 G 0 g 0 G 243.12 -21.918 Td [(Salvator)18(e)-250(Filippone)]TJ 18.729 -11.955 Td [(Alfr)18(edo)-250(Buttari)]TJ -8.847 -11.955 Td [(Fabio)-250(Durastante)]TJ @@ -4543,7 +4543,7 @@ endstream endobj 907 0 obj << -/Length 9122 +/Length 9243 >> stream 0 g 0 G @@ -4565,11 +4565,11 @@ BT 1 0 0 rg 1 0 0 RG 1 0 0 1 330.659 503.326 Tm [(19)]TJ 0 g 0 G - 0.98 0 0 1 340.622 503.326 Tm [(];)-220(suf)18(\002cient)-203(support)-202(for)-203(Fortran)-202(2008)]TJ 1.018 0 0 1 150.705 491.371 Tm [(is)-245(now)-245(available)-245(fr)17(om)-245(many)-245(compilers,)-245(including)-245(r)17(ecent)-245(versions)-245(of)-245(the)-245(GNU)]TJ 0.985 0 0 1 150.705 479.416 Tm [(Fortran)-254(compiler)-253(fr)18(om)-254(the)-254(Fr)19(ee)-254(Softwar)18(e)-254(Foundation,)-254(and)-253(the)-254(FLANG)-254(compiler)]TJ 1 0 0 1 150.705 467.461 Tm [(fr)18(om)-250(the)-250(LL)92(VM)-250(pr)18(oject.)]TJ 0.98 0 0 1 165.649 455.397 Tm [(Pr)18(evious)-234(appr)19(oaches)-234(have)-234(been)-234(based)-234(on)-234(mixing)-234(Fortran)-234(95,)-239(with)-234(its)-234(support)]TJ 1.02 0 0 1 150.705 443.442 Tm [(for)-260(object-based)-260(design,)-264(with)-260(other)-260(languages;)-267(these)-260(have)-260(been)-260(advocated)-260(by)]TJ 1.016 0 0 1 150.705 431.486 Tm [(a)-246(number)-246(of)-246(authors,)-247(e.g.)-246([)]TJ + 0.98 0 0 1 340.622 503.326 Tm [(];)-220(suf)18(\002cient)-203(support)-202(for)-203(Fortran)-202(2008)]TJ 1.018 0 0 1 150.705 491.371 Tm [(is)-245(now)-245(available)-245(fr)17(om)-245(many)-245(compilers,)-245(including)-245(r)17(ecent)-245(versions)-245(of)-245(the)-245(GNU)]TJ 0.98 0 0 1 150.705 479.416 Tm [(Fortran)-224(compiler)-225(fr)18(om)-224(the)-224(Fr)18(ee)-225(Softwar)19(e)-225(Foundation,)-230(the)-225(FLANG)-224(compiler)-225(fr)19(om)]TJ 0.987 0 0 1 150.705 467.461 Tm [(the)-254(LL)93(VM)-255(pr)19(oject,)-255(and)-254(the)-255(Intel)-254(OneAPI)-255(compiler)75(.)-317(The)-254(README)-255(\002le)-254(contains)-255(a)]TJ 1 0 0 1 150.705 455.506 Tm [(list)-250(of)-250(compilers)-250(against)-250(which)-250(we)-250(have)-250(successfully)-250(tested)-250(the)-250(curr)18(ent)-250(r)18(elease.)]TJ 0.98 0 0 1 165.649 443.442 Tm [(Pr)18(evious)-234(appr)19(oaches)-234(have)-234(been)-234(based)-234(on)-234(mixing)-234(Fortran)-234(95,)-239(with)-234(its)-234(support)]TJ 1.02 0 0 1 150.705 431.486 Tm [(for)-260(object-based)-260(design,)-264(with)-260(other)-260(languages;)-267(these)-260(have)-260(been)-260(advocated)-260(by)]TJ 1.02 0 0 1 150.705 419.531 Tm [(a)-273(number)-274(of)-273(authors,)-281(e.g.)-273([)]TJ 1 0 0 rg 1 0 0 RG - 1 0 0 1 268.108 431.486 Tm [(16)]TJ + 1 0 0 1 270.027 419.531 Tm [(16)]TJ 0 g 0 G - 1.016 0 0 1 278.071 431.486 Tm [(].)-305(Mor)17(eover)73(,)-246(the)-246(Fortran)-246(95)-246(facilities)-247(for)-246(dynamic)]TJ 1.006 0 0 1 150.705 419.531 Tm [(memory)-248(management)-248(and)-247(interface)-248(overloading)-248(gr)18(eatly)-248(enhance)-247(the)-248(usability)]TJ 1.02 0 0 1 150.705 407.576 Tm [(of)-287(the)-287(PSBLAS)-287(subr)17(outines.)-430(In)-287(this)-287(way)109(,)-298(the)-287(library)-287(can)-288(take)-287(car)18(e)-287(of)-288(r)8(untime)]TJ 1.02 0 0 1 150.705 395.621 Tm [(memory)-248(r)18(equir)17(ements)-248(that)-248(ar)18(e)-249(qui)1(te)-249(dif)18(\002cult)-248(or)-248(even)-248(impossible)-248(to)-248(pr)17(edict)-248(at)]TJ 1 0 0 1 150.705 383.666 Tm [(implementation)-250(or)-250(compilation)-250(time.)]TJ 14.944 -12.064 Td [(The)-249(pr)18(esentation)-250(of)-249(the)-249(PSBLAS)-250(library)-249(follows)-250(the)-249(general)-249(str)8(uctur)18(e)-250(of)-249(the)]TJ 0.98 0 0 1 150.406 359.647 Tm [(pr)18(oposal)-255(for)-255(s)1(erial)-255(Sparse)-255(BLAS)-255([)]TJ + 1.02 0 0 1 279.99 419.531 Tm [(].)-389(The)-273(Fortran)-274(95)-273(facilities)-273(for)-274(dynamic)-273(memory)]TJ 1.02 0 0 1 150.705 407.576 Tm [(management)-294(and)-293(interface)-294(overloading)-293(ensur)17(e)-293(that)-294(the)-293(library)-294(can)-294(take)-293(car)17(e)]TJ 1.006 0 0 1 150.705 395.621 Tm [(of)-248(r)8(untime)-248(memory)-248(r)18(equir)18(ements)-248(that)-247(ar)18(e)-248(quite)-248(dif)18(\002cult)-248(or)-248(even)-248(impossible)-247(to)]TJ 1 0 0 1 150.406 383.666 Tm [(pr)18(edict)-250(at)-250(implementation)-250(or)-250(compilation)-250(time.)]TJ 15.243 -12.064 Td [(The)-249(pr)18(esentation)-250(of)-249(the)-249(PSBLAS)-250(library)-249(follows)-250(the)-249(general)-249(str)8(uctur)18(e)-250(of)-249(the)]TJ 0.98 0 0 1 150.406 359.647 Tm [(pr)18(oposal)-255(for)-255(s)1(erial)-255(Sparse)-255(BLAS)-255([)]TJ 1 0 0 rg 1 0 0 RG 1 0 0 1 292.915 359.647 Tm [(8)]TJ 0 g 0 G @@ -4589,7 +4589,7 @@ BT 1 0 0 rg 1 0 0 RG [-250(6)]TJ 0 g 0 G - [(].)]TJ 1.016 0 0 1 165.649 335.627 Tm [(The)-245(applicability)-245(of)-246(sparse)-245(iterative)-245(solvers)-245(to)-245(many)-245(dif)17(f)1(er)17(ent)-245(ar)18(eas)-245(causes)]TJ 0.98 0 0 1 150.705 323.672 Tm [(some)-251(terminology)-252(pr)19(oblems)-252(because)-251(the)-252(same)-251(concept)-251(may)-252(be)-251(denoted)-252(thr)19(ough)]TJ 1.013 0 0 1 150.705 311.717 Tm [(dif)18(fer)18(ent)-248(names)-247(depending)-247(on)-248(the)-247(application)-248(ar)18(ea.)-308(The)-247(PSBLAS)-247(featur)17(es)-247(pr)18(e-)]TJ 1.02 0 0 1 150.705 299.762 Tm [(sented)-289(in)-290(this)-289(document)-290(will)-289(be)-290(discussed)-289(r)17(eferring)-289(to)-290(a)-289(\002nite)-290(dif)18(fer)18(ence)-289(dis-)]TJ 1.012 0 0 1 150.705 287.807 Tm [(cr)18(etization)-248(of)-248(a)-248(Partial)-248(Dif)18(fer)18(ential)-248(Equation)-248(\050PDE\051.)-247(However)73(,)-248(the)-248(scope)-248(of)-248(the)]TJ 1.02 0 0 1 150.705 275.852 Tm [(library)-249(is)-249(wider)-249(than)-249(that:)-312(for)-250(exampl)1(e,)-251(it)-249(can)-249(be)-249(applied)-249(to)-249(\002nite)-249(element)-249(dis-)]TJ 0.98 0 0 1 150.705 263.896 Tm [(cr)18(etizations)-240(of)-241(PDEs,)-243(and)-241(even)-241(to)-240(dif)18(fer)18(ent)-241(classes)-240(of)-241(pr)18(oblems)-240(such)-241(as)-241(nonlinear)]TJ 1 0 0 1 150.705 251.941 Tm [(optimization,)-250(for)-250(example)-250(in)-250(optimal)-250(contr)18(ol)-250(pr)18(oblems.)]TJ 1.02 0 0 1 165.649 239.877 Tm [(The)-346(design)-346(of)-345(a)-346(solver)-346(for)-346(sparse)-346(linear)-346(systems)-345(is)-346(driven)-346(by)-346(many)-346(con-)]TJ 1.006 0 0 1 150.705 227.922 Tm [(\003icting)-250(objectives,)-249(such)-250(as)-250(limiting)-249(occupation)-250(of)-250(storage)-249(r)18(esour)18(ces,)-250(exploiting)]TJ 1.013 0 0 1 150.705 215.967 Tm [(r)18(egularities)-247(in)-247(the)-247(input)-247(data,)-247(exploi)1(ting)-247(har)17(dwar)18(e)-247(characteristics)-247(of)-246(the)-247(paral-)]TJ 1.02 0 0 1 150.705 204.012 Tm [(lel)-293(platform.)-447(T)90(o)-292(achieve)-293(an)-293(optimal)-293(communication)-292(to)-293(computation)-293(ratio)-293(on)]TJ 1.02 0 0 1 150.705 192.057 Tm [(distributed)-322(memory)-322(machines)-323(it)-322(is)-322(essential)-322(to)-323(ke)1(ep)-323(the)]TJ/F78 9.9626 Tf 1.02 0 0 1 407.18 192.057 Tm [(data)-322(locality)]TJ/F84 9.9626 Tf 1.02 0 0 1 461.316 192.057 Tm [(as)-322(high)]TJ 1.02 0 0 1 150.705 180.101 Tm [(as)-270(possible;)-283(this)-270(can)-270(be)-270(done)-271(thr)18(ough)-270(an)-270(appr)17(opriate)-270(data)-270(allocation)-270(strategy)109(.)]TJ 1.02 0 0 1 150.396 168.146 Tm [(The)-264(choice)-265(of)-264(the)-265(pr)18(econditioner)-264(is)-265(another)-264(very)-265(important)-264(factor)-265(that)-264(af)18(fects)]TJ 1.02 0 0 1 150.705 156.191 Tm [(ef)18(\002ciency)-247(of)-248(the)-248(impleme)1(nted)-248(application.)-311(Optimal)-248(data)-247(distribution)-248(r)18(equir)18(e-)]TJ 1.014 0 0 1 150.705 144.236 Tm [(ments)-247(for)-246(a)-247(given)-247(pr)18(econditioner)-247(may)-246(con\003ict)-247(with)-247(distribution)-246(r)17(equir)18(ements)]TJ 1.02 0 0 1 150.705 132.281 Tm [(of)-310(the)-311(r)18(est)-310(of)-311(the)-310(solver)72(.)-499(Finding)-311(the)-310(optimal)-310(trade-of)17(f)-310(may)-310(be)-310(very)-311(dif)18(\002cult)]TJ 1.016 0 0 1 150.705 120.326 Tm [(because)-246(it)-245(is)-246(application)-245(dependent.)-305(Possible)-246(solutions)-246(to)-245(these)-246(pr)18(oblems)-246(and)]TJ + [(].)]TJ 1.016 0 0 1 165.649 335.627 Tm [(The)-245(applicability)-245(of)-246(sparse)-245(iterative)-245(solvers)-245(to)-245(many)-245(dif)17(f)1(er)17(ent)-245(ar)18(eas)-245(causes)]TJ 0.98 0 0 1 150.705 323.672 Tm [(some)-219(terminology)-219(pr)19(oblems)-219(because)-219(the)-219(same)-219(concept)-219(may)-218(be)-219(denoted)-219(by)-219(dif)18(fer)18(-)]TJ 1.003 0 0 1 150.705 311.717 Tm [(ent)-249(names)-249(depending)-249(on)-248(the)-249(application)-249(ar)18(ea.)-309(The)-249(PSBLAS)-249(featur)18(es)-249(pr)18(esented)]TJ 1.01 0 0 1 150.705 299.762 Tm [(in)-247(this)-246(document)-247(will)-247(be)-246(discussed)-247(taking)-246(as)-247(a)-247(r)18(efer)18(ence)-247(a)-246(\002nite)-247(dif)18(fer)18(ence)-247(dis-)]TJ 1.012 0 0 1 150.705 287.807 Tm [(cr)18(etization)-248(of)-248(a)-248(Partial)-248(Dif)18(fer)18(ential)-248(Equation)-248(\050PDE\051.)-247(However)73(,)-248(the)-248(scope)-248(of)-248(the)]TJ 1.02 0 0 1 150.705 275.852 Tm [(library)-333(is)-332(wider)-333(than)-333(that:)-479(it)-332(can)-333(be)-333(applied)-332(to)-333(\002nite)-332(element)-333(and)-333(other)-332(dis-)]TJ 0.98 0 0 1 150.705 263.896 Tm [(cr)18(etizations)-240(of)-241(PDEs,)-243(and)-241(even)-241(to)-240(dif)18(fer)18(ent)-241(classes)-240(of)-241(pr)18(oblems)-240(such)-241(as)-241(nonlinear)]TJ 1 0 0 1 150.705 251.941 Tm [(optimization,)-250(for)-250(example)-250(in)-250(optimal)-250(contr)18(ol)-250(pr)18(oblems.)]TJ 1.02 0 0 1 165.649 239.877 Tm [(The)-346(design)-346(of)-345(a)-346(solver)-346(for)-346(sparse)-346(linear)-346(systems)-345(is)-346(driven)-346(by)-346(many)-346(con-)]TJ 1.006 0 0 1 150.705 227.922 Tm [(\003icting)-250(objectives,)-249(such)-250(as)-250(limiting)-249(occupation)-250(of)-250(storage)-249(r)18(esour)18(ces,)-250(exploiting)]TJ 1.013 0 0 1 150.705 215.967 Tm [(r)18(egularities)-247(in)-247(the)-247(input)-247(data,)-247(exploi)1(ting)-247(har)17(dwar)18(e)-247(characteristics)-247(of)-246(the)-247(paral-)]TJ 1.02 0 0 1 150.705 204.012 Tm [(lel)-293(platform.)-447(T)90(o)-292(achieve)-293(an)-293(optimal)-293(communication)-292(to)-293(computation)-293(ratio)-293(on)]TJ 1.02 0 0 1 150.705 192.057 Tm [(distributed)-322(memory)-322(machines)-323(it)-322(is)-322(essential)-322(to)-323(ke)1(ep)-323(the)]TJ/F78 9.9626 Tf 1.02 0 0 1 407.18 192.057 Tm [(data)-322(locality)]TJ/F84 9.9626 Tf 1.02 0 0 1 461.316 192.057 Tm [(as)-322(high)]TJ 1.02 0 0 1 150.705 180.101 Tm [(as)-270(possible;)-283(this)-270(can)-270(be)-270(done)-271(thr)18(ough)-270(an)-270(appr)17(opriate)-270(data)-270(allocation)-270(strategy)109(.)]TJ 1.02 0 0 1 150.396 168.146 Tm [(The)-264(choice)-265(of)-264(the)-265(pr)18(econditioner)-264(is)-265(another)-264(very)-265(important)-264(factor)-265(that)-264(af)18(fects)]TJ 1.02 0 0 1 150.705 156.191 Tm [(ef)18(\002ciency)-247(of)-248(the)-248(impleme)1(nted)-248(application.)-311(Optimal)-248(data)-247(distribution)-248(r)18(equir)18(e-)]TJ 1.014 0 0 1 150.705 144.236 Tm [(ments)-247(for)-246(a)-247(given)-247(pr)18(econditioner)-247(may)-246(con\003ict)-247(with)-247(distribution)-246(r)17(equir)18(ements)]TJ 1.02 0 0 1 150.705 132.281 Tm [(of)-310(the)-311(r)18(est)-310(of)-311(the)-310(solver)72(.)-499(Finding)-311(the)-310(optimal)-310(trade-of)17(f)-310(may)-310(be)-310(very)-311(dif)18(\002cult)]TJ 1.016 0 0 1 150.705 120.326 Tm [(because)-246(it)-245(is)-246(application)-245(dependent.)-305(Possible)-246(solutions)-246(to)-245(these)-246(pr)18(oblems)-246(and)]TJ 0 g 0 G 1 0 0 1 320.07 90.438 Tm [(2)]TJ 0 g 0 G @@ -4609,7 +4609,7 @@ BT 0 0 1 rg 0 0 1 RG [-250(1)]TJ 0 g 0 G - [(;)-251(lower)-251(layers)-251(of)-250(the)-251(library)-251(indicate)-250(an)]TJ 1.005 0 0 1 99.895 518.447 Tm [(encapsulation)-247(r)18(elationship)-247(with)-247(upper)-247(layers.)-308(The)-247(ongoing)-247(discussion)-247(focuses)]TJ 1.018 0 0 1 99.895 506.491 Tm [(on)-245(the)-244(Fortran)-244(2008)-245(layer)-244(immediately)-245(below)-244(the)-245(application)-244(layer)72(.)-304(The)-244(serial)]TJ 0.98 0 0 1 99.596 494.536 Tm [(parts)-246(of)-245(the)-246(computation)-246(on)-245(each)-246(pr)18(ocess)-245(ar)18(e)-246(executed)-245(thr)18(ough)-246(calls)-245(to)-246(the)-246(serial)]TJ 0.98 0 0 1 99.895 482.581 Tm [(sparse)-243(BLAS)-243(subr)18(outines.)-312(In)-243(a)-243(similar)-243(way)113(,)-245(the)-243(inter)18(-pr)19(ocess)-243(message)-243(exchanges)]TJ 1 0 0 1 99.895 470.626 Tm [(ar)18(e)-251(encapsulated)-251(in)-251(an)-251(applicaiton)-251(layer)-251(that)-251(has)-251(been)-251(str)18(ongly)-251(inspir)18(ed)-251(by)-251(the)]TJ 0.987 0 0 1 99.895 458.671 Tm [(Basic)-251(Linear)-252(Algebra)-251(Communication)-251(Subr)18(outines)-251(\050BLACS\051)-252(library)-251([)]TJ + [(;)-251(lower)-251(layers)-251(of)-250(the)-251(library)-251(indicate)-250(an)]TJ 1.005 0 0 1 99.895 518.447 Tm [(encapsulation)-247(r)18(elationship)-247(with)-247(upper)-247(layers.)-308(The)-247(ongoing)-247(discussion)-247(focuses)]TJ 1.018 0 0 1 99.895 506.491 Tm [(on)-245(the)-244(Fortran)-244(2008)-245(layer)-244(immediately)-245(below)-244(the)-245(application)-244(layer)72(.)-304(The)-244(serial)]TJ 0.98 0 0 1 99.596 494.536 Tm [(parts)-246(of)-245(the)-246(computation)-246(on)-245(each)-246(pr)18(ocess)-245(ar)18(e)-246(executed)-245(thr)18(ough)-246(calls)-245(to)-246(the)-246(serial)]TJ 0.98 0 0 1 99.895 482.581 Tm [(sparse)-243(BLAS)-243(subr)18(outines.)-312(In)-243(a)-243(similar)-243(way)113(,)-245(the)-243(inter)18(-pr)19(ocess)-243(message)-243(exchanges)]TJ 1 0 0 1 99.895 470.626 Tm [(ar)18(e)-251(encapsulated)-251(in)-251(an)-251(application)-251(layer)-251(that)-251(has)-251(been)-251(str)18(ongly)-251(inspir)18(ed)-251(by)-251(the)]TJ 0.987 0 0 1 99.895 458.671 Tm [(Basic)-251(Linear)-252(Algebra)-251(Communication)-251(Subr)18(outines)-251(\050BLACS\051)-252(library)-251([)]TJ 1 0 0 rg 1 0 0 RG 1 0 0 1 396.344 458.671 Tm [(7)]TJ 0 g 0 G @@ -4622,7 +4622,7 @@ BT 0 g 0 G 0 g 0 G ET -1 0 0 1 207.727 270.025 cm +1 0 0 1 208.702 270.025 cm q .65 0 0 .65 0 0 cm q @@ -4631,7 +4631,7 @@ q Q Q 0 g 0 G -1 0 0 1 -207.727 -270.025 cm +1 0 0 1 -208.702 -270.025 cm BT /F84 9.9626 Tf 165.575 238.145 Td [(Figur)18(e)-250(1:)-310(PSBLAS)-250(library)-250(components)-250(hierar)18(chy)111(.)]TJ 0 g 0 G @@ -4652,85 +4652,94 @@ endobj /PTEX.FileName (./figures/psblas.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 928 0 R -/BBox [0 0 197 215] +/BBox [0 0 194 215] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 929 0 R ->>/Font << /R8 930 0 R>> +/R9 929 0 R +>>/Font << /R7 930 0 R>> >> -/Length 898 +/Length 872 /Filter /FlateDecode >> stream -xśµVMŹ7 ˝ëWčÖ4€Y‘ú>&@[HMl ‡˘câu·;{ţý’#QvvÝKĐÂĎ{#=RüĐđ«u€ÖÉŻ˙OóÓÇl÷gł°öăŻýá´7_ ¶çţ7ěŰ // ˘Ăl7÷¦É E„ŚŽ,E(%’ÝĚ«őîô°ťíúq{:ď~Üüe0sµŘŔíćłyőöý›µĽűyc>ź(ÚżM, -Ż Ľ”ěá3›"dQžŮ7_ŰłËXm2‚0— -Ľî(:HhU3vÜŞĹ“AŞ f6č=AÎAźÄ!9`łÇ -ŤPwćAt_UOϡOćOłćl8f˘ăPHÄYĄć«‡ĺŐĚ+k(*«¦XÁI䓉uyQĄ -Ĺá ˘ďąÉř*Ţcv ( ńĚ˙ôÚÇJĘBt«FpÍ©vvË×VţŐ‘” -„rÓ‘ű×&@^ -é˙2!)Őš\‘Ś÷Ľža®8Î7L¤ÂőźÇ )]aôŕĄ`;ˇvç ăp˝Şba=WYł¨Hj.8‰µ2Rt%ůÁ` R=EÝ 4˘{4_póXŐFwt{Š[Íf.óČvľ†Ę‘yÎĚĆGާÁxq€Čúš‹ú‚c—++SJëgšBr5XUäŰFZYMv8™\řH”M!‚˘%rl9ާ¸Ů›Śbőhľ0ÝgÔ3©EĹ-:ş‹Ľiľ>9ÎßŃň…/aëUËv±Ňu‹ß`ú®›Lk„¡ŔtŐ—ßöĽE÷ő¶Žżáćsů—Ľ0Č˝ýßI -~·śíŐĎăÎh§ŔP‰ó+‰I‰Ë`ä8Äwsâ~LĄĽ–U9‰–2ó˘ß”ÇM®F‘ -ÁóŐ޲ţ-ĂÉu1 éuÄóŠ -}¦öqëXË|Vb´A—Ó6QŠYˇ8Ő†% -Ű擎=…ĺËE˛A5) -í}óiV<\îrăDÝ âÖß7x¤U -«Ď˝'Ç›ÇÇůaÚ>=|9Ęh±Büu湣$îËLËŕq·–ŃĂĘź5×k^Ţ˝;>íN÷Űi™ZŠŹ\V+9ťDŁ­8îNËLÓG™÷×»~0+ľ’”ŕŠ'˘±íúmw>o÷;{·=źŽűEťý—»aĄĂѲîîÝâ8SË4Â%ŐÇĄ_ľśžNŰ#OÎŹ±éůüĐ +xśµVMŹ7 ˝ëWđÖ4€‘"őqL€¶»k==ďG1vvíú÷ ŤDى(Zřŕyo¨Ç'‰Äđ<řúë˙ÓŢ-ŽîĹQ{îÓ>lÜ»»Ĩžlî][F@„‰<+㬠›˝{łŢź¶3¬ź·ÇÓîÇÍźŽz_2¬H’Âćł{óáÓűu}÷ÓĆÝşwwNŽ1DVř«{ąűĹiĚII)ŔţŠ™ťŠb +2ĄúLڎ´gź˛Âä*˘” &­ë¤#iP˘Ś9e1<9â0†ÁĚŽB`Li0˘ É[ľÉuÂěĚč^MĎöa OîŃ­Ý‹óŔ¤¨‡ŐňxÜąz©fĐgŘ»"„˘a0ł+’1–µ çĘ„R­PŚe á‚ŮÓEČŁűí-F$§‚˘Uľă8ÖîÖyx¸Ęrę#rún–k#W^ďß:Á´”Ç˙•˘žď¨Áčs˝ľ~ űođě4 +’Đ`”3RŠ@¬ cĽŔ°Ţž–w>3^0bŽCRh Ő_ĎÚZAY‘Ă`HMĎPĎ7ąNtGó7Ǧ6J˝ç3Ü +0 jáŚE +ěŻŮE !&TĚJB&=cÍč“ŔäŚÉą5§a)}0EJK_ZĘ'—rŔŔbÄě23JT#˛ +R)CĎpË79Ăćh>3Ýł Úž,Łáv:¶ŠÇÚ&äY0t8˙s˙fŤ(>^ôŻ1ç‚ÍD´\Tů™ůş]ÍE‡f®5ë·rç0)Hń»ň×kcţWRk÷;pĆ đxř<ľí¤0úTO5FFĘ©bŚ)B޵±DĄXµŚ™ý¦<Úś|Ń*%¸]Ů×ĚěČkD/é—*Őy!!qűĚtl5:1j¸ËYŤ[BĂ“Łě–0ŮQ–Pw:Öä$Ď’ ZĘŞĐŢ7OłáaąËŤő„†[1˙»‘ F,…#PńH—‘ŕýóóü4m_źľęGE(”4Ă*G”x nÖu(€ „Y%-ď>^wÇűí´ĚŚ9(EXŐÝŐÓh‡Ýq™6úńérŐnĹŚ±–ŕŠ•´­úuw:mvpł=ťž‹zÄR{ecËwóq1žĐ/söAćç/Ç×ăöě}Í­űE±ĺŰ endstream endobj 932 0 obj << /Filter /FlateDecode +/Length 310 +>> +stream +xś]ŇAn0Đ˝OáäcĚ8‘ĐlŇM­Ş¶ öP±A„,zűj&I]<¤Źm1č{w<˝śę´ůÝű:çOŮü8Ő˛Ęuľ­YüYľ§ęšŕË”·G˛gľ ‹Ű_‡ĺëg|‘ńžß†‹ě>šhošű™<ą.C–u¨ßâz€űqd'µü[ +ÝýÄy|l `°ë[°Z‹ ĐŤ{6@»g×dž Ť us$6@$Ť6@ tČŘI?µl€¤SĄČHŃŠy6 iŮĎn}ľ­«ÔÍn„5®MOUţ.Í2/zĘK-îRźş +endstream +endobj +933 0 obj +<< +/Filter /FlateDecode /Subtype /Type1C -/Length 2887 +/Length 2770 >> stream -xśe–iXSWÇo É=Z¤-iʦ µ­m]‘Ö*ŐVYÔZQU (! KBI ,A8,!, Ö„M‚TĄ*(¶ÖQ¬ ÖśÇn:ťJg9—ą|‹vž~/÷ą÷žĺyß÷˙?ż÷Đ0‡%ŤFs ¤đÓ׋SbE‹ßë±b ±’IŃü?ćw0VbŤôĺĐ‘šV82ťŃÔ«Čň2*xŁÓhr}›żX’•&HHĚđ|÷ppř{k×®űóĎ&ĎăY˙ń ŕ§ Dž«©_(–¤đEŰ<ý©ŮBˇŕ„g‚0K’îÇŹ[\+ä'{î‰Xćů®˙{žŢ^^›ÖSŹÍ)ÇĄéžĎ#÷< öń ô ć'H…±i˙?‚a›ŻČO,IŰťž±76đÄ~~|P‚ Dčéĺý>†­ÂbobAŘ!,{ Ĺck0?l=€mŔvc{°MاŘgŘŘ~چ˝Š±°×0wŞxĆÇîѲiW—ě]ŇAť~Ęá‡}ż2ü&&ÎŚg^Ć·g YúęŇK-=˝ ,Ó'ťćăˇE oXhóafö±rMMⲌ¸îšÉ$ărö‘«s˛Ł‹Ýä(ĘŚGgm†ň:ť‘{-e sp­A˘O…*7¦Č+rT…/¨Q áȆic8'ˇ‰pżDűvĚĐë‰UěĘňšŇZlŐĘ(.YŠĂŕ\UDP˘DQˇ4@;@§đĎGš =śkîĺ’|Ş‘‹“âLx”.ÇĎ”…˙»ě{T¨Ř·‡ó/(‹Ęä†f»9Ío„fy1Ű'7;#ĆŇÎ}„pVRĂü6Ë$Çg´†\č ‚pč«Vo= XIrôW|N5őť˛w[Fŕçp8k@Ř‘b•>«36Ő´6–°­ŮÔ7莼'H_Žůý7xVkWRËÇÓ­'ÝáaY܉Śä¬ăů{!RUwsŃ e“ľÚÄf˛„źŚöţ8Ś·žKUEc#Ľm´ŽPÝtTNİÉ×˝Ö’ŇăçŐČ9?ýâ —ŤOČ׸j1{ćĘZr%É8¶gg\|뀌+Ëľ§Ŕ“ŃkSj/2ĄAŃ…R4Ý„ÓUç»3HúČ…Ą­&V˛«Kő°‚SzÍîB"Ăss -kµiqÖ±F|g©ş~ Đ&Ľ7©U3Zör@oŁWv=^ÂK;ĚăŢÇ ËËŐˇ -7´f'»ó˛ýěťs;H@ŇŁvú ¶wrśĐ#JăŹ-´{3t=áή+Ż.5@ĐVťÍă’ĺ8Ś,(Ř—CiW`Â÷”+Lp )Ţ}漵˛Z«©ĺÔ«j Ť´šl=2‹ V”Ĺý ×–…IÔAr7'â hF“¨şźRôďs.¬D"eł‘2ĎŮ–ĄÜů6JcÚt•VZÁD جlŘÚ'ћړu_Žß)4Şŕ.°° ‡[sŐ;´”U{Ěř'Ş:x z”†Ź€á¦iα,ęfç ×Ď-Ö:ôt]„V0r™ĹĹy%%EĐ­jĘru€ŐP%•V¤zlŽđé>1ÍťHęÍlH‡B7^˛8B 46Ë9˛¶Ľő8Č&˝ŚL}MEUV`5¬+nˇÄh(´Y‹=î5që|zĎA;—Äľ×+Ű Őm ËvvĽSŕÝBŐ¸K3F8v;‘–Ü?ăšEUD›us5Ěš’ňBNA^a^†ť]Xłą…Zwx˛´¸Ľ°n~A^dn錹r®żu¬‡Ł®•Ą)4R说~ÉE§qÖě3梌ćy3 ástęÓŘp§:gËIŞTç͸OyvüÔ©ů¦Î8SĚäy9>űâ,9Ašńŕ µŐůň÷č݇.¬âŔ×l…*G«„ Ł n‹Âq8¦íP¶Jí1ć ÖűFfX2[Z›,Í%ş=·¸ş¤ -ęµ»yŕśUts'7ěWäÇđĄ™*L¬ŔaŢäđ`ÓŘ$‡e ×5Ę=NÁ&Co?5Dnüž …ÚŐ7 'a«Řřx‡wşQ¬Ťöű ]Ł\KľL™vÂÜŐßT§5ręS šZĚŤ-v^űÁýa’Ł©ÜT^~BÉ6ŕ“üy ýrsüńo4QFĚ­…wşśđhh@ça˙ŰĘF4 -´ÇĐ0»˝¸ˇ¤NĂ‹5gZŻvŰ'á×pHŐ/é81üm=…Ś&«Ň7żFýźsaKľfGÁ‹ân/W.šť%$dV˝ŢŠ<®ykMP$‰gŞJË2ž3W4ŽŢ· —6”tZgŁŮnˇěűVťH"\٧?Á3ˇ˛G»‡ţšÜÝ‹şhLř^]~Í"KÎ""Ś-ÉČ‹›3l-ͶŚŐôľPŮĄ‚Xś§!Ő3Ö -"d~+[Ć,ĘČÍU@ TT(Ş«§.>ľ*Ů#ňI˘DaV, ‡Ű†CCĐmţŘń6~µZ'éŕÓČŁ~Ţ—S$'ŮI&2š™¬@s©ˇÎäQ ŠĚÔNĘţü„?~đűwˇ×I×)Řax\ęż62$Očĺt%ץÖQíâyú´_gčćy:»’Y[j(­‚ »FEőÎTV©µT®ą&<°"§^Ä/xQY¸‚ŻŮ­psBĺ”+TíóÎí´Ö§Čř”ŽôTjˇ0Vźx(„Oâ\ -IZąt4¤Źw!}^€gě˝—ú€h9@±^č Ň…s2•=3B2H>ÉçynŢĚű7ŠC‰#ţhńÚď-whčÇGtBŚV˛Őşř`uŢ1čFć3ŃvđřçÓ÷ŕ´ŰoÝ34\z"ž“,P&+š´®żÚ»oB03Ľĺ㣶xsÉÝä!FáŽ/†m'~ĽęŚn?ŕßvaÝDëŃ÷ě+°Ą¸5ďšôt0Ü ¶ć+ÉÔ·ĆsRz…tĄJ–xFzëţöÁQîč`űĽ/dŹŠş2›ĺž™j@7GŰú.ş?Üwyc$O‘śŔI‘(SĄME®ßŚô| Áő^`‚2!-Ť›’"VîIN™"Ě‚B-ĚÎeł/uV9:Î6:.ǰ˙MÉŞH +xśťViTSW!ä˝KĹ´%ó„&Ô¶¶uC­b=‚‚;ZdAİ) KÂ’HÉM˛…5"\±"¸Tm).`«čŚíŘ:ĄöĚ}Ěăðçt>ĎÇ{ď9˙ű˙ýË˝ ĚŢc0ŽA I‚´•˘¤háězĺĘ ŮQ‹™Nż™öbQľ‹O őî\YxČFGkđ…As ,â稡-‡ŽK÷ěŕ="ňu!™ Šl®”(Ő—k+!°”g‡ói-ˇńWä„ö´;rq˙™ţ ?GDNŽ,§ÓxäNćžtľhP6 +żżś»9ĆcSEtJRZ)öu§“HňĚ™SUB'‘HUŹ{ks+4_´†ŕd&Úš”}®hŢOČ}ŚŢŰö|Y`TZPś(ĐHŹĎ ’reDąö$¬€ łTÁź‰'`°Bé_8hŐN¶ ŮÎÝżčE;đ8ˇ´]¸·OD€­ŤÇFĎ ‰Ú`b<śd–,@ů5řNť¬Z=„°ö]˛ś,W)+y5ŮUćš:KGş)!Z$ń ă˙Pé%qňŔ,®Ś¨Ö—k ś*—Eńi=ˇ)(đS6ušĐő^TŢÍřדJC2e‹ Ĺ&©ÜS čŹQ*®mÓë-Z€á¨MňZp +/B˛f,™ř=•!Gçf¶šĎ• +/ČDFÂK/ŻÖÜH>&kj再€Mq•Ťą&j]“Óĺ›ČsÔ™3€ľAwÉB´ĄŔUyŞ˘X•:E‰¸L\’Á¦€ź@kĚÓüáÄ®Śş4xśuLş=ľ{J̓ѫ«đŇŠbťNh%4¨›fÇXĐŇ\hrť¸5)A(UäĚvR¤UëŐŕ +ýľľíđČĹnó`/§R’";!ÜŘě–[|tć51Gδť‰©Yó]2âž:yµú> ü Ý*Ă=0Ň—2‰§şĂ+W±ľ°)ĺµ€aĘĹě4ô}ú3g€Úw‡”ĘsUŮó«űů(„€ŞÖlłÄvŘčÁĘ-á~bc†ŮÜ`j,Ö”hJůęrM,-ÖĆž‹-ÂĽ}˝r_Ö‰ĂI†<&N¨_ÔŤţކÁywrkL˙ZËJč:íó%[JK[ëÍŹ–ů‡ŃD†\«ĎE§đşu +%ž)±0,ŁH6ŢbaR‰” yf3‘ĺúŚRI™KJ…¨$‚U[|Ýýšwů)i鹊˘Bnş¤@ĄPR©čËđ II„± x<ęĺ‰ćľA^w{ťvĂ›˝[Šiň¤Ë]Z9¬…¦Ž®–2[‘Q­§aOM{K‡Ą¦ ^‚­Ş&ąĐů3 ÉÎü‰‚ËüŘ‘·ßë(Íňhío*ŻéąŔ/A/ČK׹öfiR-Ď_ c@ (ţĐŢ#·_ÎF4QĂSNSźO:sľ­]€”5ř®’üňٰCDˇžvbeeZΠ­€\ó\Řfę-'”;Šç)˛ź^M&‹Ĺ"aŁÄŇÖŘŘÚ*nňŮÔąMb˘čŢ“ÓwĎüµ3g8˝LÇ9‹$…Š\©«J‹Ąe€ÓQ[–č ٤‰ÂřăYŃ0~ŃěýÇŽĆś”甤ĂT°+ěĐÖ5{Ż"vOŚ·Ńń¬FśăgÔŞk\+a]ˇ1p:˛»{óθ"đ÷Go}M»Śń—\‹î‡WÁŐľÓ7ú2ăşxíÇŞSjýÁ)|:ă×Ifä¨ÁýôŠ +Í ~& +uˇ˛X…Ż”+;ITj Ú2¬ňţL +ˇ9 —ď-ś}ŤĺÍÓNÍ óKTő’‰J§7A0Z·?P@v€´] ÎžŽşś6 /Ăłu¶®á«Ý@4 čŐčÚ™W”BNĐ,Z@ ˘ÜÖ­‹ú7:ŠÝ3ţěč!Őtź~zƤDh1™S»_‘ˇáŇy8Ú„|źż8óNp_m˙0(DË;–}LęŰ réůµË: +ÁÓˇ€ő›ąŻ÷ŕÓŰéý¬\j!ÁFúŮÎ-Ól‹ÓĐĂm÷‘čŰ ‡Îśqt–"ČW_uöÂoŔß‘Ą4căÎŐ»ŤÂßÝyśç4cCşpűÂĎ&v"9Žßům<á=˙'^ÖGä˝s »##w{…?»ÝĐ;rÇż8Nz ÇťC`x ÷Ö7gٶďK‰ŮÉcË«©ŕ +YŤwżód^·ŢŃńQ±ă| ű/üH… endstream endobj -938 0 obj +939 0 obj << -/Length 9368 +/Length 9520 >> stream 0 g 0 G 0 g 0 G BT -/F84 9.9626 Tf 1.02 0 0 1 150.705 706.129 Tm [(assigned)-295(to)-294(a)-295(pr)17(oce)1(ss)-295(that)-295(will)-295(own)-294(the)-295(corr)18(esponding)-295(r)18(ow)-295(in)-295(the)-295(coef)18(\002cient)]TJ 1.02 0 0 1 150.705 694.174 Tm [(matrix)-247(and)-246(will)-247(carry)-247(out)-247(all)-246(r)17(elated)-247(computations.)-308(This)-247(allocation)-247(strategy)-247(is)]TJ 0.98 0 0 1 150.705 682.219 Tm [(equivalent)-251(to)-251(a)-251(partition)-252(of)-251(the)-251(discr)19(etization)-252(mesh)-251(into)]TJ/F78 9.9626 Tf 0.98 0 0 1 390.229 682.219 Tm [(sub-domains)]TJ/F84 9.9626 Tf 0.98 0 0 1 440.314 682.219 Tm [(.)-315(Our)-251(library)]TJ 1.02 0 0 1 150.705 670.263 Tm [(supports)-297(any)-298(distribution)-297(that)-297(keeps)-298(together)-297(the)-297(coef)17(\002)1(cients)-297(of)-298(each)-297(matrix)]TJ 1.02 0 0 1 150.705 658.308 Tm [(r)18(ow;)-366(ther)18(e)-326(ar)18(e)-325(no)-326(other)-325(constraints)-325(on)-326(the)-325(variable)-326(assignment)1(.)-545(This)-326(choice)]TJ 1.02 0 0 1 150.705 646.353 Tm [(is)-276(consistent)-275(with)-276(simple)-276(data)-276(dist)1(ributions)-276(such)-276(as)]TJ/F145 9.9626 Tf 1 0 0 1 383.652 646.353 Tm [(CYCLIC\050N\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 433.526 646.353 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 453.532 646.353 Tm [(BLOCK)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.684 646.353 Tm [(,)-276(as)]TJ 1.02 0 0 1 150.286 634.398 Tm [(well)-256(as)-256(completely)-256(arbitrary)-256(assignments)-256(of)-256(equation)-256(indices)-256(to)-256(pr)18(ocesses.)-337(In)]TJ 1.002 0 0 1 150.406 622.443 Tm [(particular)-250(it)-250(is)-251(consistent)-250(with)-250(the)-250(usage)-250(of)-251(graph)-250(partitioning)-250(tools)-250(commonly)]TJ 1.02 0 0 1 150.705 610.488 Tm [(available)-288(in)-288(the)-289(literatur)18(e,)-299(e.g.)-434(METIS)-288([)]TJ +/F84 9.9626 Tf 1.02 0 0 1 150.705 706.129 Tm [(assigned)-295(to)-294(a)-295(pr)17(oce)1(ss)-295(that)-295(will)-295(own)-294(the)-295(corr)18(esponding)-295(r)18(ow)-295(in)-295(the)-295(coef)18(\002cient)]TJ 1.02 0 0 1 150.705 694.174 Tm [(matrix)-247(and)-246(will)-247(carry)-247(out)-247(all)-246(r)17(elated)-247(computations.)-308(This)-247(allocation)-247(strategy)-247(is)]TJ 0.988 0 0 1 150.705 682.219 Tm [(equivalent)-253(to)-253(a)-252(partition)-253(of)-253(the)-253(discr)18(etization)-252(mesh)-253(into)]TJ/F78 9.9626 Tf 0.988 0 0 1 392.332 682.219 Tm [(sub-domains)]TJ/F84 9.9626 Tf 0.988 0 0 1 442.826 682.219 Tm [(;)-253(our)-253(library)]TJ 1.02 0 0 1 150.705 670.263 Tm [(supports)-297(any)-298(distribution)-297(that)-297(keeps)-298(together)-297(the)-297(coef)17(\002)1(cients)-297(of)-298(each)-297(matrix)]TJ 1.02 0 0 1 150.705 658.308 Tm [(r)18(ow;)-366(ther)18(e)-326(ar)18(e)-325(no)-326(other)-325(constraints)-325(on)-326(the)-325(variable)-326(assignment)1(.)-545(This)-326(choice)]TJ 1.02 0 0 1 150.705 646.353 Tm [(is)-276(consistent)-275(with)-276(simple)-276(data)-276(dist)1(ributions)-276(such)-276(as)]TJ/F147 9.9626 Tf 1 0 0 1 383.652 646.353 Tm [(CYCLIC\050N\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 433.526 646.353 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 453.532 646.353 Tm [(BLOCK)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.684 646.353 Tm [(,)-276(as)]TJ 1.02 0 0 1 150.286 634.398 Tm [(well)-256(as)-256(completely)-256(arbitrary)-256(assignments)-256(of)-256(equation)-256(indices)-256(to)-256(pr)18(ocesses.)-337(In)]TJ 1.002 0 0 1 150.406 622.443 Tm [(particular)-250(it)-250(is)-251(consistent)-250(with)-250(the)-250(usage)-250(of)-251(graph)-250(partitioning)-250(tools)-250(commonly)]TJ 1.02 0 0 1 150.705 610.488 Tm [(available)-288(in)-288(the)-289(literatur)18(e,)-299(e.g.)-434(METIS)-288([)]TJ 1 0 0 rg 1 0 0 RG 1 0 0 1 326.838 610.488 Tm [(14)]TJ 0 g 0 G - 1.02 0 0 1 336.801 610.488 Tm [(].)-433(Dense)-289(vectors)-288(conform)-288(to)-288(sparse)]TJ 0.98 0 0 1 150.705 598.532 Tm [(matrices,)-228(that)-221(is,)-229(the)-221(entries)-221(of)-222(a)-221(vector)-221(follow)-222(the)-221(same)-222(distribution)-221(of)-221(the)-222(matrix)]TJ 1 0 0 1 150.705 586.577 Tm [(r)18(ows.)]TJ 1.02 0 0 1 165.649 573.93 Tm [(W)90(e)-290(assume)-290(that)-291(the)-290(sparse)-290(matrix)-290(is)-291(built)-290(in)-290(parallel,)-302(wher)18(e)-290(each)-291(pr)18(ocess)]TJ 1.002 0 0 1 150.705 561.974 Tm [(generates)-249(its)-249(own)-249(portion.)-310(W)92(e)-249(never)-249(r)18(equir)18(e)-249(that)-250(the)-249(entir)18(e)-249(matrix)-249(be)-249(available)]TJ 0.98 0 0 1 150.705 550.019 Tm [(on)-244(a)-244(single)-244(node.)-313(However)76(,)-247(i)1(t)-245(is)-244(possible)-244(to)-244(hold)-244(the)-244(entir)19(e)-244(matrix)-244(in)-245(on)1(e)-245(pr)19(ocess)]TJ 0.98 0 0 1 150.705 538.064 Tm [(and)-198(distribute)-199(it)-198(explicitly)]TJ + 1.02 0 0 1 336.801 610.488 Tm [(].)-433(Dense)-289(vectors)-288(conform)-288(to)-288(sparse)]TJ 0.98 0 0 1 150.705 598.532 Tm [(matrices,)-228(that)-221(is,)-229(the)-221(entries)-221(of)-222(a)-221(vector)-221(follow)-222(the)-221(same)-222(distribution)-221(of)-221(the)-222(matrix)]TJ 1 0 0 1 150.705 586.577 Tm [(r)18(ows.)]TJ 1.02 0 0 1 165.649 573.93 Tm [(W)90(e)-290(assume)-290(that)-291(the)-290(sparse)-290(matrix)-290(is)-291(built)-290(in)-290(parallel,)-302(wher)18(e)-290(each)-291(pr)18(ocess)]TJ 0.98 0 0 1 150.705 561.974 Tm [(generates)-234(its)-235(own)-234(portion:)-306(we)-235(never)]TJ/F78 9.9626 Tf 0.98 0 0 1 307.419 561.974 Tm [(r)18(equir)19(e)]TJ/F84 9.9626 Tf 0.98 0 0 1 337.204 561.974 Tm [(that)-234(the)-235(entir)19(e)-235(matrix)-234(be)-235(available)-234(on)]TJ 0.98 0 0 1 150.705 550.019 Tm [(a)-204(single)-204(node.)-299(However)75(,)-214(it)-204(is)-204(possible)-204(to)-204(hold)-205(th)1(e)-205(entir)19(e)-204(matrix)-204(in)-204(one)-204(pr)18(ocess)-204(and)]TJ 1.02 0 0 1 150.705 538.064 Tm [(distribute)-258(it)-258(explicitly)]TJ 0 0 1 rg 0 0 1 RG -/F84 7.5716 Tf 1 0 0 1 260.936 541.68 Tm [(1)]TJ +/F84 7.5716 Tf 1 0 0 1 247.424 541.68 Tm [(1)]TJ 0 g 0 G -/F84 9.9626 Tf 0.98 0 0 1 265.22 538.064 Tm [(,)-210(even)-198(though)-199(the)-198(r)18(esulting)-198(memory)-199(bottleneck)-198(would)]TJ 1 0 0 1 150.705 526.109 Tm [(make)-250(this)-250(option)-250(unattractive)-250(in)-250(most)-250(cases.)]TJ/F75 11.9552 Tf 0 -33.074 Td [(2.1)-1000(Basic)-250(Nomenclature)]TJ/F84 9.9626 Tf 1.02 0 0 1 150.705 472.73 Tm [(Our)-254(computational)-254(model)-255(implies)-254(that)-254(the)-254(data)-255(alloc)1(ation)-255(on)-254(the)-254(parallel)-254(dis-)]TJ 0.981 0 0 1 150.705 460.774 Tm [(tributed)-253(memory)-254(machine)-254(is)-253(guided)-254(by)-253(the)-254(str)8(uctur)19(e)-254(of)-253(the)-254(physical)-253(model,)-254(and)]TJ 1 0 0 1 150.705 448.819 Tm [(speci\002cally)-250(by)-250(the)-250(discr)18(etization)-250(mesh)-250(of)-250(the)-250(PDE.)]TJ 1.02 0 0 1 165.649 436.172 Tm [(Each)-341(point)-341(of)-341(the)-341(discr)18(etization)-341(mesh)-341(will)-341(have)-341(\050at)-341(least\051)-341(one)-341(associated)]TJ 1.02 0 0 1 150.705 424.216 Tm [(equation/variable,)-353(and)-332(ther)18(efor)17(e)-331(one)-332(index.)-564(W)91(e)-332(say)-332(that)-332(point)]TJ/F78 9.9626 Tf 1 0 0 1 440.497 424.216 Tm [(i)]TJ 1.02 0 0 1 446.831 424.216 Tm [(depends)]TJ/F84 9.9626 Tf 1.02 0 0 1 482.953 424.216 Tm [(on)]TJ 1.02 0 0 1 150.406 412.261 Tm [(point)]TJ/F78 9.9626 Tf 1 0 0 1 177.509 412.261 Tm [(j)]TJ/F84 9.9626 Tf 1.02 0 0 1 183.194 412.261 Tm [(if)-275(the)-274(equation)-275(for)-274(a)-275(variable)-275(associate)1(d)-275(with)]TJ/F78 9.9626 Tf 1 0 0 1 386.696 412.261 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 392.451 412.261 Tm [(contains)-275(a)-274(term)-275(in)]TJ/F78 9.9626 Tf 1 0 0 1 476.753 412.261 Tm [(j)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.647 412.261 Tm [(,)-282(or)]TJ 1.02 0 0 1 150.705 400.306 Tm [(equivalently)-262(if)]TJ/F78 9.9626 Tf 1 0 0 1 218.767 400.306 Tm [(a)]TJ/F78 7.5716 Tf 4.589 -1.96 Td [(i)-67(j)]TJ/F190 10.3811 Tf 8.519 1.96 Td [(6)]TJ/F192 10.3811 Tf 0.249 0 Td [(=)]TJ/F84 9.9626 Tf 1.02 0 0 1 243.403 400.306 Tm [(0.)-354(After)-262(the)-262(partition)-262(of)-262(the)-262(discr)18(etization)-262(mesh)-262(into)]TJ/F78 9.9626 Tf 1.02 0 0 1 478.378 400.306 Tm [(sub-)]TJ 1.02 0 0 1 150.705 388.351 Tm [(domains)]TJ/F84 9.9626 Tf 1.02 0 0 1 188.452 388.351 Tm [(assigned)-326(to)-325(the)-326(parallel)-325(pr)17(ocesses,)-345(we)-326(classify)-326(the)-325(points)-326(of)-325(a)-326(given)]TJ 1 0 0 1 150.705 376.396 Tm [(sub-domain)-250(as)-250(following.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 251.707 538.064 Tm [(,)-261(even)-258(though)-258(the)-258(r)17(e)1(sulting)-258(memory)-258(bottleneck)-258(would)]TJ 1 0 0 1 150.705 526.109 Tm [(make)-250(this)-250(option)-250(unattractive)-250(in)-250(most)-250(cases.)]TJ/F75 11.9552 Tf 0 -33.074 Td [(2.1)-1000(Basic)-250(Nomenclature)]TJ/F84 9.9626 Tf 1.02 0 0 1 150.705 472.73 Tm [(Our)-254(computational)-254(model)-255(implies)-254(that)-254(the)-254(data)-255(alloc)1(ation)-255(on)-254(the)-254(parallel)-254(dis-)]TJ 0.981 0 0 1 150.705 460.774 Tm [(tributed)-253(memory)-254(machine)-254(is)-253(guided)-254(by)-253(the)-254(str)8(uctur)19(e)-254(of)-253(the)-254(physical)-253(model,)-254(and)]TJ 1 0 0 1 150.705 448.819 Tm [(speci\002cally)-250(by)-250(the)-250(discr)18(etization)-250(mesh)-250(of)-250(the)-250(PDE.)]TJ 1.02 0 0 1 165.649 436.172 Tm [(Each)-341(point)-341(of)-341(the)-341(discr)18(etization)-341(mesh)-341(will)-341(have)-341(\050at)-341(least\051)-341(one)-341(associated)]TJ 1.02 0 0 1 150.705 424.216 Tm [(equation/variable,)-353(and)-332(ther)18(efor)17(e)-331(one)-332(index.)-564(W)91(e)-332(say)-332(that)-332(point)]TJ/F78 9.9626 Tf 1 0 0 1 440.497 424.216 Tm [(i)]TJ 1.02 0 0 1 446.831 424.216 Tm [(depends)]TJ/F84 9.9626 Tf 1.02 0 0 1 482.953 424.216 Tm [(on)]TJ 1.02 0 0 1 150.406 412.261 Tm [(point)]TJ/F78 9.9626 Tf 1 0 0 1 177.509 412.261 Tm [(j)]TJ/F84 9.9626 Tf 1.02 0 0 1 183.194 412.261 Tm [(if)-275(the)-274(equation)-275(for)-274(a)-275(variable)-275(associate)1(d)-275(with)]TJ/F78 9.9626 Tf 1 0 0 1 386.696 412.261 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 392.451 412.261 Tm [(contains)-275(a)-274(term)-275(in)]TJ/F78 9.9626 Tf 1 0 0 1 476.753 412.261 Tm [(j)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.647 412.261 Tm [(,)-282(or)]TJ 1.02 0 0 1 150.705 400.306 Tm [(equivalently)-262(if)]TJ/F78 9.9626 Tf 1 0 0 1 218.767 400.306 Tm [(a)]TJ/F78 7.5716 Tf 4.589 -1.96 Td [(i)-67(j)]TJ/F195 10.3811 Tf 8.519 1.96 Td [(6)]TJ/F197 10.3811 Tf 0.249 0 Td [(=)]TJ/F84 9.9626 Tf 1.02 0 0 1 243.403 400.306 Tm [(0.)-354(After)-262(the)-262(partition)-262(of)-262(the)-262(discr)18(etization)-262(mesh)-262(into)]TJ/F78 9.9626 Tf 1.02 0 0 1 478.378 400.306 Tm [(sub-)]TJ 1.02 0 0 1 150.705 388.351 Tm [(domains)]TJ/F84 9.9626 Tf 1.02 0 0 1 188.452 388.351 Tm [(assigned)-326(to)-325(the)-326(parallel)-325(pr)17(ocesses,)-345(we)-326(classify)-326(the)-325(points)-326(of)-325(a)-326(given)]TJ 1 0 0 1 150.705 376.396 Tm [(sub-domain)-250(as)-250(following.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.003 Td [(Internal.)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 194.311 354.393 Tm [(An)-313(internal)-313(point)-312(of)-313(a)-313(given)-313(domain)]TJ/F78 9.9626 Tf 1.02 0 0 1 363.064 354.393 Tm [(depends)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.994 354.393 Tm [(only)-313(on)-313(points)-312(of)-313(the)]TJ 1.02 0 0 1 175.611 342.438 Tm [(same)-387(domain.)-729(If)-387(all)-387(points)-387(of)-386(a)-387(domain)-387(ar)17(e)-386(assigned)-387(to)-387(one)-387(pr)18(ocess,)]TJ 0.991 0 0 1 175.611 330.483 Tm [(then)-252(a)-252(computational)-251(step)-252(\050e.g.,)-252(a)-252(matrix-vector)-252(pr)19(oduct\051)-252(of)-252(the)-252(equations)]TJ 1.02 0 0 1 175.611 318.527 Tm [(associated)-369(with)-368(the)-369(internal)-368(points)-369(r)18(equir)18(es)-369(no)-368(data)-369(items)-368(fr)17(om)-368(other)]TJ 1 0 0 1 175.611 306.572 Tm [(domains)-250(and)-250(no)-250(communications.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 194.311 354.393 Tm [(An)-293(internal)-294(point)-293(of)-294(a)-293(given)-293(sub-domain)]TJ/F78 9.9626 Tf 1.02 0 0 1 381.125 354.393 Tm [(depends)]TJ/F84 9.9626 Tf 1.02 0 0 1 416.858 354.393 Tm [(only)-293(on)-294(points)-293(of)]TJ 1.02 0 0 1 175.611 342.438 Tm [(the)-259(same)-259(sub-domain.)-346(If)-259(all)-259(point)1(s)-259(of)-259(a)-259(sub-domain)-259(ar)17(e)-259(assigned)-259(to)-259(one)]TJ 1.018 0 0 1 175.313 330.483 Tm [(pr)18(ocess,)-246(then)-246(a)-245(computational)-246(step)-245(\050e.g.,)-246(a)-246(matrix-vector)-245(pr)18(oduct\051)-246(of)-246(the)]TJ 0.994 0 0 1 175.611 318.527 Tm [(equations)-250(associated)-251(with)-250(the)-251(internal)-250(points)-251(r)18(equir)18(es)-250(no)-250(data)-251(items)-250(fr)18(om)]TJ 1 0 0 1 175.611 306.572 Tm [(other)-250(sub-domains)-250(and)-250(no)-250(communications.)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -22.695 Td [(Boundary)92(.)]TJ 0 g 0 G -/F84 9.9626 Tf 0.98 0 0 1 201.713 283.877 Tm [(A)-237(point)-238(of)-237(a)-237(given)-237(domain)-238(is)-237(a)-237(boundary)-237(point)-238(if)-237(it)]TJ/F78 9.9626 Tf 0.98 0 0 1 420.258 283.877 Tm [(depends)]TJ/F84 9.9626 Tf 0.98 0 0 1 454.042 283.877 Tm [(on)-237(points)]TJ 1 0 0 1 175.611 271.922 Tm [(belonging)-250(to)-250(other)-250(domains.)]TJ +/F84 9.9626 Tf 1.013 0 0 1 201.713 283.877 Tm [(A)-246(point)-247(of)-246(a)-246(given)-247(sub-domain)-246(is)-246(a)-247(boundary)-246(point)-246(if)-247(i)1(t)]TJ/F78 9.9626 Tf 1.013 0 0 1 448.019 283.877 Tm [(depends)]TJ/F84 9.9626 Tf 1.013 0 0 1 483.032 283.877 Tm [(on)]TJ 1 0 0 1 175.313 271.922 Tm [(points)-250(belonging)-250(to)-250(other)-250(sub-domains.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -22.695 Td [(Halo.)]TJ +/F75 9.9626 Tf -24.608 -22.695 Td [(Halo.)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 179.925 249.227 Tm [(A)-357(halo)-357(point)-356(for)-357(a)-357(given)-357(domain)-357(is)-357(a)-357(point)-356(belonging)-357(to)-357(another)-357(do-)]TJ 1.009 0 0 1 175.611 237.271 Tm [(main)-248(such)-247(that)-247(ther)17(e)-247(is)-248(a)-247(boundary)-248(point)-247(which)]TJ/F78 9.9626 Tf 1.009 0 0 1 388.252 237.271 Tm [(depends)]TJ/F84 9.9626 Tf 1.009 0 0 1 423.138 237.271 Tm [(on)-247(it.)-308(Whenever)]TJ 1.02 0 0 1 175.313 225.316 Tm [(performing)-297(a)-297(computational)-297(step,)-311(such)-297(as)-297(a)-297(matrix-vector)-297(pr)17(oduct,)-310(the)]TJ 1.012 0 0 1 175.333 213.361 Tm [(values)-247(associated)-247(with)-247(halo)-248(points)-247(ar)18(e)-247(r)18(equested)-248(fr)18(om)-247(other)-247(domains.)-307(A)]TJ 1.005 0 0 1 175.611 201.406 Tm [(boundary)-248(point)-248(of)-248(a)-247(given)-248(domain)-248(is)-248(usually)-248(a)-248(halo)-247(point)-248(for)-248(some)-248(other)]TJ 0.999 0 0 1 175.611 189.451 Tm [(domain)]TJ +/F84 9.9626 Tf 0.989 0 0 1 179.925 249.227 Tm [(A)-252(halo)-252(point)-253(f)1(or)-253(a)-252(given)-252(sub-domain)-252(is)-252(a)-253(poi)1(nt)-253(belonging)-252(to)-252(another)-252(sub-)]TJ 0.98 0 0 1 175.611 237.271 Tm [(domain)-228(such)-227(that)-228(ther)18(e)-228(i)1(s)-228(a)-228(boundary)-228(point)-227(which)]TJ/F78 9.9626 Tf 0.98 0 0 1 391.694 237.271 Tm [(depends)]TJ/F84 9.9626 Tf 0.98 0 0 1 425.385 237.271 Tm [(on)-228(it.)-307(Whenever)]TJ 1.02 0 0 1 175.313 225.316 Tm [(performing)-297(a)-297(computational)-297(step,)-311(such)-297(as)-297(a)-297(matrix-vector)-297(pr)17(oduct,)-310(the)]TJ 0.989 0 0 1 175.333 213.361 Tm [(values)-252(associated)-253(with)-252(halo)-253(points)-252(ar)18(e)-252(r)18(equested)-253(fr)19(om)-253(other)-252(sub-domains.)]TJ 0.993 0 0 1 175.223 201.406 Tm [(A)-251(boundary)-251(point)-251(of)-251(a)-251(given)-251(sub-domain)-251(is)-251(usually)-251(a)-251(halo)-251(point)-251(for)-251(some)]TJ 1.02 0 0 1 175.611 189.451 Tm [(other)-255(sub-domain)]TJ 0 0 1 rg 0 0 1 RG -/F84 7.5716 Tf 1 0 0 1 209.58 193.067 Tm [(2)]TJ +/F84 7.5716 Tf 1 0 0 1 255.982 193.067 Tm [(2)]TJ 0 g 0 G -/F84 9.9626 Tf 0.999 0 0 1 213.864 189.451 Tm [(;)-250(ther)18(efor)18(e)-249(the)-249(car)18(dinality)-250(of)-249(the)-250(boundary)-249(points)-249(set)-250(determines)]TJ 1 0 0 1 175.611 177.496 Tm [(the)-250(amount)-250(of)-250(data)-250(sent)-250(to)-250(other)-250(domains.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 260.266 189.451 Tm [(;)-260(ther)17(efor)18(e)-255(the)-255(car)18(dinality)-256(of)-255(the)-255(boundary)-255(points)-255(set)]TJ 1 0 0 1 175.611 177.496 Tm [(determines)-250(the)-250(amount)-250(of)-250(data)-250(sent)-250(to)-250(other)-250(sub-domains.)]TJ 0 g 0 G ET q @@ -4747,9 +4756,9 @@ ET endstream endobj -951 0 obj +952 0 obj << -/Length 5241 +/Length 5249 >> stream 0 g 0 G @@ -4758,7 +4767,7 @@ stream BT /F75 9.9626 Tf 99.895 706.129 Td [(Overlap.)]TJ 0 g 0 G -/F84 9.9626 Tf 1.006 0 0 1 144.059 706.129 Tm [(An)-248(overlap)-248(point)-248(is)-248(a)-248(boundary)-249(point)-248(assigned)-248(to)-248(multiple)-248(domains.)]TJ 0.983 0 0 1 124.413 694.174 Tm [(Any)-254(ope)1(ration)-254(that)-253(involves)-254(an)-253(overlap)-254(point)-253(has)-254(to)-253(be)-254(r)19(eplicated)-254(for)-253(each)]TJ 1 0 0 1 124.802 682.219 Tm [(assignment.)]TJ 0.98 0 0 1 99.895 663.276 Tm [(Overlap)-232(points)-233(do)-232(not)-233(usually)-232(exist)-233(in)-232(the)-233(basic)-232(data)-233(distributions;)-240(however)-232(they)]TJ 0.989 0 0 1 99.895 651.321 Tm [(ar)18(e)-251(a)-252(featur)19(e)-252(of)-251(Domain)-252(Decomposi)1(tion)-252(Schwarz)-251(pr)18(econditioners)-251(which)-252(ar)18(e)-251(the)]TJ 1 0 0 1 99.895 639.365 Tm [(subject)-250(of)-250(r)18(elated)-250(r)18(esear)18(ch)-250(work)-250([)]TJ +/F84 9.9626 Tf 1.02 0 0 1 144.059 706.129 Tm [(An)-423(overlap)-424(point)-423(is)-423(a)-424(boundary)-423(point)-423(assigned)-424(to)-423(multiple)-423(sub-)]TJ 0.98 0 0 1 124.802 694.174 Tm [(domains.)-298(Any)-199(operation)-200(that)-200(inv)1(olves)-200(an)-200(overlap)-199(point)-200(has)-199(to)-200(be)-200(r)19(eplicated)]TJ 1 0 0 1 124.802 682.219 Tm [(for)-250(each)-250(assignment.)]TJ 0.98 0 0 1 99.895 663.276 Tm [(Overlap)-232(points)-233(do)-232(not)-233(usually)-232(exist)-233(in)-232(the)-233(basic)-232(data)-233(distributions;)-240(however)-232(they)]TJ 0.989 0 0 1 99.895 651.321 Tm [(ar)18(e)-251(a)-252(featur)19(e)-252(of)-251(Domain)-252(Decomposi)1(tion)-252(Schwarz)-251(pr)18(econditioners)-251(which)-252(ar)18(e)-251(the)]TJ 1 0 0 1 99.895 639.365 Tm [(subject)-250(of)-250(r)18(elated)-250(r)18(esear)18(ch)-250(work)-250([)]TJ 1 0 0 rg 1 0 0 RG [(4)]TJ 0 g 0 G @@ -4766,7 +4775,7 @@ BT 1 0 0 rg 1 0 0 RG [-250(3)]TJ 0 g 0 G - [(].)]TJ 0.995 0 0 1 114.839 627.41 Tm [(W)92(e)-251(denote)-251(the)-251(sets)-251(of)-251(internal,)-251(boundary)-251(and)-251(halo)-251(points)-251(for)-251(a)-251(given)-251(subdo-)]TJ 1.001 0 0 1 99.895 615.455 Tm [(main)-250(by)]TJ/F190 10.3811 Tf 1 0 0 1 138.553 615.455 Tm [(I)]TJ/F84 9.9626 Tf 1.001 0 0 1 145.084 615.455 Tm [(,)]TJ/F190 10.3811 Tf 1 0 0 1 150.19 615.455 Tm [(B)]TJ/F84 9.9626 Tf 1.001 0 0 1 159.926 615.455 Tm [(and)]TJ/F190 10.3811 Tf 1 0 0 1 179.422 615.455 Tm [(H)]TJ/F84 9.9626 Tf 1.001 0 0 1 188.394 615.455 Tm [(.)-310(Each)-249(subdomain)-249(is)-250(assigned)-249(to)-250(one)-249(pr)18(ocess;)-250(each)-249(pr)18(ocess)]TJ 1.02 0 0 1 99.895 603.5 Tm [(usually)-286(owns)-285(one)-286(subdomain,)-295(although)-286(the)-285(user)-286(may)-286(choose)-285(to)-286(assign)-285(mor)17(e)]TJ 1.02 0 0 1 99.895 591.545 Tm [(than)-257(one)-257(subdomain)-257(to)-257(a)-257(pr)18(ocess.)-340(If)-257(each)-257(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 322.219 591.545 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 327.794 591.545 Tm [(owns)-257(one)-257(subdomain,)-260(the)]TJ 0.983 0 0 1 99.895 579.589 Tm [(number)-255(of)-255(r)19(ows)-255(in)-255(the)-255(local)-255(sparse)-255(matrix)-255(is)]TJ/F190 10.3811 Tf 1 0 0 1 292.255 579.589 Tm [(j)-24(I)]TJ/F78 7.5716 Tf 8.944 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F192 10.3811 Tf 5.067 0 Td [(+)]TJ/F190 10.3811 Tf 10.258 0 Td [(j)-24(B)]TJ/F78 7.5716 Tf 10.109 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf 0.983 0 0 1 335.387 579.589 Tm [(,)-255(and)-255(the)-255(number)-255(of)-254(local)]TJ 0.982 0 0 1 99.895 567.634 Tm [(columns)-254(\050i.e.)-316(those)-254(for)-255(which)-254(ther)18(e)-254(exists)-254(at)-255(least)-254(one)-254(non-zer)18(o)-255(ent)1(ry)-255(in)-254(the)-255(local)]TJ 1 0 0 1 99.895 555.679 Tm [(r)18(ows\051)-250(is)]TJ/F190 10.3811 Tf 37.275 0 Td [(j)-24(I)]TJ/F78 7.5716 Tf 8.944 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F192 10.3811 Tf 5.065 0 Td [(+)]TJ/F190 10.3811 Tf 10.256 0 Td [(j)-24(B)]TJ/F78 7.5716 Tf 10.109 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F192 10.3811 Tf 5.065 0 Td [(+)]TJ/F190 10.3811 Tf 10.256 0 Td [(j)-24(H)]TJ/F78 7.5716 Tf 12.052 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf 3.004 0 Td [(.)]TJ + [(].)]TJ 0.995 0 0 1 114.839 627.41 Tm [(W)92(e)-251(denote)-251(the)-251(sets)-251(of)-251(internal,)-251(boundary)-251(and)-251(halo)-251(points)-251(for)-251(a)-251(given)-251(subdo-)]TJ 1.001 0 0 1 99.895 615.455 Tm [(main)-250(by)]TJ/F195 10.3811 Tf 1 0 0 1 138.553 615.455 Tm [(I)]TJ/F84 9.9626 Tf 1.001 0 0 1 145.084 615.455 Tm [(,)]TJ/F195 10.3811 Tf 1 0 0 1 150.19 615.455 Tm [(B)]TJ/F84 9.9626 Tf 1.001 0 0 1 159.926 615.455 Tm [(and)]TJ/F195 10.3811 Tf 1 0 0 1 179.422 615.455 Tm [(H)]TJ/F84 9.9626 Tf 1.001 0 0 1 188.394 615.455 Tm [(.)-310(Each)-249(subdomain)-249(is)-250(assigned)-249(to)-250(one)-249(pr)18(ocess;)-250(each)-249(pr)18(ocess)]TJ 1.02 0 0 1 99.895 603.5 Tm [(usually)-286(owns)-285(one)-286(subdomain,)-295(although)-286(the)-285(user)-286(may)-286(choose)-285(to)-286(assign)-285(mor)17(e)]TJ 1.02 0 0 1 99.895 591.545 Tm [(than)-257(one)-257(subdomain)-257(to)-257(a)-257(pr)18(ocess.)-340(If)-257(each)-257(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 322.219 591.545 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 327.794 591.545 Tm [(owns)-257(one)-257(subdomain,)-260(the)]TJ 0.983 0 0 1 99.895 579.589 Tm [(number)-255(of)-255(r)19(ows)-255(in)-255(the)-255(local)-255(sparse)-255(matrix)-255(is)]TJ/F195 10.3811 Tf 1 0 0 1 292.255 579.589 Tm [(j)-24(I)]TJ/F78 7.5716 Tf 8.944 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F197 10.3811 Tf 5.067 0 Td [(+)]TJ/F195 10.3811 Tf 10.258 0 Td [(j)-24(B)]TJ/F78 7.5716 Tf 10.109 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf 0.983 0 0 1 335.387 579.589 Tm [(,)-255(and)-255(the)-255(number)-255(of)-254(local)]TJ 0.982 0 0 1 99.895 567.634 Tm [(columns)-254(\050i.e.)-316(those)-254(for)-255(which)-254(ther)18(e)-254(exists)-254(at)-255(least)-254(one)-254(non-zer)18(o)-255(ent)1(ry)-255(in)-254(the)-255(local)]TJ 1 0 0 1 99.895 555.679 Tm [(r)18(ows\051)-250(is)]TJ/F195 10.3811 Tf 37.275 0 Td [(j)-24(I)]TJ/F78 7.5716 Tf 8.944 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F197 10.3811 Tf 5.065 0 Td [(+)]TJ/F195 10.3811 Tf 10.256 0 Td [(j)-24(B)]TJ/F78 7.5716 Tf 10.109 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F197 10.3811 Tf 5.065 0 Td [(+)]TJ/F195 10.3811 Tf 10.256 0 Td [(j)-24(H)]TJ/F78 7.5716 Tf 12.052 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf 3.004 0 Td [(.)]TJ 0 g 0 G 0 g 0 G 0 g 0 G @@ -4824,20 +4833,20 @@ ET endstream endobj -948 0 obj +949 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/points.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 954 0 R +/PTEX.InfoDict 955 0 R /BBox [0 0 274 308] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 955 0 R ->>/Font << /R8 956 0 R>> +/R7 956 0 R +>>/Font << /R8 957 0 R>> >> /Length 1397 /Filter /FlateDecode @@ -4847,7 +4856,7 @@ x – óŁ„ ą3ĘBü=®§«ć±bA‡HŚŹ}Ď©c·í˛»?­é”ׄ˙äďÍeůö]_?üľ¤Ó©d ęwßGüđaů´d"®ňç沾ľä}ÍíëŐűe4­ß ,äýÔ×s˙»ş,_ýx÷Ç/w×·Ż®~[ľ»ZŢ.ř›Ś1¸đ™âuóâŻď˙ĽűůúáoO*žţŤx/ţĂőí˝Î22Tř<ᜇd†&Âoî/×ďVâ˙őčCę1V^őd¨ćőăR ¬Ű9źÎç¶^–şµÓľÍšÚýÝz¦zõŻ7‹!€S®űjě§”ęJÚRż–đWZSöN•m´ ide«3çűfy˙őROŰú×|J_Fż~]~z2ň–}×ňVĐťŐämë¦Î€sQ<I<ł¦uiüd¸r͵9.Ö¤˘ĆR’ÉŹŃăY~ĐžĐCŃÝĄź}öçŮ^â<3LA ‰c‹YҶ®ôçYŻqž&mCŮŘâĚű懣ç—Ń#|H–_rƧšÇŇł,wš0s>Ź}yüÇ5ŇNóË p%U¤ –đW@E’§$§•|ˇpxőEŹ`&ĆřĺU ™¤ó«›%AÝIUÍ0Gš]ý‘&űÖM’ î Jšx÷¬…T.ů)~ĽC˛8}~‚­ŰÍWۢíÁvKŃö¶K,8ŰÍ—&†`[C*—ü¨ONÔÇs­ ˝m‚ę ň9؆Áu¶!×`{P9¦m‚ęKI7oŰB*—ü¨Oěą~ńĚł·Ç'­ˇÁ^ÝIaĎvRy!śzw'ó¤`Íx"0.ѤbŤ'…iÄů|ůĚsĽžP:-%X/[´^ş“#Ŕa°há…dŢPÓY/)Z‡Ýq&-VŠÖ˝ON¬Çtn®G±ŔąÍY–& é›Ë’וBżĚś¤ˇąM…ÁnngäŽ%¤Ň#ŘśĂÉŮÇ‚"d;’Ŕô)ůĂ(\X‹łŽĄ˛Ł0}Zˇpř#Ź`Ó†Sň‹%Hvt§Đ̧fŁ`ú`-Î+”ĐŽQ4ó9…Ç,x›O/,îf,z»âißn«ŞÝěv«$˝úć-ÜŚĺ`?›“禩™|,7cďó™;Ěńş@Ź!osőé]Ц?ݲta0€yýŇĄ¤Zdy›«OďRÜ<%9­ä€[}拇ú6m8uőIPžţhÇf>m))…YŢćę“ Ň<%9­ä€[}ćkç˙Üć“WO’rő= A} Ł Ń0'Ë 9‘S,iręŐ÷+\_ă­uâÝż›ŃĆE?ćóé{¦ŮÇá'Č‹ÎB#4_˛$&†`[–’qq‘‘&/> Mő5^_'†`[BýOőşÖÁ–%©ˇ Ş/]07o[šqq ’&/M Íő5^_'n޶†4.ú1ź6ŘsýÜĄ%]Š!CŢgVe@Ů–‹’…Ť$)š5-ĂŘ5}‡ä˛?ÖLg+‡ |>{é>hO‘jřX5~,ę>–0ŕxŐ},1’š¬ác ”ř±ŠűX€5‹űXb$3ňřłŹ Ú…tˇíˇ=Ĺ>tpş8Ő‡’Ô$iÎ>´-öˇÇ%ŔšTÔXJR#ŢgLĽí“-J/0®jăȶw.ŢâŞickŁZ,”Ô¤š^”Ńk·ě«éUÝ ‹ŻWjÇ‚µŰç.ÁşŹUEłzÉgýăP,é"›Ńe±űĚ‹:t!*%~ť Ö *«QĘŇ@emPMÓ1:ľŢ’ŕXĽť÷(®4ć ¤Nľ]ţÎJ¦' endstream endobj -963 0 obj +964 0 obj << /Length 5321 >> @@ -4889,35 +4898,35 @@ BT 0 g 0 G 13.888 -23.137 Td [(\225)]TJ 0 g 0 G - [-500(all)-250(symbols)-250(\050i.e.)-310(subr)18(outine)-250(names,)-250(data)-250(types...\051)-310(ar)18(e)-250(pr)18(e\002xed)-250(by)]TJ/F145 9.9626 Tf 294.183 0 Td [(psb_)]TJ + [-500(all)-250(symbols)-250(\050i.e.)-310(subr)18(outine)-250(names,)-250(data)-250(types...\051)-310(ar)18(e)-250(pr)18(e\002xed)-250(by)]TJ/F147 9.9626 Tf 294.183 0 Td [(psb_)]TJ 0 g 0 G /F84 9.9626 Tf -294.183 -24.208 Td [(\225)]TJ 0 g 0 G - [-500(all)-250(data)-250(type)-250(names)-250(ar)18(e)-250(suf)18(\002xed)-250(by)]TJ/F145 9.9626 Tf 166.604 0 Td [(_type)]TJ + [-500(all)-250(data)-250(type)-250(names)-250(ar)18(e)-250(suf)18(\002xed)-250(by)]TJ/F147 9.9626 Tf 166.604 0 Td [(_type)]TJ 0 g 0 G /F84 9.9626 Tf -166.604 -24.208 Td [(\225)]TJ 0 g 0 G - [-500(all)-250(constants)-250(ar)18(e)-250(suf)18(\002xed)-250(by)]TJ/F145 9.9626 Tf 135.59 0 Td [(_)]TJ + [-500(all)-250(constants)-250(ar)18(e)-250(suf)18(\002xed)-250(by)]TJ/F147 9.9626 Tf 135.59 0 Td [(_)]TJ 0 g 0 G /F84 9.9626 Tf -135.59 -24.208 Td [(\225)]TJ 0 g 0 G - 1.013 0 0 1 175.611 430.327 Tm [(all)-246(top-level)-246(subr)18(outine)-246(names)-246(follow)-246(the)-246(r)8(ule)]TJ/F145 9.9626 Tf 1 0 0 1 381.038 430.327 Tm [(psb_xxname)]TJ/F84 9.9626 Tf 1.013 0 0 1 435.824 430.327 Tm [(wher)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 466.072 430.327 Tm [(xx)]TJ/F84 9.9626 Tf 1.013 0 0 1 479.015 430.327 Tm [(can)]TJ 1 0 0 1 175.611 418.372 Tm [(be)-250(either:)]TJ + 1.013 0 0 1 175.611 430.327 Tm [(all)-246(top-level)-246(subr)18(outine)-246(names)-246(follow)-246(the)-246(r)8(ule)]TJ/F147 9.9626 Tf 1 0 0 1 381.038 430.327 Tm [(psb_xxname)]TJ/F84 9.9626 Tf 1.013 0 0 1 435.824 430.327 Tm [(wher)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 466.072 430.327 Tm [(xx)]TJ/F84 9.9626 Tf 1.013 0 0 1 479.015 430.327 Tm [(can)]TJ 1 0 0 1 175.611 418.372 Tm [(be)-250(either:)]TJ 0 g 0 G /F75 9.9626 Tf 11.956 -24.208 Td [(\226)]TJ 0 g 0 G -/F145 9.9626 Tf 9.962 0 Td [(ge)]TJ/F84 9.9626 Tf 10.461 0 Td [(:)-310(the)-250(r)18(outine)-250(is)-250(r)18(elated)-250(to)-250(dense)-250(data,)]TJ +/F147 9.9626 Tf 9.962 0 Td [(ge)]TJ/F84 9.9626 Tf 10.461 0 Td [(:)-310(the)-250(r)18(outine)-250(is)-250(r)18(elated)-250(to)-250(dense)-250(data,)]TJ 0 g 0 G /F75 9.9626 Tf -20.423 -18.081 Td [(\226)]TJ 0 g 0 G -/F145 9.9626 Tf 9.962 0 Td [(sp)]TJ/F84 9.9626 Tf 10.461 0 Td [(:)-310(the)-250(r)18(outine)-250(is)-250(r)18(elated)-250(to)-250(sparse)-250(data,)]TJ +/F147 9.9626 Tf 9.962 0 Td [(sp)]TJ/F84 9.9626 Tf 10.461 0 Td [(:)-310(the)-250(r)18(outine)-250(is)-250(r)18(elated)-250(to)-250(sparse)-250(data,)]TJ 0 g 0 G /F75 9.9626 Tf -20.423 -18.081 Td [(\226)]TJ 0 g 0 G -/F145 9.9626 Tf 9.962 0 Td [(cd)]TJ/F84 9.9626 Tf 10.461 0 Td [(:)-310(the)-250(r)18(outine)-250(is)-250(r)18(elated)-250(to)-250(communication)-250(descriptor)-250(\050see)]TJ +/F147 9.9626 Tf 9.962 0 Td [(cd)]TJ/F84 9.9626 Tf 10.461 0 Td [(:)-310(the)-250(r)18(outine)-250(is)-250(r)18(elated)-250(to)-250(communication)-250(descriptor)-250(\050see)]TJ 0 0 1 rg 0 0 1 RG [-250(3)]TJ 0 g 0 G - [(\051.)]TJ 0.981 0 0 1 175.611 333.794 Tm [(For)-254(example)-255(the)]TJ/F145 9.9626 Tf 1 0 0 1 247.896 333.794 Tm [(psb_geins)]TJ/F84 9.9626 Tf 0.981 0 0 1 294.969 333.794 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 299.899 333.794 Tm [(psb_spins)]TJ/F84 9.9626 Tf 0.981 0 0 1 349.458 333.794 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 368.491 333.794 Tm [(psb_cdins)]TJ/F84 9.9626 Tf 0.981 0 0 1 418.05 333.794 Tm [(perform)-254(the)-255(same)]TJ 1.02 0 0 1 175.611 321.839 Tm [(action)-359(\050see)]TJ + [(\051.)]TJ 0.981 0 0 1 175.611 333.794 Tm [(For)-254(example)-255(the)]TJ/F147 9.9626 Tf 1 0 0 1 247.896 333.794 Tm [(psb_geins)]TJ/F84 9.9626 Tf 0.981 0 0 1 294.969 333.794 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 299.899 333.794 Tm [(psb_spins)]TJ/F84 9.9626 Tf 0.981 0 0 1 349.458 333.794 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 368.491 333.794 Tm [(psb_cdins)]TJ/F84 9.9626 Tf 0.981 0 0 1 418.05 333.794 Tm [(perform)-254(the)-255(same)]TJ 1.02 0 0 1 175.611 321.839 Tm [(action)-359(\050see)]TJ 0 0 1 rg 0 0 1 RG [-360(6)]TJ 0 g 0 G @@ -4929,7 +4938,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.906 -24.208 Td [(local)]TJ 0 g 0 G -/F84 9.9626 Tf 26.56 0 Td [(Each)-250(pr)18(ocess)-250(has)-250(its)-250(own)-250(value\050s\051)-250(independently)111(.)]TJ -26.869 -23.137 Td [(T)92(o)-250(\002nish)-250(our)-250(general)-250(description,)-250(we)-250(de\002ne)-250(a)-250(version)-250(string)-250(with)-250(the)-250(constant)]TJ/F145 9.9626 Tf 122.476 -24.059 Td [(psb_version_string_)]TJ/F84 9.9626 Tf -122.586 -24.059 Td [(whose)-250(curr)18(ent)-250(value)-250(is)]TJ/F145 9.9626 Tf 101.857 0 Td [(3.9.0)]TJ +/F84 9.9626 Tf 26.56 0 Td [(Each)-250(pr)18(ocess)-250(has)-250(its)-250(own)-250(value\050s\051)-250(independently)111(.)]TJ -26.869 -23.137 Td [(T)92(o)-250(\002nish)-250(our)-250(general)-250(description,)-250(we)-250(de\002ne)-250(a)-250(version)-250(string)-250(with)-250(the)-250(constant)]TJ/F147 9.9626 Tf 122.476 -24.059 Td [(psb_version_string_)]TJ/F84 9.9626 Tf -122.586 -24.059 Td [(whose)-250(curr)18(ent)-250(value)-250(is)]TJ/F147 9.9626 Tf 101.857 0 Td [(3.9.0)]TJ 0 g 0 G /F84 9.9626 Tf 67.927 -29.888 Td [(6)]TJ 0 g 0 G @@ -4937,31 +4946,31 @@ ET endstream endobj -968 0 obj +969 0 obj << -/Length 9648 +/Length 9680 >> stream 0 g 0 G 0 g 0 G BT -/F75 11.9552 Tf 99.895 706.129 Td [(2.3)-1000(Application)-250(structure)]TJ/F84 9.9626 Tf 0.999 0 0 1 99.587 686.748 Tm [(The)-249(main)-249(underlying)-250(principle)-249(of)-249(the)-249(PSBLAS)-250(library)-249(is)-249(that)-249(the)-249(library)-250(objects)]TJ 0.999 0 0 1 99.895 674.792 Tm [(ar)18(e)-251(cr)18(eated)-251(and)-251(exist)-251(with)-251(r)18(efer)18(ence)-251(to)-251(a)-251(discr)18(etized)-251(space)-251(to)-251(which)-251(ther)18(e)-251(corr)18(e-)]TJ 0.98 0 0 1 99.895 662.837 Tm [(sponds)-255(an)-254(index)-255(space)-255(and)-254(a)-255(matrix)-255(sparsity)-254(pattern.)-316(As)-255(an)-255(example,)-255(consider)-254(a)]TJ 1.015 0 0 1 99.895 650.882 Tm [(cell-center)18(ed)-246(\002nite-volume)-246(discr)18(etization)-246(of)-246(the)-246(Navier)18(-Stokes)-246(equations)-245(on)-246(a)]TJ 0.98 0 0 1 99.895 638.927 Tm [(simulation)-233(domain;)-240(the)-233(index)-233(space)-232(1)]TJ 1 0 0 1 261.657 638.927 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 0.98 0 0 1 282.794 638.927 Tm [(is)-233(isomorphic)-233(to)-232(the)-233(set)-233(of)-233(cell)-233(centers,)]TJ 1.02 0 0 1 99.477 626.972 Tm [(wher)18(eas)-332(the)-332(pattern)-332(of)-332(the)-332(associated)-332(linear)-332(system)-332(matrix)-332(is)-332(isomorphic)-332(to)]TJ 1.014 0 0 1 99.895 615.017 Tm [(the)-246(adjacency)-247(gr)1(aph)-247(imposed)-246(on)-246(the)-246(discr)17(etization)-246(mesh)-246(by)-246(the)-247(discr)18(etization)]TJ 1 0 0 1 99.895 603.061 Tm [(stencil.)]TJ 1.02 0 0 1 114.839 590.891 Tm [(Thus)-298(the)-297(\002rst)-298(or)18(der)-298(of)-297(business)-298(is)-298(to)-297(establish)-298(an)-298(i)1(ndex)-298(space,)-311(and)-297(this)-298(is)]TJ 0.989 0 0 1 99.895 578.936 Tm [(done)-253(with)-253(a)-253(call)-253(to)]TJ/F145 9.9626 Tf 1 0 0 1 182.801 578.936 Tm [(psb_cdall)]TJ/F84 9.9626 Tf 0.989 0 0 1 232.368 578.936 Tm [(in)-253(which)-253(we)-253(specify)-253(the)-253(size)-253(of)-253(the)-253(index)-253(space)]TJ/F78 9.9626 Tf 1 0 0 1 437.943 578.936 Tm [(n)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.895 566.98 Tm [(and)-250(the)-249(allocation)-249(of)-250(the)-249(elements)-250(of)-249(the)-250(index)-249(space)-250(to)-249(the)-250(various)-249(pr)17(ocesses)]TJ 1 0 0 1 99.895 555.025 Tm [(making)-250(up)-250(the)-250(MPI)-250(\050virtual\051)-250(parallel)-250(machine.)]TJ 0.987 0 0 1 114.839 542.855 Tm [(The)-254(index)-255(space)-254(is)-254(partitioned)-254(among)-255(pr)19(ocesses,)-255(and)-254(this)-254(cr)18(eates)-255(a)-254(mapping)]TJ 1.02 0 0 1 99.895 530.899 Tm [(fr)18(om)-313(the)-312(\223global\224)-313(numbering)-312(1)]TJ 1 0 0 1 243.306 530.899 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 1.02 0 0 1 265.345 530.899 Tm [(to)-312(a)-313(numbering)-312(\223local\224)-313(to)-312(each)-312(pr)17(ocess;)]TJ 1.02 0 0 1 99.895 518.944 Tm [(each)-357(pr)17(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 161.071 518.944 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 167.665 518.944 Tm [(will)-357(own)-357(a)-358(certain)-357(subset)-357(1)]TJ 1 0 0 1 294.248 518.944 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 5.664 -1.494 Td [(r)18(ow)]TJ/F78 5.9776 Tf 17.537 -1.649 Td [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 333.423 518.944 Tm [(,)-385(each)-357(element)-358(of)-357(which)]TJ 1.004 0 0 1 99.895 506.989 Tm [(corr)18(esponds)-250(to)-249(a)-250(certain)-249(element)-250(of)-249(1)]TJ 1 0 0 1 263.855 506.989 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 1.004 0 0 1 282.719 506.989 Tm [(.)-310(The)-250(user)-250(does)-249(not)-250(set)-249(explicitly)-250(this)]TJ 0.987 0 0 1 99.895 495.034 Tm [(mapping;)-253(when)-254(the)-253(application)-253(needs)-254(to)-253(indicate)-253(to)-254(which)-253(element)-253(of)-254(the)-253(index)]TJ 1.02 0 0 1 99.895 483.079 Tm [(space)-263(a)-262(certain)-263(item)-263(is)-262(r)17(elated,)-267(such)-262(as)-263(the)-263(r)18(ow)-263(and)-263(colu)1(mn)-263(index)-263(of)-263(a)-262(matrix)]TJ 1.011 0 0 1 99.895 471.124 Tm [(coef)18(\002cient,)-246(it)-247(does)-246(so)-246(in)-246(the)-246(\223global\224)-247(numbering,)-246(and)-246(the)-246(library)-247(will)-246(translate)]TJ 1 0 0 1 99.895 459.168 Tm [(into)-250(the)-250(appr)18(opriate)-250(\223local\224)-250(numbering.)]TJ 0.98 0 0 1 114.839 446.998 Tm [(For)-242(a)-242(given)-241(index)-242(space)-242(1)]TJ 1 0 0 1 225.057 446.998 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 0.98 0 0 1 246.282 446.998 Tm [(ther)18(e)-241(ar)18(e)-242(many)-242(possible)-242(associat)1(ed)-242(topologies,)]TJ 0.98 0 0 1 99.895 435.043 Tm [(i.e.)-308(many)-230(dif)18(fer)18(ent)-230(discr)19(etization)-230(stencils;)-239(thus)-230(the)-230(description)-230(of)-230(the)-230(index)-230(space)]TJ 1.011 0 0 1 99.895 423.087 Tm [(is)-247(not)-247(completed)-248(until)-247(the)-247(user)-247(has)-247(de\002ned)-248(a)-247(sparsity)-247(pattern,)-247(either)-247(explicitly)]TJ 0.98 0 0 1 99.895 411.132 Tm [(thr)18(ough)]TJ/F145 9.9626 Tf 1 0 0 1 137.076 411.132 Tm [(psb_cdins)]TJ/F84 9.9626 Tf 0.98 0 0 1 186.458 411.132 Tm [(or)-237(imp)1(licitly)-237(thr)18(ough)]TJ/F145 9.9626 Tf 1 0 0 1 279.084 411.132 Tm [(psb_spins)]TJ/F84 9.9626 Tf 0.98 0 0 1 326.157 411.132 Tm [(.)-310(The)-237(descriptor)-236(is)-237(\002nalized)]TJ 1.02 0 0 1 99.477 399.177 Tm [(with)-294(a)-294(call)-293(to)]TJ/F145 9.9626 Tf 1 0 0 1 161.528 399.177 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 1.02 0 0 1 211.587 399.177 Tm [(and)-294(a)-294(sparse)-293(matrix)-294(with)-294(a)-294(call)-294(to)]TJ/F145 9.9626 Tf 1 0 0 1 366.134 399.177 Tm [(psb_spasb)]TJ/F84 9.9626 Tf 1.02 0 0 1 413.207 399.177 Tm [(.)-450(After)]TJ/F145 9.9626 Tf 1 0 0 1 99.895 387.222 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 1.001 0 0 1 149.464 387.222 Tm [(each)-250(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 207.364 387.222 Tm [(i)]TJ/F84 9.9626 Tf 1.001 0 0 1 212.823 387.222 Tm [(will)-250(have)-250(de\002ned)-251(a)-250(set)-250(of)-250(\223halo\224)-250(\050or)-251(\223ghost\224\051)-250(indices)]TJ/F78 9.9626 Tf 1 0 0 1 100.02 375.267 Tm [(n)]TJ/F84 9.9626 Tf 5.664 -1.495 Td [(r)18(ow)]TJ/F78 5.9776 Tf 17.537 -1.648 Td [(i)]TJ/F192 10.3811 Tf 4.654 3.143 Td [(+)]TJ/F84 9.9626 Tf 0.98 0 0 1 137.825 375.267 Tm [(1)]TJ 1 0 0 1 144.492 375.267 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 5.664 -3.831 Td [(col)]TJ/F78 5.9776 Tf 12.795 -1.648 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 178.925 375.267 Tm [(,)-239(denoting)-235(elements)-235(of)-235(the)-235(index)-235(space)-235(that)-235(ar)18(e)]TJ/F78 9.9626 Tf 0.98 0 0 1 379.735 375.267 Tm [(not)]TJ/F84 9.9626 Tf 0.98 0 0 1 395.044 375.267 Tm [(assigned)-235(to)]TJ 1.01 0 0 1 99.596 361.477 Tm [(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 135.289 361.477 Tm [(i)]TJ/F84 9.9626 Tf 1.01 0 0 1 138.252 361.477 Tm [(;)-247(however)-246(the)-247(variables)-246(associated)-247(with)-246(them)-247(ar)18(e)-247(needed)-246(to)-247(complete)]TJ 1.02 0 0 1 99.895 349.522 Tm [(computations)-284(associated)-284(with)-285(the)-284(sparse)-284(matrix)]TJ/F78 9.9626 Tf 1 0 0 1 318.756 349.522 Tm [(A)]TJ/F84 9.9626 Tf 1.02 0 0 1 326.074 349.522 Tm [(,)-294(and)-284(thus)-284(they)-285(have)-284(to)-284(be)]TJ 1.02 0 0 1 99.895 337.567 Tm [(fetched)-303(fr)18(om)-304(\050neighbouring\051)-303(pr)18(ocesses.)-478(The)-303(descriptor)-303(of)-303(the)-303(index)-304(space)-303(is)]TJ 1.007 0 0 1 99.895 325.612 Tm [(built)-249(exactly)-248(for)-249(the)-249(purpose)-249(of)-248(pr)17(op)1(erly)-249(sequencing)-249(the)-249(communication)-248(steps)]TJ 1 0 0 1 99.895 313.656 Tm [(r)18(equir)18(ed)-250(to)-250(achieve)-250(this)-250(objective.)]TJ 0.987 0 0 1 114.839 301.486 Tm [(A)-253(simple)-253(application)-254(str)8(u)1(ctur)18(e)-253(will)-254(walk)-253(thr)18(ough)-253(the)-253(index)-253(space)-253(allocation,)]TJ 1 0 0 1 99.895 289.531 Tm [(matrix/vector)-250(cr)18(eation)-250(and)-250(linear)-250(system)-250(solution)-250(as)-250(follows:)]TJ +/F75 11.9552 Tf 99.895 706.129 Td [(2.3)-1000(Application)-250(structure)]TJ/F84 9.9626 Tf 0.999 0 0 1 99.587 686.748 Tm [(The)-249(main)-249(underlying)-250(principle)-249(of)-249(the)-249(PSBLAS)-250(library)-249(is)-249(that)-249(the)-249(library)-250(objects)]TJ 0.999 0 0 1 99.895 674.792 Tm [(ar)18(e)-251(cr)18(eated)-251(and)-251(exist)-251(with)-251(r)18(efer)18(ence)-251(to)-251(a)-251(discr)18(etized)-251(space)-251(to)-251(which)-251(ther)18(e)-251(corr)18(e-)]TJ 0.98 0 0 1 99.895 662.837 Tm [(sponds)-255(an)-254(index)-255(space)-255(and)-254(a)-255(matrix)-255(sparsity)-254(pattern.)-316(As)-255(an)-255(example,)-255(consider)-254(a)]TJ 1.015 0 0 1 99.895 650.882 Tm [(cell-center)18(ed)-246(\002nite-volume)-246(discr)18(etization)-246(of)-246(the)-246(Navier)18(-Stokes)-246(equations)-245(on)-246(a)]TJ 0.98 0 0 1 99.895 638.927 Tm [(simulation)-233(domain;)-240(the)-233(index)-233(space)-232(1)]TJ 1 0 0 1 261.657 638.927 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 0.98 0 0 1 282.794 638.927 Tm [(is)-233(isomorphic)-233(to)-232(the)-233(set)-233(of)-233(cell)-233(centers,)]TJ 1.02 0 0 1 99.477 626.972 Tm [(wher)18(eas)-332(the)-332(pattern)-332(of)-332(the)-332(associated)-332(linear)-332(system)-332(matrix)-332(is)-332(isomorphic)-332(to)]TJ 1.014 0 0 1 99.895 615.017 Tm [(the)-246(adjacency)-247(gr)1(aph)-247(imposed)-246(on)-246(the)-246(discr)17(etization)-246(mesh)-246(by)-246(the)-247(discr)18(etization)]TJ 1 0 0 1 99.895 603.061 Tm [(stencil.)]TJ 1.02 0 0 1 114.839 590.891 Tm [(Thus)-298(the)-297(\002rst)-298(or)18(der)-298(of)-297(business)-298(is)-298(to)-297(establish)-298(an)-298(i)1(ndex)-298(space,)-311(and)-297(this)-298(is)]TJ 0.989 0 0 1 99.895 578.936 Tm [(done)-253(with)-253(a)-253(call)-253(to)]TJ/F147 9.9626 Tf 1 0 0 1 182.801 578.936 Tm [(psb_cdall)]TJ/F84 9.9626 Tf 0.989 0 0 1 232.368 578.936 Tm [(in)-253(which)-253(we)-253(specify)-253(the)-253(size)-253(of)-253(the)-253(index)-253(space)]TJ/F78 9.9626 Tf 1 0 0 1 437.943 578.936 Tm [(n)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.895 566.98 Tm [(and)-250(the)-249(allocation)-249(of)-250(the)-249(elements)-250(of)-249(the)-250(index)-249(space)-250(to)-249(the)-250(various)-249(pr)17(ocesses)]TJ 1 0 0 1 99.895 555.025 Tm [(making)-250(up)-250(the)-250(MPI)-250(\050virtual\051)-250(parallel)-250(machine.)]TJ 0.987 0 0 1 114.839 542.855 Tm [(The)-254(index)-255(space)-254(is)-254(partitioned)-254(among)-255(pr)19(ocesses,)-255(and)-254(this)-254(cr)18(eates)-255(a)-254(mapping)]TJ 1.02 0 0 1 99.895 530.899 Tm [(fr)18(om)-313(the)-312(\223global\224)-313(numbering)-312(1)]TJ 1 0 0 1 243.306 530.899 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 1.02 0 0 1 265.345 530.899 Tm [(to)-312(a)-313(numbering)-312(\223local\224)-313(to)-312(each)-312(pr)17(ocess;)]TJ 1.02 0 0 1 99.895 518.944 Tm [(each)-357(pr)17(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 161.071 518.944 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 167.665 518.944 Tm [(will)-357(own)-357(a)-358(certain)-357(subset)-357(1)]TJ 1 0 0 1 294.248 518.944 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 5.664 -1.494 Td [(r)18(ow)]TJ/F78 5.9776 Tf 17.537 -1.649 Td [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 333.423 518.944 Tm [(,)-385(each)-357(element)-358(of)-357(which)]TJ 1.004 0 0 1 99.895 506.989 Tm [(corr)18(esponds)-250(to)-249(a)-250(certain)-249(element)-250(of)-249(1)]TJ 1 0 0 1 263.855 506.989 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 1.004 0 0 1 282.719 506.989 Tm [(.)-310(The)-250(user)-250(does)-249(not)-250(set)-249(explicitly)-250(this)]TJ 0.987 0 0 1 99.895 495.034 Tm [(mapping;)-253(when)-254(the)-253(application)-253(needs)-254(to)-253(indicate)-253(to)-254(which)-253(element)-253(of)-254(the)-253(index)]TJ 1.02 0 0 1 99.895 483.079 Tm [(space)-263(a)-262(certain)-263(item)-263(is)-262(r)17(elated,)-267(such)-262(as)-263(the)-263(r)18(ow)-263(and)-263(colu)1(mn)-263(index)-263(of)-263(a)-262(matrix)]TJ 1.02 0 0 1 99.895 471.124 Tm [(coef)18(\002cient,)-272(it)-266(usually)-267(does)-266(so)-267(in)-266(the)-267(\223global\224)-266(numbering,)-272(and)-267(the)-266(library)-267(will)]TJ 1 0 0 1 99.895 459.168 Tm [(translate)-250(into)-250(the)-250(appr)18(opriate)-250(\223local\224)-250(numbering.)]TJ 0.98 0 0 1 114.839 446.998 Tm [(For)-242(a)-242(given)-241(index)-242(space)-242(1)]TJ 1 0 0 1 225.057 446.998 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 0.98 0 0 1 246.282 446.998 Tm [(ther)18(e)-241(ar)18(e)-242(many)-242(possible)-242(associat)1(ed)-242(topologies,)]TJ 1.02 0 0 1 99.895 435.043 Tm [(i.e.)-592(many)-341(dif)18(fer)18(ent)-341(discr)18(etization)-341(stencils;)-389(thus)-341(the)-341(description)-341(of)-341(the)-341(index)]TJ 1.02 0 0 1 99.895 423.087 Tm [(space)-355(is)-355(not)-354(completed)-355(until)-355(the)-354(user)-355(has)-355(de\002ned)-355(a)-354(sparsity)-355(pattern,)-382(either)]TJ 1.006 0 0 1 99.895 411.132 Tm [(explicitly)-249(thr)18(ough)]TJ/F147 9.9626 Tf 1 0 0 1 181.63 411.132 Tm [(psb_cdins)]TJ/F84 9.9626 Tf 1.006 0 0 1 231.195 411.132 Tm [(or)-249(implicitly)-248(thr)18(ough)]TJ/F147 9.9626 Tf 1 0 0 1 326.646 411.132 Tm [(psb_spins)]TJ/F84 9.9626 Tf 1.006 0 0 1 373.719 411.132 Tm [(.)-308(The)-249(descriptor)]TJ 0.98 0 0 1 99.895 399.177 Tm [(is)-209(\002)1(nalized)-209(with)-208(a)-209(call)-208(to)]TJ/F147 9.9626 Tf 1 0 0 1 204.908 399.177 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 0.98 0 0 1 254.016 399.177 Tm [(and)-209(a)-208(sparse)-208(matrix)-209(with)-208(a)-209(call)-208(to)]TJ/F147 9.9626 Tf 1 0 0 1 395.836 399.177 Tm [(psb_spasb)]TJ/F84 9.9626 Tf 0.98 0 0 1 442.909 399.177 Tm [(.)]TJ 1.02 0 0 1 99.507 387.222 Tm [(After)]TJ/F147 9.9626 Tf 1 0 0 1 125.845 387.222 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 1.02 0 0 1 175.772 387.222 Tm [(each)-281(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 235.396 387.222 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 241.214 387.222 Tm [(will)-281(have)-281(de\002ned)-281(a)-280(set)-281(of)-281(\223halo\224)-281(\050or)-281(\223ghost\224\051)]TJ 1.02 0 0 1 99.895 375.267 Tm [(indices)]TJ/F78 9.9626 Tf 1 0 0 1 134.824 375.267 Tm [(n)]TJ/F84 9.9626 Tf 5.663 -1.495 Td [(r)18(ow)]TJ/F78 5.9776 Tf 17.538 -1.648 Td [(i)]TJ/F197 10.3811 Tf 5.054 3.143 Td [(+)]TJ/F84 9.9626 Tf 1.02 0 0 1 173.428 375.267 Tm [(1)]TJ 1 0 0 1 180.294 375.267 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)]TJ/F84 9.9626 Tf 5.664 -3.831 Td [(col)]TJ/F78 5.9776 Tf 12.794 -1.648 Td [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 214.727 375.267 Tm [(,)-317(denoting)-303(elements)-303(of)-303(the)-303(index)-303(space)-303(that)-303(ar)18(e)]TJ/F78 9.9626 Tf 1.02 0 0 1 430.061 375.267 Tm [(not)]TJ/F84 9.9626 Tf 0.98 0 0 1 99.895 361.477 Tm [(assigned)-238(to)-238(pr)18(oce)1(ss)]TJ/F78 9.9626 Tf 1 0 0 1 185.354 361.477 Tm [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 188.318 361.477 Tm [(;)-244(the)-238(variables)-237(associated)-238(with)-238(them)-238(ar)18(e)-238(needed)-238(to)-238(complete)]TJ 1.02 0 0 1 99.895 349.522 Tm [(computations)-284(associated)-284(with)-285(the)-284(sparse)-284(matrix)]TJ/F78 9.9626 Tf 1 0 0 1 318.756 349.522 Tm [(A)]TJ/F84 9.9626 Tf 1.02 0 0 1 326.074 349.522 Tm [(,)-294(and)-284(thus)-284(they)-285(have)-284(to)-284(be)]TJ 1.02 0 0 1 99.895 337.567 Tm [(fetched)-303(fr)18(om)-304(\050neighbouring\051)-303(pr)18(ocesses.)-478(The)-303(descriptor)-303(of)-303(the)-303(index)-304(space)-303(is)]TJ 1.007 0 0 1 99.895 325.612 Tm [(built)-249(exactly)-248(for)-249(the)-249(purpose)-249(of)-248(pr)17(op)1(erly)-249(sequencing)-249(the)-249(communication)-248(steps)]TJ 1 0 0 1 99.895 313.656 Tm [(r)18(equir)18(ed)-250(to)-250(achieve)-250(this)-250(objective.)]TJ 0.987 0 0 1 114.839 301.486 Tm [(A)-253(simple)-253(application)-254(str)8(u)1(ctur)18(e)-253(will)-254(walk)-253(thr)18(ough)-253(the)-253(index)-253(space)-253(allocation,)]TJ 1 0 0 1 99.895 289.531 Tm [(matrix/vector)-250(cr)18(eation)-250(and)-250(linear)-250(system)-250(solution)-250(as)-250(follows:)]TJ 0 g 0 G 12.454 -20.572 Td [(1.)]TJ 0 g 0 G - [-500(Initialize)-250(parallel)-250(envir)18(onment)-250(with)]TJ/F145 9.9626 Tf 171.464 0 Td [(psb_init)]TJ/F84 9.9626 Tf 41.843 0 Td [(;)]TJ + [-500(Initialize)-250(parallel)-250(envir)18(onment)-250(with)]TJ/F147 9.9626 Tf 171.464 0 Td [(psb_init)]TJ/F84 9.9626 Tf 41.843 0 Td [(;)]TJ 0 g 0 G -213.307 -20.787 Td [(2.)]TJ 0 g 0 G - [-500(Initialize)-250(index)-250(space)-250(with)]TJ/F145 9.9626 Tf 130.489 0 Td [(psb_cdall)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ + [-500(Initialize)-250(index)-250(space)-250(with)]TJ/F147 9.9626 Tf 130.489 0 Td [(psb_cdall)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ 0 g 0 G -177.562 -20.787 Td [(3.)]TJ 0 g 0 G - 0.983 0 0 1 124.413 227.385 Tm [(Allocate)-254(sparse)-255(matrix)-254(and)-254(dense)-255(vectors)-254(with)]TJ/F145 9.9626 Tf 1 0 0 1 326.635 227.385 Tm [(psb_spall)]TJ/F84 9.9626 Tf 0.983 0 0 1 376.199 227.385 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 395.269 227.385 Tm [(psb_geall)]TJ/F84 9.9626 Tf 0.983 0 0 1 442.342 227.385 Tm [(;)]TJ + 0.983 0 0 1 124.413 227.385 Tm [(Allocate)-254(sparse)-255(matrix)-254(and)-254(dense)-255(vectors)-254(with)]TJ/F147 9.9626 Tf 1 0 0 1 326.635 227.385 Tm [(psb_spall)]TJ/F84 9.9626 Tf 0.983 0 0 1 376.199 227.385 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 395.269 227.385 Tm [(psb_geall)]TJ/F84 9.9626 Tf 0.983 0 0 1 442.342 227.385 Tm [(;)]TJ 0 g 0 G 1 0 0 1 112.349 206.597 Tm [(4.)]TJ 0 g 0 G - 1.02 0 0 1 124.802 206.597 Tm [(Loop)-265(over)-265(all)-266(local)-265(r)18(ows,)-270(generate)-266(matrix)-265(and)-265(vector)-265(entries,)-270(and)-266(insert)]TJ 1 0 0 1 124.802 194.642 Tm [(them)-250(with)]TJ/F145 9.9626 Tf 47.85 0 Td [(psb_spins)]TJ/F84 9.9626 Tf 49.564 0 Td [(and)]TJ/F145 9.9626 Tf 19.357 0 Td [(psb_geins)]TJ + 1.02 0 0 1 124.802 206.597 Tm [(Loop)-265(over)-265(all)-266(local)-265(r)18(ows,)-270(generate)-266(matrix)-265(and)-265(vector)-265(entries,)-270(and)-266(insert)]TJ 1 0 0 1 124.802 194.642 Tm [(them)-250(with)]TJ/F147 9.9626 Tf 47.85 0 Td [(psb_spins)]TJ/F84 9.9626 Tf 49.564 0 Td [(and)]TJ/F147 9.9626 Tf 19.357 0 Td [(psb_geins)]TJ 0 g 0 G /F84 9.9626 Tf -129.224 -20.787 Td [(5.)]TJ 0 g 0 G @@ -4969,15 +4978,15 @@ BT 0 g 0 G 17.773 -20.787 Td [(\050a\051)]TJ 0 g 0 G -/F145 9.9626 Tf 16.598 0 Td [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(,)]TJ +/F147 9.9626 Tf 16.598 0 Td [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(,)]TJ 0 g 0 G -64.199 -16.371 Td [(\050b\051)]TJ 0 g 0 G -/F145 9.9626 Tf 17.126 0 Td [(psb_spasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(,)]TJ +/F147 9.9626 Tf 17.126 0 Td [(psb_spasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(,)]TJ 0 g 0 G -63.113 -16.371 Td [(\050c\051)]TJ 0 g 0 G -/F145 9.9626 Tf 16.04 0 Td [(psb_geasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ +/F147 9.9626 Tf 16.04 0 Td [(psb_geasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ 0 g 0 G 75.467 -29.888 Td [(7)]TJ 0 g 0 G @@ -4990,7 +4999,7 @@ endobj /Type /ObjStm /N 100 /First 913 -/Length 13454 +/Length 13406 >> stream 849 0 889 152 850 304 851 449 852 602 853 755 854 908 855 1061 856 1214 857 1367 @@ -4998,11 +5007,11 @@ stream 868 3035 869 3183 870 3331 871 3479 872 3627 873 3775 874 3924 875 4073 876 4222 877 4371 878 4520 879 4669 880 4818 881 4967 882 5116 886 5264 883 5321 892 5401 7 5515 891 5569 906 5649 895 5855 896 6005 897 6155 898 6306 899 6460 900 6611 901 6761 902 6910 903 7058 -904 7206 11 7354 905 7410 924 7503 928 7653 929 7894 930 7936 931 8322 918 8622 919 8768 -920 8916 926 9059 15 9115 927 9170 923 9226 937 9347 922 9497 934 9645 935 9793 939 9941 -19 9998 943 10054 944 10111 936 10168 950 10303 954 10445 955 10559 956 10601 946 10670 947 10818 -952 10965 953 11021 23 11077 949 11132 962 11281 959 11423 960 11570 964 11717 961 11774 967 11868 -969 11982 27 12038 970 12093 971 12149 972 12205 973 12261 974 12317 975 12373 976 12429 977 12485 +904 7206 11 7354 905 7410 924 7503 928 7653 929 7822 930 7867 931 8272 918 8572 919 8718 +920 8866 926 9009 15 9065 927 9120 923 9176 938 9297 922 9447 935 9595 936 9744 940 9893 +19 9950 944 10006 945 10063 937 10120 951 10255 955 10397 956 10511 957 10553 947 10622 948 10770 +953 10917 954 10973 23 11029 950 11084 963 11233 960 11375 961 11522 965 11669 962 11726 968 11820 +970 11934 27 11990 971 12045 972 12101 973 12157 974 12213 975 12269 976 12325 977 12381 978 12437 % 849 0 obj << /Type /Annot @@ -5355,7 +5364,7 @@ stream /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[0 1 0] -/Rect [267.112 430.331 279.067 439.436] +/Rect [269.031 418.376 280.986 427.481] /A << /S /GoTo /D (cite.machiels) >> >> % 900 0 obj @@ -5418,33 +5427,33 @@ stream >> % 928 0 obj << -/Producer (GPL Ghostscript 9.04) -/CreationDate (D:20111215145523+01'00') -/ModDate (D:20111215145523+01'00') +/Producer (GPL Ghostscript 10.05.1) +/CreationDate (D:20251223132900) +/ModDate (D:20251223132900) /Title (psblas.fig) -/Creator (fig2dev Version 3.2 Patchlevel 5d) -/Author (sfilippo@donald \(Salvatore Filippone\)) +/Creator (fig2dev Version 3.2.9a) >> % 929 0 obj << /Type /ExtGState -/OPM 1 +/SA false >> % 930 0 obj << -/BaseFont /JEJNJE+Times-Roman +/BaseFont /BGFCTJ+Times-Roman /FontDescriptor 931 0 R +/ToUnicode 932 0 R /Type /Font /FirstChar 32 /LastChar 116 -/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 722 667 0 0 0 556 0 0 333 0 0 611 889 0 0 556 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 444 0 444 333 500 0 278 0 0 278 0 500 500 500 0 333 389 278] +/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 500 0 0 0 0 0 500 0 0 0 0 0 0 0 0 722 667 0 0 0 556 0 0 333 0 0 611 889 0 0 556 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 444 0 444 333 500 0 278 0 0 278 0 500 500 500 0 333 389 278] /Encoding /WinAnsiEncoding /Subtype /Type1 >> % 931 0 obj << /Type /FontDescriptor -/FontName /JEJNJE+Times-Roman +/FontName /BGFCTJ+Times-Roman /FontBBox [ 0 -218 863 683] /Flags 32 /Ascent 683 @@ -5452,10 +5461,10 @@ stream /Descent -218 /ItalicAngle 0 /StemV 129 -/MissingWidth 500 +/MissingWidth 250 /XHeight 460 -/CharSet (/A/B/F/I/L/M/P/S/a/c/e/f/g/i/l/n/o/p/r/s/space/t/three/two/zero) -/FontFile3 932 0 R +/CharSet (/A/B/F/I/L/M/P/S/a/c/e/eight/f/g/i/l/n/o/p/r/s/space/t/two/zero) +/FontFile3 933 0 R >> % 918 0 obj << @@ -5499,14 +5508,14 @@ stream /XObject << /Im2 921 0 R >> /ProcSet [ /PDF /Text ] >> -% 937 0 obj +% 938 0 obj << /Type /Page -/Contents 938 0 R -/Resources 936 0 R +/Contents 939 0 R +/Resources 937 0 R /MediaBox [0 0 595.276 841.89] /Parent 894 0 R -/Annots [ 922 0 R 934 0 R 935 0 R ] +/Annots [ 922 0 R 935 0 R 936 0 R ] >> % 922 0 obj << @@ -5516,70 +5525,70 @@ stream /Rect [325.842 609.432 337.797 618.438] /A << /S /GoTo /D (cite.METIS) >> >> -% 934 0 obj +% 935 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [259.94 534.258 266.216 547.962] +/Rect [246.427 534.258 252.704 547.962] /A << /S /GoTo /D (Hfootnote.1) >> >> -% 935 0 obj +% 936 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [208.583 185.645 214.86 199.235] +/Rect [254.986 185.645 261.263 199.235] /A << /S /GoTo /D (Hfootnote.2) >> >> -% 939 0 obj +% 940 0 obj << -/D [937 0 R /XYZ 149.705 753.953 null] +/D [938 0 R /XYZ 149.705 753.953 null] >> % 19 0 obj << -/D [937 0 R /XYZ 150.705 504.866 null] +/D [938 0 R /XYZ 150.705 504.866 null] >> -% 943 0 obj +% 944 0 obj << -/D [937 0 R /XYZ 165.051 167.999 null] +/D [938 0 R /XYZ 165.051 167.999 null] >> -% 944 0 obj +% 945 0 obj << -/D [937 0 R /XYZ 165.051 158.184 null] +/D [938 0 R /XYZ 165.051 158.184 null] >> -% 936 0 obj +% 937 0 obj << -/Font << /F84 687 0 R /F78 686 0 R /F145 940 0 R /F75 685 0 R /F190 941 0 R /F192 942 0 R >> +/Font << /F84 687 0 R /F78 686 0 R /F147 941 0 R /F75 685 0 R /F195 942 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 950 0 obj +% 951 0 obj << /Type /Page -/Contents 951 0 R -/Resources 949 0 R +/Contents 952 0 R +/Resources 950 0 R /MediaBox [0 0 595.276 841.89] /Parent 894 0 R -/Annots [ 946 0 R 947 0 R ] +/Annots [ 947 0 R 948 0 R ] >> -% 954 0 obj +% 955 0 obj << /Producer (ESP Ghostscript 815.03) /CreationDate (D:20070123225315) /ModDate (D:20070123225315) >> -% 955 0 obj +% 956 0 obj << /Type /ExtGState /OPM 1 >> -% 956 0 obj +% 957 0 obj << /BaseFont /Times-Roman /Type /Font /Subtype /Type1 >> -% 946 0 obj +% 947 0 obj << /Type /Annot /Subtype /Link @@ -5587,7 +5596,7 @@ stream /Rect [244.163 638.309 251.137 647.315] /A << /S /GoTo /D (cite.2007c) >> >> -% 947 0 obj +% 948 0 obj << /Type /Annot /Subtype /Link @@ -5595,34 +5604,34 @@ stream /Rect [254.125 638.21 261.099 647.166] /A << /S /GoTo /D (cite.2007d) >> >> -% 952 0 obj +% 953 0 obj << -/D [950 0 R /XYZ 98.895 753.953 null] +/D [951 0 R /XYZ 98.895 753.953 null] >> -% 953 0 obj +% 954 0 obj << -/D [950 0 R /XYZ 99.895 353.614 null] +/D [951 0 R /XYZ 99.895 353.614 null] >> % 23 0 obj << -/D [950 0 R /XYZ 99.895 270.035 null] +/D [951 0 R /XYZ 99.895 270.035 null] >> -% 949 0 obj +% 950 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F190 941 0 R /F78 686 0 R /F192 942 0 R >> -/XObject << /Im3 948 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F195 942 0 R /F78 686 0 R /F197 943 0 R >> +/XObject << /Im3 949 0 R >> /ProcSet [ /PDF /Text ] >> -% 962 0 obj +% 963 0 obj << /Type /Page -/Contents 963 0 R -/Resources 961 0 R +/Contents 964 0 R +/Resources 962 0 R /MediaBox [0 0 595.276 841.89] /Parent 894 0 R -/Annots [ 959 0 R 960 0 R ] +/Annots [ 960 0 R 961 0 R ] >> -% 959 0 obj +% 960 0 obj << /Type /Annot /Subtype /Link @@ -5630,7 +5639,7 @@ stream /Rect [455.548 354.196 462.522 366.255] /A << /S /GoTo /D (section.3) >> >> -% 960 0 obj +% 961 0 obj << /Type /Annot /Subtype /Link @@ -5638,67 +5647,67 @@ stream /Rect [226.669 318.033 233.743 330.093] /A << /S /GoTo /D (section.6) >> >> -% 964 0 obj +% 965 0 obj << -/D [962 0 R /XYZ 149.705 753.953 null] +/D [963 0 R /XYZ 149.705 753.953 null] >> -% 961 0 obj +% 962 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 967 0 obj +% 968 0 obj << /Type /Page -/Contents 968 0 R -/Resources 966 0 R +/Contents 969 0 R +/Resources 967 0 R /MediaBox [0 0 595.276 841.89] -/Parent 978 0 R +/Parent 979 0 R >> -% 969 0 obj +% 970 0 obj << -/D [967 0 R /XYZ 98.895 753.953 null] +/D [968 0 R /XYZ 98.895 753.953 null] >> % 27 0 obj << -/D [967 0 R /XYZ 99.895 716.092 null] ->> -% 970 0 obj -<< -/D [967 0 R /XYZ 99.895 282.521 null] +/D [968 0 R /XYZ 99.895 716.092 null] >> % 971 0 obj << -/D [967 0 R /XYZ 99.895 261.733 null] +/D [968 0 R /XYZ 99.895 282.521 null] >> % 972 0 obj << -/D [967 0 R /XYZ 99.895 240.946 null] +/D [968 0 R /XYZ 99.895 261.733 null] >> % 973 0 obj << -/D [967 0 R /XYZ 99.895 220.159 null] +/D [968 0 R /XYZ 99.895 240.946 null] >> % 974 0 obj << -/D [967 0 R /XYZ 99.895 188.012 null] +/D [968 0 R /XYZ 99.895 220.159 null] >> % 975 0 obj << -/D [967 0 R /XYZ 99.895 167.072 null] +/D [968 0 R /XYZ 99.895 188.012 null] >> % 976 0 obj << -/D [967 0 R /XYZ 99.895 148.646 null] +/D [968 0 R /XYZ 99.895 167.072 null] >> % 977 0 obj << -/D [967 0 R /XYZ 99.895 132.275 null] +/D [968 0 R /XYZ 99.895 148.646 null] +>> +% 978 0 obj +<< +/D [968 0 R /XYZ 99.895 132.275 null] >> endstream endobj -983 0 obj +984 0 obj << /Length 8991 >> @@ -5709,7 +5718,7 @@ stream BT /F84 9.9626 Tf 163.158 706.129 Td [(6.)]TJ 0 g 0 G - 0.984 0 0 1 175.611 706.129 Tm [(Choose)-254(the)-254(pr)19(econditioner)-254(to)-254(be)-254(u)1(sed)-254(with)]TJ/F145 9.9626 Tf 1 0 0 1 362.392 706.129 Tm [(prec%init)]TJ/F84 9.9626 Tf 0.984 0 0 1 411.953 706.129 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 431.037 706.129 Tm [(prec%set)]TJ/F84 9.9626 Tf 0.984 0 0 1 472.88 706.129 Tm [(,)-254(and)]TJ 1 0 0 1 175.611 694.174 Tm [(build)-250(it)-250(with)]TJ/F145 9.9626 Tf 57.275 0 Td [(prec%build)]TJ + 0.984 0 0 1 175.611 706.129 Tm [(Choose)-254(the)-254(pr)19(econditioner)-254(to)-254(be)-254(u)1(sed)-254(with)]TJ/F147 9.9626 Tf 1 0 0 1 362.392 706.129 Tm [(prec%init)]TJ/F84 9.9626 Tf 0.984 0 0 1 411.953 706.129 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 431.037 706.129 Tm [(prec%set)]TJ/F84 9.9626 Tf 0.984 0 0 1 472.88 706.129 Tm [(,)-254(and)]TJ 1 0 0 1 175.611 694.174 Tm [(build)-250(it)-250(with)]TJ/F147 9.9626 Tf 57.275 0 Td [(prec%build)]TJ 0 0 1 rg 0 0 1 RG /F84 7.5716 Tf 52.303 3.616 Td [(3)]TJ 0 g 0 G @@ -5717,27 +5726,27 @@ BT 0 g 0 G -126.315 -18.137 Td [(7.)]TJ 0 g 0 G - 0.98 0 0 1 175.611 676.037 Tm [(Call)-204(one)-203(of)-204(the)-204(iterative)-203(drivers)-204(with)-204(the)-203(method)-204(of)-204(choice,)-214(e.g.)]TJ/F145 9.9626 Tf 1 0 0 1 442.374 676.037 Tm [(psb_krylov)]TJ/F84 9.9626 Tf -267.181 -11.955 Td [(with)]TJ/F145 9.9626 Tf 22.744 0 Td [(bicgstab)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ -89.384 -16.347 Td [(This)-250(is)-250(the)-250(str)8(uctur)18(e)-250(of)-250(the)-250(sample)-250(pr)18(ograms)-250(in)-250(the)-250(dir)18(ectory)]TJ/F145 9.9626 Tf 266.418 0 Td [(test/pargen/)]TJ/F84 9.9626 Tf 62.764 0 Td [(.)]TJ 0.98 0 0 1 165.649 635.78 Tm [(For)-227(a)-227(simulation)-227(in)-227(which)-227(the)-226(same)-227(discr)18(etization)-227(mesh)-227(is)-227(used)-227(over)-227(multiple)]TJ 1 0 0 1 150.705 623.824 Tm [(time)-250(steps,)-250(the)-250(following)-250(str)8(uctur)18(e)-250(may)-250(be)-250(mor)18(e)-250(appr)18(opriate:)]TJ + 0.98 0 0 1 175.611 676.037 Tm [(Call)-204(one)-203(of)-204(the)-204(iterative)-203(drivers)-204(with)-204(the)-203(method)-204(of)-204(choice,)-214(e.g.)]TJ/F147 9.9626 Tf 1 0 0 1 442.374 676.037 Tm [(psb_krylov)]TJ/F84 9.9626 Tf -267.181 -11.955 Td [(with)]TJ/F147 9.9626 Tf 22.744 0 Td [(bicgstab)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ -89.384 -16.347 Td [(This)-250(is)-250(the)-250(str)8(uctur)18(e)-250(of)-250(the)-250(sample)-250(pr)18(ograms)-250(in)-250(the)-250(dir)18(ectory)]TJ/F147 9.9626 Tf 266.418 0 Td [(test/pargen/)]TJ/F84 9.9626 Tf 62.764 0 Td [(.)]TJ 0.98 0 0 1 165.649 635.78 Tm [(For)-227(a)-227(simulation)-227(in)-227(which)-227(the)-226(same)-227(discr)18(etization)-227(mesh)-227(is)-227(used)-227(over)-227(multiple)]TJ 1 0 0 1 150.705 623.824 Tm [(time)-250(steps,)-250(the)-250(following)-250(str)8(uctur)18(e)-250(may)-250(be)-250(mor)18(e)-250(appr)18(opriate:)]TJ 0 g 0 G 12.453 -16.347 Td [(1.)]TJ 0 g 0 G - [-500(Initialize)-250(parallel)-250(envir)18(onment)-250(with)]TJ/F145 9.9626 Tf 171.465 0 Td [(psb_init)]TJ + [-500(Initialize)-250(parallel)-250(envir)18(onment)-250(with)]TJ/F147 9.9626 Tf 171.465 0 Td [(psb_init)]TJ 0 g 0 G /F84 9.9626 Tf -171.465 -18.136 Td [(2.)]TJ 0 g 0 G - [-500(Initialize)-250(index)-250(space)-250(with)]TJ/F145 9.9626 Tf 130.489 0 Td [(psb_cdall)]TJ + [-500(Initialize)-250(index)-250(space)-250(with)]TJ/F147 9.9626 Tf 130.489 0 Td [(psb_cdall)]TJ 0 g 0 G /F84 9.9626 Tf -130.489 -18.137 Td [(3.)]TJ 0 g 0 G - 0.98 0 0 1 175.611 571.204 Tm [(Loop)-224(over)-225(the)-224(topology)-224(of)-224(the)-225(discr)19(etization)-225(mesh)-224(and)-224(build)-224(the)-225(descriptor)]TJ 1 0 0 1 175.193 559.249 Tm [(with)]TJ/F145 9.9626 Tf 22.744 0 Td [(psb_cdins)]TJ/F84 9.9626 Tf 47.074 0 Td [(;)]TJ + 0.98 0 0 1 175.611 571.204 Tm [(Loop)-224(over)-225(the)-224(topology)-224(of)-224(the)-225(discr)19(etization)-225(mesh)-224(and)-224(build)-224(the)-225(descriptor)]TJ 1 0 0 1 175.193 559.249 Tm [(with)]TJ/F147 9.9626 Tf 22.744 0 Td [(psb_cdins)]TJ/F84 9.9626 Tf 47.074 0 Td [(;)]TJ 0 g 0 G -81.853 -18.136 Td [(4.)]TJ 0 g 0 G - [-461(Assemble)-250(the)-250(descriptor)-250(with)]TJ/F145 9.9626 Tf 143.998 0 Td [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ + [-461(Assemble)-250(the)-250(descriptor)-250(with)]TJ/F147 9.9626 Tf 143.998 0 Td [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ 0 g 0 G -191.071 -18.136 Td [(5.)]TJ 0 g 0 G - 1.02 0 0 1 175.223 522.977 Tm [(Allocate)-407(the)-408(sparse)-407(matrices)-408(and)-407(dense)-408(vectors)-407(with;)]TJ/F145 9.9626 Tf 1 0 0 1 425.998 522.977 Tm [(psb_spall)]TJ/F84 9.9626 Tf 1.02 0 0 1 477.212 522.977 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 175.611 511.021 Tm [(psb_geall)]TJ/F84 9.9626 Tf 47.074 0 Td [(;)]TJ + 1.02 0 0 1 175.223 522.977 Tm [(Allocate)-407(the)-408(sparse)-407(matrices)-408(and)-407(dense)-408(vectors)-407(with;)]TJ/F147 9.9626 Tf 1 0 0 1 425.998 522.977 Tm [(psb_spall)]TJ/F84 9.9626 Tf 1.02 0 0 1 477.212 522.977 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 511.021 Tm [(psb_geall)]TJ/F84 9.9626 Tf 47.074 0 Td [(;)]TJ 0 g 0 G -59.527 -18.136 Td [(6.)]TJ 0 g 0 G @@ -5745,26 +5754,26 @@ BT 0 g 0 G 17.774 -18.136 Td [(\050a\051)]TJ 0 g 0 G - 1.02 0 0 1 197.529 474.749 Tm [(If)-260(after)-261(\002rst)-260(time)-260(step,)-264(r)18(einitialize)-261(the)-260(sparse)-260(matrix)-260(with)]TJ/F145 9.9626 Tf 1 0 0 1 451.278 474.749 Tm [(psb_sprn)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 474.749 Tm [(;)]TJ 1 0 0 1 197.529 462.794 Tm [(also)-250(zer)18(o)-250(out)-250(the)-250(dense)-250(vectors;)]TJ + 1.02 0 0 1 197.529 474.749 Tm [(If)-260(after)-261(\002rst)-260(time)-260(step,)-264(r)18(einitialize)-261(the)-260(sparse)-260(matrix)-260(with)]TJ/F147 9.9626 Tf 1 0 0 1 451.278 474.749 Tm [(psb_sprn)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 474.749 Tm [(;)]TJ 1 0 0 1 197.529 462.794 Tm [(also)-250(zer)18(o)-250(out)-250(the)-250(dense)-250(vectors;)]TJ 0 g 0 G -17.125 -14.152 Td [(\050b\051)]TJ 0 g 0 G - 1.02 0 0 1 197.529 448.642 Tm [(Loop)-358(o)1(ver)-358(the)-357(mesh,)-386(generate)-357(the)-358(coef)18(\002cients)-357(and)-358(insert/update)]TJ 1 0 0 1 197.529 436.687 Tm [(them)-250(with)]TJ/F145 9.9626 Tf 47.85 0 Td [(psb_spins)]TJ/F84 9.9626 Tf 49.564 0 Td [(and)]TJ/F145 9.9626 Tf 19.357 0 Td [(psb_geins)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ + 1.02 0 0 1 197.529 448.642 Tm [(Loop)-358(o)1(ver)-358(the)-357(mesh,)-386(generate)-357(the)-358(coef)18(\002cients)-357(and)-358(insert/update)]TJ 1 0 0 1 197.529 436.687 Tm [(them)-250(with)]TJ/F147 9.9626 Tf 47.85 0 Td [(psb_spins)]TJ/F84 9.9626 Tf 49.564 0 Td [(and)]TJ/F147 9.9626 Tf 19.357 0 Td [(psb_geins)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ 0 g 0 G -179.883 -14.151 Td [(\050c\051)]TJ 0 g 0 G - [-461(Assemble)-250(with)]TJ/F145 9.9626 Tf 83.834 0 Td [(psb_spasb)]TJ/F84 9.9626 Tf 49.564 0 Td [(and)]TJ/F145 9.9626 Tf 19.357 0 Td [(psb_geasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ + [-461(Assemble)-250(with)]TJ/F147 9.9626 Tf 83.834 0 Td [(psb_spasb)]TJ/F84 9.9626 Tf 49.564 0 Td [(and)]TJ/F147 9.9626 Tf 19.357 0 Td [(psb_geasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ 0 g 0 G -201.492 -14.151 Td [(\050d\051)]TJ 0 g 0 G 0 g 0 G 1.315 -14.152 Td [(\050e\051)]TJ 0 g 0 G - 0.98 0 0 1 197.529 394.233 Tm [(Choose)-245(the)-246(pr)18(econditione)1(r)-246(to)-245(be)-246(used)-245(with)]TJ/F145 9.9626 Tf 1 0 0 1 382.982 394.233 Tm [(prec%init)]TJ/F84 9.9626 Tf 0.98 0 0 1 432.452 394.233 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 451.378 394.233 Tm [(prec%set)]TJ/F84 9.9626 Tf 0.98 0 0 1 493.22 394.233 Tm [(,)]TJ 1 0 0 1 197.529 382.278 Tm [(and)-250(build)-250(it)-250(with)]TJ/F145 9.9626 Tf 76.632 0 Td [(prec%build)]TJ/F84 9.9626 Tf 52.303 0 Td [(;)]TJ + 0.98 0 0 1 197.529 394.233 Tm [(Choose)-245(the)-246(pr)18(econditione)1(r)-246(to)-245(be)-246(used)-245(with)]TJ/F147 9.9626 Tf 1 0 0 1 382.982 394.233 Tm [(prec%init)]TJ/F84 9.9626 Tf 0.98 0 0 1 432.452 394.233 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 451.378 394.233 Tm [(prec%set)]TJ/F84 9.9626 Tf 0.98 0 0 1 493.22 394.233 Tm [(,)]TJ 1 0 0 1 197.529 382.278 Tm [(and)-250(build)-250(it)-250(with)]TJ/F147 9.9626 Tf 76.632 0 Td [(prec%build)]TJ/F84 9.9626 Tf 52.303 0 Td [(;)]TJ 0 g 0 G -143.869 -14.151 Td [(\050f\051)]TJ 0 g 0 G - 1.02 0 0 1 197.529 368.127 Tm [(Call)-416(one)-415(of)-416(the)-416(it)1(erative)-416(drivers)-416(with)-415(the)-416(method)-416(of)-415(choice,)-458(e.g.)]TJ/F145 9.9626 Tf 1 0 0 1 197.529 356.172 Tm [(psb_krylov)]TJ/F84 9.9626 Tf 54.794 0 Td [(with)]TJ/F145 9.9626 Tf 22.745 0 Td [(bicgstab)]TJ/F84 9.9626 Tf 41.842 0 Td [(.)]TJ 0.98 0 0 1 150.396 338.035 Tm [(The)-247(insertion)-247(r)19(outines)-247(will)-247(be)-247(called)-247(as)-247(many)-247(times)-247(as)-247(needed;)-249(they)-247(only)-247(need)-247(to)]TJ 1.02 0 0 1 150.705 326.08 Tm [(be)-245(called)-245(on)-245(the)-245(data)-245(that)-245(is)-246(actually)-245(allocated)-245(to)-245(the)-245(curr)18(ent)-245(pr)17(ocess,)-245(i.e.)-304(each)]TJ 1 0 0 1 150.406 314.125 Tm [(pr)18(ocess)-250(generates)-250(its)-250(own)-250(data.)]TJ 0.981 0 0 1 165.649 302.17 Tm [(In)-256(principle)-255(ther)18(e)-256(is)-255(no)-256(speci\002c)-255(or)18(der)-256(in)-255(the)-256(calls)-256(to)]TJ/F145 9.9626 Tf 1 0 0 1 386.226 302.17 Tm [(psb_spins)]TJ/F84 9.9626 Tf 0.981 0 0 1 433.299 302.17 Tm [(,)-256(nor)-256(is)-255(ther)18(e)-255(a)]TJ 0.997 0 0 1 150.705 290.215 Tm [(r)18(equir)18(ement)-251(to)-251(build)-251(a)-251(matrix)-251(r)18(ow)-251(in)-251(its)-251(entir)18(ety)-251(befor)18(e)-251(calling)-251(the)-251(r)18(outine;)-251(this)]TJ 1.02 0 0 1 150.705 278.26 Tm [(allows)-288(the)-288(application)-289(p)1(r)17(ogrammer)-288(to)-288(walk)-288(thr)17(ough)-288(the)-288(discr)18(etization)-289(mesh)]TJ 1.02 0 0 1 150.705 266.304 Tm [(element)-265(by)-265(element,)-271(gen)1(erating)-266(the)-265(main)-265(part)-265(of)-265(a)-266(given)-265(matrix)-265(r)18(ow)-265(but)-266(also)]TJ 1 0 0 1 150.705 254.349 Tm [(contributions)-250(to)-250(the)-250(r)18(ows)-250(corr)18(esponding)-250(to)-250(neighbouring)-250(elements.)]TJ 1.02 0 0 1 165.649 242.394 Tm [(Fr)18(om)-284(a)-283(functional)-283(point)-284(of)-283(view)-284(it)-283(is)-283(even)-284(possible)-283(to)-284(execut)1(e)-284(one)-283(call)-284(for)]TJ 0.988 0 0 1 150.705 230.439 Tm [(each)-252(nonzer)18(o)-252(coef)18(\002cient;)-252(however)-252(this)-252(would)-252(have)-252(a)-252(substantial)-252(computational)]TJ 0.98 0 0 1 150.705 218.484 Tm [(over)18(head.)-306(It)-224(is)-225(ther)19(efor)18(e)-224(advisable)-225(to)-224(pack)-225(a)-224(certain)-225(amount)-224(of)-225(data)-224(into)-225(each)-224(call)]TJ 0.988 0 0 1 150.705 206.529 Tm [(to)-253(the)-254(insertion)-253(r)18(outine,)-253(say)-253(touching)-254(on)-253(a)-253(few)-254(tens)-253(of)-253(r)18(ows;)-254(the)-253(best)-253(performng)]TJ 1.009 0 0 1 150.426 194.573 Tm [(value)-247(would)-248(depend)-247(on)-248(both)-247(the)-248(ar)18(chitectur)18(e)-248(of)-247(the)-248(computer)-247(being)-248(used)-247(and)]TJ 1.02 0 0 1 150.705 182.618 Tm [(on)-333(the)-333(pr)18(oblem)-333(str)8(uctur)18(e.)-567(At)-333(the)-333(opposite)-332(extr)17(eme,)-355(it)-332(would)-333(be)-333(possible)-333(to)]TJ 0.996 0 0 1 150.705 170.663 Tm [(generate)-250(the)-251(entir)18(e)-250(part)-251(of)-250(a)-250(coef)18(\002cient)-251(matrix)-250(r)18(esiding)-251(on)-250(a)-250(pr)18(ocess)-251(and)-250(pass)-251(it)]TJ 0.981 0 0 1 150.705 158.708 Tm [(in)-255(a)-255(single)-254(call)-255(to)]TJ/F145 9.9626 Tf 1 0 0 1 225.645 158.708 Tm [(psb_spins)]TJ/F84 9.9626 Tf 0.981 0 0 1 272.718 158.708 Tm [(;)-255(this,)-255(however)76(,)-255(would)-255(entail)-254(a)-255(doubling)-255(of)-255(memory)]TJ 1 0 0 1 150.705 146.753 Tm [(occupation,)-250(and)-250(thus)-250(would)-250(be)-250(almost)-250(always)-250(far)-250(fr)18(om)-250(optimal.)]TJ + 1.02 0 0 1 197.529 368.127 Tm [(Call)-416(one)-415(of)-416(the)-416(it)1(erative)-416(drivers)-416(with)-415(the)-416(method)-416(of)-415(choice,)-458(e.g.)]TJ/F147 9.9626 Tf 1 0 0 1 197.529 356.172 Tm [(psb_krylov)]TJ/F84 9.9626 Tf 54.794 0 Td [(with)]TJ/F147 9.9626 Tf 22.745 0 Td [(bicgstab)]TJ/F84 9.9626 Tf 41.842 0 Td [(.)]TJ 0.98 0 0 1 150.396 338.035 Tm [(The)-247(insertion)-247(r)19(outines)-247(will)-247(be)-247(called)-247(as)-247(many)-247(times)-247(as)-247(needed;)-249(they)-247(only)-247(need)-247(to)]TJ 1.02 0 0 1 150.705 326.08 Tm [(be)-245(called)-245(on)-245(the)-245(data)-245(that)-245(is)-246(actually)-245(allocated)-245(to)-245(the)-245(curr)18(ent)-245(pr)17(ocess,)-245(i.e.)-304(each)]TJ 1 0 0 1 150.406 314.125 Tm [(pr)18(ocess)-250(generates)-250(its)-250(own)-250(data.)]TJ 0.981 0 0 1 165.649 302.17 Tm [(In)-256(principle)-255(ther)18(e)-256(is)-255(no)-256(speci\002c)-255(or)18(der)-256(in)-255(the)-256(calls)-256(to)]TJ/F147 9.9626 Tf 1 0 0 1 386.226 302.17 Tm [(psb_spins)]TJ/F84 9.9626 Tf 0.981 0 0 1 433.299 302.17 Tm [(,)-256(nor)-256(is)-255(ther)18(e)-255(a)]TJ 0.997 0 0 1 150.705 290.215 Tm [(r)18(equir)18(ement)-251(to)-251(build)-251(a)-251(matrix)-251(r)18(ow)-251(in)-251(its)-251(entir)18(ety)-251(befor)18(e)-251(calling)-251(the)-251(r)18(outine;)-251(this)]TJ 1.02 0 0 1 150.705 278.26 Tm [(allows)-288(the)-288(application)-289(p)1(r)17(ogrammer)-288(to)-288(walk)-288(thr)17(ough)-288(the)-288(discr)18(etization)-289(mesh)]TJ 1.02 0 0 1 150.705 266.304 Tm [(element)-265(by)-265(element,)-271(gen)1(erating)-266(the)-265(main)-265(part)-265(of)-265(a)-266(given)-265(matrix)-265(r)18(ow)-265(but)-266(also)]TJ 1 0 0 1 150.705 254.349 Tm [(contributions)-250(to)-250(the)-250(r)18(ows)-250(corr)18(esponding)-250(to)-250(neighbouring)-250(elements.)]TJ 1.02 0 0 1 165.649 242.394 Tm [(Fr)18(om)-284(a)-283(functional)-283(point)-284(of)-283(view)-284(it)-283(is)-283(even)-284(possible)-283(to)-284(execut)1(e)-284(one)-283(call)-284(for)]TJ 0.988 0 0 1 150.705 230.439 Tm [(each)-252(nonzer)18(o)-252(coef)18(\002cient;)-252(however)-252(this)-252(would)-252(have)-252(a)-252(substantial)-252(computational)]TJ 0.98 0 0 1 150.705 218.484 Tm [(over)18(head.)-306(It)-224(is)-225(ther)19(efor)18(e)-224(advisable)-225(to)-224(pack)-225(a)-224(certain)-225(amount)-224(of)-225(data)-224(into)-225(each)-224(call)]TJ 0.988 0 0 1 150.705 206.529 Tm [(to)-253(the)-254(insertion)-253(r)18(outine,)-253(say)-253(touching)-254(on)-253(a)-253(few)-254(tens)-253(of)-253(r)18(ows;)-254(the)-253(best)-253(performng)]TJ 1.009 0 0 1 150.426 194.573 Tm [(value)-247(would)-248(depend)-247(on)-248(both)-247(the)-248(ar)18(chitectur)18(e)-248(of)-247(the)-248(computer)-247(being)-248(used)-247(and)]TJ 1.02 0 0 1 150.705 182.618 Tm [(on)-333(the)-333(pr)18(oblem)-333(str)8(uctur)18(e.)-567(At)-333(the)-333(opposite)-332(extr)17(eme,)-355(it)-332(would)-333(be)-333(possible)-333(to)]TJ 0.996 0 0 1 150.705 170.663 Tm [(generate)-250(the)-251(entir)18(e)-250(part)-251(of)-250(a)-250(coef)18(\002cient)-251(matrix)-250(r)18(esiding)-251(on)-250(a)-250(pr)18(ocess)-251(and)-250(pass)-251(it)]TJ 0.981 0 0 1 150.705 158.708 Tm [(in)-255(a)-255(single)-254(call)-255(to)]TJ/F147 9.9626 Tf 1 0 0 1 225.645 158.708 Tm [(psb_spins)]TJ/F84 9.9626 Tf 0.981 0 0 1 272.718 158.708 Tm [(;)-255(this,)-255(however)76(,)-255(would)-255(entail)-254(a)-255(doubling)-255(of)-255(memory)]TJ 1 0 0 1 150.705 146.753 Tm [(occupation,)-250(and)-250(thus)-250(would)-250(be)-250(almost)-250(always)-250(far)-250(fr)18(om)-250(optimal.)]TJ 0 g 0 G ET q @@ -5772,21 +5781,21 @@ q []0 d 0 J 0.398 w 0 0 m 137.482 0 l S Q BT -/F84 5.9776 Tf 161.564 132.683 Td [(3)]TJ/F84 7.9701 Tf 0.981 0 0 1 164.804 129.79 Tm [(The)-255(subr)18(outine)-256(sty)1(le)]TJ/F215 7.9701 Tf 1 0 0 1 237.517 129.79 Tm [(psb)]TJ +/F84 5.9776 Tf 161.564 132.683 Td [(3)]TJ/F84 7.9701 Tf 0.981 0 0 1 164.804 129.79 Tm [(The)-255(subr)18(outine)-256(sty)1(le)]TJ/F220 7.9701 Tf 1 0 0 1 237.517 129.79 Tm [(psb)]TJ ET q 1 0 0 1 250.728 129.989 cm []0 d 0 J 0.398 w 0 0 m 2.541 0 l S Q BT -/F215 7.9701 Tf 253.269 129.79 Td [(precinit)]TJ/F84 7.9701 Tf 0.981 0 0 1 289.14 129.79 Tm [(and)]TJ/F215 7.9701 Tf 1 0 0 1 304.374 129.79 Tm [(psb)]TJ +/F220 7.9701 Tf 253.269 129.79 Td [(precinit)]TJ/F84 7.9701 Tf 0.981 0 0 1 289.14 129.79 Tm [(and)]TJ/F220 7.9701 Tf 1 0 0 1 304.374 129.79 Tm [(psb)]TJ ET q 1 0 0 1 317.585 129.989 cm []0 d 0 J 0.398 w 0 0 m 2.541 0 l S Q BT -/F215 7.9701 Tf 320.125 129.79 Td [(precbld)]TJ/F84 7.9701 Tf 0.981 0 0 1 351.762 129.79 Tm [(ar)18(e)-255(still)-256(support)1(ed)-256(for)-255(backwar)18(d)-256(compati)1(-)]TJ 1 0 0 1 150.705 120.326 Tm [(bility)]TJ +/F220 7.9701 Tf 320.125 129.79 Td [(precbld)]TJ/F84 7.9701 Tf 0.981 0 0 1 351.762 129.79 Tm [(ar)18(e)-255(still)-256(support)1(ed)-256(for)-255(backwar)18(d)-256(compati)1(-)]TJ 1 0 0 1 150.705 120.326 Tm [(bility)]TJ 0 g 0 G 0 g 0 G /F84 9.9626 Tf 169.365 -29.888 Td [(8)]TJ @@ -5795,9 +5804,9 @@ ET endstream endobj -1004 0 obj +1005 0 obj << -/Length 7843 +/Length 7839 >> stream 0 g 0 G @@ -5815,27 +5824,27 @@ BT 0 g 0 G -320.16 -19.926 Td [(2.)]TJ 0 g 0 G - [-469(The)-250(set)-250(of)-250(halo)-250(points)-250(must)-250(be)-250(mapped)-250(to)-250(the)-250(set)]TJ/F78 9.9626 Tf 227.977 0 Td [(n)]TJ/F84 9.9626 Tf 5.664 -1.494 Td [(r)18(ow)]TJ/F78 5.9776 Tf 17.537 -1.648 Td [(i)]TJ/F192 10.3811 Tf 4.836 3.142 Td [(+)]TJ/F84 9.9626 Tf 10.131 0 Td [(1)-179(.)-192(.)-192(.)]TJ/F78 9.9626 Tf 19.967 0 Td [(n)]TJ/F84 9.9626 Tf 5.664 -3.83 Td [(col)]TJ/F78 5.9776 Tf 12.795 -1.649 Td [(i)]TJ/F84 9.9626 Tf 2.774 5.479 Td [(;)]TJ 1.016 0 0 1 99.895 613.6 Tm [(but)-246(otherwise)-247(the)-246(mapping)-246(is)-247(arbit)1(rary)109(.)-306(The)-246(user)-247(application)-246(is)-246(r)17(esponsible)-246(to)]TJ 1.009 0 0 1 99.895 601.644 Tm [(ensur)18(e)-247(consistency)-247(of)-246(this)-247(mapping;)-247(some)-247(err)18(ors)-247(may)-246(be)-247(caught)-247(by)-247(the)-246(library)110(,)]TJ 0.994 0 0 1 99.895 589.689 Tm [(but)-253(this)-252(is)-253(not)-252(guaranteed.)-315(The)-253(application)-252(str)8(uctur)18(e)-253(to)-252(support)-253(this)-252(usage)-253(is)-252(as)]TJ 1 0 0 1 99.895 577.734 Tm [(follows:)]TJ + [-469(The)-250(set)-250(of)-250(halo)-250(points)-250(must)-250(be)-250(mapped)-250(to)-250(the)-250(set)]TJ/F78 9.9626 Tf 227.977 0 Td [(n)]TJ/F84 9.9626 Tf 5.664 -1.494 Td [(r)18(ow)]TJ/F78 5.9776 Tf 17.537 -1.648 Td [(i)]TJ/F197 10.3811 Tf 4.836 3.142 Td [(+)]TJ/F84 9.9626 Tf 10.131 0 Td [(1)-179(.)-192(.)-192(.)]TJ/F78 9.9626 Tf 19.967 0 Td [(n)]TJ/F84 9.9626 Tf 5.664 -3.83 Td [(col)]TJ/F78 5.9776 Tf 12.795 -1.649 Td [(i)]TJ/F84 9.9626 Tf 2.774 5.479 Td [(;)]TJ 1.016 0 0 1 99.895 613.6 Tm [(but)-246(otherwise)-247(the)-246(mapping)-246(is)-247(arbit)1(rary)109(.)-306(The)-246(user)-247(application)-246(is)-246(r)17(esponsible)-246(to)]TJ 1.009 0 0 1 99.895 601.644 Tm [(ensur)18(e)-247(consistency)-247(of)-246(this)-247(mapping;)-247(some)-247(err)18(ors)-247(may)-246(be)-247(caught)-247(by)-247(the)-246(library)110(,)]TJ 0.994 0 0 1 99.895 589.689 Tm [(but)-253(this)-252(is)-253(not)-252(guaranteed.)-315(The)-253(application)-252(str)8(uctur)18(e)-253(to)-252(support)-253(this)-252(usage)-253(is)-252(as)]TJ 1 0 0 1 99.895 577.734 Tm [(follows:)]TJ 0 g 0 G 12.454 -19.925 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 124.802 557.809 Tm [(Initialize)-194(index)-194(space)-194(with)]TJ/F145 9.9626 Tf 1 0 0 1 238.285 557.809 Tm [(psb_cdall\050ictx,desc,info,vl=vl,lidx=lidx\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 124.503 545.854 Tm [(passing)-205(the)-205(vectors)]TJ/F145 9.9626 Tf 1 0 0 1 208.066 545.854 Tm [(vl\050:\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 236.218 545.854 Tm [(containing)-205(the)-205(set)-205(of)-205(global)-205(indices)-205(owned)-205(by)-205(the)]TJ 1 0 0 1 124.802 533.898 Tm [(curr)18(ent)-250(pr)18(ocess)-250(and)]TJ/F145 9.9626 Tf 89.105 0 Td [(lidx\050:\051)]TJ/F84 9.9626 Tf 39.103 0 Td [(containing)-250(the)-250(corr)18(esponding)-250(local)-250(indices;)]TJ + 0.98 0 0 1 124.802 557.809 Tm [(Initialize)-194(index)-194(space)-194(with)]TJ/F147 9.9626 Tf 1 0 0 1 238.285 557.809 Tm [(psb_cdall\050ictx,desc,info,vl=vl,lidx=lidx\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 124.503 545.854 Tm [(passing)-205(the)-205(vectors)]TJ/F147 9.9626 Tf 1 0 0 1 208.066 545.854 Tm [(vl\050:\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 236.218 545.854 Tm [(containing)-205(the)-205(set)-205(of)-205(global)-205(indices)-205(owned)-205(by)-205(the)]TJ 1 0 0 1 124.802 533.898 Tm [(curr)18(ent)-250(pr)18(ocess)-250(and)]TJ/F147 9.9626 Tf 89.105 0 Td [(lidx\050:\051)]TJ/F84 9.9626 Tf 39.103 0 Td [(containing)-250(the)-250(corr)18(esponding)-250(local)-250(indices;)]TJ 0 g 0 G -140.661 -19.925 Td [(2.)]TJ 0 g 0 G - 0.98 0 0 1 124.413 513.973 Tm [(Add)-241(the)-241(halo)-241(points)]TJ/F145 9.9626 Tf 1 0 0 1 212.672 513.973 Tm [(ja\050:\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 241.177 513.973 Tm [(and)-241(their)-241(associated)-241(local)-241(indices)]TJ/F145 9.9626 Tf 1 0 0 1 384.793 513.973 Tm [(lidx\050:\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 423.758 513.973 Tm [(with)]TJ 1 0 0 1 124.802 502.018 Tm [(a\050some\051)-250(call\050s\051)-250(to)]TJ/F145 9.9626 Tf 77.07 0 Td [(psb_cdins\050nz,ja,desc,info,lidx=lidx\051)]TJ/F84 9.9626 Tf 188.292 0 Td [(;)]TJ + 0.98 0 0 1 124.413 513.973 Tm [(Add)-241(the)-241(halo)-241(points)]TJ/F147 9.9626 Tf 1 0 0 1 212.672 513.973 Tm [(ja\050:\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 241.177 513.973 Tm [(and)-241(their)-241(associated)-241(local)-241(indices)]TJ/F147 9.9626 Tf 1 0 0 1 384.793 513.973 Tm [(lidx\050:\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 423.758 513.973 Tm [(with)]TJ 1 0 0 1 124.802 502.018 Tm [(a\050some\051)-250(call\050s\051)-250(to)]TJ/F147 9.9626 Tf 77.07 0 Td [(psb_cdins\050nz,ja,desc,info,lidx=lidx\051)]TJ/F84 9.9626 Tf 188.292 0 Td [(;)]TJ 0 g 0 G -277.815 -19.925 Td [(3.)]TJ 0 g 0 G - [-461(Assemble)-250(the)-250(descriptor)-250(with)]TJ/F145 9.9626 Tf 143.998 0 Td [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ + [-461(Assemble)-250(the)-250(descriptor)-250(with)]TJ/F147 9.9626 Tf 143.998 0 Td [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)]TJ 0 g 0 G -191.071 -19.926 Td [(4.)]TJ 0 g 0 G - 0.98 0 0 1 124.802 462.167 Tm [(Build)-206(the)-207(sparse)-206(matrices)-207(and)-206(vectors,)-216(optionally)-207(making)-206(use)-206(in)]TJ/F145 9.9626 Tf 1 0 0 1 396.533 462.167 Tm [(psb_spins)]TJ/F84 9.9626 Tf 1.02 0 0 1 124.802 450.212 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 144.844 450.212 Tm [(psb_geins)]TJ/F84 9.9626 Tf 1.02 0 0 1 194.755 450.212 Tm [(of)-279(the)]TJ/F145 9.9626 Tf 1 0 0 1 223.457 450.212 Tm [(local)]TJ/F84 9.9626 Tf 1.02 0 0 1 252.446 450.212 Tm [(ar)18(gument)-280(specifying)-279(that)-279(the)-279(indices)-279(in)]TJ/F145 9.9626 Tf 1 0 0 1 431.851 450.212 Tm [(ia)]TJ/F84 9.9626 Tf 1.02 0 0 1 442.311 450.212 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 438.257 Tm [(ja)]TJ/F84 9.9626 Tf 12.951 0 Td [(and)]TJ/F145 9.9626 Tf 19.358 0 Td [(irw)]TJ/F84 9.9626 Tf 15.691 0 Td [(,)-250(r)18(espectively)111(,)-250(ar)18(e)-250(alr)18(eady)-250(local)-250(indices.)]TJ/F75 11.9552 Tf -72.907 -29.133 Td [(2.4)-1000(Programming)-250(model)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 390.16 Tm [(The)-266(PSBLAS)-265(librarary)-266(is)-266(based)-265(on)-266(the)-266(Single)-266(Pr)18(ogram)-266(Multiple)-265(Data)-266(\050SPMD\051)]TJ 1.008 0 0 1 99.596 378.205 Tm [(pr)18(ogramming)-250(model:)-310(each)-250(pr)18(ocess)-250(participating)-249(in)-250(the)-250(computation)-249(performs)]TJ 1 0 0 1 99.895 366.25 Tm [(the)-250(same)-250(actions)-250(on)-250(a)-250(chunk)-250(of)-250(data.)-310(Parallelism)-250(is)-250(thus)-250(data-driven.)]TJ 1.019 0 0 1 114.839 354.295 Tm [(Because)-246(of)-246(this)-246(str)8(uctur)17(e,)-246(many)-246(subr)18(outines)-246(coor)18(dinate)-246(their)-246(action)-247(acr)18(oss)]TJ 1.02 0 0 1 99.895 342.34 Tm [(the)-265(various)-264(pr)18(ocesses,)-270(thus)-264(pr)17(oviding)-264(an)-265(implicit)-264(synchr)17(onization)-264(point,)-270(and)]TJ 1.02 0 0 1 99.895 330.384 Tm [(ther)18(efor)17(e)]TJ/F78 9.9626 Tf 1.02 0 0 1 143.363 330.384 Tm [(must)]TJ/F84 9.9626 Tf 1.02 0 0 1 167.293 330.384 Tm [(be)-299(called)-299(simultaneously)-299(by)-298(all)-299(pr)17(ocesses)-299(participat)1(ing)-299(in)-299(the)]TJ 0.98 0 0 1 99.895 318.429 Tm [(computation.)-306(This)-225(is)-225(certainly)-225(tr)9(ue)-225(for)-225(the)-225(data)-225(allocation)-225(and)-224(assembly)-225(r)18(outines,)]TJ 1 0 0 1 99.895 306.474 Tm [(for)-250(all)-250(the)-250(computational)-250(r)18(outines)-250(and)-250(for)-250(some)-250(of)-250(the)-250(tools)-250(r)18(outines.)]TJ 1.02 0 0 1 114.839 294.519 Tm [(However)-269(ther)17(e)-269(ar)18(e)-270(many)-269(cases)-269(wher)18(e)-270(no)-269(synchr)18(onization,)-276(and)-269(indeed)-269(no)]TJ 1.02 0 0 1 99.895 282.564 Tm [(communication)-282(among)-281(pr)17(ocesses,)-290(is)-282(implied;)-300(for)-282(instance,)-290(all)-282(the)-282(r)18(outines)-282(in)]TJ 1.02 0 0 1 99.895 270.609 Tm [(sec.)]TJ + 0.98 0 0 1 124.802 462.167 Tm [(Build)-206(the)-207(sparse)-206(matrices)-207(and)-206(vectors,)-216(optionally)-207(making)-206(use)-206(in)]TJ/F147 9.9626 Tf 1 0 0 1 396.533 462.167 Tm [(psb_spins)]TJ/F84 9.9626 Tf 1.02 0 0 1 124.802 450.212 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 144.844 450.212 Tm [(psb_geins)]TJ/F84 9.9626 Tf 1.02 0 0 1 194.755 450.212 Tm [(of)-279(the)]TJ/F147 9.9626 Tf 1 0 0 1 223.457 450.212 Tm [(local)]TJ/F84 9.9626 Tf 1.02 0 0 1 252.446 450.212 Tm [(ar)18(gument)-280(specifying)-279(that)-279(the)-279(indices)-279(in)]TJ/F147 9.9626 Tf 1 0 0 1 431.851 450.212 Tm [(ia)]TJ/F84 9.9626 Tf 1.02 0 0 1 442.311 450.212 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 438.257 Tm [(ja)]TJ/F84 9.9626 Tf 12.951 0 Td [(and)]TJ/F147 9.9626 Tf 19.358 0 Td [(irw)]TJ/F84 9.9626 Tf 15.691 0 Td [(,)-250(r)18(espectively)111(,)-250(ar)18(e)-250(alr)18(eady)-250(local)-250(indices.)]TJ/F75 11.9552 Tf -72.907 -29.133 Td [(2.4)-1000(Programming)-250(model)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 390.16 Tm [(The)-266(PSBLAS)-265(librarary)-266(is)-266(based)-265(on)-266(the)-266(Single)-266(Pr)18(ogram)-266(Multiple)-265(Data)-266(\050SPMD\051)]TJ 1.008 0 0 1 99.596 378.205 Tm [(pr)18(ogramming)-250(model:)-310(each)-250(pr)18(ocess)-250(participating)-249(in)-250(the)-250(computation)-249(performs)]TJ 1 0 0 1 99.895 366.25 Tm [(the)-250(same)-250(actions)-250(on)-250(a)-250(chunk)-250(of)-250(data.)-310(Parallelism)-250(is)-250(thus)-250(data-driven.)]TJ 1.019 0 0 1 114.839 354.295 Tm [(Because)-246(of)-246(this)-246(str)8(uctur)17(e,)-246(many)-246(subr)18(outines)-246(coor)18(dinate)-246(their)-246(action)-247(acr)18(oss)]TJ 1.02 0 0 1 99.895 342.34 Tm [(the)-265(various)-264(pr)18(ocesses,)-270(thus)-264(pr)17(oviding)-264(an)-265(implicit)-264(synchr)17(onization)-264(point,)-270(and)]TJ 1.02 0 0 1 99.895 330.384 Tm [(ther)18(efor)17(e)]TJ/F78 9.9626 Tf 1.02 0 0 1 143.363 330.384 Tm [(must)]TJ/F84 9.9626 Tf 1.02 0 0 1 167.293 330.384 Tm [(be)-299(called)-299(simultaneously)-299(by)-298(all)-299(pr)17(ocesses)-299(participat)1(ing)-299(in)-299(the)]TJ 0.98 0 0 1 99.895 318.429 Tm [(computation.)-306(This)-225(is)-225(certainly)-225(tr)9(ue)-225(for)-225(the)-225(data)-225(allocation)-225(and)-224(assembly)-225(r)18(outines,)]TJ 1 0 0 1 99.895 306.474 Tm [(for)-250(all)-250(the)-250(computational)-250(r)18(outines)-250(and)-250(for)-250(some)-250(of)-250(the)-250(tools)-250(r)18(outines.)]TJ 0.995 0 0 1 114.839 294.519 Tm [(However)-251(ther)18(e)-251(ar)18(e)-251(cases)-250(wher)18(e)-251(no)-251(synchr)18(onization,)-251(and)-251(indeed)-251(no)-251(commu-)]TJ 1.006 0 0 1 99.895 282.564 Tm [(nication)-248(among)-249(pr)18(ocesses,)-249(is)-248(implied;)-248(for)-249(instance,)-248(all)-249(the)-248(r)18(outines)-249(in)-248(sec.)]TJ 0 0 1 rg 0 0 1 RG - [-377(3)]TJ + [-249(3)]TJ 0 g 0 G - [-377(ar)17(e)-377(only)-377(acting)-377(on)-378(the)-377(local)-377(data)-377(str)8(uctur)17(es,)-410(and)-377(thus)-377(may)-378(b)1(e)-378(called)]TJ 1.02 0 0 1 99.895 258.653 Tm [(independently)109(.)-657(The)-362(most)-363(important)-363(case)-362(is)-363(that)-363(of)-362(the)-363(coef)18(\002cient)-363(insertion)]TJ 0.98 0 0 1 99.895 246.698 Tm [(r)18(outines:)-296(since)-215(the)-215(number)-216(of)-215(coef)19(\002)-1(cients)-215(in)-215(the)-215(sparse)-216(and)-215(dense)-215(matrices)-215(varies)]TJ 0.996 0 0 1 99.895 234.743 Tm [(among)-252(the)-251(pr)18(ocessors,)-252(and)-252(since)-252(the)-251(user)-252(is)-252(fr)18(ee)-251(to)-252(choose)-252(an)-251(arbitrary)-252(or)18(der)-252(in)]TJ 1 0 0 1 99.895 222.788 Tm [(builiding)-250(the)-250(matrix)-250(entries,)-250(these)-250(r)18(outines)-250(cannot)-250(imply)-250(a)-250(synchr)18(onization.)]TJ 14.944 -11.955 Td [(Thr)18(oughout)-250(this)-250(user)-74('s)-250(guide)-250(each)-250(subr)18(outine)-250(will)-250(be)-250(clearly)-250(indicated)-250(as:)]TJ + [-248(ar)18(e)]TJ 1 0 0 1 99.895 270.609 Tm [(only)-251(acting)-251(on)-251(the)-250(local)-251(data)-251(str)8(uctur)18(es,)-251(and)-251(thus)-251(may)-251(be)-250(called)-251(independently)111(.)]TJ 1.02 0 0 1 99.587 258.653 Tm [(The)-251(most)-251(important)-251(case)-251(is)-251(that)-251(of)-251(the)-251(coef)18(\002cient)-251(insertion)-251(r)18(outines:)-316(since)-251(the)]TJ 1.01 0 0 1 99.895 246.698 Tm [(number)-246(of)-247(coef)18(\002cients)-246(in)-246(the)-247(sparse)-246(and)-246(dense)-247(matrices)-246(varies)-246(among)-246(the)-247(pr)18(o-)]TJ 1.013 0 0 1 99.895 234.743 Tm [(cessors,)-248(and)-247(since)-247(the)-248(user)-247(is)-248(fr)18(ee)-247(to)-248(choose)-247(an)-248(arbitrary)-247(or)18(der)-248(in)-247(builiding)-247(the)]TJ 1 0 0 1 99.895 222.788 Tm [(matrix)-250(entries,)-250(these)-250(r)18(outines)-250(cannot)-250(imply)-250(a)-250(synchr)18(onization.)]TJ 14.944 -11.955 Td [(Thr)18(oughout)-250(this)-250(user)-74('s)-250(guide)-250(each)-250(subr)18(outine)-250(will)-250(be)-250(clearly)-250(indicated)-250(as:)]TJ 0 g 0 G /F75 9.9626 Tf -14.944 -19.926 Td [(Synchronous:)]TJ 0 g 0 G @@ -5851,15 +5860,15 @@ ET endstream endobj -1015 0 obj +1016 0 obj << -/Length 8766 +/Length 8791 >> stream 0 g 0 G 0 g 0 G BT -/F75 14.3462 Tf 150.705 705.784 Td [(3)-1000(Data)-250(Structures)-250(and)-250(Classes)]TJ/F84 9.9626 Tf 1.015 0 0 1 150.705 682.693 Tm [(In)-246(this)-246(chapter)-246(we)-247(illustrate)-246(the)-246(data)-246(str)8(uctur)18(es)-246(used)-247(for)-246(de\002nition)-246(of)-246(r)18(outines)]TJ 1.02 0 0 1 150.705 670.737 Tm [(interfaces.)-430(They)-287(include)-287(data)-287(str)8(uctur)18(es)-287(for)-287(sparse)-287(matrices,)-298(communication)]TJ 1 0 0 1 150.705 658.782 Tm [(descriptors)-250(and)-250(pr)18(econditioners.)]TJ 0.999 0 0 1 165.649 646.626 Tm [(All)-251(the)-251(data)-252(types)-251(and)-251(the)-251(basic)-251(subr)18(outine)-252(interfaces)-251(r)18(elated)-251(to)-251(descriptors)]TJ 1.02 0 0 1 150.705 634.671 Tm [(and)-296(sparse)-297(matrices)-296(ar)17(e)-296(de\002ned)-297(in)-296(the)-297(module)]TJ/F145 9.9626 Tf 1 0 0 1 364.369 634.671 Tm [(psb_base_mod)]TJ/F84 9.9626 Tf 1.02 0 0 1 427.133 634.671 Tm [(;)-322(this)-297(will)-296(have)]TJ 1.02 0 0 1 150.705 622.716 Tm [(to)-335(be)-335(included)-335(by)-335(every)-335(user)-336(subr)18(outine)-335(that)-335(makes)-335(use)-335(of)-335(the)-336(lib)1(rary)108(.)-574(The)]TJ 1 0 0 1 150.406 610.76 Tm [(pr)18(econditioners)-250(ar)18(e)-250(de\002ned)-250(in)-250(the)-250(module)]TJ/F145 9.9626 Tf 187.993 0 Td [(psb_prec_mod)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 598.604 Tm [(Integer)73(,)-362(r)17(eal)-338(and)-339(complex)-338(data)-339(types)-338(ar)17(e)-338(parametrized)-339(with)-338(a)-339(kind)-338(type)]TJ 1 0 0 1 150.705 586.649 Tm [(de\002ned)-250(in)-250(the)-250(library)-250(as)-250(follows:)]TJ +/F75 14.3462 Tf 150.705 705.784 Td [(3)-1000(Data)-250(Structures)-250(and)-250(Classes)]TJ/F84 9.9626 Tf 1.015 0 0 1 150.705 682.693 Tm [(In)-246(this)-246(chapter)-246(we)-247(illustrate)-246(the)-246(data)-246(str)8(uctur)18(es)-246(used)-247(for)-246(de\002nition)-246(of)-246(r)18(outines)]TJ 1.02 0 0 1 150.705 670.737 Tm [(interfaces.)-430(They)-287(include)-287(data)-287(str)8(uctur)18(es)-287(for)-287(sparse)-287(matrices,)-298(communication)]TJ 1 0 0 1 150.705 658.782 Tm [(descriptors)-250(and)-250(pr)18(econditioners.)]TJ 0.999 0 0 1 165.649 646.626 Tm [(All)-251(the)-251(data)-252(types)-251(and)-251(the)-251(basic)-251(subr)18(outine)-252(interfaces)-251(r)18(elated)-251(to)-251(descriptors)]TJ 1.02 0 0 1 150.705 634.671 Tm [(and)-296(sparse)-297(matrices)-296(ar)17(e)-296(de\002ned)-297(in)-296(the)-297(module)]TJ/F147 9.9626 Tf 1 0 0 1 364.369 634.671 Tm [(psb_base_mod)]TJ/F84 9.9626 Tf 1.02 0 0 1 427.133 634.671 Tm [(;)-322(this)-297(will)-296(have)]TJ 1.02 0 0 1 150.705 622.716 Tm [(to)-335(be)-335(included)-335(by)-335(every)-335(user)-336(subr)18(outine)-335(that)-335(makes)-335(use)-335(of)-335(the)-336(lib)1(rary)108(.)-574(The)]TJ 1 0 0 1 150.406 610.76 Tm [(pr)18(econditioners)-250(ar)18(e)-250(de\002ned)-250(in)-250(the)-250(module)]TJ/F147 9.9626 Tf 187.993 0 Td [(psb_prec_mod)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 598.604 Tm [(Integer)73(,)-362(r)17(eal)-338(and)-339(complex)-338(data)-339(types)-338(ar)17(e)-338(parametrized)-339(with)-338(a)-339(kind)-338(type)]TJ 1 0 0 1 150.705 586.649 Tm [(de\002ned)-250(in)-250(the)-250(library)-250(as)-250(follows:)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.528 Td [(psb)]TJ ET @@ -5878,7 +5887,7 @@ Q BT /F84 9.9626 Tf 1.02 0 0 1 196.055 566.121 Tm [(Kind)-361(parameter)-362(for)-361(short)-362(pr)18(ecision)-362(r)18(eal)-362(and)-361(complex)-362(data;)-419(corr)17(e-)]TJ 1 0 0 1 175.611 554.166 Tm [(sponds)-250(to)-250(a)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F145 9.9626 Tf 52.902 0 Td [(REAL)]TJ +/F147 9.9626 Tf 52.902 0 Td [(REAL)]TJ 0 g 0 G /F84 9.9626 Tf 23.412 0 Td [(declaration)-250(and)-250(is)-250(normally)-250(4)-250(bytes;)]TJ 0 g 0 G @@ -5899,7 +5908,7 @@ Q BT /F84 9.9626 Tf 1.02 0 0 1 197.718 533.436 Tm [(Kind)-376(parameter)-375(for)-376(long)-376(pr)18(ecision)-375(r)17(eal)-375(and)-376(complex)-376(data;)-441(corr)18(e-)]TJ 1 0 0 1 175.611 521.481 Tm [(sponds)-250(to)-250(a)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F145 9.9626 Tf 52.902 0 Td [(DOUBLE)-525(PRECISION)]TJ +/F147 9.9626 Tf 52.902 0 Td [(DOUBLE)-525(PRECISION)]TJ 0 g 0 G /F84 9.9626 Tf 86.176 0 Td [(declaration)-250(and)-250(is)-250(normally)-250(8)-250(bytes;)]TJ 0 g 0 G @@ -5935,7 +5944,7 @@ q Q 0 g 0 G BT -/F84 9.9626 Tf 1.02 0 0 1 196.613 480.022 Tm [(Kind)-311(parameter)-312(for)-311(8-bytes)-311(integer)-311(data,)-328(as)-312(is)-311(always)-311(used)-312(by)-311(the)]TJ/F145 9.9626 Tf 1 0 0 1 175.611 468.067 Tm [(sizeof)]TJ/F84 9.9626 Tf 33.873 0 Td [(methods;)]TJ +/F84 9.9626 Tf 0.983 0 0 1 196.613 480.022 Tm [(Kind)-255(parameter)-256(for)-255(8-bytes)-255(integer)-256(data,)-255(as)-256(is)-255(always)-256(r)19(eturned)-256(by)-255(the)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 468.067 Tm [(sizeof)]TJ/F84 9.9626 Tf 33.873 0 Td [(methods;)]TJ 0 g 0 G /F75 9.9626 Tf -58.779 -20.73 Td [(psb)]TJ ET @@ -5969,25 +5978,25 @@ q Q 0 g 0 G BT -/F84 9.9626 Tf 1.02 0 0 1 194.949 414.653 Tm [(Kind)-266(parameter)-266(for)-266(\223global\224)-266(integer)-266(indices)-266(and)-266(data;)-277(with)-266(default)]TJ 1 0 0 1 175.611 402.698 Tm [(build)-250(options)-250(this)-250(is)-250(an)-250(8)-250(bytes)-250(integer;)]TJ 1.017 0 0 1 150.396 382.169 Tm [(The)-246(integer)-246(kinds)-246(for)-246(local)-246(and)-246(global)-246(indices)-246(can)-246(be)-246(chosen)-246(at)-246(con\002gur)18(e)-246(time)]TJ 1.02 0 0 1 150.705 370.214 Tm [(to)-273(hold)-273(4)-273(or)-273(8)-273(bytes,)-280(with)-273(the)-273(global)-273(indices)-273(at)-273(least)-273(as)-273(lar)18(ge)-273(as)-273(the)-273(local)-273(ones.)]TJ 1.002 0 0 1 150.396 358.259 Tm [(T)92(ogether)-249(with)-249(the)-250(classes)-249(attributes)-249(we)-249(also)-249(discuss)-249(their)-249(methods.)-310(Most)-249(meth-)]TJ 1.016 0 0 1 150.705 346.304 Tm [(ods)-245(detailed)-245(her)18(e)-245(only)-245(act)-245(on)-245(the)-244(local)-245(variable,)-245(i.e.)-305(their)-245(action)-245(is)-245(pur)18(ely)-245(local)]TJ 1.02 0 0 1 150.705 334.349 Tm [(and)-346(asynchr)18(onous)-346(unless)-346(otherwise)-346(stated.)-607(The)-346(list)-346(of)-346(methods)-346(her)17(e)-346(is)-346(not)]TJ 1.006 0 0 1 150.705 322.393 Tm [(completely)-247(exhaustive;)-248(many)-248(methods,)-247(especially)-248(those)-247(that)-248(alt)1(er)-248(the)-247(contents)]TJ 0.984 0 0 1 150.705 310.438 Tm [(of)-253(the)-254(various)-253(objects,)-253(ar)18(e)-253(usually)-254(not)-253(needed)-253(by)-254(the)-253(end-user)75(,)-253(and)-254(ther)19(efor)18(e)-253(ar)18(e)]TJ 1 0 0 1 150.705 298.483 Tm [(described)-250(in)-250(the)-250(developer)-74('s)-250(documentation.)]TJ/F75 11.9552 Tf 0 -30.277 Td [(3.1)-1000(Descriptor)-250(data)-250(structure)]TJ/F84 9.9626 Tf 1.02 0 0 1 150.316 248.853 Tm [(All)-387(the)-386(general)-387(matrix)-387(informations)-386(and)-387(elements)-387(to)-387(be)-386(exchanged)-387(among)]TJ 1.02 0 0 1 150.406 236.897 Tm [(pr)18(ocesses)-247(ar)18(e)-247(stor)18(ed)-247(within)-246(a)-247(data)-246(str)7(uctur)18(e)-246(of)-247(the)-247(type)]TJ/F145 9.9626 Tf 1 0 0 1 397.584 236.897 Tm [(psb)]TJ +/F84 9.9626 Tf 1.02 0 0 1 194.949 414.653 Tm [(Kind)-266(parameter)-266(for)-266(\223global\224)-266(integer)-266(indices)-266(and)-266(data;)-277(with)-266(default)]TJ 1 0 0 1 175.611 402.698 Tm [(build)-250(options)-250(this)-250(is)-250(an)-250(8)-250(bytes)-250(integer;)]TJ 1.017 0 0 1 150.396 382.169 Tm [(The)-246(integer)-246(kinds)-246(for)-246(local)-246(and)-246(global)-246(indices)-246(can)-246(be)-246(chosen)-246(at)-246(con\002gur)18(e)-246(time)]TJ 1.02 0 0 1 150.705 370.214 Tm [(to)-273(hold)-273(4)-273(or)-273(8)-273(bytes,)-280(with)-273(the)-273(global)-273(indices)-273(at)-273(least)-273(as)-273(lar)18(ge)-273(as)-273(the)-273(local)-273(ones.)]TJ 1.002 0 0 1 150.396 358.259 Tm [(T)92(ogether)-249(with)-249(the)-250(classes)-249(attributes)-249(we)-249(also)-249(discuss)-249(their)-249(methods.)-310(Most)-249(meth-)]TJ 1.016 0 0 1 150.705 346.304 Tm [(ods)-245(detailed)-245(her)18(e)-245(only)-245(act)-245(on)-245(the)-244(local)-245(variable,)-245(i.e.)-305(their)-245(action)-245(is)-245(pur)18(ely)-245(local)]TJ 1.02 0 0 1 150.705 334.349 Tm [(and)-346(asynchr)18(onous)-346(unless)-346(otherwise)-346(stated.)-607(The)-346(list)-346(of)-346(methods)-346(her)17(e)-346(is)-346(not)]TJ 1.006 0 0 1 150.705 322.393 Tm [(completely)-247(exhaustive;)-248(many)-248(methods,)-247(especially)-248(those)-247(that)-248(alt)1(er)-248(the)-247(contents)]TJ 0.984 0 0 1 150.705 310.438 Tm [(of)-253(the)-254(various)-253(objects,)-253(ar)18(e)-253(usually)-254(not)-253(needed)-253(by)-254(the)-253(end-user)75(,)-253(and)-254(ther)19(efor)18(e)-253(ar)18(e)]TJ 1 0 0 1 150.705 298.483 Tm [(described)-250(in)-250(the)-250(developer)-74('s)-250(documentation.)]TJ/F75 11.9552 Tf 0 -30.277 Td [(3.1)-1000(Descriptor)-250(data)-250(structure)]TJ/F84 9.9626 Tf 1.02 0 0 1 150.316 248.853 Tm [(All)-361(the)-360(general)-361(matrix)-361(informatio)1(n)-361(and)-361(the)-360(identi\002cation)-361(of)-361(elements)-360(to)-361(be)]TJ 1.02 0 0 1 150.705 236.897 Tm [(exchanged)-377(among)-377(pr)17(ocesses)-377(ar)18(e)-377(stor)17(ed)-377(within)-377(a)-377(data)-378(str)8(uctur)18(e)-377(of)-377(the)-378(type)]TJ/F147 9.9626 Tf 1 0 0 1 150.705 224.942 Tm [(psb)]TJ ET q -1 0 0 1 413.902 237.097 cm +1 0 0 1 167.023 225.142 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 417.041 236.897 Td [(desc)]TJ +/F147 9.9626 Tf 170.162 224.942 Td [(desc)]TJ ET q -1 0 0 1 438.59 237.097 cm +1 0 0 1 191.711 225.142 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 441.728 236.897 Td [(type)]TJ/F84 9.9626 Tf 1.02 0 0 1 462.649 236.897 Tm [(.)-308(Every)]TJ 0.98 0 0 1 150.705 224.942 Tm [(str)8(uctur)19(e)-237(of)-237(this)-237(type)-237(is)-238(as)1(sociated)-237(with)-238(a)-237(discr)19(etization)-237(pattern)-237(and)-237(enables)-237(data)]TJ 0.997 0 0 1 150.705 212.987 Tm [(communications)-252(and)-252(other)-253(operations)-252(that)-252(ar)18(e)-252(necessary)-253(for)-252(implementing)-252(the)]TJ 1 0 0 1 150.426 201.032 Tm [(various)-250(algorithms)-250(of)-250(inter)18(est)-250(to)-250(us.)]TJ 1.007 0 0 1 165.649 188.876 Tm [(The)-249(data)-248(str)8(uctur)17(e)-248(itself)]TJ/F145 9.9626 Tf 1 0 0 1 273.186 188.876 Tm [(psb_desc_type)]TJ/F84 9.9626 Tf 1.007 0 0 1 343.676 188.876 Tm [(can)-249(be)-248(tr)17(eated)-248(as)-249(an)-249(opaque)-248(object)]TJ 1.02 0 0 1 150.705 176.921 Tm [(handled)-278(via)-279(the)-278(tools)-278(r)17(outines)-278(of)-278(Sec.)]TJ +/F147 9.9626 Tf 194.849 224.942 Td [(type)]TJ/F84 9.9626 Tf 1.02 0 0 1 215.77 224.942 Tm [(.)-658(Every)-363(str)8(uctur)18(e)-363(of)-363(this)-363(type)-363(is)-363(associated)-363(with)-363(a)-363(discr)17(etiza-)]TJ 1.02 0 0 1 150.705 212.987 Tm [(tion)-279(pat)1(tern)-279(and)-279(enables)-278(data)-279(communications)-278(and)-279(other)-278(operations)-279(that)-278(ar)17(e)]TJ 1 0 0 1 150.705 201.032 Tm [(necessary)-250(for)-250(implementing)-250(the)-250(various)-250(algorithms)-250(of)-250(inter)18(est)-250(to)-250(us.)]TJ 1.007 0 0 1 165.649 188.876 Tm [(The)-249(data)-248(str)8(uctur)17(e)-248(itself)]TJ/F147 9.9626 Tf 1 0 0 1 273.186 188.876 Tm [(psb_desc_type)]TJ/F84 9.9626 Tf 1.007 0 0 1 343.676 188.876 Tm [(can)-249(be)-248(tr)17(eated)-248(as)-249(an)-249(opaque)-248(object)]TJ 1.02 0 0 1 150.705 176.921 Tm [(handled)-278(via)-279(the)-278(tools)-278(r)17(outines)-278(of)-278(Sec.)]TJ 0 0 1 rg 0 0 1 RG [-279(6)]TJ 0 g 0 G - [-278(or)-279(t)1(he)-279(query)-278(r)17(outines)-278(detailed)-278(below;)]TJ 1 0 0 1 150.705 164.965 Tm [(nevertheless)-250(we)-250(include)-250(her)18(e)-250(a)-250(description)-250(for)-250(the)-250(curious)-250(r)18(eader)74(.)]TJ 0.99 0 0 1 165.649 152.809 Tm [(First)-252(we)-252(describe)-252(the)]TJ/F145 9.9626 Tf 1 0 0 1 258.128 152.809 Tm [(psb_indx_map)]TJ/F84 9.9626 Tf 0.99 0 0 1 323.379 152.809 Tm [(type.)-313(This)-252(is)-252(a)-252(data)-252(str)8(uctur)18(e)-252(that)-252(keeps)]TJ 1 0 0 1 150.705 140.854 Tm [(track)-250(of)-250(a)-250(certain)-250(number)-250(of)-250(basic)-250(issues)-250(such)-250(as:)]TJ + [-278(or)-279(t)1(he)-279(query)-278(r)17(outines)-278(detailed)-278(below;)]TJ 1 0 0 1 150.705 164.965 Tm [(nevertheless)-250(we)-250(include)-250(her)18(e)-250(a)-250(description)-250(for)-250(the)-250(curious)-250(r)18(eader)74(.)]TJ 0.99 0 0 1 165.649 152.809 Tm [(First)-252(we)-252(describe)-252(the)]TJ/F147 9.9626 Tf 1 0 0 1 258.128 152.809 Tm [(psb_indx_map)]TJ/F84 9.9626 Tf 0.99 0 0 1 323.379 152.809 Tm [(type.)-313(This)-252(is)-252(a)-252(data)-252(str)8(uctur)18(e)-252(that)-252(keeps)]TJ 1 0 0 1 150.705 140.854 Tm [(track)-250(of)-250(a)-250(certain)-250(number)-250(of)-250(basic)-250(issues)-250(such)-250(as:)]TJ 0 g 0 G 13.888 -20.528 Td [(\225)]TJ 0 g 0 G @@ -5999,7 +6008,7 @@ ET endstream endobj -1023 0 obj +1024 0 obj << /Length 6419 >> @@ -6126,7 +6135,7 @@ ET endstream endobj -1034 0 obj +1035 0 obj << /Length 7288 >> @@ -6213,7 +6222,7 @@ Q BT /F75 9.9626 Tf 172.553 453.472 Td [(elem)]TJ 0 g 0 G -/F84 9.9626 Tf 0.995 0 0 1 199.282 453.472 Tm [(A)-252(list)-251(of)-252(all)-252(boundary)-251(points,)-252(i.e.)-313(points)-251(that)-252(have)-252(a)-251(connection)-252(with)]TJ 1 0 0 1 175.611 441.517 Tm [(other)-250(pr)18(ocesses.)]TJ 1.02 0 0 1 150.396 420.462 Tm [(The)-350(Fortran)-350(2003)-350(declaration)-350(for)]TJ/F145 9.9626 Tf 1 0 0 1 302.443 420.462 Tm [(psb_desc_type)]TJ/F84 9.9626 Tf 1.02 0 0 1 373.993 420.462 Tm [(str)8(uctur)18(es)-350(is)-350(as)-350(follows:)-514(A)]TJ +/F84 9.9626 Tf 0.995 0 0 1 199.282 453.472 Tm [(A)-252(list)-251(of)-252(all)-252(boundary)-251(points,)-252(i.e.)-313(points)-251(that)-252(have)-252(a)-251(connection)-252(with)]TJ 1 0 0 1 175.611 441.517 Tm [(other)-250(pr)18(ocesses.)]TJ 1.02 0 0 1 150.396 420.462 Tm [(The)-350(Fortran)-350(2003)-350(declaration)-350(for)]TJ/F147 9.9626 Tf 1 0 0 1 302.443 420.462 Tm [(psb_desc_type)]TJ/F84 9.9626 Tf 1.02 0 0 1 373.993 420.462 Tm [(str)8(uctur)18(es)-350(is)-350(as)-350(follows:)-514(A)]TJ 0 g 0 G 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG @@ -6226,7 +6235,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 153.694 388.902 Td [(type)]TJ +/F235 8.9664 Tf 153.694 388.902 Td [(type)]TJ 0 g 0 G [-525(psb_desc_type)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -6365,7 +6374,7 @@ ET endstream endobj -1050 0 obj +1051 0 obj << /Length 5149 >> @@ -6390,7 +6399,7 @@ BT /F75 9.9626 Tf 172.373 687.129 Td [(rows)-250(\227)-250(Get)-250(number)-250(of)-250(local)-250(rows)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -72.478 -19 Td [(nr)-525(=)-525(desc%get_local_rows\050\051)]TJ +/F147 9.9626 Tf -72.478 -19 Td [(nr)-525(=)-525(desc%get_local_rows\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.974 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6412,7 +6421,7 @@ BT 0 0 1 rg 0 0 1 RG [-211(1)]TJ 0 g 0 G - [(,)-220(it)-211(is)-211(equal)-211(to)]TJ/F190 10.3811 Tf 1 0 0 1 339.88 528.314 Tm [(j)-24(I)]TJ/F78 7.5716 Tf 8.943 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.876 1.96 Td [(j)]TJ/F192 10.3811 Tf 4.667 0 Td [(+)]TJ/F190 10.3811 Tf 9.858 0 Td [(j)-24(B)]TJ/F78 7.5716 Tf 10.109 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf 0.98 0 0 1 382.212 528.314 Tm [(.)-302(The)-211(r)19(eturned)]TJ 1 0 0 1 124.523 516.359 Tm [(value)-250(is)-250(speci\002c)-250(to)-250(the)-250(calling)-250(pr)18(ocess.)]TJ/F75 9.9626 Tf -24.628 -27.247 Td [(3.1.3)-1000(get)]TJ + [(,)-220(it)-211(is)-211(equal)-211(to)]TJ/F195 10.3811 Tf 1 0 0 1 339.88 528.314 Tm [(j)-24(I)]TJ/F78 7.5716 Tf 8.943 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.876 1.96 Td [(j)]TJ/F197 10.3811 Tf 4.667 0 Td [(+)]TJ/F195 10.3811 Tf 9.858 0 Td [(j)-24(B)]TJ/F78 7.5716 Tf 10.109 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf 0.98 0 0 1 382.212 528.314 Tm [(.)-302(The)-211(r)19(eturned)]TJ 1 0 0 1 124.523 516.359 Tm [(value)-250(is)-250(speci\002c)-250(to)-250(the)-250(calling)-250(pr)18(ocess.)]TJ/F75 9.9626 Tf -24.628 -27.247 Td [(3.1.3)-1000(get)]TJ ET q 1 0 0 1 144.219 489.311 cm @@ -6429,7 +6438,7 @@ BT /F75 9.9626 Tf 172.373 489.112 Td [(cols)-250(\227)-250(Get)-250(number)-250(of)-250(local)-250(cols)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -72.478 -19 Td [(nc)-525(=)-525(desc%get_local_cols\050\051)]TJ +/F147 9.9626 Tf -72.478 -19 Td [(nc)-525(=)-525(desc%get_local_cols\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.974 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6451,7 +6460,7 @@ BT 0 0 1 rg 0 0 1 RG [-256(1)]TJ 0 g 0 G - [(,)-256(it)]TJ 1.017 0 0 1 124.802 318.342 Tm [(is)-246(equal)-245(to)]TJ/F190 10.3811 Tf 1 0 0 1 173.122 318.342 Tm [(j)-24(I)]TJ/F78 7.5716 Tf 8.943 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F192 10.3811 Tf 5.063 0 Td [(+)]TJ/F190 10.3811 Tf 10.254 0 Td [(j)-24(B)]TJ/F78 7.5716 Tf 10.109 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F192 10.3811 Tf 5.064 0 Td [(+)]TJ/F190 10.3811 Tf 10.253 0 Td [(j)-24(H)]TJ/F78 7.5716 Tf 12.052 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf 1.017 0 0 1 246.489 318.342 Tm [(.)-305(The)-245(r)17(eturned)-245(value)-246(is)-245(speci\002c)-246(to)-245(the)-246(calling)]TJ 1 0 0 1 124.503 306.387 Tm [(pr)18(ocess.)]TJ/F75 9.9626 Tf -24.608 -27.247 Td [(3.1.4)-1000(get)]TJ + [(,)-256(it)]TJ 1.017 0 0 1 124.802 318.342 Tm [(is)-246(equal)-245(to)]TJ/F195 10.3811 Tf 1 0 0 1 173.122 318.342 Tm [(j)-24(I)]TJ/F78 7.5716 Tf 8.943 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F197 10.3811 Tf 5.063 0 Td [(+)]TJ/F195 10.3811 Tf 10.254 0 Td [(j)-24(B)]TJ/F78 7.5716 Tf 10.109 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F197 10.3811 Tf 5.064 0 Td [(+)]TJ/F195 10.3811 Tf 10.253 0 Td [(j)-24(H)]TJ/F78 7.5716 Tf 12.052 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf 1.017 0 0 1 246.489 318.342 Tm [(.)-305(The)-245(r)17(eturned)-245(value)-246(is)-245(speci\002c)-246(to)-245(the)-246(calling)]TJ 1 0 0 1 124.503 306.387 Tm [(pr)18(ocess.)]TJ/F75 9.9626 Tf -24.608 -27.247 Td [(3.1.4)-1000(get)]TJ ET q 1 0 0 1 144.219 279.339 cm @@ -6468,7 +6477,7 @@ BT /F75 9.9626 Tf 179.576 279.14 Td [(rows)-250(\227)-250(Get)-250(number)-250(of)-250(global)-250(rows)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -79.681 -19 Td [(nr)-525(=)-525(desc%get_global_rows\050\051)]TJ +/F147 9.9626 Tf -79.681 -19 Td [(nr)-525(=)-525(desc%get_global_rows\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.974 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6494,7 +6503,7 @@ ET endstream endobj -1055 0 obj +1056 0 obj << /Length 4489 >> @@ -6519,7 +6528,7 @@ BT /F75 9.9626 Tf 230.386 706.129 Td [(cols)-250(\227)-250(Get)-250(number)-250(of)-250(global)-250(cols)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -79.681 -18.974 Td [(nr)-525(=)-525(desc%get_global_cols\050\051)]TJ +/F147 9.9626 Tf -79.681 -18.974 Td [(nr)-525(=)-525(desc%get_global_cols\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.935 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6554,7 +6563,7 @@ BT /F75 9.9626 Tf 230.386 520.408 Td [(indices)-250(\227)-250(Get)-250(vector)-250(of)-250(global)-250(indices)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -79.681 -18.974 Td [(myidx)-525(=)-525(desc%get_global_indices\050[owned]\051)]TJ +/F147 9.9626 Tf -79.681 -18.974 Td [(myidx)-525(=)-525(desc%get_global_indices\050[owned]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.934 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6569,22 +6578,22 @@ BT 0 g 0 G /F75 9.9626 Tf -90.978 -31.902 Td [(owned)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 186.68 383.793 Tm [(Choose)-281(if)-282(you)-281(only)-282(want)-281(owned)-281(indices)-282(\050)]TJ/F145 9.9626 Tf 1 0 0 1 372.731 383.793 Tm [(owned)]TJ +/F84 9.9626 Tf 1.02 0 0 1 186.68 383.793 Tm [(Choose)-281(if)-282(you)-281(only)-282(want)-281(owned)-281(indices)-282(\050)]TJ/F147 9.9626 Tf 1 0 0 1 372.731 383.793 Tm [(owned)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G - [(.true.)]TJ/F84 9.9626 Tf 1.02 0 0 1 435.495 383.793 Tm [(\051)-281(or)-282(also)-281(halo)]TJ 1 0 0 1 175.611 371.838 Tm [(indices)-250(\050)]TJ/F145 9.9626 Tf 36.912 0 Td [(owned)]TJ + [(.true.)]TJ/F84 9.9626 Tf 1.02 0 0 1 435.495 383.793 Tm [(\051)-281(or)-282(also)-281(halo)]TJ 1 0 0 1 175.611 371.838 Tm [(indices)-250(\050)]TJ/F147 9.9626 Tf 36.912 0 Td [(owned)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G - [(.false.)]TJ/F84 9.9626 Tf 67.994 0 Td [(\051.)-310(Scope:)]TJ/F75 9.9626 Tf 40.328 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -167.121 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(;)-250(default:)]TJ/F145 9.9626 Tf 41.873 0 Td [(.true.)]TJ/F84 9.9626 Tf 31.382 0 Td [(.)]TJ + [(.false.)]TJ/F84 9.9626 Tf 67.994 0 Td [(\051.)-310(Scope:)]TJ/F75 9.9626 Tf 40.328 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -167.121 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(;)-250(default:)]TJ/F147 9.9626 Tf 41.873 0 Td [(.true.)]TJ/F84 9.9626 Tf 31.382 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -163.127 -33.89 Td [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G 0 -19.947 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 1.011 0 0 1 223.173 306.046 Tm [(The)-248(global)-249(indi)1(ces,)-249(r)18(eturned)-248(as)-249(an)-248(allocatable)-248(integer)-249(array)-248(of)]TJ 1 0 0 1 175.611 294.091 Tm [(kind)]TJ/F145 9.9626 Tf 22.815 0 Td [(psb_lpk_)]TJ/F84 9.9626 Tf 44.333 0 Td [(and)-250(rank)-250(1.)]TJ/F75 9.9626 Tf -92.054 -27.171 Td [(3.1.7)-1000(get)]TJ +/F84 9.9626 Tf 1.011 0 0 1 223.173 306.046 Tm [(The)-248(global)-249(indi)1(ces,)-249(r)18(eturned)-248(as)-249(an)-248(allocatable)-248(integer)-249(array)-248(of)]TJ 1 0 0 1 175.611 294.091 Tm [(kind)]TJ/F147 9.9626 Tf 22.815 0 Td [(psb_lpk_)]TJ/F84 9.9626 Tf 44.333 0 Td [(and)-250(rank)-250(1.)]TJ/F75 9.9626 Tf -92.054 -27.171 Td [(3.1.7)-1000(get)]TJ ET q 1 0 0 1 195.029 267.119 cm @@ -6594,7 +6603,7 @@ BT /F75 9.9626 Tf 198.017 266.92 Td [(context)-250(\227)-250(Get)-250(communication)-250(context)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -47.312 -18.975 Td [(ctxt)-525(=)-525(desc%get_context\050\051)]TJ +/F147 9.9626 Tf -47.312 -18.975 Td [(ctxt)-525(=)-525(desc%get_context\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.934 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6620,7 +6629,7 @@ ET endstream endobj -1059 0 obj +1060 0 obj << /Length 5019 >> @@ -6631,7 +6640,7 @@ BT /F75 9.9626 Tf 99.895 706.129 Td [(3.1.8)-1000(Clone)-250(\227)-250(clone)-250(current)-250(object)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -19.289 Td [(call)-1050(desc%clone\050descout,info\051)]TJ +/F147 9.9626 Tf 0 -19.289 Td [(call)-1050(desc%clone\050descout,info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.422 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6656,7 +6665,7 @@ BT /F84 9.9626 Tf 23.801 0 Td [(Return)-250(code.)]TJ/F75 9.9626 Tf -23.801 -28.097 Td [(3.1.9)-1000(CNV)-250(\227)-250(convert)-250(internal)-250(storage)-250(format)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -19.289 Td [(call)-1050(desc%cnv\050mold\051)]TJ +/F147 9.9626 Tf 0 -19.289 Td [(call)-1050(desc%cnv\050mold\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.422 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6671,35 +6680,35 @@ BT 0 g 0 G /F75 9.9626 Tf -77.918 -32.553 Td [(mold)]TJ 0 g 0 G -/F84 9.9626 Tf 28.782 0 Td [(the)-250(desir)18(ed)-250(integer)-250(storage)-250(format.)]TJ -3.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0.98 0 0 1 124.802 356.277 Tm [(Speci\002ed)-212(as:)-295(a)-212(object)-212(of)-212(type)-213(der)1(ived)-213(fr)19(om)-212(\050integer\051)]TJ/F145 9.9626 Tf 1 0 0 1 344.16 356.277 Tm [(psb)]TJ +/F84 9.9626 Tf 28.782 0 Td [(the)-250(desir)18(ed)-250(integer)-250(storage)-250(format.)]TJ -3.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0.98 0 0 1 124.802 356.277 Tm [(Speci\002ed)-212(as:)-295(a)-212(object)-212(of)-212(type)-213(der)1(ived)-213(fr)19(om)-212(\050integer\051)]TJ/F147 9.9626 Tf 1 0 0 1 344.16 356.277 Tm [(psb)]TJ ET q 1 0 0 1 360.479 356.476 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.617 356.277 Td [(T)]TJ +/F147 9.9626 Tf 363.617 356.277 Td [(T)]TJ ET q 1 0 0 1 369.475 356.476 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 372.613 356.277 Td [(base)]TJ +/F147 9.9626 Tf 372.613 356.277 Td [(base)]TJ ET q 1 0 0 1 394.162 356.476 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.301 356.277 Td [(vect)]TJ +/F147 9.9626 Tf 397.301 356.277 Td [(vect)]TJ ET q 1 0 0 1 418.849 356.476 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.988 356.277 Td [(type)]TJ/F84 9.9626 Tf 0.98 0 0 1 442.909 356.277 Tm [(.)]TJ 0.98 0 0 1 99.587 333.687 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 118.361 333.687 Tm [(mold)]TJ/F84 9.9626 Tf 0.98 0 0 1 141.713 333.687 Tm [(ar)18(guments)-249(may)-248(be)-249(employed)-249(to)-249(interface)-249(with)-249(special)-249(devices,)-250(such)-249(as)]TJ 1 0 0 1 99.895 321.732 Tm [(GPUs)-250(and)-250(other)-250(accelerators.)]TJ/F75 9.9626 Tf 0 -28.096 Td [(3.1.10)]TJ 0.98 0 0 1 134.765 293.636 Tm [(psb)]TJ +/F147 9.9626 Tf 421.988 356.277 Td [(type)]TJ/F84 9.9626 Tf 0.98 0 0 1 442.909 356.277 Tm [(.)]TJ 0.98 0 0 1 99.587 333.687 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 118.361 333.687 Tm [(mold)]TJ/F84 9.9626 Tf 0.98 0 0 1 141.713 333.687 Tm [(ar)18(guments)-249(may)-248(be)-249(employed)-249(to)-249(interface)-249(with)-249(special)-249(devices,)-250(such)-249(as)]TJ 1 0 0 1 99.895 321.732 Tm [(GPUs)-250(and)-250(other)-250(accelerators.)]TJ/F75 9.9626 Tf 0 -28.096 Td [(3.1.10)]TJ 0.98 0 0 1 134.765 293.636 Tm [(psb)]TJ ET q 1 0 0 1 151.628 293.835 cm @@ -6730,7 +6739,7 @@ BT /F75 9.9626 Tf 0.98 0 0 1 210.386 293.636 Tm [(threshold)-207(\227)-206(Get)-207(threshold)-207(for)-207(index)-207(mapping)-206(switch)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 1 0 0 1 99.895 274.346 Tm [(ith)-525(=)-525(psb_cd_get_hash_threshold\050\051)]TJ +/F147 9.9626 Tf 1 0 0 1 99.895 274.346 Tm [(ith)-525(=)-525(psb_cd_get_hash_threshold\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.421 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6772,7 +6781,7 @@ BT /F75 9.9626 Tf 0.98 0 0 1 209.292 182.634 Tm [(threshold)-254(\227)-255(Set)-254(threshold)-255(for)-254(index)-255(mapping)-254(switch)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 1 0 0 1 99.895 163.345 Tm [(call)-525(psb_cd_set_hash_threshold\050ith\051)]TJ +/F147 9.9626 Tf 1 0 0 1 99.895 163.345 Tm [(call)-525(psb_cd_set_hash_threshold\050ith\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.422 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6787,7 +6796,7 @@ ET endstream endobj -1064 0 obj +1065 0 obj << /Length 5826 >> @@ -6798,7 +6807,7 @@ stream BT /F75 9.9626 Tf 150.705 706.129 Td [(ith)]TJ 0 g 0 G -/F84 9.9626 Tf 17.703 0 Td [(the)-250(new)-250(thr)18(eshold)-250(for)-250(communication)-250(descriptors.)]TJ 7.203 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.072 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(gr)18(eater)-250(than)-250(zer)18(o.)]TJ 1.02 0 0 1 150.396 634.849 Tm [(This)-247(thr)17(eshold)-247(guides)-247(the)-248(library)-247(into)-247(using)-248(a)-247(list)-248(based)-247(or)-247(a)-248(hash-table)-247(based)]TJ 1.02 0 0 1 150.705 622.893 Tm [(descriptor)-277(for)-276(global)-277(to)-277(local)-276(index)-277(conversion;)-292(if)-277(the)-277(size)-276(of)-277(the)-277(gl)1(obal)-277(index)]TJ 1.02 0 0 1 150.705 610.938 Tm [(space)-351(is)-351(below)-351(this)-351(thr)18(eshold,)-377(a)-351(list)-351(based)-351(str)8(uctur)17(e)-351(is)-351(used,)-377(if)-351(it)-351(is)-351(above)-351(a)]TJ 0.986 0 0 1 150.705 598.983 Tm [(hash-table)-252(based)-252(str)8(uctur)18(e)-252(is)-253(used.)-314(Note:)-313(the)-253(thr)19(eshold)-253(value)-252(is)-252(only)-252(queried)-253(by)]TJ 1.02 0 0 1 150.705 587.028 Tm [(the)-259(library)-259(at)-259(the)-260(time)-259(a)-259(call)-259(to)]TJ/F145 9.9626 Tf 1 0 0 1 288.208 587.028 Tm [(psb_cdall)]TJ/F84 9.9626 Tf 1.02 0 0 1 337.915 587.028 Tm [(is)-259(executed,)-263(ther)18(efor)17(e)-259(changing)-259(the)]TJ 1.017 0 0 1 150.705 575.073 Tm [(thr)18(eshold)-245(has)-244(no)-244(ef)18(fect)-244(on)-245(communication)-244(descriptors)-244(that)-245(have)-244(alr)18(eady)-244(been)]TJ 1 0 0 1 150.705 563.118 Tm [(initialized.)-310(Mor)18(eover)-250(the)-250(thr)18(eshold)-250(must)-250(have)-250(the)-250(same)-250(value)-250(on)-250(all)-250(pr)18(ocesses.)]TJ/F75 9.9626 Tf 0 -29.334 Td [(3.1.12)-1000(get)]TJ +/F84 9.9626 Tf 17.703 0 Td [(the)-250(new)-250(thr)18(eshold)-250(for)-250(communication)-250(descriptors.)]TJ 7.203 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.072 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(gr)18(eater)-250(than)-250(zer)18(o.)]TJ 1.02 0 0 1 150.396 634.849 Tm [(This)-247(thr)17(eshold)-247(guides)-247(the)-248(library)-247(into)-247(using)-248(a)-247(list)-248(based)-247(or)-247(a)-248(hash-table)-247(based)]TJ 1.02 0 0 1 150.705 622.893 Tm [(descriptor)-277(for)-276(global)-277(to)-277(local)-276(index)-277(conversion;)-292(if)-277(the)-277(size)-276(of)-277(the)-277(gl)1(obal)-277(index)]TJ 1.02 0 0 1 150.705 610.938 Tm [(space)-351(is)-351(below)-351(this)-351(thr)18(eshold,)-377(a)-351(list)-351(based)-351(str)8(uctur)17(e)-351(is)-351(used,)-377(if)-351(it)-351(is)-351(above)-351(a)]TJ 0.986 0 0 1 150.705 598.983 Tm [(hash-table)-252(based)-252(str)8(uctur)18(e)-252(is)-253(used.)-314(Note:)-313(the)-253(thr)19(eshold)-253(value)-252(is)-252(only)-252(queried)-253(by)]TJ 1.02 0 0 1 150.705 587.028 Tm [(the)-259(library)-259(at)-259(the)-260(time)-259(a)-259(call)-259(to)]TJ/F147 9.9626 Tf 1 0 0 1 288.208 587.028 Tm [(psb_cdall)]TJ/F84 9.9626 Tf 1.02 0 0 1 337.915 587.028 Tm [(is)-259(executed,)-263(ther)18(efor)17(e)-259(changing)-259(the)]TJ 1.017 0 0 1 150.705 575.073 Tm [(thr)18(eshold)-245(has)-244(no)-244(ef)18(fect)-244(on)-245(communication)-244(descriptors)-244(that)-245(have)-244(alr)18(eady)-244(been)]TJ 1 0 0 1 150.705 563.118 Tm [(initialized.)-310(Mor)18(eover)-250(the)-250(thr)18(eshold)-250(must)-250(have)-250(the)-250(same)-250(value)-250(on)-250(all)-250(pr)18(ocesses.)]TJ/F75 9.9626 Tf 0 -29.334 Td [(3.1.12)-1000(get)]TJ ET q 1 0 0 1 200.01 533.983 cm @@ -6815,7 +6824,7 @@ BT /F75 9.9626 Tf 212.672 533.784 Td [(adjcncy)-250(\227)-250(Get)-250(process)-250(adjacency)-250(list)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -61.967 -19.711 Td [(list)-525(=)-1050(desc%get_p_adjcncy\050\051)]TJ +/F147 9.9626 Tf -61.967 -19.711 Td [(list)-525(=)-1050(desc%get_p_adjcncy\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -23.074 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6843,7 +6852,7 @@ BT /F75 9.9626 Tf 211.557 406.776 Td [(adjcncy)-250(\227)-250(Set)-250(process)-250(adjacency)-250(list)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -60.852 -19.711 Td [(call)-525(desc%set_p_adjcncy\050list\051)]TJ +/F147 9.9626 Tf -60.852 -19.711 Td [(call)-525(desc%set_p_adjcncy\050list\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -23.074 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6854,7 +6863,7 @@ BT 0 g 0 G 0 -21.467 Td [(list)]TJ 0 g 0 G -/F84 9.9626 Tf 19.357 0 Td [(the)-250(list)-250(of)-250(adjacent)-250(pr)18(ocesses.)]TJ 5.549 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(one-dimensional)-250(array)-250(of)-250(integers)-250(of)-250(kind)]TJ/F145 9.9626 Tf 250.21 0 Td [(psb_ipk_)]TJ/F84 9.9626 Tf 41.842 0 Td [(.)]TJ 1.02 0 0 1 150.705 249.777 Tm [(Note:)-521(this)-354(method)-353(can)-354(be)-353(called)-354(after)-354(a)-353(call)-354(to)]TJ/F145 9.9626 Tf 1 0 0 1 367.056 249.777 Tm [(psb_cdall)]TJ/F84 9.9626 Tf 1.02 0 0 1 417.722 249.777 Tm [(and)-354(befor)18(e)-354(a)-353(call)]TJ 1.02 0 0 1 150.705 237.822 Tm [(to)]TJ/F145 9.9626 Tf 1 0 0 1 162.313 237.822 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 1.02 0 0 1 209.387 237.822 Tm [(.)-380(The)-270(user)-270(is)-271(specifying)-270(her)17(e)-270(some)-270(knowledge)-271(about)-270(which)-270(pr)17(o-)]TJ 0.986 0 0 1 150.705 225.866 Tm [(cesses)-255(ar)19(e)-255(topological)-255(neighbours)-254(of)-255(the)-254(curr)18(ent)-255(pr)18(oce)1(ss.)-318(The)-255(availability)-254(of)-255(this)]TJ 1 0 0 1 150.705 213.911 Tm [(information)-250(may)-250(speed)-250(up)-250(the)-250(execution)-250(of)-250(the)-250(assembly)-250(call)]TJ/F145 9.9626 Tf 269.655 0 Td [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(.)]TJ/F75 9.9626 Tf -316.728 -29.333 Td [(3.1.14)-1000(fnd)]TJ +/F84 9.9626 Tf 19.357 0 Td [(the)-250(list)-250(of)-250(adjacent)-250(pr)18(ocesses.)]TJ 5.549 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(one-dimensional)-250(array)-250(of)-250(integers)-250(of)-250(kind)]TJ/F147 9.9626 Tf 250.21 0 Td [(psb_ipk_)]TJ/F84 9.9626 Tf 41.842 0 Td [(.)]TJ 1.02 0 0 1 150.705 249.777 Tm [(Note:)-521(this)-354(method)-353(can)-354(be)-353(called)-354(after)-354(a)-353(call)-354(to)]TJ/F147 9.9626 Tf 1 0 0 1 367.056 249.777 Tm [(psb_cdall)]TJ/F84 9.9626 Tf 1.02 0 0 1 417.722 249.777 Tm [(and)-354(befor)18(e)-354(a)-353(call)]TJ 1.02 0 0 1 150.705 237.822 Tm [(to)]TJ/F147 9.9626 Tf 1 0 0 1 162.313 237.822 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 1.02 0 0 1 209.387 237.822 Tm [(.)-380(The)-270(user)-270(is)-271(specifying)-270(her)17(e)-270(some)-270(knowledge)-271(about)-270(which)-270(pr)17(o-)]TJ 0.986 0 0 1 150.705 225.866 Tm [(cesses)-255(ar)19(e)-255(topological)-255(neighbours)-254(of)-255(the)-254(curr)18(ent)-255(pr)18(oce)1(ss.)-318(The)-255(availability)-254(of)-255(this)]TJ 1 0 0 1 150.705 213.911 Tm [(information)-250(may)-250(speed)-250(up)-250(the)-250(execution)-250(of)-250(the)-250(assembly)-250(call)]TJ/F147 9.9626 Tf 269.655 0 Td [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(.)]TJ/F75 9.9626 Tf -316.728 -29.333 Td [(3.1.14)-1000(fnd)]TJ ET q 1 0 0 1 202.221 184.777 cm @@ -6864,7 +6873,7 @@ BT /F75 9.9626 Tf 205.21 184.578 Td [(owner)-250(\227)-250(Find)-250(the)-250(owner)-250(process)-250(of)-250(a)-250(set)-250(of)-250(indices)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -54.505 -19.711 Td [(call)-525(desc%fnd_owner\050idx,iprc,info\051)]TJ +/F147 9.9626 Tf -54.505 -19.711 Td [(call)-525(desc%fnd_owner\050idx,iprc,info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -23.074 Td [(T)90(ype:)]TJ 0 g 0 G @@ -6879,7 +6888,7 @@ ET endstream endobj -1071 0 obj +1072 0 obj << /Length 8300 >> @@ -6890,14 +6899,14 @@ stream BT /F75 9.9626 Tf 99.895 706.129 Td [(idx)]TJ 0 g 0 G -/F84 9.9626 Tf 19.368 0 Td [(the)-250(list)-250(of)-250(global)-250(indices)-250(for)-250(which)-250(we)-250(need)-250(the)-250(owning)-250(pr)18(ocesses.)]TJ 5.539 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(one-dimensional)-250(array)-250(of)-250(integers)-250(of)-250(kind)]TJ/F145 9.9626 Tf 250.209 0 Td [(psb_lpk_)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ +/F84 9.9626 Tf 19.368 0 Td [(the)-250(list)-250(of)-250(global)-250(indices)-250(for)-250(which)-250(we)-250(need)-250(the)-250(owning)-250(pr)18(ocesses.)]TJ 5.539 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(one-dimensional)-250(array)-250(of)-250(integers)-250(of)-250(kind)]TJ/F147 9.9626 Tf 250.209 0 Td [(psb_lpk_)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -316.959 -20.539 Td [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G 0 -20.54 Td [(iprc)]TJ 0 g 0 G -/F84 9.9626 Tf 22.685 0 Td [(the)-250(list)-250(of)-250(pr)18(ocesses)-250(owning)-250(the)-250(indices)-250(in)]TJ/F145 9.9626 Tf 184.994 0 Td [(idx)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ -198.463 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 569.408 Tm [(Speci\002ed)-345(as:)-504(an)-345(allocatable)-345(one-dimensional)-345(array)-345(of)-345(integers)-346(of)-345(kind)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 557.453 Tm [(psb_ipk_)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ 0.98 0 0 1 99.895 534.921 Tm [(Note:)-304(this)-231(method)-231(may)-231(or)-230(may)-231(not)-231(actually)-231(r)19(equir)18(e)-231(communications,)-235(depending)]TJ 0.98 0 0 1 99.895 522.966 Tm [(on)-217(the)-216(exact)-217(internal)-217(data)-217(storage;)-229(given)-217(that)-216(the)-217(choice)-217(of)-217(st)1(orage)-217(may)-217(be)-217(alter)19(ed)]TJ 0.98 0 0 1 99.895 511.011 Tm [(by)-250(r)8(untime)-250(parameters,)-251(it)-249(is)-250(necessary)-250(for)-250(safety)-250(that)-250(this)-250(method)-250(is)-249(called)-250(by)-250(all)]TJ 1 0 0 1 99.596 499.056 Tm [(pr)18(ocesses.)]TJ/F75 9.9626 Tf 0.299 -28.015 Td [(3.1.15)-1000(Named)-250(Constants)]TJ +/F84 9.9626 Tf 22.685 0 Td [(the)-250(list)-250(of)-250(pr)18(ocesses)-250(owning)-250(the)-250(indices)-250(in)]TJ/F147 9.9626 Tf 184.994 0 Td [(idx)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ -198.463 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 569.408 Tm [(Speci\002ed)-345(as:)-504(an)-345(allocatable)-345(one-dimensional)-345(array)-345(of)-345(integers)-346(of)-345(kind)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 557.453 Tm [(psb_ipk_)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ 0.98 0 0 1 99.895 534.921 Tm [(Note:)-304(this)-231(method)-231(may)-231(or)-230(may)-231(not)-231(actually)-231(r)19(equir)18(e)-231(communications,)-235(depending)]TJ 0.98 0 0 1 99.895 522.966 Tm [(on)-217(the)-216(exact)-217(internal)-217(data)-217(storage;)-229(given)-217(that)-216(the)-217(choice)-217(of)-217(st)1(orage)-217(may)-217(be)-217(alter)19(ed)]TJ 0.98 0 0 1 99.895 511.011 Tm [(by)-250(r)8(untime)-250(parameters,)-251(it)-249(is)-250(necessary)-250(for)-250(safety)-250(that)-250(this)-250(method)-250(is)-249(called)-250(by)-250(all)]TJ 1 0 0 1 99.596 499.056 Tm [(pr)18(ocesses.)]TJ/F75 9.9626 Tf 0.299 -28.015 Td [(3.1.15)-1000(Named)-250(Constants)]TJ 0 g 0 G 0 -19.261 Td [(psb)]TJ ET @@ -7023,7 +7032,7 @@ q Q 0 g 0 G BT -/F84 9.9626 Tf 179.835 328.543 Td [(Exchange)-250(data)-250(based)-250(on)-250(the)]TJ/F145 9.9626 Tf 124.92 0 Td [(halo_index)]TJ/F84 9.9626 Tf 54.795 0 Td [(list;)]TJ +/F84 9.9626 Tf 179.835 328.543 Td [(Exchange)-250(data)-250(based)-250(on)-250(the)]TJ/F147 9.9626 Tf 124.92 0 Td [(halo_index)]TJ/F84 9.9626 Tf 54.795 0 Td [(list;)]TJ 0 g 0 G /F75 9.9626 Tf -259.655 -20.54 Td [(psb)]TJ ET @@ -7047,7 +7056,7 @@ q Q 0 g 0 G BT -/F84 9.9626 Tf 173.19 308.003 Td [(Exchange)-250(data)-250(based)-250(on)-250(the)]TJ/F145 9.9626 Tf 124.92 0 Td [(ext_index)]TJ/F84 9.9626 Tf 49.564 0 Td [(list;)]TJ +/F84 9.9626 Tf 173.19 308.003 Td [(Exchange)-250(data)-250(based)-250(on)-250(the)]TJ/F147 9.9626 Tf 124.92 0 Td [(ext_index)]TJ/F84 9.9626 Tf 49.564 0 Td [(list;)]TJ 0 g 0 G /F75 9.9626 Tf -247.779 -20.539 Td [(psb)]TJ ET @@ -7071,7 +7080,7 @@ q Q 0 g 0 G BT -/F84 9.9626 Tf 174.864 287.464 Td [(Exchange)-250(data)-250(based)-250(on)-250(the)]TJ/F145 9.9626 Tf 124.92 0 Td [(ovrlap_index)]TJ/F84 9.9626 Tf 65.255 0 Td [(list;)]TJ +/F84 9.9626 Tf 174.864 287.464 Td [(Exchange)-250(data)-250(based)-250(on)-250(the)]TJ/F147 9.9626 Tf 124.92 0 Td [(ovrlap_index)]TJ/F84 9.9626 Tf 65.255 0 Td [(list;)]TJ 0 g 0 G /F75 9.9626 Tf -265.144 -20.54 Td [(psb)]TJ ET @@ -7095,21 +7104,21 @@ q Q 0 g 0 G BT -/F84 9.9626 Tf 179.845 266.924 Td [(Exchange)-250(data)-250(based)-250(on)-250(the)]TJ/F145 9.9626 Tf 124.92 0 Td [(ovr_mst_idx)]TJ/F84 9.9626 Tf 60.025 0 Td [(list;)]TJ/F75 11.9552 Tf -264.895 -30.006 Td [(3.2)-1000(Sparse)-250(Matrix)-250(class)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 217.656 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 119.097 217.656 Tm [(psb)]TJ +/F84 9.9626 Tf 179.845 266.924 Td [(Exchange)-250(data)-250(based)-250(on)-250(the)]TJ/F147 9.9626 Tf 124.92 0 Td [(ovr_mst_idx)]TJ/F84 9.9626 Tf 60.025 0 Td [(list;)]TJ/F75 11.9552 Tf -264.895 -30.006 Td [(3.2)-1000(Sparse)-250(Matrix)-250(class)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 217.656 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 119.097 217.656 Tm [(psb)]TJ ET q 1 0 0 1 135.416 217.855 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 138.554 217.656 Td [(Tspmat)]TJ +/F147 9.9626 Tf 138.554 217.656 Td [(Tspmat)]TJ ET q 1 0 0 1 170.564 217.855 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 173.702 217.656 Td [(type)]TJ/F84 9.9626 Tf 1.02 0 0 1 197.123 217.656 Tm [(class)-246(contains)-246(all)-246(information)-246(about)-246(the)-246(local)-246(portion)-246(of)]TJ 0.98 0 0 1 99.895 205.701 Tm [(the)-252(sparse)-253(matrix)-252(and)-252(its)-253(st)1(orage)-253(mode.)-315(Its)-252(design)-253(is)-252(based)-252(on)-253(the)-252(ST)76(A)75(TE)-252(design)]TJ 0.98 0 0 1 99.596 193.746 Tm [(pattern)-251([)]TJ +/F147 9.9626 Tf 173.702 217.656 Td [(type)]TJ/F84 9.9626 Tf 1.02 0 0 1 197.123 217.656 Tm [(class)-246(contains)-246(all)-246(information)-246(about)-246(the)-246(local)-246(portion)-246(of)]TJ 0.98 0 0 1 99.895 205.701 Tm [(the)-252(sparse)-253(matrix)-252(and)-252(its)-253(st)1(orage)-253(mode.)-315(Its)-252(design)-253(is)-252(based)-252(on)-253(the)-252(ST)76(A)75(TE)-252(design)]TJ 0.98 0 0 1 99.596 193.746 Tm [(pattern)-251([)]TJ 1 0 0 rg 1 0 0 RG 1 0 0 1 136.63 193.746 Tm [(13)]TJ 0 g 0 G @@ -7121,7 +7130,7 @@ BT 0 0 1 rg 0 0 1 RG [-251(2)]TJ 0 g 0 G - [-251(wher)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 438.638 193.746 Tm [(T)]TJ/F84 9.9626 Tf -338.743 -11.955 Td [(is)-250(a)-250(placeholder)-250(for)-250(the)-250(data)-250(type)-250(and)-250(pr)18(ecision)-250(variants)]TJ + [-251(wher)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 438.638 193.746 Tm [(T)]TJ/F84 9.9626 Tf -338.743 -11.955 Td [(is)-250(a)-250(placeholder)-250(for)-250(the)-250(data)-250(type)-250(and)-250(pr)18(ecision)-250(variants)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.386 Td [(S)]TJ 0 g 0 G @@ -7141,39 +7150,39 @@ ET endstream endobj -979 0 obj +980 0 obj << /Type /ObjStm /N 100 -/First 926 -/Length 9242 ->> -stream -966 0 982 121 965 255 984 404 985 461 986 518 987 575 988 632 989 689 990 746 -991 803 992 860 993 917 994 974 995 1031 996 1088 997 1145 998 1202 999 1259 981 1316 -1003 1412 980 1558 1001 1710 1005 1858 31 1916 1006 1972 1007 2030 1008 2086 1009 2143 1010 2201 -1011 2259 35 2317 1002 2373 1014 2495 1012 2633 1016 2781 39 2840 43 2897 1017 2954 1013 3013 -1022 3108 1018 3264 1019 3411 1020 3564 1024 3717 1025 3775 1026 3833 1027 3891 1028 3949 1029 4007 -1021 4065 1033 4146 1030 4293 1031 4446 1035 4599 1036 4658 1037 4717 1038 4776 1039 4835 1040 4894 -1041 4953 1042 5012 1043 5071 1045 5130 1032 5189 1049 5299 1046 5447 1047 5595 1051 5742 47 5800 -51 5856 55 5912 59 5968 1048 6024 1054 6160 1056 6278 63 6337 67 6394 71 6451 1053 6508 -1058 6603 1060 6721 75 6779 79 6835 1061 6891 83 6949 87 7003 1057 7059 1063 7154 1065 7272 -91 7331 95 7388 99 7445 1062 7502 1070 7597 1066 7754 1067 7911 1068 8062 1072 8201 103 8259 -% 966 0 obj +/First 927 +/Length 9244 +>> +stream +967 0 983 121 966 255 985 404 986 461 987 518 988 575 989 632 990 689 991 746 +992 803 993 860 994 917 995 974 996 1031 997 1088 998 1145 999 1202 1000 1259 982 1317 +1004 1413 981 1559 1002 1711 1006 1859 31 1917 1007 1973 1008 2031 1009 2087 1010 2144 1011 2202 +1012 2260 35 2318 1003 2374 1015 2496 1013 2634 1017 2782 39 2841 43 2898 1018 2955 1014 3014 +1023 3109 1019 3265 1020 3412 1021 3565 1025 3718 1026 3776 1027 3834 1028 3892 1029 3950 1030 4008 +1022 4066 1034 4147 1031 4294 1032 4447 1036 4600 1037 4659 1038 4718 1039 4777 1040 4836 1041 4895 +1042 4954 1043 5013 1044 5072 1046 5131 1033 5190 1050 5300 1047 5448 1048 5596 1052 5743 47 5801 +51 5857 55 5913 59 5969 1049 6025 1055 6161 1057 6279 63 6338 67 6395 71 6452 1054 6509 +1059 6604 1061 6722 75 6780 79 6836 1062 6892 83 6950 87 7004 1058 7060 1064 7155 1066 7273 +91 7332 95 7389 99 7446 1063 7503 1071 7598 1067 7755 1068 7912 1069 8063 1073 8202 103 8260 +% 967 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F145 940 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F147 941 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 982 0 obj +% 983 0 obj << /Type /Page -/Contents 983 0 R -/Resources 981 0 R +/Contents 984 0 R +/Resources 982 0 R /MediaBox [0 0 595.276 841.89] -/Parent 978 0 R -/Annots [ 965 0 R ] +/Parent 979 0 R +/Annots [ 966 0 R ] >> -% 965 0 obj +% 966 0 obj << /Type /Annot /Subtype /Link @@ -7181,85 +7190,85 @@ stream /Rect [284.193 690.964 290.469 703.958] /A << /S /GoTo /D (Hfootnote.3) >> >> -% 984 0 obj -<< -/D [982 0 R /XYZ 149.705 753.953 null] ->> % 985 0 obj << -/D [982 0 R /XYZ 150.705 716.092 null] +/D [983 0 R /XYZ 149.705 753.953 null] >> % 986 0 obj << -/D [982 0 R /XYZ 150.705 688.869 null] +/D [983 0 R /XYZ 150.705 716.092 null] >> % 987 0 obj << -/D [982 0 R /XYZ 150.705 619.713 null] +/D [983 0 R /XYZ 150.705 688.869 null] >> % 988 0 obj << -/D [982 0 R /XYZ 150.705 601.577 null] +/D [983 0 R /XYZ 150.705 619.713 null] >> % 989 0 obj << -/D [982 0 R /XYZ 150.705 583.441 null] +/D [983 0 R /XYZ 150.705 601.577 null] >> % 990 0 obj << -/D [982 0 R /XYZ 150.705 553.945 null] +/D [983 0 R /XYZ 150.705 583.441 null] >> % 991 0 obj << -/D [982 0 R /XYZ 150.705 535.213 null] +/D [983 0 R /XYZ 150.705 553.945 null] >> % 992 0 obj << -/D [982 0 R /XYZ 150.705 505.717 null] +/D [983 0 R /XYZ 150.705 535.213 null] >> % 993 0 obj << -/D [982 0 R /XYZ 150.705 484.993 null] +/D [983 0 R /XYZ 150.705 505.717 null] >> % 994 0 obj << -/D [982 0 R /XYZ 150.705 460.161 null] +/D [983 0 R /XYZ 150.705 484.993 null] >> % 995 0 obj << -/D [982 0 R /XYZ 150.705 433.375 null] +/D [983 0 R /XYZ 150.705 460.161 null] >> % 996 0 obj << -/D [982 0 R /XYZ 150.705 419.224 null] +/D [983 0 R /XYZ 150.705 433.375 null] >> % 997 0 obj << -/D [982 0 R /XYZ 150.705 405.145 null] +/D [983 0 R /XYZ 150.705 419.224 null] >> % 998 0 obj << -/D [982 0 R /XYZ 150.705 378.966 null] +/D [983 0 R /XYZ 150.705 405.145 null] >> % 999 0 obj << -/D [982 0 R /XYZ 165.051 139.255 null] +/D [983 0 R /XYZ 150.705 378.966 null] >> -% 981 0 obj +% 1000 0 obj << -/Font << /F84 687 0 R /F145 940 0 R /F215 1000 0 R >> +/D [983 0 R /XYZ 165.051 139.255 null] +>> +% 982 0 obj +<< +/Font << /F84 687 0 R /F147 941 0 R /F220 1001 0 R >> /ProcSet [ /PDF /Text ] >> -% 1003 0 obj +% 1004 0 obj << /Type /Page -/Contents 1004 0 R -/Resources 1002 0 R +/Contents 1005 0 R +/Resources 1003 0 R /MediaBox [0 0 595.276 841.89] -/Parent 978 0 R -/Annots [ 980 0 R 1001 0 R ] +/Parent 979 0 R +/Annots [ 981 0 R 1002 0 R ] >> -% 980 0 obj +% 981 0 obj << /Type /Annot /Subtype /Link @@ -7267,65 +7276,65 @@ stream /Rect [218.838 674.054 233.284 683.464] /A << /S /GoTo /D (subsection.2.3) >> >> -% 1001 0 obj +% 1002 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [118.961 266.803 126.034 278.862] +/Rect [421.517 278.758 428.521 290.818] /A << /S /GoTo /D (section.3) >> >> -% 1005 0 obj +% 1006 0 obj << -/D [1003 0 R /XYZ 98.895 753.953 null] +/D [1004 0 R /XYZ 98.895 753.953 null] >> % 31 0 obj << -/D [1003 0 R /XYZ 99.895 716.092 null] ->> -% 1006 0 obj -<< -/D [1003 0 R /XYZ 99.895 671.065 null] +/D [1004 0 R /XYZ 99.895 716.092 null] >> % 1007 0 obj << -/D [1003 0 R /XYZ 99.895 648.1 null] +/D [1004 0 R /XYZ 99.895 671.065 null] >> % 1008 0 obj << -/D [1003 0 R /XYZ 99.895 573.59 null] +/D [1004 0 R /XYZ 99.895 648.1 null] >> % 1009 0 obj << -/D [1003 0 R /XYZ 99.895 527.104 null] +/D [1004 0 R /XYZ 99.895 573.59 null] >> % 1010 0 obj << -/D [1003 0 R /XYZ 99.895 495.819 null] +/D [1004 0 R /XYZ 99.895 527.104 null] >> % 1011 0 obj << -/D [1003 0 R /XYZ 99.895 475.298 null] +/D [1004 0 R /XYZ 99.895 495.819 null] +>> +% 1012 0 obj +<< +/D [1004 0 R /XYZ 99.895 475.298 null] >> % 35 0 obj << -/D [1003 0 R /XYZ 99.895 420.262 null] +/D [1004 0 R /XYZ 99.895 420.262 null] >> -% 1002 0 obj +% 1003 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1014 0 obj +% 1015 0 obj << /Type /Page -/Contents 1015 0 R -/Resources 1013 0 R +/Contents 1016 0 R +/Resources 1014 0 R /MediaBox [0 0 595.276 841.89] -/Parent 978 0 R -/Annots [ 1012 0 R ] +/Parent 979 0 R +/Annots [ 1013 0 R ] >> -% 1012 0 obj +% 1013 0 obj << /Type /Annot /Subtype /Link @@ -7333,37 +7342,37 @@ stream /Rect [319.267 173.115 326.341 185.175] /A << /S /GoTo /D (section.6) >> >> -% 1016 0 obj +% 1017 0 obj << -/D [1014 0 R /XYZ 149.705 753.953 null] +/D [1015 0 R /XYZ 149.705 753.953 null] >> % 39 0 obj << -/D [1014 0 R /XYZ 150.705 716.092 null] +/D [1015 0 R /XYZ 150.705 716.092 null] >> % 43 0 obj << -/D [1014 0 R /XYZ 150.705 279.545 null] +/D [1015 0 R /XYZ 150.705 279.545 null] >> -% 1017 0 obj +% 1018 0 obj << -/D [1014 0 R /XYZ 397.584 236.897 null] +/D [1015 0 R /XYZ 150.705 224.942 null] >> -% 1013 0 obj +% 1014 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1022 0 obj +% 1023 0 obj << /Type /Page -/Contents 1023 0 R -/Resources 1021 0 R +/Contents 1024 0 R +/Resources 1022 0 R /MediaBox [0 0 595.276 841.89] -/Parent 978 0 R -/Annots [ 1018 0 R 1019 0 R 1020 0 R ] +/Parent 979 0 R +/Annots [ 1019 0 R 1020 0 R 1021 0 R ] >> -% 1018 0 obj +% 1019 0 obj << /Type /Annot /Subtype /Link @@ -7371,7 +7380,7 @@ stream /Rect [399.906 399.338 406.88 411.398] /A << /S /GoTo /D (section.6) >> >> -% 1019 0 obj +% 1020 0 obj << /Type /Annot /Subtype /Link @@ -7379,7 +7388,7 @@ stream /Rect [304.177 193.202 318.623 205.262] /A << /S /GoTo /D (subsection.3.3) >> >> -% 1020 0 obj +% 1021 0 obj << /Type /Annot /Subtype /Link @@ -7387,45 +7396,45 @@ stream /Rect [304.177 148.883 318.623 160.943] /A << /S /GoTo /D (subsection.3.3) >> >> -% 1024 0 obj -<< -/D [1022 0 R /XYZ 98.895 753.953 null] ->> % 1025 0 obj << -/D [1022 0 R /XYZ 99.895 293.402 null] +/D [1023 0 R /XYZ 98.895 753.953 null] >> % 1026 0 obj << -/D [1022 0 R /XYZ 99.895 278.496 null] +/D [1023 0 R /XYZ 99.895 293.402 null] >> % 1027 0 obj << -/D [1022 0 R /XYZ 99.895 261.039 null] +/D [1023 0 R /XYZ 99.895 278.496 null] >> % 1028 0 obj << -/D [1022 0 R /XYZ 99.895 244.857 null] +/D [1023 0 R /XYZ 99.895 261.039 null] >> % 1029 0 obj << -/D [1022 0 R /XYZ 99.895 228.675 null] +/D [1023 0 R /XYZ 99.895 244.857 null] >> -% 1021 0 obj +% 1030 0 obj +<< +/D [1023 0 R /XYZ 99.895 228.675 null] +>> +% 1022 0 obj << /Font << /F84 687 0 R /F75 685 0 R >> /ProcSet [ /PDF /Text ] >> -% 1033 0 obj +% 1034 0 obj << /Type /Page -/Contents 1034 0 R -/Resources 1032 0 R +/Contents 1035 0 R +/Resources 1033 0 R /MediaBox [0 0 595.276 841.89] -/Parent 978 0 R -/Annots [ 1030 0 R 1031 0 R ] +/Parent 979 0 R +/Annots [ 1031 0 R 1032 0 R ] >> -% 1030 0 obj +% 1031 0 obj << /Type /Annot /Subtype /Link @@ -7433,7 +7442,7 @@ stream /Rect [354.987 614.119 369.432 626.179] /A << /S /GoTo /D (subsection.3.3) >> >> -% 1031 0 obj +% 1032 0 obj << /Type /Annot /Subtype /Link @@ -7441,61 +7450,61 @@ stream /Rect [354.987 568.778 369.432 580.837] /A << /S /GoTo /D (subsection.3.3) >> >> -% 1035 0 obj -<< -/D [1033 0 R /XYZ 149.705 753.953 null] ->> % 1036 0 obj << -/D [1033 0 R /XYZ 150.705 716.092 null] +/D [1034 0 R /XYZ 149.705 753.953 null] >> % 1037 0 obj << -/D [1033 0 R /XYZ 150.705 702.226 null] +/D [1034 0 R /XYZ 150.705 716.092 null] >> % 1038 0 obj << -/D [1033 0 R /XYZ 150.705 684.257 null] +/D [1034 0 R /XYZ 150.705 702.226 null] >> % 1039 0 obj << -/D [1033 0 R /XYZ 150.705 667.564 null] +/D [1034 0 R /XYZ 150.705 684.257 null] >> % 1040 0 obj << -/D [1033 0 R /XYZ 150.705 650.871 null] +/D [1034 0 R /XYZ 150.705 667.564 null] >> % 1041 0 obj << -/D [1033 0 R /XYZ 150.705 541.236 null] +/D [1034 0 R /XYZ 150.705 650.871 null] >> % 1042 0 obj << -/D [1033 0 R /XYZ 150.705 524.542 null] +/D [1034 0 R /XYZ 150.705 541.236 null] >> % 1043 0 obj << -/D [1033 0 R /XYZ 150.705 507.849 null] +/D [1034 0 R /XYZ 150.705 524.542 null] >> -% 1045 0 obj +% 1044 0 obj << -/D [1033 0 R /XYZ 150.705 288.977 null] +/D [1034 0 R /XYZ 150.705 507.849 null] >> -% 1032 0 obj +% 1046 0 obj +<< +/D [1034 0 R /XYZ 150.705 288.977 null] +>> +% 1033 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F235 1045 0 R >> /ProcSet [ /PDF /Text ] >> -% 1049 0 obj +% 1050 0 obj << /Type /Page -/Contents 1050 0 R -/Resources 1048 0 R +/Contents 1051 0 R +/Resources 1049 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1052 0 R -/Annots [ 1046 0 R 1047 0 R ] +/Parent 1053 0 R +/Annots [ 1047 0 R 1048 0 R ] >> -% 1046 0 obj +% 1047 0 obj << /Type /Annot /Subtype /Link @@ -7503,7 +7512,7 @@ stream /Rect [275.775 524.509 282.649 537.101] /A << /S /GoTo /D (section.1) >> >> -% 1047 0 obj +% 1048 0 obj << /Type /Annot /Subtype /Link @@ -7511,136 +7520,136 @@ stream /Rect [426.76 326.492 433.634 338.552] /A << /S /GoTo /D (section.1) >> >> -% 1051 0 obj +% 1052 0 obj << -/D [1049 0 R /XYZ 98.895 753.953 null] +/D [1050 0 R /XYZ 98.895 753.953 null] >> % 47 0 obj << -/D [1049 0 R /XYZ 99.895 716.092 null] +/D [1050 0 R /XYZ 99.895 716.092 null] >> % 51 0 obj << -/D [1049 0 R /XYZ 99.895 696.532 null] +/D [1050 0 R /XYZ 99.895 696.532 null] >> % 55 0 obj << -/D [1049 0 R /XYZ 99.895 498.276 null] +/D [1050 0 R /XYZ 99.895 498.276 null] >> % 59 0 obj << -/D [1049 0 R /XYZ 99.895 288.305 null] +/D [1050 0 R /XYZ 99.895 288.305 null] >> -% 1048 0 obj +% 1049 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F195 942 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1054 0 obj +% 1055 0 obj << /Type /Page -/Contents 1055 0 R -/Resources 1053 0 R +/Contents 1056 0 R +/Resources 1054 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1052 0 R +/Parent 1053 0 R >> -% 1056 0 obj +% 1057 0 obj << -/D [1054 0 R /XYZ 149.705 753.953 null] +/D [1055 0 R /XYZ 149.705 753.953 null] >> % 63 0 obj << -/D [1054 0 R /XYZ 150.705 716.092 null] +/D [1055 0 R /XYZ 150.705 716.092 null] >> % 67 0 obj << -/D [1054 0 R /XYZ 150.705 529.559 null] +/D [1055 0 R /XYZ 150.705 529.559 null] >> % 71 0 obj << -/D [1054 0 R /XYZ 150.705 276.666 null] +/D [1055 0 R /XYZ 150.705 276.666 null] >> -% 1053 0 obj +% 1054 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1058 0 obj +% 1059 0 obj << /Type /Page -/Contents 1059 0 R -/Resources 1057 0 R +/Contents 1060 0 R +/Resources 1058 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1052 0 R +/Parent 1053 0 R >> -% 1060 0 obj +% 1061 0 obj << -/D [1058 0 R /XYZ 98.895 753.953 null] +/D [1059 0 R /XYZ 98.895 753.953 null] >> % 75 0 obj << -/D [1058 0 R /XYZ 99.895 716.092 null] +/D [1059 0 R /XYZ 99.895 716.092 null] >> % 79 0 obj << -/D [1058 0 R /XYZ 99.895 519.544 null] +/D [1059 0 R /XYZ 99.895 519.544 null] >> -% 1061 0 obj +% 1062 0 obj << -/D [1058 0 R /XYZ 344.16 356.277 null] +/D [1059 0 R /XYZ 344.16 356.277 null] >> % 83 0 obj << -/D [1058 0 R /XYZ 99.895 305.6 null] +/D [1059 0 R /XYZ 99.895 305.6 null] >> % 87 0 obj << -/D [1058 0 R /XYZ 99.895 194.578 null] +/D [1059 0 R /XYZ 99.895 194.578 null] >> -% 1057 0 obj +% 1058 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1063 0 obj +% 1064 0 obj << /Type /Page -/Contents 1064 0 R -/Resources 1062 0 R +/Contents 1065 0 R +/Resources 1063 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1052 0 R +/Parent 1053 0 R >> -% 1065 0 obj +% 1066 0 obj << -/D [1063 0 R /XYZ 149.705 753.953 null] +/D [1064 0 R /XYZ 149.705 753.953 null] >> % 91 0 obj << -/D [1063 0 R /XYZ 150.705 543.315 null] +/D [1064 0 R /XYZ 150.705 543.315 null] >> % 95 0 obj << -/D [1063 0 R /XYZ 150.705 416.307 null] +/D [1064 0 R /XYZ 150.705 416.307 null] >> % 99 0 obj << -/D [1063 0 R /XYZ 150.705 194.109 null] +/D [1064 0 R /XYZ 150.705 194.109 null] >> -% 1062 0 obj +% 1063 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1070 0 obj +% 1071 0 obj << /Type /Page -/Contents 1071 0 R -/Resources 1069 0 R +/Contents 1072 0 R +/Resources 1070 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1052 0 R -/Annots [ 1066 0 R 1067 0 R 1068 0 R ] +/Parent 1053 0 R +/Annots [ 1067 0 R 1068 0 R 1069 0 R ] >> -% 1066 0 obj +% 1067 0 obj << /Type /Annot /Subtype /Link @@ -7648,7 +7657,7 @@ stream /Rect [135.634 192.59 147.589 201.696] /A << /S /GoTo /D (cite.DesignPatterns) >> >> -% 1067 0 obj +% 1068 0 obj << /Type /Annot /Subtype /Link @@ -7656,7 +7665,7 @@ stream /Rect [214.484 192.69 226.439 201.696] /A << /S /GoTo /D (cite.Sparse03) >> >> -% 1068 0 obj +% 1069 0 obj << /Type /Annot /Subtype /Link @@ -7664,18 +7673,18 @@ stream /Rect [401 189.94 407.874 202] /A << /S /GoTo /D (listing.2) >> >> -% 1072 0 obj +% 1073 0 obj << -/D [1070 0 R /XYZ 98.895 753.953 null] +/D [1071 0 R /XYZ 98.895 753.953 null] >> % 103 0 obj << -/D [1070 0 R /XYZ 99.895 480.341 null] +/D [1071 0 R /XYZ 99.895 480.341 null] >> endstream endobj -1079 0 obj +1080 0 obj << /Length 8179 >> @@ -7690,35 +7699,35 @@ BT 0 g 0 G /F75 9.9626 Tf -11.626 -18.188 Td [(LS,LD,LC,LZ)]TJ 0 g 0 G -/F84 9.9626 Tf 0.994 0 0 1 215.731 687.941 Tm [(Same)-250(numeric)-251(type)-250(as)-251(above,)-251(but)-250(with)]TJ/F145 9.9626 Tf 1 0 0 1 385.185 687.941 Tm [(psb_lpk_)]TJ/F84 9.9626 Tf 0.994 0 0 1 429.509 687.941 Tm [(integer)-250(indices.)]TJ 0.98 0 0 1 150.396 671.491 Tm [(The)-194(actual)-194(data)-194(is)-193(contained)-194(in)-194(the)-194(polymorphic)-194(component)]TJ/F145 9.9626 Tf 1 0 0 1 405.031 671.491 Tm [(a%a)]TJ/F84 9.9626 Tf 0.98 0 0 1 422.615 671.491 Tm [(of)-194(type)]TJ/F145 9.9626 Tf 1 0 0 1 454.138 671.491 Tm [(psb)]TJ +/F84 9.9626 Tf 0.994 0 0 1 215.731 687.941 Tm [(Same)-250(numeric)-251(type)-250(as)-251(above,)-251(but)-250(with)]TJ/F147 9.9626 Tf 1 0 0 1 385.185 687.941 Tm [(psb_lpk_)]TJ/F84 9.9626 Tf 0.994 0 0 1 429.509 687.941 Tm [(integer)-250(indices.)]TJ 0.98 0 0 1 150.396 671.491 Tm [(The)-194(actual)-194(data)-194(is)-193(contained)-194(in)-194(the)-194(polymorphic)-194(component)]TJ/F147 9.9626 Tf 1 0 0 1 405.031 671.491 Tm [(a%a)]TJ/F84 9.9626 Tf 0.98 0 0 1 422.615 671.491 Tm [(of)-194(type)]TJ/F147 9.9626 Tf 1 0 0 1 454.138 671.491 Tm [(psb)]TJ ET q 1 0 0 1 470.457 671.69 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.595 671.491 Td [(T)]TJ +/F147 9.9626 Tf 473.595 671.491 Td [(T)]TJ ET q 1 0 0 1 479.453 671.69 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 482.591 671.491 Td [(base)]TJ +/F147 9.9626 Tf 482.591 671.491 Td [(base)]TJ ET q 1 0 0 1 504.14 671.69 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 507.278 671.491 Td [(sparse)]TJ +/F147 9.9626 Tf 507.278 671.491 Td [(sparse)]TJ ET q 1 0 0 1 539.288 671.69 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 542.426 671.491 Td [(mat)]TJ/F84 9.9626 Tf 0.98 0 0 1 558.117 671.491 Tm [(;)]TJ 1.02 0 0 1 150.705 659.535 Tm [(its)-247(speci\002c)-247(layout)-247(can)-247(be)-247(chosen)-247(dynamically)-247(among)-247(the)-247(pr)18(ede\002ned)-247(types,)-247(or)]TJ 1.02 0 0 1 150.705 647.58 Tm [(an)-252(entir)18(ely)-252(new)-251(storage)-252(layout)-252(can)-252(be)-251(implemented)-252(and)-252(passed)-251(to)-252(the)-252(library)]TJ 0.993 0 0 1 150.705 635.625 Tm [(at)-251(r)8(untime)-252(via)-251(the)]TJ/F145 9.9626 Tf 1 0 0 1 231.087 635.625 Tm [(psb_spasb)]TJ/F84 9.9626 Tf 0.993 0 0 1 280.647 635.625 Tm [(r)18(outine.)-312(The)-251(following)-252(very)-251(common)-251(formats)-252(ar)19(e)]TJ +/F147 9.9626 Tf 542.426 671.491 Td [(mat)]TJ/F84 9.9626 Tf 0.98 0 0 1 558.117 671.491 Tm [(;)]TJ 1.02 0 0 1 150.705 659.535 Tm [(its)-247(speci\002c)-247(layout)-247(can)-247(be)-247(chosen)-247(dynamically)-247(among)-247(the)-247(pr)18(ede\002ned)-247(types,)-247(or)]TJ 1.02 0 0 1 150.705 647.58 Tm [(an)-252(entir)18(ely)-252(new)-251(storage)-252(layout)-252(can)-252(be)-251(implemented)-252(and)-252(passed)-251(to)-252(the)-252(library)]TJ 0.993 0 0 1 150.705 635.625 Tm [(at)-251(r)8(untime)-252(via)-251(the)]TJ/F147 9.9626 Tf 1 0 0 1 231.087 635.625 Tm [(psb_spasb)]TJ/F84 9.9626 Tf 0.993 0 0 1 280.647 635.625 Tm [(r)18(outine.)-312(The)-251(following)-252(very)-251(common)-251(formats)-252(ar)19(e)]TJ 0 g 0 G 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG @@ -7733,7 +7742,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 163.108 605.96 Td [(type)]TJ +/F235 8.9664 Tf 163.108 605.96 Td [(type)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G @@ -7889,7 +7898,7 @@ BT /F75 9.9626 Tf 198.017 252.912 Td [(nrows)-250(\227)-250(Get)-250(number)-250(of)-250(rows)-250(in)-250(a)-250(sparse)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -47.312 -18.964 Td [(nr)-525(=)-525(a%get_nrows\050\051)]TJ +/F147 9.9626 Tf -47.312 -18.964 Td [(nr)-525(=)-525(a%get_nrows\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -17.574 Td [(T)90(ype:)]TJ 0 g 0 G @@ -7907,7 +7916,7 @@ BT 0 g 0 G 0 -18.187 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.468 0 Td [(The)-250(number)-250(of)-250(r)18(ows)-250(of)-250(sparse)-250(matrix)]TJ/F145 9.9626 Tf 165.298 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ +/F84 9.9626 Tf 72.468 0 Td [(The)-250(number)-250(of)-250(r)18(ows)-250(of)-250(sparse)-250(matrix)]TJ/F147 9.9626 Tf 165.298 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 0 g 0 G -76.122 -29.888 Td [(18)]TJ 0 g 0 G @@ -7915,7 +7924,7 @@ ET endstream endobj -1084 0 obj +1085 0 obj << /Length 4012 >> @@ -7933,7 +7942,7 @@ BT /F75 9.9626 Tf 147.208 706.129 Td [(ncols)-250(\227)-250(Get)-250(number)-250(of)-250(columns)-250(in)-250(a)-250(sparse)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -47.313 -19.023 Td [(nc)-525(=)-525(a%get_ncols\050\051)]TJ +/F147 9.9626 Tf -47.313 -19.023 Td [(nc)-525(=)-525(a%get_ncols\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.01 Td [(T)90(ype:)]TJ 0 g 0 G @@ -7951,7 +7960,7 @@ BT 0 g 0 G 0 -20.048 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.468 0 Td [(The)-250(number)-250(of)-250(columns)-250(of)-250(sparse)-250(matrix)]TJ/F145 9.9626 Tf 181.159 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ/F75 9.9626 Tf -258.857 -27.315 Td [(3.2.4)-1000(get)]TJ +/F84 9.9626 Tf 72.468 0 Td [(The)-250(number)-250(of)-250(columns)-250(of)-250(sparse)-250(matrix)]TJ/F147 9.9626 Tf 181.159 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ/F75 9.9626 Tf -258.857 -27.315 Td [(3.2.4)-1000(get)]TJ ET q 1 0 0 1 144.219 531.915 cm @@ -7961,7 +7970,7 @@ BT /F75 9.9626 Tf 147.208 531.716 Td [(nnzeros)-250(\227)-250(Get)-250(number)-250(of)-250(nonzero)-250(elements)-250(in)-250(a)-250(sparse)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -47.313 -19.024 Td [(nz)-525(=)-525(a%get_nnzeros\050\051)]TJ +/F147 9.9626 Tf -47.313 -19.024 Td [(nz)-525(=)-525(a%get_nnzeros\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.01 Td [(T)90(ype:)]TJ 0 g 0 G @@ -7979,11 +7988,11 @@ BT 0 g 0 G 0 -20.048 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.468 0 Td [(The)-250(number)-250(of)-250(nonzer)18(o)-250(elements)-250(stor)18(ed)-250(in)-250(sparse)-250(matrix)]TJ/F145 9.9626 Tf 251.285 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ/F75 9.9626 Tf -328.983 -22.041 Td [(Notes)]TJ +/F84 9.9626 Tf 72.468 0 Td [(The)-250(number)-250(of)-250(nonzer)18(o)-250(elements)-250(stor)18(ed)-250(in)-250(sparse)-250(matrix)]TJ/F147 9.9626 Tf 251.285 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ/F75 9.9626 Tf -328.983 -22.041 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.454 -20.017 Td [(1.)]TJ 0 g 0 G - 1.02 0 0 1 124.493 342.56 Tm [(The)-348(function)-348(value)-348(is)-348(speci\002c)-348(to)-347(the)-348(storage)-348(format)-348(of)-348(matrix)]TJ/F145 9.9626 Tf 1 0 0 1 408.08 342.56 Tm [(a)]TJ/F84 9.9626 Tf 1.02 0 0 1 413.311 342.56 Tm [(;)-399(some)]TJ 1.02 0 0 1 124.802 330.604 Tm [(storage)-281(formats)-282(employ)-281(padding,)-290(thus)-282(the)-281(r)18(eturned)-282(value)-281(for)-281(the)-282(same)]TJ 1 0 0 1 124.802 318.649 Tm [(matrix)-250(may)-250(be)-250(dif)18(fer)18(ent)-250(for)-250(dif)18(fer)18(ent)-250(storage)-250(choices.)]TJ/F75 9.9626 Tf -24.907 -27.315 Td [(3.2.5)]TJ 1.02 0 0 1 129.783 291.334 Tm [(get)]TJ + 1.02 0 0 1 124.493 342.56 Tm [(The)-348(function)-348(value)-348(is)-348(speci\002c)-348(to)-347(the)-348(storage)-348(format)-348(of)-348(matrix)]TJ/F147 9.9626 Tf 1 0 0 1 408.08 342.56 Tm [(a)]TJ/F84 9.9626 Tf 1.02 0 0 1 413.311 342.56 Tm [(;)-399(some)]TJ 1.02 0 0 1 124.802 330.604 Tm [(storage)-281(formats)-282(employ)-281(padding,)-290(thus)-282(the)-281(r)18(eturned)-282(value)-281(for)-281(the)-282(same)]TJ 1 0 0 1 124.802 318.649 Tm [(matrix)-250(may)-250(be)-250(dif)18(fer)18(ent)-250(for)-250(dif)18(fer)18(ent)-250(storage)-250(choices.)]TJ/F75 9.9626 Tf -24.907 -27.315 Td [(3.2.5)]TJ 1.02 0 0 1 129.783 291.334 Tm [(get)]TJ ET q 1 0 0 1 144.496 291.533 cm @@ -7993,7 +8002,7 @@ BT /F75 9.9626 Tf 1.02 0 0 1 147.485 291.334 Tm [(size)-337(\227)-336(Get)-337(maximum)-336(number)-337(of)-336(nonzero)-337(elements)-336(in)-337(a)-336(sparse)]TJ 1 0 0 1 129.783 279.379 Tm [(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -29.888 -19.024 Td [(maxnz)-525(=)-525(a%get_size\050\051)]TJ +/F147 9.9626 Tf -29.888 -19.024 Td [(maxnz)-525(=)-525(a%get_size\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.01 Td [(T)90(ype:)]TJ 0 g 0 G @@ -8011,7 +8020,7 @@ BT 0 g 0 G 0 -20.048 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 0.99 0 0 1 172.363 132.281 Tm [(The)-254(maximum)-254(number)-254(of)-253(nonzer)18(o)-254(elements)-254(that)-254(can)-254(be)-253(stor)18(ed)]TJ 1 0 0 1 124.802 120.326 Tm [(in)-250(sparse)-250(matrix)]TJ/F145 9.9626 Tf 73.294 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(using)-250(its)-250(curr)18(ent)-250(memory)-250(allocation.)]TJ +/F84 9.9626 Tf 0.99 0 0 1 172.363 132.281 Tm [(The)-254(maximum)-254(number)-254(of)-253(nonzer)18(o)-254(elements)-254(that)-254(can)-254(be)-253(stor)18(ed)]TJ 1 0 0 1 124.802 120.326 Tm [(in)-250(sparse)-250(matrix)]TJ/F147 9.9626 Tf 73.294 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(using)-250(its)-250(curr)18(ent)-250(memory)-250(allocation.)]TJ 0 g 0 G 60.953 -29.888 Td [(19)]TJ 0 g 0 G @@ -8019,7 +8028,7 @@ ET endstream endobj -1090 0 obj +1091 0 obj << /Length 4548 >> @@ -8030,7 +8039,7 @@ BT /F75 9.9626 Tf 150.705 706.129 Td [(3.2.6)-1000(sizeof)-250(\227)-250(Get)-250(memory)-250(occupation)-250(in)-250(bytes)-250(of)-250(a)-250(sparse)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -20.135 Td [(memory_size)-525(=)-525(a%sizeof\050\051)]TJ +/F147 9.9626 Tf 0 -20.135 Td [(memory_size)-525(=)-525(a%sizeof\050\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -23.732 Td [(T)90(ype:)]TJ 0 g 0 G @@ -8057,7 +8066,7 @@ Q BT /F75 9.9626 Tf 198.017 517.011 Td [(fmt)-250(\227)-250(Short)-250(description)-250(of)-250(the)-250(dynamic)-250(type)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -47.574 -20.135 Td [(write)]TJ +/F147 9.9626 Tf -47.574 -20.135 Td [(write)]TJ 0 g 0 G [(\050)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -8090,9 +8099,9 @@ BT 0 g 0 G /F84 9.9626 Tf 1.006 0 0 1 223.093 357.869 Tm [(A)-249(short)-249(string)-249(describing)-249(the)-249(dynamic)-248(type)-249(of)-249(the)-249(matrix.)-310(Pr)18(e-)]TJ 1 0 0 1 175.611 345.914 Tm [(de\002ned)-250(values)-250(include)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 102.415 0 Td [(NULL)]TJ +/F147 9.9626 Tf 102.415 0 Td [(NULL)]TJ 0 g 0 G -/F84 9.9626 Tf 20.921 0 Td [(,)]TJ/F145 9.9626 Tf 4.982 0 Td [(COO)]TJ/F84 9.9626 Tf 15.691 0 Td [(,)]TJ/F145 9.9626 Tf 4.981 0 Td [(CSR)]TJ/F84 9.9626 Tf 18.182 0 Td [(and)]TJ/F145 9.9626 Tf 19.357 0 Td [(CSC)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ/F75 9.9626 Tf -227.126 -30.581 Td [(3.2.8)-1000(is)]TJ +/F84 9.9626 Tf 20.921 0 Td [(,)]TJ/F147 9.9626 Tf 4.982 0 Td [(COO)]TJ/F84 9.9626 Tf 15.691 0 Td [(,)]TJ/F147 9.9626 Tf 4.981 0 Td [(CSR)]TJ/F84 9.9626 Tf 18.182 0 Td [(and)]TJ/F147 9.9626 Tf 19.357 0 Td [(CSC)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ/F75 9.9626 Tf -227.126 -30.581 Td [(3.2.8)-1000(is)]TJ ET q 1 0 0 1 188.931 315.533 cm @@ -8115,7 +8124,7 @@ Q BT /F75 9.9626 Tf 258.291 315.333 Td [(asb)-250(\227)-250(Status)-250(check)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -107.586 -20.135 Td [(if)]TJ +/F147 9.9626 Tf -107.586 -20.135 Td [(if)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G @@ -8166,7 +8175,7 @@ BT 0 g 0 G /F84 9.9626 Tf 0.995 0 0 1 223.093 132.281 Tm [(A)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F145 9.9626 Tf 1 0 0 1 233.29 132.281 Tm [(logical)]TJ +/F147 9.9626 Tf 1 0 0 1 233.29 132.281 Tm [(logical)]TJ 0 g 0 G /F84 9.9626 Tf 0.995 0 0 1 272.387 132.281 Tm [(value)-251(indicating)-250(whether)-251(the)-250(matrix)-251(is)-251(in)-250(the)-251(Build,)]TJ 1 0 0 1 175.611 120.326 Tm [(Update)-250(or)-250(Assembled)-250(state,)-250(r)18(espectively)111(.)]TJ 0 g 0 G @@ -8176,7 +8185,7 @@ ET endstream endobj -1094 0 obj +1095 0 obj << /Length 6058 >> @@ -8214,7 +8223,7 @@ Q BT /F75 9.9626 Tf 277.488 706.129 Td [(unit)-250(\227)-250(Format)-250(check)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -177.593 -19.573 Td [(if)]TJ +/F147 9.9626 Tf -177.593 -19.573 Td [(if)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G @@ -8276,11 +8285,11 @@ BT 0 g 0 G /F84 9.9626 Tf 0.982 0 0 1 172.283 517.51 Tm [(A)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F145 9.9626 Tf 1 0 0 1 182.393 517.51 Tm [(logical)]TJ +/F147 9.9626 Tf 1 0 0 1 182.393 517.51 Tm [(logical)]TJ 0 g 0 G -/F84 9.9626 Tf 0.982 0 0 1 221.503 517.51 Tm [(value)-255(indicating)-256(whether)-255(the)-255(matrix)-255(is)-256(triangular;)-255(if)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 505.555 Tm [(is_triangle\050\051)]TJ/F84 9.9626 Tf 70.478 0 Td [(r)18(eturns)]TJ/F145 9.9626 Tf 34.224 0 Td [(.true.)]TJ/F84 9.9626 Tf 33.865 0 Td [(check)-249(also)-250(if)-249(it)-249(is)-249(lower)74(,)-250(upper)-249(and)-249(with)-249(a)]TJ -138.567 -11.955 Td [(unit)-250(\050i.e.)-310(assumed\051)-250(diagonal.)]TJ/F75 9.9626 Tf -24.907 -28.929 Td [(3.2.10)-1000(cscnv)-250(\227)-250(Convert)-250(to)-250(a)-250(dif)18(ferent)-250(storage)-250(format)]TJ +/F84 9.9626 Tf 0.982 0 0 1 221.503 517.51 Tm [(value)-255(indicating)-256(whether)-255(the)-255(matrix)-255(is)-256(triangular;)-255(if)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 505.555 Tm [(is_triangle\050\051)]TJ/F84 9.9626 Tf 70.478 0 Td [(r)18(eturns)]TJ/F147 9.9626 Tf 34.224 0 Td [(.true.)]TJ/F84 9.9626 Tf 33.865 0 Td [(check)-249(also)-250(if)-249(it)-249(is)-249(lower)74(,)-250(upper)-249(and)-249(with)-249(a)]TJ -138.567 -11.955 Td [(unit)-250(\050i.e.)-310(assumed\051)-250(diagonal.)]TJ/F75 9.9626 Tf -24.907 -28.929 Td [(3.2.10)-1000(cscnv)-250(\227)-250(Convert)-250(to)-250(a)-250(dif)18(ferent)-250(storage)-250(format)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 0 -19.573 Td [(call)]TJ +/F147 9.9626 Tf 0 -19.573 Td [(call)]TJ 0 g 0 G [-1050(a%cscnv\050b,info)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -8327,7 +8336,7 @@ BT 0 g 0 G 0 -21.183 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.555 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ +/F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.555 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -77.918 -33.138 Td [(type)]TJ 0 g 0 G @@ -8337,7 +8346,7 @@ BT 0 g 0 G /F84 9.9626 Tf 0.994 0 0 1 128.677 277.73 Tm [(a)-251(variable)-251(of)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 1 0 0 1 185.176 277.73 Tm [(class)]TJ +/F147 9.9626 Tf 1 0 0 1 185.176 277.73 Tm [(class)]TJ 0 g 0 G [(\050psb_T_base_sparse_mat\051)]TJ/F84 9.9626 Tf 0.994 0 0 1 334.109 277.73 Tm [(r)18(equesting)-251(a)-250(new)-251(format.)]TJ 1 0 0 1 124.493 265.775 Tm [(T)90(ype:)-310(optional.)]TJ 0 g 0 G @@ -8350,11 +8359,11 @@ BT 0 g 0 G 0 -21.183 Td [(b,a)]TJ 0 g 0 G -/F84 9.9626 Tf 18.152 0 Td [(A)-250(copy)-250(of)]TJ/F145 9.9626 Tf 45.37 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(with)-250(a)-250(new)-250(storage)-250(format.)]TJ -46.725 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ +/F84 9.9626 Tf 18.152 0 Td [(A)-250(copy)-250(of)]TJ/F147 9.9626 Tf 45.37 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(with)-250(a)-250(new)-250(storage)-250(format.)]TJ -46.725 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -184.596 -21.183 Td [(info)]TJ 0 g 0 G -/F84 9.9626 Tf 23.801 0 Td [(Return)-250(code.)]TJ 0.98 0 0 1 99.587 132.281 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 118.361 132.281 Tm [(mold)]TJ/F84 9.9626 Tf 0.98 0 0 1 141.713 132.281 Tm [(ar)18(guments)-249(may)-248(be)-249(employed)-249(to)-249(interface)-249(with)-249(special)-249(devices,)-250(such)-249(as)]TJ 1 0 0 1 99.895 120.326 Tm [(GPUs)-250(and)-250(other)-250(accelerators.)]TJ +/F84 9.9626 Tf 23.801 0 Td [(Return)-250(code.)]TJ 0.98 0 0 1 99.587 132.281 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 118.361 132.281 Tm [(mold)]TJ/F84 9.9626 Tf 0.98 0 0 1 141.713 132.281 Tm [(ar)18(guments)-249(may)-248(be)-249(employed)-249(to)-249(interface)-249(with)-249(special)-249(devices,)-250(such)-249(as)]TJ 1 0 0 1 99.895 120.326 Tm [(GPUs)-250(and)-250(other)-250(accelerators.)]TJ 0 g 0 G 166.875 -29.888 Td [(21)]TJ 0 g 0 G @@ -8362,7 +8371,7 @@ ET endstream endobj -1098 0 obj +1099 0 obj << /Length 5075 >> @@ -8374,7 +8383,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 20.921 -18.964 Td [(call)]TJ +/F147 9.9626 Tf 20.921 -18.964 Td [(call)]TJ 0 g 0 G [-525(a%csclip\050b,info[,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -8382,9 +8391,9 @@ BT 15.691 -11.955 Td [(&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G - [-525(imin,imax,jmin,jmax,rscale,cscale]\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 165.649 654.656 Tm [(Returns)-212(the)-213(submatrix)]TJ/F145 9.9626 Tf 1 0 0 1 263.207 654.656 Tm [(A\050imin:imax,jmin:jmax\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 378.274 654.656 Tm [(,)-221(optionally)-212(r)18(escaling)-212(r)18(ow/-)]TJ 1 0 0 1 150.705 642.7 Tm [(col)-250(indices)-250(to)-250(the)-250(range)]TJ + [-525(imin,imax,jmin,jmax,rscale,cscale]\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 165.649 654.656 Tm [(Returns)-212(the)-213(submatrix)]TJ/F147 9.9626 Tf 1 0 0 1 263.207 654.656 Tm [(A\050imin:imax,jmin:jmax\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 378.274 654.656 Tm [(,)-221(optionally)-212(r)18(escaling)-212(r)18(ow/-)]TJ 1 0 0 1 150.705 642.7 Tm [(col)-250(indices)-250(to)-250(the)-250(range)]TJ 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG -/F145 9.9626 Tf 103.849 0 Td [(1)]TJ +/F147 9.9626 Tf 103.849 0 Td [(1)]TJ 0 g 0 G [(:imax)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -8423,7 +8432,7 @@ BT 0 g 0 G 0 -19.38 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.962 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.556 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ +/F84 9.9626 Tf 9.962 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.556 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -77.917 -31.335 Td [(imin,imax,jmin,jmax)]TJ 0 g 0 G @@ -8438,7 +8447,7 @@ BT 0 g 0 G 0 -19.38 Td [(b)]TJ 0 g 0 G -/F84 9.9626 Tf 10.68 0 Td [(A)-250(copy)-250(of)-250(a)-250(submatrix)-250(of)]TJ/F145 9.9626 Tf 111.321 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ -102.713 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ +/F84 9.9626 Tf 10.68 0 Td [(A)-250(copy)-250(of)-250(a)-250(submatrix)-250(of)]TJ/F147 9.9626 Tf 111.321 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ -102.713 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -184.596 -19.38 Td [(info)]TJ 0 g 0 G @@ -8451,7 +8460,7 @@ Q BT /F75 9.9626 Tf 212.951 400.372 Td [(zeros)-250(\227)-250(Eliminate)-250(zero)-250(coef)18(\002cients)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -62.246 -18.964 Td [(call)]TJ +/F147 9.9626 Tf -62.246 -18.964 Td [(call)]TJ 0 g 0 G [-525(a%clean_zeros\050info\051)]TJ/F84 9.9626 Tf 14.944 -11.955 Td [(Eliminates)-250(zer)18(o)-250(coef)18(\002cients)-250(explicitly)-250(stor)18(ed)-250(in)-250(the)-250(input)-250(matrix.)]TJ 0 g 0 G @@ -8464,14 +8473,14 @@ BT 0 g 0 G 0 -19.38 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.555 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ +/F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.555 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -77.917 -32.51 Td [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G 0 -19.379 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.654 0 Td [(The)-250(matrix)]TJ/F145 9.9626 Tf 50.659 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(without)-250(zer)18(o)-250(coef)18(\002cients.)]TJ -43.516 -11.956 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ +/F84 9.9626 Tf 9.654 0 Td [(The)-250(matrix)]TJ/F147 9.9626 Tf 50.659 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(without)-250(zer)18(o)-250(coef)18(\002cients.)]TJ -43.516 -11.956 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -184.596 -19.38 Td [(info)]TJ 0 g 0 G @@ -8491,7 +8500,7 @@ ET endstream endobj -1104 0 obj +1105 0 obj << /Length 4701 >> @@ -8508,7 +8517,7 @@ Q BT /F75 9.9626 Tf 152.189 706.129 Td [(diag)-250(\227)-250(Get)-250(main)-250(diagonal)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -52.294 -19.329 Td [(call)]TJ +/F147 9.9626 Tf -52.294 -19.329 Td [(call)]TJ 0 g 0 G [-525(a%get_diag\050d,info\051)]TJ/F84 9.9626 Tf 14.944 -12.144 Td [(Returns)-250(a)-250(copy)-250(of)-250(the)-250(main)-250(diagonal.)]TJ 0 g 0 G @@ -8521,7 +8530,7 @@ BT 0 g 0 G 0 -20.679 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.555 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ +/F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.555 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -77.918 -34.627 Td [(On)-250(Return)]TJ 0 g 0 G @@ -8541,9 +8550,9 @@ Q BT /F75 9.9626 Tf 155.497 472.745 Td [(diag)-250(\227)-250(Cut)-250(out)-250(main)-250(diagonal)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -55.602 -19.329 Td [(call)]TJ +/F147 9.9626 Tf -55.602 -19.329 Td [(call)]TJ 0 g 0 G - [-525(a%clip_diag\050b,info\051)]TJ/F84 9.9626 Tf 14.944 -12.144 Td [(Returns)-250(a)-250(copy)-250(of)]TJ/F145 9.9626 Tf 79.73 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(without)-250(the)-250(main)-250(diagonal.)]TJ + [-525(a%clip_diag\050b,info\051)]TJ/F84 9.9626 Tf 14.944 -12.144 Td [(Returns)-250(a)-250(copy)-250(of)]TJ/F147 9.9626 Tf 79.73 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(without)-250(the)-250(main)-250(diagonal.)]TJ 0 g 0 G /F75 9.9626 Tf -102.395 -20.49 Td [(T)90(ype:)]TJ 0 g 0 G @@ -8554,14 +8563,14 @@ BT 0 g 0 G 0 -20.679 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.555 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ +/F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.555 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -77.918 -34.627 Td [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G 0 -20.679 Td [(b)]TJ 0 g 0 G -/F84 9.9626 Tf 10.68 0 Td [(A)-250(copy)-250(of)]TJ/F145 9.9626 Tf 45.37 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(without)-250(the)-250(main)-250(diagonal.)]TJ -39.253 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ +/F84 9.9626 Tf 10.68 0 Td [(A)-250(copy)-250(of)]TJ/F147 9.9626 Tf 45.37 0 Td [(a)]TJ/F84 9.9626 Tf 7.721 0 Td [(without)-250(the)-250(main)-250(diagonal.)]TJ -39.253 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -184.596 -20.679 Td [(info)]TJ 0 g 0 G @@ -8569,7 +8578,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 20.922 -19.329 Td [(call)]TJ +/F147 9.9626 Tf 20.922 -19.329 Td [(call)]TJ 0 g 0 G [-525(a%tril\050l,info[,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -8577,9 +8586,9 @@ BT 15.691 -11.955 Td [(&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G - [-525(diag,imin,imax,jmin,jmax,rscale,cscale,u]\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 185.405 Tm [(Returns)-266(the)-266(lower)-266(triangular)-266(part)-266(of)-266(submatrix)]TJ/F145 9.9626 Tf 1 0 0 1 327.244 185.405 Tm [(A\050imin:imax,jmin:jmax\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 442.311 185.405 Tm [(,)]TJ 0.98 0 0 1 99.895 173.45 Tm [(optionally)-194(r)19(escaling)-194(r)18(ow/col)-194(indices)-194(to)-194(the)-193(range)]TJ + [-525(diag,imin,imax,jmin,jmax,rscale,cscale,u]\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 185.405 Tm [(Returns)-266(the)-266(lower)-266(triangular)-266(part)-266(of)-266(submatrix)]TJ/F147 9.9626 Tf 1 0 0 1 327.244 185.405 Tm [(A\050imin:imax,jmin:jmax\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 442.311 185.405 Tm [(,)]TJ 0.98 0 0 1 99.895 173.45 Tm [(optionally)-194(r)19(escaling)-194(r)18(ow/col)-194(indices)-194(to)-194(the)-193(range)]TJ 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG -/F145 9.9626 Tf 1 0 0 1 308.511 173.45 Tm [(1)]TJ +/F147 9.9626 Tf 1 0 0 1 308.511 173.45 Tm [(1)]TJ 0 g 0 G [(:imax)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -8622,7 +8631,7 @@ ET endstream endobj -1108 0 obj +1109 0 obj << /Length 6535 >> @@ -8633,18 +8642,18 @@ stream BT /F75 9.9626 Tf 150.705 706.129 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.962 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.556 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ +/F84 9.9626 Tf 9.962 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.556 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -77.917 -30.706 Td [(diag)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 175.611 651.513 Tm [(Include)-258(diagonals)-258(up)-258(to)-258(this)-258(one;)]TJ/F145 9.9626 Tf 1 0 0 1 325.586 651.513 Tm [(diag)]TJ +/F84 9.9626 Tf 1.02 0 0 1 175.611 651.513 Tm [(Include)-258(diagonals)-258(up)-258(to)-258(this)-258(one;)]TJ/F147 9.9626 Tf 1 0 0 1 325.586 651.513 Tm [(diag)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG [(1)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 359.59 651.513 Tm [(means)-258(the)-258(\002rst)-258(super)18(diagonal,)]TJ/F145 9.9626 Tf 1 0 0 1 175.611 639.558 Tm [(diag)]TJ +/F84 9.9626 Tf 1.02 0 0 1 359.59 651.513 Tm [(means)-258(the)-258(\002rst)-258(super)18(diagonal,)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 639.558 Tm [(diag)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=-)]TJ 0 g 0 G @@ -8666,11 +8675,11 @@ BT 0 g 0 G 0 -18.75 Td [(l)]TJ 0 g 0 G -/F84 9.9626 Tf 7.91 0 Td [(A)-250(copy)-250(of)-250(the)-250(lower)-250(triangle)-250(of)]TJ/F145 9.9626 Tf 137.333 0 Td [(a)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ -125.956 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ +/F84 9.9626 Tf 7.91 0 Td [(A)-250(copy)-250(of)-250(the)-250(lower)-250(triangle)-250(of)]TJ/F147 9.9626 Tf 137.333 0 Td [(a)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ -125.956 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -184.596 -18.75 Td [(u)]TJ 0 g 0 G -/F84 9.9626 Tf 10.74 0 Td [(\050optional\051)-250(A)-250(copy)-250(of)-250(the)-250(upper)-250(triangle)-250(of)]TJ/F145 9.9626 Tf 184.485 0 Td [(a)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ -175.938 -11.956 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ +/F84 9.9626 Tf 10.74 0 Td [(\050optional\051)-250(A)-250(copy)-250(of)-250(the)-250(upper)-250(triangle)-250(of)]TJ/F147 9.9626 Tf 184.485 0 Td [(a)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ -175.938 -11.956 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -184.596 -18.749 Td [(info)]TJ 0 g 0 G @@ -8678,7 +8687,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 20.921 -18.964 Td [(call)]TJ +/F147 9.9626 Tf 20.921 -18.964 Td [(call)]TJ 0 g 0 G [-525(a%triu\050u,info[,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -8686,9 +8695,9 @@ BT 15.691 -11.955 Td [(&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G - [-525(diag,imin,imax,jmin,jmax,rscale,cscale,l]\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 414.476 Tm [(Returns)-247(the)-247(upper)-247(triangular)-246(part)-247(of)-247(submatrix)]TJ/F145 9.9626 Tf 1 0 0 1 378.053 414.476 Tm [(A\050imin:imax,jmin:jmax\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 414.476 Tm [(,)]TJ 0.98 0 0 1 150.705 402.521 Tm [(optionally)-194(r)19(escaling)-194(r)18(ow/col)-194(indices)-194(to)-193(the)-194(range)]TJ + [-525(diag,imin,imax,jmin,jmax,rscale,cscale,l]\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 414.476 Tm [(Returns)-247(the)-247(upper)-247(triangular)-246(part)-247(of)-247(submatrix)]TJ/F147 9.9626 Tf 1 0 0 1 378.053 414.476 Tm [(A\050imin:imax,jmin:jmax\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 414.476 Tm [(,)]TJ 0.98 0 0 1 150.705 402.521 Tm [(optionally)-194(r)19(escaling)-194(r)18(ow/col)-194(indices)-194(to)-193(the)-194(range)]TJ 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG -/F145 9.9626 Tf 1 0 0 1 359.321 402.521 Tm [(1)]TJ +/F147 9.9626 Tf 1 0 0 1 359.321 402.521 Tm [(1)]TJ 0 g 0 G [(:imax)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -8727,18 +8736,18 @@ BT 0 g 0 G 0 -18.75 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.962 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.556 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ +/F84 9.9626 Tf 9.962 0 Td [(the)-250(sparse)-250(matrix.)]TJ 14.556 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ -159.689 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -77.917 -30.706 Td [(diag)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 175.611 280.876 Tm [(Include)-258(diagonals)-258(up)-258(to)-258(this)-258(one;)]TJ/F145 9.9626 Tf 1 0 0 1 325.586 280.876 Tm [(diag)]TJ +/F84 9.9626 Tf 1.02 0 0 1 175.611 280.876 Tm [(Include)-258(diagonals)-258(up)-258(to)-258(this)-258(one;)]TJ/F147 9.9626 Tf 1 0 0 1 325.586 280.876 Tm [(diag)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG [(1)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 359.59 280.876 Tm [(means)-258(the)-258(\002rst)-258(super)18(diagonal,)]TJ/F145 9.9626 Tf 1 0 0 1 175.611 268.92 Tm [(diag)]TJ +/F84 9.9626 Tf 1.02 0 0 1 359.59 280.876 Tm [(means)-258(the)-258(\002rst)-258(super)18(diagonal,)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 268.92 Tm [(diag)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=-)]TJ 0 g 0 G @@ -8760,11 +8769,11 @@ BT 0 g 0 G 0 -18.75 Td [(u)]TJ 0 g 0 G -/F84 9.9626 Tf 10.68 0 Td [(A)-250(copy)-250(of)-250(the)-250(upper)-250(triangle)-250(of)]TJ/F145 9.9626 Tf 138.668 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ -130.06 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ +/F84 9.9626 Tf 10.68 0 Td [(A)-250(copy)-250(of)-250(the)-250(upper)-250(triangle)-250(of)]TJ/F147 9.9626 Tf 138.668 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ -130.06 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -184.596 -18.75 Td [(l)]TJ 0 g 0 G -/F84 9.9626 Tf 7.97 0 Td [(\050optional\051)-250(A)-250(copy)-250(of)-250(the)-250(lower)-250(triangle)-250(of)]TJ/F145 9.9626 Tf 183.151 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ -171.833 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F145 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ +/F84 9.9626 Tf 7.97 0 Td [(\050optional\051)-250(A)-250(copy)-250(of)-250(the)-250(lower)-250(triangle)-250(of)]TJ/F147 9.9626 Tf 183.151 0 Td [(a)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ -171.833 -11.955 Td [(A)-250(variable)-250(of)-250(type)]TJ/F147 9.9626 Tf 81.623 0 Td [(psb_Tspmat_type)]TJ/F84 9.9626 Tf 78.455 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -184.596 -18.75 Td [(info)]TJ 0 g 0 G @@ -8776,7 +8785,7 @@ ET endstream endobj -1114 0 obj +1115 0 obj << /Length 7921 >> @@ -8807,7 +8816,7 @@ Q BT /F75 9.9626 Tf 192 706.129 Td [(default)-250(\227)-250(Set)-250(default)-250(storage)-250(format)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -92.105 -18.964 Td [(call)]TJ +/F147 9.9626 Tf -92.105 -18.964 Td [(call)]TJ 0 g 0 G [-1050(psb_set_mat_default\050a\051)]TJ 0 g 0 G @@ -8822,11 +8831,11 @@ BT 0 g 0 G /F84 9.9626 Tf 0.988 0 0 1 109.858 628.52 Tm [(a)-253(variable)-253(of)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 1 0 0 1 166.078 628.52 Tm [(class)]TJ +/F147 9.9626 Tf 1 0 0 1 166.078 628.52 Tm [(class)]TJ 0 g 0 G [(\050psb_T_base_sparse_mat\051)]TJ/F84 9.9626 Tf 0.988 0 0 1 315.017 628.52 Tm [(r)18(equesting)-253(a)-252(new)-253(default)-253(stor)18(-)]TJ 1 0 0 1 124.802 616.564 Tm [(age)-250(format.)]TJ -0.309 -11.955 Td [(T)90(ype:)-310(r)18(equir)18(ed.)]TJ/F75 9.9626 Tf -24.598 -26.815 Td [(3.2.18)-1000(clone)-250(\227)-250(Clone)-250(current)-250(object)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 0 -18.964 Td [(call)]TJ +/F147 9.9626 Tf 0 -18.964 Td [(call)]TJ 0 g 0 G [-1050(a%clone\050b,info\051)]TJ 0 g 0 G @@ -8994,56 +9003,56 @@ q Q 0 g 0 G BT -/F84 9.9626 Tf 1.02 0 0 1 174.296 263.738 Tm [(Update)-317(strategy)-316(based)-317(on)-317(additional)-317(permutation)-316(data)-317(\050see)]TJ 1 0 0 1 124.802 251.783 Tm [(tools)-250(r)18(outine)-250(description\051.)]TJ/F75 11.9552 Tf -24.907 -28.807 Td [(3.3)-1000(Dense)-250(V)111(ector)-250(Data)-250(Structure)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 204.012 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 119.612 204.012 Tm [(psb)]TJ +/F84 9.9626 Tf 1.02 0 0 1 174.296 263.738 Tm [(Update)-317(strategy)-316(based)-317(on)-317(additional)-317(permutation)-316(data)-317(\050see)]TJ 1 0 0 1 124.802 251.783 Tm [(tools)-250(r)18(outine)-250(description\051.)]TJ/F75 11.9552 Tf -24.907 -28.807 Td [(3.3)-1000(Dense)-250(V)111(ector)-250(Data)-250(Structure)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 204.012 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 119.612 204.012 Tm [(psb)]TJ ET q 1 0 0 1 135.931 204.211 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 139.069 204.012 Td [(T)]TJ +/F147 9.9626 Tf 139.069 204.012 Td [(T)]TJ ET q 1 0 0 1 144.927 204.211 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 148.065 204.012 Td [(vect)]TJ +/F147 9.9626 Tf 148.065 204.012 Td [(vect)]TJ ET q 1 0 0 1 169.614 204.211 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 172.752 204.012 Td [(type)]TJ/F84 9.9626 Tf 1.02 0 0 1 196.689 204.012 Tm [(data)-297(str)8(uctur)18(e)-297(encapsulates)-296(the)-297(dense)-297(vectors)-296(in)-297(a)-297(way)]TJ 0.98 0 0 1 99.895 192.057 Tm [(similar)-231(t)1(o)-231(sparse)-230(matrices,)-236(i.e.)-308(including)-230(a)-231(base)-230(type)]TJ/F145 9.9626 Tf 1 0 0 1 323.065 192.057 Tm [(psb)]TJ +/F147 9.9626 Tf 172.752 204.012 Td [(type)]TJ/F84 9.9626 Tf 1.02 0 0 1 196.689 204.012 Tm [(data)-297(str)8(uctur)18(e)-297(encapsulates)-296(the)-297(dense)-297(vectors)-296(in)-297(a)-297(way)]TJ 0.98 0 0 1 99.895 192.057 Tm [(similar)-231(t)1(o)-231(sparse)-230(matrices,)-236(i.e.)-308(including)-230(a)-231(base)-230(type)]TJ/F147 9.9626 Tf 1 0 0 1 323.065 192.057 Tm [(psb)]TJ ET q 1 0 0 1 339.383 192.256 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 342.522 192.057 Td [(T)]TJ +/F147 9.9626 Tf 342.522 192.057 Td [(T)]TJ ET q 1 0 0 1 348.38 192.256 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.518 192.057 Td [(base)]TJ +/F147 9.9626 Tf 351.518 192.057 Td [(base)]TJ ET q 1 0 0 1 373.067 192.256 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 376.205 192.057 Td [(vect)]TJ +/F147 9.9626 Tf 376.205 192.057 Td [(vect)]TJ ET q 1 0 0 1 397.754 192.256 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 400.892 192.057 Td [(type)]TJ/F84 9.9626 Tf 0.98 0 0 1 421.814 192.057 Tm [(.)-308(The)]TJ 1.016 0 0 1 99.895 180.101 Tm [(user)-245(will)-245(not,)-245(in)-245(general,)-245(access)-245(the)-244(vector)-245(components)-245(dir)18(ectly)109(,)-245(but)-245(rather)-245(via)]TJ 0.994 0 0 1 99.895 168.146 Tm [(the)-252(r)18(outines)-252(of)-253(sec.)]TJ +/F147 9.9626 Tf 400.892 192.057 Td [(type)]TJ/F84 9.9626 Tf 0.98 0 0 1 421.814 192.057 Tm [(.)-308(The)]TJ 1.016 0 0 1 99.895 180.101 Tm [(user)-245(will)-245(not,)-245(in)-245(general,)-245(access)-245(the)-244(vector)-245(components)-245(dir)18(ectly)109(,)-245(but)-245(rather)-245(via)]TJ 0.994 0 0 1 99.895 168.146 Tm [(the)-252(r)18(outines)-252(of)-253(sec.)]TJ 0 0 1 rg 0 0 1 RG [-252(6)]TJ 0 g 0 G @@ -9051,7 +9060,7 @@ BT 0 0 1 rg 0 0 1 RG [-266(3)]TJ 0 g 0 G - [-265(wher)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 332.473 132.281 Tm [(T)]TJ/F84 9.9626 Tf 1.02 0 0 1 340.4 132.281 Tm [(is)-265(a)-266(placeholder)-265(for)-265(the)]TJ 1 0 0 1 99.895 120.326 Tm [(data)-250(type)-250(and)-250(pr)18(ecision)-250(variants)]TJ + [-265(wher)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 332.473 132.281 Tm [(T)]TJ/F84 9.9626 Tf 1.02 0 0 1 340.4 132.281 Tm [(is)-265(a)-266(placeholder)-265(for)-265(the)]TJ 1 0 0 1 99.895 120.326 Tm [(data)-250(type)-250(and)-250(pr)18(ecision)-250(variants)]TJ 0 g 0 G 166.875 -29.888 Td [(25)]TJ 0 g 0 G @@ -9059,7 +9068,7 @@ ET endstream endobj -1121 0 obj +1122 0 obj << /Length 5172 >> @@ -9086,7 +9095,7 @@ BT 0 g 0 G /F75 9.9626 Tf -12.174 -20.358 Td [(Z)]TJ 0 g 0 G -/F84 9.9626 Tf 11.626 0 Td [(Double)-250(pr)18(ecision)-250(complex.)]TJ 0.987 0 0 1 150.396 604.444 Tm [(The)-252(actual)-252(data)-252(is)-252(contained)-252(in)-252(the)-253(polymorphic)-252(component)]TJ/F145 9.9626 Tf 1 0 0 1 412.002 604.444 Tm [(v%v)]TJ/F84 9.9626 Tf 0.987 0 0 1 427.693 604.444 Tm [(;)-253(t)1(he)-253(separation)]TJ 1.02 0 0 1 150.705 592.489 Tm [(between)-301(the)-301(application)-301(and)-300(the)-301(actual)-301(data)-301(is)-301(essential)-301(for)-301(cases)-301(wher)18(e)-301(it)-301(is)]TJ 1.02 0 0 1 150.705 580.534 Tm [(necessary)-259(to)-259(link)-260(to)-259(data)-259(storage)-259(made)-259(available)-259(elsewher)17(e)-259(outside)-259(the)-259(dir)17(ect)]TJ 0.995 0 0 1 150.705 568.579 Tm [(contr)18(ol)-250(of)-250(the)-250(compiler/appl)1(ication,)-251(e.g.)-311(data)-250(stor)18(ed)-249(in)-250(a)-250(graphics)-250(accelerator)-74('s)]TJ 1 0 0 1 150.406 556.624 Tm [(private)-250(memory)111(.)]TJ +/F84 9.9626 Tf 11.626 0 Td [(Double)-250(pr)18(ecision)-250(complex.)]TJ 0.987 0 0 1 150.396 604.444 Tm [(The)-252(actual)-252(data)-252(is)-252(contained)-252(in)-252(the)-253(polymorphic)-252(component)]TJ/F147 9.9626 Tf 1 0 0 1 412.002 604.444 Tm [(v%v)]TJ/F84 9.9626 Tf 0.987 0 0 1 427.693 604.444 Tm [(;)-253(t)1(he)-253(separation)]TJ 1.02 0 0 1 150.705 592.489 Tm [(between)-301(the)-301(application)-301(and)-300(the)-301(actual)-301(data)-301(is)-301(essential)-301(for)-301(cases)-301(wher)18(e)-301(it)-301(is)]TJ 1.02 0 0 1 150.705 580.534 Tm [(necessary)-259(to)-259(link)-260(to)-259(data)-259(storage)-259(made)-259(available)-259(elsewher)17(e)-259(outside)-259(the)-259(dir)17(ect)]TJ 0.995 0 0 1 150.705 568.579 Tm [(contr)18(ol)-250(of)-250(the)-250(compiler/appl)1(ication,)-251(e.g.)-311(data)-250(stor)18(ed)-249(in)-250(a)-250(graphics)-250(accelerator)-74('s)]TJ 1 0 0 1 150.406 556.624 Tm [(private)-250(memory)111(.)]TJ 0 g 0 G 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG @@ -9101,7 +9110,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 163.108 525.005 Td [(type)]TJ +/F235 8.9664 Tf 163.108 525.005 Td [(type)]TJ 0 g 0 G [-525(psb_T_base_vect_type)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -9170,7 +9179,7 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F75 9.9626 Tf 198.017 358.719 Td [(nrows)-250(\227)-250(Get)-250(number)-250(of)-250(rows)-250(in)-250(a)-250(dense)-250(vector)]TJ/F145 9.9626 Tf -47.312 -19.173 Td [(nr)]TJ +/F75 9.9626 Tf 198.017 358.719 Td [(nrows)-250(\227)-250(Get)-250(number)-250(of)-250(rows)-250(in)-250(a)-250(dense)-250(vector)]TJ/F147 9.9626 Tf -47.312 -19.173 Td [(nr)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -9196,7 +9205,7 @@ BT 0 g 0 G 0 -20.358 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.468 0 Td [(The)-250(number)-250(of)-250(r)18(ows)-250(of)-250(dense)-250(vector)]TJ/F145 9.9626 Tf 161.273 0 Td [(v)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ/F75 9.9626 Tf -238.971 -27.757 Td [(3.3.3)-1000(sizeof)-250(\227)-250(Get)-250(memory)-250(occupation)-250(in)-250(bytes)-250(of)-250(a)-250(dense)-250(vector)]TJ/F145 9.9626 Tf 0 -19.174 Td [(memory_size)]TJ +/F84 9.9626 Tf 72.468 0 Td [(The)-250(number)-250(of)-250(r)18(ows)-250(of)-250(dense)-250(vector)]TJ/F147 9.9626 Tf 161.273 0 Td [(v)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ/F75 9.9626 Tf -238.971 -27.757 Td [(3.3.3)-1000(sizeof)-250(\227)-250(Get)-250(memory)-250(occupation)-250(in)-250(bytes)-250(of)-250(a)-250(dense)-250(vector)]TJ/F147 9.9626 Tf 0 -19.174 Td [(memory_size)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -9219,7 +9228,7 @@ ET endstream endobj -1127 0 obj +1128 0 obj << /Length 3997 >> @@ -9241,7 +9250,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 5.231 -20.898 Td [(call)]TJ +/F147 9.9626 Tf 5.231 -20.898 Td [(call)]TJ 0 g 0 G [-1050(v%set\050alpha[,first,last]\051)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -9286,7 +9295,7 @@ BT 0 0 1 rg 0 0 1 RG [-250(1)]TJ 0 g 0 G - [(.)]TJ 1.018 0 0 1 99.895 217.975 Tm [(Note)-246(that)-246(a)-245(call)-246(to)]TJ/F145 9.9626 Tf 1 0 0 1 181.467 217.975 Tm [(v%zero\050\051)]TJ/F84 9.9626 Tf 1.018 0 0 1 225.803 217.975 Tm [(is)-246(pr)18(ovided)-246(as)-246(a)-246(shorth)1(a)-1(n)1(d,)-246(but)-246(is)-246(equivalent)-246(to)-246(a)]TJ 1.02 0 0 1 99.895 206.02 Tm [(call)-293(to)]TJ/F145 9.9626 Tf 1 0 0 1 130.212 206.02 Tm [(v%set\050zero\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 190.721 206.02 Tm [(with)-293(the)]TJ/F145 9.9626 Tf 1 0 0 1 231.423 206.02 Tm [(zero)]TJ/F84 9.9626 Tf 1.02 0 0 1 255.319 206.02 Tm [(constant)-293(having)-292(the)-293(appr)18(opriate)-293(type)-293(and)]TJ 1 0 0 1 99.895 194.064 Tm [(kind.)]TJ + [(.)]TJ 1.018 0 0 1 99.895 217.975 Tm [(Note)-246(that)-246(a)-245(call)-246(to)]TJ/F147 9.9626 Tf 1 0 0 1 181.467 217.975 Tm [(v%zero\050\051)]TJ/F84 9.9626 Tf 1.018 0 0 1 225.803 217.975 Tm [(is)-246(pr)18(ovided)-246(as)-246(a)-246(shorth)1(a)-1(n)1(d,)-246(but)-246(is)-246(equivalent)-246(to)-246(a)]TJ 1.02 0 0 1 99.895 206.02 Tm [(call)-293(to)]TJ/F147 9.9626 Tf 1 0 0 1 130.212 206.02 Tm [(v%set\050zero\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 190.721 206.02 Tm [(with)-293(the)]TJ/F147 9.9626 Tf 1 0 0 1 231.423 206.02 Tm [(zero)]TJ/F84 9.9626 Tf 1.02 0 0 1 255.319 206.02 Tm [(constant)-293(having)-292(the)-293(appr)18(opriate)-293(type)-293(and)]TJ 1 0 0 1 99.895 194.064 Tm [(kind.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -25.91 Td [(On)-250(Return)]TJ 0 g 0 G @@ -9301,7 +9310,7 @@ ET endstream endobj -1134 0 obj +1135 0 obj << /Length 4797 >> @@ -9319,7 +9328,7 @@ BT /F75 9.9626 Tf 198.017 706.129 Td [(vect)-250(\227)-250(Get)-250(a)-250(copy)-250(of)-250(the)-250(vector)-250(contents)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -47.312 -19.66 Td [(extv)-525(=)-525(v%get_vect\050[n]\051)]TJ +/F147 9.9626 Tf -47.312 -19.66 Td [(extv)-525(=)-525(v%get_vect\050[n]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.994 Td [(T)90(ype:)]TJ 0 g 0 G @@ -9344,7 +9353,7 @@ BT /F84 9.9626 Tf 1.02 0 0 1 223.093 495.259 Tm [(An)-283(allocatable)-283(array)-283(holding)-283(a)-282(copy)-283(of)-283(the)-283(dense)-283(vector)-283(con-)]TJ 1.002 0 0 1 175.611 483.304 Tm [(tents.)-310(If)-249(the)-250(ar)18(gument)]TJ/F78 9.9626 Tf 1 0 0 1 273.652 483.304 Tm [(n)]TJ/F84 9.9626 Tf 1.002 0 0 1 281.807 483.304 Tm [(is)-250(speci\002ed,)-249(the)-250(size)-250(of)-249(the)-250(r)18(eturned)-249(array)-250(equals)]TJ 1.02 0 0 1 175.611 471.349 Tm [(the)-299(minimum)-299(between)]TJ/F78 9.9626 Tf 1 0 0 1 281.747 471.349 Tm [(n)]TJ/F84 9.9626 Tf 1.02 0 0 1 290.45 471.349 Tm [(and)-299(the)-299(internal)-299(size)-299(of)-300(the)-299(vector)73(,)-313(or)-299(0)-299(if)]TJ/F78 9.9626 Tf 1 0 0 1 478.447 471.349 Tm [(n)]TJ/F84 9.9626 Tf 1.02 0 0 1 487.15 471.349 Tm [(is)]TJ 0.981 0 0 1 175.611 459.394 Tm [(negative;)-256(otherwise,)-255(the)-255(size)-256(of)-255(the)-255(array)-256(is)-255(the)-255(same)-256(as)-255(the)-255(internal)-256(size)-255(of)]TJ 1 0 0 1 175.611 447.438 Tm [(the)-250(vector)74(.)]TJ/F75 9.9626 Tf -24.906 -29.183 Td [(3.3.6)-1000(clone)-250(\227)-250(Clone)-250(current)-250(object)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -19.659 Td [(call)-1050(x%clone\050y,info\051)]TJ +/F147 9.9626 Tf 0 -19.659 Td [(call)-1050(x%clone\050y,info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.995 Td [(T)90(ype:)]TJ 0 g 0 G @@ -9366,25 +9375,25 @@ BT 0 g 0 G /F75 9.9626 Tf -10.132 -21.361 Td [(info)]TJ 0 g 0 G -/F84 9.9626 Tf 23.8 0 Td [(Return)-250(code.)]TJ/F75 11.9552 Tf -23.8 -31.176 Td [(3.4)-1000(Preconditioner)-250(data)-250(structure)]TJ/F84 9.9626 Tf 1.02 0 0 1 150.705 192.416 Tm [(Our)-329(base)-328(library)-329(of)18(fers)-328(support)-329(for)-328(simple)-329(well)-328(known)-329(pr)18(econditioners)-329(like)]TJ 1 0 0 1 150.705 180.46 Tm [(Diagonal)-250(Scaling)-250(or)-250(Block)-250(Jacobi)-250(with)-250(incomplete)-250(factorization)-250(ILU\0500\051.)]TJ 1.02 0 0 1 165.649 168.146 Tm [(A)-258(pr)18(econditioner)-257(is)-258(held)-257(in)-258(the)]TJ/F145 9.9626 Tf 1 0 0 1 305.999 168.146 Tm [(psb)]TJ +/F84 9.9626 Tf 23.8 0 Td [(Return)-250(code.)]TJ/F75 11.9552 Tf -23.8 -31.176 Td [(3.4)-1000(Preconditioner)-250(data)-250(structure)]TJ/F84 9.9626 Tf 1.02 0 0 1 150.705 192.416 Tm [(Our)-329(base)-328(library)-329(of)18(fers)-328(support)-329(for)-328(simple)-329(well)-328(known)-329(pr)18(econditioners)-329(like)]TJ 1 0 0 1 150.705 180.46 Tm [(Diagonal)-250(Scaling)-250(or)-250(Block)-250(Jacobi)-250(with)-250(incomplete)-250(factorization)-250(ILU\0500\051.)]TJ 1.02 0 0 1 165.649 168.146 Tm [(A)-258(pr)18(econditioner)-257(is)-258(held)-257(in)-258(the)]TJ/F147 9.9626 Tf 1 0 0 1 305.999 168.146 Tm [(psb)]TJ ET q 1 0 0 1 322.318 168.346 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 325.456 168.146 Td [(Tprec)]TJ +/F147 9.9626 Tf 325.456 168.146 Td [(Tprec)]TJ ET q 1 0 0 1 352.235 168.346 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 355.374 168.146 Td [(type)]TJ/F84 9.9626 Tf 1.02 0 0 1 378.912 168.146 Tm [(data)-258(str)8(uctur)18(e)-258(r)18(eported)-257(in)]TJ 0.994 0 0 1 150.705 156.191 Tm [(\002gur)18(e)]TJ +/F147 9.9626 Tf 355.374 168.146 Td [(type)]TJ/F84 9.9626 Tf 1.02 0 0 1 378.912 168.146 Tm [(data)-258(str)8(uctur)18(e)-258(r)18(eported)-257(in)]TJ 0.994 0 0 1 150.705 156.191 Tm [(\002gur)18(e)]TJ 0 0 1 rg 0 0 1 RG [-252(4)]TJ 0 g 0 G - [(.)-315(The)]TJ/F145 9.9626 Tf 1 0 0 1 208.773 156.191 Tm [(psb_Tprec_type)]TJ/F84 9.9626 Tf 0.994 0 0 1 284.498 156.191 Tm [(data)-252(type)-253(may)-252(contain)-253(a)-252(simple)-253(pr)18(econditioning)]TJ 1.02 0 0 1 150.705 144.236 Tm [(matrix)-255(with)-254(the)-255(associated)-255(communication)-254(descriptor)72(.)-333(The)-254(internal)-255(pr)18(econdi-)]TJ 1.02 0 0 1 150.705 132.281 Tm [(tioner)-249(is)-250(allocated)-249(appr)17(opriately)-249(with)-250(the)-249(dynamic)-250(type)-249(corr)17(esponding)-249(to)-250(the)]TJ 1 0 0 1 150.705 120.326 Tm [(desir)18(ed)-250(pr)18(econditioner)74(.)]TJ + [(.)-315(The)]TJ/F147 9.9626 Tf 1 0 0 1 208.773 156.191 Tm [(psb_Tprec_type)]TJ/F84 9.9626 Tf 0.994 0 0 1 284.498 156.191 Tm [(data)-252(type)-253(may)-252(contain)-253(a)-252(simple)-253(pr)18(econditioning)]TJ 1.02 0 0 1 150.705 144.236 Tm [(matrix)-255(with)-254(the)-255(associated)-255(communication)-254(descriptor)72(.)-333(The)-254(internal)-255(pr)18(econdi-)]TJ 1.02 0 0 1 150.705 132.281 Tm [(tioner)-249(is)-250(allocated)-249(appr)17(opriately)-249(with)-250(the)-249(dynamic)-250(type)-249(corr)17(esponding)-249(to)-250(the)]TJ 1 0 0 1 150.705 120.326 Tm [(desir)18(ed)-250(pr)18(econditioner)74(.)]TJ 0 g 0 G 166.874 -29.888 Td [(28)]TJ 0 g 0 G @@ -9392,7 +9401,7 @@ ET endstream endobj -1140 0 obj +1141 0 obj << /Length 4357 >> @@ -9412,7 +9421,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 112.299 699.454 Td [(type)]TJ +/F235 8.9664 Tf 112.299 699.454 Td [(type)]TJ 0 g 0 G [-525(psb_Tprec_type)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -9449,46 +9458,46 @@ BT 0 g 0 G [(,)-272(we)-267(have)-266(a)-267(number)-267(of)-267(sorting)-266(utilities;)-278(the)]TJ 1 0 0 1 99.895 572.49 Tm [(heap)-250(sort)-250(is)-250(implemented)-250(in)-250(terms)-250(of)-250(heaps)-250(having)-250(the)-250(following)-250(signatur)18(es:)]TJ 0 g 0 G -/F145 9.9626 Tf 0 -19.925 Td [(psb)]TJ +/F147 9.9626 Tf 0 -19.925 Td [(psb)]TJ ET q 1 0 0 1 116.214 552.764 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 119.352 552.565 Td [(T)]TJ +/F147 9.9626 Tf 119.352 552.565 Td [(T)]TJ ET q 1 0 0 1 125.21 552.764 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 128.348 552.565 Td [(heap)]TJ +/F147 9.9626 Tf 128.348 552.565 Td [(heap)]TJ 0 g 0 G -/F84 9.9626 Tf 1.007 0 0 1 154.251 552.565 Tm [(:)-308(a)-249(heap)-249(containing)-248(elements)-249(of)-248(type)-249(T)74(,)-249(wher)18(e)-248(T)-249(can)-249(be)]TJ/F145 9.9626 Tf 1 0 0 1 396.533 552.565 Tm [(i,s,c,d,z)]TJ/F84 9.9626 Tf -271.731 -11.955 Td [(for)-250(integer)74(,)-250(r)18(eal)-250(and)-250(complex)-250(data;)]TJ +/F84 9.9626 Tf 1.007 0 0 1 154.251 552.565 Tm [(:)-308(a)-249(heap)-249(containing)-248(elements)-249(of)-248(type)-249(T)74(,)-249(wher)18(e)-248(T)-249(can)-249(be)]TJ/F147 9.9626 Tf 1 0 0 1 396.533 552.565 Tm [(i,s,c,d,z)]TJ/F84 9.9626 Tf -271.731 -11.955 Td [(for)-250(integer)74(,)-250(r)18(eal)-250(and)-250(complex)-250(data;)]TJ 0 g 0 G -/F145 9.9626 Tf -24.907 -19.925 Td [(psb)]TJ +/F147 9.9626 Tf -24.907 -19.925 Td [(psb)]TJ ET q 1 0 0 1 116.214 520.884 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 119.352 520.685 Td [(T)]TJ +/F147 9.9626 Tf 119.352 520.685 Td [(T)]TJ ET q 1 0 0 1 125.21 520.884 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 128.348 520.685 Td [(idx)]TJ +/F147 9.9626 Tf 128.348 520.685 Td [(idx)]TJ ET q 1 0 0 1 144.667 520.884 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 147.805 520.685 Td [(heap)]TJ +/F147 9.9626 Tf 147.805 520.685 Td [(heap)]TJ 0 g 0 G /F84 9.9626 Tf 0.982 0 0 1 173.708 520.685 Tm [(:)-316(a)-255(heap)-255(containing)-255(elements)-255(of)-255(type)-255(T)76(,)-255(as)-255(above,)-255(together)-255(with)]TJ 1 0 0 1 124.802 508.729 Tm [(an)-250(integer)-250(index.)]TJ -24.907 -19.925 Td [(Given)-250(a)-250(heap)-250(object,)-250(the)-250(following)-250(methods)-250(ar)18(e)-250(de\002ned)-250(on)-250(it:)]TJ 0 g 0 G @@ -9529,7 +9538,7 @@ ET endstream endobj -1144 0 obj +1145 0 obj << /Length 159 >> @@ -9545,7 +9554,7 @@ ET endstream endobj -1155 0 obj +1156 0 obj << /Length 7647 >> @@ -9560,11 +9569,11 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 151.016 706.129 Td [(geaxpby)-250(\227)-250(General)-250(Dense)-250(Matrix)-250(Sum)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 686.94 Tm [(This)-302(subr)18(outine)-302(is)-302(an)-301(interface)-302(to)-302(the)-302(computatio)1(nal)-302(kernel)-302(for)-302(dense)-302(matrix)]TJ 1 0 0 1 99.895 674.985 Tm [(sum:)]TJ/F78 9.9626 Tf 143.149 -12.304 Td [(y)]TJ/F190 10.3811 Tf 7.998 0 Td [(\040)]TJ/F147 9.9626 Tf 13.398 0 Td [(a)]TJ/F78 9.9626 Tf 7.615 0 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ +/F75 11.9552 Tf 151.016 706.129 Td [(geaxpby)-250(\227)-250(General)-250(Dense)-250(Matrix)-250(Sum)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 686.94 Tm [(This)-302(subr)18(outine)-302(is)-302(an)-301(interface)-302(to)-302(the)-302(computatio)1(nal)-302(kernel)-302(for)-302(dense)-302(matrix)]TJ 1 0 0 1 99.895 674.985 Tm [(sum:)]TJ/F78 9.9626 Tf 143.149 -12.304 Td [(y)]TJ/F195 10.3811 Tf 7.998 0 Td [(\040)]TJ/F151 9.9626 Tf 13.398 0 Td [(a)]TJ/F78 9.9626 Tf 7.615 0 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -175.406 -18.398 Td [(call)]TJ +/F147 9.9626 Tf -175.406 -18.398 Td [(call)]TJ 0 g 0 G [-525(psb_geaxpby\050alpha,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -9591,7 +9600,7 @@ q []0 d 0 J 0.398 w 0 0 m 189.647 0 l S Q BT -/F78 9.9626 Tf 183.199 621.114 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(,)]TJ/F78 9.9626 Tf 5.106 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(,)]TJ/F147 9.9626 Tf 5.106 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(,)]TJ/F147 9.9626 Tf 5.355 0 Td [(b)]TJ/F75 9.9626 Tf 89.358 0 Td [(Subroutine)]TJ +/F78 9.9626 Tf 183.199 621.114 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(,)]TJ/F78 9.9626 Tf 5.106 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(,)]TJ/F151 9.9626 Tf 5.106 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(,)]TJ/F151 9.9626 Tf 5.355 0 Td [(b)]TJ/F75 9.9626 Tf 89.358 0 Td [(Subroutine)]TJ ET q 1 0 0 1 176.928 617.328 cm @@ -9647,7 +9656,7 @@ BT 0 g 0 G 0 -20.391 Td [(alpha)]TJ 0 g 0 G -/F84 9.9626 Tf 30.436 0 Td [(the)-250(scalar)]TJ/F147 9.9626 Tf 44.368 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(.)]TJ -55.282 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ +/F84 9.9626 Tf 30.436 0 Td [(the)-250(scalar)]TJ/F151 9.9626 Tf 44.368 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(.)]TJ -55.282 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG [-250(1)]TJ 0 g 0 G @@ -9657,28 +9666,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 348.869 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 348.869 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 348.869 Tm [(psb)]TJ ET q 1 0 0 1 385.864 349.068 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 348.869 Td [(T)]TJ +/F147 9.9626 Tf 389.002 348.869 Td [(T)]TJ ET q 1 0 0 1 394.86 349.068 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 348.869 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 348.869 Td [(vect)]TJ ET q 1 0 0 1 419.547 349.068 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 348.869 Td [(type)]TJ +/F147 9.9626 Tf 422.685 348.869 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 124.802 336.914 Tm [(containing)-270(numbers)-269(of)-270(type)-270(speci\002ed)-270(in)-269(T)90(able)]TJ 0 0 1 rg 0 0 1 RG @@ -9688,7 +9697,7 @@ BT 0 g 0 G /F75 9.9626 Tf -82.959 -20.39 Td [(beta)]TJ 0 g 0 G -/F84 9.9626 Tf 24.349 0 Td [(the)-250(scalar)]TJ/F147 9.9626 Tf 44.617 0 Td [(b)]TJ/F84 9.9626 Tf 5.524 0 Td [(.)]TJ -49.583 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ +/F84 9.9626 Tf 24.349 0 Td [(the)-250(scalar)]TJ/F151 9.9626 Tf 44.617 0 Td [(b)]TJ/F84 9.9626 Tf 5.524 0 Td [(.)]TJ -49.583 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG [-250(1)]TJ 0 g 0 G @@ -9698,28 +9707,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.521 0 Td [(the)-250(local)-250(portion)-250(of)-250(the)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 191.753 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -182.473 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ 0.98 0 0 1 124.802 188.537 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 188.537 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 188.537 Tm [(psb)]TJ ET q 1 0 0 1 385.864 188.736 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 188.537 Td [(T)]TJ +/F147 9.9626 Tf 389.002 188.537 Td [(T)]TJ ET q 1 0 0 1 394.86 188.736 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 188.537 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 188.537 Td [(vect)]TJ ET q 1 0 0 1 419.547 188.736 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 188.537 Td [(type)]TJ +/F147 9.9626 Tf 422.685 188.537 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.014 0 0 1 124.802 176.581 Tm [(containing)-247(numbers)-247(of)-246(the)-247(type)-247(indicated)-247(in)-247(T)91(able)]TJ 0 0 1 rg 0 0 1 RG @@ -9744,7 +9753,7 @@ ET endstream endobj -1163 0 obj +1164 0 obj << /Length 2434 >> @@ -9754,21 +9763,21 @@ stream BT /F84 9.9626 Tf 175.611 706.129 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 694.373 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 694.174 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 694.174 Td [(desc)]TJ ET q 1 0 0 1 348.86 694.373 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 694.174 Td [(type)]TJ +/F147 9.9626 Tf 351.998 694.174 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -9779,28 +9788,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.52 0 Td [(the)-250(local)-250(portion)-250(of)-250(r)18(esult)-250(submatrix)]TJ/F78 9.9626 Tf 160.68 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -151.4 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ 0.98 0 0 1 175.611 604.51 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 604.51 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 604.51 Tm [(psb)]TJ ET q 1 0 0 1 436.673 604.709 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 604.51 Td [(T)]TJ +/F147 9.9626 Tf 439.811 604.51 Td [(T)]TJ ET q 1 0 0 1 445.669 604.709 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 604.51 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 604.51 Td [(vect)]TJ ET q 1 0 0 1 470.356 604.709 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 604.51 Td [(type)]TJ +/F147 9.9626 Tf 473.495 604.51 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.884 -11.955 Td [(containing)-250(numbers)-250(of)-250(the)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -9818,7 +9827,7 @@ ET endstream endobj -1076 0 obj +1077 0 obj << /Type /ObjStm /N 100 @@ -9826,242 +9835,242 @@ endobj /Length 9737 >> stream -107 0 1073 57 1069 116 1078 211 1080 329 1081 388 1075 447 111 506 115 564 1077 622 -1083 732 1085 850 119 908 123 965 1086 1022 127 1080 1082 1136 1089 1231 1091 1349 131 1408 -135 1466 139 1524 1088 1582 1093 1677 1095 1795 143 1853 147 1910 1092 1967 1097 2062 1099 2180 -151 2239 155 2297 1100 2355 1101 2414 1096 2473 1103 2568 1105 2686 159 2744 163 2801 167 2858 -1102 2915 1107 3010 1109 3128 171 3187 1106 3244 1113 3339 1110 3487 1111 3633 1115 3781 175 3839 -179 3896 183 3952 187 4008 1116 4065 1112 4124 1120 4219 1122 4337 1118 4396 191 4455 195 4513 -199 4571 1119 4629 1126 4739 1123 4887 1124 5033 1128 5178 204 5236 1125 5293 1133 5388 1130 5527 -1135 5675 208 5734 212 5792 216 5849 1136 5907 1132 5966 1139 6074 1131 6213 1141 6359 1137 6417 -220 6475 1138 6532 1143 6642 1145 6760 224 6819 1142 6877 1154 6958 1146 7142 1147 7288 1148 7432 -1149 7578 1150 7724 1151 7868 1156 8013 228 8071 1129 8128 1153 8186 1162 8337 1152 8494 1159 8641 +107 0 1074 57 1070 116 1079 211 1081 329 1082 388 1076 447 111 506 115 564 1078 622 +1084 732 1086 850 119 908 123 965 1087 1022 127 1080 1083 1136 1090 1231 1092 1349 131 1408 +135 1466 139 1524 1089 1582 1094 1677 1096 1795 143 1853 147 1910 1093 1967 1098 2062 1100 2180 +151 2239 155 2297 1101 2355 1102 2414 1097 2473 1104 2568 1106 2686 159 2744 163 2801 167 2858 +1103 2915 1108 3010 1110 3128 171 3187 1107 3244 1114 3339 1111 3487 1112 3633 1116 3781 175 3839 +179 3896 183 3952 187 4008 1117 4065 1113 4124 1121 4219 1123 4337 1119 4396 191 4455 195 4513 +199 4571 1120 4629 1127 4739 1124 4887 1125 5033 1129 5178 204 5236 1126 5293 1134 5388 1131 5527 +1136 5675 208 5734 212 5792 216 5849 1137 5907 1133 5966 1140 6074 1132 6213 1142 6359 1138 6417 +220 6475 1139 6532 1144 6642 1146 6760 224 6819 1143 6877 1155 6958 1147 7142 1148 7288 1149 7432 +1150 7578 1151 7724 1152 7868 1157 8013 228 8071 1130 8128 1154 8186 1163 8337 1153 8494 1160 8641 % 107 0 obj << -/D [1070 0 R /XYZ 99.895 248.209 null] +/D [1071 0 R /XYZ 99.895 248.209 null] >> -% 1073 0 obj +% 1074 0 obj << -/D [1070 0 R /XYZ 119.097 217.656 null] +/D [1071 0 R /XYZ 119.097 217.656 null] >> -% 1069 0 obj +% 1070 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1078 0 obj +% 1079 0 obj << /Type /Page -/Contents 1079 0 R -/Resources 1077 0 R +/Contents 1080 0 R +/Resources 1078 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1052 0 R +/Parent 1053 0 R >> -% 1080 0 obj +% 1081 0 obj << -/D [1078 0 R /XYZ 149.705 753.953 null] +/D [1079 0 R /XYZ 149.705 753.953 null] >> -% 1081 0 obj +% 1082 0 obj << -/D [1078 0 R /XYZ 454.138 671.491 null] +/D [1079 0 R /XYZ 454.138 671.491 null] >> -% 1075 0 obj +% 1076 0 obj << -/D [1078 0 R /XYZ 150.705 571.789 null] +/D [1079 0 R /XYZ 150.705 571.789 null] >> % 111 0 obj << -/D [1078 0 R /XYZ 150.705 281.021 null] +/D [1079 0 R /XYZ 150.705 281.021 null] >> % 115 0 obj << -/D [1078 0 R /XYZ 150.705 262.296 null] +/D [1079 0 R /XYZ 150.705 262.296 null] >> -% 1077 0 obj +% 1078 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F233 1044 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F235 1045 0 R >> /ProcSet [ /PDF /Text ] >> -% 1083 0 obj +% 1084 0 obj << /Type /Page -/Contents 1084 0 R -/Resources 1082 0 R +/Contents 1085 0 R +/Resources 1083 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1087 0 R +/Parent 1088 0 R >> -% 1085 0 obj +% 1086 0 obj << -/D [1083 0 R /XYZ 98.895 753.953 null] +/D [1084 0 R /XYZ 98.895 753.953 null] >> % 119 0 obj << -/D [1083 0 R /XYZ 99.895 716.092 null] +/D [1084 0 R /XYZ 99.895 716.092 null] >> % 123 0 obj << -/D [1083 0 R /XYZ 99.895 540.892 null] +/D [1084 0 R /XYZ 99.895 540.892 null] >> -% 1086 0 obj +% 1087 0 obj << -/D [1083 0 R /XYZ 99.895 358.382 null] +/D [1084 0 R /XYZ 99.895 358.382 null] >> % 127 0 obj << -/D [1083 0 R /XYZ 99.895 300.51 null] +/D [1084 0 R /XYZ 99.895 300.51 null] >> -% 1082 0 obj +% 1083 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1089 0 obj +% 1090 0 obj << /Type /Page -/Contents 1090 0 R -/Resources 1088 0 R +/Contents 1091 0 R +/Resources 1089 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1087 0 R +/Parent 1088 0 R >> -% 1091 0 obj +% 1092 0 obj << -/D [1089 0 R /XYZ 149.705 753.953 null] +/D [1090 0 R /XYZ 149.705 753.953 null] >> % 131 0 obj << -/D [1089 0 R /XYZ 150.705 716.092 null] +/D [1090 0 R /XYZ 150.705 716.092 null] >> % 135 0 obj << -/D [1089 0 R /XYZ 150.705 526.761 null] +/D [1090 0 R /XYZ 150.705 526.761 null] >> % 139 0 obj << -/D [1089 0 R /XYZ 150.705 326.359 null] +/D [1090 0 R /XYZ 150.705 326.359 null] >> -% 1088 0 obj +% 1089 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1093 0 obj +% 1094 0 obj << /Type /Page -/Contents 1094 0 R -/Resources 1092 0 R +/Contents 1095 0 R +/Resources 1093 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1087 0 R +/Parent 1088 0 R >> -% 1095 0 obj +% 1096 0 obj << -/D [1093 0 R /XYZ 98.895 753.953 null] +/D [1094 0 R /XYZ 98.895 753.953 null] >> % 143 0 obj << -/D [1093 0 R /XYZ 99.895 716.092 null] +/D [1094 0 R /XYZ 99.895 716.092 null] >> % 147 0 obj << -/D [1093 0 R /XYZ 99.895 474.131 null] +/D [1094 0 R /XYZ 99.895 474.131 null] >> -% 1092 0 obj +% 1093 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1097 0 obj +% 1098 0 obj << /Type /Page -/Contents 1098 0 R -/Resources 1096 0 R +/Contents 1099 0 R +/Resources 1097 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1087 0 R +/Parent 1088 0 R >> -% 1099 0 obj +% 1100 0 obj << -/D [1097 0 R /XYZ 149.705 753.953 null] +/D [1098 0 R /XYZ 149.705 753.953 null] >> % 151 0 obj << -/D [1097 0 R /XYZ 150.705 716.092 null] +/D [1098 0 R /XYZ 150.705 716.092 null] >> % 155 0 obj << -/D [1097 0 R /XYZ 150.705 412.148 null] +/D [1098 0 R /XYZ 150.705 412.148 null] >> -% 1100 0 obj +% 1101 0 obj << -/D [1097 0 R /XYZ 150.705 179.104 null] +/D [1098 0 R /XYZ 150.705 179.104 null] >> -% 1101 0 obj +% 1102 0 obj << -/D [1097 0 R /XYZ 150.705 145.139 null] +/D [1098 0 R /XYZ 150.705 145.139 null] >> -% 1096 0 obj +% 1097 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1103 0 obj +% 1104 0 obj << /Type /Page -/Contents 1104 0 R -/Resources 1102 0 R +/Contents 1105 0 R +/Resources 1103 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1087 0 R +/Parent 1088 0 R >> -% 1105 0 obj +% 1106 0 obj << -/D [1103 0 R /XYZ 98.895 753.953 null] +/D [1104 0 R /XYZ 98.895 753.953 null] >> % 159 0 obj << -/D [1103 0 R /XYZ 99.895 716.092 null] +/D [1104 0 R /XYZ 99.895 716.092 null] >> % 163 0 obj << -/D [1103 0 R /XYZ 99.895 484.709 null] +/D [1104 0 R /XYZ 99.895 484.709 null] >> % 167 0 obj << -/D [1103 0 R /XYZ 99.895 251.325 null] +/D [1104 0 R /XYZ 99.895 251.325 null] >> -% 1102 0 obj +% 1103 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1107 0 obj +% 1108 0 obj << /Type /Page -/Contents 1108 0 R -/Resources 1106 0 R +/Contents 1109 0 R +/Resources 1107 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1087 0 R +/Parent 1088 0 R >> -% 1109 0 obj +% 1110 0 obj << -/D [1107 0 R /XYZ 149.705 753.953 null] +/D [1108 0 R /XYZ 149.705 753.953 null] >> % 171 0 obj << -/D [1107 0 R /XYZ 150.705 476.15 null] +/D [1108 0 R /XYZ 150.705 476.15 null] >> -% 1106 0 obj +% 1107 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1113 0 obj +% 1114 0 obj << /Type /Page -/Contents 1114 0 R -/Resources 1112 0 R +/Contents 1115 0 R +/Resources 1113 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1117 0 R -/Annots [ 1110 0 R 1111 0 R ] +/Parent 1118 0 R +/Annots [ 1111 0 R 1112 0 R ] >> -% 1110 0 obj +% 1111 0 obj << /Type /Annot /Subtype /Link @@ -10069,7 +10078,7 @@ stream /Rect [183.073 164.341 190.017 176.4] /A << /S /GoTo /D (section.6) >> >> -% 1111 0 obj +% 1112 0 obj << /Type /Annot /Subtype /Link @@ -10077,78 +10086,78 @@ stream /Rect [293.044 128.475 300.117 140.535] /A << /S /GoTo /D (listing.3) >> >> -% 1115 0 obj +% 1116 0 obj << -/D [1113 0 R /XYZ 98.895 753.953 null] +/D [1114 0 R /XYZ 98.895 753.953 null] >> % 175 0 obj << -/D [1113 0 R /XYZ 99.895 716.092 null] +/D [1114 0 R /XYZ 99.895 716.092 null] >> % 179 0 obj << -/D [1113 0 R /XYZ 99.895 586.94 null] +/D [1114 0 R /XYZ 99.895 586.94 null] >> % 183 0 obj << -/D [1113 0 R /XYZ 99.895 402.59 null] +/D [1114 0 R /XYZ 99.895 402.59 null] >> % 187 0 obj << -/D [1113 0 R /XYZ 99.895 234.114 null] +/D [1114 0 R /XYZ 99.895 234.114 null] >> -% 1116 0 obj +% 1117 0 obj << -/D [1113 0 R /XYZ 119.612 204.012 null] +/D [1114 0 R /XYZ 119.612 204.012 null] >> -% 1112 0 obj +% 1113 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1120 0 obj +% 1121 0 obj << /Type /Page -/Contents 1121 0 R -/Resources 1119 0 R +/Contents 1122 0 R +/Resources 1120 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1117 0 R +/Parent 1118 0 R >> -% 1122 0 obj +% 1123 0 obj << -/D [1120 0 R /XYZ 149.705 753.953 null] +/D [1121 0 R /XYZ 149.705 753.953 null] >> -% 1118 0 obj +% 1119 0 obj << -/D [1120 0 R /XYZ 150.705 446.997 null] +/D [1121 0 R /XYZ 150.705 446.997 null] >> % 191 0 obj << -/D [1120 0 R /XYZ 150.705 387.147 null] +/D [1121 0 R /XYZ 150.705 387.147 null] >> % 195 0 obj << -/D [1120 0 R /XYZ 150.705 370.604 null] +/D [1121 0 R /XYZ 150.705 370.604 null] >> % 199 0 obj << -/D [1120 0 R /XYZ 150.705 194.093 null] +/D [1121 0 R /XYZ 150.705 194.093 null] >> -% 1119 0 obj +% 1120 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F233 1044 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F235 1045 0 R >> /ProcSet [ /PDF /Text ] >> -% 1126 0 obj +% 1127 0 obj << /Type /Page -/Contents 1127 0 R -/Resources 1125 0 R +/Contents 1128 0 R +/Resources 1126 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1117 0 R -/Annots [ 1123 0 R 1124 0 R ] +/Parent 1118 0 R +/Annots [ 1124 0 R 1125 0 R ] >> -% 1123 0 obj +% 1124 0 obj << /Type /Annot /Subtype /Link @@ -10156,7 +10165,7 @@ stream /Rect [378.159 383.557 385.133 395.616] /A << /S /GoTo /D (table.1) >> >> -% 1124 0 obj +% 1125 0 obj << /Type /Annot /Subtype /Link @@ -10164,29 +10173,29 @@ stream /Rect [378.159 240.08 385.133 252.139] /A << /S /GoTo /D (table.1) >> >> -% 1128 0 obj +% 1129 0 obj << -/D [1126 0 R /XYZ 98.895 753.953 null] +/D [1127 0 R /XYZ 98.895 753.953 null] >> % 204 0 obj << -/D [1126 0 R /XYZ 99.895 610.712 null] +/D [1127 0 R /XYZ 99.895 610.712 null] >> -% 1125 0 obj +% 1126 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1133 0 obj +% 1134 0 obj << /Type /Page -/Contents 1134 0 R -/Resources 1132 0 R +/Contents 1135 0 R +/Resources 1133 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1117 0 R -/Annots [ 1130 0 R ] +/Parent 1118 0 R +/Annots [ 1131 0 R ] >> -% 1130 0 obj +% 1131 0 obj << /Type /Annot /Subtype /Link @@ -10194,41 +10203,41 @@ stream /Rect [178.153 152.385 185.097 164.445] /A << /S /GoTo /D (listing.4) >> >> -% 1135 0 obj +% 1136 0 obj << -/D [1133 0 R /XYZ 149.705 753.953 null] +/D [1134 0 R /XYZ 149.705 753.953 null] >> % 208 0 obj << -/D [1133 0 R /XYZ 150.705 716.092 null] +/D [1134 0 R /XYZ 150.705 716.092 null] >> % 212 0 obj << -/D [1133 0 R /XYZ 150.705 430.41 null] +/D [1134 0 R /XYZ 150.705 430.41 null] >> % 216 0 obj << -/D [1133 0 R /XYZ 150.705 226.203 null] +/D [1134 0 R /XYZ 150.705 226.203 null] >> -% 1136 0 obj +% 1137 0 obj << -/D [1133 0 R /XYZ 305.999 168.146 null] +/D [1134 0 R /XYZ 305.999 168.146 null] >> -% 1132 0 obj +% 1133 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1139 0 obj +% 1140 0 obj << /Type /Page -/Contents 1140 0 R -/Resources 1138 0 R +/Contents 1141 0 R +/Resources 1139 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1117 0 R -/Annots [ 1131 0 R ] +/Parent 1118 0 R +/Annots [ 1132 0 R ] >> -% 1131 0 obj +% 1132 0 obj << /Type /Annot /Subtype /Link @@ -10236,54 +10245,54 @@ stream /Rect [246.566 580.64 253.64 592.699] /A << /S /GoTo /D (section.6) >> >> -% 1141 0 obj +% 1142 0 obj << -/D [1139 0 R /XYZ 98.895 753.953 null] +/D [1140 0 R /XYZ 98.895 753.953 null] >> -% 1137 0 obj +% 1138 0 obj << -/D [1139 0 R /XYZ 99.895 665.282 null] +/D [1140 0 R /XYZ 99.895 665.282 null] >> % 220 0 obj << -/D [1139 0 R /XYZ 99.895 613.372 null] +/D [1140 0 R /XYZ 99.895 613.372 null] >> -% 1138 0 obj +% 1139 0 obj << -/Font << /F233 1044 0 R /F84 687 0 R /F75 685 0 R /F145 940 0 R >> +/Font << /F235 1045 0 R /F84 687 0 R /F75 685 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1143 0 obj +% 1144 0 obj << /Type /Page -/Contents 1144 0 R -/Resources 1142 0 R +/Contents 1145 0 R +/Resources 1143 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1117 0 R +/Parent 1118 0 R >> -% 1145 0 obj +% 1146 0 obj << -/D [1143 0 R /XYZ 149.705 753.953 null] +/D [1144 0 R /XYZ 149.705 753.953 null] >> % 224 0 obj << -/D [1143 0 R /XYZ 150.705 716.092 null] +/D [1144 0 R /XYZ 150.705 716.092 null] >> -% 1142 0 obj +% 1143 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1154 0 obj +% 1155 0 obj << /Type /Page -/Contents 1155 0 R -/Resources 1153 0 R +/Contents 1156 0 R +/Resources 1154 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1158 0 R -/Annots [ 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R ] +/Parent 1159 0 R +/Annots [ 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R ] >> -% 1146 0 obj +% 1147 0 obj << /Type /Annot /Subtype /Link @@ -10291,7 +10300,7 @@ stream /Rect [378.159 413.274 385.133 425.334] /A << /S /GoTo /D (table.1) >> >> -% 1147 0 obj +% 1148 0 obj << /Type /Annot /Subtype /Link @@ -10299,7 +10308,7 @@ stream /Rect [368.549 345.063 444.603 357.123] /A << /S /GoTo /D (vdata) >> >> -% 1148 0 obj +% 1149 0 obj << /Type /Annot /Subtype /Link @@ -10307,7 +10316,7 @@ stream /Rect [332.133 333.108 339.206 345.168] /A << /S /GoTo /D (table.1) >> >> -% 1149 0 obj +% 1150 0 obj << /Type /Annot /Subtype /Link @@ -10315,7 +10324,7 @@ stream /Rect [378.159 252.942 385.133 265.002] /A << /S /GoTo /D (table.1) >> >> -% 1150 0 obj +% 1151 0 obj << /Type /Annot /Subtype /Link @@ -10323,7 +10332,7 @@ stream /Rect [368.549 184.731 444.603 196.791] /A << /S /GoTo /D (vdata) >> >> -% 1151 0 obj +% 1152 0 obj << /Type /Annot /Subtype /Link @@ -10331,33 +10340,33 @@ stream /Rect [347.816 172.776 354.86 184.835] /A << /S /GoTo /D (table.1) >> >> -% 1156 0 obj +% 1157 0 obj << -/D [1154 0 R /XYZ 98.895 753.953 null] +/D [1155 0 R /XYZ 98.895 753.953 null] >> % 228 0 obj << -/D [1154 0 R /XYZ 99.895 716.092 null] +/D [1155 0 R /XYZ 99.895 716.092 null] >> -% 1129 0 obj +% 1130 0 obj << -/D [1154 0 R /XYZ 99.895 558.947 null] +/D [1155 0 R /XYZ 99.895 558.947 null] >> -% 1153 0 obj +% 1154 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F147 1157 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F151 1158 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1162 0 obj +% 1163 0 obj << /Type /Page -/Contents 1163 0 R -/Resources 1161 0 R +/Contents 1164 0 R +/Resources 1162 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1158 0 R -/Annots [ 1152 0 R 1159 0 R 1160 0 R ] +/Parent 1159 0 R +/Annots [ 1153 0 R 1160 0 R 1161 0 R ] >> -% 1152 0 obj +% 1153 0 obj << /Type /Annot /Subtype /Link @@ -10365,7 +10374,7 @@ stream /Rect [306.858 690.368 373.916 702.428] /A << /S /GoTo /D (descdata) >> >> -% 1159 0 obj +% 1160 0 obj << /Type /Annot /Subtype /Link @@ -10376,7 +10385,7 @@ stream endstream endobj -1173 0 obj +1174 0 obj << /Length 7835 >> @@ -10391,7 +10400,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 151.016 706.129 Td [(gedot)-250(\227)-250(Dot)-250(Product)]TJ/F84 9.9626 Tf -51.429 -18.976 Td [(This)-250(function)-250(computes)-250(dot)-250(pr)18(oduct)-250(between)-250(two)-250(vectors)]TJ/F78 9.9626 Tf 254.646 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -286.622 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.46 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 7.596 0 Td [(ar)18(e)-250(r)18(eal)-250(vectors)-250(it)-250(computes)-250(dot-pr)18(oduct)-250(as:)]TJ/F78 9.9626 Tf 104.718 -23.132 Td [(d)-25(o)-35(t)]TJ/F190 10.3811 Tf 16.336 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F78 7.5716 Tf 5.398 4.115 Td [(T)]TJ/F78 9.9626 Tf 5.526 -4.115 Td [(y)]TJ/F84 9.9626 Tf -189.779 -21.93 Td [(Else)-250(if)]TJ/F78 9.9626 Tf 29.474 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 7.597 0 Td [(ar)18(e)-250(complex)-250(vectors)-250(then)-250(it)-250(computes)-250(dot-pr)18(oduct)-250(as:)]TJ/F78 9.9626 Tf 83.965 -23.132 Td [(d)-25(o)-35(t)]TJ/F190 10.3811 Tf 16.336 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F78 7.5716 Tf 5.587 4.115 Td [(H)]TJ/F78 9.9626 Tf 6.813 -4.115 Td [(y)]TJ/F145 9.9626 Tf -175.573 -21.937 Td [(psb_gedot\050x,)]TJ +/F75 11.9552 Tf 151.016 706.129 Td [(gedot)-250(\227)-250(Dot)-250(Product)]TJ/F84 9.9626 Tf -51.429 -18.976 Td [(This)-250(function)-250(computes)-250(dot)-250(pr)18(oduct)-250(between)-250(two)-250(vectors)]TJ/F78 9.9626 Tf 254.646 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -286.622 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.46 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 7.596 0 Td [(ar)18(e)-250(r)18(eal)-250(vectors)-250(it)-250(computes)-250(dot-pr)18(oduct)-250(as:)]TJ/F78 9.9626 Tf 104.718 -23.132 Td [(d)-25(o)-35(t)]TJ/F195 10.3811 Tf 16.336 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F78 7.5716 Tf 5.398 4.115 Td [(T)]TJ/F78 9.9626 Tf 5.526 -4.115 Td [(y)]TJ/F84 9.9626 Tf -189.779 -21.93 Td [(Else)-250(if)]TJ/F78 9.9626 Tf 29.474 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 7.597 0 Td [(ar)18(e)-250(complex)-250(vectors)-250(then)-250(it)-250(computes)-250(dot-pr)18(oduct)-250(as:)]TJ/F78 9.9626 Tf 83.965 -23.132 Td [(d)-25(o)-35(t)]TJ/F195 10.3811 Tf 16.336 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F78 7.5716 Tf 5.587 4.115 Td [(H)]TJ/F78 9.9626 Tf 6.813 -4.115 Td [(y)]TJ/F147 9.9626 Tf -175.573 -21.937 Td [(psb_gedot\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(y,)]TJ @@ -10471,28 +10480,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 359.506 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 359.506 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 359.506 Tm [(psb)]TJ ET q 1 0 0 1 385.864 359.705 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 359.506 Td [(T)]TJ +/F147 9.9626 Tf 389.002 359.506 Td [(T)]TJ ET q 1 0 0 1 394.86 359.705 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 359.506 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 359.506 Td [(vect)]TJ ET q 1 0 0 1 419.547 359.705 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 359.506 Td [(type)]TJ +/F147 9.9626 Tf 422.685 359.506 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 124.802 347.55 Tm [(containing)-270(numbers)-269(of)-270(type)-270(speci\002ed)-270(in)-269(T)90(able)]TJ 0 0 1 rg 0 0 1 RG @@ -10504,28 +10513,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.521 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.445 0 Td [(y)]TJ/F84 9.9626 Tf 5.105 0 Td [(.)]TJ -166.164 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 267.824 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 267.824 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 267.824 Tm [(psb)]TJ ET q 1 0 0 1 385.864 268.023 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 267.824 Td [(T)]TJ +/F147 9.9626 Tf 389.002 267.824 Td [(T)]TJ ET q 1 0 0 1 394.86 268.023 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 267.824 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 267.824 Td [(vect)]TJ ET q 1 0 0 1 419.547 268.023 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 267.824 Td [(type)]TJ +/F147 9.9626 Tf 422.685 267.824 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 0.98 0 0 1 124.802 255.869 Tm [(containing)-246(numbers)-247(of)-246(type)-247(speci\002ed)-246(in)-247(T)94(able)]TJ 0 0 1 rg 0 0 1 RG @@ -10544,21 +10553,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 273.363 176.341 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 276.501 176.142 Td [(desc)]TJ +/F147 9.9626 Tf 276.501 176.142 Td [(desc)]TJ ET q 1 0 0 1 298.05 176.341 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 301.189 176.142 Td [(type)]TJ +/F147 9.9626 Tf 301.189 176.142 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -10572,7 +10581,7 @@ ET endstream endobj -1179 0 obj +1180 0 obj << /Length 4448 >> @@ -10580,7 +10589,7 @@ stream 0 g 0 G 0 g 0 G BT -/F84 9.9626 Tf 175.611 706.129 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(scalar)74(.)-310(Default:)]TJ/F145 9.9626 Tf 165.319 0 Td [(global)]TJ +/F84 9.9626 Tf 175.611 706.129 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(scalar)74(.)-310(Default:)]TJ/F147 9.9626 Tf 165.319 0 Td [(global)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -10591,7 +10600,7 @@ BT 0 g 0 G 0 -19.925 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.777 0 Td [(is)-250(the)-250(dot)-250(pr)18(oduct)-250(of)-250(vectors)]TJ/F78 9.9626 Tf 126.329 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ 0.98 0 0 1 175.611 630.413 Tm [(Scope:)]TJ/F75 9.9626 Tf 0.98 0 0 1 206.422 630.413 Tm [(global)]TJ/F84 9.9626 Tf 0.98 0 0 1 237.009 630.413 Tm [(unless)-244(the)-244(optional)-244(variable)]TJ/F145 9.9626 Tf 1 0 0 1 358.293 630.413 Tm [(global)]TJ +/F84 9.9626 Tf 72.777 0 Td [(is)-250(the)-250(dot)-250(pr)18(oduct)-250(of)-250(vectors)]TJ/F78 9.9626 Tf 126.329 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ 0.98 0 0 1 175.611 630.413 Tm [(Scope:)]TJ/F75 9.9626 Tf 0.98 0 0 1 206.422 630.413 Tm [(global)]TJ/F84 9.9626 Tf 0.98 0 0 1 237.009 630.413 Tm [(unless)-244(the)-244(optional)-244(variable)]TJ/F147 9.9626 Tf 1 0 0 1 358.293 630.413 Tm [(global)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -10610,7 +10619,7 @@ BT 0.98 0 0 1 175.303 496.913 Tm [(The)-201(computation)-200(of)-201(a)-200(global)-201(r)18(esult)-200(r)18(equir)19(es)-201(a)-201(global)-200(communication,)-212(which)]TJ 1.02 0 0 1 175.611 484.958 Tm [(entails)-265(a)-265(signi\002cant)-264(over)17(head.)-363(It)-265(may)-265(be)-264(necessary)-265(and/or)-265(advisable)-265(to)]TJ 0.98 0 0 1 175.611 473.003 Tm [(compute)-256(multiple)-256(dot)-256(pr)18(oducts)-256(at)-256(the)-256(same)-256(time;)-257(in)-256(this)-256(case,)-256(it)-256(is)-256(possible)]TJ 1 0 0 1 175.611 461.048 Tm [(to)-250(impr)18(ove)-250(the)-250(r)8(untime)-250(ef)18(\002ciency)-250(by)-250(using)-250(the)-250(following)-250(scheme:)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G -/F145 9.9626 Tf 52.304 -19.925 Td [(vres\050)]TJ +/F147 9.9626 Tf 52.304 -19.925 Td [(vres\050)]TJ 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG [(1)]TJ 0 g 0 G @@ -10686,7 +10695,7 @@ ET endstream endobj -1190 0 obj +1191 0 obj << /Length 8900 >> @@ -10701,11 +10710,11 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 151.016 706.129 Td [(gedots)-250(\227)-250(Generalized)-250(Dot)-250(Product)]TJ/F84 9.9626 Tf 1.014 0 0 1 99.587 687.165 Tm [(This)-246(subr)17(ou)1(tine)-247(computes)-246(a)-246(series)-247(of)-246(dot)-246(pr)17(oducts)-246(among)-246(the)-247(columns)-246(of)-246(two)]TJ 1 0 0 1 99.895 675.21 Tm [(dense)-250(matrices)]TJ/F78 9.9626 Tf 68.209 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(:)]TJ/F78 9.9626 Tf 24.806 -13.101 Td [(r)-17(e)-25(s)]TJ/F192 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.042 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F192 10.3811 Tf 5.329 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)-13(,)]TJ/F78 9.9626 Tf 6.821 0 Td [(i)]TJ/F192 10.3811 Tf 3.089 0 Td [(\051)]TJ/F78 7.5716 Tf 4.342 4.114 Td [(T)]TJ/F78 9.9626 Tf 5.525 -4.114 Td [(y)]TJ/F192 10.3811 Tf 5.231 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)-12(,)]TJ/F78 9.9626 Tf 6.821 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 99.895 645.233 Tm [(If)-240(the)-240(matrices)-240(ar)19(e)-240(complex,)-243(then)-240(the)-240(usual)-240(c)1(onvention)-240(applies,)-243(i.e.)-311(the)-240(conjugate)]TJ 1.007 0 0 1 99.895 633.278 Tm [(transpose)-249(of)]TJ/F78 9.9626 Tf 1 0 0 1 156.904 633.278 Tm [(x)]TJ/F84 9.9626 Tf 1.007 0 0 1 164.604 633.278 Tm [(is)-249(used.)-309(If)]TJ/F78 9.9626 Tf 1 0 0 1 210.627 633.278 Tm [(x)]TJ/F84 9.9626 Tf 1.007 0 0 1 218.327 633.278 Tm [(and)]TJ/F78 9.9626 Tf 1 0 0 1 237.93 633.278 Tm [(y)]TJ/F84 9.9626 Tf 1.007 0 0 1 245.531 633.278 Tm [(ar)18(e)-249(of)-248(rank)-249(one,)-249(then)]TJ/F78 9.9626 Tf 1 0 0 1 339.231 633.278 Tm [(r)-17(e)-25(s)]TJ/F84 9.9626 Tf 1.007 0 0 1 353.894 633.278 Tm [(is)-249(a)-248(scalar)73(,)-248(else)-249(it)-249(is)-248(a)]TJ 1 0 0 1 99.895 621.323 Tm [(rank)-250(one)-250(array)111(.)]TJ +/F75 11.9552 Tf 151.016 706.129 Td [(gedots)-250(\227)-250(Generalized)-250(Dot)-250(Product)]TJ/F84 9.9626 Tf 1.014 0 0 1 99.587 687.165 Tm [(This)-246(subr)17(ou)1(tine)-247(computes)-246(a)-246(series)-247(of)-246(dot)-246(pr)17(oducts)-246(among)-246(the)-247(columns)-246(of)-246(two)]TJ 1 0 0 1 99.895 675.21 Tm [(dense)-250(matrices)]TJ/F78 9.9626 Tf 68.209 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(:)]TJ/F78 9.9626 Tf 24.806 -13.101 Td [(r)-17(e)-25(s)]TJ/F197 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.042 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F197 10.3811 Tf 5.329 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)-13(,)]TJ/F78 9.9626 Tf 6.821 0 Td [(i)]TJ/F197 10.3811 Tf 3.089 0 Td [(\051)]TJ/F78 7.5716 Tf 4.342 4.114 Td [(T)]TJ/F78 9.9626 Tf 5.525 -4.114 Td [(y)]TJ/F197 10.3811 Tf 5.231 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)-12(,)]TJ/F78 9.9626 Tf 6.821 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 99.895 645.233 Tm [(If)-240(the)-240(matrices)-240(ar)19(e)-240(complex,)-243(then)-240(the)-240(usual)-240(c)1(onvention)-240(applies,)-243(i.e.)-311(the)-240(conjugate)]TJ 1.007 0 0 1 99.895 633.278 Tm [(transpose)-249(of)]TJ/F78 9.9626 Tf 1 0 0 1 156.904 633.278 Tm [(x)]TJ/F84 9.9626 Tf 1.007 0 0 1 164.604 633.278 Tm [(is)-249(used.)-309(If)]TJ/F78 9.9626 Tf 1 0 0 1 210.627 633.278 Tm [(x)]TJ/F84 9.9626 Tf 1.007 0 0 1 218.327 633.278 Tm [(and)]TJ/F78 9.9626 Tf 1 0 0 1 237.93 633.278 Tm [(y)]TJ/F84 9.9626 Tf 1.007 0 0 1 245.531 633.278 Tm [(ar)18(e)-249(of)-248(rank)-249(one,)-249(then)]TJ/F78 9.9626 Tf 1 0 0 1 339.231 633.278 Tm [(r)-17(e)-25(s)]TJ/F84 9.9626 Tf 1.007 0 0 1 353.894 633.278 Tm [(is)-249(a)-248(scalar)73(,)-248(else)-249(it)-249(is)-248(a)]TJ 1 0 0 1 99.895 621.323 Tm [(rank)-250(one)-250(array)111(.)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 20.175 -11.955 Td [(call)]TJ +/F147 9.9626 Tf 20.175 -11.955 Td [(call)]TJ 0 g 0 G [-525(psb_gedots\050res,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -10787,28 +10796,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 388.49 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 388.49 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 388.49 Tm [(psb)]TJ ET q 1 0 0 1 385.864 388.689 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 388.49 Td [(T)]TJ +/F147 9.9626 Tf 389.002 388.49 Td [(T)]TJ ET q 1 0 0 1 394.86 388.689 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 388.49 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 388.49 Td [(vect)]TJ ET q 1 0 0 1 419.547 388.689 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 388.49 Td [(type)]TJ +/F147 9.9626 Tf 422.685 388.49 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 124.802 376.535 Tm [(containing)-270(numbers)-269(of)-270(type)-270(speci\002ed)-270(in)-269(T)90(able)]TJ 0 0 1 rg 0 0 1 RG @@ -10820,28 +10829,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.521 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.445 0 Td [(y)]TJ/F84 9.9626 Tf 5.105 0 Td [(.)]TJ -166.164 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 297.539 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 297.539 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 297.539 Tm [(psb)]TJ ET q 1 0 0 1 385.864 297.738 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 297.539 Td [(T)]TJ +/F147 9.9626 Tf 389.002 297.539 Td [(T)]TJ ET q 1 0 0 1 394.86 297.738 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 297.539 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 297.539 Td [(vect)]TJ ET q 1 0 0 1 419.547 297.738 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 297.539 Td [(type)]TJ +/F147 9.9626 Tf 422.685 297.539 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 0.98 0 0 1 124.802 285.583 Tm [(containing)-246(numbers)-247(of)-246(type)-247(speci\002ed)-246(in)-247(T)94(able)]TJ 0 0 1 rg 0 0 1 RG @@ -10860,21 +10869,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 273.363 206.786 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 276.501 206.587 Td [(desc)]TJ +/F147 9.9626 Tf 276.501 206.587 Td [(desc)]TJ ET q 1 0 0 1 298.05 206.786 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 301.189 206.587 Td [(type)]TJ +/F147 9.9626 Tf 301.189 206.587 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -10895,7 +10904,7 @@ ET endstream endobj -1195 0 obj +1196 0 obj << /Length 581 >> @@ -10914,7 +10923,7 @@ ET endstream endobj -1202 0 obj +1203 0 obj << /Length 7933 >> @@ -10929,7 +10938,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 151.016 706.129 Td [(normi)-250(\227)-250(In\002nity-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf -51.429 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(in\002nity-norm)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 233.575 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ -238.473 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.46 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(r)18(eal)-250(vector)-250(it)-250(computes)-250(in\002nity)-250(norm)-250(as:)]TJ/F78 9.9626 Tf 117.806 -18.736 Td [(a)-25(m)-40(a)-42(x)]TJ/F190 10.3811 Tf 25.761 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(max)]TJ/F78 7.5716 Tf 8.354 -7.21 Td [(i)]TJ/F190 10.3811 Tf 12.35 7.21 Td [(j)]TJ/F78 9.9626 Tf 3.297 0 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf -206.02 -23.313 Td [(else)-250(if)]TJ/F78 9.9626 Tf 28.159 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(complex)-250(vector)-250(then)-250(it)-250(computes)-250(the)-250(in\002nity-norm)-250(as:)]TJ/F78 9.9626 Tf 63.42 -18.737 Td [(a)-25(m)-40(a)-42(x)]TJ/F190 10.3811 Tf 25.761 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(max)]TJ/F78 7.5716 Tf 8.354 -7.21 Td [(i)]TJ/F192 10.3811 Tf 12.35 7.21 Td [(\050)]TJ/F190 10.3811 Tf 4.274 0 Td [(j)]TJ/F78 9.9626 Tf 3.029 0 Td [(r)-17(e)]TJ/F192 10.3811 Tf 8.169 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F192 10.3811 Tf 2.875 1.96 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(j)]TJ/F192 10.3811 Tf 5.065 0 Td [(+)]TJ/F190 10.3811 Tf 10.256 0 Td [(j)]TJ/F78 9.9626 Tf 3.059 0 Td [(i)-32(m)]TJ/F192 10.3811 Tf 11.088 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F192 10.3811 Tf 2.875 1.96 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(j)]TJ/F192 10.3811 Tf 3.128 0 Td [(\051)]TJ/F145 9.9626 Tf -225.617 -22.974 Td [(psb_geamax\050x,)]TJ +/F75 11.9552 Tf 151.016 706.129 Td [(normi)-250(\227)-250(In\002nity-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf -51.429 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(in\002nity-norm)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 233.575 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ -238.473 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.46 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(r)18(eal)-250(vector)-250(it)-250(computes)-250(in\002nity)-250(norm)-250(as:)]TJ/F78 9.9626 Tf 117.806 -18.736 Td [(a)-25(m)-40(a)-42(x)]TJ/F195 10.3811 Tf 25.761 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(max)]TJ/F78 7.5716 Tf 8.354 -7.21 Td [(i)]TJ/F195 10.3811 Tf 12.35 7.21 Td [(j)]TJ/F78 9.9626 Tf 3.297 0 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(j)]TJ/F84 9.9626 Tf -206.02 -23.313 Td [(else)-250(if)]TJ/F78 9.9626 Tf 28.159 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(complex)-250(vector)-250(then)-250(it)-250(computes)-250(the)-250(in\002nity-norm)-250(as:)]TJ/F78 9.9626 Tf 63.42 -18.737 Td [(a)-25(m)-40(a)-42(x)]TJ/F195 10.3811 Tf 25.761 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(max)]TJ/F78 7.5716 Tf 8.354 -7.21 Td [(i)]TJ/F197 10.3811 Tf 12.35 7.21 Td [(\050)]TJ/F195 10.3811 Tf 4.274 0 Td [(j)]TJ/F78 9.9626 Tf 3.029 0 Td [(r)-17(e)]TJ/F197 10.3811 Tf 8.169 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F197 10.3811 Tf 2.875 1.96 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(j)]TJ/F197 10.3811 Tf 5.065 0 Td [(+)]TJ/F195 10.3811 Tf 10.256 0 Td [(j)]TJ/F78 9.9626 Tf 3.059 0 Td [(i)-32(m)]TJ/F197 10.3811 Tf 11.088 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F197 10.3811 Tf 2.875 1.96 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(j)]TJ/F197 10.3811 Tf 3.128 0 Td [(\051)]TJ/F147 9.9626 Tf -225.617 -22.974 Td [(psb_geamax\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(desc_a,)]TJ @@ -11015,28 +11024,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 362.308 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 362.308 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 362.308 Tm [(psb)]TJ ET q 1 0 0 1 385.864 362.508 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 362.308 Td [(T)]TJ +/F147 9.9626 Tf 389.002 362.308 Td [(T)]TJ ET q 1 0 0 1 394.86 362.508 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 362.308 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 362.308 Td [(vect)]TJ ET q 1 0 0 1 419.547 362.508 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 362.308 Td [(type)]TJ +/F147 9.9626 Tf 422.685 362.308 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.883 -11.955 Td [(containing)-250(numbers)-250(of)-250(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -11055,27 +11064,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 273.363 284.079 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 276.501 283.88 Td [(desc)]TJ +/F147 9.9626 Tf 276.501 283.88 Td [(desc)]TJ ET q 1 0 0 1 298.05 284.079 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 301.189 283.88 Td [(type)]TJ +/F147 9.9626 Tf 301.189 283.88 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -222.215 -18.653 Td [(global)]TJ 0 g 0 G -/F84 9.9626 Tf 0.994 0 0 1 133.659 265.227 Tm [(Speci\002es)-250(whether)-249(the)-250(computation)-250(should)-250(include)-249(the)-250(global)-250(r)18(eduction)]TJ 1 0 0 1 124.802 253.272 Tm [(acr)18(oss)-250(all)-250(pr)18(ocesses.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(scalar)74(.)-310(Default:)]TJ/F145 9.9626 Tf 165.318 0 Td [(global)]TJ +/F84 9.9626 Tf 0.994 0 0 1 133.659 265.227 Tm [(Speci\002es)-250(whether)-249(the)-250(computation)-250(should)-250(include)-249(the)-250(global)-250(r)18(eduction)]TJ 1 0 0 1 124.802 253.272 Tm [(acr)18(oss)-250(all)-250(pr)18(ocesses.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(scalar)74(.)-310(Default:)]TJ/F147 9.9626 Tf 165.318 0 Td [(global)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -11086,7 +11095,7 @@ BT 0 g 0 G 0 -18.653 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.777 0 Td [(is)-250(the)-250(in\002nity)-250(norm)-250(of)-250(vector)]TJ/F78 9.9626 Tf 128.561 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ 0.98 0 0 1 124.802 144.236 Tm [(Scope:)]TJ/F75 9.9626 Tf 0.98 0 0 1 155.612 144.236 Tm [(global)]TJ/F84 9.9626 Tf 0.98 0 0 1 186.2 144.236 Tm [(unless)-244(the)-244(optional)-244(variab)1(le)]TJ/F145 9.9626 Tf 1 0 0 1 307.484 144.236 Tm [(global)]TJ +/F84 9.9626 Tf 72.777 0 Td [(is)-250(the)-250(in\002nity)-250(norm)-250(of)-250(vector)]TJ/F78 9.9626 Tf 128.561 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ 0.98 0 0 1 124.802 144.236 Tm [(Scope:)]TJ/F75 9.9626 Tf 0.98 0 0 1 155.612 144.236 Tm [(global)]TJ/F84 9.9626 Tf 0.98 0 0 1 186.2 144.236 Tm [(unless)-244(the)-244(optional)-244(variab)1(le)]TJ/F147 9.9626 Tf 1 0 0 1 307.484 144.236 Tm [(global)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -11098,7 +11107,7 @@ ET endstream endobj -1208 0 obj +1209 0 obj << /Length 3132 >> @@ -11116,7 +11125,7 @@ BT 0.98 0 0 1 175.303 616.465 Tm [(The)-201(computation)-200(of)-201(a)-200(global)-201(r)18(esult)-200(r)18(equir)19(es)-201(a)-201(global)-200(communication,)-212(which)]TJ 1.02 0 0 1 175.611 604.51 Tm [(entails)-265(a)-265(signi\002cant)-264(over)17(head.)-363(It)-265(may)-265(be)-264(necessary)-265(and/or)-265(advisable)-265(to)]TJ 1.02 0 0 1 175.611 592.555 Tm [(compute)-287(multiple)-287(norms)-287(at)-287(the)-287(same)-287(time;)-308(in)-287(thi)1(s)-287(case,)-298(it)-287(is)-287(possible)-287(to)]TJ 1 0 0 1 175.611 580.6 Tm [(impr)18(ove)-250(the)-250(r)8(untime)-250(ef)18(\002ciency)-250(by)-250(using)-250(the)-250(following)-250(scheme:)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G -/F145 9.9626 Tf 52.304 -19.926 Td [(vres\050)]TJ +/F147 9.9626 Tf 52.304 -19.926 Td [(vres\050)]TJ 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG [(1)]TJ 0 g 0 G @@ -11192,7 +11201,7 @@ ET endstream endobj -1216 0 obj +1217 0 obj << /Length 6488 >> @@ -11207,11 +11216,11 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 151.016 706.129 Td [(geamaxs)-250(\227)-250(Generalized)-250(In\002nity)-250(Norm)]TJ/F84 9.9626 Tf 1.003 0 0 1 99.587 687.165 Tm [(This)-250(subr)18(outine)-250(computes)-250(a)-251(seri)1(es)-251(of)-250(in\002nity)-250(norms)-250(on)-250(the)-250(columns)-250(of)-251(a)-250(dense)]TJ 1 0 0 1 99.895 675.21 Tm [(matrix)]TJ/F78 9.9626 Tf 31.786 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(:)]TJ/F78 9.9626 Tf 88.54 -11.955 Td [(r)-17(e)-25(s)]TJ/F192 10.3811 Tf 12.293 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.041 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(max)]TJ/F78 7.5716 Tf 7.76 -7.336 Td [(k)]TJ/F190 10.3811 Tf 12.944 7.336 Td [(j)]TJ/F78 9.9626 Tf 3.298 0 Td [(x)]TJ/F192 10.3811 Tf 5.329 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(k)]TJ/F84 9.9626 Tf 4.598 0 Td [(,)]TJ/F78 9.9626 Tf 4.206 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(j)]TJ +/F75 11.9552 Tf 151.016 706.129 Td [(geamaxs)-250(\227)-250(Generalized)-250(In\002nity)-250(Norm)]TJ/F84 9.9626 Tf 1.003 0 0 1 99.587 687.165 Tm [(This)-250(subr)18(outine)-250(computes)-250(a)-251(seri)1(es)-251(of)-250(in\002nity)-250(norms)-250(on)-250(the)-250(columns)-250(of)-251(a)-250(dense)]TJ 1 0 0 1 99.895 675.21 Tm [(matrix)]TJ/F78 9.9626 Tf 31.786 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(:)]TJ/F78 9.9626 Tf 88.54 -11.955 Td [(r)-17(e)-25(s)]TJ/F197 10.3811 Tf 12.293 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.041 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(max)]TJ/F78 7.5716 Tf 7.76 -7.336 Td [(k)]TJ/F195 10.3811 Tf 12.944 7.336 Td [(j)]TJ/F78 9.9626 Tf 3.298 0 Td [(x)]TJ/F197 10.3811 Tf 5.329 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(k)]TJ/F84 9.9626 Tf 4.598 0 Td [(,)]TJ/F78 9.9626 Tf 4.206 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(j)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -195.027 -22.296 Td [(call)]TJ +/F147 9.9626 Tf -195.027 -22.296 Td [(call)]TJ 0 g 0 G [-525(psb_geamaxs\050res,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -11290,28 +11299,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 415.5 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 415.5 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 415.5 Tm [(psb)]TJ ET q 1 0 0 1 385.864 415.699 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 415.5 Td [(T)]TJ +/F147 9.9626 Tf 389.002 415.5 Td [(T)]TJ ET q 1 0 0 1 394.86 415.699 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 415.5 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 415.5 Td [(vect)]TJ ET q 1 0 0 1 419.547 415.699 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 415.5 Td [(type)]TJ +/F147 9.9626 Tf 422.685 415.5 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.883 -11.956 Td [(containing)-250(numbers)-250(of)-250(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -11330,21 +11339,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 273.363 335.998 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 276.501 335.798 Td [(desc)]TJ +/F147 9.9626 Tf 276.501 335.798 Td [(desc)]TJ ET q 1 0 0 1 298.05 335.998 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 301.189 335.798 Td [(type)]TJ +/F147 9.9626 Tf 301.189 335.798 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -11365,7 +11374,7 @@ ET endstream endobj -1224 0 obj +1225 0 obj << /Length 7573 >> @@ -11380,7 +11389,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 201.825 706.129 Td [(norm1)-250(\227)-250(1-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf -51.429 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(1-norm)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 206.349 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -211.245 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.459 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(r)18(eal)-250(vector)-250(it)-250(computes)-250(1-norm)-250(as:)]TJ/F78 9.9626 Tf 125.989 -21.269 Td [(a)-25(s)-25(u)-25(m)]TJ/F190 10.3811 Tf 25.353 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.006 0 Td [(x)]TJ/F78 7.5716 Tf 5.147 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.876 1.96 Td [(k)]TJ/F84 9.9626 Tf -195.526 -21.269 Td [(else)-250(if)]TJ/F78 9.9626 Tf 28.159 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(complex)-250(vector)-250(then)-250(it)-250(computes)-250(1-norm)-250(as:)]TJ/F78 9.9626 Tf 71.974 -21.269 Td [(a)-25(s)-25(u)-25(m)]TJ/F190 10.3811 Tf 25.353 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 18.737 0 Td [(r)-17(e)]TJ/F192 10.3811 Tf 8.169 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ/F192 10.3811 Tf 6.346 1.858 Td [(+)]TJ/F190 10.3811 Tf 10.256 0 Td [(k)]TJ/F78 9.9626 Tf 5.369 0 Td [(i)-32(m)]TJ/F192 10.3811 Tf 11.089 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ/F145 9.9626 Tf -216.928 -19.411 Td [(psb_geasum\050x,)]TJ +/F75 11.9552 Tf 201.825 706.129 Td [(norm1)-250(\227)-250(1-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf -51.429 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(1-norm)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 206.349 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -211.245 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.459 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(r)18(eal)-250(vector)-250(it)-250(computes)-250(1-norm)-250(as:)]TJ/F78 9.9626 Tf 125.989 -21.269 Td [(a)-25(s)-25(u)-25(m)]TJ/F195 10.3811 Tf 25.353 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.006 0 Td [(x)]TJ/F78 7.5716 Tf 5.147 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.876 1.96 Td [(k)]TJ/F84 9.9626 Tf -195.526 -21.269 Td [(else)-250(if)]TJ/F78 9.9626 Tf 28.159 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(complex)-250(vector)-250(then)-250(it)-250(computes)-250(1-norm)-250(as:)]TJ/F78 9.9626 Tf 71.974 -21.269 Td [(a)-25(s)-25(u)-25(m)]TJ/F195 10.3811 Tf 25.353 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 18.737 0 Td [(r)-17(e)]TJ/F197 10.3811 Tf 8.169 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ/F197 10.3811 Tf 6.346 1.858 Td [(+)]TJ/F195 10.3811 Tf 10.256 0 Td [(k)]TJ/F78 9.9626 Tf 5.369 0 Td [(i)-32(m)]TJ/F197 10.3811 Tf 11.089 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ/F147 9.9626 Tf -216.928 -19.411 Td [(psb_geasum\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(desc_a,)]TJ @@ -11466,28 +11475,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 175.611 366.361 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 366.361 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 366.361 Tm [(psb)]TJ ET q 1 0 0 1 436.673 366.56 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 366.361 Td [(T)]TJ +/F147 9.9626 Tf 439.811 366.361 Td [(T)]TJ ET q 1 0 0 1 445.669 366.56 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 366.361 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 366.361 Td [(vect)]TJ ET q 1 0 0 1 470.356 366.56 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 366.361 Td [(type)]TJ +/F147 9.9626 Tf 473.495 366.361 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.884 -11.955 Td [(containing)-250(numbers)-250(of)-250(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -11506,27 +11515,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 287.119 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 286.919 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 286.919 Td [(desc)]TJ ET q 1 0 0 1 348.86 287.119 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 286.919 Td [(type)]TJ +/F147 9.9626 Tf 351.998 286.919 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -222.214 -19.665 Td [(global)]TJ 0 g 0 G -/F84 9.9626 Tf 0.994 0 0 1 184.468 267.254 Tm [(Speci\002es)-250(whether)-250(t)1(he)-250(computation)-250(should)-250(include)-250(the)-249(global)-250(r)18(eduction)]TJ 1 0 0 1 175.611 255.299 Tm [(acr)18(oss)-250(all)-250(pr)18(ocesses.)]TJ 0 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(scalar)74(.)-310(Default:)]TJ/F145 9.9626 Tf 165.319 0 Td [(global)]TJ +/F84 9.9626 Tf 0.994 0 0 1 184.468 267.254 Tm [(Speci\002es)-250(whether)-250(t)1(he)-250(computation)-250(should)-250(include)-250(the)-249(global)-250(r)18(eduction)]TJ 1 0 0 1 175.611 255.299 Tm [(acr)18(oss)-250(all)-250(pr)18(ocesses.)]TJ 0 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(scalar)74(.)-310(Default:)]TJ/F147 9.9626 Tf 165.319 0 Td [(global)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -11537,7 +11546,7 @@ BT 0 g 0 G 0 -19.666 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.776 0 Td [(is)-250(the)-250(1-norm)-250(of)-250(vector)]TJ/F78 9.9626 Tf 102.161 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ 0.98 0 0 1 175.611 144.236 Tm [(Scope:)]TJ/F75 9.9626 Tf 0.98 0 0 1 206.422 144.236 Tm [(global)]TJ/F84 9.9626 Tf 0.98 0 0 1 237.009 144.236 Tm [(unless)-244(the)-244(optional)-244(variable)]TJ/F145 9.9626 Tf 1 0 0 1 358.293 144.236 Tm [(global)]TJ +/F84 9.9626 Tf 72.776 0 Td [(is)-250(the)-250(1-norm)-250(of)-250(vector)]TJ/F78 9.9626 Tf 102.161 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ 0.98 0 0 1 175.611 144.236 Tm [(Scope:)]TJ/F75 9.9626 Tf 0.98 0 0 1 206.422 144.236 Tm [(global)]TJ/F84 9.9626 Tf 0.98 0 0 1 237.009 144.236 Tm [(unless)-244(the)-244(optional)-244(variable)]TJ/F147 9.9626 Tf 1 0 0 1 358.293 144.236 Tm [(global)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -11549,7 +11558,7 @@ ET endstream endobj -1229 0 obj +1230 0 obj << /Length 3138 >> @@ -11567,7 +11576,7 @@ BT 0.98 0 0 1 124.493 616.465 Tm [(The)-201(computation)-200(of)-201(a)-200(global)-201(r)18(esult)-200(r)18(equir)18(es)-200(a)-201(global)-200(communication,)-212(which)]TJ 1.02 0 0 1 124.802 604.51 Tm [(entails)-265(a)-265(signi\002cant)-264(over)17(head.)-363(It)-265(may)-264(be)-265(necessary)-265(and/or)-265(advisable)-265(to)]TJ 1.02 0 0 1 124.802 592.555 Tm [(compute)-287(multiple)-287(norms)-287(at)-287(the)-287(same)-287(time;)-308(in)-286(this)-287(case,)-298(it)-287(is)-287(possible)-287(to)]TJ 1 0 0 1 124.802 580.6 Tm [(impr)18(ove)-250(the)-250(r)8(untime)-250(ef)18(\002ciency)-250(by)-250(using)-250(the)-250(following)-250(scheme:)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G -/F145 9.9626 Tf 20.921 -19.926 Td [(vres\050)]TJ +/F147 9.9626 Tf 20.921 -19.926 Td [(vres\050)]TJ 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG [(1)]TJ 0 g 0 G @@ -11643,7 +11652,7 @@ ET endstream endobj -1237 0 obj +1238 0 obj << /Length 7611 >> @@ -11658,11 +11667,11 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 201.825 706.129 Td [(geasums)-250(\227)-250(Generalized)-250(1-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf 0.988 0 0 1 150.396 685.937 Tm [(This)-253(subr)18(outine)-253(computes)-253(a)-253(series)-253(of)-253(1-norms)-253(on)-253(the)-254(co)1(lumns)-254(of)-253(a)-253(dense)-253(matrix)]TJ/F78 9.9626 Tf 1 0 0 1 150.999 673.982 Tm [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(:)]TJ/F78 9.9626 Tf 120.031 -13.856 Td [(r)-17(e)-25(s)]TJ/F192 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.042 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(max)]TJ/F78 7.5716 Tf 7.759 -7.335 Td [(k)]TJ/F190 10.3811 Tf 12.944 7.335 Td [(j)]TJ/F78 9.9626 Tf 3.298 0 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(k)]TJ/F84 9.9626 Tf 4.598 0 Td [(,)]TJ/F78 9.9626 Tf 4.206 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(j)]TJ/F84 9.9626 Tf -215.511 -24.535 Td [(This)-250(function)-250(computes)-250(the)-250(1-norm)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 206.349 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -211.245 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.459 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(r)18(eal)-250(vector)-250(it)-250(computes)-250(1-norm)-250(as:)]TJ/F78 9.9626 Tf 125.227 -23.185 Td [(r)-17(e)-25(s)]TJ/F192 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.042 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.006 0 Td [(x)]TJ/F78 7.5716 Tf 5.147 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.876 1.96 Td [(k)]TJ/F84 9.9626 Tf -196.039 -23.185 Td [(else)-250(if)]TJ/F78 9.9626 Tf 28.159 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(complex)-250(vector)-250(then)-250(it)-250(computes)-250(1-norm)-250(as:)]TJ/F78 9.9626 Tf 71.212 -23.185 Td [(r)-17(e)-25(s)]TJ/F192 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.041 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 18.738 0 Td [(r)-17(e)]TJ/F192 10.3811 Tf 8.169 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ/F192 10.3811 Tf 6.346 1.858 Td [(+)]TJ/F190 10.3811 Tf 10.256 0 Td [(k)]TJ/F78 9.9626 Tf 5.369 0 Td [(i)-32(m)]TJ/F192 10.3811 Tf 11.089 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ +/F75 11.9552 Tf 201.825 706.129 Td [(geasums)-250(\227)-250(Generalized)-250(1-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf 0.988 0 0 1 150.396 685.937 Tm [(This)-253(subr)18(outine)-253(computes)-253(a)-253(series)-253(of)-253(1-norms)-253(on)-253(the)-254(co)1(lumns)-254(of)-253(a)-253(dense)-253(matrix)]TJ/F78 9.9626 Tf 1 0 0 1 150.999 673.982 Tm [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(:)]TJ/F78 9.9626 Tf 120.031 -13.856 Td [(r)-17(e)-25(s)]TJ/F197 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.042 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(max)]TJ/F78 7.5716 Tf 7.759 -7.335 Td [(k)]TJ/F195 10.3811 Tf 12.944 7.335 Td [(j)]TJ/F78 9.9626 Tf 3.298 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(k)]TJ/F84 9.9626 Tf 4.598 0 Td [(,)]TJ/F78 9.9626 Tf 4.206 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(j)]TJ/F84 9.9626 Tf -215.511 -24.535 Td [(This)-250(function)-250(computes)-250(the)-250(1-norm)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 206.349 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -211.245 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.459 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(r)18(eal)-250(vector)-250(it)-250(computes)-250(1-norm)-250(as:)]TJ/F78 9.9626 Tf 125.227 -23.185 Td [(r)-17(e)-25(s)]TJ/F197 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.042 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.006 0 Td [(x)]TJ/F78 7.5716 Tf 5.147 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.876 1.96 Td [(k)]TJ/F84 9.9626 Tf -196.039 -23.185 Td [(else)-250(if)]TJ/F78 9.9626 Tf 28.159 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(complex)-250(vector)-250(then)-250(it)-250(computes)-250(1-norm)-250(as:)]TJ/F78 9.9626 Tf 71.212 -23.185 Td [(r)-17(e)-25(s)]TJ/F197 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.041 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 18.738 0 Td [(r)-17(e)]TJ/F197 10.3811 Tf 8.169 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ/F197 10.3811 Tf 6.346 1.858 Td [(+)]TJ/F195 10.3811 Tf 10.256 0 Td [(k)]TJ/F78 9.9626 Tf 5.369 0 Td [(i)-32(m)]TJ/F197 10.3811 Tf 11.089 0 Td [(\050)]TJ/F78 9.9626 Tf 4.443 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -212.211 -21.96 Td [(call)]TJ +/F147 9.9626 Tf -212.211 -21.96 Td [(call)]TJ 0 g 0 G [-525(psb_geasums\050res,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -11741,28 +11750,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 175.611 295.3 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 295.3 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 295.3 Tm [(psb)]TJ ET q 1 0 0 1 436.673 295.5 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 295.3 Td [(T)]TJ +/F147 9.9626 Tf 439.811 295.3 Td [(T)]TJ ET q 1 0 0 1 445.669 295.5 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 295.3 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 295.3 Td [(vect)]TJ ET q 1 0 0 1 470.356 295.5 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 295.3 Td [(type)]TJ +/F147 9.9626 Tf 473.495 295.3 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.884 -11.955 Td [(containing)-250(numbers)-250(of)-250(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -11781,21 +11790,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 213.264 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 213.065 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 213.065 Td [(desc)]TJ ET q 1 0 0 1 348.86 213.264 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 213.065 Td [(type)]TJ +/F147 9.9626 Tf 351.998 213.065 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -11812,7 +11821,7 @@ ET endstream endobj -1242 0 obj +1243 0 obj << /Length 582 >> @@ -11831,7 +11840,7 @@ ET endstream endobj -1250 0 obj +1251 0 obj << /Length 6755 >> @@ -11846,14 +11855,14 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 201.825 706.129 Td [(norm2)-250(\227)-250(2-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf -51.429 -20.076 Td [(This)-250(function)-250(computes)-250(the)-250(2-norm)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 206.349 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -211.245 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.459 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(r)18(eal)-250(vector)-250(it)-250(computes)-250(2-norm)-250(as:)]TJ/F78 9.9626 Tf 122.551 -25.46 Td [(n)-15(r)-35(m)]TJ/F84 9.9626 Tf 17.788 0 Td [(2)]TJ/F190 10.3811 Tf 7.873 0 Td [(\040)]TJ 13.398 9.727 Td [(p)]TJ +/F75 11.9552 Tf 201.825 706.129 Td [(norm2)-250(\227)-250(2-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf -51.429 -20.076 Td [(This)-250(function)-250(computes)-250(the)-250(2-norm)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 206.349 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -211.245 -11.955 Td [(If)]TJ/F78 9.9626 Tf 9.459 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(r)18(eal)-250(vector)-250(it)-250(computes)-250(2-norm)-250(as:)]TJ/F78 9.9626 Tf 122.551 -25.46 Td [(n)-15(r)-35(m)]TJ/F84 9.9626 Tf 17.788 0 Td [(2)]TJ/F195 10.3811 Tf 7.873 0 Td [(\040)]TJ 13.398 9.727 Td [(p)]TJ ET q 1 0 0 1 338.242 658.569 cm []0 d 0 J 0.408 w 0 0 m 16.592 0 l S Q BT -/F78 9.9626 Tf 338.536 648.638 Td [(x)]TJ/F78 7.5716 Tf 5.398 2.88 Td [(T)]TJ/F78 9.9626 Tf 5.695 -2.88 Td [(x)]TJ/F84 9.9626 Tf -198.924 -23.065 Td [(else)-250(if)]TJ/F78 9.9626 Tf 28.159 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(complex)-250(vector)-250(then)-250(it)-250(computes)-250(2-norm)-250(as:)]TJ/F78 9.9626 Tf 103.113 -25.46 Td [(n)-15(r)-35(m)]TJ/F84 9.9626 Tf 17.788 0 Td [(2)]TJ/F190 10.3811 Tf 7.873 0 Td [(\040)]TJ 13.398 9.727 Td [(p)]TJ +/F78 9.9626 Tf 338.536 648.638 Td [(x)]TJ/F78 7.5716 Tf 5.398 2.88 Td [(T)]TJ/F78 9.9626 Tf 5.695 -2.88 Td [(x)]TJ/F84 9.9626 Tf -198.924 -23.065 Td [(else)-250(if)]TJ/F78 9.9626 Tf 28.159 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(a)-250(complex)-250(vector)-250(then)-250(it)-250(computes)-250(2-norm)-250(as:)]TJ/F78 9.9626 Tf 103.113 -25.46 Td [(n)-15(r)-35(m)]TJ/F84 9.9626 Tf 17.788 0 Td [(2)]TJ/F195 10.3811 Tf 7.873 0 Td [(\040)]TJ 13.398 9.727 Td [(p)]TJ ET q 1 0 0 1 337.504 610.044 cm @@ -11916,7 +11925,7 @@ BT /F84 9.9626 Tf 280.768 486.513 Td [(T)92(able)-250(8:)-310(Data)-250(types)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -115.119 -27.631 Td [(psb_genrm2\050x,)]TJ +/F147 9.9626 Tf -115.119 -27.631 Td [(psb_genrm2\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(desc_a,)]TJ @@ -11947,28 +11956,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 175.611 318.495 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 318.495 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 318.495 Tm [(psb)]TJ ET q 1 0 0 1 436.673 318.695 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 318.495 Td [(T)]TJ +/F147 9.9626 Tf 439.811 318.495 Td [(T)]TJ ET q 1 0 0 1 445.669 318.695 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 318.495 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 318.495 Td [(vect)]TJ ET q 1 0 0 1 470.356 318.695 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 318.495 Td [(type)]TJ +/F147 9.9626 Tf 473.495 318.495 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.884 -11.955 Td [(containing)-250(numbers)-250(of)-250(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -11987,27 +11996,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 236.698 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 236.499 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 236.499 Td [(desc)]TJ ET q 1 0 0 1 348.86 236.698 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 236.499 Td [(type)]TJ +/F147 9.9626 Tf 351.998 236.499 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -222.214 -22.221 Td [(global)]TJ 0 g 0 G -/F84 9.9626 Tf 0.994 0 0 1 184.468 214.278 Tm [(Speci\002es)-250(whether)-250(t)1(he)-250(computation)-250(should)-250(include)-250(the)-249(global)-250(r)18(eduction)]TJ 1 0 0 1 175.611 202.322 Tm [(acr)18(oss)-250(all)-250(pr)18(ocesses.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(scalar)74(.)-310(Default:)]TJ/F145 9.9626 Tf 165.319 0 Td [(global)]TJ +/F84 9.9626 Tf 0.994 0 0 1 184.468 214.278 Tm [(Speci\002es)-250(whether)-250(t)1(he)-250(computation)-250(should)-250(include)-250(the)-249(global)-250(r)18(eduction)]TJ 1 0 0 1 175.611 202.322 Tm [(acr)18(oss)-250(all)-250(pr)18(ocesses.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(scalar)74(.)-310(Default:)]TJ/F147 9.9626 Tf 165.319 0 Td [(global)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -12022,7 +12031,7 @@ ET endstream endobj -1255 0 obj +1256 0 obj << /Length 4510 >> @@ -12033,7 +12042,7 @@ stream BT /F75 9.9626 Tf 99.895 706.129 Td [(Function)-250(V)111(alue)]TJ 0 g 0 G -/F84 9.9626 Tf 73.883 0 Td [(is)-250(the)-250(2-norm)-250(of)-250(vector)]TJ/F78 9.9626 Tf 102.161 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ 0.98 0 0 1 124.802 694.174 Tm [(Scope:)]TJ/F75 9.9626 Tf 0.98 0 0 1 155.612 694.174 Tm [(global)]TJ/F84 9.9626 Tf 0.98 0 0 1 186.2 694.174 Tm [(unless)-244(the)-244(optional)-244(variab)1(le)]TJ/F145 9.9626 Tf 1 0 0 1 307.484 694.174 Tm [(global)]TJ +/F84 9.9626 Tf 73.883 0 Td [(is)-250(the)-250(2-norm)-250(of)-250(vector)]TJ/F78 9.9626 Tf 102.161 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ 0.98 0 0 1 124.802 694.174 Tm [(Scope:)]TJ/F75 9.9626 Tf 0.98 0 0 1 155.612 694.174 Tm [(global)]TJ/F84 9.9626 Tf 0.98 0 0 1 186.2 694.174 Tm [(unless)-244(the)-244(optional)-244(variab)1(le)]TJ/F147 9.9626 Tf 1 0 0 1 307.484 694.174 Tm [(global)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -12105,7 +12114,7 @@ ET endstream endobj -1268 0 obj +1269 0 obj << /Length 6311 >> @@ -12120,11 +12129,11 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 201.825 706.129 Td [(genrm2s)-250(\227)-250(Generalized)-250(2-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf 0.988 0 0 1 150.396 687.165 Tm [(This)-253(subr)18(outine)-253(computes)-253(a)-253(series)-253(of)-253(2-norms)-253(on)-253(the)-254(co)1(lumns)-254(of)-253(a)-253(dense)-253(matrix)]TJ/F78 9.9626 Tf 1 0 0 1 150.999 675.21 Tm [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(:)]TJ/F78 9.9626 Tf 126.859 -11.955 Td [(r)-17(e)-25(s)]TJ/F192 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.041 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.007 0 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)-12(,)]TJ/F78 9.9626 Tf 6.821 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ +/F75 11.9552 Tf 201.825 706.129 Td [(genrm2s)-250(\227)-250(Generalized)-250(2-Norm)-250(of)-250(V)111(ector)]TJ/F84 9.9626 Tf 0.988 0 0 1 150.396 687.165 Tm [(This)-253(subr)18(outine)-253(computes)-253(a)-253(series)-253(of)-253(2-norms)-253(on)-253(the)-254(co)1(lumns)-254(of)-253(a)-253(dense)-253(matrix)]TJ/F78 9.9626 Tf 1 0 0 1 150.999 675.21 Tm [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(:)]TJ/F78 9.9626 Tf 126.859 -11.955 Td [(r)-17(e)-25(s)]TJ/F197 10.3811 Tf 12.294 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.041 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.007 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)-12(,)]TJ/F78 9.9626 Tf 6.821 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 4.274 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -186.92 -16.189 Td [(call)]TJ +/F147 9.9626 Tf -186.92 -16.189 Td [(call)]TJ 0 g 0 G [-525(psb_genrm2s\050res,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -12203,28 +12212,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 175.611 419.863 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 419.863 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 419.863 Tm [(psb)]TJ ET q 1 0 0 1 436.673 420.062 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 419.863 Td [(T)]TJ +/F147 9.9626 Tf 439.811 419.863 Td [(T)]TJ ET q 1 0 0 1 445.669 420.062 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 419.863 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 419.863 Td [(vect)]TJ ET q 1 0 0 1 470.356 420.062 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 419.863 Td [(type)]TJ +/F147 9.9626 Tf 473.495 419.863 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.884 -11.956 Td [(containing)-250(numbers)-250(of)-250(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -12243,21 +12252,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 340.361 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 340.161 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 340.161 Td [(desc)]TJ ET q 1 0 0 1 348.86 340.361 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 340.161 Td [(type)]TJ +/F147 9.9626 Tf 351.998 340.161 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -12278,7 +12287,7 @@ ET endstream endobj -1165 0 obj +1166 0 obj << /Type /ObjStm /N 100 @@ -12286,17 +12295,17 @@ endobj /Length 11584 >> stream -1160 0 1164 146 1161 205 1172 313 1166 488 1167 629 1168 775 1169 919 1170 1064 1174 1211 -232 1269 1175 1326 1171 1384 1178 1506 1176 1645 1180 1791 1181 1850 1177 1909 1189 2017 1182 2201 -1183 2345 1184 2491 1185 2635 1186 2780 1187 2927 1191 3070 236 3128 1192 3185 1188 3242 1194 3378 -1196 3496 1193 3555 1201 3636 1197 3793 1198 3937 1199 4083 1203 4230 240 4288 1204 4345 1200 4403 -1207 4539 1209 4657 1210 4716 1206 4774 1215 4869 1211 5026 1212 5170 1213 5316 1217 5463 244 5521 -1218 5578 1214 5636 1223 5772 1219 5929 1220 6073 1221 6216 1225 6363 248 6422 1226 6480 1222 6538 -1228 6674 1230 6792 1231 6850 1227 6907 1236 7002 1232 7159 1233 7303 1234 7449 1238 7596 252 7655 -1239 7713 1235 7772 1241 7908 1243 8026 1240 8084 1249 8165 1245 8322 1246 8465 1247 8611 1251 8758 -256 8817 1252 8875 1248 8933 1254 9055 1256 9173 1257 9231 1258 9289 1259 9347 1260 9406 1261 9465 -1262 9524 1253 9583 1267 9691 1263 9848 1264 9992 1265 10138 1269 10285 260 10344 1270 10402 1266 10461 -% 1160 0 obj +1161 0 1165 146 1162 205 1173 313 1167 488 1168 629 1169 775 1170 919 1171 1064 1175 1211 +232 1269 1176 1326 1172 1384 1179 1506 1177 1645 1181 1791 1182 1850 1178 1909 1190 2017 1183 2201 +1184 2345 1185 2491 1186 2635 1187 2780 1188 2927 1192 3070 236 3128 1193 3185 1189 3242 1195 3378 +1197 3496 1194 3555 1202 3636 1198 3793 1199 3937 1200 4083 1204 4230 240 4288 1205 4345 1201 4403 +1208 4539 1210 4657 1211 4716 1207 4774 1216 4869 1212 5026 1213 5170 1214 5316 1218 5463 244 5521 +1219 5578 1215 5636 1224 5772 1220 5929 1221 6073 1222 6216 1226 6363 248 6422 1227 6480 1223 6538 +1229 6674 1231 6792 1232 6850 1228 6907 1237 7002 1233 7159 1234 7303 1235 7449 1239 7596 252 7655 +1240 7713 1236 7772 1242 7908 1244 8026 1241 8084 1250 8165 1246 8322 1247 8465 1248 8611 1252 8758 +256 8817 1253 8875 1249 8933 1255 9055 1257 9173 1258 9231 1259 9289 1260 9347 1261 9406 1262 9465 +1263 9524 1254 9583 1268 9691 1264 9848 1265 9992 1266 10138 1270 10285 260 10344 1271 10402 1267 10461 +% 1161 0 obj << /Type /Annot /Subtype /Link @@ -12304,25 +12313,25 @@ stream /Rect [395.773 588.749 402.747 600.809] /A << /S /GoTo /D (table.1) >> >> -% 1164 0 obj +% 1165 0 obj << -/D [1162 0 R /XYZ 149.705 753.953 null] +/D [1163 0 R /XYZ 149.705 753.953 null] >> -% 1161 0 obj +% 1162 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F78 686 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1172 0 obj +% 1173 0 obj << /Type /Page -/Contents 1173 0 R -/Resources 1171 0 R +/Contents 1174 0 R +/Resources 1172 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1158 0 R -/Annots [ 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R ] +/Parent 1159 0 R +/Annots [ 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R ] >> -% 1166 0 obj +% 1167 0 obj << /Type /Annot /Subtype /Link @@ -12330,7 +12339,7 @@ stream /Rect [368.549 355.7 444.603 367.76] /A << /S /GoTo /D (vdata) >> >> -% 1167 0 obj +% 1168 0 obj << /Type /Annot /Subtype /Link @@ -12338,7 +12347,7 @@ stream /Rect [332.133 343.745 339.206 355.804] /A << /S /GoTo /D (table.2) >> >> -% 1168 0 obj +% 1169 0 obj << /Type /Annot /Subtype /Link @@ -12346,7 +12355,7 @@ stream /Rect [368.549 264.018 444.603 276.078] /A << /S /GoTo /D (vdata) >> >> -% 1169 0 obj +% 1170 0 obj << /Type /Annot /Subtype /Link @@ -12354,7 +12363,7 @@ stream /Rect [322.336 252.063 329.21 264.123] /A << /S /GoTo /D (table.2) >> >> -% 1170 0 obj +% 1171 0 obj << /Type /Annot /Subtype /Link @@ -12362,33 +12371,33 @@ stream /Rect [256.048 172.336 323.106 184.396] /A << /S /GoTo /D (descdata) >> >> -% 1174 0 obj +% 1175 0 obj << -/D [1172 0 R /XYZ 98.895 753.953 null] +/D [1173 0 R /XYZ 98.895 753.953 null] >> % 232 0 obj << -/D [1172 0 R /XYZ 99.895 716.092 null] +/D [1173 0 R /XYZ 99.895 716.092 null] >> -% 1175 0 obj +% 1176 0 obj << -/D [1172 0 R /XYZ 99.895 499.951 null] +/D [1173 0 R /XYZ 99.895 499.951 null] >> -% 1171 0 obj +% 1172 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1178 0 obj +% 1179 0 obj << /Type /Page -/Contents 1179 0 R -/Resources 1177 0 R +/Contents 1180 0 R +/Resources 1178 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1158 0 R -/Annots [ 1176 0 R ] +/Parent 1159 0 R +/Annots [ 1177 0 R ] >> -% 1176 0 obj +% 1177 0 obj << /Type /Annot /Subtype /Link @@ -12396,29 +12405,29 @@ stream /Rect [428.968 602.697 435.942 614.756] /A << /S /GoTo /D (table.2) >> >> -% 1180 0 obj +% 1181 0 obj << -/D [1178 0 R /XYZ 149.705 753.953 null] +/D [1179 0 R /XYZ 149.705 753.953 null] >> -% 1181 0 obj +% 1182 0 obj << -/D [1178 0 R /XYZ 150.705 512.639 null] +/D [1179 0 R /XYZ 150.705 512.639 null] >> -% 1177 0 obj +% 1178 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F78 686 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1189 0 obj +% 1190 0 obj << /Type /Page -/Contents 1190 0 R -/Resources 1188 0 R +/Contents 1191 0 R +/Resources 1189 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1158 0 R -/Annots [ 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R ] +/Parent 1159 0 R +/Annots [ 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R ] >> -% 1182 0 obj +% 1183 0 obj << /Type /Annot /Subtype /Link @@ -12426,7 +12435,7 @@ stream /Rect [368.549 384.684 444.603 396.744] /A << /S /GoTo /D (vdata) >> >> -% 1183 0 obj +% 1184 0 obj << /Type /Annot /Subtype /Link @@ -12434,7 +12443,7 @@ stream /Rect [332.133 372.729 339.206 384.789] /A << /S /GoTo /D (table.3) >> >> -% 1184 0 obj +% 1185 0 obj << /Type /Annot /Subtype /Link @@ -12442,7 +12451,7 @@ stream /Rect [368.549 293.733 444.603 305.793] /A << /S /GoTo /D (vdata) >> >> -% 1185 0 obj +% 1186 0 obj << /Type /Annot /Subtype /Link @@ -12450,7 +12459,7 @@ stream /Rect [322.336 281.778 329.21 293.837] /A << /S /GoTo /D (table.3) >> >> -% 1186 0 obj +% 1187 0 obj << /Type /Annot /Subtype /Link @@ -12458,7 +12467,7 @@ stream /Rect [256.048 202.781 323.106 214.841] /A << /S /GoTo /D (descdata) >> >> -% 1187 0 obj +% 1188 0 obj << /Type /Annot /Subtype /Link @@ -12466,50 +12475,50 @@ stream /Rect [149.34 119.17 156.313 128.58] /A << /S /GoTo /D (table.2) >> >> -% 1191 0 obj +% 1192 0 obj << -/D [1189 0 R /XYZ 98.895 753.953 null] +/D [1190 0 R /XYZ 98.895 753.953 null] >> % 236 0 obj << -/D [1189 0 R /XYZ 99.895 716.092 null] +/D [1190 0 R /XYZ 99.895 716.092 null] >> -% 1192 0 obj +% 1193 0 obj << -/D [1189 0 R /XYZ 99.895 524.97 null] +/D [1190 0 R /XYZ 99.895 524.97 null] >> -% 1188 0 obj +% 1189 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1194 0 obj +% 1195 0 obj << /Type /Page -/Contents 1195 0 R -/Resources 1193 0 R +/Contents 1196 0 R +/Resources 1194 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1158 0 R +/Parent 1159 0 R >> -% 1196 0 obj +% 1197 0 obj << -/D [1194 0 R /XYZ 149.705 753.953 null] +/D [1195 0 R /XYZ 149.705 753.953 null] >> -% 1193 0 obj +% 1194 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1201 0 obj +% 1202 0 obj << /Type /Page -/Contents 1202 0 R -/Resources 1200 0 R +/Contents 1203 0 R +/Resources 1201 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1197 0 R 1198 0 R 1199 0 R ] +/Parent 1206 0 R +/Annots [ 1198 0 R 1199 0 R 1200 0 R ] >> -% 1197 0 obj +% 1198 0 obj << /Type /Annot /Subtype /Link @@ -12517,7 +12526,7 @@ stream /Rect [368.549 358.503 444.603 370.562] /A << /S /GoTo /D (vdata) >> >> -% 1198 0 obj +% 1199 0 obj << /Type /Annot /Subtype /Link @@ -12525,7 +12534,7 @@ stream /Rect [326.652 346.547 333.626 358.607] /A << /S /GoTo /D (table.4) >> >> -% 1199 0 obj +% 1200 0 obj << /Type /Annot /Subtype /Link @@ -12533,54 +12542,54 @@ stream /Rect [256.048 280.074 323.106 292.134] /A << /S /GoTo /D (descdata) >> >> -% 1203 0 obj +% 1204 0 obj << -/D [1201 0 R /XYZ 98.895 753.953 null] +/D [1202 0 R /XYZ 98.895 753.953 null] >> % 240 0 obj << -/D [1201 0 R /XYZ 99.895 716.092 null] +/D [1202 0 R /XYZ 99.895 716.092 null] >> -% 1204 0 obj +% 1205 0 obj << -/D [1201 0 R /XYZ 99.895 495.665 null] +/D [1202 0 R /XYZ 99.895 495.665 null] >> -% 1200 0 obj +% 1201 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1207 0 obj +% 1208 0 obj << /Type /Page -/Contents 1208 0 R -/Resources 1206 0 R +/Contents 1209 0 R +/Resources 1207 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R +/Parent 1206 0 R >> -% 1209 0 obj +% 1210 0 obj << -/D [1207 0 R /XYZ 149.705 753.953 null] +/D [1208 0 R /XYZ 149.705 753.953 null] >> -% 1210 0 obj +% 1211 0 obj << -/D [1207 0 R /XYZ 150.705 632.19 null] +/D [1208 0 R /XYZ 150.705 632.19 null] >> -% 1206 0 obj +% 1207 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1215 0 obj +% 1216 0 obj << /Type /Page -/Contents 1216 0 R -/Resources 1214 0 R +/Contents 1217 0 R +/Resources 1215 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1211 0 R 1212 0 R 1213 0 R ] +/Parent 1206 0 R +/Annots [ 1212 0 R 1213 0 R 1214 0 R ] >> -% 1211 0 obj +% 1212 0 obj << /Type /Annot /Subtype /Link @@ -12588,7 +12597,7 @@ stream /Rect [368.549 411.694 444.603 423.754] /A << /S /GoTo /D (vdata) >> >> -% 1212 0 obj +% 1213 0 obj << /Type /Annot /Subtype /Link @@ -12596,7 +12605,7 @@ stream /Rect [326.652 399.739 333.626 411.798] /A << /S /GoTo /D (table.5) >> >> -% 1213 0 obj +% 1214 0 obj << /Type /Annot /Subtype /Link @@ -12604,33 +12613,33 @@ stream /Rect [256.048 331.993 323.106 344.052] /A << /S /GoTo /D (descdata) >> >> -% 1217 0 obj +% 1218 0 obj << -/D [1215 0 R /XYZ 98.895 753.953 null] +/D [1216 0 R /XYZ 98.895 753.953 null] >> % 244 0 obj << -/D [1215 0 R /XYZ 99.895 716.092 null] +/D [1216 0 R /XYZ 99.895 716.092 null] >> -% 1218 0 obj +% 1219 0 obj << -/D [1215 0 R /XYZ 99.895 555.856 null] +/D [1216 0 R /XYZ 99.895 555.856 null] >> -% 1214 0 obj +% 1215 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1223 0 obj +% 1224 0 obj << /Type /Page -/Contents 1224 0 R -/Resources 1222 0 R +/Contents 1225 0 R +/Resources 1223 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1219 0 R 1220 0 R 1221 0 R ] +/Parent 1206 0 R +/Annots [ 1220 0 R 1221 0 R 1222 0 R ] >> -% 1219 0 obj +% 1220 0 obj << /Type /Annot /Subtype /Link @@ -12638,7 +12647,7 @@ stream /Rect [419.358 362.555 495.412 374.615] /A << /S /GoTo /D (vdata) >> >> -% 1220 0 obj +% 1221 0 obj << /Type /Annot /Subtype /Link @@ -12646,7 +12655,7 @@ stream /Rect [377.462 350.6 384.436 362.66] /A << /S /GoTo /D (table.6) >> >> -% 1221 0 obj +% 1222 0 obj << /Type /Annot /Subtype /Link @@ -12654,54 +12663,54 @@ stream /Rect [306.858 283.114 373.916 295.173] /A << /S /GoTo /D (descdata) >> >> -% 1225 0 obj +% 1226 0 obj << -/D [1223 0 R /XYZ 149.705 753.953 null] +/D [1224 0 R /XYZ 149.705 753.953 null] >> % 248 0 obj << -/D [1223 0 R /XYZ 150.705 716.092 null] +/D [1224 0 R /XYZ 150.705 716.092 null] >> -% 1226 0 obj +% 1227 0 obj << -/D [1223 0 R /XYZ 150.705 505.29 null] +/D [1224 0 R /XYZ 150.705 505.29 null] >> -% 1222 0 obj +% 1223 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1228 0 obj +% 1229 0 obj << /Type /Page -/Contents 1229 0 R -/Resources 1227 0 R +/Contents 1230 0 R +/Resources 1228 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R +/Parent 1206 0 R >> -% 1230 0 obj +% 1231 0 obj << -/D [1228 0 R /XYZ 98.895 753.953 null] +/D [1229 0 R /XYZ 98.895 753.953 null] >> -% 1231 0 obj +% 1232 0 obj << -/D [1228 0 R /XYZ 99.895 632.19 null] +/D [1229 0 R /XYZ 99.895 632.19 null] >> -% 1227 0 obj +% 1228 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1236 0 obj +% 1237 0 obj << /Type /Page -/Contents 1237 0 R -/Resources 1235 0 R +/Contents 1238 0 R +/Resources 1236 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1205 0 R -/Annots [ 1232 0 R 1233 0 R 1234 0 R ] +/Parent 1206 0 R +/Annots [ 1233 0 R 1234 0 R 1235 0 R ] >> -% 1232 0 obj +% 1233 0 obj << /Type /Annot /Subtype /Link @@ -12709,7 +12718,7 @@ stream /Rect [419.358 291.495 495.412 303.554] /A << /S /GoTo /D (vdata) >> >> -% 1233 0 obj +% 1234 0 obj << /Type /Annot /Subtype /Link @@ -12717,7 +12726,7 @@ stream /Rect [377.462 279.539 384.436 291.599] /A << /S /GoTo /D (table.7) >> >> -% 1234 0 obj +% 1235 0 obj << /Type /Annot /Subtype /Link @@ -12725,50 +12734,50 @@ stream /Rect [306.858 209.259 373.916 221.319] /A << /S /GoTo /D (descdata) >> >> -% 1238 0 obj +% 1239 0 obj << -/D [1236 0 R /XYZ 149.705 753.953 null] +/D [1237 0 R /XYZ 149.705 753.953 null] >> % 252 0 obj << -/D [1236 0 R /XYZ 150.705 716.092 null] +/D [1237 0 R /XYZ 150.705 716.092 null] >> -% 1239 0 obj +% 1240 0 obj << -/D [1236 0 R /XYZ 150.705 443.893 null] +/D [1237 0 R /XYZ 150.705 443.893 null] >> -% 1235 0 obj +% 1236 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1241 0 obj +% 1242 0 obj << /Type /Page -/Contents 1242 0 R -/Resources 1240 0 R +/Contents 1243 0 R +/Resources 1241 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1244 0 R +/Parent 1245 0 R >> -% 1243 0 obj +% 1244 0 obj << -/D [1241 0 R /XYZ 98.895 753.953 null] +/D [1242 0 R /XYZ 98.895 753.953 null] >> -% 1240 0 obj +% 1241 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1249 0 obj +% 1250 0 obj << /Type /Page -/Contents 1250 0 R -/Resources 1248 0 R +/Contents 1251 0 R +/Resources 1249 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1244 0 R -/Annots [ 1245 0 R 1246 0 R 1247 0 R ] +/Parent 1245 0 R +/Annots [ 1246 0 R 1247 0 R 1248 0 R ] >> -% 1245 0 obj +% 1246 0 obj << /Type /Annot /Subtype /Link @@ -12776,7 +12785,7 @@ stream /Rect [419.358 314.69 495.412 326.749] /A << /S /GoTo /D (vdata) >> >> -% 1246 0 obj +% 1247 0 obj << /Type /Annot /Subtype /Link @@ -12784,7 +12793,7 @@ stream /Rect [377.462 302.734 384.436 314.794] /A << /S /GoTo /D (table.8) >> >> -% 1247 0 obj +% 1248 0 obj << /Type /Annot /Subtype /Link @@ -12792,74 +12801,74 @@ stream /Rect [306.858 232.693 373.916 244.753] /A << /S /GoTo /D (descdata) >> >> -% 1251 0 obj +% 1252 0 obj << -/D [1249 0 R /XYZ 149.705 753.953 null] +/D [1250 0 R /XYZ 149.705 753.953 null] >> % 256 0 obj << -/D [1249 0 R /XYZ 150.705 716.092 null] +/D [1250 0 R /XYZ 150.705 716.092 null] >> -% 1252 0 obj +% 1253 0 obj << -/D [1249 0 R /XYZ 150.705 504.73 null] +/D [1250 0 R /XYZ 150.705 504.73 null] >> -% 1248 0 obj +% 1249 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1254 0 obj +% 1255 0 obj << /Type /Page -/Contents 1255 0 R -/Resources 1253 0 R +/Contents 1256 0 R +/Resources 1254 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1244 0 R ->> -% 1256 0 obj -<< -/D [1254 0 R /XYZ 98.895 753.953 null] +/Parent 1245 0 R >> % 1257 0 obj << -/D [1254 0 R /XYZ 99.895 564.444 null] +/D [1255 0 R /XYZ 98.895 753.953 null] >> % 1258 0 obj << -/D [1254 0 R /XYZ 99.895 504.067 null] +/D [1255 0 R /XYZ 99.895 564.444 null] >> % 1259 0 obj << -/D [1254 0 R /XYZ 124.802 506.876 null] +/D [1255 0 R /XYZ 99.895 504.067 null] >> % 1260 0 obj << -/D [1254 0 R /XYZ 124.802 494.921 null] +/D [1255 0 R /XYZ 124.802 506.876 null] >> % 1261 0 obj << -/D [1254 0 R /XYZ 124.802 482.966 null] +/D [1255 0 R /XYZ 124.802 494.921 null] >> % 1262 0 obj << -/D [1254 0 R /XYZ 124.802 471.011 null] +/D [1255 0 R /XYZ 124.802 482.966 null] >> -% 1253 0 obj +% 1263 0 obj +<< +/D [1255 0 R /XYZ 124.802 471.011 null] +>> +% 1254 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1267 0 obj +% 1268 0 obj << /Type /Page -/Contents 1268 0 R -/Resources 1266 0 R +/Contents 1269 0 R +/Resources 1267 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1244 0 R -/Annots [ 1263 0 R 1264 0 R 1265 0 R ] +/Parent 1245 0 R +/Annots [ 1264 0 R 1265 0 R 1266 0 R ] >> -% 1263 0 obj +% 1264 0 obj << /Type /Annot /Subtype /Link @@ -12867,7 +12876,7 @@ stream /Rect [419.358 416.057 495.412 428.117] /A << /S /GoTo /D (vdata) >> >> -% 1264 0 obj +% 1265 0 obj << /Type /Annot /Subtype /Link @@ -12875,7 +12884,7 @@ stream /Rect [377.462 404.102 384.436 416.161] /A << /S /GoTo /D (table.9) >> >> -% 1265 0 obj +% 1266 0 obj << /Type /Annot /Subtype /Link @@ -12883,27 +12892,27 @@ stream /Rect [306.858 336.356 373.916 348.415] /A << /S /GoTo /D (descdata) >> >> -% 1269 0 obj +% 1270 0 obj << -/D [1267 0 R /XYZ 149.705 753.953 null] +/D [1268 0 R /XYZ 149.705 753.953 null] >> % 260 0 obj << -/D [1267 0 R /XYZ 150.705 716.092 null] +/D [1268 0 R /XYZ 150.705 716.092 null] >> -% 1270 0 obj +% 1271 0 obj << -/D [1267 0 R /XYZ 150.705 560.219 null] +/D [1268 0 R /XYZ 150.705 560.219 null] >> -% 1266 0 obj +% 1267 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> endstream endobj -1275 0 obj +1276 0 obj << /Length 5396 >> @@ -12918,7 +12927,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 156.993 706.129 Td [(norm1)-250(\227)-250(1-Norm)-250(of)-250(Sparse)-250(Matrix)]TJ/F84 9.9626 Tf -57.406 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(1-norm)-250(of)-250(a)-250(matrix)]TJ/F78 9.9626 Tf 208.231 0 Td [(A)]TJ/F84 9.9626 Tf 7.318 0 Td [(:)]TJ/F78 9.9626 Tf -74.342 -33.873 Td [(n)-15(r)-35(m)]TJ/F84 9.9626 Tf 17.789 0 Td [(1)]TJ/F190 10.3811 Tf 7.873 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.335 0 Td [(A)]TJ/F190 10.3811 Tf 7.442 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ/F84 9.9626 Tf -199.071 -20.06 Td [(wher)18(e:)]TJ +/F75 11.9552 Tf 156.993 706.129 Td [(norm1)-250(\227)-250(1-Norm)-250(of)-250(Sparse)-250(Matrix)]TJ/F84 9.9626 Tf -57.406 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(1-norm)-250(of)-250(a)-250(matrix)]TJ/F78 9.9626 Tf 208.231 0 Td [(A)]TJ/F84 9.9626 Tf 7.318 0 Td [(:)]TJ/F78 9.9626 Tf -74.342 -33.873 Td [(n)-15(r)-35(m)]TJ/F84 9.9626 Tf 17.789 0 Td [(1)]TJ/F195 10.3811 Tf 7.873 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.335 0 Td [(A)]TJ/F195 10.3811 Tf 7.442 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.858 Td [(1)]TJ/F84 9.9626 Tf -199.071 -20.06 Td [(wher)18(e:)]TJ 0 g 0 G /F78 9.9626 Tf 1.041 -19.925 Td [(A)]TJ 0 g 0 G @@ -12980,7 +12989,7 @@ BT 0 g 0 G 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -127.572 -33.873 Td [(psb_spnrm1\050A,)-525(desc_a,)-525(info\051)]TJ 0 -11.955 Td [(psb_norm1\050A,)-525(desc_a,)-525(info\051)]TJ +/F147 9.9626 Tf -127.572 -33.873 Td [(psb_spnrm1\050A,)-525(desc_a,)-525(info\051)]TJ 0 -11.955 Td [(psb_norm1\050A,)-525(desc_a,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -12993,21 +13002,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(the)-250(global)-250(sparse)-250(matrix)]TJ/F78 9.9626 Tf 194.722 0 Td [(A)]TJ/F84 9.9626 Tf 7.318 0 Td [(.)]TJ -187.096 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 273.363 344.346 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 276.501 344.147 Td [(Tspmat)]TJ +/F147 9.9626 Tf 276.501 344.147 Td [(Tspmat)]TJ ET q 1 0 0 1 308.511 344.346 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 311.649 344.147 Td [(type)]TJ +/F147 9.9626 Tf 311.649 344.147 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -13022,21 +13031,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 273.363 276.6 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 276.501 276.401 Td [(desc)]TJ +/F147 9.9626 Tf 276.501 276.401 Td [(desc)]TJ ET q 1 0 0 1 298.05 276.6 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 301.189 276.401 Td [(type)]TJ +/F147 9.9626 Tf 301.189 276.401 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -13057,7 +13066,7 @@ ET endstream endobj -1283 0 obj +1284 0 obj << /Length 5410 >> @@ -13072,7 +13081,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 207.803 706.129 Td [(normi)-250(\227)-250(In\002nity)-250(Norm)-250(of)-250(Sparse)-250(Matrix)]TJ/F84 9.9626 Tf -57.407 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(in\002nity-norm)-250(of)-250(a)-250(matrix)]TJ/F78 9.9626 Tf 235.459 0 Td [(A)]TJ/F84 9.9626 Tf 7.318 0 Td [(:)]TJ/F78 9.9626 Tf -102.019 -33.873 Td [(n)-15(r)-35(m)-18(i)]TJ/F190 10.3811 Tf 23.699 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.335 0 Td [(A)]TJ/F190 10.3811 Tf 7.442 0 Td [(k)]TJ/F243 7.5716 Tf 5.41 -1.494 Td [(\245)]TJ/F84 9.9626 Tf -196.754 -20.424 Td [(wher)18(e:)]TJ +/F75 11.9552 Tf 207.803 706.129 Td [(normi)-250(\227)-250(In\002nity)-250(Norm)-250(of)-250(Sparse)-250(Matrix)]TJ/F84 9.9626 Tf -57.407 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(in\002nity-norm)-250(of)-250(a)-250(matrix)]TJ/F78 9.9626 Tf 235.459 0 Td [(A)]TJ/F84 9.9626 Tf 7.318 0 Td [(:)]TJ/F78 9.9626 Tf -102.019 -33.873 Td [(n)-15(r)-35(m)-18(i)]TJ/F195 10.3811 Tf 23.699 0 Td [(\040)-291(k)]TJ/F78 9.9626 Tf 19.335 0 Td [(A)]TJ/F195 10.3811 Tf 7.442 0 Td [(k)]TJ/F241 7.5716 Tf 5.41 -1.494 Td [(\245)]TJ/F84 9.9626 Tf -196.754 -20.424 Td [(wher)18(e:)]TJ 0 g 0 G /F78 9.9626 Tf 1.042 -19.925 Td [(A)]TJ 0 g 0 G @@ -13134,7 +13143,7 @@ BT 0 g 0 G 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -127.572 -33.873 Td [(psb_spnrmi\050A,)-525(desc_a,)-525(info\051)]TJ 0 -11.955 Td [(psb_normi\050A,)-525(desc_a,)-525(info\051)]TJ +/F147 9.9626 Tf -127.572 -33.873 Td [(psb_spnrmi\050A,)-525(desc_a,)-525(info\051)]TJ 0 -11.955 Td [(psb_normi\050A,)-525(desc_a,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -13147,21 +13156,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(the)-250(global)-250(sparse)-250(matrix)]TJ/F78 9.9626 Tf 194.722 0 Td [(A)]TJ/F84 9.9626 Tf 7.317 0 Td [(.)]TJ -187.095 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.242 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.242 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 344.346 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 344.147 Td [(Tspmat)]TJ +/F147 9.9626 Tf 327.311 344.147 Td [(Tspmat)]TJ ET q 1 0 0 1 359.321 344.346 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 362.459 344.147 Td [(type)]TJ +/F147 9.9626 Tf 362.459 344.147 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -13176,21 +13185,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 276.6 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 276.401 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 276.401 Td [(desc)]TJ ET q 1 0 0 1 348.86 276.6 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 276.401 Td [(type)]TJ +/F147 9.9626 Tf 351.998 276.401 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -13211,7 +13220,7 @@ ET endstream endobj -1294 0 obj +1295 0 obj << /Length 8068 >> @@ -13226,15 +13235,15 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 156.993 706.129 Td [(spmm)-250(\227)-250(Sparse)-250(Matrix)-250(by)-250(Dense)-250(Matrix)-250(Product)]TJ/F84 9.9626 Tf -57.406 -19.303 Td [(This)-250(subr)18(outine)-250(computes)-250(the)-250(Sparse)-250(Matrix)-250(by)-250(Dense)-250(Matrix)-250(Pr)18(oduct:)]TJ/F78 9.9626 Tf 140.456 -24.611 Td [(y)]TJ/F190 10.3811 Tf 7.998 0 Td [(\040)]TJ/F147 9.9626 Tf 13.397 0 Td [(a)]TJ/F78 9.9626 Tf 6.008 0 Td [(A)-42(x)]TJ/F192 10.3811 Tf 14.878 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ +/F75 11.9552 Tf 156.993 706.129 Td [(spmm)-250(\227)-250(Sparse)-250(Matrix)-250(by)-250(Dense)-250(Matrix)-250(Product)]TJ/F84 9.9626 Tf -57.406 -19.303 Td [(This)-250(subr)18(outine)-250(computes)-250(the)-250(Sparse)-250(Matrix)-250(by)-250(Dense)-250(Matrix)-250(Pr)18(oduct:)]TJ/F78 9.9626 Tf 140.456 -24.611 Td [(y)]TJ/F195 10.3811 Tf 7.998 0 Td [(\040)]TJ/F151 9.9626 Tf 13.397 0 Td [(a)]TJ/F78 9.9626 Tf 6.008 0 Td [(A)-42(x)]TJ/F197 10.3811 Tf 14.878 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ 0 g 0 G /F84 9.9626 Tf 134.508 0 Td [(\0501\051)]TJ 0 g 0 G -/F78 9.9626 Tf -195.74 -20.13 Td [(y)]TJ/F190 10.3811 Tf 7.998 0 Td [(\040)]TJ/F147 9.9626 Tf 13.397 0 Td [(a)]TJ/F78 9.9626 Tf 6.008 0 Td [(A)]TJ/F78 7.5716 Tf 7.51 4.115 Td [(T)]TJ/F78 9.9626 Tf 5.695 -4.115 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ +/F78 9.9626 Tf -195.74 -20.13 Td [(y)]TJ/F195 10.3811 Tf 7.998 0 Td [(\040)]TJ/F151 9.9626 Tf 13.397 0 Td [(a)]TJ/F78 9.9626 Tf 6.008 0 Td [(A)]TJ/F78 7.5716 Tf 7.51 4.115 Td [(T)]TJ/F78 9.9626 Tf 5.695 -4.115 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ 0 g 0 G /F84 9.9626 Tf 131.711 0 Td [(\0502\051)]TJ 0 g 0 G -/F78 9.9626 Tf -196.478 -20.129 Td [(y)]TJ/F190 10.3811 Tf 7.997 0 Td [(\040)]TJ/F147 9.9626 Tf 13.398 0 Td [(a)]TJ/F78 9.9626 Tf 6.007 0 Td [(A)]TJ/F78 7.5716 Tf 7.7 4.114 Td [(H)]TJ/F78 9.9626 Tf 6.982 -4.114 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ +/F78 9.9626 Tf -196.478 -20.129 Td [(y)]TJ/F195 10.3811 Tf 7.997 0 Td [(\040)]TJ/F151 9.9626 Tf 13.398 0 Td [(a)]TJ/F78 9.9626 Tf 6.007 0 Td [(A)]TJ/F78 7.5716 Tf 7.7 4.114 Td [(H)]TJ/F78 9.9626 Tf 6.982 -4.114 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ 0 g 0 G /F84 9.9626 Tf 130.973 0 Td [(\0503\051)]TJ 0 g 0 G @@ -13260,7 +13269,7 @@ q []0 d 0 J 0.398 w 0 0 m 184.337 0 l S Q BT -/F78 9.9626 Tf 186.183 509.418 Td [(A)]TJ/F84 9.9626 Tf 7.317 0 Td [(,)]TJ/F78 9.9626 Tf 5.275 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(,)]TJ/F78 9.9626 Tf 5.106 0 Td [(y)]TJ/F84 9.9626 Tf 5.105 0 Td [(,)]TJ/F147 9.9626 Tf 5.106 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(,)]TJ/F147 9.9626 Tf 5.355 0 Td [(b)]TJ/F75 9.9626 Tf 76.437 0 Td [(Subroutine)]TJ +/F78 9.9626 Tf 186.183 509.418 Td [(A)]TJ/F84 9.9626 Tf 7.317 0 Td [(,)]TJ/F78 9.9626 Tf 5.275 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(,)]TJ/F78 9.9626 Tf 5.106 0 Td [(y)]TJ/F84 9.9626 Tf 5.105 0 Td [(,)]TJ/F151 9.9626 Tf 5.106 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(,)]TJ/F151 9.9626 Tf 5.355 0 Td [(b)]TJ/F75 9.9626 Tf 76.437 0 Td [(Subroutine)]TJ ET q 1 0 0 1 179.582 505.633 cm @@ -13309,7 +13318,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -107.397 -24.261 Td [(call)]TJ +/F147 9.9626 Tf -107.397 -24.261 Td [(call)]TJ 0 g 0 G [-525(psb_spmm\050alpha,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -13367,7 +13376,7 @@ BT 0 g 0 G 0 -20.626 Td [(alpha)]TJ 0 g 0 G -/F84 9.9626 Tf 30.436 0 Td [(the)-250(scalar)]TJ/F147 9.9626 Tf 44.368 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(.)]TJ -55.282 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ +/F84 9.9626 Tf 30.436 0 Td [(the)-250(scalar)]TJ/F151 9.9626 Tf 44.368 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(.)]TJ -55.282 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG [-250(12)]TJ 0 g 0 G @@ -13377,21 +13386,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(the)-250(sparse)-250(matrix)]TJ/F78 9.9626 Tf 164.964 0 Td [(A)]TJ/F84 9.9626 Tf 7.318 0 Td [(.)]TJ -157.338 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 273.363 212.882 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 276.501 212.682 Td [(Tspmat)]TJ +/F147 9.9626 Tf 276.501 212.682 Td [(Tspmat)]TJ ET q 1 0 0 1 308.511 212.882 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 311.649 212.682 Td [(type)]TJ +/F147 9.9626 Tf 311.649 212.682 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -13399,28 +13408,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.614 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.875 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 144.236 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 144.236 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 144.236 Tm [(psb)]TJ ET q 1 0 0 1 385.864 144.435 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 144.236 Td [(T)]TJ +/F147 9.9626 Tf 389.002 144.236 Td [(T)]TJ ET q 1 0 0 1 394.86 144.435 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 144.236 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 144.236 Td [(vect)]TJ ET q 1 0 0 1 419.547 144.435 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 144.236 Td [(type)]TJ +/F147 9.9626 Tf 422.685 144.236 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.015 0 0 1 124.802 132.281 Tm [(containing)-247(numbers)-246(of)-247(type)-247(speci\002ed)-246(in)-247(T)91(able)]TJ 0 0 1 rg 0 0 1 RG @@ -13434,7 +13443,7 @@ ET endstream endobj -1310 0 obj +1311 0 obj << /Length 6709 >> @@ -13445,7 +13454,7 @@ stream BT /F75 9.9626 Tf 150.705 706.129 Td [(beta)]TJ 0 g 0 G -/F84 9.9626 Tf 24.348 0 Td [(the)-250(scalar)]TJ/F147 9.9626 Tf 44.618 0 Td [(b)]TJ/F84 9.9626 Tf 5.524 0 Td [(.)]TJ -49.584 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ +/F84 9.9626 Tf 24.348 0 Td [(the)-250(scalar)]TJ/F151 9.9626 Tf 44.618 0 Td [(b)]TJ/F84 9.9626 Tf 5.524 0 Td [(.)]TJ -49.584 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG [-250(12)]TJ 0 g 0 G @@ -13455,28 +13464,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.52 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.445 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -166.165 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ 0.98 0 0 1 175.611 591.891 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 591.891 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 591.891 Tm [(psb)]TJ ET q 1 0 0 1 436.673 592.09 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 591.891 Td [(T)]TJ +/F147 9.9626 Tf 439.811 591.891 Td [(T)]TJ ET q 1 0 0 1 445.669 592.09 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 591.891 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 591.891 Td [(vect)]TJ ET q 1 0 0 1 470.356 592.09 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 591.891 Td [(type)]TJ +/F147 9.9626 Tf 473.495 591.891 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.016 0 0 1 175.611 579.935 Tm [(containing)-246(numbers)-247(of)-246(type)-247(speci\002ed)-246(in)-246(T)90(able)]TJ 0 0 1 rg 0 0 1 RG @@ -13495,21 +13504,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 501.762 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 501.563 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 501.563 Td [(desc)]TJ ET q 1 0 0 1 348.86 501.762 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 501.563 Td [(type)]TJ +/F147 9.9626 Tf 351.998 501.563 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -13537,7 +13546,7 @@ BT 0 0 1 rg 0 0 1 RG [-250(3)]TJ 0 g 0 G - -45.878 -18.597 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.64 0 Td [(t)-15(r)-50(a)-25(n)-25(s)]TJ/F192 10.3811 Tf 25.193 0 Td [(=)]TJ/F78 9.9626 Tf 11.435 0 Td [(N)]TJ/F84 9.9626 Tf -75.268 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(character)-250(variable.)]TJ + -45.878 -18.597 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.64 0 Td [(t)-15(r)-50(a)-25(n)-25(s)]TJ/F197 10.3811 Tf 25.193 0 Td [(=)]TJ/F78 9.9626 Tf 11.435 0 Td [(N)]TJ/F84 9.9626 Tf -75.268 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(character)-250(variable.)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -18.596 Td [(work)]TJ 0 g 0 G @@ -13564,7 +13573,7 @@ ET endstream endobj -1316 0 obj +1317 0 obj << /Length 8135 >> @@ -13579,7 +13588,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 156.993 706.129 Td [(spsm)-250(\227)-250(T)111(riangular)-250(System)-250(Solve)]TJ/F84 9.9626 Tf -57.406 -19.83 Td [(This)-250(subr)18(outine)-250(computes)-250(the)-250(T)90(riangular)-250(System)-250(Solve:)]TJ/F78 9.9626 Tf 123.033 -35.213 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F190 7.8896 Tf 6.546 4.115 Td [(\000)]TJ/F84 7.5716 Tf 6.227 0 Td [(1)]TJ/F78 9.9626 Tf 4.578 -4.115 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -82.196 -16.139 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.709 0 Td [(D)-48(T)]TJ/F190 7.8896 Tf 14.774 4.114 Td [(\000)]TJ/F84 7.5716 Tf 6.228 0 Td [(1)]TJ/F78 9.9626 Tf 4.578 -4.114 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -90.495 -16.139 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F190 7.8896 Tf 6.546 4.114 Td [(\000)]TJ/F84 7.5716 Tf 6.227 0 Td [(1)]TJ/F78 9.9626 Tf 4.608 -4.114 Td [(D)-52(x)]TJ/F192 10.3811 Tf 15.536 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -90.495 -16.09 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F190 7.8896 Tf 6.546 4.114 Td [(\000)]TJ/F78 7.5716 Tf 6.42 0 Td [(T)]TJ/F78 9.9626 Tf 5.695 -4.114 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -83.506 -16.09 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.709 0 Td [(D)-48(T)]TJ/F190 7.8896 Tf 14.774 4.114 Td [(\000)]TJ/F78 7.5716 Tf 6.421 0 Td [(T)]TJ/F78 9.9626 Tf 5.695 -4.114 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.648 0 Td [(y)]TJ -91.804 -16.09 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F190 7.8896 Tf 6.546 4.114 Td [(\000)]TJ/F78 7.5716 Tf 6.42 0 Td [(T)]TJ/F78 9.9626 Tf 5.725 -4.114 Td [(D)-52(x)]TJ/F192 10.3811 Tf 15.536 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.648 0 Td [(y)]TJ -91.804 -16.091 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F190 7.8896 Tf 6.546 4.115 Td [(\000)]TJ/F78 7.5716 Tf 6.609 0 Td [(H)]TJ/F78 9.9626 Tf 6.982 -4.115 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -84.982 -16.09 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.709 0 Td [(D)-48(T)]TJ/F190 7.8896 Tf 14.774 4.115 Td [(\000)]TJ/F78 7.5716 Tf 6.61 0 Td [(H)]TJ/F78 9.9626 Tf 6.982 -4.115 Td [(x)]TJ/F192 10.3811 Tf 7.267 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -93.281 -16.09 Td [(y)]TJ/F190 10.3811 Tf 15.193 0 Td [(\040)]TJ/F147 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F190 7.8896 Tf 6.545 4.115 Td [(\000)]TJ/F78 7.5716 Tf 6.61 0 Td [(H)]TJ/F78 9.9626 Tf 7.012 -4.115 Td [(D)-52(x)]TJ/F192 10.3811 Tf 15.536 0 Td [(+)]TJ/F147 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ/F84 9.9626 Tf -201.062 -38.202 Td [(wher)18(e:)]TJ +/F75 11.9552 Tf 156.993 706.129 Td [(spsm)-250(\227)-250(T)111(riangular)-250(System)-250(Solve)]TJ/F84 9.9626 Tf -57.406 -19.83 Td [(This)-250(subr)18(outine)-250(computes)-250(the)-250(T)90(riangular)-250(System)-250(Solve:)]TJ/F78 9.9626 Tf 123.033 -35.213 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F195 7.8896 Tf 6.546 4.115 Td [(\000)]TJ/F84 7.5716 Tf 6.227 0 Td [(1)]TJ/F78 9.9626 Tf 4.578 -4.115 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -82.196 -16.139 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.709 0 Td [(D)-48(T)]TJ/F195 7.8896 Tf 14.774 4.114 Td [(\000)]TJ/F84 7.5716 Tf 6.228 0 Td [(1)]TJ/F78 9.9626 Tf 4.578 -4.114 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -90.495 -16.139 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F195 7.8896 Tf 6.546 4.114 Td [(\000)]TJ/F84 7.5716 Tf 6.227 0 Td [(1)]TJ/F78 9.9626 Tf 4.608 -4.114 Td [(D)-52(x)]TJ/F197 10.3811 Tf 15.536 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -90.495 -16.09 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F195 7.8896 Tf 6.546 4.114 Td [(\000)]TJ/F78 7.5716 Tf 6.42 0 Td [(T)]TJ/F78 9.9626 Tf 5.695 -4.114 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -83.506 -16.09 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.709 0 Td [(D)-48(T)]TJ/F195 7.8896 Tf 14.774 4.114 Td [(\000)]TJ/F78 7.5716 Tf 6.421 0 Td [(T)]TJ/F78 9.9626 Tf 5.695 -4.114 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.648 0 Td [(y)]TJ -91.804 -16.09 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F195 7.8896 Tf 6.546 4.114 Td [(\000)]TJ/F78 7.5716 Tf 6.42 0 Td [(T)]TJ/F78 9.9626 Tf 5.725 -4.114 Td [(D)-52(x)]TJ/F197 10.3811 Tf 15.536 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.648 0 Td [(y)]TJ -91.804 -16.091 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F195 7.8896 Tf 6.546 4.115 Td [(\000)]TJ/F78 7.5716 Tf 6.609 0 Td [(H)]TJ/F78 9.9626 Tf 6.982 -4.115 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -84.982 -16.09 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.709 0 Td [(D)-48(T)]TJ/F195 7.8896 Tf 14.774 4.115 Td [(\000)]TJ/F78 7.5716 Tf 6.61 0 Td [(H)]TJ/F78 9.9626 Tf 6.982 -4.115 Td [(x)]TJ/F197 10.3811 Tf 7.267 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ -93.281 -16.09 Td [(y)]TJ/F195 10.3811 Tf 15.193 0 Td [(\040)]TJ/F151 9.9626 Tf 20.592 0 Td [(a)]TJ/F78 9.9626 Tf 5.639 0 Td [(T)]TJ/F195 7.8896 Tf 6.545 4.115 Td [(\000)]TJ/F78 7.5716 Tf 6.61 0 Td [(H)]TJ/F78 9.9626 Tf 7.012 -4.115 Td [(D)-52(x)]TJ/F197 10.3811 Tf 15.536 0 Td [(+)]TJ/F151 9.9626 Tf 10.505 0 Td [(b)]TJ/F78 9.9626 Tf 5.649 0 Td [(y)]TJ/F84 9.9626 Tf -201.062 -38.202 Td [(wher)18(e:)]TJ 0 g 0 G /F78 9.9626 Tf -14.65 -21.265 Td [(x)]TJ 0 g 0 G @@ -13599,7 +13608,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 6.895 -21.266 Td [(call)]TJ +/F147 9.9626 Tf 6.895 -21.266 Td [(call)]TJ 0 g 0 G [-525(psb_spsm\050alpha,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -13668,7 +13677,7 @@ q []0 d 0 J 0.398 w 0 0 m 184.337 0 l S Q BT -/F78 9.9626 Tf 185.814 330.871 Td [(T)]TJ/F84 9.9626 Tf 6.451 0 Td [(,)]TJ/F78 9.9626 Tf 5.275 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(,)]TJ/F78 9.9626 Tf 5.106 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(,)]TJ/F78 9.9626 Tf 5.305 0 Td [(D)]TJ/F84 9.9626 Tf 7.975 0 Td [(,)]TJ/F147 9.9626 Tf 5.106 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(,)]TJ/F147 9.9626 Tf 5.355 0 Td [(b)]TJ/F75 9.9626 Tf 64.392 0 Td [(Subroutine)]TJ +/F78 9.9626 Tf 185.814 330.871 Td [(T)]TJ/F84 9.9626 Tf 6.451 0 Td [(,)]TJ/F78 9.9626 Tf 5.275 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(,)]TJ/F78 9.9626 Tf 5.106 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(,)]TJ/F78 9.9626 Tf 5.305 0 Td [(D)]TJ/F84 9.9626 Tf 7.975 0 Td [(,)]TJ/F151 9.9626 Tf 5.106 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(,)]TJ/F151 9.9626 Tf 5.355 0 Td [(b)]TJ/F75 9.9626 Tf 64.392 0 Td [(Subroutine)]TJ ET q 1 0 0 1 179.582 327.085 cm @@ -13724,7 +13733,7 @@ BT 0 g 0 G 0 -21.713 Td [(alpha)]TJ 0 g 0 G -/F84 9.9626 Tf 30.436 0 Td [(the)-250(scalar)]TJ/F147 9.9626 Tf 44.368 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(.)]TJ -55.282 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ +/F84 9.9626 Tf 30.436 0 Td [(the)-250(scalar)]TJ/F151 9.9626 Tf 44.368 0 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(.)]TJ -55.282 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG [-250(13)]TJ 0 g 0 G @@ -13736,7 +13745,7 @@ ET endstream endobj -1327 0 obj +1328 0 obj << /Length 7465 >> @@ -13757,28 +13766,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.615 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -165.876 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 0.98 0 0 1 175.611 589.838 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 589.838 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 589.838 Tm [(psb)]TJ ET q 1 0 0 1 436.673 590.037 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 589.838 Td [(T)]TJ +/F147 9.9626 Tf 439.811 589.838 Td [(T)]TJ ET q 1 0 0 1 445.669 590.037 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 589.838 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 589.838 Td [(vect)]TJ ET q 1 0 0 1 470.356 590.037 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 589.838 Td [(type)]TJ +/F147 9.9626 Tf 473.495 589.838 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.015 0 0 1 175.611 577.883 Tm [(containing)-247(numbers)-246(of)-247(type)-247(speci\002ed)-246(in)-247(T)90(able)]TJ 0 0 1 rg 0 0 1 RG @@ -13788,7 +13797,7 @@ BT 0 g 0 G /F75 9.9626 Tf -82.958 -20.649 Td [(beta)]TJ 0 g 0 G -/F84 9.9626 Tf 24.348 0 Td [(the)-250(scalar)]TJ/F147 9.9626 Tf 44.618 0 Td [(b)]TJ/F84 9.9626 Tf 5.524 0 Td [(.)]TJ -49.584 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ +/F84 9.9626 Tf 24.348 0 Td [(the)-250(scalar)]TJ/F151 9.9626 Tf 44.618 0 Td [(b)]TJ/F84 9.9626 Tf 5.524 0 Td [(.)]TJ -49.584 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(number)-250(of)-250(the)-250(data)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG [-250(13)]TJ 0 g 0 G @@ -13798,28 +13807,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.52 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 175.445 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -166.165 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ 0.98 0 0 1 175.611 428.986 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 428.986 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 428.986 Tm [(psb)]TJ ET q 1 0 0 1 436.673 429.186 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 428.986 Td [(T)]TJ +/F147 9.9626 Tf 439.811 428.986 Td [(T)]TJ ET q 1 0 0 1 445.669 429.186 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 428.986 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 428.986 Td [(vect)]TJ ET q 1 0 0 1 470.356 429.186 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 428.986 Td [(type)]TJ +/F147 9.9626 Tf 473.495 428.986 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.016 0 0 1 175.611 417.031 Tm [(containing)-246(numbers)-247(of)-246(type)-247(speci\002ed)-246(in)-246(T)90(able)]TJ 0 0 1 rg 0 0 1 RG @@ -13838,21 +13847,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 336.805 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 336.605 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 336.605 Td [(desc)]TJ ET q 1 0 0 1 348.86 336.805 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 336.605 Td [(type)]TJ +/F147 9.9626 Tf 351.998 336.605 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -13870,7 +13879,7 @@ BT 0 g 0 G /F75 9.9626 Tf -50.869 -16.302 Td [(trans)-250(=)-250('C')]TJ 0 g 0 G -/F84 9.9626 Tf 51.417 0 Td [(the)-250(operation)-250(is)-250(with)-250(conjugate)-250(transposed)-250(matrix.)]TJ -51.417 -20.65 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Default:)]TJ/F78 9.9626 Tf 38.64 0 Td [(t)-15(r)-50(a)-25(n)-25(s)]TJ/F192 10.3811 Tf 25.193 0 Td [(=)]TJ/F78 9.9626 Tf 11.435 0 Td [(N)]TJ/F84 9.9626 Tf -75.268 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(character)-250(variable.)]TJ +/F84 9.9626 Tf 51.417 0 Td [(the)-250(operation)-250(is)-250(with)-250(conjugate)-250(transposed)-250(matrix.)]TJ -51.417 -20.65 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Default:)]TJ/F78 9.9626 Tf 38.64 0 Td [(t)-15(r)-50(a)-25(n)-25(s)]TJ/F197 10.3811 Tf 25.193 0 Td [(=)]TJ/F78 9.9626 Tf 11.435 0 Td [(N)]TJ/F84 9.9626 Tf -75.268 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(character)-250(variable.)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -20.65 Td [(unitd)]TJ 0 g 0 G @@ -13894,7 +13903,7 @@ ET endstream endobj -1333 0 obj +1334 0 obj << /Length 4640 >> @@ -13902,14 +13911,14 @@ stream 0 g 0 G 0 g 0 G BT -/F84 9.9626 Tf 124.802 706.129 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Default:)]TJ/F78 9.9626 Tf 38.64 0 Td [(u)-25(n)-18(i)-32(t)-25(d)]TJ/F192 10.3811 Tf 26.159 0 Td [(=)]TJ/F78 9.9626 Tf 10.927 0 Td [(U)]TJ/F84 9.9626 Tf -75.726 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(character)-250(variable.)]TJ +/F84 9.9626 Tf 124.802 706.129 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Default:)]TJ/F78 9.9626 Tf 38.64 0 Td [(u)-25(n)-18(i)-32(t)-25(d)]TJ/F197 10.3811 Tf 26.159 0 Td [(=)]TJ/F78 9.9626 Tf 10.927 0 Td [(U)]TJ/F84 9.9626 Tf -75.726 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(character)-250(variable.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -19.925 Td [(choice)]TJ 0 g 0 G /F84 9.9626 Tf 33.754 0 Td [(speci\002es)-250(the)-250(update)-250(of)-250(overlap)-250(elements)-250(to)-250(be)-250(performed)-250(on)-250(exit:)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -3.866 -19.925 Td [(psb_none_)]TJ +/F147 9.9626 Tf -3.866 -19.925 Td [(psb_none_)]TJ 0 g 0 G 0 g 0 G 0 -15.941 Td [(psb_sum_)]TJ @@ -13918,11 +13927,11 @@ BT 0 -15.94 Td [(psb_avg_)]TJ 0 g 0 G 0 g 0 G - 0 -15.94 Td [(psb_square_root_)]TJ/F84 9.9626 Tf -4.981 -19.925 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F145 9.9626 Tf 38.515 0 Td [(psb_avg_)]TJ/F84 9.9626 Tf -38.515 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable.)]TJ + 0 -15.94 Td [(psb_square_root_)]TJ/F84 9.9626 Tf -4.981 -19.925 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F147 9.9626 Tf 38.515 0 Td [(psb_avg_)]TJ/F84 9.9626 Tf -38.515 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -19.925 Td [(diag)]TJ 0 g 0 G -/F84 9.9626 Tf 24.907 0 Td [(the)-250(diagonal)-250(scaling)-250(matrix.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.64 0 Td [(d)-18(i)-47(a)-47(g)]TJ/F192 10.3811 Tf 18.52 0 Td [(\050)]TJ/F84 9.9626 Tf 4.149 0 Td [(1)]TJ/F192 10.3811 Tf 5.106 0 Td [(\051)-289(=)]TJ/F84 9.9626 Tf 18.003 0 Td [(1)]TJ/F192 10.3811 Tf 5.106 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)-25(o)-35(s)-25(c)-40(a)-25(l)-48(i)-32(n)-47(g)]TJ/F192 10.3811 Tf 41.384 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 124.802 423.19 Tm [(Speci\002ed)-253(as:)-316(a)-253(rank)-254(one)-253(array)-254(containing)-253(numbers)-253(of)-254(the)-253(type)-254(indicated)-253(in)]TJ 1 0 0 1 124.493 411.235 Tm [(T)92(able)]TJ +/F84 9.9626 Tf 24.907 0 Td [(the)-250(diagonal)-250(scaling)-250(matrix.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.64 0 Td [(d)-18(i)-47(a)-47(g)]TJ/F197 10.3811 Tf 18.52 0 Td [(\050)]TJ/F84 9.9626 Tf 4.149 0 Td [(1)]TJ/F197 10.3811 Tf 5.106 0 Td [(\051)-289(=)]TJ/F84 9.9626 Tf 18.003 0 Td [(1)]TJ/F197 10.3811 Tf 5.106 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)-25(o)-35(s)-25(c)-40(a)-25(l)-48(i)-32(n)-47(g)]TJ/F197 10.3811 Tf 41.384 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 124.802 423.19 Tm [(Speci\002ed)-253(as:)-316(a)-253(rank)-254(one)-253(array)-254(containing)-253(numbers)-253(of)-254(the)-253(type)-254(indicated)-253(in)]TJ 1 0 0 1 124.493 411.235 Tm [(T)92(able)]TJ 0 0 1 rg 0 0 1 RG [-250(13)]TJ 0 g 0 G @@ -13953,9 +13962,9 @@ ET endstream endobj -1344 0 obj +1345 0 obj << -/Length 7721 +/Length 7818 >> stream 0 g 0 G @@ -13968,7 +13977,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 207.803 706.129 Td [(gemlt)-250(\227)-250(Entrywise)-250(Product)]TJ/F84 9.9626 Tf -57.407 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(entrywise)-250(pr)18(oduct)-250(between)-250(two)-250(vectors)]TJ/F78 9.9626 Tf 299.677 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ -187.61 -21.112 Td [(d)-25(o)-35(t)]TJ/F190 10.3811 Tf 16.337 0 Td [(\040)]TJ/F78 9.9626 Tf 13.566 0 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F78 9.9626 Tf 4.274 0 Td [(y)]TJ/F192 10.3811 Tf 5.23 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.089 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ/F145 9.9626 Tf -187.464 -21.111 Td [(psb_gemlt\050x,)]TJ +/F75 11.9552 Tf 207.803 706.129 Td [(gemlt)-250(\227)-250(Entrywise)-250(Product)]TJ/F84 9.9626 Tf -57.407 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(entrywise)-250(pr)18(oduct)-250(between)-250(two)-250(vectors)]TJ/F78 9.9626 Tf 299.677 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.482 0 Td [(y)]TJ -189.224 -21.112 Td [(y)]TJ/F197 10.3811 Tf 5.231 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.042 0 Td [(\040)]TJ/F78 9.9626 Tf 13.566 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F78 9.9626 Tf 4.274 0 Td [(y)]TJ/F197 10.3811 Tf 5.23 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.089 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ/F147 9.9626 Tf -189.078 -21.111 Td [(psb_gemlt\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(y,)]TJ @@ -14045,28 +14054,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(vector)]TJ/F78 9.9626 Tf 174.059 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ -164.321 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 175.611 421.578 Tm [(Speci\002ed)-306(as:)-425(an)-306(object)-306(of)-306(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 314.513 421.578 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 314.513 421.578 Tm [(psb)]TJ ET q 1 0 0 1 330.831 421.777 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 333.969 421.578 Td [(T)]TJ +/F147 9.9626 Tf 333.969 421.578 Td [(T)]TJ ET q 1 0 0 1 339.827 421.777 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 342.966 421.578 Td [(vect)]TJ +/F147 9.9626 Tf 342.966 421.578 Td [(vect)]TJ ET q 1 0 0 1 364.515 421.777 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 367.653 421.578 Td [(type)]TJ +/F147 9.9626 Tf 367.653 421.578 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 391.683 421.578 Tm [(containing)-306(numbers)-306(of)]TJ 1 0 0 1 175.611 409.623 Tm [(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -14078,28 +14087,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.52 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(vector)]TJ/F78 9.9626 Tf 173.891 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -164.611 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 1.02 0 0 1 175.611 342.199 Tm [(Speci\002ed)-306(as:)-425(an)-306(object)-306(of)-306(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 314.513 342.199 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 314.513 342.199 Tm [(psb)]TJ ET q 1 0 0 1 330.831 342.398 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 333.969 342.199 Td [(T)]TJ +/F147 9.9626 Tf 333.969 342.199 Td [(T)]TJ ET q 1 0 0 1 339.827 342.398 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 342.966 342.199 Td [(vect)]TJ +/F147 9.9626 Tf 342.966 342.199 Td [(vect)]TJ ET q 1 0 0 1 364.515 342.398 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 367.653 342.199 Td [(type)]TJ +/F147 9.9626 Tf 367.653 342.199 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 391.683 342.199 Tm [(containing)-306(numbers)-306(of)]TJ 1 0 0 1 175.611 330.244 Tm [(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -14118,21 +14127,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 263.02 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 262.82 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 262.82 Td [(desc)]TJ ET q 1 0 0 1 348.86 263.02 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 262.82 Td [(type)]TJ +/F147 9.9626 Tf 351.998 262.82 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -14143,28 +14152,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.52 0 Td [(the)-250(local)-250(portion)-250(of)-250(r)18(esult)-250(submatrix)]TJ/F78 9.9626 Tf 160.68 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -151.4 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ 0.98 0 0 1 175.611 175.794 Tm [(Speci\002ed)-240(as:)-309(an)-240(object)-240(of)-240(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 304.709 175.794 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 304.709 175.794 Tm [(psb)]TJ ET q 1 0 0 1 321.027 175.993 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 324.166 175.794 Td [(T)]TJ +/F147 9.9626 Tf 324.166 175.794 Td [(T)]TJ ET q 1 0 0 1 330.023 175.993 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 333.162 175.794 Td [(vect)]TJ +/F147 9.9626 Tf 333.162 175.794 Td [(vect)]TJ ET q 1 0 0 1 354.711 175.993 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 357.849 175.794 Td [(type)]TJ +/F147 9.9626 Tf 357.849 175.794 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 0.98 0 0 1 381.113 175.794 Tm [(containing)-240(numbers)-240(of)-240(the)]TJ 1 0 0 1 175.611 163.839 Tm [(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -14182,7 +14191,7 @@ ET endstream endobj -1349 0 obj +1350 0 obj << /Length 312 >> @@ -14198,9 +14207,9 @@ ET endstream endobj -1361 0 obj +1362 0 obj << -/Length 7700 +/Length 7795 >> stream 0 g 0 G @@ -14213,7 +14222,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 207.803 706.129 Td [(gediv)-250(\227)-250(Entrywise)-250(Division)]TJ/F84 9.9626 Tf -57.407 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(entrywise)-250(division)-250(between)-250(two)-250(vectors)]TJ/F78 9.9626 Tf 300.604 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.481 0 Td [(y)]TJ/F84 9.9626 Tf -188.038 -21.112 Td [(/)]TJ/F190 10.3811 Tf 9.054 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 4.274 0 Td [(/)]TJ/F78 9.9626 Tf 6.287 0 Td [(y)]TJ/F192 10.3811 Tf 5.23 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.089 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ/F145 9.9626 Tf -186.966 -21.111 Td [(psb_gediv\050x,)]TJ +/F75 11.9552 Tf 207.803 706.129 Td [(gediv)-250(\227)-250(Entrywise)-250(Division)]TJ/F84 9.9626 Tf -57.407 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(entrywise)-250(division)-250(between)-250(two)-250(vectors)]TJ/F78 9.9626 Tf 300.604 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)]TJ/F78 9.9626 Tf 19.481 0 Td [(y)]TJ -193.293 -21.112 Td [(y)]TJ/F197 10.3811 Tf 5.231 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.041 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.089 0 Td [(\051)]TJ/F84 9.9626 Tf 4.274 0 Td [(/)]TJ/F78 9.9626 Tf 6.286 0 Td [(y)]TJ/F197 10.3811 Tf 5.23 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ/F147 9.9626 Tf -192.221 -21.111 Td [(psb_gediv\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(y,)]TJ @@ -14293,28 +14302,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(vector)]TJ/F78 9.9626 Tf 174.059 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ -164.321 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 175.611 421.578 Tm [(Speci\002ed)-306(as:)-425(an)-306(object)-306(of)-306(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 314.513 421.578 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 314.513 421.578 Tm [(psb)]TJ ET q 1 0 0 1 330.831 421.777 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 333.969 421.578 Td [(T)]TJ +/F147 9.9626 Tf 333.969 421.578 Td [(T)]TJ ET q 1 0 0 1 339.827 421.777 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 342.966 421.578 Td [(vect)]TJ +/F147 9.9626 Tf 342.966 421.578 Td [(vect)]TJ ET q 1 0 0 1 364.515 421.777 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 367.653 421.578 Td [(type)]TJ +/F147 9.9626 Tf 367.653 421.578 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 391.683 421.578 Tm [(containing)-306(numbers)-306(of)]TJ 1 0 0 1 175.611 409.623 Tm [(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -14326,28 +14335,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.52 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(vector)]TJ/F78 9.9626 Tf 173.891 0 Td [(y)]TJ/F84 9.9626 Tf 5.106 0 Td [(.)]TJ -164.611 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 1.02 0 0 1 175.611 342.199 Tm [(Speci\002ed)-306(as:)-425(an)-306(object)-306(of)-306(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 314.513 342.199 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 314.513 342.199 Tm [(psb)]TJ ET q 1 0 0 1 330.831 342.398 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 333.969 342.199 Td [(T)]TJ +/F147 9.9626 Tf 333.969 342.199 Td [(T)]TJ ET q 1 0 0 1 339.827 342.398 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 342.966 342.199 Td [(vect)]TJ +/F147 9.9626 Tf 342.966 342.199 Td [(vect)]TJ ET q 1 0 0 1 364.515 342.398 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 367.653 342.199 Td [(type)]TJ +/F147 9.9626 Tf 367.653 342.199 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 391.683 342.199 Tm [(containing)-306(numbers)-306(of)]TJ 1 0 0 1 175.611 330.244 Tm [(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -14366,27 +14375,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 263.02 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 262.82 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 262.82 Td [(desc)]TJ ET q 1 0 0 1 348.86 263.02 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 262.82 Td [(type)]TJ +/F147 9.9626 Tf 351.998 262.82 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -222.214 -19.602 Td [(\003ag)]TJ 0 g 0 G -/F84 9.9626 Tf 0.994 0 0 1 172.294 243.218 Tm [(check)-252(if)-252(any)-252(of)-251(the)]TJ/F78 9.9626 Tf 1 0 0 1 254.535 243.218 Tm [(y)]TJ/F192 10.3811 Tf 5.231 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)-290(=)]TJ/F84 9.9626 Tf 0.994 0 0 1 285.074 243.218 Tm [(0,)-252(and)-252(in)-252(case)-252(r)19(eturns)-252(err)18(or)-252(halting)-252(the)-252(computa-)]TJ 1 0 0 1 175.611 231.262 Tm [(tion.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 40.677 0 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -108.662 -11.955 Td [(Speci\002ed)-250(as:)-310(the)-250(logical)-250(value)]TJ/F145 9.9626 Tf 132.133 0 Td [(flag)]TJ +/F84 9.9626 Tf 0.994 0 0 1 172.294 243.218 Tm [(check)-252(if)-252(any)-252(of)-251(the)]TJ/F78 9.9626 Tf 1 0 0 1 254.535 243.218 Tm [(y)]TJ/F197 10.3811 Tf 5.231 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)-290(=)]TJ/F84 9.9626 Tf 0.994 0 0 1 285.074 243.218 Tm [(0,)-252(and)-252(in)-252(case)-252(r)19(eturns)-252(err)18(or)-252(halting)-252(the)-252(computa-)]TJ 1 0 0 1 175.611 231.262 Tm [(tion.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 40.677 0 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -108.662 -11.955 Td [(Speci\002ed)-250(as:)-310(the)-250(logical)-250(value)]TJ/F147 9.9626 Tf 132.133 0 Td [(flag)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -14405,7 +14414,7 @@ ET endstream endobj -1366 0 obj +1367 0 obj << /Length 1343 >> @@ -14415,28 +14424,28 @@ stream BT /F84 9.9626 Tf 0.98 0 0 1 124.802 706.129 Tm [(Speci\002ed)-240(as:)-309(an)-240(object)-240(of)-240(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 253.899 706.129 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 253.899 706.129 Tm [(psb)]TJ ET q 1 0 0 1 270.218 706.328 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 273.356 706.129 Td [(T)]TJ +/F147 9.9626 Tf 273.356 706.129 Td [(T)]TJ ET q 1 0 0 1 279.214 706.328 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 282.352 706.129 Td [(vect)]TJ +/F147 9.9626 Tf 282.352 706.129 Td [(vect)]TJ ET q 1 0 0 1 303.901 706.328 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 307.039 706.129 Td [(type)]TJ +/F147 9.9626 Tf 307.039 706.129 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 0.98 0 0 1 330.304 706.129 Tm [(containing)-240(numbers)-240(of)-240(the)]TJ 1 0 0 1 124.802 694.174 Tm [(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -14454,9 +14463,9 @@ ET endstream endobj -1375 0 obj +1376 0 obj << -/Length 7612 +/Length 7704 >> stream 0 g 0 G @@ -14469,7 +14478,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 207.803 706.129 Td [(geinv)-250(\227)-250(Entrywise)-250(Inversion)]TJ/F84 9.9626 Tf -57.407 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(entrywise)-250(inverse)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 252.096 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)-250(puts)-250(it)-250(into)]TJ/F78 9.9626 Tf 69.952 0 Td [(y)]TJ/F84 9.9626 Tf -184.093 -18.334 Td [(/)]TJ/F190 10.3811 Tf 9.054 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(1)-12(/)]TJ/F78 9.9626 Tf 11.562 0 Td [(x)]TJ/F192 10.3811 Tf 5.329 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ/F145 9.9626 Tf -181.058 -18.334 Td [(psb_geinv\050x,)]TJ +/F75 11.9552 Tf 207.803 706.129 Td [(geinv)-250(\227)-250(Entrywise)-250(Inversion)]TJ/F84 9.9626 Tf -57.407 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(entrywise)-250(inverse)-250(of)-250(a)-250(vector)]TJ/F78 9.9626 Tf 252.096 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(and)-250(puts)-250(it)-250(into)]TJ/F78 9.9626 Tf 69.952 0 Td [(y)]TJ -189.348 -18.334 Td [(y)]TJ/F197 10.3811 Tf 5.23 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.041 0 Td [(\040)]TJ/F84 9.9626 Tf 13.273 0 Td [(1)-13(/)]TJ/F78 9.9626 Tf 11.562 0 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 4.15 0 Td [(.)]TJ/F147 9.9626 Tf -186.314 -18.334 Td [(psb_geinv\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(y,)]TJ @@ -14549,28 +14558,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(dense)-250(vector)]TJ/F78 9.9626 Tf 174.059 0 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ -164.321 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 175.611 434.356 Tm [(Speci\002ed)-306(as:)-425(an)-306(object)-306(of)-306(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 314.513 434.356 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 314.513 434.356 Tm [(psb)]TJ ET q 1 0 0 1 330.831 434.555 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 333.969 434.356 Td [(T)]TJ +/F147 9.9626 Tf 333.969 434.356 Td [(T)]TJ ET q 1 0 0 1 339.827 434.555 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 342.966 434.356 Td [(vect)]TJ +/F147 9.9626 Tf 342.966 434.356 Td [(vect)]TJ ET q 1 0 0 1 364.515 434.555 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 367.653 434.356 Td [(type)]TJ +/F147 9.9626 Tf 367.653 434.356 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 391.683 434.356 Tm [(containing)-306(numbers)-306(of)]TJ 1 0 0 1 175.611 422.401 Tm [(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -14589,27 +14598,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 132.243 0 Td [(psb)]TJ +/F147 9.9626 Tf 132.243 0 Td [(psb)]TJ ET q 1 0 0 1 324.173 356.288 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 327.311 356.088 Td [(desc)]TJ +/F147 9.9626 Tf 327.311 356.088 Td [(desc)]TJ ET q 1 0 0 1 348.86 356.288 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 351.998 356.088 Td [(type)]TJ +/F147 9.9626 Tf 351.998 356.088 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -222.214 -18.491 Td [(\003ag)]TJ 0 g 0 G -/F84 9.9626 Tf 0.993 0 0 1 172.294 337.597 Tm [(check)-252(if)-252(any)-252(of)-252(the)]TJ/F78 9.9626 Tf 1 0 0 1 254.633 337.597 Tm [(x)]TJ/F192 10.3811 Tf 5.329 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)-290(=)]TJ/F84 9.9626 Tf 0.993 0 0 1 285.269 337.597 Tm [(0,)-252(and)-252(in)-252(case)-252(r)18(eturns)-252(err)18(or)-252(halting)-252(the)-252(computa-)]TJ 1 0 0 1 175.611 325.642 Tm [(tion.)]TJ 0 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 40.677 0 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -108.662 -11.955 Td [(Speci\002ed)-250(as:)-310(the)-250(logical)-250(value)]TJ/F145 9.9626 Tf 132.133 0 Td [(flag)]TJ +/F84 9.9626 Tf 0.993 0 0 1 172.294 337.597 Tm [(check)-252(if)-252(any)-252(of)-252(the)]TJ/F78 9.9626 Tf 1 0 0 1 254.633 337.597 Tm [(x)]TJ/F197 10.3811 Tf 5.329 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)-290(=)]TJ/F84 9.9626 Tf 0.993 0 0 1 285.269 337.597 Tm [(0,)-252(and)-252(in)-252(case)-252(r)18(eturns)-252(err)18(or)-252(halting)-252(the)-252(computa-)]TJ 1 0 0 1 175.611 325.642 Tm [(tion.)]TJ 0 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 40.677 0 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -108.662 -11.955 Td [(Speci\002ed)-250(as:)-310(the)-250(logical)-250(value)]TJ/F147 9.9626 Tf 132.133 0 Td [(flag)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=)]TJ 0 g 0 G @@ -14622,28 +14631,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.52 0 Td [(the)-250(local)-250(portion)-250(of)-250(r)18(esult)-250(submatrix)]TJ/F78 9.9626 Tf 160.85 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -151.669 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ 0.98 0 0 1 175.611 204.972 Tm [(Speci\002ed)-240(as:)-309(an)-240(object)-240(of)-240(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 304.709 204.972 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 304.709 204.972 Tm [(psb)]TJ ET q 1 0 0 1 321.027 205.171 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 324.166 204.972 Td [(T)]TJ +/F147 9.9626 Tf 324.166 204.972 Td [(T)]TJ ET q 1 0 0 1 330.023 205.171 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 333.162 204.972 Td [(vect)]TJ +/F147 9.9626 Tf 333.162 204.972 Td [(vect)]TJ ET q 1 0 0 1 354.711 205.171 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 357.849 204.972 Td [(type)]TJ +/F147 9.9626 Tf 357.849 204.972 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 0.98 0 0 1 381.113 204.972 Tm [(containing)-240(numbers)-240(of)-240(the)]TJ 1 0 0 1 175.611 193.017 Tm [(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -14661,7 +14670,7 @@ ET endstream endobj -1381 0 obj +1382 0 obj << /Length 655 >> @@ -14681,7 +14690,7 @@ ET endstream endobj -1278 0 obj +1279 0 obj << /Type /ObjStm /N 100 @@ -14689,26 +14698,26 @@ endobj /Length 13026 >> stream -1274 0 1271 148 1272 293 1276 440 264 498 1277 555 1273 612 1282 734 1279 882 1280 1027 -1284 1174 268 1233 1286 1291 1281 1349 1293 1486 1287 1652 1288 1799 1289 1944 1290 2086 1295 2233 -272 2291 1296 2348 1297 2406 1298 2465 1299 2524 1292 2582 1309 2733 1291 2935 1301 3082 1302 3226 -1303 3372 1304 3519 1305 3670 1306 3821 1307 3972 1311 4119 1308 4178 1315 4315 1312 4454 1317 4599 -276 4657 1318 4714 1314 4772 1326 4923 1313 5116 1319 5264 1320 5408 1321 5555 1322 5702 1323 5845 -1324 5992 1328 6137 1325 6196 1332 6333 1329 6481 1330 6627 1334 6773 1331 6831 1343 6953 1335 7146 -1336 7289 1337 7434 1338 7577 1339 7722 1340 7869 1341 8013 1345 8160 280 8219 1346 8277 1342 8336 -1348 8472 1350 8590 1347 8648 1360 8729 1352 8904 1353 9047 1354 9192 1355 9335 1356 9480 1362 9627 -284 9686 1363 9744 1359 9803 1365 9939 1357 10087 1358 10231 1367 10378 1364 10436 1374 10531 1368 10706 -1369 10847 1370 10992 1371 11139 1372 11283 1376 11430 288 11489 1377 11547 1373 11606 1380 11742 1378 11881 -% 1274 0 obj +1275 0 1272 148 1273 293 1277 440 264 498 1278 555 1274 612 1283 734 1280 882 1281 1027 +1285 1174 268 1233 1287 1291 1282 1349 1294 1486 1288 1652 1289 1799 1290 1944 1291 2086 1296 2233 +272 2291 1297 2348 1298 2406 1299 2465 1300 2524 1293 2582 1310 2733 1292 2935 1302 3082 1303 3226 +1304 3372 1305 3519 1306 3670 1307 3821 1308 3972 1312 4119 1309 4178 1316 4315 1313 4454 1318 4599 +276 4657 1319 4714 1315 4772 1327 4923 1314 5116 1320 5264 1321 5408 1322 5555 1323 5702 1324 5845 +1325 5992 1329 6137 1326 6196 1333 6333 1330 6481 1331 6627 1335 6773 1332 6831 1344 6953 1336 7146 +1337 7289 1338 7434 1339 7577 1340 7722 1341 7869 1342 8013 1346 8160 280 8219 1347 8277 1343 8336 +1349 8472 1351 8590 1348 8648 1361 8729 1353 8904 1354 9047 1355 9192 1356 9335 1357 9480 1363 9627 +284 9686 1364 9744 1360 9803 1366 9939 1358 10087 1359 10231 1368 10378 1365 10436 1375 10531 1369 10706 +1370 10847 1371 10992 1372 11139 1373 11283 1377 11430 288 11489 1378 11547 1374 11606 1381 11742 1379 11881 +% 1275 0 obj << /Type /Page -/Contents 1275 0 R -/Resources 1273 0 R +/Contents 1276 0 R +/Resources 1274 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1244 0 R -/Annots [ 1271 0 R 1272 0 R ] +/Parent 1245 0 R +/Annots [ 1272 0 R 1273 0 R ] >> -% 1271 0 obj +% 1272 0 obj << /Type /Annot /Subtype /Link @@ -14716,7 +14725,7 @@ stream /Rect [256.048 340.341 333.567 352.401] /A << /S /GoTo /D (spdata) >> >> -% 1272 0 obj +% 1273 0 obj << /Type /Annot /Subtype /Link @@ -14724,33 +14733,33 @@ stream /Rect [256.048 272.595 323.106 284.655] /A << /S /GoTo /D (descdata) >> >> -% 1276 0 obj +% 1277 0 obj << -/D [1274 0 R /XYZ 98.895 753.953 null] +/D [1275 0 R /XYZ 98.895 753.953 null] >> % 264 0 obj << -/D [1274 0 R /XYZ 99.895 716.092 null] +/D [1275 0 R /XYZ 99.895 716.092 null] >> -% 1277 0 obj +% 1278 0 obj << -/D [1274 0 R /XYZ 99.895 517.78 null] +/D [1275 0 R /XYZ 99.895 517.78 null] >> -% 1273 0 obj +% 1274 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1282 0 obj +% 1283 0 obj << /Type /Page -/Contents 1283 0 R -/Resources 1281 0 R +/Contents 1284 0 R +/Resources 1282 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1244 0 R -/Annots [ 1279 0 R 1280 0 R ] +/Parent 1245 0 R +/Annots [ 1280 0 R 1281 0 R ] >> -% 1279 0 obj +% 1280 0 obj << /Type /Annot /Subtype /Link @@ -14758,7 +14767,7 @@ stream /Rect [306.858 340.341 384.376 352.401] /A << /S /GoTo /D (spdata) >> >> -% 1280 0 obj +% 1281 0 obj << /Type /Annot /Subtype /Link @@ -14766,33 +14775,33 @@ stream /Rect [306.858 272.595 373.916 284.655] /A << /S /GoTo /D (descdata) >> >> -% 1284 0 obj +% 1285 0 obj << -/D [1282 0 R /XYZ 149.705 753.953 null] +/D [1283 0 R /XYZ 149.705 753.953 null] >> % 268 0 obj << -/D [1282 0 R /XYZ 150.705 716.092 null] +/D [1283 0 R /XYZ 150.705 716.092 null] >> -% 1286 0 obj +% 1287 0 obj << -/D [1282 0 R /XYZ 150.705 517.78 null] +/D [1283 0 R /XYZ 150.705 517.78 null] >> -% 1281 0 obj +% 1282 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F243 1285 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F241 1286 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1293 0 obj +% 1294 0 obj << /Type /Page -/Contents 1294 0 R -/Resources 1292 0 R +/Contents 1295 0 R +/Resources 1293 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1300 0 R -/Annots [ 1287 0 R 1288 0 R 1289 0 R 1290 0 R ] +/Parent 1301 0 R +/Annots [ 1288 0 R 1289 0 R 1290 0 R 1291 0 R ] >> -% 1287 0 obj +% 1288 0 obj << /Type /Annot /Subtype /Link @@ -14800,7 +14809,7 @@ stream /Rect [378.159 277.323 390.114 289.383] /A << /S /GoTo /D (table.12) >> >> -% 1288 0 obj +% 1289 0 obj << /Type /Annot /Subtype /Link @@ -14808,7 +14817,7 @@ stream /Rect [256.048 208.877 333.567 220.936] /A << /S /GoTo /D (spdata) >> >> -% 1289 0 obj +% 1290 0 obj << /Type /Annot /Subtype /Link @@ -14816,7 +14825,7 @@ stream /Rect [368.549 140.43 444.603 152.49] /A << /S /GoTo /D (vdata) >> >> -% 1290 0 obj +% 1291 0 obj << /Type /Annot /Subtype /Link @@ -14824,45 +14833,45 @@ stream /Rect [329.477 128.475 341.581 140.535] /A << /S /GoTo /D (table.12) >> >> -% 1295 0 obj +% 1296 0 obj << -/D [1293 0 R /XYZ 98.895 753.953 null] +/D [1294 0 R /XYZ 98.895 753.953 null] >> % 272 0 obj << -/D [1293 0 R /XYZ 99.895 716.092 null] ->> -% 1296 0 obj -<< -/D [1293 0 R /XYZ 239.918 674.17 null] +/D [1294 0 R /XYZ 99.895 716.092 null] >> % 1297 0 obj << -/D [1293 0 R /XYZ 237.121 654.041 null] +/D [1294 0 R /XYZ 239.918 674.17 null] >> % 1298 0 obj << -/D [1293 0 R /XYZ 236.383 633.911 null] +/D [1294 0 R /XYZ 237.121 654.041 null] >> % 1299 0 obj << -/D [1293 0 R /XYZ 99.895 447.252 null] +/D [1294 0 R /XYZ 236.383 633.911 null] >> -% 1292 0 obj +% 1300 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F147 1157 0 R /F192 942 0 R /F145 940 0 R >> +/D [1294 0 R /XYZ 99.895 447.252 null] +>> +% 1293 0 obj +<< +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F151 1158 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1309 0 obj +% 1310 0 obj << /Type /Page -/Contents 1310 0 R -/Resources 1308 0 R +/Contents 1311 0 R +/Resources 1309 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1300 0 R -/Annots [ 1291 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R ] +/Parent 1301 0 R +/Annots [ 1292 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R ] >> -% 1291 0 obj +% 1292 0 obj << /Type /Annot /Subtype /Link @@ -14870,7 +14879,7 @@ stream /Rect [428.968 654.503 440.924 666.562] /A << /S /GoTo /D (table.12) >> >> -% 1301 0 obj +% 1302 0 obj << /Type /Annot /Subtype /Link @@ -14878,7 +14887,7 @@ stream /Rect [419.358 588.085 495.412 600.145] /A << /S /GoTo /D (vdata) >> >> -% 1302 0 obj +% 1303 0 obj << /Type /Annot /Subtype /Link @@ -14886,7 +14895,7 @@ stream /Rect [380.469 576.13 392.583 588.189] /A << /S /GoTo /D (table.12) >> >> -% 1303 0 obj +% 1304 0 obj << /Type /Annot /Subtype /Link @@ -14894,7 +14903,7 @@ stream /Rect [306.858 497.757 373.916 509.817] /A << /S /GoTo /D (descdata) >> >> -% 1304 0 obj +% 1305 0 obj << /Type /Annot /Subtype /Link @@ -14902,7 +14911,7 @@ stream /Rect [388.949 460.563 395.923 472.623] /A << /S /GoTo /D (equation.4.1) >> >> -% 1305 0 obj +% 1306 0 obj << /Type /Annot /Subtype /Link @@ -14910,7 +14919,7 @@ stream /Rect [387.295 445.951 394.269 458.011] /A << /S /GoTo /D (equation.4.2) >> >> -% 1306 0 obj +% 1307 0 obj << /Type /Annot /Subtype /Link @@ -14918,7 +14927,7 @@ stream /Rect [387.843 431.339 394.817 443.399] /A << /S /GoTo /D (equation.4.3) >> >> -% 1307 0 obj +% 1308 0 obj << /Type /Annot /Subtype /Link @@ -14926,25 +14935,25 @@ stream /Rect [253.329 189.579 265.284 201.639] /A << /S /GoTo /D (table.12) >> >> -% 1311 0 obj +% 1312 0 obj << -/D [1309 0 R /XYZ 149.705 753.953 null] +/D [1310 0 R /XYZ 149.705 753.953 null] >> -% 1308 0 obj +% 1309 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F147 1157 0 R /F78 686 0 R /F145 940 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F151 1158 0 R /F78 686 0 R /F147 941 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1315 0 obj +% 1316 0 obj << /Type /Page -/Contents 1316 0 R -/Resources 1314 0 R +/Contents 1317 0 R +/Resources 1315 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1300 0 R -/Annots [ 1312 0 R ] +/Parent 1301 0 R +/Annots [ 1313 0 R ] >> -% 1312 0 obj +% 1313 0 obj << /Type /Annot /Subtype /Link @@ -14952,33 +14961,33 @@ stream /Rect [378.159 116.52 390.114 128.58] /A << /S /GoTo /D (table.13) >> >> -% 1317 0 obj +% 1318 0 obj << -/D [1315 0 R /XYZ 98.895 753.953 null] +/D [1316 0 R /XYZ 98.895 753.953 null] >> % 276 0 obj << -/D [1315 0 R /XYZ 99.895 716.092 null] +/D [1316 0 R /XYZ 99.895 716.092 null] >> -% 1318 0 obj +% 1319 0 obj << -/D [1315 0 R /XYZ 99.895 268.704 null] +/D [1316 0 R /XYZ 99.895 268.704 null] >> -% 1314 0 obj +% 1315 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F147 1157 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F151 1158 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1326 0 obj +% 1327 0 obj << /Type /Page -/Contents 1327 0 R -/Resources 1325 0 R +/Contents 1328 0 R +/Resources 1326 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1300 0 R -/Annots [ 1313 0 R 1319 0 R 1320 0 R 1321 0 R 1322 0 R 1323 0 R 1324 0 R ] +/Parent 1301 0 R +/Annots [ 1314 0 R 1320 0 R 1321 0 R 1322 0 R 1323 0 R 1324 0 R 1325 0 R ] >> -% 1313 0 obj +% 1314 0 obj << /Type /Annot /Subtype /Link @@ -14986,7 +14995,7 @@ stream /Rect [355.953 654.503 362.927 666.562] /A << /S /GoTo /D (section.3) >> >> -% 1319 0 obj +% 1320 0 obj << /Type /Annot /Subtype /Link @@ -14994,7 +15003,7 @@ stream /Rect [419.358 586.032 495.412 598.092] /A << /S /GoTo /D (vdata) >> >> -% 1320 0 obj +% 1321 0 obj << /Type /Annot /Subtype /Link @@ -15002,7 +15011,7 @@ stream /Rect [380.286 574.077 392.391 586.136] /A << /S /GoTo /D (table.13) >> >> -% 1321 0 obj +% 1322 0 obj << /Type /Annot /Subtype /Link @@ -15010,7 +15019,7 @@ stream /Rect [428.968 493.651 440.924 505.711] /A << /S /GoTo /D (table.13) >> >> -% 1322 0 obj +% 1323 0 obj << /Type /Annot /Subtype /Link @@ -15018,7 +15027,7 @@ stream /Rect [419.358 425.181 495.412 437.24] /A << /S /GoTo /D (vdata) >> >> -% 1323 0 obj +% 1324 0 obj << /Type /Annot /Subtype /Link @@ -15026,7 +15035,7 @@ stream /Rect [380.469 413.225 392.583 425.285] /A << /S /GoTo /D (table.13) >> >> -% 1324 0 obj +% 1325 0 obj << /Type /Annot /Subtype /Link @@ -15034,25 +15043,25 @@ stream /Rect [306.858 332.8 373.916 344.859] /A << /S /GoTo /D (descdata) >> >> -% 1328 0 obj +% 1329 0 obj << -/D [1326 0 R /XYZ 149.705 753.953 null] +/D [1327 0 R /XYZ 149.705 753.953 null] >> -% 1325 0 obj +% 1326 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F145 940 0 R /F147 1157 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F147 941 0 R /F151 1158 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1332 0 obj +% 1333 0 obj << /Type /Page -/Contents 1333 0 R -/Resources 1331 0 R +/Contents 1334 0 R +/Resources 1332 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1300 0 R -/Annots [ 1329 0 R 1330 0 R ] +/Parent 1301 0 R +/Annots [ 1330 0 R 1331 0 R ] >> -% 1329 0 obj +% 1330 0 obj << /Type /Annot /Subtype /Link @@ -15060,7 +15069,7 @@ stream /Rect [149.34 410.079 161.295 419.489] /A << /S /GoTo /D (table.13) >> >> -% 1330 0 obj +% 1331 0 obj << /Type /Annot /Subtype /Link @@ -15068,25 +15077,25 @@ stream /Rect [202.52 228.102 214.475 240.161] /A << /S /GoTo /D (table.13) >> >> -% 1334 0 obj +% 1335 0 obj << -/D [1332 0 R /XYZ 98.895 753.953 null] +/D [1333 0 R /XYZ 98.895 753.953 null] >> -% 1331 0 obj +% 1332 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F78 686 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1343 0 obj +% 1344 0 obj << /Type /Page -/Contents 1344 0 R -/Resources 1342 0 R +/Contents 1345 0 R +/Resources 1343 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1300 0 R -/Annots [ 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R ] +/Parent 1301 0 R +/Annots [ 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R 1342 0 R ] >> -% 1335 0 obj +% 1336 0 obj << /Type /Annot /Subtype /Link @@ -15094,7 +15103,7 @@ stream /Rect [313.516 417.772 389.57 429.832] /A << /S /GoTo /D (vdata) >> >> -% 1336 0 obj +% 1337 0 obj << /Type /Annot /Subtype /Link @@ -15102,7 +15111,7 @@ stream /Rect [275.366 405.817 282.34 417.877] /A << /S /GoTo /D (table.2) >> >> -% 1337 0 obj +% 1338 0 obj << /Type /Annot /Subtype /Link @@ -15110,7 +15119,7 @@ stream /Rect [313.516 338.393 389.57 350.453] /A << /S /GoTo /D (vdata) >> >> -% 1338 0 obj +% 1339 0 obj << /Type /Annot /Subtype /Link @@ -15118,7 +15127,7 @@ stream /Rect [275.366 326.438 282.34 338.498] /A << /S /GoTo /D (table.2) >> >> -% 1339 0 obj +% 1340 0 obj << /Type /Annot /Subtype /Link @@ -15126,7 +15135,7 @@ stream /Rect [306.858 259.015 373.916 271.074] /A << /S /GoTo /D (descdata) >> >> -% 1340 0 obj +% 1341 0 obj << /Type /Annot /Subtype /Link @@ -15134,7 +15143,7 @@ stream /Rect [303.712 171.988 379.767 184.048] /A << /S /GoTo /D (vdata) >> >> -% 1341 0 obj +% 1342 0 obj << /Type /Annot /Subtype /Link @@ -15142,50 +15151,50 @@ stream /Rect [277.368 160.033 289.324 172.093] /A << /S /GoTo /D (table.14) >> >> -% 1345 0 obj +% 1346 0 obj << -/D [1343 0 R /XYZ 149.705 753.953 null] +/D [1344 0 R /XYZ 149.705 753.953 null] >> % 280 0 obj << -/D [1343 0 R /XYZ 150.705 716.092 null] +/D [1344 0 R /XYZ 150.705 716.092 null] >> -% 1346 0 obj +% 1347 0 obj << -/D [1343 0 R /XYZ 150.705 560.161 null] +/D [1344 0 R /XYZ 150.705 560.161 null] >> -% 1342 0 obj +% 1343 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1348 0 obj +% 1349 0 obj << /Type /Page -/Contents 1349 0 R -/Resources 1347 0 R +/Contents 1350 0 R +/Resources 1348 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1351 0 R +/Parent 1352 0 R >> -% 1350 0 obj +% 1351 0 obj << -/D [1348 0 R /XYZ 98.895 753.953 null] +/D [1349 0 R /XYZ 98.895 753.953 null] >> -% 1347 0 obj +% 1348 0 obj << /Font << /F84 687 0 R /F75 685 0 R >> /ProcSet [ /PDF /Text ] >> -% 1360 0 obj +% 1361 0 obj << /Type /Page -/Contents 1361 0 R -/Resources 1359 0 R +/Contents 1362 0 R +/Resources 1360 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1351 0 R -/Annots [ 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R ] +/Parent 1352 0 R +/Annots [ 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R ] >> -% 1352 0 obj +% 1353 0 obj << /Type /Annot /Subtype /Link @@ -15193,7 +15202,7 @@ stream /Rect [313.516 417.772 389.57 429.832] /A << /S /GoTo /D (vdata) >> >> -% 1353 0 obj +% 1354 0 obj << /Type /Annot /Subtype /Link @@ -15201,7 +15210,7 @@ stream /Rect [275.366 405.817 282.34 417.877] /A << /S /GoTo /D (table.2) >> >> -% 1354 0 obj +% 1355 0 obj << /Type /Annot /Subtype /Link @@ -15209,7 +15218,7 @@ stream /Rect [313.516 338.393 389.57 350.453] /A << /S /GoTo /D (vdata) >> >> -% 1355 0 obj +% 1356 0 obj << /Type /Annot /Subtype /Link @@ -15217,7 +15226,7 @@ stream /Rect [275.366 326.438 282.34 338.498] /A << /S /GoTo /D (table.2) >> >> -% 1356 0 obj +% 1357 0 obj << /Type /Annot /Subtype /Link @@ -15225,33 +15234,33 @@ stream /Rect [306.858 259.015 373.916 271.074] /A << /S /GoTo /D (descdata) >> >> -% 1362 0 obj +% 1363 0 obj << -/D [1360 0 R /XYZ 149.705 753.953 null] +/D [1361 0 R /XYZ 149.705 753.953 null] >> % 284 0 obj << -/D [1360 0 R /XYZ 150.705 716.092 null] +/D [1361 0 R /XYZ 150.705 716.092 null] >> -% 1363 0 obj +% 1364 0 obj << -/D [1360 0 R /XYZ 150.705 560.161 null] +/D [1361 0 R /XYZ 150.705 560.161 null] >> -% 1359 0 obj +% 1360 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1365 0 obj +% 1366 0 obj << /Type /Page -/Contents 1366 0 R -/Resources 1364 0 R +/Contents 1367 0 R +/Resources 1365 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1351 0 R -/Annots [ 1357 0 R 1358 0 R ] +/Parent 1352 0 R +/Annots [ 1358 0 R 1359 0 R ] >> -% 1357 0 obj +% 1358 0 obj << /Type /Annot /Subtype /Link @@ -15259,7 +15268,7 @@ stream /Rect [252.903 702.323 328.957 714.383] /A << /S /GoTo /D (vdata) >> >> -% 1358 0 obj +% 1359 0 obj << /Type /Annot /Subtype /Link @@ -15267,25 +15276,25 @@ stream /Rect [226.559 690.368 238.514 702.428] /A << /S /GoTo /D (table.14) >> >> -% 1367 0 obj +% 1368 0 obj << -/D [1365 0 R /XYZ 98.895 753.953 null] +/D [1366 0 R /XYZ 98.895 753.953 null] >> -% 1364 0 obj +% 1365 0 obj << -/Font << /F84 687 0 R /F145 940 0 R /F75 685 0 R >> +/Font << /F84 687 0 R /F147 941 0 R /F75 685 0 R >> /ProcSet [ /PDF /Text ] >> -% 1374 0 obj +% 1375 0 obj << /Type /Page -/Contents 1375 0 R -/Resources 1373 0 R +/Contents 1376 0 R +/Resources 1374 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1351 0 R -/Annots [ 1368 0 R 1369 0 R 1370 0 R 1371 0 R 1372 0 R ] +/Parent 1352 0 R +/Annots [ 1369 0 R 1370 0 R 1371 0 R 1372 0 R 1373 0 R ] >> -% 1368 0 obj +% 1369 0 obj << /Type /Annot /Subtype /Link @@ -15293,7 +15302,7 @@ stream /Rect [313.516 430.55 389.57 442.61] /A << /S /GoTo /D (vdata) >> >> -% 1369 0 obj +% 1370 0 obj << /Type /Annot /Subtype /Link @@ -15301,7 +15310,7 @@ stream /Rect [275.366 418.595 282.34 430.655] /A << /S /GoTo /D (table.2) >> >> -% 1370 0 obj +% 1371 0 obj << /Type /Annot /Subtype /Link @@ -15309,7 +15318,7 @@ stream /Rect [306.858 352.283 373.916 364.342] /A << /S /GoTo /D (descdata) >> >> -% 1371 0 obj +% 1372 0 obj << /Type /Annot /Subtype /Link @@ -15317,7 +15326,7 @@ stream /Rect [303.712 201.166 379.767 213.226] /A << /S /GoTo /D (vdata) >> >> -% 1372 0 obj +% 1373 0 obj << /Type /Annot /Subtype /Link @@ -15325,33 +15334,33 @@ stream /Rect [277.368 189.211 289.324 201.271] /A << /S /GoTo /D (table.16) >> >> -% 1376 0 obj +% 1377 0 obj << -/D [1374 0 R /XYZ 149.705 753.953 null] +/D [1375 0 R /XYZ 149.705 753.953 null] >> % 288 0 obj << -/D [1374 0 R /XYZ 150.705 716.092 null] +/D [1375 0 R /XYZ 150.705 716.092 null] >> -% 1377 0 obj +% 1378 0 obj << -/D [1374 0 R /XYZ 150.705 566.828 null] +/D [1375 0 R /XYZ 150.705 566.828 null] >> -% 1373 0 obj +% 1374 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1380 0 obj +% 1381 0 obj << /Type /Page -/Contents 1381 0 R -/Resources 1379 0 R +/Contents 1382 0 R +/Resources 1380 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1351 0 R -/Annots [ 1378 0 R ] +/Parent 1352 0 R +/Annots [ 1379 0 R ] >> -% 1378 0 obj +% 1379 0 obj << /Type /Annot /Subtype /Link @@ -15362,7 +15371,7 @@ stream endstream endobj -1390 0 obj +1391 0 obj << /Length 6834 >> @@ -15377,7 +15386,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 201.825 706.129 Td [(halo)-250(\227)-250(Halo)-250(Data)-250(Communication)]TJ/F84 9.9626 Tf -51.429 -19.15 Td [(These)-250(subr)18(outines)-250(gathers)-250(the)-250(values)-250(of)-250(the)-250(halo)-250(elements:)]TJ/F78 9.9626 Tf 158.877 -25.014 Td [(x)]TJ/F190 10.3811 Tf 8.097 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F84 9.9626 Tf -180.651 -22.11 Td [(wher)18(e:)]TJ +/F75 11.9552 Tf 201.825 706.129 Td [(halo)-250(\227)-250(Halo)-250(Data)-250(Communication)]TJ/F84 9.9626 Tf -51.429 -19.15 Td [(These)-250(subr)18(outines)-250(gathers)-250(the)-250(values)-250(of)-250(the)-250(halo)-250(elements:)]TJ/F78 9.9626 Tf 158.877 -25.014 Td [(x)]TJ/F195 10.3811 Tf 8.097 0 Td [(\040)]TJ/F78 9.9626 Tf 13.567 0 Td [(x)]TJ/F84 9.9626 Tf -180.651 -22.11 Td [(wher)18(e:)]TJ 0 g 0 G /F78 9.9626 Tf 0.713 -20.212 Td [(x)]TJ 0 g 0 G @@ -15391,7 +15400,7 @@ q []0 d 0 J 0.398 w 0 0 m 184.337 0 l S Q BT -/F147 9.9626 Tf 236.494 587.758 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(,)]TJ/F78 9.9626 Tf 5.275 0 Td [(x)]TJ/F75 9.9626 Tf 110.131 0 Td [(Subroutine)]TJ +/F151 9.9626 Tf 236.494 587.758 Td [(a)]TJ/F84 9.9626 Tf 5.385 0 Td [(,)]TJ/F78 9.9626 Tf 5.275 0 Td [(x)]TJ/F75 9.9626 Tf 110.131 0 Td [(Subroutine)]TJ ET q 1 0 0 1 230.392 583.972 cm @@ -15445,7 +15454,7 @@ BT 0 g 0 G 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -127.572 -24.102 Td [(call)]TJ +/F147 9.9626 Tf -127.572 -24.102 Td [(call)]TJ 0 g 0 G [-525(psb_halo\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -15485,28 +15494,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 89.687 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -79.948 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ 0.98 0 0 1 175.611 348.623 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-248(an)-247(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 420.354 348.623 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 420.354 348.623 Tm [(psb)]TJ ET q 1 0 0 1 436.673 348.823 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 439.811 348.623 Td [(T)]TJ +/F147 9.9626 Tf 439.811 348.623 Td [(T)]TJ ET q 1 0 0 1 445.669 348.823 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 448.807 348.623 Td [(vect)]TJ +/F147 9.9626 Tf 448.807 348.623 Td [(vect)]TJ ET q 1 0 0 1 470.356 348.823 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 473.495 348.623 Td [(type)]TJ +/F147 9.9626 Tf 473.495 348.623 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.884 -11.955 Td [(containing)-250(numbers)-250(of)-250(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -15525,21 +15534,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 268.738 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 268.539 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 268.539 Td [(desc)]TJ ET q 1 0 0 1 384.755 268.738 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 268.539 Td [(type)]TJ +/F147 9.9626 Tf 387.893 268.539 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -15549,7 +15558,7 @@ BT 0 g 0 G /F75 9.9626 Tf -248.566 -20.309 Td [(data)]TJ 0 g 0 G -/F84 9.9626 Tf 24.349 0 Td [(index)-250(list)-250(selector)74(.)]TJ 0.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 0.98 0 0 1 175.611 144.236 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)75(.)-296(V)94(alues:)]TJ/F145 9.9626 Tf 1 0 0 1 309.544 144.236 Tm [(psb_comm_halo_)]TJ/F84 9.9626 Tf 0.98 0 0 1 382.769 144.236 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 385.21 144.236 Tm [(psb_comm_mov_)]TJ/F84 9.9626 Tf 0.98 0 0 1 453.204 144.236 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 457.658 144.236 Tm [(psb_comm_ext_)]TJ/F84 9.9626 Tf 0.98 0 0 1 525.652 144.236 Tm [(,)]TJ 0.98 0 0 1 175.611 132.281 Tm [(default:)]TJ/F145 9.9626 Tf 1 0 0 1 211.658 132.281 Tm [(psb_comm_halo_)]TJ/F84 9.9626 Tf 0.98 0 0 1 284.883 132.281 Tm [(.)-305(Chooses)-220(the)-221(index)-221(list)-220(on)-221(which)-220(to)-221(base)-221(the)-220(data)]TJ 1 0 0 1 175.611 120.326 Tm [(exchange.)]TJ +/F84 9.9626 Tf 24.349 0 Td [(index)-250(list)-250(selector)74(.)]TJ 0.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 0.98 0 0 1 175.611 144.236 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)75(.)-296(V)94(alues:)]TJ/F147 9.9626 Tf 1 0 0 1 309.544 144.236 Tm [(psb_comm_halo_)]TJ/F84 9.9626 Tf 0.98 0 0 1 382.769 144.236 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 385.21 144.236 Tm [(psb_comm_mov_)]TJ/F84 9.9626 Tf 0.98 0 0 1 453.204 144.236 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 457.658 144.236 Tm [(psb_comm_ext_)]TJ/F84 9.9626 Tf 0.98 0 0 1 525.652 144.236 Tm [(,)]TJ 0.98 0 0 1 175.611 132.281 Tm [(default:)]TJ/F147 9.9626 Tf 1 0 0 1 211.658 132.281 Tm [(psb_comm_halo_)]TJ/F84 9.9626 Tf 0.98 0 0 1 284.883 132.281 Tm [(.)-305(Chooses)-220(the)-221(index)-221(list)-220(on)-221(which)-220(to)-221(base)-221(the)-220(data)]TJ 1 0 0 1 175.611 120.326 Tm [(exchange.)]TJ 0 g 0 G 141.968 -29.888 Td [(60)]TJ 0 g 0 G @@ -15557,7 +15566,7 @@ ET endstream endobj -1397 0 obj +1398 0 obj << /Length 3211 >> @@ -15602,7 +15611,7 @@ BT 0 0 1 rg 0 0 1 RG [-276(3)]TJ 0 g 0 G - [(,)-283(parti-)]TJ 0.989 0 0 1 99.895 268.66 Tm [(tioned)-252(among)-253(two)-252(pr)18(ocesses)-252(as)-252(shown)-252(by)-253(the)-252(dashed)-252(line;)-252(the)-253(data)-252(distribution)]TJ 1.02 0 0 1 99.895 256.705 Tm [(is)-298(such)-299(that)-298(each)-298(pr)18(ocess)-299(will)-298(own)-298(32)-299(entries)-298(in)-298(the)-298(index)-299(space,)-311(with)-298(a)-299(halo)]TJ 1.02 0 0 1 99.895 244.75 Tm [(made)-312(of)-312(8)-312(entries)-312(placed)-312(at)-312(local)-312(indices)-312(33)-312(thr)17(ough)-312(40.)-504(If)-312(pr)17(ocess)-312(0)-312(assigns)]TJ 1.018 0 0 1 99.895 232.795 Tm [(an)-245(initial)-245(value)-246(of)-245(1)-245(to)-245(its)-245(entries)-246(i)1(n)-246(the)]TJ/F78 9.9626 Tf 1 0 0 1 273.331 232.795 Tm [(x)]TJ/F84 9.9626 Tf 1.018 0 0 1 281.023 232.795 Tm [(vector)73(,)-246(and)-245(pr)18(ocess)-245(1)-245(assigns)-246(a)-245(value)]TJ 1.02 0 0 1 99.895 220.84 Tm [(of)-277(2,)-285(then)-277(after)-277(a)-276(call)-277(to)]TJ/F145 9.9626 Tf 1 0 0 1 206.342 220.84 Tm [(psb_halo)]TJ/F84 9.9626 Tf 1.02 0 0 1 250.999 220.84 Tm [(the)-277(contents)-277(of)-277(the)-277(l)1(ocal)-277(vectors)-277(will)-277(be)-277(the)]TJ 1 0 0 1 99.895 208.885 Tm [(following:)]TJ + [(,)-283(parti-)]TJ 0.989 0 0 1 99.895 268.66 Tm [(tioned)-252(among)-253(two)-252(pr)18(ocesses)-252(as)-252(shown)-252(by)-253(the)-252(dashed)-252(line;)-252(the)-253(data)-252(distribution)]TJ 1.02 0 0 1 99.895 256.705 Tm [(is)-298(such)-299(that)-298(each)-298(pr)18(ocess)-299(will)-298(own)-298(32)-299(entries)-298(in)-298(the)-298(index)-299(space,)-311(with)-298(a)-299(halo)]TJ 1.02 0 0 1 99.895 244.75 Tm [(made)-312(of)-312(8)-312(entries)-312(placed)-312(at)-312(local)-312(indices)-312(33)-312(thr)17(ough)-312(40.)-504(If)-312(pr)17(ocess)-312(0)-312(assigns)]TJ 1.018 0 0 1 99.895 232.795 Tm [(an)-245(initial)-245(value)-246(of)-245(1)-245(to)-245(its)-245(entries)-246(i)1(n)-246(the)]TJ/F78 9.9626 Tf 1 0 0 1 273.331 232.795 Tm [(x)]TJ/F84 9.9626 Tf 1.018 0 0 1 281.023 232.795 Tm [(vector)73(,)-246(and)-245(pr)18(ocess)-245(1)-245(assigns)-246(a)-245(value)]TJ 1.02 0 0 1 99.895 220.84 Tm [(of)-277(2,)-285(then)-277(after)-277(a)-276(call)-277(to)]TJ/F147 9.9626 Tf 1 0 0 1 206.342 220.84 Tm [(psb_halo)]TJ/F84 9.9626 Tf 1.02 0 0 1 250.999 220.84 Tm [(the)-277(contents)-277(of)-277(the)-277(l)1(ocal)-277(vectors)-277(will)-277(be)-277(the)]TJ 1 0 0 1 99.895 208.885 Tm [(following:)]TJ 0 g 0 G 166.875 -118.447 Td [(61)]TJ 0 g 0 G @@ -15610,20 +15619,20 @@ ET endstream endobj -1393 0 obj +1394 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/try8x8.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 1401 0 R +/PTEX.InfoDict 1402 0 R /BBox [0 0 498 439] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 1402 0 R ->>/Font << /R8 1403 0 R/R10 1404 0 R>> +/R7 1403 0 R +>>/Font << /R8 1404 0 R/R10 1405 0 R>> >> /Length 3349 /Filter /FlateDecode @@ -15635,7 +15644,7 @@ U1 †¸úµ6ÔÉ–Oą¬ĚWbŕzSE 0¬ŕË®—ΨxÜł>P…U|ťúň¬Öhł>ÜÝâđ^đy˙ÔŽX<‰ď’<ÂÇfÔ1â@aĐMŠC5Ú˘"mZ˝!qVÖƢ4"{^›ëéŠĎúÜĐZĚČ&ŚĐĹLh=ébnh#ü©n¶BUĚ„&×]Ő ŹÝĹFS5Cg_ŹQUÍđÓ‚ČŻZŁ!ö˛{U5'"ýČCS5 žßŰćzÖćIż®+®÷ó'MŐ <Ďű«Ö†:%>A©Şfč\dđy׎X<™§úşv¬¸Ţˇ4U3đ<ďŻZęD ůpĄŞšˇťâłţ®±xOđuíXÉ×9/<ŠRUÍŔ‰ż|p+ŹqĄŞšˇł¨Áçý];bń$>žÖëÚ±âz?ŽŇTÍŔóĽżjm¨“~/žú[™ŻÄ<¸ë‘Ďú»vÄâÉ|Cú€‹‘Żs^x(ĄŞšá]ú€[!ÎúđS)MŐ ŢPĚďms=k_’} ×ONËĚęGd×XĄYgSjT3âÔr°-J#˛{Ë®ç_Ĺ¤Śąˇµ‘Mˇ‹™ĐzŇĹÜĐFřSÝl…Ş M®÷Ó[ÎĎźźĺůËăý¤†żő8šÇ÷‰<˙Ó”˙üúřýQ=ĆŹ×oĎ?~}üřĺzÖöüúχ˙eK}ŽăýÜň±ž_{üôCýôąĎŁüĐ>}Ą”:~ü<đóÄωź×§źżţĺíÝíýźšÇóë/ŹÎńéëżźßźvńv˙®Ýľk×ďÚeoë»öő]{Ţí·Ż??·~˘űCŢź#˛ÚaYďá÷…–aXŽí)Ăüă—÷'WŻűłęíăýźĽžkŕ®3Ô{ÎżţőÝ*źţđřÓ×Çßß˙ţ{Ü endstream endobj -1407 0 obj +1408 0 obj << /Filter /FlateDecode /Subtype /Type1C @@ -15694,7 +15703,7 @@ r §¶¦^<ÜŰrc¨Ż@vŚń6@ě>Éż]Wž$ź’‚Žňg]Qőď㎠yú˝%N»©”Ô­®ˇ˙ U…··OŔű›ÄëC’żđ\uĎĎnŢ_~ĺ¶ĎCđŔ ›*¤é%™4€Éóľ÷vÜýÉܢ%‰ٜ‹l0^2”«Ť›ĂFŚ~ 996®=ąŻ§­˝§/ą Ľ`đÍ/üvŕ Ípć0µ´e4:GŹŐ*đ­Ůîó,ŐČ-Ą%Ą|€ 4×TtĐuuúü$5Ą”…ۇ+ëJ\Ţf§o´Ë[qĽćÁŻń€C +đÓE€Ď'Ăl>Ž„hŕ,@Ń[hZßBÁAńľ˙¸Mrďë ňeJ}­×xsi@ŚBżť`Đ_ đö‡„łŔŁ‚)×y`mq»GÜÚÚúz’Ű˝břáŮňMŕ‚ć| Ët„Zű€®)ĐŠ ůŮĹ˝›čuµNŇÁŽc°©ŹpĘM”SWáo3„©°r#€«˝ĺ] a×5ÄéĘÍż+Wy{ę?q*>;^›Z9ëÚŐ —şyŢƇŒ¬pş‹€'óŃ‚ó\©h"Ő˛żk¶px”’¦ŃŘŞTŚŰŰRŕ)ú§°oŤÇ¤°„p!ČUKąÍťQě˙,…Kź endstream endobj -1408 0 obj +1409 0 obj << /Filter /FlateDecode /Subtype /Type1C @@ -15767,7 +15776,7 @@ k ŇOWk'T˛_Ž–Pŕiłě¤®¦$1R¸(Ďlç?Ŕ˙ń弣 endstream endobj -1411 0 obj +1412 0 obj << /Length 3049 >> @@ -15787,7 +15796,7 @@ ET endstream endobj -1418 0 obj +1419 0 obj << /Length 7845 >> @@ -15802,7 +15811,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 151.016 706.129 Td [(ovrl)-250(\227)-250(Overlap)-250(Update)]TJ/F84 9.9626 Tf -51.429 -18.964 Td [(These)-250(subr)18(outines)-250(applies)-250(an)-250(overlap)-250(operator)-250(to)-250(the)-250(input)-250(vector:)]TJ/F78 9.9626 Tf 154.826 -23.824 Td [(x)]TJ/F190 10.3811 Tf 8.098 0 Td [(\040)]TJ/F78 9.9626 Tf 13.497 0 Td [(Q)-42(x)]TJ/F84 9.9626 Tf -176.531 -21.014 Td [(wher)18(e:)]TJ +/F75 11.9552 Tf 151.016 706.129 Td [(ovrl)-250(\227)-250(Overlap)-250(Update)]TJ/F84 9.9626 Tf -51.429 -18.964 Td [(These)-250(subr)18(outines)-250(applies)-250(an)-250(overlap)-250(operator)-250(to)-250(the)-250(input)-250(vector:)]TJ/F78 9.9626 Tf 154.826 -23.824 Td [(x)]TJ/F195 10.3811 Tf 8.098 0 Td [(\040)]TJ/F78 9.9626 Tf 13.497 0 Td [(Q)-42(x)]TJ/F84 9.9626 Tf -176.531 -21.014 Td [(wher)18(e:)]TJ 0 g 0 G /F78 9.9626 Tf 0.712 -19.203 Td [(x)]TJ 0 g 0 G @@ -15867,7 +15876,7 @@ BT 0 g 0 G 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -127.572 -23.549 Td [(call)]TJ +/F147 9.9626 Tf -127.572 -23.549 Td [(call)]TJ 0 g 0 G [-525(psb_ovrl\050x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -15912,28 +15921,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(global)-250(dense)-250(matrix)]TJ/F78 9.9626 Tf 89.688 0 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -79.949 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ 0.98 0 0 1 124.802 349.291 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 349.291 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 349.291 Tm [(psb)]TJ ET q 1 0 0 1 385.864 349.49 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 349.291 Td [(T)]TJ +/F147 9.9626 Tf 389.002 349.291 Td [(T)]TJ ET q 1 0 0 1 394.86 349.49 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 349.291 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 349.291 Td [(vect)]TJ ET q 1 0 0 1 419.547 349.49 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 349.291 Td [(type)]TJ +/F147 9.9626 Tf 422.685 349.291 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.883 -11.955 Td [(containing)-250(numbers)-250(of)-250(type)-250(speci\002ed)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -15952,21 +15961,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 270.151 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 269.951 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 269.951 Td [(desc)]TJ ET q 1 0 0 1 333.945 270.151 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 269.951 Td [(type)]TJ +/F147 9.9626 Tf 337.084 269.951 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -16030,7 +16039,7 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 196.338 144.236 Td [(t)-25(y)-80(p)-25(e)]TJ/F192 10.3811 Tf 21.467 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ +/F78 9.9626 Tf 196.338 144.236 Td [(t)-25(y)-80(p)-25(e)]TJ/F197 10.3811 Tf 21.467 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ ET q 1 0 0 1 244.129 144.435 cm @@ -16052,7 +16061,7 @@ ET endstream endobj -1427 0 obj +1428 0 obj << /Length 5934 >> @@ -16098,7 +16107,7 @@ BT 0 0 1 rg 0 0 1 RG [-266(3)]TJ 0 g 0 G - [(;)-276(the)-266(data)-267(distributi)1(on)-267(is)-266(such)]TJ 1.009 0 0 1 150.705 293.676 Tm [(that)-247(each)-247(pr)18(ocess)-247(will)-247(own)-247(40)-247(entries)-247(in)-247(the)-247(index)-247(space,)-247(with)-247(an)-247(overlap)-247(of)-247(16)]TJ 1 0 0 1 150.705 281.72 Tm [(entries)-250(placed)-251(at)-250(local)-251(indices)-250(25)-251(thr)18(ough)-250(40;)-251(the)-251(halo)-250(will)-251(r)8(un)-250(fr)18(om)-251(local)-250(index)]TJ 0.993 0 0 1 150.705 269.765 Tm [(41)-252(thr)18(ough)-252(local)-252(index)-252(48..)-313(If)-253(pr)19(ocess)-253(0)-252(assigns)-252(an)-252(initial)-252(value)-252(of)-252(1)-252(to)-252(its)-252(entries)]TJ 1.006 0 0 1 150.705 257.81 Tm [(in)-248(the)]TJ/F78 9.9626 Tf 1 0 0 1 178.629 257.81 Tm [(x)]TJ/F84 9.9626 Tf 1.006 0 0 1 186.324 257.81 Tm [(vector)74(,)-249(and)-248(pr)18(ocess)-249(1)-248(assigns)-249(a)-248(value)-248(of)-249(2,)-248(then)-249(after)-248(a)-249(call)-248(to)]TJ/F145 9.9626 Tf 1 0 0 1 452.573 257.81 Tm [(psb_ovrl)]TJ/F84 9.9626 Tf 1.006 0 0 1 150.286 245.855 Tm [(with)]TJ/F145 9.9626 Tf 1 0 0 1 173.159 245.855 Tm [(psb_avg_)]TJ/F84 9.9626 Tf 1.006 0 0 1 217.499 245.855 Tm [(and)-249(a)-249(call)-250(to)]TJ/F145 9.9626 Tf 1 0 0 1 273.502 245.855 Tm [(psb_halo_)]TJ/F84 9.9626 Tf 1.006 0 0 1 323.072 245.855 Tm [(the)-249(contents)-249(of)-250(t)1(he)-250(local)-249(vectors)-249(will)-249(be)]TJ 1 0 0 1 150.705 233.9 Tm [(the)-250(following)-250(\050showing)-250(a)-250(transition)-250(among)-250(the)-250(two)-250(subdomains\051)]TJ + [(;)-276(the)-266(data)-267(distributi)1(on)-267(is)-266(such)]TJ 1.009 0 0 1 150.705 293.676 Tm [(that)-247(each)-247(pr)18(ocess)-247(will)-247(own)-247(40)-247(entries)-247(in)-247(the)-247(index)-247(space,)-247(with)-247(an)-247(overlap)-247(of)-247(16)]TJ 1 0 0 1 150.705 281.72 Tm [(entries)-250(placed)-251(at)-250(local)-251(indices)-250(25)-251(thr)18(ough)-250(40;)-251(the)-251(halo)-250(will)-251(r)8(un)-250(fr)18(om)-251(local)-250(index)]TJ 0.993 0 0 1 150.705 269.765 Tm [(41)-252(thr)18(ough)-252(local)-252(index)-252(48..)-313(If)-253(pr)19(ocess)-253(0)-252(assigns)-252(an)-252(initial)-252(value)-252(of)-252(1)-252(to)-252(its)-252(entries)]TJ 1.006 0 0 1 150.705 257.81 Tm [(in)-248(the)]TJ/F78 9.9626 Tf 1 0 0 1 178.629 257.81 Tm [(x)]TJ/F84 9.9626 Tf 1.006 0 0 1 186.324 257.81 Tm [(vector)74(,)-249(and)-248(pr)18(ocess)-249(1)-248(assigns)-249(a)-248(value)-248(of)-249(2,)-248(then)-249(after)-248(a)-249(call)-248(to)]TJ/F147 9.9626 Tf 1 0 0 1 452.573 257.81 Tm [(psb_ovrl)]TJ/F84 9.9626 Tf 1.006 0 0 1 150.286 245.855 Tm [(with)]TJ/F147 9.9626 Tf 1 0 0 1 173.159 245.855 Tm [(psb_avg_)]TJ/F84 9.9626 Tf 1.006 0 0 1 217.499 245.855 Tm [(and)-249(a)-249(call)-250(to)]TJ/F147 9.9626 Tf 1 0 0 1 273.502 245.855 Tm [(psb_halo_)]TJ/F84 9.9626 Tf 1.006 0 0 1 323.072 245.855 Tm [(the)-249(contents)-249(of)-250(t)1(he)-250(local)-249(vectors)-249(will)-249(be)]TJ 1 0 0 1 150.705 233.9 Tm [(the)-250(following)-250(\050showing)-250(a)-250(transition)-250(among)-250(the)-250(two)-250(subdomains\051)]TJ 0 g 0 G 166.874 -143.462 Td [(64)]TJ 0 g 0 G @@ -16106,7 +16115,7 @@ ET endstream endobj -1435 0 obj +1436 0 obj << /Length 3551 >> @@ -16126,7 +16135,7 @@ ET endstream endobj -1439 0 obj +1440 0 obj << /Length 321 >> @@ -16157,20 +16166,20 @@ ET endstream endobj -1422 0 obj +1423 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/try8x8_ov.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 1441 0 R +/PTEX.InfoDict 1442 0 R /BBox [0 0 516 439] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 1442 0 R ->>/Font << /R8 1443 0 R/R10 1444 0 R>> +/R7 1443 0 R +>>/Font << /R8 1444 0 R/R10 1445 0 R>> >> /Length 3413 /Filter /FlateDecode @@ -16184,7 +16193,7 @@ x >÷­ őďĹ7z3óm‘W=ň™żŞOćkިů*óŐ#_e}0ľhŤ;ׇ©›öÄ‚ĎýUm°xßPyPÇp}gZz®ŽÎâč«43©cźLÂ̵1Y][V˝üέ¦†5˝xň–ŹĎ]Oh5ŐE_ĐZčSYd…UŃZR˝´â6Tl4©^lÉ]·íMŞ×µ6ÔNÉ‹»&ž%Ä›şő)ŐĂýÍ?Ô‹'ńQő†:V\ďꛉÁżÖ†ÚU ń¦n±Ý|îęĹ“ů zC+®wu‹mĐŕ_kCí*ľÂ\Ýb[=řÜ?Ô‹'ń •Gč_ß™–ž«Łł8"şÇ*ÍĚĐ1ŹźLÂ̵1Y=ƢzÚđ¬÷mŹŚ,…uŃZMuŃ´úTYaUô„&Ő[ö…›:ÖZG¨žvő_ŹşŹP=ß-Fü®5lËăouĂYË*ďoţ¦ŽX<‰Ź˝M+®7uÓy„ŕs˙®µˇ6‰Ácü­n:±|îoęĹ“ů°§ŰÔ±âzS7ť¤>÷ďZj?|®bä+ĚTŹ|ćoęĹ“ř¸}ŰÔ±’Ż2/P=ň™×ÚP[żŕŠ1ţ` zĽżů›:bń$>îÔ6u¬¸ŢÔM§W‚Ďý»Ö†Úĺ}qÇwfľ-ňŕŞG>ó7uÄâÉ|Mő#_e^ z䫬ĆďZŁÁÎőaꦓ9Áçţ¦ŽX<‰o¨<¨c¸ľ3-=WGgqDô«43©cźLÂ̵1YÝö¬zy?¶Ąž5˝xň–ŹĎ]Oh5ŐE_ĐZčSYd…UŃZR˝tNĆm¨ŘÔn†]·ÚÍđÓ3ďZŁÁö, ífณguj7 ?ĎUőŇ‘Ř%ńąş ífŕóÜßµ6ÔˇđQņv3tč)řÜ?Ő‹'óAő¦:V\ďę6´›Ďs×ÚPçcČÚÍĐq-ń™Ş#OâŁęMu¬ä«Ě Uoh7Ç_jđQőşÖnŚ?ŞŢÔn†.â繪^:Óâ6Tlj7Cŕ‚Ďý]kCťzyńĚĚ|[äŞ7µ›†|YőŇń·k®W·ˇÝ ňUÖă»Öh°s}¸ş ífđţŤőÁřy®Ş§“*nRÇfěfÄĂ ë,Žî±J33tlÄnFI ¶ÉŇčy.ާÓ)žőľ í‘‘Ą0˘.zB«©.ú‚ÖBźĘ"+¬ŠžĐ¤zíĐn†Ű®b­i7Cg _ŹVµ›á§ _µFmYbü­n81iYĺýͨ#OâăAŔC+®7uÓ©ČŕsŐÚP‡Ácü­n:7|î?Ô‹'óáĚߡŽ×›şé®?Ś÷Ćĺ‡ń¶ŽŹůĂxü0î÷řúz~ŮëDőąžDí‡E]Ó×…aXŽí!Í>řŹďŹź×düŹoő–‘żÖ«\Żç­ÜýĚ•çë»ýô—w-˙/I˙őv×ď!o'Čź˙`[G. endstream endobj -1447 0 obj +1448 0 obj << /Filter /FlateDecode /Subtype /Type1C @@ -16243,7 +16252,7 @@ r §¶¦^<ÜŰrc¨Ż@vŚń6@ě>Éż]Wž$ź’‚Žňg]Qőď㎠yú˝%N»©”Ô­®ˇ˙ U…··OŔű›ÄëC’żđ\uĎĎnŢ_~ĺ¶ĎCđŔ ›*¤é%™4€Éóľ÷vÜýÉܢ%‰ٜ‹l0^2”«Ť›ĂFŚ~ 996®=ąŻ§­˝§/ą Ľ`đÍ/üvŕ Ípć0µ´e4:GŹŐ*đ­Ůîó,ŐČ-Ą%Ą|€ 4×TtĐuuúü$5Ą”…ۇ+ëJ\Ţf§o´Ë[qĽćÁŻń€C +đÓE€Ď'Ăl>Ž„hŕ,@Ń[hZßBÁAńľ˙¸Mrďë ňeJ}­×xsi@ŚBżť`Đ_ đö‡„łŔŁ‚)×y`mq»GÜÚÚúz’Ű˝břáŮňMŕ‚ć| Ët„Zű€®)ĐŠ ůŮĹ˝›čuµNŇÁŽc°©ŹpĘM”SWáo3„©°r#€«˝ĺ] a×5ÄéĘÍż+Wy{ę?q*>;^›Z9ëÚŐ —şyŢƇŒ¬pş‹€'óŃ‚ó\©h"Ő˛żk¶px”’¦ŃŘŞTŚŰŰRŕ)ú§°oŤÇ¤°„p!ČUKąÍťQě˙,…Kź endstream endobj -1448 0 obj +1449 0 obj << /Filter /FlateDecode /Subtype /Type1C @@ -16316,7 +16325,7 @@ k ŇOWk'T˛_Ž–Pŕiłě¤®¦$1R¸(Ďlç?Ŕ˙ń弣 endstream endobj -1454 0 obj +1455 0 obj << /Length 8610 >> @@ -16338,14 +16347,14 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 241.994 649.268 Td [(x)]TJ/F190 10.3811 Tf 8.097 0 Td [(\040)]TJ/F78 9.9626 Tf 13.397 0 Td [(c)-25(o)-35(l)-55(l)-55(e)-25(c)-25(t)]TJ/F192 10.3811 Tf 27.706 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(l)-55(o)-35(c)]TJ +/F78 9.9626 Tf 241.994 649.268 Td [(x)]TJ/F195 10.3811 Tf 8.097 0 Td [(\040)]TJ/F78 9.9626 Tf 13.397 0 Td [(c)-25(o)-35(l)-55(l)-55(e)-25(c)-25(t)]TJ/F197 10.3811 Tf 27.706 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(l)-55(o)-35(c)]TJ ET q 1 0 0 1 308.334 649.467 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 311.617 649.268 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F192 10.3811 Tf 2.875 1.96 Td [(\051)]TJ/F84 9.9626 Tf -220.163 -22.41 Td [(wher)18(e:)]TJ +/F78 9.9626 Tf 311.617 649.268 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F197 10.3811 Tf 2.875 1.96 Td [(\051)]TJ/F84 9.9626 Tf -220.163 -22.41 Td [(wher)18(e:)]TJ 0 g 0 G /F78 9.9626 Tf 0.762 -20.664 Td [(g)-25(l)-55(o)-35(b)]TJ ET @@ -16442,7 +16451,7 @@ BT 0 g 0 G 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -127.572 -27.052 Td [(call)]TJ +/F147 9.9626 Tf -127.572 -27.052 Td [(call)]TJ 0 g 0 G [-525(psb_gather\050glob_x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -16499,28 +16508,28 @@ Q BT /F78 9.9626 Tf 324.326 350.427 Td [(x)]TJ/F84 9.9626 Tf 5.205 0 Td [(.)]TJ -204.729 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 302.606 Tm [(Speci\002ed)-247(as:)-313(a)-247(rank)-247(one)-247(or)-248(two)-247(array)-247(or)-247(an)-248(object)-247(of)-247(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 369.545 302.606 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 369.545 302.606 Tm [(psb)]TJ ET q 1 0 0 1 385.864 302.805 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 389.002 302.606 Td [(T)]TJ +/F147 9.9626 Tf 389.002 302.606 Td [(T)]TJ ET q 1 0 0 1 394.86 302.805 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.998 302.606 Td [(vect)]TJ +/F147 9.9626 Tf 397.998 302.606 Td [(vect)]TJ ET q 1 0 0 1 419.547 302.805 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.685 302.606 Td [(type)]TJ +/F147 9.9626 Tf 422.685 302.606 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf -297.883 -11.955 Td [(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -16539,27 +16548,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 222.12 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 221.921 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 221.921 Td [(desc)]TJ ET q 1 0 0 1 333.945 222.12 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 221.921 Td [(type)]TJ +/F147 9.9626 Tf 337.084 221.921 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -20.91 Td [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 1.004 0 0 1 122.839 201.011 Tm [(The)-248(pr)18(ocess)-248(that)-248(holds)-248(the)-248(global)-248(copy)111(.)-308(If)]TJ/F78 9.9626 Tf 1 0 0 1 305.722 201.011 Tm [(r)-17(o)-35(o)-35(t)]TJ/F192 10.3811 Tf 19.923 0 Td [(=)]TJ/F190 10.3811 Tf 11.086 0 Td [(\000)]TJ/F84 9.9626 Tf 1.004 0 0 1 344.925 201.011 Tm [(1)-248(all)-248(the)-248(pr)18(ocesses)-248(will)]TJ 1 0 0 1 124.802 189.056 Tm [(have)-250(a)-250(copy)-250(of)-250(the)-250(global)-250(vector)74(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable)]TJ/F190 10.3811 Tf 142.419 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F190 10.3811 Tf 7.873 0 Td [(\024)]TJ/F78 9.9626 Tf 10.987 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F190 10.3811 Tf 19.923 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)]TJ/F190 10.3811 Tf 43.889 0 Td [(\000)]TJ/F84 9.9626 Tf 8.195 0 Td [(1.)]TJ +/F84 9.9626 Tf 1.004 0 0 1 122.839 201.011 Tm [(The)-248(pr)18(ocess)-248(that)-248(holds)-248(the)-248(global)-248(copy)111(.)-308(If)]TJ/F78 9.9626 Tf 1 0 0 1 305.722 201.011 Tm [(r)-17(o)-35(o)-35(t)]TJ/F197 10.3811 Tf 19.923 0 Td [(=)]TJ/F195 10.3811 Tf 11.086 0 Td [(\000)]TJ/F84 9.9626 Tf 1.004 0 0 1 344.925 201.011 Tm [(1)-248(all)-248(the)-248(pr)18(ocesses)-248(will)]TJ 1 0 0 1 124.802 189.056 Tm [(have)-250(a)-250(copy)-250(of)-250(the)-250(global)-250(vector)74(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable)]TJ/F195 10.3811 Tf 142.419 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F195 10.3811 Tf 7.873 0 Td [(\024)]TJ/F78 9.9626 Tf 10.987 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F195 10.3811 Tf 19.923 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)]TJ/F195 10.3811 Tf 43.889 0 Td [(\000)]TJ/F84 9.9626 Tf 8.195 0 Td [(1.)]TJ 0 g 0 G /F75 9.9626 Tf -301.108 -20.909 Td [(On)-250(Return)]TJ 0 g 0 G @@ -16570,7 +16579,7 @@ ET endstream endobj -1460 0 obj +1461 0 obj << /Length 1417 >> @@ -16590,7 +16599,7 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(array)-250(wher)18(e)-250(the)-250(local)-250(parts)-250(must)-250(be)-250(gather)18(ed.)]TJ -8.817 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.745 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(or)-250(two)-250(array)-250(with)-250(the)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 202.459 0 Td [(ALLOCATABLE)]TJ +/F147 9.9626 Tf 202.459 0 Td [(ALLOCATABLE)]TJ 0 g 0 G /F84 9.9626 Tf 60.025 0 Td [(attribute.)]TJ 0 g 0 G @@ -16604,7 +16613,7 @@ ET endstream endobj -1466 0 obj +1467 0 obj << /Length 7629 >> @@ -16626,14 +16635,14 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 235.523 646.918 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F190 10.3811 Tf 5.642 1.96 Td [(\040)]TJ/F78 9.9626 Tf 13.397 0 Td [(s)-25(c)-40(a)-25(t)-25(t)-25(e)-15(r)]TJ/F192 10.3811 Tf 28.633 0 Td [(\050)]TJ/F78 9.9626 Tf 4.493 0 Td [(g)-25(l)-55(o)-35(b)]TJ +/F78 9.9626 Tf 235.523 646.918 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F195 10.3811 Tf 5.642 1.96 Td [(\040)]TJ/F78 9.9626 Tf 13.397 0 Td [(s)-25(c)-40(a)-25(t)-25(t)-25(e)-15(r)]TJ/F197 10.3811 Tf 28.633 0 Td [(\050)]TJ/F78 9.9626 Tf 4.493 0 Td [(g)-25(l)-55(o)-35(b)]TJ ET q 1 0 0 1 311.49 647.117 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F78 9.9626 Tf 314.773 646.918 Td [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\051)]TJ/F84 9.9626 Tf -220.626 -23.362 Td [(wher)18(e:)]TJ +/F78 9.9626 Tf 314.773 646.918 Td [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\051)]TJ/F84 9.9626 Tf -220.626 -23.362 Td [(wher)18(e:)]TJ 0 g 0 G /F78 9.9626 Tf 0.762 -22.091 Td [(g)-25(l)-55(o)-35(b)]TJ ET @@ -16730,7 +16739,7 @@ BT 0 g 0 G 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -112.628 -28.004 Td [(call)]TJ +/F147 9.9626 Tf -112.628 -28.004 Td [(call)]TJ 0 g 0 G [-525(psb_scatter\050glob_x,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -16778,27 +16787,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 215.069 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 214.87 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 214.87 Td [(desc)]TJ ET q 1 0 0 1 333.945 215.069 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 214.87 Td [(type)]TJ +/F147 9.9626 Tf 337.084 214.87 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -22.813 Td [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 0.987 0 0 1 122.839 192.057 Tm [(The)-253(pr)18(ocess)-254(that)-253(holds)-254(the)-253(global)-254(copy)113(.)-315(If)]TJ/F78 9.9626 Tf 1 0 0 1 303.049 192.057 Tm [(r)-17(o)-35(o)-35(t)]TJ/F192 10.3811 Tf 19.927 0 Td [(=)]TJ/F190 10.3811 Tf 11.09 0 Td [(\000)]TJ/F84 9.9626 Tf 0.987 0 0 1 342.26 192.057 Tm [(1)-253(all)-254(the)-253(pr)18(ocesses)-254(have)]TJ 1 0 0 1 124.802 180.101 Tm [(a)-250(copy)-250(of)-250(the)-250(global)-250(vector)74(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.015 0 0 1 124.802 132.281 Tm [(Speci\002ed)-246(as:)-305(an)-246(integer)-246(variable)]TJ/F190 10.3811 Tf 1 0 0 1 269.144 132.281 Tm [(\000)]TJ/F84 9.9626 Tf 1.015 0 0 1 277.338 132.281 Tm [(1)]TJ/F190 10.3811 Tf 1 0 0 1 285.286 132.281 Tm [(\024)]TJ/F78 9.9626 Tf 10.987 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F190 10.3811 Tf 19.922 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.501 0 Td [(\000)]TJ/F84 9.9626 Tf 1.015 0 0 1 350.91 132.281 Tm [(1,)-246(default)]TJ/F145 9.9626 Tf 1 0 0 1 395.251 132.281 Tm [(psb_root_)]TJ/F84 9.9626 Tf 1.015 0 0 1 442.324 132.281 Tm [(,)]TJ 1 0 0 1 124.802 120.326 Tm [(i.e.)-310(pr)18(ocess)-250(0.)]TJ +/F84 9.9626 Tf 0.987 0 0 1 122.839 192.057 Tm [(The)-253(pr)18(ocess)-254(that)-253(holds)-254(the)-253(global)-254(copy)113(.)-315(If)]TJ/F78 9.9626 Tf 1 0 0 1 303.049 192.057 Tm [(r)-17(o)-35(o)-35(t)]TJ/F197 10.3811 Tf 19.927 0 Td [(=)]TJ/F195 10.3811 Tf 11.09 0 Td [(\000)]TJ/F84 9.9626 Tf 0.987 0 0 1 342.26 192.057 Tm [(1)-253(all)-254(the)-253(pr)18(ocesses)-254(have)]TJ 1 0 0 1 124.802 180.101 Tm [(a)-250(copy)-250(of)-250(the)-250(global)-250(vector)74(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.015 0 0 1 124.802 132.281 Tm [(Speci\002ed)-246(as:)-305(an)-246(integer)-246(variable)]TJ/F195 10.3811 Tf 1 0 0 1 269.144 132.281 Tm [(\000)]TJ/F84 9.9626 Tf 1.015 0 0 1 277.338 132.281 Tm [(1)]TJ/F195 10.3811 Tf 1 0 0 1 285.286 132.281 Tm [(\024)]TJ/F78 9.9626 Tf 10.987 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F195 10.3811 Tf 19.922 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.501 0 Td [(\000)]TJ/F84 9.9626 Tf 1.015 0 0 1 350.91 132.281 Tm [(1,)-246(default)]TJ/F147 9.9626 Tf 1 0 0 1 395.251 132.281 Tm [(psb_root_)]TJ/F84 9.9626 Tf 1.015 0 0 1 442.324 132.281 Tm [(,)]TJ 1 0 0 1 124.802 120.326 Tm [(i.e.)-310(pr)18(ocess)-250(0.)]TJ 0 g 0 G 141.968 -29.888 Td [(69)]TJ 0 g 0 G @@ -16806,7 +16815,7 @@ ET endstream endobj -1473 0 obj +1474 0 obj << /Length 4073 >> @@ -16817,35 +16826,35 @@ stream BT /F75 9.9626 Tf 150.705 706.129 Td [(mold)]TJ 0 g 0 G -/F84 9.9626 Tf 28.473 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(vector)-250(storage.)]TJ -3.567 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 0.987 0 0 1 175.611 658.308 Tm [(Speci\002ed)-254(as:)-315(an)-254(object)-254(of)-254(a)-254(class)-254(derived)-254(fr)18(om)]TJ/F145 9.9626 Tf 1 0 0 1 374.749 658.308 Tm [(psb)]TJ +/F84 9.9626 Tf 28.473 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(vector)-250(storage.)]TJ -3.567 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 0.987 0 0 1 175.611 658.308 Tm [(Speci\002ed)-254(as:)-315(an)-254(object)-254(of)-254(a)-254(class)-254(derived)-254(fr)18(om)]TJ/F147 9.9626 Tf 1 0 0 1 374.749 658.308 Tm [(psb)]TJ ET q 1 0 0 1 391.068 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 394.206 658.308 Td [(T)]TJ +/F147 9.9626 Tf 394.206 658.308 Td [(T)]TJ ET q 1 0 0 1 400.064 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 403.202 658.308 Td [(base)]TJ +/F147 9.9626 Tf 403.202 658.308 Td [(base)]TJ ET q 1 0 0 1 424.751 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 427.89 658.308 Td [(vect)]TJ +/F147 9.9626 Tf 427.89 658.308 Td [(vect)]TJ ET q 1 0 0 1 449.439 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 452.577 658.308 Td [(type)]TJ/F84 9.9626 Tf 0.987 0 0 1 473.498 658.308 Tm [(;)-254(this)]TJ 1 0 0 1 175.611 646.353 Tm [(is)-250(only)-250(allowed)-250(when)-250(loc)]TJ +/F147 9.9626 Tf 452.577 658.308 Td [(type)]TJ/F84 9.9626 Tf 0.987 0 0 1 473.498 658.308 Tm [(;)-254(this)]TJ 1 0 0 1 175.611 646.353 Tm [(is)-250(only)-250(allowed)-250(when)-250(loc)]TJ ET q 1 0 0 1 285.797 646.552 cm @@ -16854,28 +16863,28 @@ Q BT /F84 9.9626 Tf 288.786 646.353 Td [(x)-250(is)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 50.53 0 Td [(psb)]TJ +/F147 9.9626 Tf 50.53 0 Td [(psb)]TJ ET q 1 0 0 1 355.634 646.552 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 358.773 646.353 Td [(T)]TJ +/F147 9.9626 Tf 358.773 646.353 Td [(T)]TJ ET q 1 0 0 1 364.63 646.552 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 367.769 646.353 Td [(vect)]TJ +/F147 9.9626 Tf 367.769 646.353 Td [(vect)]TJ ET q 1 0 0 1 389.318 646.552 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 392.456 646.353 Td [(type)]TJ +/F147 9.9626 Tf 392.456 646.353 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -16900,28 +16909,28 @@ Q BT /F78 9.9626 Tf 375.135 606.502 Td [(x)]TJ/F84 9.9626 Tf 5.206 0 Td [(.)]TJ -204.73 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ 0.985 0 0 1 175.611 558.682 Tm [(Speci\002ed)-253(as:)-315(a)-253(rank)-253(one)-253(or)-253(two)-254(ALLOCA)76(T)75(ABLE)-254(array)-253(or)-253(an)-253(object)-253(of)-253(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 175.611 546.727 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 175.611 546.727 Tm [(psb)]TJ ET q 1 0 0 1 191.93 546.926 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 195.068 546.727 Td [(T)]TJ +/F147 9.9626 Tf 195.068 546.727 Td [(T)]TJ ET q 1 0 0 1 200.926 546.926 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 204.065 546.727 Td [(vect)]TJ +/F147 9.9626 Tf 204.065 546.727 Td [(vect)]TJ ET q 1 0 0 1 225.613 546.926 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 228.752 546.727 Td [(type)]TJ +/F147 9.9626 Tf 228.752 546.727 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 23.412 0 Td [(containing)-250(numbers)-250(of)-250(the)-250(type)-250(indicated)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG @@ -16939,7 +16948,7 @@ ET endstream endobj -1477 0 obj +1478 0 obj << /Length 6702 >> @@ -16957,7 +16966,7 @@ BT /F75 11.9552 Tf 151.016 681.348 Td [(cdall)-250(\227)-250(Allocates)-250(a)-250(communication)-250(descriptor)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,mg=mg,parts=parts\051)]TJ 0 -11.955 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,vg=vg,[mg=mg,flag=flag]\051)]TJ 0 -11.955 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,vl=vl,[nl=nl,globalcheck=.false.,lidx=lidx]\051)]TJ 0 -11.955 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,nl=nl\051)]TJ 0 -11.956 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,mg=mg,repl=.true.\051)]TJ/F84 9.9626 Tf 0.986 0 0 1 114.839 594.792 Tm [(This)-254(subr)19(outine)-254(initializes)-254(the)-253(communication)-254(descriptor)-253(associated)-254(with)-254(an)]TJ 1.018 0 0 1 99.895 582.836 Tm [(index)-245(space.)-305(One)-245(of)-245(the)-245(optional)-245(ar)17(guments)]TJ/F145 9.9626 Tf 1 0 0 1 297.448 582.836 Tm [(parts)]TJ/F84 9.9626 Tf 1.018 0 0 1 323.599 582.836 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 328.623 582.836 Tm [(vg)]TJ/F84 9.9626 Tf 1.018 0 0 1 339.083 582.836 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 344.106 582.836 Tm [(vl)]TJ/F84 9.9626 Tf 1.018 0 0 1 354.567 582.836 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 359.59 582.836 Tm [(nl)]TJ/F84 9.9626 Tf 1.018 0 0 1 372.538 582.836 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 384.568 582.836 Tm [(repl)]TJ/F84 9.9626 Tf 1.018 0 0 1 407.976 582.836 Tm [(must)-245(be)]TJ 1 0 0 1 99.895 570.881 Tm [(speci\002ed,)-250(ther)18(eby)-250(choosing)-250(the)-250(speci\002c)-250(initialization)-250(strategy)111(.)]TJ +/F147 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,mg=mg,parts=parts\051)]TJ 0 -11.955 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,vg=vg,[mg=mg,flag=flag]\051)]TJ 0 -11.955 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,vl=vl,[nl=nl,globalcheck=.false.,lidx=lidx]\051)]TJ 0 -11.955 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,nl=nl\051)]TJ 0 -11.956 Td [(call)-525(psb_cdall\050icontxt,)-525(desc_a,)-525(info,mg=mg,repl=.true.\051)]TJ/F84 9.9626 Tf 0.986 0 0 1 114.839 594.792 Tm [(This)-254(subr)19(outine)-254(initializes)-254(the)-253(communication)-254(descriptor)-253(associated)-254(with)-254(an)]TJ 1.018 0 0 1 99.895 582.836 Tm [(index)-245(space.)-305(One)-245(of)-245(the)-245(optional)-245(ar)17(guments)]TJ/F147 9.9626 Tf 1 0 0 1 297.448 582.836 Tm [(parts)]TJ/F84 9.9626 Tf 1.018 0 0 1 323.599 582.836 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 328.623 582.836 Tm [(vg)]TJ/F84 9.9626 Tf 1.018 0 0 1 339.083 582.836 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 344.106 582.836 Tm [(vl)]TJ/F84 9.9626 Tf 1.018 0 0 1 354.567 582.836 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 359.59 582.836 Tm [(nl)]TJ/F84 9.9626 Tf 1.018 0 0 1 372.538 582.836 Tm [(or)]TJ/F147 9.9626 Tf 1 0 0 1 384.568 582.836 Tm [(repl)]TJ/F84 9.9626 Tf 1.018 0 0 1 407.976 582.836 Tm [(must)-245(be)]TJ 1 0 0 1 99.895 570.881 Tm [(speci\002ed,)-250(ther)18(eby)-250(choosing)-250(the)-250(speci\002c)-250(initialization)-250(strategy)111(.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -18.208 Td [(On)-250(Entry)]TJ 0 g 0 G @@ -16972,7 +16981,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.066 Td [(vg)]TJ 0 g 0 G -/F84 9.9626 Tf 16.06 0 Td [(Data)-250(allocation:)-310(each)-250(index)]TJ/F78 9.9626 Tf 121.707 0 Td [(i)]TJ/F190 10.3811 Tf 5.856 0 Td [(2)-290(f)]TJ/F84 9.9626 Tf 15.245 0 Td [(1)-179(.)-192(.)-192(.)]TJ/F78 9.9626 Tf 19.967 0 Td [(m)-47(g)]TJ/F190 10.3811 Tf 13.449 0 Td [(g)]TJ/F84 9.9626 Tf 7.806 0 Td [(is)-250(allocated)-250(to)-250(pr)18(ocess)]TJ/F78 9.9626 Tf 98.455 0 Td [(v)-47(g)]TJ/F192 10.3811 Tf 10.679 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ -295.759 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 16.06 0 Td [(Data)-250(allocation:)-310(each)-250(index)]TJ/F78 9.9626 Tf 121.707 0 Td [(i)]TJ/F195 10.3811 Tf 5.856 0 Td [(2)-290(f)]TJ/F84 9.9626 Tf 15.245 0 Td [(1)-179(.)-192(.)-192(.)]TJ/F78 9.9626 Tf 19.967 0 Td [(m)-47(g)]TJ/F195 10.3811 Tf 13.449 0 Td [(g)]TJ/F84 9.9626 Tf 7.806 0 Td [(is)-250(allocated)-250(to)-250(pr)18(ocess)]TJ/F78 9.9626 Tf 98.455 0 Td [(v)-47(g)]TJ/F197 10.3811 Tf 10.679 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ -295.759 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -19.067 Td [(\003ag)]TJ 0 g 0 G @@ -16980,7 +16989,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.067 Td [(mg)]TJ 0 g 0 G -/F84 9.9626 Tf 19.377 0 Td [(the)-250(\050global\051)-250(number)-250(of)-250(r)18(ows)-250(of)-250(the)-250(pr)18(oblem.)]TJ 5.53 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.014 0 0 1 124.802 266.056 Tm [(Speci\002ed)-246(as:)-305(an)-246(integer)-246(value.)-305(It)-246(is)-246(r)18(equir)17(ed)-245(if)]TJ/F145 9.9626 Tf 1 0 0 1 328.848 266.056 Tm [(parts)]TJ/F84 9.9626 Tf 1.014 0 0 1 357.483 266.056 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 369.473 266.056 Tm [(repl)]TJ/F84 9.9626 Tf 1.014 0 0 1 392.878 266.056 Tm [(is)-246(speci\002ed,)]TJ 1 0 0 1 124.802 254.101 Tm [(it)-250(is)-250(optional)-250(if)]TJ/F145 9.9626 Tf 66.141 0 Td [(vg)]TJ/F84 9.9626 Tf 12.951 0 Td [(is)-250(speci\002ed.)]TJ +/F84 9.9626 Tf 19.377 0 Td [(the)-250(\050global\051)-250(number)-250(of)-250(r)18(ows)-250(of)-250(the)-250(pr)18(oblem.)]TJ 5.53 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.014 0 0 1 124.802 266.056 Tm [(Speci\002ed)-246(as:)-305(an)-246(integer)-246(value.)-305(It)-246(is)-246(r)18(equir)17(ed)-245(if)]TJ/F147 9.9626 Tf 1 0 0 1 328.848 266.056 Tm [(parts)]TJ/F84 9.9626 Tf 1.014 0 0 1 357.483 266.056 Tm [(or)]TJ/F147 9.9626 Tf 1 0 0 1 369.473 266.056 Tm [(repl)]TJ/F84 9.9626 Tf 1.014 0 0 1 392.878 266.056 Tm [(is)-246(speci\002ed,)]TJ 1 0 0 1 124.802 254.101 Tm [(it)-250(is)-250(optional)-250(if)]TJ/F147 9.9626 Tf 66.141 0 Td [(vg)]TJ/F84 9.9626 Tf 12.951 0 Td [(is)-250(speci\002ed.)]TJ 0 g 0 G /F75 9.9626 Tf -103.999 -19.067 Td [(parts)]TJ 0 g 0 G @@ -16988,7 +16997,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.067 Td [(vl)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 113.733 180.101 Tm [(Data)-254(allocation:)-322(the)-255(set)-254(of)-254(global)-254(indices)]TJ/F78 9.9626 Tf 1 0 0 1 295.435 180.101 Tm [(v)-25(l)]TJ/F192 10.3811 Tf 8.548 0 Td [(\050)]TJ/F84 9.9626 Tf 1.02 0 0 1 308.132 180.101 Tm [(1)]TJ 1 0 0 1 316.277 180.101 Tm [(:)]TJ/F78 9.9626 Tf 5.679 0 Td [(n)-25(l)]TJ/F192 10.3811 Tf 9.106 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 337.795 180.101 Tm [(belonging)-254(to)-254(the)-255(calling)]TJ 1 0 0 1 124.503 168.146 Tm [(pr)18(ocess.)]TJ 0.299 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 113.733 180.101 Tm [(Data)-254(allocation:)-322(the)-255(set)-254(of)-254(global)-254(indices)]TJ/F78 9.9626 Tf 1 0 0 1 295.435 180.101 Tm [(v)-25(l)]TJ/F197 10.3811 Tf 8.548 0 Td [(\050)]TJ/F84 9.9626 Tf 1.02 0 0 1 308.132 180.101 Tm [(1)]TJ 1 0 0 1 316.277 180.101 Tm [(:)]TJ/F78 9.9626 Tf 5.679 0 Td [(n)-25(l)]TJ/F197 10.3811 Tf 9.106 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 337.795 180.101 Tm [(belonging)-254(to)-254(the)-255(calling)]TJ 1 0 0 1 124.503 168.146 Tm [(pr)18(ocess.)]TJ 0.299 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)]TJ 0 g 0 G 141.968 -29.888 Td [(71)]TJ 0 g 0 G @@ -16996,7 +17005,7 @@ ET endstream endobj -1482 0 obj +1483 0 obj << /Length 6818 >> @@ -17007,19 +17016,19 @@ stream BT /F75 9.9626 Tf 150.705 706.129 Td [(nl)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 165.091 706.129 Tm [(Data)-391(allocation:)-596(in)-391(a)-391(generalized)-391(block-r)17(ow)-391(distribution)-391(the)-391(number)-391(of)]TJ 1 0 0 1 175.611 694.174 Tm [(indices)-250(belonging)-250(to)-250(the)-250(curr)18(ent)-250(pr)18(ocess.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(May)-250(be)-250(speci\002ed)-250(together)-250(with)]TJ/F145 9.9626 Tf 272.944 0 Td [(vl)]TJ/F84 9.9626 Tf 10.46 0 Td [(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 165.091 706.129 Tm [(Data)-391(allocation:)-596(in)-391(a)-391(generalized)-391(block-r)17(ow)-391(distribution)-391(the)-391(number)-391(of)]TJ 1 0 0 1 175.611 694.174 Tm [(indices)-250(belonging)-250(to)-250(the)-250(curr)18(ent)-250(pr)18(ocess.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(May)-250(be)-250(speci\002ed)-250(together)-250(with)]TJ/F147 9.9626 Tf 272.944 0 Td [(vl)]TJ/F84 9.9626 Tf 10.46 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -308.31 -20.135 Td [(repl)]TJ 0 g 0 G -/F84 9.9626 Tf 1.018 0 0 1 173.948 626.218 Tm [(Data)-246(allocation:)-306(build)-246(a)-247(r)18(eplicated)-246(index)-246(space)-247(\050i.e.)-306(all)-246(pr)17(ocesses)-246(own)-246(all)]TJ 1 0 0 1 175.611 614.263 Tm [(indices\051.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(the)-250(logical)-250(value)]TJ/F145 9.9626 Tf 132.133 0 Td [(.true.)]TJ +/F84 9.9626 Tf 1.018 0 0 1 173.948 626.218 Tm [(Data)-246(allocation:)-306(build)-246(a)-247(r)18(eplicated)-246(index)-246(space)-247(\050i.e.)-306(all)-246(pr)17(ocesses)-246(own)-246(all)]TJ 1 0 0 1 175.611 614.263 Tm [(indices\051.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(the)-250(logical)-250(value)]TJ/F147 9.9626 Tf 132.133 0 Td [(.true.)]TJ 0 g 0 G /F75 9.9626 Tf -157.039 -20.135 Td [(globalcheck)]TJ 0 g 0 G -/F84 9.9626 Tf 59.765 0 Td [(Data)-250(allocation:)-310(do)-250(global)-250(checks)-250(on)-250(the)-250(local)-250(index)-250(lists)]TJ/F145 9.9626 Tf 247.788 0 Td [(vl)]TJ/F84 9.9626 Tf -282.647 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(value,)-250(default:)]TJ/F145 9.9626 Tf 162.678 0 Td [(.false.)]TJ +/F84 9.9626 Tf 59.765 0 Td [(Data)-250(allocation:)-310(do)-250(global)-250(checks)-250(on)-250(the)-250(local)-250(index)-250(lists)]TJ/F147 9.9626 Tf 247.788 0 Td [(vl)]TJ/F84 9.9626 Tf -282.647 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(value,)-250(default:)]TJ/F147 9.9626 Tf 162.678 0 Td [(.false.)]TJ 0 g 0 G /F75 9.9626 Tf -187.584 -20.135 Td [(lidx)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 173.39 478.351 Tm [(Data)-273(allocation:)-361(the)-274(set)-273(of)-274(local)-273(indices)]TJ/F78 9.9626 Tf 1 0 0 1 349.9 478.351 Tm [(l)-48(i)-32(d)-42(x)]TJ/F192 10.3811 Tf 17.066 0 Td [(\050)]TJ/F84 9.9626 Tf 1.02 0 0 1 371.116 478.351 Tm [(1)]TJ 1 0 0 1 379.623 478.351 Tm [(:)]TJ/F78 9.9626 Tf 6.042 0 Td [(n)-25(l)]TJ/F192 10.3811 Tf 9.106 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 401.699 478.351 Tm [(to)-274(be)-273(assigned)-274(to)-273(the)]TJ 1 0 0 1 175.611 466.396 Tm [(global)-250(indices)]TJ/F78 9.9626 Tf 63.477 0 Td [(v)-25(l)]TJ/F84 9.9626 Tf 8.423 0 Td [(.)]TJ -71.9 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 173.39 478.351 Tm [(Data)-273(allocation:)-361(the)-274(set)-273(of)-274(local)-273(indices)]TJ/F78 9.9626 Tf 1 0 0 1 349.9 478.351 Tm [(l)-48(i)-32(d)-42(x)]TJ/F197 10.3811 Tf 17.066 0 Td [(\050)]TJ/F84 9.9626 Tf 1.02 0 0 1 371.116 478.351 Tm [(1)]TJ 1 0 0 1 379.623 478.351 Tm [(:)]TJ/F78 9.9626 Tf 6.042 0 Td [(n)-25(l)]TJ/F197 10.3811 Tf 9.106 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 401.699 478.351 Tm [(to)-274(be)-273(assigned)-274(to)-273(the)]TJ 1 0 0 1 175.611 466.396 Tm [(global)-250(indices)]TJ/F78 9.9626 Tf 63.477 0 Td [(v)-25(l)]TJ/F84 9.9626 Tf 8.423 0 Td [(.)]TJ -71.9 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -22.128 Td [(On)-250(Return)]TJ 0 g 0 G @@ -17035,21 +17044,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.744 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.137 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.137 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 328.692 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 328.492 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 328.492 Td [(desc)]TJ ET q 1 0 0 1 384.755 328.692 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 328.492 Td [(type)]TJ +/F147 9.9626 Tf 387.893 328.492 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -17059,14 +17068,14 @@ BT 0 g 0 G /F84 9.9626 Tf 12.453 -20.082 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 175.611 218.327 Tm [(One)-236(of)-236(the)-235(optional)-236(ar)18(guments)]TJ/F145 9.9626 Tf 1 0 0 1 309.412 218.327 Tm [(parts)]TJ/F84 9.9626 Tf 0.98 0 0 1 335.564 218.327 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 340.344 218.327 Tm [(vg)]TJ/F84 9.9626 Tf 0.98 0 0 1 350.805 218.327 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 355.585 218.327 Tm [(vl)]TJ/F84 9.9626 Tf 0.98 0 0 1 366.046 218.327 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 370.827 218.327 Tm [(nl)]TJ/F84 9.9626 Tf 0.98 0 0 1 383.589 218.327 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 395.078 218.327 Tm [(repl)]TJ/F84 9.9626 Tf 0.98 0 0 1 418.302 218.327 Tm [(must)-236(be)-235(speci\002ed,)]TJ 1 0 0 1 175.611 206.371 Tm [(ther)18(eby)-250(choosing)-250(the)-250(initialization)-250(strategy)-250(as)-250(follows:)]TJ + 0.98 0 0 1 175.611 218.327 Tm [(One)-236(of)-236(the)-235(optional)-236(ar)18(guments)]TJ/F147 9.9626 Tf 1 0 0 1 309.412 218.327 Tm [(parts)]TJ/F84 9.9626 Tf 0.98 0 0 1 335.564 218.327 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 340.344 218.327 Tm [(vg)]TJ/F84 9.9626 Tf 0.98 0 0 1 350.805 218.327 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 355.585 218.327 Tm [(vl)]TJ/F84 9.9626 Tf 0.98 0 0 1 366.046 218.327 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 370.827 218.327 Tm [(nl)]TJ/F84 9.9626 Tf 0.98 0 0 1 383.589 218.327 Tm [(or)]TJ/F147 9.9626 Tf 1 0 0 1 395.078 218.327 Tm [(repl)]TJ/F84 9.9626 Tf 0.98 0 0 1 418.302 218.327 Tm [(must)-236(be)-235(speci\002ed,)]TJ 1 0 0 1 175.611 206.371 Tm [(ther)18(eby)-250(choosing)-250(the)-250(initialization)-250(strategy)-250(as)-250(follows:)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.135 Td [(parts)]TJ 0 g 0 G -/F84 9.9626 Tf 0.997 0 0 1 203.278 186.236 Tm [(In)-251(this)-251(case)-251(we)-251(have)-251(a)-251(sub)1(r)18(outine)-251(specifying)-251(the)-251(mapping)-251(between)]TJ 1.02 0 0 1 197.529 174.281 Tm [(global)-273(indices)-272(and)-273(pr)18(ocess/local)-273(index)-273(pairs.)-386(If)-273(this)-273(optional)-272(ar)17(gu-)]TJ 0.991 0 0 1 197.529 162.326 Tm [(ment)-252(is)-252(speci\002ed,)-252(then)-252(it)-253(is)-252(mandatory)-252(to)-252(specify)-252(the)-252(ar)18(gument)]TJ/F145 9.9626 Tf 1 0 0 1 472.343 162.326 Tm [(mg)]TJ/F84 9.9626 Tf 0.991 0 0 1 485.293 162.326 Tm [(as)]TJ 1 0 0 1 197.111 150.371 Tm [(well.)-310(The)-250(subr)18(outine)-250(must)-250(conform)-250(to)-250(the)-250(following)-250(interface:)]TJ +/F84 9.9626 Tf 0.997 0 0 1 203.278 186.236 Tm [(In)-251(this)-251(case)-251(we)-251(have)-251(a)-251(sub)1(r)18(outine)-251(specifying)-251(the)-251(mapping)-251(between)]TJ 1.02 0 0 1 197.529 174.281 Tm [(global)-273(indices)-272(and)-273(pr)18(ocess/local)-273(index)-273(pairs.)-386(If)-273(this)-273(optional)-272(ar)17(gu-)]TJ 0.991 0 0 1 197.529 162.326 Tm [(ment)-252(is)-252(speci\002ed,)-252(then)-252(it)-253(is)-252(mandatory)-252(to)-252(specify)-252(the)-252(ar)18(gument)]TJ/F147 9.9626 Tf 1 0 0 1 472.343 162.326 Tm [(mg)]TJ/F84 9.9626 Tf 0.991 0 0 1 485.293 162.326 Tm [(as)]TJ 1 0 0 1 197.111 150.371 Tm [(well.)-310(The)-250(subr)18(outine)-250(must)-250(conform)-250(to)-250(the)-250(following)-250(interface:)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 10.879 -18.09 Td [(interface)]TJ 15.691 -11.955 Td [(subroutine)-525(psb_parts\050glob_index,mg,np,pv,nv\051)]TJ +/F147 9.9626 Tf 10.879 -18.09 Td [(interface)]TJ 15.691 -11.955 Td [(subroutine)-525(psb_parts\050glob_index,mg,np,pv,nv\051)]TJ 0 g 0 G /F84 9.9626 Tf 93.898 -29.888 Td [(72)]TJ 0 g 0 G @@ -17074,7 +17083,7 @@ ET endstream endobj -1488 0 obj +1489 0 obj << /Length 11618 >> @@ -17082,7 +17091,7 @@ stream 0 g 0 G 0 g 0 G BT -/F145 9.9626 Tf 183.332 706.129 Td [(integer,)-525(intent)-525(\050in\051)-1050(::)-525(glob_index,np,mg)]TJ 0 -11.955 Td [(integer,)-525(intent)-525(\050out\051)-525(::)-525(nv,)-525(pv\050*\051)]TJ -10.46 -11.955 Td [(end)-525(subroutine)-525(psb_parts)]TJ -15.691 -11.956 Td [(end)-525(interface)]TJ/F84 9.9626 Tf -10.77 -17.586 Td [(The)-250(input)-250(ar)18(guments)-250(ar)18(e:)]TJ +/F147 9.9626 Tf 183.332 706.129 Td [(integer,)-525(intent)-525(\050in\051)-1050(::)-525(glob_index,np,mg)]TJ 0 -11.955 Td [(integer,)-525(intent)-525(\050out\051)-525(::)-525(nv,)-525(pv\050*\051)]TJ -10.46 -11.955 Td [(end)-525(subroutine)-525(psb_parts)]TJ -15.691 -11.956 Td [(end)-525(interface)]TJ/F84 9.9626 Tf -10.77 -17.586 Td [(The)-250(input)-250(ar)18(guments)-250(ar)18(e:)]TJ 0 g 0 G /F75 9.9626 Tf 0.309 -15.594 Td [(glob)]TJ ET @@ -17105,23 +17114,23 @@ BT 0 g 0 G /F75 9.9626 Tf 0.309 -15.594 Td [(nv)]TJ 0 g 0 G -/F84 9.9626 Tf 16.299 0 Td [(The)-250(number)-250(of)-250(entries)-250(in)]TJ/F145 9.9626 Tf 111.052 0 Td [(pv)]TJ/F84 9.9626 Tf 10.46 0 Td [(;)]TJ +/F84 9.9626 Tf 16.299 0 Td [(The)-250(number)-250(of)-250(entries)-250(in)]TJ/F147 9.9626 Tf 111.052 0 Td [(pv)]TJ/F84 9.9626 Tf 10.46 0 Td [(;)]TJ 0 g 0 G /F75 9.9626 Tf -137.811 -13.774 Td [(pv)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 162.939 564.573 Tm [(A)-342(vector)-342(containing)-342(the)-342(indices)-343(of)-342(the)-342(pr)18(ocesses)-342(to)-343(which)-342(the)]TJ 1.02 0 0 1 165.35 552.618 Tm [(global)-309(index)-310(should)-309(be)-310(assigend;)-341(each)-310(entry)-309(must)-310(satisfy)-309(0)]TJ/F190 10.3811 Tf 1 0 0 1 435.412 552.618 Tm [(\024)]TJ/F78 9.9626 Tf -269.39 -11.956 Td [(p)-25(v)]TJ/F192 10.3811 Tf 10.461 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.089 0 Td [(\051)]TJ/F148 10.3811 Tf 8.296 0 Td [(<)]TJ/F78 9.9626 Tf 12.342 0 Td [(n)-80(p)]TJ/F84 9.9626 Tf 1.02 0 0 1 215.856 540.662 Tm [(;)-345(if)]TJ/F78 9.9626 Tf 1 0 0 1 231.538 540.662 Tm [(n)-25(v)]TJ/F148 10.3811 Tf 15.042 0 Td [(>)]TJ/F84 9.9626 Tf 1.02 0 0 1 258.797 540.662 Tm [(1)-312(we)-312(have)-311(an)-312(index)-312(assigned)-312(to)-312(multiple)]TJ 1 0 0 1 165.051 528.707 Tm [(pr)18(ocesses,)-250(i.e.)-310(we)-250(have)-250(an)-250(overlap)-250(among)-250(the)-250(subdomains.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 162.939 564.573 Tm [(A)-342(vector)-342(containing)-342(the)-342(indices)-343(of)-342(the)-342(pr)18(ocesses)-342(to)-343(which)-342(the)]TJ 1.02 0 0 1 165.35 552.618 Tm [(global)-309(index)-310(should)-309(be)-310(assigend;)-341(each)-310(entry)-309(must)-310(satisfy)-309(0)]TJ/F195 10.3811 Tf 1 0 0 1 435.412 552.618 Tm [(\024)]TJ/F78 9.9626 Tf -269.39 -11.956 Td [(p)-25(v)]TJ/F197 10.3811 Tf 10.461 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.089 0 Td [(\051)]TJ/F152 10.3811 Tf 8.296 0 Td [(<)]TJ/F78 9.9626 Tf 12.342 0 Td [(n)-80(p)]TJ/F84 9.9626 Tf 1.02 0 0 1 215.856 540.662 Tm [(;)-345(if)]TJ/F78 9.9626 Tf 1 0 0 1 231.538 540.662 Tm [(n)-25(v)]TJ/F152 10.3811 Tf 15.042 0 Td [(>)]TJ/F84 9.9626 Tf 1.02 0 0 1 258.797 540.662 Tm [(1)-312(we)-312(have)-311(an)-312(index)-312(assigned)-312(to)-312(multiple)]TJ 1 0 0 1 165.051 528.707 Tm [(pr)18(ocesses,)-250(i.e.)-310(we)-250(have)-250(an)-250(overlap)-250(among)-250(the)-250(subdomains.)]TJ 0 g 0 G /F75 9.9626 Tf -40.249 -15.593 Td [(vg)]TJ 0 g 0 G -/F84 9.9626 Tf 0.98 0 0 1 140.862 513.114 Tm [(In)-244(this)-244(case)-244(the)-244(association)-244(between)-244(an)-244(index)-244(and)-244(a)-245(pr)19(ocess)-244(is)-244(speci\002ed)]TJ 0.986 0 0 1 146.441 501.158 Tm [(via)-254(an)-254(integer)-253(vector)]TJ/F145 9.9626 Tf 1 0 0 1 237.956 501.158 Tm [(vg\0501:mg\051)]TJ/F84 9.9626 Tf 0.986 0 0 1 279.798 501.158 Tm [(;)-254(each)-254(index)]TJ/F78 9.9626 Tf 1 0 0 1 333.837 501.158 Tm [(i)]TJ/F190 10.3811 Tf 5.861 0 Td [(2)-290(f)]TJ/F84 9.9626 Tf 0.986 0 0 1 354.949 501.158 Tm [(1)]TJ 1 0 0 1 361.645 501.158 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.201 0 Td [(m)-47(g)]TJ/F190 10.3811 Tf 13.449 0 Td [(g)]TJ/F84 9.9626 Tf 0.986 0 0 1 396.104 501.158 Tm [(is)-254(assigned)]TJ 1.02 0 0 1 146.72 489.203 Tm [(to)-260(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 194.476 489.203 Tm [(v)-47(g)]TJ/F192 10.3811 Tf 10.68 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 216.598 489.203 Tm [(.)-349(The)-260(vector)]TJ/F145 9.9626 Tf 1 0 0 1 272.971 489.203 Tm [(vg)]TJ/F84 9.9626 Tf 1.02 0 0 1 286.073 489.203 Tm [(must)-260(be)-260(identical)-260(on)-260(all)-260(calling)-260(pr)18(o-)]TJ 1.02 0 0 1 146.72 477.248 Tm [(cesses;)-427(its)-366(entries)-366(may)-367(have)-366(the)-366(ranges)]TJ/F192 10.3811 Tf 1 0 0 1 329.283 477.248 Tm [(\050)]TJ/F84 9.9626 Tf 1.02 0 0 1 333.433 477.248 Tm [(0)]TJ 1 0 0 1 340.299 477.248 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.96 0 Td [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 378.046 477.248 Tm [(1)]TJ/F192 10.3811 Tf 1 0 0 1 383.252 477.248 Tm [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 391.123 477.248 Tm [(or)]TJ/F192 10.3811 Tf 1 0 0 1 404.532 477.248 Tm [(\050)]TJ/F84 9.9626 Tf 1.02 0 0 1 408.681 477.248 Tm [(1)]TJ 1 0 0 1 415.547 477.248 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)-80(p)]TJ/F192 10.3811 Tf 11.567 0 Td [(\051)]TJ/F84 9.9626 Tf 0.993 0 0 1 146.72 465.293 Tm [(accor)18(ding)-252(to)-253(the)-252(value)-252(of)]TJ/F145 9.9626 Tf 1 0 0 1 257.41 465.293 Tm [(flag)]TJ/F84 9.9626 Tf 0.993 0 0 1 278.331 465.293 Tm [(.)-314(The)-253(size)]TJ/F78 9.9626 Tf 1 0 0 1 322.35 465.293 Tm [(m)-47(g)]TJ/F84 9.9626 Tf 0.993 0 0 1 338.172 465.293 Tm [(may)-252(be)-253(speci\002ed)-252(via)-253(the)]TJ 0.999 0 0 1 146.72 453.338 Tm [(optional)-250(ar)18(gument)]TJ/F145 9.9626 Tf 1 0 0 1 231.215 453.338 Tm [(mg)]TJ/F84 9.9626 Tf 0.999 0 0 1 241.676 453.338 Tm [(;)-250(the)-251(default)-250(is)-251(to)-250(use)-250(the)-251(entir)18(e)-250(vector)]TJ/F145 9.9626 Tf 1 0 0 1 408.907 453.338 Tm [(vg)]TJ/F84 9.9626 Tf 0.999 0 0 1 419.367 453.338 Tm [(,)-251(t)1(hus)]TJ 1 0 0 1 146.72 441.383 Tm [(having)]TJ/F145 9.9626 Tf 33.135 0 Td [(mg=size\050vg\051)]TJ/F84 9.9626 Tf 57.534 0 Td [(.)]TJ +/F84 9.9626 Tf 0.98 0 0 1 140.862 513.114 Tm [(In)-244(this)-244(case)-244(the)-244(association)-244(between)-244(an)-244(index)-244(and)-244(a)-245(pr)19(ocess)-244(is)-244(speci\002ed)]TJ 0.986 0 0 1 146.441 501.158 Tm [(via)-254(an)-254(integer)-253(vector)]TJ/F147 9.9626 Tf 1 0 0 1 237.956 501.158 Tm [(vg\0501:mg\051)]TJ/F84 9.9626 Tf 0.986 0 0 1 279.798 501.158 Tm [(;)-254(each)-254(index)]TJ/F78 9.9626 Tf 1 0 0 1 333.837 501.158 Tm [(i)]TJ/F195 10.3811 Tf 5.861 0 Td [(2)-290(f)]TJ/F84 9.9626 Tf 0.986 0 0 1 354.949 501.158 Tm [(1)]TJ 1 0 0 1 361.645 501.158 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.201 0 Td [(m)-47(g)]TJ/F195 10.3811 Tf 13.449 0 Td [(g)]TJ/F84 9.9626 Tf 0.986 0 0 1 396.104 501.158 Tm [(is)-254(assigned)]TJ 1.02 0 0 1 146.72 489.203 Tm [(to)-260(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 194.476 489.203 Tm [(v)-47(g)]TJ/F197 10.3811 Tf 10.68 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 216.598 489.203 Tm [(.)-349(The)-260(vector)]TJ/F147 9.9626 Tf 1 0 0 1 272.971 489.203 Tm [(vg)]TJ/F84 9.9626 Tf 1.02 0 0 1 286.073 489.203 Tm [(must)-260(be)-260(identical)-260(on)-260(all)-260(calling)-260(pr)18(o-)]TJ 1.02 0 0 1 146.72 477.248 Tm [(cesses;)-427(its)-366(entries)-366(may)-367(have)-366(the)-366(ranges)]TJ/F197 10.3811 Tf 1 0 0 1 329.283 477.248 Tm [(\050)]TJ/F84 9.9626 Tf 1.02 0 0 1 333.433 477.248 Tm [(0)]TJ 1 0 0 1 340.299 477.248 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.96 0 Td [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 378.046 477.248 Tm [(1)]TJ/F197 10.3811 Tf 1 0 0 1 383.252 477.248 Tm [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 391.123 477.248 Tm [(or)]TJ/F197 10.3811 Tf 1 0 0 1 404.532 477.248 Tm [(\050)]TJ/F84 9.9626 Tf 1.02 0 0 1 408.681 477.248 Tm [(1)]TJ 1 0 0 1 415.547 477.248 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(n)-80(p)]TJ/F197 10.3811 Tf 11.567 0 Td [(\051)]TJ/F84 9.9626 Tf 0.993 0 0 1 146.72 465.293 Tm [(accor)18(ding)-252(to)-253(the)-252(value)-252(of)]TJ/F147 9.9626 Tf 1 0 0 1 257.41 465.293 Tm [(flag)]TJ/F84 9.9626 Tf 0.993 0 0 1 278.331 465.293 Tm [(.)-314(The)-253(size)]TJ/F78 9.9626 Tf 1 0 0 1 322.35 465.293 Tm [(m)-47(g)]TJ/F84 9.9626 Tf 0.993 0 0 1 338.172 465.293 Tm [(may)-252(be)-253(speci\002ed)-252(via)-253(the)]TJ 0.999 0 0 1 146.72 453.338 Tm [(optional)-250(ar)18(gument)]TJ/F147 9.9626 Tf 1 0 0 1 231.215 453.338 Tm [(mg)]TJ/F84 9.9626 Tf 0.999 0 0 1 241.676 453.338 Tm [(;)-250(the)-251(default)-250(is)-251(to)-250(use)-250(the)-251(entir)18(e)-250(vector)]TJ/F147 9.9626 Tf 1 0 0 1 408.907 453.338 Tm [(vg)]TJ/F84 9.9626 Tf 0.999 0 0 1 419.367 453.338 Tm [(,)-251(t)1(hus)]TJ 1 0 0 1 146.72 441.383 Tm [(having)]TJ/F147 9.9626 Tf 33.135 0 Td [(mg=size\050vg\051)]TJ/F84 9.9626 Tf 57.534 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -112.587 -15.594 Td [(vl)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 138.64 425.789 Tm [(In)-336(this)-335(case)-336(we)-335(ar)17(e)-335(specifying)-336(the)-335(list)-336(of)-335(indices)]TJ/F145 9.9626 Tf 1 0 0 1 359.058 425.789 Tm [(vl\0501:nl\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 404.311 425.789 Tm [(assigned)]TJ 1.018 0 0 1 146.72 413.834 Tm [(to)-245(the)-246(curr)18(ent)-245(pr)17(ocess;)-245(thus,)-246(th)1(e)-246(global)-245(pr)17(oblem)-245(size)]TJ/F78 9.9626 Tf 1 0 0 1 379.625 413.834 Tm [(m)-47(g)]TJ/F84 9.9626 Tf 1.018 0 0 1 395.438 413.834 Tm [(is)-245(given)-246(by)]TJ 1.02 0 0 1 146.72 401.878 Tm [(the)-255(range)-255(of)-255(the)-255(aggr)18(egate)-255(of)-255(the)-255(individual)-255(vectors)]TJ/F145 9.9626 Tf 1 0 0 1 379.117 401.878 Tm [(vl)]TJ/F84 9.9626 Tf 1.02 0 0 1 392.168 401.878 Tm [(speci\002ed)-255(in)]TJ 1.02 0 0 1 146.72 389.923 Tm [(the)-346(calling)-347(pr)18(ocesses.)-608(The)-347(size)-346(may)-347(be)-346(speci\002ed)-347(via)-346(the)-347(optional)]TJ 1.02 0 0 1 146.72 377.968 Tm [(ar)18(gument)]TJ/F145 9.9626 Tf 1 0 0 1 193.05 377.968 Tm [(nl)]TJ/F84 9.9626 Tf 1.02 0 0 1 203.511 377.968 Tm [(;)-257(the)-253(default)-252(is)-253(to)-253(use)-253(the)-253(entir)18(e)-253(vector)]TJ/F145 9.9626 Tf 1 0 0 1 374.525 377.968 Tm [(vl)]TJ/F84 9.9626 Tf 1.02 0 0 1 384.986 377.968 Tm [(,)-255(thus)-253(having)]TJ/F145 9.9626 Tf 1 0 0 1 146.72 366.013 Tm [(nl=size\050vl\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 204.254 366.013 Tm [(.)-306(If)]TJ/F145 9.9626 Tf 1 0 0 1 218.412 366.013 Tm [(globalcheck=.true.)]TJ/F84 9.9626 Tf 0.98 0 0 1 314.747 366.013 Tm [(the)-224(subr)18(outine)-224(will)-224(check)-224(how)]TJ 0.98 0 0 1 146.72 354.058 Tm [(many)-208(times)-209(each)-208(entry)-209(in)-208(the)-209(global)-208(index)-209(space)]TJ/F192 10.3811 Tf 1 0 0 1 352.531 354.058 Tm [(\050)]TJ/F84 9.9626 Tf 0.98 0 0 1 356.68 354.058 Tm [(1)]TJ 1 0 0 1 363.347 354.058 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(m)-47(g)]TJ/F192 10.3811 Tf 13.45 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.182 354.058 Tm [(is)-208(speci\002ed)]TJ 0.999 0 0 1 146.72 342.103 Tm [(in)-249(the)-250(input)-249(lists)]TJ/F145 9.9626 Tf 1 0 0 1 220.533 342.103 Tm [(vl)]TJ/F84 9.9626 Tf 0.999 0 0 1 230.994 342.103 Tm [(,)-250(thus)-249(allowing)-249(for)-250(the)-249(pr)18(esence)-249(of)-250(overlap)-249(in)-249(the)]TJ 1.005 0 0 1 146.72 330.147 Tm [(input,)-248(and)-249(checking)-248(for)-249(\223orphan\224)-248(indices.)-308(If)]TJ/F145 9.9626 Tf 1 0 0 1 342.972 330.147 Tm [(globalcheck=.false.)]TJ/F84 9.9626 Tf 1.005 0 0 1 442.349 330.147 Tm [(,)]TJ 1.018 0 0 1 146.72 318.192 Tm [(the)-246(subr)18(outine)-246(will)-247(not)-246(check)-246(for)-246(overlap,)-246(and)-246(may)-246(be)-247(signi\002)1(cantly)]TJ 1.02 0 0 1 146.72 306.237 Tm [(faster)73(,)-256(but)-253(the)-253(user)-253(is)-254(implicitly)-253(guaranteeing)-253(that)-253(ther)17(e)-253(ar)18(e)-253(neither)]TJ 1 0 0 1 146.72 294.282 Tm [(orphan)-250(nor)-250(overlap)-250(indices.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 138.64 425.789 Tm [(In)-336(this)-335(case)-336(we)-335(ar)17(e)-335(specifying)-336(the)-335(list)-336(of)-335(indices)]TJ/F147 9.9626 Tf 1 0 0 1 359.058 425.789 Tm [(vl\0501:nl\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 404.311 425.789 Tm [(assigned)]TJ 1.018 0 0 1 146.72 413.834 Tm [(to)-245(the)-246(curr)18(ent)-245(pr)17(ocess;)-245(thus,)-246(th)1(e)-246(global)-245(pr)17(oblem)-245(size)]TJ/F78 9.9626 Tf 1 0 0 1 379.625 413.834 Tm [(m)-47(g)]TJ/F84 9.9626 Tf 1.018 0 0 1 395.438 413.834 Tm [(is)-245(given)-246(by)]TJ 1.02 0 0 1 146.72 401.878 Tm [(the)-255(range)-255(of)-255(the)-255(aggr)18(egate)-255(of)-255(the)-255(individual)-255(vectors)]TJ/F147 9.9626 Tf 1 0 0 1 379.117 401.878 Tm [(vl)]TJ/F84 9.9626 Tf 1.02 0 0 1 392.168 401.878 Tm [(speci\002ed)-255(in)]TJ 1.02 0 0 1 146.72 389.923 Tm [(the)-346(calling)-347(pr)18(ocesses.)-608(The)-347(size)-346(may)-347(be)-346(speci\002ed)-347(via)-346(the)-347(optional)]TJ 1.02 0 0 1 146.72 377.968 Tm [(ar)18(gument)]TJ/F147 9.9626 Tf 1 0 0 1 193.05 377.968 Tm [(nl)]TJ/F84 9.9626 Tf 1.02 0 0 1 203.511 377.968 Tm [(;)-257(the)-253(default)-252(is)-253(to)-253(use)-253(the)-253(entir)18(e)-253(vector)]TJ/F147 9.9626 Tf 1 0 0 1 374.525 377.968 Tm [(vl)]TJ/F84 9.9626 Tf 1.02 0 0 1 384.986 377.968 Tm [(,)-255(thus)-253(having)]TJ/F147 9.9626 Tf 1 0 0 1 146.72 366.013 Tm [(nl=size\050vl\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 204.254 366.013 Tm [(.)-306(If)]TJ/F147 9.9626 Tf 1 0 0 1 218.412 366.013 Tm [(globalcheck=.true.)]TJ/F84 9.9626 Tf 0.98 0 0 1 314.747 366.013 Tm [(the)-224(subr)18(outine)-224(will)-224(check)-224(how)]TJ 0.98 0 0 1 146.72 354.058 Tm [(many)-208(times)-209(each)-208(entry)-209(in)-208(the)-209(global)-208(index)-209(space)]TJ/F197 10.3811 Tf 1 0 0 1 352.531 354.058 Tm [(\050)]TJ/F84 9.9626 Tf 0.98 0 0 1 356.68 354.058 Tm [(1)]TJ 1 0 0 1 363.347 354.058 Tm [(.)-192(.)-191(.)]TJ/F78 9.9626 Tf 13.2 0 Td [(m)-47(g)]TJ/F197 10.3811 Tf 13.45 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.182 354.058 Tm [(is)-208(speci\002ed)]TJ 0.999 0 0 1 146.72 342.103 Tm [(in)-249(the)-250(input)-249(lists)]TJ/F147 9.9626 Tf 1 0 0 1 220.533 342.103 Tm [(vl)]TJ/F84 9.9626 Tf 0.999 0 0 1 230.994 342.103 Tm [(,)-250(thus)-249(allowing)-249(for)-250(the)-249(pr)18(esence)-249(of)-250(overlap)-249(in)-249(the)]TJ 1.005 0 0 1 146.72 330.147 Tm [(input,)-248(and)-249(checking)-248(for)-249(\223orphan\224)-248(indices.)-308(If)]TJ/F147 9.9626 Tf 1 0 0 1 342.972 330.147 Tm [(globalcheck=.false.)]TJ/F84 9.9626 Tf 1.005 0 0 1 442.349 330.147 Tm [(,)]TJ 1.018 0 0 1 146.72 318.192 Tm [(the)-246(subr)18(outine)-246(will)-247(not)-246(check)-246(for)-246(overlap,)-246(and)-246(may)-246(be)-247(signi\002)1(cantly)]TJ 1.02 0 0 1 146.72 306.237 Tm [(faster)73(,)-256(but)-253(the)-253(user)-253(is)-254(implicitly)-253(guaranteeing)-253(that)-253(ther)17(e)-253(ar)18(e)-253(neither)]TJ 1 0 0 1 146.72 294.282 Tm [(orphan)-250(nor)-250(overlap)-250(indices.)]TJ 0 g 0 G /F75 9.9626 Tf -21.918 -15.594 Td [(lidx)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 147.178 278.688 Tm [(The)-326(optional)-325(ar)18(gument)]TJ/F145 9.9626 Tf 1 0 0 1 255.3 278.688 Tm [(lidx)]TJ/F84 9.9626 Tf 1.02 0 0 1 279.53 278.688 Tm [(is)-326(available)-325(for)-326(those)-325(cases)-326(in)-325(which)]TJ 1.02 0 0 1 146.72 266.733 Tm [(the)-305(user)-305(has)-305(alr)18(eady)-306(established)-305(a)-305(global-to-local)-305(mapping;)-335(if)-305(it)-305(is)]TJ 1.001 0 0 1 146.72 254.778 Tm [(speci\002ed,)-250(each)-250(index)-250(in)]TJ/F145 9.9626 Tf 1 0 0 1 251.841 254.778 Tm [(vl\050i\051)]TJ/F84 9.9626 Tf 1.001 0 0 1 280.486 254.778 Tm [(will)-250(be)-250(mapped)-250(to)-250(the)-250(corr)18(esponding)]TJ 1.02 0 0 1 146.72 242.823 Tm [(local)-275(index)]TJ/F145 9.9626 Tf 1 0 0 1 198.551 242.823 Tm [(lidx\050i\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 235.163 242.823 Tm [(.)-393(When)-275(specifying)-275(the)-274(ar)17(gument)]TJ/F145 9.9626 Tf 1 0 0 1 383.887 242.823 Tm [(lidx)]TJ/F84 9.9626 Tf 1.02 0 0 1 407.601 242.823 Tm [(the)-275(user)]TJ 1.02 0 0 1 146.301 230.868 Tm [(would)-297(also)-297(likely)-297(employ)]TJ/F145 9.9626 Tf 1 0 0 1 264.721 230.868 Tm [(lidx)]TJ/F84 9.9626 Tf 1.02 0 0 1 288.659 230.868 Tm [(in)-297(calls)-297(to)]TJ/F145 9.9626 Tf 1 0 0 1 335.257 230.868 Tm [(psb_cdins)]TJ/F84 9.9626 Tf 1.02 0 0 1 385.346 230.868 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 405.567 230.868 Tm [(local)]TJ/F84 9.9626 Tf 1.02 0 0 1 434.735 230.868 Tm [(in)]TJ 1 0 0 1 146.72 218.912 Tm [(calls)-250(to)]TJ/F145 9.9626 Tf 33.095 0 Td [(psb_spins)]TJ/F84 9.9626 Tf 49.564 0 Td [(and)]TJ/F145 9.9626 Tf 19.357 0 Td [(psb_geins)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)-250(see)-250(also)-250(sec.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 147.178 278.688 Tm [(The)-326(optional)-325(ar)18(gument)]TJ/F147 9.9626 Tf 1 0 0 1 255.3 278.688 Tm [(lidx)]TJ/F84 9.9626 Tf 1.02 0 0 1 279.53 278.688 Tm [(is)-326(available)-325(for)-326(those)-325(cases)-326(in)-325(which)]TJ 1.02 0 0 1 146.72 266.733 Tm [(the)-305(user)-305(has)-305(alr)18(eady)-306(established)-305(a)-305(global-to-local)-305(mapping;)-335(if)-305(it)-305(is)]TJ 1.001 0 0 1 146.72 254.778 Tm [(speci\002ed,)-250(each)-250(index)-250(in)]TJ/F147 9.9626 Tf 1 0 0 1 251.841 254.778 Tm [(vl\050i\051)]TJ/F84 9.9626 Tf 1.001 0 0 1 280.486 254.778 Tm [(will)-250(be)-250(mapped)-250(to)-250(the)-250(corr)18(esponding)]TJ 1.02 0 0 1 146.72 242.823 Tm [(local)-275(index)]TJ/F147 9.9626 Tf 1 0 0 1 198.551 242.823 Tm [(lidx\050i\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 235.163 242.823 Tm [(.)-393(When)-275(specifying)-275(the)-274(ar)17(gument)]TJ/F147 9.9626 Tf 1 0 0 1 383.887 242.823 Tm [(lidx)]TJ/F84 9.9626 Tf 1.02 0 0 1 407.601 242.823 Tm [(the)-275(user)]TJ 1.02 0 0 1 146.301 230.868 Tm [(would)-297(also)-297(likely)-297(employ)]TJ/F147 9.9626 Tf 1 0 0 1 264.721 230.868 Tm [(lidx)]TJ/F84 9.9626 Tf 1.02 0 0 1 288.659 230.868 Tm [(in)-297(calls)-297(to)]TJ/F147 9.9626 Tf 1 0 0 1 335.257 230.868 Tm [(psb_cdins)]TJ/F84 9.9626 Tf 1.02 0 0 1 385.346 230.868 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 405.567 230.868 Tm [(local)]TJ/F84 9.9626 Tf 1.02 0 0 1 434.735 230.868 Tm [(in)]TJ 1 0 0 1 146.72 218.912 Tm [(calls)-250(to)]TJ/F147 9.9626 Tf 33.095 0 Td [(psb_spins)]TJ/F84 9.9626 Tf 49.564 0 Td [(and)]TJ/F147 9.9626 Tf 19.357 0 Td [(psb_geins)]TJ/F84 9.9626 Tf 47.073 0 Td [(;)-250(see)-250(also)-250(sec.)]TJ 0 0 1 rg 0 0 1 RG [-250(2.3.1)]TJ 0 g 0 G @@ -17129,7 +17138,7 @@ BT 0 g 0 G /F75 9.9626 Tf -171.007 -15.593 Td [(nl)]TJ 0 g 0 G -/F84 9.9626 Tf 0.98 0 0 1 139.188 203.319 Tm [(If)-247(this)-248(ar)19(gument)-247(is)-248(speci\002ed)-247(alone)-247(\050i.e.)-314(without)]TJ/F145 9.9626 Tf 1 0 0 1 342.277 203.319 Tm [(vl)]TJ/F84 9.9626 Tf 0.98 0 0 1 352.737 203.319 Tm [(\051)-247(the)-248(r)19(esult)-247(is)-248(a)-247(gener)18(-)]TJ 0.98 0 0 1 146.72 191.364 Tm [(alized)-250(r)18(ow-block)-250(distribution)-250(in)-250(which)-250(each)-251(pr)19(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 372.364 191.364 Tm [(I)]TJ/F84 9.9626 Tf 0.98 0 0 1 378.657 191.364 Tm [(gets)-250(assigned)-250(a)]TJ 1 0 0 1 146.72 179.408 Tm [(consecutive)-250(chunk)-250(of)]TJ/F78 9.9626 Tf 95.904 0 Td [(N)]TJ/F78 7.5716 Tf 7.85 -1.808 Td [(I)]TJ/F192 10.3811 Tf 6.317 1.808 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-25(l)]TJ/F84 9.9626 Tf 11.472 0 Td [(global)-250(indices.)]TJ +/F84 9.9626 Tf 0.98 0 0 1 139.188 203.319 Tm [(If)-247(this)-248(ar)19(gument)-247(is)-248(speci\002ed)-247(alone)-247(\050i.e.)-314(without)]TJ/F147 9.9626 Tf 1 0 0 1 342.277 203.319 Tm [(vl)]TJ/F84 9.9626 Tf 0.98 0 0 1 352.737 203.319 Tm [(\051)-247(the)-248(r)19(esult)-247(is)-248(a)-247(gener)18(-)]TJ 0.98 0 0 1 146.72 191.364 Tm [(alized)-250(r)18(ow-block)-250(distribution)-250(in)-250(which)-250(each)-251(pr)19(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 372.364 191.364 Tm [(I)]TJ/F84 9.9626 Tf 0.98 0 0 1 378.657 191.364 Tm [(gets)-250(assigned)-250(a)]TJ 1 0 0 1 146.72 179.408 Tm [(consecutive)-250(chunk)-250(of)]TJ/F78 9.9626 Tf 95.904 0 Td [(N)]TJ/F78 7.5716 Tf 7.85 -1.808 Td [(I)]TJ/F197 10.3811 Tf 6.317 1.808 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-25(l)]TJ/F84 9.9626 Tf 11.472 0 Td [(global)-250(indices.)]TJ 0 g 0 G /F75 9.9626 Tf -154.547 -15.593 Td [(repl)]TJ 0 g 0 G @@ -17145,7 +17154,7 @@ ET endstream endobj -1495 0 obj +1496 0 obj << /Length 2982 >> @@ -17156,23 +17165,23 @@ stream BT /F84 9.9626 Tf 163.158 706.129 Td [(3.)]TJ 0 g 0 G - 1.005 0 0 1 175.611 706.129 Tm [(Calling)-248(the)-249(r)18(outine)-248(with)]TJ/F145 9.9626 Tf 1 0 0 1 284.117 706.129 Tm [(vg)]TJ/F84 9.9626 Tf 1.005 0 0 1 297.063 706.129 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 308.971 706.129 Tm [(parts)]TJ/F84 9.9626 Tf 1.005 0 0 1 337.608 706.129 Tm [(implies)-248(that)-249(eve)1(ry)-249(pr)18(ocess)-248(will)-248(scan)]TJ 1 0 0 1 175.611 694.174 Tm [(the)-250(entir)18(e)-250(index)-250(space)-250(to)-250(\002gur)18(e)-250(out)-250(the)-250(local)-250(indices.)]TJ + 1.005 0 0 1 175.611 706.129 Tm [(Calling)-248(the)-249(r)18(outine)-248(with)]TJ/F147 9.9626 Tf 1 0 0 1 284.117 706.129 Tm [(vg)]TJ/F84 9.9626 Tf 1.005 0 0 1 297.063 706.129 Tm [(or)]TJ/F147 9.9626 Tf 1 0 0 1 308.971 706.129 Tm [(parts)]TJ/F84 9.9626 Tf 1.005 0 0 1 337.608 706.129 Tm [(implies)-248(that)-249(eve)1(ry)-249(pr)18(ocess)-248(will)-248(scan)]TJ 1 0 0 1 175.611 694.174 Tm [(the)-250(entir)18(e)-250(index)-250(space)-250(to)-250(\002gur)18(e)-250(out)-250(the)-250(local)-250(indices.)]TJ 0 g 0 G -12.453 -19.926 Td [(4.)]TJ 0 g 0 G - [-500(Overlapped)-250(indices)-250(ar)18(e)-250(possible)-250(with)-250(both)]TJ/F145 9.9626 Tf 201.094 0 Td [(parts)]TJ/F84 9.9626 Tf 28.642 0 Td [(and)]TJ/F145 9.9626 Tf 19.357 0 Td [(vl)]TJ/F84 9.9626 Tf 12.952 0 Td [(invocations.)]TJ + [-500(Overlapped)-250(indices)-250(ar)18(e)-250(possible)-250(with)-250(both)]TJ/F147 9.9626 Tf 201.094 0 Td [(parts)]TJ/F84 9.9626 Tf 28.642 0 Td [(and)]TJ/F147 9.9626 Tf 19.357 0 Td [(vl)]TJ/F84 9.9626 Tf 12.952 0 Td [(invocations.)]TJ 0 g 0 G -262.045 -19.925 Td [(5.)]TJ 0 g 0 G - 0.98 0 0 1 175.113 654.323 Tm [(When)-194(the)-194(subr)19(outine)-194(is)-194(invoked)-194(with)]TJ/F145 9.9626 Tf 1 0 0 1 334.791 654.323 Tm [(vl)]TJ/F84 9.9626 Tf 0.98 0 0 1 347.144 654.323 Tm [(in)-194(conjunction)-194(with)]TJ/F145 9.9626 Tf 1 0 0 1 431.769 654.323 Tm [(globalcheck=.true.)]TJ/F84 9.9626 Tf 0.98 0 0 1 525.915 654.323 Tm [(,)]TJ 1.015 0 0 1 175.611 642.368 Tm [(it)-247(will)-246(perform)-247(a)-246(scan)-247(of)-246(the)-247(index)-247(space)-246(to)-247(sear)18(ch)-247(for)-246(overlap)-247(or)-246(orphan)]TJ 1 0 0 1 175.611 630.413 Tm [(indices.)]TJ + 0.98 0 0 1 175.113 654.323 Tm [(When)-194(the)-194(subr)19(outine)-194(is)-194(invoked)-194(with)]TJ/F147 9.9626 Tf 1 0 0 1 334.791 654.323 Tm [(vl)]TJ/F84 9.9626 Tf 0.98 0 0 1 347.144 654.323 Tm [(in)-194(conjunction)-194(with)]TJ/F147 9.9626 Tf 1 0 0 1 431.769 654.323 Tm [(globalcheck=.true.)]TJ/F84 9.9626 Tf 0.98 0 0 1 525.915 654.323 Tm [(,)]TJ 1.015 0 0 1 175.611 642.368 Tm [(it)-247(will)-246(perform)-247(a)-246(scan)-247(of)-246(the)-247(index)-247(space)-246(to)-247(sear)18(ch)-247(for)-246(overlap)-247(or)-246(orphan)]TJ 1 0 0 1 175.611 630.413 Tm [(indices.)]TJ 0 g 0 G -12.453 -19.925 Td [(6.)]TJ 0 g 0 G - 0.98 0 0 1 175.113 610.488 Tm [(When)-194(the)-194(subr)19(outine)-194(is)-194(invoked)-194(with)]TJ/F145 9.9626 Tf 1 0 0 1 334.791 610.488 Tm [(vl)]TJ/F84 9.9626 Tf 0.98 0 0 1 347.144 610.488 Tm [(in)-194(conjunction)-194(with)]TJ/F145 9.9626 Tf 1 0 0 1 431.769 610.488 Tm [(globalcheck=.false.)]TJ/F84 9.9626 Tf 0.98 0 0 1 531.145 610.488 Tm [(,)]TJ 1.02 0 0 1 175.611 598.532 Tm [(no)-295(index)-295(space)-295(scan)-296(wil)1(l)-296(take)-295(place.)-454(Thus)-295(it)-295(is)-295(the)-295(r)17(esponsib)1(ility)-296(of)-295(the)]TJ 1.02 0 0 1 175.611 586.577 Tm [(user)-277(to)-278(make)-277(sur)17(e)-277(that)-277(the)-278(indices)-277(speci\002ed)-278(in)]TJ/F145 9.9626 Tf 1 0 0 1 385.16 586.577 Tm [(vl)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.439 586.577 Tm [(have)-277(neither)-278(orphans)]TJ 1 0 0 1 175.611 574.622 Tm [(nor)-250(overlaps;)-250(if)-250(this)-250(assumption)-250(fails,)-250(r)18(esults)-250(will)-250(be)-250(unpr)18(edictable.)]TJ + 0.98 0 0 1 175.113 610.488 Tm [(When)-194(the)-194(subr)19(outine)-194(is)-194(invoked)-194(with)]TJ/F147 9.9626 Tf 1 0 0 1 334.791 610.488 Tm [(vl)]TJ/F84 9.9626 Tf 0.98 0 0 1 347.144 610.488 Tm [(in)-194(conjunction)-194(with)]TJ/F147 9.9626 Tf 1 0 0 1 431.769 610.488 Tm [(globalcheck=.false.)]TJ/F84 9.9626 Tf 0.98 0 0 1 531.145 610.488 Tm [(,)]TJ 1.02 0 0 1 175.611 598.532 Tm [(no)-295(index)-295(space)-295(scan)-296(wil)1(l)-296(take)-295(place.)-454(Thus)-295(it)-295(is)-295(the)-295(r)17(esponsib)1(ility)-296(of)-295(the)]TJ 1.02 0 0 1 175.611 586.577 Tm [(user)-277(to)-278(make)-277(sur)17(e)-277(that)-277(the)-278(indices)-277(speci\002ed)-278(in)]TJ/F147 9.9626 Tf 1 0 0 1 385.16 586.577 Tm [(vl)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.439 586.577 Tm [(have)-277(neither)-278(orphans)]TJ 1 0 0 1 175.611 574.622 Tm [(nor)-250(overlaps;)-250(if)-250(this)-250(assumption)-250(fails,)-250(r)18(esults)-250(will)-250(be)-250(unpr)18(edictable.)]TJ 0 g 0 G -12.453 -19.925 Td [(7.)]TJ 0 g 0 G - 1.02 0 0 1 175.611 554.697 Tm [(Orphan)-347(and)-347(overlap)-346(indices)-347(ar)17(e)-346(impossible)-347(by)-347(constr)8(uction)-347(when)-347(the)]TJ 1 0 0 1 175.611 542.742 Tm [(subr)18(outine)-250(is)-250(invoked)-250(with)]TJ/F145 9.9626 Tf 121.164 0 Td [(nl)]TJ/F84 9.9626 Tf 12.952 0 Td [(\050alone\051,)-250(or)]TJ/F145 9.9626 Tf 47.372 0 Td [(vg)]TJ/F84 9.9626 Tf 10.46 0 Td [(.)]TJ + 1.02 0 0 1 175.611 554.697 Tm [(Orphan)-347(and)-347(overlap)-346(indices)-347(ar)17(e)-346(impossible)-347(by)-347(constr)8(uction)-347(when)-347(the)]TJ 1 0 0 1 175.611 542.742 Tm [(subr)18(outine)-250(is)-250(invoked)-250(with)]TJ/F147 9.9626 Tf 121.164 0 Td [(nl)]TJ/F84 9.9626 Tf 12.952 0 Td [(\050alone\051,)-250(or)]TJ/F147 9.9626 Tf 47.372 0 Td [(vg)]TJ/F84 9.9626 Tf 10.46 0 Td [(.)]TJ 0 g 0 G -49.98 -452.304 Td [(74)]TJ 0 g 0 G @@ -17180,7 +17189,7 @@ ET endstream endobj -1383 0 obj +1384 0 obj << /Type /ObjStm /N 100 @@ -17188,39 +17197,39 @@ endobj /Length 12161 >> stream -1382 0 292 58 1379 115 1389 196 1384 353 1385 497 1386 644 1391 791 296 850 1392 908 -1388 967 1396 1104 1401 1252 1402 1379 1403 1422 1404 1629 1405 1867 1406 2143 1387 2379 1394 2526 -1398 2672 1399 2730 1395 2788 1410 2925 1412 3043 1409 3102 1417 3170 1413 3327 1414 3471 1415 3616 -1419 3763 300 3821 1420 3878 1416 3936 1426 4072 1421 4229 1423 4376 1424 4521 1428 4667 1429 4726 -1430 4785 1431 4844 1425 4903 1434 5011 1436 5129 1433 5187 1438 5255 1441 5373 1442 5500 1443 5543 -1444 5750 1445 5988 1446 6264 1440 6500 1432 6559 1437 6618 1453 6715 1449 6872 1450 7013 1451 7160 -1455 7307 304 7365 1456 7422 1452 7480 1459 7616 1461 7734 1458 7793 1465 7888 1462 8027 1467 8174 -308 8232 1468 8289 1464 8347 1472 8483 1463 8640 1469 8784 1470 8928 1474 9074 1471 9133 1476 9241 -1478 9359 312 9417 316 9474 1475 9530 1481 9666 1479 9805 1483 9952 1484 10011 1480 10070 1487 10192 -1485 10331 1489 10489 1491 10547 1486 10605 1494 10756 1496 10874 1497 10933 1498 10992 1499 11051 1500 11110 -% 1382 0 obj +1383 0 292 58 1380 115 1390 196 1385 353 1386 497 1387 644 1392 791 296 850 1393 908 +1389 967 1397 1104 1402 1252 1403 1379 1404 1422 1405 1629 1406 1867 1407 2143 1388 2379 1395 2526 +1399 2672 1400 2730 1396 2788 1411 2925 1413 3043 1410 3102 1418 3170 1414 3327 1415 3471 1416 3616 +1420 3763 300 3821 1421 3878 1417 3936 1427 4072 1422 4229 1424 4376 1425 4521 1429 4667 1430 4726 +1431 4785 1432 4844 1426 4903 1435 5011 1437 5129 1434 5187 1439 5255 1442 5373 1443 5500 1444 5543 +1445 5750 1446 5988 1447 6264 1441 6500 1433 6559 1438 6618 1454 6715 1450 6872 1451 7013 1452 7160 +1456 7307 304 7365 1457 7422 1453 7480 1460 7616 1462 7734 1459 7793 1466 7888 1463 8027 1468 8174 +308 8232 1469 8289 1465 8347 1473 8483 1464 8640 1470 8784 1471 8928 1475 9074 1472 9133 1477 9241 +1479 9359 312 9417 316 9474 1476 9530 1482 9666 1480 9805 1484 9952 1485 10011 1481 10070 1488 10192 +1486 10331 1490 10489 1492 10547 1487 10605 1495 10756 1497 10874 1498 10933 1499 10992 1500 11051 1501 11110 +% 1383 0 obj << -/D [1380 0 R /XYZ 98.895 753.953 null] +/D [1381 0 R /XYZ 98.895 753.953 null] >> % 292 0 obj << -/D [1380 0 R /XYZ 99.895 716.092 null] +/D [1381 0 R /XYZ 99.895 716.092 null] >> -% 1379 0 obj +% 1380 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1389 0 obj +% 1390 0 obj << /Type /Page -/Contents 1390 0 R -/Resources 1388 0 R +/Contents 1391 0 R +/Resources 1389 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1351 0 R -/Annots [ 1384 0 R 1385 0 R 1386 0 R ] +/Parent 1352 0 R +/Annots [ 1385 0 R 1386 0 R 1387 0 R ] >> -% 1384 0 obj +% 1385 0 obj << /Type /Annot /Subtype /Link @@ -17228,7 +17237,7 @@ stream /Rect [419.358 344.818 495.412 356.877] /A << /S /GoTo /D (vdata) >> >> -% 1385 0 obj +% 1386 0 obj << /Type /Annot /Subtype /Link @@ -17236,7 +17245,7 @@ stream /Rect [377.462 332.863 389.417 344.922] /A << /S /GoTo /D (table.17) >> >> -% 1386 0 obj +% 1387 0 obj << /Type /Annot /Subtype /Link @@ -17244,47 +17253,47 @@ stream /Rect [342.753 264.733 409.811 276.793] /A << /S /GoTo /D (descdata) >> >> -% 1391 0 obj +% 1392 0 obj << -/D [1389 0 R /XYZ 149.705 753.953 null] +/D [1390 0 R /XYZ 149.705 753.953 null] >> % 296 0 obj << -/D [1389 0 R /XYZ 150.705 716.092 null] +/D [1390 0 R /XYZ 150.705 716.092 null] >> -% 1392 0 obj +% 1393 0 obj << -/D [1389 0 R /XYZ 150.705 513.636 null] +/D [1390 0 R /XYZ 150.705 513.636 null] >> -% 1388 0 obj +% 1389 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F147 1157 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F151 1158 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1396 0 obj +% 1397 0 obj << /Type /Page -/Contents 1397 0 R -/Resources 1395 0 R +/Contents 1398 0 R +/Resources 1396 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1400 0 R -/Annots [ 1387 0 R 1394 0 R ] +/Parent 1401 0 R +/Annots [ 1388 0 R 1395 0 R ] >> -% 1401 0 obj +% 1402 0 obj << /Producer (GPL Ghostscript 9.22) /CreationDate (D:20180323100645Z00'00') /ModDate (D:20180323100645Z00'00') >> -% 1402 0 obj +% 1403 0 obj << /Type /ExtGState /OPM 1 >> -% 1403 0 obj +% 1404 0 obj << /BaseFont /XYUGDR+Times-Roman -/FontDescriptor 1405 0 R +/FontDescriptor 1406 0 R /Type /Font /FirstChar 48 /LastChar 57 @@ -17292,10 +17301,10 @@ stream /Encoding /WinAnsiEncoding /Subtype /Type1 >> -% 1404 0 obj +% 1405 0 obj << /BaseFont /XISTAL+Times-Bold -/FontDescriptor 1406 0 R +/FontDescriptor 1407 0 R /Type /Font /FirstChar 48 /LastChar 80 @@ -17303,7 +17312,7 @@ stream /Encoding /WinAnsiEncoding /Subtype /Type1 >> -% 1405 0 obj +% 1406 0 obj << /Type /FontDescriptor /FontName /XYUGDR+Times-Roman @@ -17316,9 +17325,9 @@ stream /StemV 71 /MissingWidth 250 /CharSet (/eight/five/four/nine/one/seven/six/three/two/zero) -/FontFile3 1407 0 R +/FontFile3 1408 0 R >> -% 1406 0 obj +% 1407 0 obj << /Type /FontDescriptor /FontName /XISTAL+Times-Bold @@ -17331,9 +17340,9 @@ stream /StemV 90 /MissingWidth 250 /CharSet (/P/one/zero) -/FontFile3 1408 0 R +/FontFile3 1409 0 R >> -% 1387 0 obj +% 1388 0 obj << /Type /Annot /Subtype /Link @@ -17341,7 +17350,7 @@ stream /Rect [160.836 625.272 172.792 634.682] /A << /S /GoTo /D (table.17) >> >> -% 1394 0 obj +% 1395 0 obj << /Type /Annot /Subtype /Link @@ -17349,47 +17358,47 @@ stream /Rect [408.91 276.439 415.983 290.202] /A << /S /GoTo /D (figure.3) >> >> -% 1398 0 obj +% 1399 0 obj << -/D [1396 0 R /XYZ 98.895 753.953 null] +/D [1397 0 R /XYZ 98.895 753.953 null] >> -% 1399 0 obj +% 1400 0 obj << -/D [1396 0 R /XYZ 99.895 326.444 null] +/D [1397 0 R /XYZ 99.895 326.444 null] >> -% 1395 0 obj +% 1396 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F145 940 0 R >> -/XObject << /Im4 1393 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F147 941 0 R >> +/XObject << /Im4 1394 0 R >> /ProcSet [ /PDF /Text ] >> -% 1410 0 obj +% 1411 0 obj << /Type /Page -/Contents 1411 0 R -/Resources 1409 0 R +/Contents 1412 0 R +/Resources 1410 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1400 0 R +/Parent 1401 0 R >> -% 1412 0 obj +% 1413 0 obj << -/D [1410 0 R /XYZ 149.705 753.953 null] +/D [1411 0 R /XYZ 149.705 753.953 null] >> -% 1409 0 obj +% 1410 0 obj << /Font << /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1417 0 obj +% 1418 0 obj << /Type /Page -/Contents 1418 0 R -/Resources 1416 0 R +/Contents 1419 0 R +/Resources 1417 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1400 0 R -/Annots [ 1413 0 R 1414 0 R 1415 0 R ] +/Parent 1401 0 R +/Annots [ 1414 0 R 1415 0 R 1416 0 R ] >> -% 1413 0 obj +% 1414 0 obj << /Type /Annot /Subtype /Link @@ -17397,7 +17406,7 @@ stream /Rect [368.549 345.485 444.603 357.545] /A << /S /GoTo /D (vdata) >> >> -% 1414 0 obj +% 1415 0 obj << /Type /Annot /Subtype /Link @@ -17405,7 +17414,7 @@ stream /Rect [326.652 333.53 338.608 345.59] /A << /S /GoTo /D (table.18) >> >> -% 1415 0 obj +% 1416 0 obj << /Type /Annot /Subtype /Link @@ -17413,33 +17422,33 @@ stream /Rect [291.943 266.146 359.001 278.205] /A << /S /GoTo /D (descdata) >> >> -% 1419 0 obj +% 1420 0 obj << -/D [1417 0 R /XYZ 98.895 753.953 null] +/D [1418 0 R /XYZ 98.895 753.953 null] >> % 300 0 obj << -/D [1417 0 R /XYZ 99.895 716.092 null] +/D [1418 0 R /XYZ 99.895 716.092 null] >> -% 1420 0 obj +% 1421 0 obj << -/D [1417 0 R /XYZ 99.895 510.975 null] +/D [1418 0 R /XYZ 99.895 510.975 null] >> -% 1416 0 obj +% 1417 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F145 940 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F147 941 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1426 0 obj +% 1427 0 obj << /Type /Page -/Contents 1427 0 R -/Resources 1425 0 R +/Contents 1428 0 R +/Resources 1426 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1400 0 R -/Annots [ 1421 0 R 1423 0 R 1424 0 R ] +/Parent 1401 0 R +/Annots [ 1422 0 R 1424 0 R 1425 0 R ] >> -% 1421 0 obj +% 1422 0 obj << /Type /Annot /Subtype /Link @@ -17447,7 +17456,7 @@ stream /Rect [253.329 554.876 265.284 566.936] /A << /S /GoTo /D (table.18) >> >> -% 1423 0 obj +% 1424 0 obj << /Type /Annot /Subtype /Link @@ -17455,7 +17464,7 @@ stream /Rect [459.716 325.46 466.79 339.127] /A << /S /GoTo /D (figure.4) >> >> -% 1424 0 obj +% 1425 0 obj << /Type /Annot /Subtype /Link @@ -17463,67 +17472,67 @@ stream /Rect [357.03 301.825 364.103 313.885] /A << /S /GoTo /D (figure.3) >> >> -% 1428 0 obj -<< -/D [1426 0 R /XYZ 149.705 753.953 null] ->> % 1429 0 obj << -/D [1426 0 R /XYZ 150.705 464.818 null] +/D [1427 0 R /XYZ 149.705 753.953 null] >> % 1430 0 obj << -/D [1426 0 R /XYZ 150.705 430.343 null] +/D [1427 0 R /XYZ 150.705 464.818 null] >> % 1431 0 obj << -/D [1426 0 R /XYZ 150.705 386.508 null] +/D [1427 0 R /XYZ 150.705 430.343 null] >> -% 1425 0 obj +% 1432 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F145 940 0 R >> +/D [1427 0 R /XYZ 150.705 386.508 null] +>> +% 1426 0 obj +<< +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1434 0 obj +% 1435 0 obj << /Type /Page -/Contents 1435 0 R -/Resources 1433 0 R +/Contents 1436 0 R +/Resources 1434 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1400 0 R +/Parent 1401 0 R >> -% 1436 0 obj +% 1437 0 obj << -/D [1434 0 R /XYZ 98.895 753.953 null] +/D [1435 0 R /XYZ 98.895 753.953 null] >> -% 1433 0 obj +% 1434 0 obj << /Font << /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1438 0 obj +% 1439 0 obj << /Type /Page -/Contents 1439 0 R -/Resources 1437 0 R +/Contents 1440 0 R +/Resources 1438 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1400 0 R +/Parent 1401 0 R >> -% 1441 0 obj +% 1442 0 obj << /Producer (GPL Ghostscript 9.22) /CreationDate (D:20180323100658Z00'00') /ModDate (D:20180323100658Z00'00') >> -% 1442 0 obj +% 1443 0 obj << /Type /ExtGState /OPM 1 >> -% 1443 0 obj +% 1444 0 obj << /BaseFont /XYUGDR+Times-Roman -/FontDescriptor 1445 0 R +/FontDescriptor 1446 0 R /Type /Font /FirstChar 48 /LastChar 57 @@ -17531,10 +17540,10 @@ stream /Encoding /WinAnsiEncoding /Subtype /Type1 >> -% 1444 0 obj +% 1445 0 obj << /BaseFont /XISTAL+Times-Bold -/FontDescriptor 1446 0 R +/FontDescriptor 1447 0 R /Type /Font /FirstChar 48 /LastChar 80 @@ -17542,7 +17551,7 @@ stream /Encoding /WinAnsiEncoding /Subtype /Type1 >> -% 1445 0 obj +% 1446 0 obj << /Type /FontDescriptor /FontName /XYUGDR+Times-Roman @@ -17555,9 +17564,9 @@ stream /StemV 71 /MissingWidth 250 /CharSet (/eight/five/four/nine/one/seven/six/three/two/zero) -/FontFile3 1447 0 R +/FontFile3 1448 0 R >> -% 1446 0 obj +% 1447 0 obj << /Type /FontDescriptor /FontName /XISTAL+Times-Bold @@ -17570,32 +17579,32 @@ stream /StemV 90 /MissingWidth 250 /CharSet (/P/one/zero) -/FontFile3 1448 0 R +/FontFile3 1449 0 R >> -% 1440 0 obj +% 1441 0 obj << -/D [1438 0 R /XYZ 149.705 753.953 null] +/D [1439 0 R /XYZ 149.705 753.953 null] >> -% 1432 0 obj +% 1433 0 obj << -/D [1438 0 R /XYZ 150.705 282.918 null] +/D [1439 0 R /XYZ 150.705 282.918 null] >> -% 1437 0 obj +% 1438 0 obj << /Font << /F84 687 0 R >> -/XObject << /Im5 1422 0 R >> +/XObject << /Im5 1423 0 R >> /ProcSet [ /PDF /Text ] >> -% 1453 0 obj +% 1454 0 obj << /Type /Page -/Contents 1454 0 R -/Resources 1452 0 R +/Contents 1455 0 R +/Resources 1453 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1457 0 R -/Annots [ 1449 0 R 1450 0 R 1451 0 R ] +/Parent 1458 0 R +/Annots [ 1450 0 R 1451 0 R 1452 0 R ] >> -% 1449 0 obj +% 1450 0 obj << /Type /Annot /Subtype /Link @@ -17603,7 +17612,7 @@ stream /Rect [368.549 298.8 444.603 310.86] /A << /S /GoTo /D (vdata) >> >> -% 1450 0 obj +% 1451 0 obj << /Type /Annot /Subtype /Link @@ -17611,7 +17620,7 @@ stream /Rect [204.522 289.495 216.477 298.905] /A << /S /GoTo /D (table.19) >> >> -% 1451 0 obj +% 1452 0 obj << /Type /Annot /Subtype /Link @@ -17619,50 +17628,50 @@ stream /Rect [291.943 218.115 359.001 230.175] /A << /S /GoTo /D (descdata) >> >> -% 1455 0 obj +% 1456 0 obj << -/D [1453 0 R /XYZ 98.895 753.953 null] +/D [1454 0 R /XYZ 98.895 753.953 null] >> % 304 0 obj << -/D [1453 0 R /XYZ 99.895 716.092 null] +/D [1454 0 R /XYZ 99.895 716.092 null] >> -% 1456 0 obj +% 1457 0 obj << -/D [1453 0 R /XYZ 99.895 460.417 null] +/D [1454 0 R /XYZ 99.895 460.417 null] >> -% 1452 0 obj +% 1453 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1459 0 obj +% 1460 0 obj << /Type /Page -/Contents 1460 0 R -/Resources 1458 0 R +/Contents 1461 0 R +/Resources 1459 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1457 0 R +/Parent 1458 0 R >> -% 1461 0 obj +% 1462 0 obj << -/D [1459 0 R /XYZ 149.705 753.953 null] +/D [1460 0 R /XYZ 149.705 753.953 null] >> -% 1458 0 obj +% 1459 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1465 0 obj +% 1466 0 obj << /Type /Page -/Contents 1466 0 R -/Resources 1464 0 R +/Contents 1467 0 R +/Resources 1465 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1457 0 R -/Annots [ 1462 0 R ] +/Parent 1458 0 R +/Annots [ 1463 0 R ] >> -% 1462 0 obj +% 1463 0 obj << /Type /Annot /Subtype /Link @@ -17670,33 +17679,33 @@ stream /Rect [291.943 211.064 359.001 223.124] /A << /S /GoTo /D (descdata) >> >> -% 1467 0 obj +% 1468 0 obj << -/D [1465 0 R /XYZ 98.895 753.953 null] +/D [1466 0 R /XYZ 98.895 753.953 null] >> % 308 0 obj << -/D [1465 0 R /XYZ 99.895 716.092 null] +/D [1466 0 R /XYZ 99.895 716.092 null] >> -% 1468 0 obj +% 1469 0 obj << -/D [1465 0 R /XYZ 99.895 449.977 null] +/D [1466 0 R /XYZ 99.895 449.977 null] >> -% 1464 0 obj +% 1465 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F192 942 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F197 943 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1472 0 obj +% 1473 0 obj << /Type /Page -/Contents 1473 0 R -/Resources 1471 0 R +/Contents 1474 0 R +/Resources 1472 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1457 0 R -/Annots [ 1463 0 R 1469 0 R 1470 0 R ] +/Parent 1458 0 R +/Annots [ 1464 0 R 1470 0 R 1471 0 R ] >> -% 1463 0 obj +% 1464 0 obj << /Type /Annot /Subtype /Link @@ -17704,7 +17713,7 @@ stream /Rect [338.319 642.547 414.374 654.607] /A << /S /GoTo /D (vdata) >> >> -% 1469 0 obj +% 1470 0 obj << /Type /Annot /Subtype /Link @@ -17712,7 +17721,7 @@ stream /Rect [174.615 542.921 250.669 554.981] /A << /S /GoTo /D (vdata) >> >> -% 1470 0 obj +% 1471 0 obj << /Type /Annot /Subtype /Link @@ -17720,50 +17729,50 @@ stream /Rect [472.325 542.921 484.28 554.981] /A << /S /GoTo /D (table.20) >> >> -% 1474 0 obj +% 1475 0 obj << -/D [1472 0 R /XYZ 149.705 753.953 null] +/D [1473 0 R /XYZ 149.705 753.953 null] >> -% 1471 0 obj +% 1472 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1476 0 obj +% 1477 0 obj << /Type /Page -/Contents 1477 0 R -/Resources 1475 0 R +/Contents 1478 0 R +/Resources 1476 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1457 0 R +/Parent 1458 0 R >> -% 1478 0 obj +% 1479 0 obj << -/D [1476 0 R /XYZ 98.895 753.953 null] +/D [1477 0 R /XYZ 98.895 753.953 null] >> % 312 0 obj << -/D [1476 0 R /XYZ 99.895 716.092 null] +/D [1477 0 R /XYZ 99.895 716.092 null] >> % 316 0 obj << -/D [1476 0 R /XYZ 99.895 691.48 null] +/D [1477 0 R /XYZ 99.895 691.48 null] >> -% 1475 0 obj +% 1476 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1481 0 obj +% 1482 0 obj << /Type /Page -/Contents 1482 0 R -/Resources 1480 0 R +/Contents 1483 0 R +/Resources 1481 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1457 0 R -/Annots [ 1479 0 R ] +/Parent 1458 0 R +/Annots [ 1480 0 R ] >> -% 1479 0 obj +% 1480 0 obj << /Type /Annot /Subtype /Link @@ -17771,29 +17780,29 @@ stream /Rect [342.753 324.687 409.811 336.746] /A << /S /GoTo /D (descdata) >> >> -% 1483 0 obj +% 1484 0 obj << -/D [1481 0 R /XYZ 149.705 753.953 null] +/D [1482 0 R /XYZ 149.705 753.953 null] >> -% 1484 0 obj +% 1485 0 obj << -/D [1481 0 R /XYZ 150.705 234.157 null] +/D [1482 0 R /XYZ 150.705 234.157 null] >> -% 1480 0 obj +% 1481 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1487 0 obj +% 1488 0 obj << /Type /Page -/Contents 1488 0 R -/Resources 1486 0 R +/Contents 1489 0 R +/Resources 1487 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1492 0 R -/Annots [ 1485 0 R ] +/Parent 1493 0 R +/Annots [ 1486 0 R ] >> -% 1485 0 obj +% 1486 0 obj << /Type /Annot /Subtype /Link @@ -17801,51 +17810,51 @@ stream /Rect [354.489 215.702 376.407 227.166] /A << /S /GoTo /D (subsubsection.2.3.1) >> >> -% 1489 0 obj +% 1490 0 obj << -/D [1487 0 R /XYZ 98.895 753.953 null] +/D [1488 0 R /XYZ 98.895 753.953 null] >> -% 1491 0 obj +% 1492 0 obj << -/D [1487 0 R /XYZ 99.895 133.283 null] +/D [1488 0 R /XYZ 99.895 133.283 null] >> -% 1486 0 obj +% 1487 0 obj << -/Font << /F145 940 0 R /F84 687 0 R /F75 685 0 R /F190 941 0 R /F78 686 0 R /F192 942 0 R /F148 1490 0 R >> +/Font << /F147 941 0 R /F84 687 0 R /F75 685 0 R /F195 942 0 R /F78 686 0 R /F197 943 0 R /F152 1491 0 R >> /ProcSet [ /PDF /Text ] >> -% 1494 0 obj +% 1495 0 obj << /Type /Page -/Contents 1495 0 R -/Resources 1493 0 R +/Contents 1496 0 R +/Resources 1494 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1492 0 R ->> -% 1496 0 obj -<< -/D [1494 0 R /XYZ 149.705 753.953 null] +/Parent 1493 0 R >> % 1497 0 obj << -/D [1494 0 R /XYZ 150.705 716.092 null] +/D [1495 0 R /XYZ 149.705 753.953 null] >> % 1498 0 obj << -/D [1494 0 R /XYZ 150.705 687.379 null] +/D [1495 0 R /XYZ 150.705 716.092 null] >> % 1499 0 obj << -/D [1494 0 R /XYZ 150.705 667.454 null] +/D [1495 0 R /XYZ 150.705 687.379 null] >> % 1500 0 obj << -/D [1494 0 R /XYZ 150.705 626.268 null] +/D [1495 0 R /XYZ 150.705 667.454 null] +>> +% 1501 0 obj +<< +/D [1495 0 R /XYZ 150.705 626.268 null] >> endstream endobj -1506 0 obj +1507 0 obj << /Length 7189 >> @@ -17863,7 +17872,7 @@ BT /F75 11.9552 Tf 151.016 706.129 Td [(cdins)-250(\227)-250(Communication)-250(descriptor)-250(insert)-250(routine)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_cdins\050nz,)-525(ia,)-525(ja,)-525(desc_a,)-525(info)-525([,ila,jla]\051)]TJ 0 -11.955 Td [(call)-525(psb_cdins\050nz,ja,desc,info[,jla,mask,lidx]\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 654.844 Tm [(This)-292(subr)18(outine)-292(examine)1(s)-292(the)-292(edges)-291(of)-292(the)-291(graph)-292(associated)-292(with)-291(the)-292(dis-)]TJ 1.02 0 0 1 99.895 642.889 Tm [(cr)18(etization)-343(mesh)-343(\050and)-343(isomorphic)-342(to)-343(the)-343(sparsity)-343(pattern)-342(of)-343(a)-343(linear)-343(system)]TJ 0.98 0 0 1 99.895 630.934 Tm [(coef)18(\002cient)-226(matrix\051,)-232(storing)-226(them)-226(as)-227(necessary)-226(into)-226(the)-226(communication)-226(descriptor)75(.)]TJ 0.98 0 0 1 99.895 618.979 Tm [(In)-225(the)-225(\002rst)-225(form)-225(the)-226(edge)1(s)-226(ar)19(e)-225(speci\002ed)-225(as)-226(pairs)-225(of)-225(indices)]TJ/F78 9.9626 Tf 1 0 0 1 346.727 618.979 Tm [(i)-47(a)]TJ/F192 10.3811 Tf 7.91 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 366.079 618.979 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 370.653 618.979 Tm [(j)-40(a)]TJ/F192 10.3811 Tf 7.841 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 389.936 618.979 Tm [(;)-235(the)-225(starting)]TJ 1.02 0 0 1 99.895 607.023 Tm [(index)]TJ/F78 9.9626 Tf 1 0 0 1 127.77 607.023 Tm [(i)-47(a)]TJ/F192 10.3811 Tf 7.91 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 149.752 607.023 Tm [(should)-259(belong)-258(to)-259(the)-259(curr)18(ent)-259(pr)18(ocess.)-345(In)-259(the)-258(second)-259(form)-259(only)-258(the)]TJ 1 0 0 1 99.895 595.068 Tm [(r)18(emote)-250(indices)]TJ/F78 9.9626 Tf 67.342 0 Td [(j)-40(a)]TJ/F192 10.3811 Tf 7.84 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 6.64 0 Td [(ar)18(e)-250(speci\002ed.)]TJ +/F147 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_cdins\050nz,)-525(ia,)-525(ja,)-525(desc_a,)-525(info)-525([,ila,jla]\051)]TJ 0 -11.955 Td [(call)-525(psb_cdins\050nz,ja,desc,info[,jla,mask,lidx]\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 654.844 Tm [(This)-292(subr)18(outine)-292(examine)1(s)-292(the)-292(edges)-291(of)-292(the)-291(graph)-292(associated)-292(with)-291(the)-292(dis-)]TJ 1.02 0 0 1 99.895 642.889 Tm [(cr)18(etization)-343(mesh)-343(\050and)-343(isomorphic)-342(to)-343(the)-343(sparsity)-343(pattern)-342(of)-343(a)-343(linear)-343(system)]TJ 0.98 0 0 1 99.895 630.934 Tm [(coef)18(\002cient)-226(matrix\051,)-232(storing)-226(them)-226(as)-227(necessary)-226(into)-226(the)-226(communication)-226(descriptor)75(.)]TJ 0.98 0 0 1 99.895 618.979 Tm [(In)-225(the)-225(\002rst)-225(form)-225(the)-226(edge)1(s)-226(ar)19(e)-225(speci\002ed)-225(as)-226(pairs)-225(of)-225(indices)]TJ/F78 9.9626 Tf 1 0 0 1 346.727 618.979 Tm [(i)-47(a)]TJ/F197 10.3811 Tf 7.91 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 366.079 618.979 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 370.653 618.979 Tm [(j)-40(a)]TJ/F197 10.3811 Tf 7.841 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 389.936 618.979 Tm [(;)-235(the)-225(starting)]TJ 1.02 0 0 1 99.895 607.023 Tm [(index)]TJ/F78 9.9626 Tf 1 0 0 1 127.77 607.023 Tm [(i)-47(a)]TJ/F197 10.3811 Tf 7.91 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 149.752 607.023 Tm [(should)-259(belong)-258(to)-259(the)-259(curr)18(ent)-259(pr)18(ocess.)-345(In)-259(the)-258(second)-259(form)-259(only)-258(the)]TJ 1 0 0 1 99.895 595.068 Tm [(r)18(emote)-250(indices)]TJ/F78 9.9626 Tf 67.342 0 Td [(j)-40(a)]TJ/F197 10.3811 Tf 7.84 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 6.64 0 Td [(ar)18(e)-250(speci\002ed.)]TJ 0 g 0 G /F75 9.9626 Tf -89.115 -20.366 Td [(T)90(ype:)]TJ 0 g 0 G @@ -17886,11 +17895,11 @@ BT 0 g 0 G /F75 9.9626 Tf -207.221 -19.304 Td [(mask)]TJ 0 g 0 G -/F84 9.9626 Tf 29.33 0 Td [(Mask)-250(entries)-250(in)]TJ/F145 9.9626 Tf 69.983 0 Td [(ja)]TJ/F84 9.9626 Tf 10.461 0 Td [(,)-250(they)-250(ar)18(e)-250(inserted)-249(only)-250(when)-250(the)-250(corr)18(esponding)]TJ/F145 9.9626 Tf 213.278 0 Td [(mask)]TJ/F84 9.9626 Tf -298.145 -11.955 Td [(entries)-250(ar)18(e)]TJ/F145 9.9626 Tf 48.139 0 Td [(.true.)]TJ/F84 9.9626 Tf -48.139 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(array)-250(of)-250(length)]TJ/F78 9.9626 Tf 164.297 0 Td [(n)-25(z)]TJ/F84 9.9626 Tf 10.336 0 Td [(,)-250(default)]TJ/F145 9.9626 Tf 38.784 0 Td [(.true.)]TJ/F84 9.9626 Tf 31.382 0 Td [(.)]TJ +/F84 9.9626 Tf 29.33 0 Td [(Mask)-250(entries)-250(in)]TJ/F147 9.9626 Tf 69.983 0 Td [(ja)]TJ/F84 9.9626 Tf 10.461 0 Td [(,)-250(they)-250(ar)18(e)-250(inserted)-249(only)-250(when)-250(the)-250(corr)18(esponding)]TJ/F147 9.9626 Tf 213.278 0 Td [(mask)]TJ/F84 9.9626 Tf -298.145 -11.955 Td [(entries)-250(ar)18(e)]TJ/F147 9.9626 Tf 48.139 0 Td [(.true.)]TJ/F84 9.9626 Tf -48.139 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(array)-250(of)-250(length)]TJ/F78 9.9626 Tf 164.297 0 Td [(n)-25(z)]TJ/F84 9.9626 Tf 10.336 0 Td [(,)-250(default)]TJ/F147 9.9626 Tf 38.784 0 Td [(.true.)]TJ/F84 9.9626 Tf 31.382 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -269.706 -19.305 Td [(lidx)]TJ 0 g 0 G -/F84 9.9626 Tf 22.685 0 Td [(User)-250(de\002ned)-250(local)-250(indices)-250(for)]TJ/F145 9.9626 Tf 131.117 0 Td [(ja)]TJ/F84 9.9626 Tf 10.461 0 Td [(.)]TJ -139.356 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(of)-250(length)]TJ/F78 9.9626 Tf 171.978 0 Td [(n)-25(z)]TJ/F84 9.9626 Tf 10.336 0 Td [(.)]TJ +/F84 9.9626 Tf 22.685 0 Td [(User)-250(de\002ned)-250(local)-250(indices)-250(for)]TJ/F147 9.9626 Tf 131.117 0 Td [(ja)]TJ/F84 9.9626 Tf 10.461 0 Td [(.)]TJ -139.356 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(of)-250(length)]TJ/F78 9.9626 Tf 171.978 0 Td [(n)-25(z)]TJ/F84 9.9626 Tf 10.336 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -207.221 -20.366 Td [(On)-250(Return)]TJ 0 g 0 G @@ -17906,21 +17915,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(updated)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 120.525 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 120.326 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 120.326 Td [(desc)]TJ ET q 1 0 0 1 333.945 120.525 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 120.326 Td [(type)]TJ +/F147 9.9626 Tf 337.084 120.326 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -17930,7 +17939,7 @@ ET endstream endobj -1511 0 obj +1512 0 obj << /Length 3083 >> @@ -17973,7 +17982,7 @@ ET endstream endobj -1520 0 obj +1521 0 obj << /Length 6186 >> @@ -17991,7 +18000,7 @@ BT /F75 11.9552 Tf 151.016 706.129 Td [(cdasb)-250(\227)-250(Communication)-250(descriptor)-250(assembly)-250(routine)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_cdasb\050desc_a,)-525(info)-525([,)-525(mold]\051)]TJ +/F147 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_cdasb\050desc_a,)-525(info)-525([,)-525(mold]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -18011,55 +18020,55 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 577.576 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 577.576 Td [(desc)]TJ ET q 1 0 0 1 333.945 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 577.576 Td [(type)]TJ +/F147 9.9626 Tf 337.084 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -19.925 Td [(mold)]TJ 0 g 0 G -/F84 9.9626 Tf 28.473 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(index)-250(storage.)]TJ -3.566 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 509.83 Tm [(Speci\002ed)-212(as:)-295(a)-212(object)-212(of)-212(type)-213(der)1(ived)-213(fr)19(om)-212(\050integer\051)]TJ/F145 9.9626 Tf 1 0 0 1 344.16 509.83 Tm [(psb)]TJ +/F84 9.9626 Tf 28.473 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(index)-250(storage.)]TJ -3.566 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 509.83 Tm [(Speci\002ed)-212(as:)-295(a)-212(object)-212(of)-212(type)-213(der)1(ived)-213(fr)19(om)-212(\050integer\051)]TJ/F147 9.9626 Tf 1 0 0 1 344.16 509.83 Tm [(psb)]TJ ET q 1 0 0 1 360.479 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.617 509.83 Td [(T)]TJ +/F147 9.9626 Tf 363.617 509.83 Td [(T)]TJ ET q 1 0 0 1 369.475 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 372.613 509.83 Td [(base)]TJ +/F147 9.9626 Tf 372.613 509.83 Td [(base)]TJ ET q 1 0 0 1 394.162 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 397.301 509.83 Td [(vect)]TJ +/F147 9.9626 Tf 397.301 509.83 Td [(vect)]TJ ET q 1 0 0 1 418.849 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.988 509.83 Td [(type)]TJ/F84 9.9626 Tf 0.98 0 0 1 442.909 509.83 Tm [(.)]TJ +/F147 9.9626 Tf 421.988 509.83 Td [(type)]TJ/F84 9.9626 Tf 0.98 0 0 1 442.909 509.83 Tm [(.)]TJ 0 g 0 G /F75 9.9626 Tf 1 0 0 1 99.895 487.912 Tm [(On)-250(Return)]TJ 0 g 0 G @@ -18075,21 +18084,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 420.366 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 420.166 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 420.166 Td [(desc)]TJ ET q 1 0 0 1 333.945 420.366 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 420.166 Td [(type)]TJ +/F147 9.9626 Tf 337.084 420.166 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -18099,7 +18108,7 @@ BT 0 g 0 G /F84 9.9626 Tf 12.454 -19.926 Td [(1.)]TJ 0 g 0 G - [-500(On)-250(exit)-250(fr)18(om)-250(this)-250(r)18(outine)-250(the)-250(descriptor)-250(is)-250(in)-250(the)-250(assembled)-250(state.)]TJ 1.017 0 0 1 99.587 290.652 Tm [(This)-246(call)-245(will)-246(set)-246(up)-245(all)-246(the)-246(necessary)-245(information)-246(for)-246(the)-246(halo)-245(data)-246(exchanges.)]TJ 1.02 0 0 1 99.895 278.697 Tm [(In)-289(doing)-290(so,)-300(the)-289(library)-289(will)-289(need)-290(to)-289(identify)-289(the)-289(set)-290(of)-289(pr)18(ocesses)-289(owning)-290(the)]TJ 1.02 0 0 1 99.895 266.742 Tm [(halo)-332(indices)-332(thr)18(ough)-332(the)-331(use)-332(of)-332(the)]TJ/F145 9.9626 Tf 1 0 0 1 263.448 266.742 Tm [(desc%fnd_owner\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 350.505 266.742 Tm [(method;)-375(the)-332(owning)]TJ 1.02 0 0 1 99.596 254.786 Tm [(pr)18(ocesses)-361(ar)18(e)-361(the)-361(topological)-360(neighbours)-361(of)-361(the)-361(calling)-360(pr)17(ocess.)-650(If)-361(the)-361(user)]TJ 1.007 0 0 1 99.895 242.831 Tm [(has)-249(some)-249(backgr)18(ound)-249(information)-249(on)-249(the)-249(pr)18(ocesses)-249(that)-249(ar)18(e)-249(neighbours)-249(of)-249(the)]TJ 0.989 0 0 1 99.895 230.876 Tm [(curr)18(ent)-253(one,)-253(it)-253(is)-253(possible)-253(to)-253(specify)-253(explicitly)-253(the)-253(list)-253(of)-253(adjacent)-253(pr)18(ocesses)-253(with)]TJ 1.003 0 0 1 99.895 218.921 Tm [(a)-249(call)-249(to)]TJ/F145 9.9626 Tf 1 0 0 1 136.323 218.921 Tm [(desc%set_p_adjcncy\050list\051)]TJ/F84 9.9626 Tf 1.003 0 0 1 261.851 218.921 Tm [(;)-249(this)-249(will)-249(speed)-250(up)-249(the)-249(subsequent)-249(call)-249(to)]TJ/F145 9.9626 Tf 1 0 0 1 99.895 206.966 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(.)]TJ + [-500(On)-250(exit)-250(fr)18(om)-250(this)-250(r)18(outine)-250(the)-250(descriptor)-250(is)-250(in)-250(the)-250(assembled)-250(state.)]TJ 1.017 0 0 1 99.587 290.652 Tm [(This)-246(call)-245(will)-246(set)-246(up)-245(all)-246(the)-246(necessary)-245(information)-246(for)-246(the)-246(halo)-245(data)-246(exchanges.)]TJ 1.02 0 0 1 99.895 278.697 Tm [(In)-289(doing)-290(so,)-300(the)-289(library)-289(will)-289(need)-290(to)-289(identify)-289(the)-289(set)-290(of)-289(pr)18(ocesses)-289(owning)-290(the)]TJ 1.02 0 0 1 99.895 266.742 Tm [(halo)-332(indices)-332(thr)18(ough)-332(the)-331(use)-332(of)-332(the)]TJ/F147 9.9626 Tf 1 0 0 1 263.448 266.742 Tm [(desc%fnd_owner\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 350.505 266.742 Tm [(method;)-375(the)-332(owning)]TJ 1.02 0 0 1 99.596 254.786 Tm [(pr)18(ocesses)-361(ar)18(e)-361(the)-361(topological)-360(neighbours)-361(of)-361(the)-361(calling)-360(pr)17(ocess.)-650(If)-361(the)-361(user)]TJ 1.007 0 0 1 99.895 242.831 Tm [(has)-249(some)-249(backgr)18(ound)-249(information)-249(on)-249(the)-249(pr)18(ocesses)-249(that)-249(ar)18(e)-249(neighbours)-249(of)-249(the)]TJ 0.989 0 0 1 99.895 230.876 Tm [(curr)18(ent)-253(one,)-253(it)-253(is)-253(possible)-253(to)-253(specify)-253(explicitly)-253(the)-253(list)-253(of)-253(adjacent)-253(pr)18(ocesses)-253(with)]TJ 1.003 0 0 1 99.895 218.921 Tm [(a)-249(call)-249(to)]TJ/F147 9.9626 Tf 1 0 0 1 136.323 218.921 Tm [(desc%set_p_adjcncy\050list\051)]TJ/F84 9.9626 Tf 1.003 0 0 1 261.851 218.921 Tm [(;)-249(this)-249(will)-249(speed)-250(up)-249(the)-249(subsequent)-249(call)-249(to)]TJ/F147 9.9626 Tf 1 0 0 1 99.895 206.966 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 47.073 0 Td [(.)]TJ 0 g 0 G 119.802 -116.528 Td [(77)]TJ 0 g 0 G @@ -18107,7 +18116,7 @@ ET endstream endobj -1527 0 obj +1528 0 obj << /Length 3186 >> @@ -18125,7 +18134,7 @@ BT /F75 11.9552 Tf 201.825 706.129 Td [(cdcpy)-250(\227)-250(Copies)-250(a)-250(communication)-250(descriptor)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.12 -18.964 Td [(call)-525(psb_cdcpy\050desc_in,)-525(desc_out,)-525(info\051)]TJ +/F147 9.9626 Tf -51.12 -18.964 Td [(call)-525(psb_cdcpy\050desc_in,)-525(desc_out,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -18145,21 +18154,21 @@ BT 0 g 0 G /F84 9.9626 Tf 14.386 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -12.982 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 577.576 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 577.576 Td [(desc)]TJ ET q 1 0 0 1 384.755 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 577.576 Td [(type)]TJ +/F147 9.9626 Tf 387.893 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -18177,21 +18186,21 @@ BT 0 g 0 G /F84 9.9626 Tf 19.925 0 Td [(the)-250(communication)-250(descriptor)-250(copy)111(.)]TJ -18.521 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.744 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.137 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.137 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 488.112 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 487.912 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 487.912 Td [(desc)]TJ ET q 1 0 0 1 384.755 488.112 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 487.912 Td [(type)]TJ +/F147 9.9626 Tf 387.893 487.912 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -18205,7 +18214,7 @@ ET endstream endobj -1532 0 obj +1533 0 obj << /Length 2169 >> @@ -18223,7 +18232,7 @@ BT /F75 11.9552 Tf 151.016 706.129 Td [(cdfree)-250(\227)-250(Frees)-250(a)-250(communication)-250(descriptor)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_cdfree\050desc_a,)-525(info\051)]TJ +/F147 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_cdfree\050desc_a,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -18243,21 +18252,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)-250(to)-250(be)-250(fr)18(eed.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 577.576 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 577.576 Td [(desc)]TJ ET q 1 0 0 1 333.945 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 577.576 Td [(type)]TJ +/F147 9.9626 Tf 337.084 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -18274,7 +18283,7 @@ ET endstream endobj -1539 0 obj +1540 0 obj << /Length 5958 >> @@ -18292,7 +18301,7 @@ BT /F75 11.9552 Tf 0.984 0 0 1 201.506 706.129 Tm [(cdbldext)-253(\227)-253(Build)-253(an)-253(extended)-253(communication)-253(descrip-)]TJ 1 0 0 1 177.604 692.181 Tm [(tor)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -26.899 -19.693 Td [(call)-525(psb_cdbldext\050a,desc_a,nl,desc_out,)-525(info,)-525(extype\051)]TJ/F84 9.9626 Tf 0.982 0 0 1 165.649 649.066 Tm [(This)-254(subr)19(outine)-254(builds)-254(an)-254(extended)-253(communication)-254(descriptor)75(,)-254(b)1(ased)-254(on)-254(the)]TJ 1.019 0 0 1 150.705 637.111 Tm [(input)-244(descriptor)]TJ/F145 9.9626 Tf 1 0 0 1 225.863 637.111 Tm [(desc_a)]TJ/F84 9.9626 Tf 1.019 0 0 1 259.725 637.111 Tm [(and)-244(on)-244(the)-245(stencil)-244(speci\002ed)-244(thr)18(ough)-245(the)-244(input)-244(sparse)]TJ 1 0 0 1 150.705 625.156 Tm [(matrix)]TJ/F145 9.9626 Tf 31.491 0 Td [(a)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ +/F147 9.9626 Tf -26.899 -19.693 Td [(call)-525(psb_cdbldext\050a,desc_a,nl,desc_out,)-525(info,)-525(extype\051)]TJ/F84 9.9626 Tf 0.982 0 0 1 165.649 649.066 Tm [(This)-254(subr)19(outine)-254(builds)-254(an)-254(extended)-253(communication)-254(descriptor)75(,)-254(b)1(ased)-254(on)-254(the)]TJ 1.019 0 0 1 150.705 637.111 Tm [(input)-244(descriptor)]TJ/F147 9.9626 Tf 1 0 0 1 225.863 637.111 Tm [(desc_a)]TJ/F84 9.9626 Tf 1.019 0 0 1 259.725 637.111 Tm [(and)-244(on)-244(the)-245(stencil)-244(speci\002ed)-244(thr)18(ough)-245(the)-244(input)-244(sparse)]TJ 1 0 0 1 150.705 625.156 Tm [(matrix)]TJ/F147 9.9626 Tf 31.491 0 Td [(a)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -36.722 -21.054 Td [(T)90(ype:)]TJ 0 g 0 G @@ -18316,31 +18325,31 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 456.326 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 456.127 Td [(Tspmat)]TJ +/F147 9.9626 Tf 363.206 456.127 Td [(Tspmat)]TJ ET q 1 0 0 1 395.216 456.326 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 398.354 456.127 Td [(type)]TJ +/F147 9.9626 Tf 398.354 456.127 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -268.57 -21.43 Td [(nl)]TJ 0 g 0 G -/F84 9.9626 Tf 14.386 0 Td [(the)-250(number)-250(of)-250(additional)-250(layers)-250(desir)18(ed.)]TJ 10.52 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F78 9.9626 Tf 131.102 0 Td [(n)-25(l)]TJ/F190 10.3811 Tf 11.873 0 Td [(\025)]TJ/F84 9.9626 Tf 10.962 0 Td [(0.)]TJ +/F84 9.9626 Tf 14.386 0 Td [(the)-250(number)-250(of)-250(additional)-250(layers)-250(desir)18(ed.)]TJ 10.52 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F78 9.9626 Tf 131.102 0 Td [(n)-25(l)]TJ/F195 10.3811 Tf 11.873 0 Td [(\025)]TJ/F84 9.9626 Tf 10.962 0 Td [(0.)]TJ 0 g 0 G /F75 9.9626 Tf -178.843 -21.43 Td [(extype)]TJ 0 g 0 G -/F84 9.9626 Tf 34.869 0 Td [(the)-250(kind)-250(of)-250(estension)-250(r)18(equir)18(ed.)]TJ -9.963 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 40.678 0 Td [(.)]TJ -64.368 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 175.611 317.626 Tm [(Speci\002ed)-317(as:)-447(an)-317(i)1(nteger)-317(value)]TJ/F145 9.9626 Tf 1 0 0 1 313.312 317.626 Tm [(psb_ovt_xhal_)]TJ/F84 9.9626 Tf 1.02 0 0 1 381.307 317.626 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 387.247 317.626 Tm [(psb_ovt_asov_)]TJ/F84 9.9626 Tf 1.02 0 0 1 455.242 317.626 Tm [(,)-335(default:)]TJ/F145 9.9626 Tf 1 0 0 1 175.611 305.671 Tm [(psb_ovt_xhal_)]TJ +/F84 9.9626 Tf 34.869 0 Td [(the)-250(kind)-250(of)-250(estension)-250(r)18(equir)18(ed.)]TJ -9.963 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -57.434 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 40.678 0 Td [(.)]TJ -64.368 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 175.611 317.626 Tm [(Speci\002ed)-317(as:)-447(an)-317(i)1(nteger)-317(value)]TJ/F147 9.9626 Tf 1 0 0 1 313.312 317.626 Tm [(psb_ovt_xhal_)]TJ/F84 9.9626 Tf 1.02 0 0 1 381.307 317.626 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 387.247 317.626 Tm [(psb_ovt_asov_)]TJ/F84 9.9626 Tf 1.02 0 0 1 455.242 317.626 Tm [(,)-335(default:)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 305.671 Tm [(psb_ovt_xhal_)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -23.422 Td [(On)-250(Return)]TJ 0 g 0 G @@ -18356,21 +18365,21 @@ BT 0 g 0 G /F84 9.9626 Tf 19.925 0 Td [(the)-250(extended)-250(communication)-250(descriptor)74(.)]TJ -18.521 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 213.198 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 212.998 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 212.998 Td [(desc)]TJ ET q 1 0 0 1 384.755 213.198 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 212.998 Td [(type)]TJ +/F147 9.9626 Tf 387.893 212.998 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -18384,7 +18393,7 @@ ET endstream endobj -1543 0 obj +1544 0 obj << /Length 1748 >> @@ -18395,11 +18404,11 @@ stream BT /F84 9.9626 Tf 112.349 706.129 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 124.802 706.129 Tm [(Specifying)]TJ/F145 9.9626 Tf 1 0 0 1 172.776 706.129 Tm [(psb_ovt_xhal_)]TJ/F84 9.9626 Tf 0.98 0 0 1 243.267 706.129 Tm [(for)-256(the)]TJ/F145 9.9626 Tf 1 0 0 1 274.24 706.129 Tm [(extype)]TJ/F84 9.9626 Tf 0.98 0 0 1 308.119 706.129 Tm [(ar)18(gument)-255(the)-256(user)-256(will)-255(obtain)-256(a)]TJ 0.98 0 0 1 124.802 694.174 Tm [(descriptor)-209(for)-209(a)-209(domain)-209(partition)-209(in)-209(which)-209(the)-209(additional)-209(layers)-209(ar)18(e)-209(fetched)]TJ 1.02 0 0 1 124.802 682.219 Tm [(as)-244(part)-244(of)-244(an)-244(\050extended\051)-244(halo;)-244(however)-244(the)-244(index-to-pr)18(ocess)-244(mapping)-244(is)]TJ 1 0 0 1 124.802 670.263 Tm [(identical)-250(to)-250(that)-250(of)-250(the)-250(base)-250(descriptor;)]TJ + 0.98 0 0 1 124.802 706.129 Tm [(Specifying)]TJ/F147 9.9626 Tf 1 0 0 1 172.776 706.129 Tm [(psb_ovt_xhal_)]TJ/F84 9.9626 Tf 0.98 0 0 1 243.267 706.129 Tm [(for)-256(the)]TJ/F147 9.9626 Tf 1 0 0 1 274.24 706.129 Tm [(extype)]TJ/F84 9.9626 Tf 0.98 0 0 1 308.119 706.129 Tm [(ar)18(gument)-255(the)-256(user)-256(will)-255(obtain)-256(a)]TJ 0.98 0 0 1 124.802 694.174 Tm [(descriptor)-209(for)-209(a)-209(domain)-209(partition)-209(in)-209(which)-209(the)-209(additional)-209(layers)-209(ar)18(e)-209(fetched)]TJ 1.02 0 0 1 124.802 682.219 Tm [(as)-244(part)-244(of)-244(an)-244(\050extended\051)-244(halo;)-244(however)-244(the)-244(index-to-pr)18(ocess)-244(mapping)-244(is)]TJ 1 0 0 1 124.802 670.263 Tm [(identical)-250(to)-250(that)-250(of)-250(the)-250(base)-250(descriptor;)]TJ 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 1.018 0 0 1 124.802 650.338 Tm [(Specifying)]TJ/F145 9.9626 Tf 1 0 0 1 174.542 650.338 Tm [(psb_ovt_asov_)]TJ/F84 9.9626 Tf 1.018 0 0 1 245.035 650.338 Tm [(for)-246(the)]TJ/F145 9.9626 Tf 1 0 0 1 277.02 650.338 Tm [(extype)]TJ/F84 9.9626 Tf 1.018 0 0 1 310.901 650.338 Tm [(ar)18(gument)-247(the)-246(user)-246(will)-247(obtain)]TJ 1.02 0 0 1 124.802 638.383 Tm [(a)-267(descriptor)-267(with)-268(an)-267(overlapped)-267(decomposition:)-348(the)-267(additional)-267(layer)-268(is)]TJ 1.02 0 0 1 124.802 626.428 Tm [(aggr)18(egated)-278(to)-278(the)-278(local)-278(subdomain)-278(\050and)-278(thus)-278(is)-278(an)-278(overlap\051,)-286(and)-278(a)-278(new)]TJ 1 0 0 1 124.802 614.473 Tm [(halo)-250(extending)-250(beyond)-250(the)-250(last)-250(additional)-250(layer)-250(is)-250(formed.)]TJ + 1.018 0 0 1 124.802 650.338 Tm [(Specifying)]TJ/F147 9.9626 Tf 1 0 0 1 174.542 650.338 Tm [(psb_ovt_asov_)]TJ/F84 9.9626 Tf 1.018 0 0 1 245.035 650.338 Tm [(for)-246(the)]TJ/F147 9.9626 Tf 1 0 0 1 277.02 650.338 Tm [(extype)]TJ/F84 9.9626 Tf 1.018 0 0 1 310.901 650.338 Tm [(ar)18(gument)-247(the)-246(user)-246(will)-247(obtain)]TJ 1.02 0 0 1 124.802 638.383 Tm [(a)-267(descriptor)-267(with)-268(an)-267(overlapped)-267(decomposition:)-348(the)-267(additional)-267(layer)-268(is)]TJ 1.02 0 0 1 124.802 626.428 Tm [(aggr)18(egated)-278(to)-278(the)-278(local)-278(subdomain)-278(\050and)-278(thus)-278(is)-278(an)-278(overlap\051,)-286(and)-278(a)-278(new)]TJ 1 0 0 1 124.802 614.473 Tm [(halo)-250(extending)-250(beyond)-250(the)-250(last)-250(additional)-250(layer)-250(is)-250(formed.)]TJ 0 g 0 G 141.968 -524.035 Td [(81)]TJ 0 g 0 G @@ -18407,7 +18416,7 @@ ET endstream endobj -1551 0 obj +1552 0 obj << /Length 5951 >> @@ -18425,7 +18434,7 @@ BT /F75 11.9552 Tf 201.825 706.129 Td [(spall)-250(\227)-250(Allocates)-250(a)-250(sparse)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.12 -19.277 Td [(call)-525(psb_spall\050a,)-525(desc_a,)-525(info)-525([,)-525(nnz,)-525(dupl,)-525(bldmode]\051)]TJ +/F147 9.9626 Tf -51.12 -19.277 Td [(call)-525(psb_spall\050a,)-525(desc_a,)-525(info)-525([,)-525(nnz,)-525(dupl,)-525(bldmode]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.403 Td [(T)90(ype:)]TJ 0 g 0 G @@ -18445,21 +18454,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 575.684 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 575.485 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 575.485 Td [(desc)]TJ ET q 1 0 0 1 384.755 575.684 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 575.485 Td [(type)]TJ +/F147 9.9626 Tf 387.893 575.485 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -18469,11 +18478,11 @@ BT 0 g 0 G /F75 9.9626 Tf -24.906 -20.572 Td [(dupl)]TJ 0 g 0 G -/F84 9.9626 Tf 26.56 0 Td [(How)-250(to)-250(handle)-250(duplicate)-250(coef)18(\002cients.)]TJ -1.654 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 1.006 0 0 1 175.611 426.745 Tm [(Speci\002ed)-248(as:)-308(integer)74(,)-248(possible)-248(values:)]TJ/F145 9.9626 Tf 1 0 0 1 341.716 426.745 Tm [(psb_dupl_ovwrt_)]TJ/F84 9.9626 Tf 1.006 0 0 1 420.171 426.745 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 425.161 426.745 Tm [(psb_dupl_add_)]TJ/F84 9.9626 Tf 1.006 0 0 1 493.156 426.745 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 175.611 414.79 Tm [(psb_dupl_err_)]TJ/F84 9.9626 Tf 67.995 0 Td [(.)]TJ +/F84 9.9626 Tf 26.56 0 Td [(How)-250(to)-250(handle)-250(duplicate)-250(coef)18(\002cients.)]TJ -1.654 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 1.006 0 0 1 175.611 426.745 Tm [(Speci\002ed)-248(as:)-308(integer)74(,)-248(possible)-248(values:)]TJ/F147 9.9626 Tf 1 0 0 1 341.716 426.745 Tm [(psb_dupl_ovwrt_)]TJ/F84 9.9626 Tf 1.006 0 0 1 420.171 426.745 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 425.161 426.745 Tm [(psb_dupl_add_)]TJ/F84 9.9626 Tf 1.006 0 0 1 493.156 426.745 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 414.79 Tm [(psb_dupl_err_)]TJ/F84 9.9626 Tf 67.995 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -92.901 -20.572 Td [(bldmode)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 196.144 394.218 Tm [(Whether)-327(to)-327(keep)-327(track)-327(of)-327(matrix)-327(entries)-327(that)-327(do)-327(not)-327(belong)-327(to)-327(the)]TJ 1 0 0 1 175.611 382.263 Tm [(curr)18(ent)-250(pr)18(ocess.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 0.98 0 0 1 175.611 334.443 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 301.54 334.443 Tm [(psb_matbld_noremote_)]TJ/F84 9.9626 Tf 0.98 0 0 1 406.147 334.443 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 410.601 334.443 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 0.98 0 0 1 504.747 334.443 Tm [(.)]TJ 1 0 0 1 175.611 322.487 Tm [(Default:)]TJ/F145 9.9626 Tf 38.516 0 Td [(psb_matbld_noremote_)]TJ/F84 9.9626 Tf 104.606 0 Td [(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 196.144 394.218 Tm [(Whether)-327(to)-327(keep)-327(track)-327(of)-327(matrix)-327(entries)-327(that)-327(do)-327(not)-327(belong)-327(to)-327(the)]TJ 1 0 0 1 175.611 382.263 Tm [(curr)18(ent)-250(pr)18(ocess.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 0.98 0 0 1 175.611 334.443 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F147 9.9626 Tf 1 0 0 1 301.54 334.443 Tm [(psb_matbld_noremote_)]TJ/F84 9.9626 Tf 0.98 0 0 1 406.147 334.443 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 410.601 334.443 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 0.98 0 0 1 504.747 334.443 Tm [(.)]TJ 1 0 0 1 175.611 322.487 Tm [(Default:)]TJ/F147 9.9626 Tf 38.516 0 Td [(psb_matbld_noremote_)]TJ/F84 9.9626 Tf 104.606 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -168.028 -22.402 Td [(On)-250(Return)]TJ 0 g 0 G @@ -18482,21 +18491,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(matrix)-250(to)-250(be)-250(allocated.)]TJ 14.944 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.745 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 231.892 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 231.692 Td [(Tspmat)]TJ +/F147 9.9626 Tf 363.206 231.692 Td [(Tspmat)]TJ ET q 1 0 0 1 395.216 231.892 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 398.354 231.692 Td [(type)]TJ +/F147 9.9626 Tf 398.354 231.692 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -18514,9 +18523,9 @@ ET endstream endobj -1556 0 obj +1557 0 obj << -/Length 1305 +/Length 1255 >> stream 0 g 0 G @@ -18529,19 +18538,19 @@ BT 0 g 0 G 0 -19.925 Td [(3.)]TJ 0 g 0 G - 0.993 0 0 1 124.802 686.204 Tm [(Pr)18(oviding)-250(a)-251(good)-251(estimate)-250(for)-251(the)-251(number)-250(of)-251(nonzer)18(oes)]TJ/F78 9.9626 Tf 1 0 0 1 369.235 686.204 Tm [(n)-25(n)-25(z)]TJ/F84 9.9626 Tf 0.993 0 0 1 387.839 686.204 Tm [(in)-251(the)-250(assem-)]TJ 1.014 0 0 1 124.802 674.248 Tm [(bled)-245(matrix)-246(may)-245(substantially)-245(impr)17(ove)-245(performance)-245(in)-246(the)-245(matrix)-245(build)]TJ 1.02 0 0 1 124.503 662.293 Tm [(phase,)-315(as)-302(it)-301(will)-301(r)18(educe)-302(or)-301(eliminate)-301(the)-301(need)-302(for)-301(\050potentially)-301(multiple\051)]TJ 1 0 0 1 124.802 650.338 Tm [(data)-250(r)18(eallocations;)]TJ + 0.993 0 0 1 124.802 686.204 Tm [(Pr)18(oviding)-250(a)-251(good)-251(estimate)-250(for)-251(the)-251(number)-250(of)-251(nonzer)18(oes)]TJ/F78 9.9626 Tf 1 0 0 1 369.235 686.204 Tm [(n)-25(n)-25(z)]TJ/F84 9.9626 Tf 0.993 0 0 1 387.839 686.204 Tm [(in)-251(the)-250(assem-)]TJ 0.98 0 0 1 124.802 674.248 Tm [(bled)-240(matrix)-241(may)-240(impr)18(ove)-240(performance)-240(in)-240(the)-241(matrix)-240(build)-240(phase,)-244(as)-240(it)-240(will)]TJ 1 0 0 1 124.802 662.293 Tm [(r)18(educe)-250(or)-250(eliminate)-250(the)-250(need)-250(for)-250(\050potentially)-250(multiple\051)-250(data)-250(r)18(eallocations;)]TJ 0 g 0 G -12.453 -19.925 Td [(4.)]TJ 0 g 0 G - 1.02 0 0 1 124.802 630.413 Tm [(Using)]TJ/F145 9.9626 Tf 1 0 0 1 154.449 630.413 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 251.507 630.413 Tm [(is)-287(likely)-286(to)-287(cause)-286(a)-287(r)8(untime)-286(over)17(head)-286(at)-287(as-)]TJ 1 0 0 1 124.802 618.458 Tm [(sembly)-250(time;)]TJ + 1.02 0 0 1 124.802 642.368 Tm [(Using)]TJ/F147 9.9626 Tf 1 0 0 1 154.449 642.368 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 251.507 642.368 Tm [(is)-287(likely)-286(to)-287(cause)-286(a)-287(r)8(untime)-286(over)17(head)-286(at)-287(as-)]TJ 1 0 0 1 124.802 630.413 Tm [(sembly)-250(time;)]TJ 0 g 0 G - 141.968 -528.02 Td [(83)]TJ + 141.968 -539.975 Td [(83)]TJ 0 g 0 G ET endstream endobj -1564 0 obj +1565 0 obj << /Length 5490 >> @@ -18559,7 +18568,7 @@ BT /F75 11.9552 Tf 0.994 0 0 1 201.706 706.129 Tm [(spins)-251(\227)-252(Insert)-251(a)-252(set)-251(of)-251(coef)18(\002cients)-252(into)-251(a)-251(sparse)-252(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 1 0 0 1 150.705 685.756 Tm [(call)-525(psb_spins\050nz,)-525(ia,)-525(ja,)-525(val,)-525(a,)-525(desc_a,)-525(info)-525([,local]\051)]TJ 0 -11.956 Td [(call)-525(psb_spins\050nr,)-525(irw,)-525(irp,)-525(ja,)-525(val,)-525(a,)-525(desc_a,)-525(info)-525([,local]\051)]TJ +/F147 9.9626 Tf 1 0 0 1 150.705 685.756 Tm [(call)-525(psb_spins\050nz,)-525(ia,)-525(ja,)-525(val,)-525(a,)-525(desc_a,)-525(info)-525([,local]\051)]TJ 0 -11.956 Td [(call)-525(psb_spins\050nr,)-525(irw,)-525(irp,)-525(ja,)-525(val,)-525(a,)-525(desc_a,)-525(info)-525([,local]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -24.099 Td [(T)90(ype:)]TJ 0 g 0 G @@ -18586,7 +18595,7 @@ BT 0 g 0 G /F75 9.9626 Tf -196.043 -22.834 Td [(irp)]TJ 0 g 0 G -/F84 9.9626 Tf 18.261 0 Td [(the)-250(r)18(ow)-250(pointers)-250(of)-250(the)-250(coef)18(\002cients)-250(to)-250(be)-250(inserted.)]TJ 6.646 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(of)-250(size)]TJ/F78 9.9626 Tf 160.8 0 Td [(n)-15(r)]TJ/F192 10.3811 Tf 11.85 0 Td [(+)]TJ/F84 9.9626 Tf 10.131 0 Td [(1.)]TJ +/F84 9.9626 Tf 18.261 0 Td [(the)-250(r)18(ow)-250(pointers)-250(of)-250(the)-250(coef)18(\002cients)-250(to)-250(be)-250(inserted.)]TJ 6.646 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(of)-250(size)]TJ/F78 9.9626 Tf 160.8 0 Td [(n)-15(r)]TJ/F197 10.3811 Tf 11.85 0 Td [(+)]TJ/F84 9.9626 Tf 10.131 0 Td [(1.)]TJ 0 g 0 G /F75 9.9626 Tf -207.688 -22.835 Td [(ja)]TJ 0 g 0 G @@ -18602,7 +18611,7 @@ ET endstream endobj -1570 0 obj +1571 0 obj << /Length 7379 >> @@ -18622,27 +18631,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(communication)-250(descriptor)74(.)]TJ -8.249 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(variable)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 136.327 0 Td [(psb)]TJ +/F147 9.9626 Tf 136.327 0 Td [(psb)]TJ ET q 1 0 0 1 277.448 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 280.586 658.308 Td [(desc)]TJ +/F147 9.9626 Tf 280.586 658.308 Td [(desc)]TJ ET q 1 0 0 1 302.135 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 305.273 658.308 Td [(type)]TJ +/F147 9.9626 Tf 305.273 658.308 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -226.3 -33.398 Td [(local)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 125.957 624.91 Tm [(Whether)-378(the)-378(entries)-378(in)-377(the)-378(indices)-378(vectors)]TJ/F145 9.9626 Tf 1 0 0 1 323.219 624.91 Tm [(ia)]TJ/F84 9.9626 Tf 1.02 0 0 1 333.679 624.91 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 340.397 624.91 Tm [(ja)]TJ/F84 9.9626 Tf 1.02 0 0 1 354.698 624.91 Tm [(ar)18(e)-378(alr)17(eady)-377(in)-378(local)]TJ 1 0 0 1 124.802 612.954 Tm [(numbering.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(value;)-250(default:)]TJ/F145 9.9626 Tf 162.678 0 Td [(.false.)]TJ/F84 9.9626 Tf 36.612 0 Td [(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 125.957 624.91 Tm [(Whether)-378(the)-378(entries)-378(in)-377(the)-378(indices)-378(vectors)]TJ/F147 9.9626 Tf 1 0 0 1 323.219 624.91 Tm [(ia)]TJ/F84 9.9626 Tf 1.02 0 0 1 333.679 624.91 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 340.397 624.91 Tm [(ja)]TJ/F84 9.9626 Tf 1.02 0 0 1 354.698 624.91 Tm [(ar)18(e)-378(alr)17(eady)-377(in)-378(local)]TJ 1 0 0 1 124.802 612.954 Tm [(numbering.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(value;)-250(default:)]TJ/F147 9.9626 Tf 162.678 0 Td [(.false.)]TJ/F84 9.9626 Tf 36.612 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -224.197 -23.056 Td [(On)-250(Return)]TJ 0 g 0 G @@ -18651,21 +18660,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(matrix)-250(into)-250(which)-250(coef)18(\002cients)-250(will)-250(be)-250(inserted.)]TJ 14.944 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 484.968 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 484.768 Td [(Tspmat)]TJ +/F147 9.9626 Tf 312.397 484.768 Td [(Tspmat)]TJ ET q 1 0 0 1 344.406 484.968 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 347.544 484.768 Td [(type)]TJ +/F147 9.9626 Tf 347.544 484.768 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -18680,21 +18689,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(communication)-250(descriptor)74(.)]TJ -8.249 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(variable)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 136.327 0 Td [(psb)]TJ +/F147 9.9626 Tf 136.327 0 Td [(psb)]TJ ET q 1 0 0 1 277.448 415.704 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 280.586 415.504 Td [(desc)]TJ +/F147 9.9626 Tf 280.586 415.504 Td [(desc)]TJ ET q 1 0 0 1 302.135 415.704 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 305.273 415.504 Td [(type)]TJ +/F147 9.9626 Tf 305.273 415.504 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -18712,7 +18721,7 @@ BT 0 g 0 G -12.453 -21.444 Td [(3.)]TJ 0 g 0 G - 1.006 0 0 1 124.802 222.988 Tm [(If)-249(the)-250(descriptor)-249(is)-250(in)-249(the)-250(build)-249(state,)-250(then)-249(the)-250(sparse)-249(matrix)-249(must)-250(also)-249(be)]TJ 0.98 0 0 1 124.802 211.033 Tm [(in)-256(the)-256(build)-256(state;)-256(the)-256(action)-256(of)-256(the)-256(r)18(outine)-256(is)-256(to)-256(\050implicitly\051)-256(call)]TJ/F145 9.9626 Tf 1 0 0 1 396.533 211.033 Tm [(psb_cdins)]TJ/F84 9.9626 Tf 1.005 0 0 1 124.802 199.078 Tm [(to)-248(add)-249(entries)-248(to)-249(the)-248(sparsity)-249(pattern;)-248(each)-249(sparse)-248(matrix)-248(entry)-249(implicitly)]TJ 1.02 0 0 1 124.802 187.123 Tm [(de\002nes)-377(a)-377(graph)-378(edge,)-410(that)-377(is)-377(passed)-377(to)-378(the)-377(descriptor)-377(r)18(outine)-377(for)-378(the)]TJ 1 0 0 1 124.802 175.168 Tm [(appr)18(opriate)-250(pr)18(ocessing;)]TJ + 1.006 0 0 1 124.802 222.988 Tm [(If)-249(the)-250(descriptor)-249(is)-250(in)-249(the)-250(build)-249(state,)-250(then)-249(the)-250(sparse)-249(matrix)-249(must)-250(also)-249(be)]TJ 0.98 0 0 1 124.802 211.033 Tm [(in)-256(the)-256(build)-256(state;)-256(the)-256(action)-256(of)-256(the)-256(r)18(outine)-256(is)-256(to)-256(\050implicitly\051)-256(call)]TJ/F147 9.9626 Tf 1 0 0 1 396.533 211.033 Tm [(psb_cdins)]TJ/F84 9.9626 Tf 1.005 0 0 1 124.802 199.078 Tm [(to)-248(add)-249(entries)-248(to)-249(the)-248(sparsity)-249(pattern;)-248(each)-249(sparse)-248(matrix)-248(entry)-249(implicitly)]TJ 1.02 0 0 1 124.802 187.123 Tm [(de\002nes)-377(a)-377(graph)-378(edge,)-410(that)-377(is)-377(passed)-377(to)-378(the)-377(descriptor)-377(r)18(outine)-377(for)-378(the)]TJ 1 0 0 1 124.802 175.168 Tm [(appr)18(opriate)-250(pr)18(ocessing;)]TJ 0 g 0 G -12.453 -21.444 Td [(4.)]TJ 0 g 0 G @@ -18720,7 +18729,7 @@ BT 0 g 0 G 0 -21.443 Td [(5.)]TJ 0 g 0 G - 1.02 0 0 1 124.802 132.281 Tm [(In)-268(COO)-268(format)-268(the)-268(coef)18(\002cients)-268(to)-268(be)-268(inserted)-268(ar)18(e)-268(r)17(epr)18(esented)-268(by)-268(the)-268(or)18(-)]TJ 0.985 0 0 1 124.802 120.326 Tm [(der)18(ed)-253(triples)]TJ/F78 9.9626 Tf 1 0 0 1 182.455 120.326 Tm [(i)-47(a)]TJ/F192 10.3811 Tf 7.91 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.985 0 0 1 201.807 120.326 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 206.394 120.326 Tm [(j)-40(a)]TJ/F192 10.3811 Tf 7.841 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.985 0 0 1 225.677 120.326 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 229.915 120.326 Tm [(v)-40(a)-25(l)]TJ/F192 10.3811 Tf 13.37 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.985 0 0 1 254.727 120.326 Tm [(,)-253(for)]TJ/F78 9.9626 Tf 1 0 0 1 274.702 120.326 Tm [(i)]TJ/F192 10.3811 Tf 5.856 0 Td [(=)]TJ/F84 9.9626 Tf 0.985 0 0 1 291.52 120.326 Tm [(1,)]TJ 1 0 0 1 300.664 120.326 Tm [(.)-192(.)-191(.)]TJ 0.985 0 0 1 313.74 120.326 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 317.978 120.326 Tm [(n)-25(z)]TJ/F84 9.9626 Tf 0.985 0 0 1 328.315 120.326 Tm [(;)-253(these)-253(triples)-253(ar)18(e)-253(arbitrary;)]TJ + 1.02 0 0 1 124.802 132.281 Tm [(In)-268(COO)-268(format)-268(the)-268(coef)18(\002cients)-268(to)-268(be)-268(inserted)-268(ar)18(e)-268(r)17(epr)18(esented)-268(by)-268(the)-268(or)18(-)]TJ 0.985 0 0 1 124.802 120.326 Tm [(der)18(ed)-253(triples)]TJ/F78 9.9626 Tf 1 0 0 1 182.455 120.326 Tm [(i)-47(a)]TJ/F197 10.3811 Tf 7.91 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.985 0 0 1 201.807 120.326 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 206.394 120.326 Tm [(j)-40(a)]TJ/F197 10.3811 Tf 7.841 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.985 0 0 1 225.677 120.326 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 229.915 120.326 Tm [(v)-40(a)-25(l)]TJ/F197 10.3811 Tf 13.37 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 0.985 0 0 1 254.727 120.326 Tm [(,)-253(for)]TJ/F78 9.9626 Tf 1 0 0 1 274.702 120.326 Tm [(i)]TJ/F197 10.3811 Tf 5.856 0 Td [(=)]TJ/F84 9.9626 Tf 0.985 0 0 1 291.52 120.326 Tm [(1,)]TJ 1 0 0 1 300.664 120.326 Tm [(.)-192(.)-191(.)]TJ 0.985 0 0 1 313.74 120.326 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 317.978 120.326 Tm [(n)-25(z)]TJ/F84 9.9626 Tf 0.985 0 0 1 328.315 120.326 Tm [(;)-253(these)-253(triples)-253(ar)18(e)-253(arbitrary;)]TJ 0 g 0 G 1 0 0 1 266.77 90.438 Tm [(85)]TJ 0 g 0 G @@ -18728,9 +18737,9 @@ ET endstream endobj -1580 0 obj +1581 0 obj << -/Length 5304 +/Length 5341 >> stream 0 g 0 G @@ -18739,7 +18748,7 @@ stream BT /F84 9.9626 Tf 163.158 706.129 Td [(6.)]TJ 0 g 0 G - 1.02 0 0 1 175.611 706.129 Tm [(In)-389(CSR)-388(format)-389(the)-388(coef)17(\002)1(cients)-389(to)-388(be)-389(inserted)-388(for)-389(each)-389(inpu)1(t)-389(r)18(ow)]TJ/F78 9.9626 Tf 1 0 0 1 477.666 706.129 Tm [(i)]TJ/F192 10.3811 Tf 8.556 0 Td [(=)]TJ/F84 9.9626 Tf 1.017 0 0 1 175.113 694.174 Tm [(1,)]TJ/F78 9.9626 Tf 1 0 0 1 184.497 694.174 Tm [(n)-15(r)]TJ/F84 9.9626 Tf 1.017 0 0 1 196.778 694.174 Tm [(ar)18(e)-246(r)17(epr)18(esented)-246(by)-246(the)-246(or)18(der)18(ed)-246(triples)]TJ/F192 10.3811 Tf 1 0 0 1 367.425 694.174 Tm [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 5.026 0 Td [(+)]TJ/F78 9.9626 Tf 10.186 0 Td [(i)-22(r)-35(w)]TJ/F190 10.3811 Tf 16.593 0 Td [(\000)]TJ/F84 9.9626 Tf 1.017 0 0 1 413.566 694.174 Tm [(1)]TJ/F192 10.3811 Tf 1 0 0 1 418.756 694.174 Tm [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 422.906 694.174 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 427.572 694.174 Tm [(j)-40(a)]TJ/F192 10.3811 Tf 7.841 0 Td [(\050)]TJ/F78 9.9626 Tf 4.622 0 Td [(j)]TJ/F192 10.3811 Tf 3.019 0 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 447.203 694.174 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 451.521 694.174 Tm [(v)-40(a)-25(l)]TJ/F192 10.3811 Tf 13.37 0 Td [(\050)]TJ/F78 9.9626 Tf 4.623 0 Td [(j)]TJ/F192 10.3811 Tf 3.018 0 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 476.682 694.174 Tm [(,)-246(for)]TJ/F78 9.9626 Tf 1 0 0 1 176.085 682.219 Tm [(j)]TJ/F192 10.3811 Tf 6.885 0 Td [(=)]TJ/F78 9.9626 Tf 12.116 0 Td [(i)-22(r)-90(p)]TJ/F192 10.3811 Tf 12.991 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 219.519 682.219 Tm [(,)]TJ 1 0 0 1 223.844 682.219 Tm [(.)-192(.)-191(.)]TJ 1.02 0 0 1 236.92 682.219 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 241.175 682.219 Tm [(i)-22(r)-90(p)]TJ/F192 10.3811 Tf 12.991 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 5.245 0 Td [(+)]TJ/F84 9.9626 Tf 1.02 0 0 1 273.967 682.219 Tm [(1)]TJ/F192 10.3811 Tf 1 0 0 1 279.173 682.219 Tm [(\051)]TJ/F190 10.3811 Tf 6.431 0 Td [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 295.955 682.219 Tm [(1;)-333(these)-303(triples)-304(should)-303(belong)-304(to)-303(the)-304(curr)18(ent)]TJ 0.98 0 0 1 175.313 670.263 Tm [(pr)18(ocess,)-219(i.e.)]TJ/F78 9.9626 Tf 1 0 0 1 227.459 670.263 Tm [(i)]TJ/F192 10.3811 Tf 4.622 0 Td [(+)]TJ/F78 9.9626 Tf 9.782 0 Td [(i)-22(r)-35(w)]TJ/F190 10.3811 Tf 16.189 0 Td [(\000)]TJ/F84 9.9626 Tf 0.98 0 0 1 267.779 670.263 Tm [(1)-211(shou)1(ld)-211(be)-210(one)-211(of)-210(the)-211(local)-210(indices,)-220(but)-210(ar)18(e)-210(otherwise)]TJ 1 0 0 1 175.611 658.308 Tm [(arbitrary;)]TJ + 1.02 0 0 1 175.611 706.129 Tm [(In)-389(CSR)-388(format)-389(the)-388(coef)17(\002)1(cients)-389(to)-388(be)-389(inserted)-388(for)-389(each)-389(inpu)1(t)-389(r)18(ow)]TJ/F78 9.9626 Tf 1 0 0 1 477.666 706.129 Tm [(i)]TJ/F197 10.3811 Tf 8.556 0 Td [(=)]TJ/F84 9.9626 Tf 1.017 0 0 1 175.113 694.174 Tm [(1,)]TJ/F78 9.9626 Tf 1 0 0 1 184.497 694.174 Tm [(n)-15(r)]TJ/F84 9.9626 Tf 1.017 0 0 1 196.778 694.174 Tm [(ar)18(e)-246(r)17(epr)18(esented)-246(by)-246(the)-246(or)18(der)18(ed)-246(triples)]TJ/F197 10.3811 Tf 1 0 0 1 367.425 694.174 Tm [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 5.026 0 Td [(+)]TJ/F78 9.9626 Tf 10.186 0 Td [(i)-22(r)-35(w)]TJ/F195 10.3811 Tf 16.593 0 Td [(\000)]TJ/F84 9.9626 Tf 1.017 0 0 1 413.566 694.174 Tm [(1)]TJ/F197 10.3811 Tf 1 0 0 1 418.756 694.174 Tm [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 422.906 694.174 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 427.572 694.174 Tm [(j)-40(a)]TJ/F197 10.3811 Tf 7.841 0 Td [(\050)]TJ/F78 9.9626 Tf 4.622 0 Td [(j)]TJ/F197 10.3811 Tf 3.019 0 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 447.203 694.174 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 451.521 694.174 Tm [(v)-40(a)-25(l)]TJ/F197 10.3811 Tf 13.37 0 Td [(\050)]TJ/F78 9.9626 Tf 4.623 0 Td [(j)]TJ/F197 10.3811 Tf 3.018 0 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 476.682 694.174 Tm [(,)-246(for)]TJ/F78 9.9626 Tf 1 0 0 1 176.085 682.219 Tm [(j)]TJ/F197 10.3811 Tf 6.885 0 Td [(=)]TJ/F78 9.9626 Tf 12.116 0 Td [(i)-22(r)-90(p)]TJ/F197 10.3811 Tf 12.991 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 219.519 682.219 Tm [(,)]TJ 1 0 0 1 223.844 682.219 Tm [(.)-192(.)-191(.)]TJ 1.02 0 0 1 236.92 682.219 Tm [(,)]TJ/F78 9.9626 Tf 1 0 0 1 241.175 682.219 Tm [(i)-22(r)-90(p)]TJ/F197 10.3811 Tf 12.991 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 5.245 0 Td [(+)]TJ/F84 9.9626 Tf 1.02 0 0 1 273.967 682.219 Tm [(1)]TJ/F197 10.3811 Tf 1 0 0 1 279.173 682.219 Tm [(\051)]TJ/F195 10.3811 Tf 6.431 0 Td [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 295.955 682.219 Tm [(1;)-333(these)-303(triples)-304(should)-303(belong)-304(to)-303(the)-304(curr)18(ent)]TJ 0.98 0 0 1 175.313 670.263 Tm [(pr)18(ocess,)-219(i.e.)]TJ/F78 9.9626 Tf 1 0 0 1 227.459 670.263 Tm [(i)]TJ/F197 10.3811 Tf 4.622 0 Td [(+)]TJ/F78 9.9626 Tf 9.782 0 Td [(i)-22(r)-35(w)]TJ/F195 10.3811 Tf 16.189 0 Td [(\000)]TJ/F84 9.9626 Tf 0.98 0 0 1 267.779 670.263 Tm [(1)-211(shou)1(ld)-211(be)-210(one)-211(of)-210(the)-211(local)-210(indices,)-220(but)-210(ar)18(e)-210(otherwise)]TJ 1 0 0 1 175.611 658.308 Tm [(arbitrary;)]TJ 0 g 0 G -12.453 -19.925 Td [(7.)]TJ 0 g 0 G @@ -18747,11 +18756,11 @@ BT 0 g 0 G -12.453 -19.926 Td [(8.)]TJ 0 g 0 G - 1.016 0 0 1 175.611 594.547 Tm [(Coef)18(\002cients)-246(fr)17(om)-246(dif)18(fer)18(ent)-246(r)17(ows)-246(may)-246(also)-246(be)-247(mixed)-246(up)-246(fr)18(eely)-247(in)-246(a)-246(single)]TJ 1 0 0 1 175.611 582.592 Tm [(call,)-250(accor)18(ding)-250(to)-250(the)-250(application)-250(needs;)]TJ + 1.016 0 0 1 175.611 594.547 Tm [(Coef)18(\002cients)-246(fr)17(om)-246(dif)18(fer)18(ent)-246(r)17(ows)-246(may)-246(also)-246(be)-247(mixed)-246(up)-246(fr)18(eely)-247(in)-246(a)-246(single)]TJ 1 0 0 1 175.611 582.592 Tm [(call)-250(\050in)-250(COO)-250(format\051,)-250(accor)18(ding)-250(to)-250(the)-250(application)-250(needs;)]TJ 0 g 0 G -12.453 -19.925 Td [(9.)]TJ 0 g 0 G - 0.98 0 0 1 175.611 562.667 Tm [(Coef)18(\002cients)-229(fr)18(om)-228(matrix)-229(r)18(ows)-229(not)-229(owned)-229(by)-229(the)-229(calling)-229(p)1(r)18(ocess)-229(ar)18(e)-229(tr)19(eated)]TJ 1.002 0 0 1 175.611 550.712 Tm [(accor)18(ding)-250(to)-249(the)-249(value)-250(of)]TJ/F145 9.9626 Tf 1 0 0 1 287.159 550.712 Tm [(bldmode)]TJ/F84 9.9626 Tf 1.002 0 0 1 326.262 550.712 Tm [(speci\002ed)-249(at)-250(allocation)-249(time;)-250(if)]TJ/F145 9.9626 Tf 1 0 0 1 457.804 550.712 Tm [(bldmode)]TJ/F84 9.9626 Tf 1.02 0 0 1 175.193 538.757 Tm [(was)-272(chosen)-273(as)]TJ/F145 9.9626 Tf 1 0 0 1 241.813 538.757 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 338.726 538.757 Tm [(the)-272(library)-273(wi)1(ll)-273(keep)-272(track)-272(of)-273(them,)]TJ 1 0 0 1 175.611 526.801 Tm [(otherwise)-250(they)-250(ar)18(e)-250(silently)-250(ignor)18(ed;)]TJ + 0.98 0 0 1 175.611 562.667 Tm [(Coef)18(\002cients)-229(fr)18(om)-228(matrix)-229(r)18(ows)-229(not)-229(owned)-229(by)-229(the)-229(calling)-229(p)1(r)18(ocess)-229(ar)18(e)-229(tr)19(eated)]TJ 1.002 0 0 1 175.611 550.712 Tm [(accor)18(ding)-250(to)-249(the)-249(value)-250(of)]TJ/F147 9.9626 Tf 1 0 0 1 287.159 550.712 Tm [(bldmode)]TJ/F84 9.9626 Tf 1.002 0 0 1 326.262 550.712 Tm [(speci\002ed)-249(at)-250(allocation)-249(time;)-250(if)]TJ/F147 9.9626 Tf 1 0 0 1 457.804 550.712 Tm [(bldmode)]TJ/F84 9.9626 Tf 1.02 0 0 1 175.193 538.757 Tm [(was)-272(chosen)-273(as)]TJ/F147 9.9626 Tf 1 0 0 1 241.813 538.757 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 338.726 538.757 Tm [(the)-272(library)-273(wi)1(ll)-273(keep)-272(track)-272(of)-273(them,)]TJ 1 0 0 1 175.611 526.801 Tm [(otherwise)-250(they)-250(ar)18(e)-250(silently)-250(ignor)18(ed;)]TJ 0 g 0 G -17.434 -19.925 Td [(10.)]TJ 0 g 0 G @@ -18767,7 +18776,7 @@ ET endstream endobj -1593 0 obj +1594 0 obj << /Length 6893 >> @@ -18785,7 +18794,7 @@ BT /F75 11.9552 Tf 151.016 706.129 Td [(spasb)-250(\227)-250(Sparse)-250(matrix)-250(assembly)-250(routine)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.121 -19.204 Td [(call)-525(psb_spasb\050a,)-525(desc_a,)-525(info)-525([,)-525(afmt,)-525(upd,)-1050(mold]\051)]TJ +/F147 9.9626 Tf -51.121 -19.204 Td [(call)-525(psb_spasb\050a,)-525(desc_a,)-525(info)-525([,)-525(afmt,)-525(upd,)-1050(mold]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -22.289 Td [(T)90(ype:)]TJ 0 g 0 G @@ -18805,21 +18814,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in/out)]TJ/F84 9.9626 Tf 27.298 0 Td [(.)]TJ -59.098 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 576.173 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 575.974 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 575.974 Td [(desc)]TJ ET q 1 0 0 1 333.945 576.173 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 575.974 Td [(type)]TJ +/F147 9.9626 Tf 337.084 575.974 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -18829,39 +18838,39 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -20.42 Td [(upd)]TJ 0 g 0 G -/F84 9.9626 Tf 23.243 0 Td [(Pr)18(ovide)-250(for)-250(updates)-250(to)-250(the)-250(matrix)-250(coef)18(\002cients.)]TJ 1.664 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(integer)74(,)-250(possible)-250(values:)]TJ/F145 9.9626 Tf 165.218 0 Td [(psb_upd_srch_)]TJ/F84 9.9626 Tf 67.995 0 Td [(,)]TJ/F145 9.9626 Tf 4.981 0 Td [(psb_upd_perm_)]TJ +/F84 9.9626 Tf 23.243 0 Td [(Pr)18(ovide)-250(for)-250(updates)-250(to)-250(the)-250(matrix)-250(coef)18(\002cients.)]TJ 1.664 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(integer)74(,)-250(possible)-250(values:)]TJ/F147 9.9626 Tf 165.218 0 Td [(psb_upd_srch_)]TJ/F84 9.9626 Tf 67.995 0 Td [(,)]TJ/F147 9.9626 Tf 4.981 0 Td [(psb_upd_perm_)]TJ 0 g 0 G /F75 9.9626 Tf -263.101 -20.421 Td [(mold)]TJ 0 g 0 G -/F84 9.9626 Tf 28.473 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(matrix)-250(storage.)]TJ -3.566 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(a)-250(class)-250(derived)-250(fr)18(om)]TJ/F145 9.9626 Tf 201.393 0 Td [(psb)]TJ +/F84 9.9626 Tf 28.473 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(matrix)-250(storage.)]TJ -3.566 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(a)-250(class)-250(derived)-250(fr)18(om)]TJ/F147 9.9626 Tf 201.393 0 Td [(psb)]TJ ET q 1 0 0 1 342.513 371.449 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 345.652 371.249 Td [(T)]TJ +/F147 9.9626 Tf 345.652 371.249 Td [(T)]TJ ET q 1 0 0 1 351.51 371.449 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 354.648 371.249 Td [(base)]TJ +/F147 9.9626 Tf 354.648 371.249 Td [(base)]TJ ET q 1 0 0 1 376.197 371.449 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 379.335 371.249 Td [(sparse)]TJ +/F147 9.9626 Tf 379.335 371.249 Td [(sparse)]TJ ET q 1 0 0 1 411.345 371.449 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 414.483 371.249 Td [(mat)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ +/F147 9.9626 Tf 414.483 371.249 Td [(mat)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -330.279 -22.289 Td [(On)-250(Return)]TJ 0 g 0 G @@ -18870,21 +18879,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(matrix)-250(to)-250(be)-250(assembled.)]TJ 14.944 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 280.918 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 280.719 Td [(Tspmat)]TJ +/F147 9.9626 Tf 312.397 280.719 Td [(Tspmat)]TJ ET q 1 0 0 1 344.406 280.918 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 347.544 280.719 Td [(type)]TJ +/F147 9.9626 Tf 347.544 280.719 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -18899,23 +18908,23 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in/out)]TJ/F84 9.9626 Tf 27.298 0 Td [(.)]TJ 1.02 0 0 1 124.802 212.477 Tm [(Speci\002ed)-253(as:)-320(a)-253(str)8(uctur)17(ed)-253(data)-253(of)-253(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 296.601 212.477 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 296.601 212.477 Tm [(psb)]TJ ET q 1 0 0 1 312.92 212.677 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 316.058 212.477 Td [(desc)]TJ +/F147 9.9626 Tf 316.058 212.477 Td [(desc)]TJ ET q 1 0 0 1 337.607 212.677 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 340.745 212.477 Td [(type)]TJ +/F147 9.9626 Tf 340.745 212.477 Td [(type)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 361.667 212.477 Tm [(.)-328(If)-253(the)-253(matrix)-253(was)]TJ 0.984 0 0 1 124.802 200.522 Tm [(allocated)-253(with)]TJ/F145 9.9626 Tf 1 0 0 1 188.786 200.522 Tm [(bldmode=psb_matbld_remote_)]TJ/F84 9.9626 Tf 0.984 0 0 1 324.774 200.522 Tm [(,)-253(then)-253(the)-253(descriptor)-253(will)-253(be)]TJ 1 0 0 1 124.802 188.567 Tm [(r)18(eassembled.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 361.667 212.477 Tm [(.)-328(If)-253(the)-253(matrix)-253(was)]TJ 0.984 0 0 1 124.802 200.522 Tm [(allocated)-253(with)]TJ/F147 9.9626 Tf 1 0 0 1 188.786 200.522 Tm [(bldmode=psb_matbld_remote_)]TJ/F84 9.9626 Tf 0.984 0 0 1 324.774 200.522 Tm [(,)-253(then)-253(the)-253(descriptor)-253(will)-253(be)]TJ 1 0 0 1 124.802 188.567 Tm [(r)18(eassembled.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -20.421 Td [(info)]TJ 0 g 0 G @@ -18927,7 +18936,7 @@ ET endstream endobj -1597 0 obj +1598 0 obj << /Length 3496 >> @@ -18939,7 +18948,7 @@ BT 0 g 0 G /F84 9.9626 Tf 12.453 -19.925 Td [(1.)]TJ 0 g 0 G - 0.996 0 0 1 175.611 686.204 Tm [(On)-250(entry)-251(to)-250(this)-250(r)18(outine)-250(the)-250(descriptor)-251(must)-250(be)-250(in)-250(the)-251(assembled)-250(state,)-250(i.e.)]TJ/F145 9.9626 Tf 1 0 0 1 175.611 674.248 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 49.564 0 Td [(must)-250(alr)18(eady)-250(have)-250(been)-250(called.)]TJ + 0.996 0 0 1 175.611 686.204 Tm [(On)-250(entry)-251(to)-250(this)-250(r)18(outine)-250(the)-250(descriptor)-251(must)-250(be)-250(in)-250(the)-251(assembled)-250(state,)-250(i.e.)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 674.248 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 49.564 0 Td [(must)-250(alr)18(eady)-250(have)-250(been)-250(called.)]TJ 0 g 0 G -62.017 -19.925 Td [(2.)]TJ 0 g 0 G @@ -18951,7 +18960,7 @@ BT 0 g 0 G -12.453 -19.926 Td [(4.)]TJ 0 g 0 G - 0.98 0 0 1 175.611 590.562 Tm [(If)-211(the)-210(update)-211(choice)-211(is)]TJ/F145 9.9626 Tf 1 0 0 1 270.622 590.562 Tm [(psb_upd_perm_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.616 590.562 Tm [(,)-220(then)-210(subsequent)-211(calls)-211(to)]TJ/F145 9.9626 Tf 1 0 0 1 447.343 590.562 Tm [(psb_spins)]TJ/F84 9.9626 Tf 1.02 0 0 1 175.611 578.607 Tm [(to)-386(update)-387(the)-386(matrix)-387(must)-386(be)-386(arranged)-387(in)-386(such)-387(a)-386(way)-387(as)-386(to)-386(pr)17(oduce)]TJ 0.992 0 0 1 175.611 566.652 Tm [(exactly)-252(the)-253(same)-252(sequence)-253(of)-252(coef)18(\002cient)-252(values)-253(as)-252(encounter)18(ed)-252(at)-253(the)-252(\002rst)]TJ 1 0 0 1 175.611 554.697 Tm [(assembly;)]TJ + 0.98 0 0 1 175.611 590.562 Tm [(If)-211(the)-210(update)-211(choice)-211(is)]TJ/F147 9.9626 Tf 1 0 0 1 270.622 590.562 Tm [(psb_upd_perm_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.616 590.562 Tm [(,)-220(then)-210(subsequent)-211(calls)-211(to)]TJ/F147 9.9626 Tf 1 0 0 1 447.343 590.562 Tm [(psb_spins)]TJ/F84 9.9626 Tf 1.02 0 0 1 175.611 578.607 Tm [(to)-386(update)-387(the)-386(matrix)-387(must)-386(be)-386(arranged)-387(in)-386(such)-387(a)-386(way)-387(as)-386(to)-386(pr)17(oduce)]TJ 0.992 0 0 1 175.611 566.652 Tm [(exactly)-252(the)-253(same)-252(sequence)-253(of)-252(coef)18(\002cient)-252(values)-253(as)-252(encounter)18(ed)-252(at)-253(the)-252(\002rst)]TJ 1 0 0 1 175.611 554.697 Tm [(assembly;)]TJ 0 g 0 G -12.453 -19.926 Td [(5.)]TJ 0 g 0 G @@ -18963,7 +18972,7 @@ BT 0 g 0 G -12.453 -19.925 Td [(7.)]TJ 0 g 0 G - 1.02 0 0 1 175.611 482.966 Tm [(If)-380(the)]TJ/F145 9.9626 Tf 1 0 0 1 204.239 482.966 Tm [(bldmode=psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 344.09 482.966 Tm [(value)-380(was)-380(speci\002ed)-380(at)-380(allocation)]TJ 1.02 0 0 1 175.611 471.011 Tm [(time,)-381(cont)1(ributions)-354(de\002ned)-353(on)-354(the)-353(curr)18(ent)-354(pr)18(ocess)-354(but)-353(belonging)-353(to)-354(a)]TJ 0.98 0 0 1 175.611 459.055 Tm [(r)18(emote)-252(pr)18(ocess)-253(will)-252(be)-253(handled)-253(accor)19(dingly)113(.)-315(This)-253(is)-253(most)-252(likely)-253(to)-253(occur)-252(in)]TJ 1.016 0 0 1 175.611 447.1 Tm [(\002nite)-247(element)-247(applications,)-247(with)]TJ/F145 9.9626 Tf 1 0 0 1 322.076 447.1 Tm [(dupl=psb_dupl_add_)]TJ/F84 9.9626 Tf 1.016 0 0 1 416.222 447.1 Tm [(;)-247(it)-247(is)-247(necessary)-247(to)]TJ 0.994 0 0 1 175.611 435.145 Tm [(check)-252(for)-252(possible)-252(updates)-252(needed)-252(in)-252(the)-252(descriptor)74(,)-252(hence)-252(ther)18(e)-252(will)-252(be)-252(a)]TJ 1 0 0 1 175.611 423.19 Tm [(r)8(untime)-250(over)18(head.)]TJ + 1.02 0 0 1 175.611 482.966 Tm [(If)-380(the)]TJ/F147 9.9626 Tf 1 0 0 1 204.239 482.966 Tm [(bldmode=psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 344.09 482.966 Tm [(value)-380(was)-380(speci\002ed)-380(at)-380(allocation)]TJ 1.02 0 0 1 175.611 471.011 Tm [(time,)-381(cont)1(ributions)-354(de\002ned)-353(on)-354(the)-353(curr)18(ent)-354(pr)18(ocess)-354(but)-353(belonging)-353(to)-354(a)]TJ 0.98 0 0 1 175.611 459.055 Tm [(r)18(emote)-252(pr)18(ocess)-253(will)-252(be)-253(handled)-253(accor)19(dingly)113(.)-315(This)-253(is)-253(most)-252(likely)-253(to)-253(occur)-252(in)]TJ 1.016 0 0 1 175.611 447.1 Tm [(\002nite)-247(element)-247(applications,)-247(with)]TJ/F147 9.9626 Tf 1 0 0 1 322.076 447.1 Tm [(dupl=psb_dupl_add_)]TJ/F84 9.9626 Tf 1.016 0 0 1 416.222 447.1 Tm [(;)-247(it)-247(is)-247(necessary)-247(to)]TJ 0.994 0 0 1 175.611 435.145 Tm [(check)-252(for)-252(possible)-252(updates)-252(needed)-252(in)-252(the)-252(descriptor)74(,)-252(hence)-252(ther)18(e)-252(will)-252(be)-252(a)]TJ 1 0 0 1 175.611 423.19 Tm [(r)8(untime)-250(over)18(head.)]TJ 0 g 0 G 141.968 -332.752 Td [(88)]TJ 0 g 0 G @@ -18971,7 +18980,7 @@ ET endstream endobj -1610 0 obj +1611 0 obj << /Length 2988 >> @@ -18989,7 +18998,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(spfree)-250(\227)-250(Frees)-250(a)-250(sparse)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_spfree\050a,)-525(desc_a,)-525(info\051)]TJ +/F147 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_spfree\050a,)-525(desc_a,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -19002,21 +19011,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(matrix)-250(to)-250(be)-250(fr)18(eed.)]TJ 14.944 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 577.576 Td [(Tspmat)]TJ +/F147 9.9626 Tf 312.397 577.576 Td [(Tspmat)]TJ ET q 1 0 0 1 344.406 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 347.544 577.576 Td [(type)]TJ +/F147 9.9626 Tf 347.544 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -19031,21 +19040,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 509.83 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 509.83 Td [(desc)]TJ ET q 1 0 0 1 333.945 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 509.83 Td [(type)]TJ +/F147 9.9626 Tf 337.084 509.83 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -19062,7 +19071,7 @@ ET endstream endobj -1502 0 obj +1503 0 obj << /Type /ObjStm /N 100 @@ -19070,35 +19079,35 @@ endobj /Length 10335 >> stream -1501 0 1493 59 1505 141 1503 280 1507 425 320 483 1504 540 1510 662 1508 801 1512 959 -1513 1018 1514 1077 1515 1136 1509 1195 1519 1289 1516 1437 1517 1582 1521 1728 324 1786 1522 1843 -1518 1901 1526 1996 1523 2144 1524 2289 1528 2436 328 2495 1525 2553 1531 2648 1529 2787 1533 2932 -332 2990 1530 3047 1538 3142 1535 3290 1536 3435 1540 3582 336 3641 1537 3699 1542 3821 1544 3939 -1545 3997 1546 4055 1541 4113 1550 4195 1547 4343 1548 4490 1552 4635 340 4694 1553 4752 1549 4811 -1555 4906 1557 5024 1558 5082 1559 5140 1560 5198 1554 5256 1563 5351 1565 5469 344 5528 1562 5586 -1569 5708 1561 5865 1566 6012 1567 6157 1571 6304 1572 6362 1573 6419 1574 6477 1575 6535 1576 6593 -1568 6651 1579 6773 1581 6891 1582 6950 1583 7009 1584 7068 1585 7127 1586 7186 1587 7245 1578 7304 -1592 7427 1588 7584 1589 7731 1590 7876 1594 8023 348 8081 1591 8138 1596 8233 1598 8351 1599 8410 -1600 8469 1601 8528 1602 8587 1603 8646 1604 8705 1605 8764 1595 8823 1609 8918 1606 9066 1607 9209 -% 1501 0 obj +1502 0 1494 59 1506 141 1504 280 1508 425 320 483 1505 540 1511 662 1509 801 1513 959 +1514 1018 1515 1077 1516 1136 1510 1195 1520 1289 1517 1437 1518 1582 1522 1728 324 1786 1523 1843 +1519 1901 1527 1996 1524 2144 1525 2289 1529 2436 328 2495 1526 2553 1532 2648 1530 2787 1534 2932 +332 2990 1531 3047 1539 3142 1536 3290 1537 3435 1541 3582 336 3641 1538 3699 1543 3821 1545 3939 +1546 3997 1547 4055 1542 4113 1551 4195 1548 4343 1549 4490 1553 4635 340 4694 1554 4752 1550 4811 +1556 4906 1558 5024 1559 5082 1560 5140 1561 5198 1555 5256 1564 5351 1566 5469 344 5528 1563 5586 +1570 5708 1562 5865 1567 6012 1568 6157 1572 6304 1573 6362 1574 6419 1575 6477 1576 6535 1577 6593 +1569 6651 1580 6773 1582 6891 1583 6950 1584 7009 1585 7068 1586 7127 1587 7186 1588 7245 1579 7304 +1593 7427 1589 7584 1590 7731 1591 7876 1595 8023 348 8081 1592 8138 1597 8233 1599 8351 1600 8410 +1601 8469 1602 8528 1603 8587 1604 8646 1605 8705 1606 8764 1596 8823 1610 8918 1607 9066 1608 9209 +% 1502 0 obj << -/D [1494 0 R /XYZ 150.705 567.828 null] +/D [1495 0 R /XYZ 150.705 567.828 null] >> -% 1493 0 obj +% 1494 0 obj << -/Font << /F84 687 0 R /F145 940 0 R >> +/Font << /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1505 0 obj +% 1506 0 obj << /Type /Page -/Contents 1506 0 R -/Resources 1504 0 R +/Contents 1507 0 R +/Resources 1505 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1492 0 R -/Annots [ 1503 0 R ] +/Parent 1493 0 R +/Annots [ 1504 0 R ] >> -% 1503 0 obj +% 1504 0 obj << /Type /Annot /Subtype /Link @@ -19106,29 +19115,29 @@ stream /Rect [291.943 116.52 359.001 128.58] /A << /S /GoTo /D (descdata) >> >> -% 1507 0 obj +% 1508 0 obj << -/D [1505 0 R /XYZ 98.895 753.953 null] +/D [1506 0 R /XYZ 98.895 753.953 null] >> % 320 0 obj << -/D [1505 0 R /XYZ 99.895 716.092 null] +/D [1506 0 R /XYZ 99.895 716.092 null] >> -% 1504 0 obj +% 1505 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1510 0 obj +% 1511 0 obj << /Type /Page -/Contents 1511 0 R -/Resources 1509 0 R +/Contents 1512 0 R +/Resources 1510 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1492 0 R -/Annots [ 1508 0 R ] +/Parent 1493 0 R +/Annots [ 1509 0 R ] >> -% 1508 0 obj +% 1509 0 obj << /Type /Annot /Subtype /Link @@ -19136,37 +19145,37 @@ stream /Rect [328.975 401.451 350.892 413.511] /A << /S /GoTo /D (subsubsection.2.3.1) >> >> -% 1512 0 obj -<< -/D [1510 0 R /XYZ 149.705 753.953 null] ->> % 1513 0 obj << -/D [1510 0 R /XYZ 150.705 496.698 null] +/D [1511 0 R /XYZ 149.705 753.953 null] >> % 1514 0 obj << -/D [1510 0 R /XYZ 150.705 474.179 null] +/D [1511 0 R /XYZ 150.705 496.698 null] >> % 1515 0 obj << -/D [1510 0 R /XYZ 150.705 430.343 null] +/D [1511 0 R /XYZ 150.705 474.179 null] >> -% 1509 0 obj +% 1516 0 obj +<< +/D [1511 0 R /XYZ 150.705 430.343 null] +>> +% 1510 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1519 0 obj +% 1520 0 obj << /Type /Page -/Contents 1520 0 R -/Resources 1518 0 R +/Contents 1521 0 R +/Resources 1519 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1492 0 R -/Annots [ 1516 0 R 1517 0 R ] +/Parent 1493 0 R +/Annots [ 1517 0 R 1518 0 R ] >> -% 1516 0 obj +% 1517 0 obj << /Type /Annot /Subtype /Link @@ -19174,7 +19183,7 @@ stream /Rect [291.943 573.77 359.001 585.83] /A << /S /GoTo /D (descdata) >> >> -% 1517 0 obj +% 1518 0 obj << /Type /Annot /Subtype /Link @@ -19182,33 +19191,33 @@ stream /Rect [291.943 416.361 359.001 428.42] /A << /S /GoTo /D (descdata) >> >> -% 1521 0 obj +% 1522 0 obj << -/D [1519 0 R /XYZ 98.895 753.953 null] +/D [1520 0 R /XYZ 98.895 753.953 null] >> % 324 0 obj << -/D [1519 0 R /XYZ 99.895 716.092 null] +/D [1520 0 R /XYZ 99.895 716.092 null] >> -% 1522 0 obj +% 1523 0 obj << -/D [1519 0 R /XYZ 99.895 326.302 null] +/D [1520 0 R /XYZ 99.895 326.302 null] >> -% 1518 0 obj +% 1519 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1526 0 obj +% 1527 0 obj << /Type /Page -/Contents 1527 0 R -/Resources 1525 0 R +/Contents 1528 0 R +/Resources 1526 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1492 0 R -/Annots [ 1523 0 R 1524 0 R ] +/Parent 1493 0 R +/Annots [ 1524 0 R 1525 0 R ] >> -% 1523 0 obj +% 1524 0 obj << /Type /Annot /Subtype /Link @@ -19216,7 +19225,7 @@ stream /Rect [342.753 573.77 409.811 585.83] /A << /S /GoTo /D (descdata) >> >> -% 1524 0 obj +% 1525 0 obj << /Type /Annot /Subtype /Link @@ -19224,29 +19233,29 @@ stream /Rect [342.753 484.107 409.811 496.166] /A << /S /GoTo /D (descdata) >> >> -% 1528 0 obj +% 1529 0 obj << -/D [1526 0 R /XYZ 149.705 753.953 null] +/D [1527 0 R /XYZ 149.705 753.953 null] >> % 328 0 obj << -/D [1526 0 R /XYZ 150.705 716.092 null] +/D [1527 0 R /XYZ 150.705 716.092 null] >> -% 1525 0 obj +% 1526 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1531 0 obj +% 1532 0 obj << /Type /Page -/Contents 1532 0 R -/Resources 1530 0 R +/Contents 1533 0 R +/Resources 1531 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1534 0 R -/Annots [ 1529 0 R ] +/Parent 1535 0 R +/Annots [ 1530 0 R ] >> -% 1529 0 obj +% 1530 0 obj << /Type /Annot /Subtype /Link @@ -19254,29 +19263,29 @@ stream /Rect [291.943 573.77 359.001 585.83] /A << /S /GoTo /D (descdata) >> >> -% 1533 0 obj +% 1534 0 obj << -/D [1531 0 R /XYZ 98.895 753.953 null] +/D [1532 0 R /XYZ 98.895 753.953 null] >> % 332 0 obj << -/D [1531 0 R /XYZ 99.895 716.092 null] +/D [1532 0 R /XYZ 99.895 716.092 null] >> -% 1530 0 obj +% 1531 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1538 0 obj +% 1539 0 obj << /Type /Page -/Contents 1539 0 R -/Resources 1537 0 R +/Contents 1540 0 R +/Resources 1538 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1534 0 R -/Annots [ 1535 0 R 1536 0 R ] +/Parent 1535 0 R +/Annots [ 1536 0 R 1537 0 R ] >> -% 1535 0 obj +% 1536 0 obj << /Type /Annot /Subtype /Link @@ -19284,7 +19293,7 @@ stream /Rect [342.753 452.321 420.271 464.381] /A << /S /GoTo /D (spdata) >> >> -% 1536 0 obj +% 1537 0 obj << /Type /Annot /Subtype /Link @@ -19292,54 +19301,54 @@ stream /Rect [342.753 209.193 409.811 221.252] /A << /S /GoTo /D (descdata) >> >> -% 1540 0 obj +% 1541 0 obj << -/D [1538 0 R /XYZ 149.705 753.953 null] +/D [1539 0 R /XYZ 149.705 753.953 null] >> % 336 0 obj << -/D [1538 0 R /XYZ 150.705 716.092 null] +/D [1539 0 R /XYZ 150.705 716.092 null] >> -% 1537 0 obj +% 1538 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1542 0 obj +% 1543 0 obj << /Type /Page -/Contents 1543 0 R -/Resources 1541 0 R +/Contents 1544 0 R +/Resources 1542 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1534 0 R ->> -% 1544 0 obj -<< -/D [1542 0 R /XYZ 98.895 753.953 null] +/Parent 1535 0 R >> % 1545 0 obj << -/D [1542 0 R /XYZ 99.895 716.092 null] +/D [1543 0 R /XYZ 98.895 753.953 null] >> % 1546 0 obj << -/D [1542 0 R /XYZ 99.895 663.469 null] +/D [1543 0 R /XYZ 99.895 716.092 null] >> -% 1541 0 obj +% 1547 0 obj << -/Font << /F84 687 0 R /F145 940 0 R >> +/D [1543 0 R /XYZ 99.895 663.469 null] +>> +% 1542 0 obj +<< +/Font << /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1550 0 obj +% 1551 0 obj << /Type /Page -/Contents 1551 0 R -/Resources 1549 0 R +/Contents 1552 0 R +/Resources 1550 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1534 0 R -/Annots [ 1547 0 R 1548 0 R ] +/Parent 1535 0 R +/Annots [ 1548 0 R 1549 0 R ] >> -% 1547 0 obj +% 1548 0 obj << /Type /Annot /Subtype /Link @@ -19347,7 +19356,7 @@ stream /Rect [342.753 571.679 409.811 583.739] /A << /S /GoTo /D (descdata) >> >> -% 1548 0 obj +% 1549 0 obj << /Type /Annot /Subtype /Link @@ -19355,83 +19364,83 @@ stream /Rect [342.753 227.887 420.271 239.946] /A << /S /GoTo /D (spdata) >> >> -% 1552 0 obj +% 1553 0 obj << -/D [1550 0 R /XYZ 149.705 753.953 null] +/D [1551 0 R /XYZ 149.705 753.953 null] >> % 340 0 obj << -/D [1550 0 R /XYZ 150.705 716.092 null] +/D [1551 0 R /XYZ 150.705 716.092 null] >> -% 1553 0 obj +% 1554 0 obj << -/D [1550 0 R /XYZ 150.705 136.374 null] +/D [1551 0 R /XYZ 150.705 136.374 null] >> -% 1549 0 obj +% 1550 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1555 0 obj +% 1556 0 obj << /Type /Page -/Contents 1556 0 R -/Resources 1554 0 R +/Contents 1557 0 R +/Resources 1555 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1534 0 R ->> -% 1557 0 obj -<< -/D [1555 0 R /XYZ 98.895 753.953 null] +/Parent 1535 0 R >> % 1558 0 obj << -/D [1555 0 R /XYZ 99.895 716.092 null] +/D [1556 0 R /XYZ 98.895 753.953 null] >> % 1559 0 obj << -/D [1555 0 R /XYZ 99.895 699.334 null] +/D [1556 0 R /XYZ 99.895 716.092 null] >> % 1560 0 obj << -/D [1555 0 R /XYZ 99.895 644.819 null] +/D [1556 0 R /XYZ 99.895 699.334 null] >> -% 1554 0 obj +% 1561 0 obj << -/Font << /F84 687 0 R /F78 686 0 R /F145 940 0 R >> +/D [1556 0 R /XYZ 99.895 655.499 null] +>> +% 1555 0 obj +<< +/Font << /F84 687 0 R /F78 686 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1563 0 obj +% 1564 0 obj << /Type /Page -/Contents 1564 0 R -/Resources 1562 0 R +/Contents 1565 0 R +/Resources 1563 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1534 0 R +/Parent 1535 0 R >> -% 1565 0 obj +% 1566 0 obj << -/D [1563 0 R /XYZ 149.705 753.953 null] +/D [1564 0 R /XYZ 149.705 753.953 null] >> % 344 0 obj << -/D [1563 0 R /XYZ 150.705 716.092 null] +/D [1564 0 R /XYZ 150.705 716.092 null] >> -% 1562 0 obj +% 1563 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1569 0 obj +% 1570 0 obj << /Type /Page -/Contents 1570 0 R -/Resources 1568 0 R +/Contents 1571 0 R +/Resources 1569 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1577 0 R -/Annots [ 1561 0 R 1566 0 R 1567 0 R ] +/Parent 1578 0 R +/Annots [ 1562 0 R 1567 0 R 1568 0 R ] >> -% 1561 0 obj +% 1562 0 obj << /Type /Annot /Subtype /Link @@ -19439,7 +19448,7 @@ stream /Rect [260.133 654.503 327.191 666.562] /A << /S /GoTo /D (descdata) >> >> -% 1566 0 obj +% 1567 0 obj << /Type /Annot /Subtype /Link @@ -19447,7 +19456,7 @@ stream /Rect [291.943 480.963 369.462 493.022] /A << /S /GoTo /D (spdata) >> >> -% 1567 0 obj +% 1568 0 obj << /Type /Annot /Subtype /Link @@ -19455,86 +19464,86 @@ stream /Rect [260.133 411.699 327.191 423.758] /A << /S /GoTo /D (descdata) >> >> -% 1571 0 obj -<< -/D [1569 0 R /XYZ 98.895 753.953 null] ->> % 1572 0 obj << -/D [1569 0 R /XYZ 99.895 306.27 null] +/D [1570 0 R /XYZ 98.895 753.953 null] >> % 1573 0 obj << -/D [1569 0 R /XYZ 99.895 272.927 null] +/D [1570 0 R /XYZ 99.895 306.27 null] >> % 1574 0 obj << -/D [1569 0 R /XYZ 99.895 236.878 null] +/D [1570 0 R /XYZ 99.895 272.927 null] >> % 1575 0 obj << -/D [1569 0 R /XYZ 99.895 167.614 null] +/D [1570 0 R /XYZ 99.895 236.878 null] >> % 1576 0 obj << -/D [1569 0 R /XYZ 99.895 146.171 null] +/D [1570 0 R /XYZ 99.895 167.614 null] >> -% 1568 0 obj +% 1577 0 obj +<< +/D [1570 0 R /XYZ 99.895 146.171 null] +>> +% 1569 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1579 0 obj +% 1580 0 obj << /Type /Page -/Contents 1580 0 R -/Resources 1578 0 R +/Contents 1581 0 R +/Resources 1579 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1577 0 R ->> -% 1581 0 obj -<< -/D [1579 0 R /XYZ 149.705 753.953 null] +/Parent 1578 0 R >> % 1582 0 obj << -/D [1579 0 R /XYZ 150.705 716.092 null] +/D [1580 0 R /XYZ 149.705 753.953 null] >> % 1583 0 obj << -/D [1579 0 R /XYZ 150.705 651.514 null] +/D [1580 0 R /XYZ 150.705 716.092 null] >> % 1584 0 obj << -/D [1579 0 R /XYZ 150.705 608.346 null] +/D [1580 0 R /XYZ 150.705 651.514 null] >> % 1585 0 obj << -/D [1579 0 R /XYZ 150.705 575.798 null] +/D [1580 0 R /XYZ 150.705 608.346 null] >> % 1586 0 obj << -/D [1579 0 R /XYZ 150.705 520.007 null] +/D [1580 0 R /XYZ 150.705 575.798 null] >> % 1587 0 obj << -/D [1579 0 R /XYZ 150.705 476.171 null] +/D [1580 0 R /XYZ 150.705 520.007 null] >> -% 1578 0 obj +% 1588 0 obj +<< +/D [1580 0 R /XYZ 150.705 476.171 null] +>> +% 1579 0 obj << -/Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> +/Font << /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1592 0 obj +% 1593 0 obj << /Type /Page -/Contents 1593 0 R -/Resources 1591 0 R +/Contents 1594 0 R +/Resources 1592 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1577 0 R -/Annots [ 1588 0 R 1589 0 R 1590 0 R ] +/Parent 1578 0 R +/Annots [ 1589 0 R 1590 0 R 1591 0 R ] >> -% 1588 0 obj +% 1589 0 obj << /Type /Annot /Subtype /Link @@ -19542,7 +19551,7 @@ stream /Rect [291.943 572.168 359.001 584.228] /A << /S /GoTo /D (descdata) >> >> -% 1589 0 obj +% 1590 0 obj << /Type /Annot /Subtype /Link @@ -19550,7 +19559,7 @@ stream /Rect [291.943 276.913 369.462 288.973] /A << /S /GoTo /D (spdata) >> >> -% 1590 0 obj +% 1591 0 obj << /Type /Annot /Subtype /Link @@ -19558,74 +19567,74 @@ stream /Rect [295.605 208.672 362.663 220.731] /A << /S /GoTo /D (descdata) >> >> -% 1594 0 obj +% 1595 0 obj << -/D [1592 0 R /XYZ 98.895 753.953 null] +/D [1593 0 R /XYZ 98.895 753.953 null] >> % 348 0 obj << -/D [1592 0 R /XYZ 99.895 716.092 null] +/D [1593 0 R /XYZ 99.895 716.092 null] >> -% 1591 0 obj +% 1592 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1596 0 obj +% 1597 0 obj << /Type /Page -/Contents 1597 0 R -/Resources 1595 0 R +/Contents 1598 0 R +/Resources 1596 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1577 0 R ->> -% 1598 0 obj -<< -/D [1596 0 R /XYZ 149.705 753.953 null] +/Parent 1578 0 R >> % 1599 0 obj << -/D [1596 0 R /XYZ 150.705 701.929 null] +/D [1597 0 R /XYZ 149.705 753.953 null] >> % 1600 0 obj << -/D [1596 0 R /XYZ 150.705 667.454 null] +/D [1597 0 R /XYZ 150.705 701.929 null] >> % 1601 0 obj << -/D [1596 0 R /XYZ 150.705 647.529 null] +/D [1597 0 R /XYZ 150.705 667.454 null] >> % 1602 0 obj << -/D [1596 0 R /XYZ 150.705 603.693 null] +/D [1597 0 R /XYZ 150.705 647.529 null] >> % 1603 0 obj << -/D [1596 0 R /XYZ 150.705 547.902 null] +/D [1597 0 R /XYZ 150.705 603.693 null] >> % 1604 0 obj << -/D [1596 0 R /XYZ 150.705 527.977 null] +/D [1597 0 R /XYZ 150.705 547.902 null] >> % 1605 0 obj << -/D [1596 0 R /XYZ 150.705 496.097 null] +/D [1597 0 R /XYZ 150.705 527.977 null] >> -% 1595 0 obj +% 1606 0 obj +<< +/D [1597 0 R /XYZ 150.705 496.097 null] +>> +% 1596 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1609 0 obj +% 1610 0 obj << /Type /Page -/Contents 1610 0 R -/Resources 1608 0 R +/Contents 1611 0 R +/Resources 1609 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1577 0 R -/Annots [ 1606 0 R 1607 0 R ] +/Parent 1578 0 R +/Annots [ 1607 0 R 1608 0 R ] >> -% 1606 0 obj +% 1607 0 obj << /Type /Annot /Subtype /Link @@ -19633,7 +19642,7 @@ stream /Rect [291.943 573.77 369.462 585.83] /A << /S /GoTo /D (spdata) >> >> -% 1607 0 obj +% 1608 0 obj << /Type /Annot /Subtype /Link @@ -19644,7 +19653,7 @@ stream endstream endobj -1617 0 obj +1618 0 obj << /Length 3932 >> @@ -19662,7 +19671,7 @@ BT /F75 11.9552 Tf 1.009 0 0 1 207.982 706.129 Tm [(sprn)-246(\227)-247(Reinit)-246(sparse)-246(matrix)-247(structure)-246(for)-246(psblas)-247(rou-)]TJ 1 0 0 1 183.582 692.181 Tm [(tines.)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -32.877 -18.964 Td [(call)-525(psb_sprn\050a,)-525(decsc_a,)-525(info,)-525(clear\051)]TJ +/F147 9.9626 Tf -32.877 -18.964 Td [(call)-525(psb_sprn\050a,)-525(decsc_a,)-525(info,)-525(clear\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.917 Td [(T)90(ype:)]TJ 0 g 0 G @@ -19675,21 +19684,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(matrix)-250(to)-250(be)-250(r)18(einitialized.)]TJ 14.944 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf -23.69 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.148 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.137 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.137 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 563.828 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 563.628 Td [(Tspmat)]TJ +/F147 9.9626 Tf 363.206 563.628 Td [(Tspmat)]TJ ET q 1 0 0 1 395.216 563.828 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 398.354 563.628 Td [(type)]TJ +/F147 9.9626 Tf 398.354 563.628 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -19704,21 +19713,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 496.082 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 495.882 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 495.882 Td [(desc)]TJ ET q 1 0 0 1 384.755 496.082 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 495.882 Td [(type)]TJ +/F147 9.9626 Tf 387.893 495.882 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -19743,7 +19752,7 @@ ET endstream endobj -1624 0 obj +1625 0 obj << /Length 6512 >> @@ -19761,7 +19770,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(geall)-250(\227)-250(Allocates)-250(a)-250(dense)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_geall\050x,)-525(desc_a,)-525(info[,)-525(dupl,)-525(bldmode,)-525(n,)-525(lb]\051)]TJ +/F147 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_geall\050x,)-525(desc_a,)-525(info[,)-525(dupl,)-525(bldmode,)-525(n,)-525(lb]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -19.627 Td [(T)90(ype:)]TJ 0 g 0 G @@ -19781,21 +19790,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(communication)-250(descriptor)74(.)]TJ -8.249 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(variable)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 136.327 0 Td [(psb)]TJ +/F147 9.9626 Tf 136.327 0 Td [(psb)]TJ ET q 1 0 0 1 277.448 581.898 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 280.586 581.699 Td [(desc)]TJ +/F147 9.9626 Tf 280.586 581.699 Td [(desc)]TJ ET q 1 0 0 1 302.135 581.898 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 305.273 581.699 Td [(type)]TJ +/F147 9.9626 Tf 305.273 581.699 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -19809,11 +19818,11 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.009 Td [(dupl)]TJ 0 g 0 G -/F84 9.9626 Tf 26.561 0 Td [(How)-250(to)-250(handle)-250(duplicate)-250(coef)18(\002cients.)]TJ -1.654 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.006 0 0 1 124.802 333.389 Tm [(Speci\002ed)-248(as:)-308(inte)1(ger)73(,)-248(possible)-248(values:)]TJ/F145 9.9626 Tf 1 0 0 1 290.906 333.389 Tm [(psb_dupl_ovwrt_)]TJ/F84 9.9626 Tf 1.006 0 0 1 369.361 333.389 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 374.352 333.389 Tm [(psb_dupl_add_)]TJ/F84 9.9626 Tf 1.006 0 0 1 442.346 333.389 Tm [(;)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 321.433 Tm [(psb_dupl_err_)]TJ/F84 9.9626 Tf 70.485 0 Td [(has)-250(no)-250(ef)18(fect.)]TJ +/F84 9.9626 Tf 26.561 0 Td [(How)-250(to)-250(handle)-250(duplicate)-250(coef)18(\002cients.)]TJ -1.654 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.006 0 0 1 124.802 333.389 Tm [(Speci\002ed)-248(as:)-308(inte)1(ger)73(,)-248(possible)-248(values:)]TJ/F147 9.9626 Tf 1 0 0 1 290.906 333.389 Tm [(psb_dupl_ovwrt_)]TJ/F84 9.9626 Tf 1.006 0 0 1 369.361 333.389 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 374.352 333.389 Tm [(psb_dupl_add_)]TJ/F84 9.9626 Tf 1.006 0 0 1 442.346 333.389 Tm [(;)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 321.433 Tm [(psb_dupl_err_)]TJ/F84 9.9626 Tf 70.485 0 Td [(has)-250(no)-250(ef)18(fect.)]TJ 0 g 0 G /F75 9.9626 Tf -95.392 -19.009 Td [(bldmode)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 145.335 302.424 Tm [(Whether)-327(to)-327(keep)-327(track)-327(of)-327(matrix)-327(entries)-327(that)-327(do)-327(not)-327(belong)-327(to)-327(the)]TJ 1 0 0 1 124.802 290.469 Tm [(curr)18(ent)-250(pr)18(ocess.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 242.648 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 250.731 242.648 Tm [(psb_matbld_noremote_)]TJ/F84 9.9626 Tf 0.98 0 0 1 355.338 242.648 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 359.791 242.648 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 0.98 0 0 1 453.937 242.648 Tm [(.)]TJ 1 0 0 1 124.802 230.693 Tm [(Default:)]TJ/F145 9.9626 Tf 38.515 0 Td [(psb_matbld_noremote_)]TJ/F84 9.9626 Tf 104.607 0 Td [(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 145.335 302.424 Tm [(Whether)-327(to)-327(keep)-327(track)-327(of)-327(matrix)-327(entries)-327(that)-327(do)-327(not)-327(belong)-327(to)-327(the)]TJ 1 0 0 1 124.802 290.469 Tm [(curr)18(ent)-250(pr)18(ocess.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 242.648 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F147 9.9626 Tf 1 0 0 1 250.731 242.648 Tm [(psb_matbld_noremote_)]TJ/F84 9.9626 Tf 0.98 0 0 1 355.338 242.648 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 359.791 242.648 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 0.98 0 0 1 453.937 242.648 Tm [(.)]TJ 1 0 0 1 124.802 230.693 Tm [(Default:)]TJ/F147 9.9626 Tf 38.515 0 Td [(psb_matbld_noremote_)]TJ/F84 9.9626 Tf 104.607 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -168.029 -19.627 Td [(On)-250(Return)]TJ 0 g 0 G @@ -19822,28 +19831,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(dense)-250(matrix)-250(to)-250(be)-250(allocated.)]TJ 15.253 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ 1.01 0 0 1 124.802 144.236 Tm [(Speci\002ed)-247(as:)-306(a)-247(rank)-246(one)-247(or)-246(two)-247(array)-246(with)-247(the)-246(ALLOCA)73(T)73(ABLE)-246(attribute)]TJ 1 0 0 1 124.802 132.281 Tm [(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 86.634 0 Td [(psb)]TJ +/F147 9.9626 Tf 86.634 0 Td [(psb)]TJ ET q 1 0 0 1 227.755 132.48 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 230.893 132.281 Td [(T)]TJ +/F147 9.9626 Tf 230.893 132.281 Td [(T)]TJ ET q 1 0 0 1 236.751 132.48 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 239.889 132.281 Td [(vect)]TJ +/F147 9.9626 Tf 239.889 132.281 Td [(vect)]TJ ET q 1 0 0 1 261.438 132.48 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 264.576 132.281 Td [(type)]TJ +/F147 9.9626 Tf 264.576 132.281 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(,)-250(of)-250(type)-250(r)18(eal,)-250(complex)-250(or)-250(integer)74(.)]TJ 0 g 0 G @@ -19853,7 +19862,7 @@ ET endstream endobj -1629 0 obj +1630 0 obj << /Length 991 >> @@ -19868,7 +19877,7 @@ BT 0 g 0 G /F84 9.9626 Tf 12.453 -19.925 Td [(1.)]TJ 0 g 0 G - 1.02 0 0 1 175.611 616.465 Tm [(Using)]TJ/F145 9.9626 Tf 1 0 0 1 205.259 616.465 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 302.317 616.465 Tm [(is)-287(li)1(kely)-287(to)-287(cause)-286(a)-287(r)8(untime)-286(over)17(head)-286(at)-287(as-)]TJ 1 0 0 1 175.611 604.51 Tm [(sembly)-250(time;)]TJ + 1.02 0 0 1 175.611 616.465 Tm [(Using)]TJ/F147 9.9626 Tf 1 0 0 1 205.259 616.465 Tm [(psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 302.317 616.465 Tm [(is)-287(li)1(kely)-287(to)-287(cause)-286(a)-287(r)8(untime)-286(over)17(head)-286(at)-287(as-)]TJ 1 0 0 1 175.611 604.51 Tm [(sembly)-250(time;)]TJ 0 g 0 G 141.968 -514.072 Td [(92)]TJ 0 g 0 G @@ -19876,7 +19885,7 @@ ET endstream endobj -1636 0 obj +1637 0 obj << /Length 6572 >> @@ -19894,7 +19903,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(geins)-250(\227)-250(Dense)-250(matrix)-250(insertion)-250(routine)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_geins\050m,)-525(irw,)-525(val,)-525(x,)-525(desc_a,)-525(info)-525([,local]\051)]TJ +/F147 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_geins\050m,)-525(irw,)-525(val,)-525(x,)-525(desc_a,)-525(info)-525([,local]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.57 Td [(T)90(ype:)]TJ 0 g 0 G @@ -19909,7 +19918,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.386 Td [(irw)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 120.368 560.616 Tm [(Indices)-354(of)-353(the)-354(r)18(ows)-354(to)-353(be)-354(inserted.)-629(Speci\002cally)109(,)-381(r)18(ow)]TJ/F78 9.9626 Tf 1 0 0 1 361.94 560.616 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 368.497 560.616 Tm [(of)]TJ/F78 9.9626 Tf 1 0 0 1 381.147 560.616 Tm [(v)-40(a)-25(l)]TJ/F84 9.9626 Tf 1.02 0 0 1 397.986 560.616 Tm [(will)-354(be)-353(in-)]TJ 1.02 0 0 1 124.802 548.661 Tm [(serted)-307(into)-307(the)-307(local)-308(r)18(ow)-307(corr)18(esponding)-308(to)-307(the)-307(global)-307(r)18(ow)-308(index)]TJ/F78 9.9626 Tf 1 0 0 1 416.713 548.661 Tm [(i)-22(r)-35(w)]TJ/F192 10.3811 Tf 14.654 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 442.809 548.661 Tm [(.)]TJ 1 0 0 1 124.802 536.706 Tm [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 120.368 560.616 Tm [(Indices)-354(of)-353(the)-354(r)18(ows)-354(to)-353(be)-354(inserted.)-629(Speci\002cally)109(,)-381(r)18(ow)]TJ/F78 9.9626 Tf 1 0 0 1 361.94 560.616 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 368.497 560.616 Tm [(of)]TJ/F78 9.9626 Tf 1 0 0 1 381.147 560.616 Tm [(v)-40(a)-25(l)]TJ/F84 9.9626 Tf 1.02 0 0 1 397.986 560.616 Tm [(will)-354(be)-353(in-)]TJ 1.02 0 0 1 124.802 548.661 Tm [(serted)-307(into)-307(the)-307(local)-308(r)18(ow)-307(corr)18(esponding)-308(to)-307(the)-307(global)-307(r)18(ow)-308(index)]TJ/F78 9.9626 Tf 1 0 0 1 416.713 548.661 Tm [(i)-22(r)-35(w)]TJ/F197 10.3811 Tf 14.654 0 Td [(\050)]TJ/F78 9.9626 Tf 4.205 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 442.809 548.661 Tm [(.)]TJ 1 0 0 1 124.802 536.706 Tm [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -19.386 Td [(val)]TJ 0 g 0 G @@ -19926,27 +19935,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 366.626 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 366.426 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 366.426 Td [(desc)]TJ ET q 1 0 0 1 333.945 366.626 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 366.426 Td [(type)]TJ +/F147 9.9626 Tf 337.084 366.426 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -19.386 Td [(local)]TJ 0 g 0 G -/F84 9.9626 Tf 1.004 0 0 1 125.957 347.04 Tm [(Whether)-248(the)-248(entries)-249(in)-248(the)-248(index)-248(vector)]TJ/F145 9.9626 Tf 1 0 0 1 300.374 347.04 Tm [(irw)]TJ/F84 9.9626 Tf 1.004 0 0 1 316.065 347.04 Tm [(,)-248(ar)18(e)-249(alr)18(eady)-248(in)-248(local)-248(number)18(-)]TJ 1 0 0 1 124.802 335.085 Tm [(ing.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(value;)-250(default:)]TJ/F145 9.9626 Tf 162.678 0 Td [(.false.)]TJ/F84 9.9626 Tf 36.612 0 Td [(.)]TJ +/F84 9.9626 Tf 1.004 0 0 1 125.957 347.04 Tm [(Whether)-248(the)-248(entries)-249(in)-248(the)-248(index)-248(vector)]TJ/F147 9.9626 Tf 1 0 0 1 300.374 347.04 Tm [(irw)]TJ/F84 9.9626 Tf 1.004 0 0 1 316.065 347.04 Tm [(,)-248(ar)18(e)-249(alr)18(eady)-248(in)-248(local)-248(number)18(-)]TJ 1 0 0 1 124.802 335.085 Tm [(ing.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(logical)-250(value;)-250(default:)]TJ/F147 9.9626 Tf 162.678 0 Td [(.false.)]TJ/F84 9.9626 Tf 36.612 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -224.197 -20.57 Td [(On)-250(Return)]TJ 0 g 0 G @@ -19955,28 +19964,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(output)-250(dense)-250(matrix.)]TJ 14.944 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ 0.98 0 0 1 124.802 211.443 Tm [(Speci\002ed)-237(as:)-308(a)-237(rank)-238(one)-237(or)-238(two)-237(array)-238(or)-237(an)-238(object)-237(of)-238(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 368.349 211.443 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 368.349 211.443 Tm [(psb)]TJ ET q 1 0 0 1 384.668 211.642 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.806 211.443 Td [(T)]TJ +/F147 9.9626 Tf 387.806 211.443 Td [(T)]TJ ET q 1 0 0 1 393.664 211.642 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 396.802 211.443 Td [(vect)]TJ +/F147 9.9626 Tf 396.802 211.443 Td [(vect)]TJ ET q 1 0 0 1 418.351 211.642 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.49 211.443 Td [(type)]TJ +/F147 9.9626 Tf 421.49 211.443 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 0.98 0 0 1 442.411 211.443 Tm [(,)]TJ 1 0 0 1 124.802 199.488 Tm [(of)-250(type)-250(r)18(eal,)-250(complex)-250(or)-250(integer)74(.)]TJ 0 g 0 G @@ -19990,7 +19999,7 @@ ET endstream endobj -1640 0 obj +1641 0 obj << /Length 578 >> @@ -20014,7 +20023,7 @@ ET endstream endobj -1649 0 obj +1650 0 obj << /Length 6324 >> @@ -20032,7 +20041,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(geasb)-250(\227)-250(Assembly)-250(a)-250(dense)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_geasb\050x,)-525(desc_a,)-525(info,)-525(mold\051)]TJ +/F147 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_geasb\050x,)-525(desc_a,)-525(info,)-525(mold\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20052,78 +20061,78 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(communication)-250(descriptor)74(.)]TJ -8.249 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(variable)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 136.327 0 Td [(psb)]TJ +/F147 9.9626 Tf 136.327 0 Td [(psb)]TJ ET q 1 0 0 1 277.448 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 280.586 577.576 Td [(desc)]TJ +/F147 9.9626 Tf 280.586 577.576 Td [(desc)]TJ ET q 1 0 0 1 302.135 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 305.273 577.576 Td [(type)]TJ +/F147 9.9626 Tf 305.273 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -226.3 -31.88 Td [(mold)]TJ 0 g 0 G -/F84 9.9626 Tf 28.473 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(vector)-250(storage.)]TJ -3.566 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.987 0 0 1 124.802 497.875 Tm [(Speci\002ed)-254(as:)-315(an)-254(object)-254(of)-254(a)-254(class)-254(derived)-254(fr)18(om)]TJ/F145 9.9626 Tf 1 0 0 1 323.94 497.875 Tm [(psb)]TJ +/F84 9.9626 Tf 28.473 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(vector)-250(storage.)]TJ -3.566 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.987 0 0 1 124.802 497.875 Tm [(Speci\002ed)-254(as:)-315(an)-254(object)-254(of)-254(a)-254(class)-254(derived)-254(fr)18(om)]TJ/F147 9.9626 Tf 1 0 0 1 323.94 497.875 Tm [(psb)]TJ ET q 1 0 0 1 340.259 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 343.397 497.875 Td [(T)]TJ +/F147 9.9626 Tf 343.397 497.875 Td [(T)]TJ ET q 1 0 0 1 349.255 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 352.393 497.875 Td [(base)]TJ +/F147 9.9626 Tf 352.393 497.875 Td [(base)]TJ ET q 1 0 0 1 373.942 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 377.08 497.875 Td [(vect)]TJ +/F147 9.9626 Tf 377.08 497.875 Td [(vect)]TJ ET q 1 0 0 1 398.629 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 401.767 497.875 Td [(type)]TJ/F84 9.9626 Tf 0.987 0 0 1 422.689 497.875 Tm [(;)-254(this)]TJ 1 0 0 1 124.802 485.92 Tm [(is)-250(only)-250(allowed)-250(when)]TJ/F78 9.9626 Tf 97.12 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(of)-250(type)]TJ +/F147 9.9626 Tf 401.767 497.875 Td [(type)]TJ/F84 9.9626 Tf 0.987 0 0 1 422.689 497.875 Tm [(;)-254(this)]TJ 1 0 0 1 124.802 485.92 Tm [(is)-250(only)-250(allowed)-250(when)]TJ/F78 9.9626 Tf 97.12 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 42.898 0 Td [(psb)]TJ +/F147 9.9626 Tf 42.898 0 Td [(psb)]TJ ET q 1 0 0 1 288.835 486.119 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 291.973 485.92 Td [(T)]TJ +/F147 9.9626 Tf 291.973 485.92 Td [(T)]TJ ET q 1 0 0 1 297.831 486.119 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 300.969 485.92 Td [(vect)]TJ +/F147 9.9626 Tf 300.969 485.92 Td [(vect)]TJ ET q 1 0 0 1 322.518 486.119 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 325.657 485.92 Td [(type)]TJ +/F147 9.9626 Tf 325.657 485.92 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -20134,28 +20143,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(dense)-250(matrix)-250(to)-250(be)-250(assembled.)]TJ 15.253 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ 0.98 0 0 1 124.802 396.256 Tm [(Speci\002ed)-220(as:)-299(a)-220(rank)-220(one)-220(or)-220(two)-221(array)-220(with)-220(the)-220(ALLOCA)76(T)75(ABLE)-220(or)-220(an)-220(object)]TJ 1 0 0 1 124.802 384.301 Tm [(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 33.285 0 Td [(psb)]TJ +/F147 9.9626 Tf 33.285 0 Td [(psb)]TJ ET q 1 0 0 1 174.405 384.5 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 177.544 384.301 Td [(T)]TJ +/F147 9.9626 Tf 177.544 384.301 Td [(T)]TJ ET q 1 0 0 1 183.402 384.5 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 186.54 384.301 Td [(vect)]TJ +/F147 9.9626 Tf 186.54 384.301 Td [(vect)]TJ ET q 1 0 0 1 208.089 384.5 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 211.227 384.301 Td [(type)]TJ +/F147 9.9626 Tf 211.227 384.301 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(,)-250(of)-250(type)-250(r)18(eal,)-250(complex)-250(or)-250(integer)74(.)]TJ 0 g 0 G @@ -20165,11 +20174,11 @@ BT 0 g 0 G /F84 9.9626 Tf 12.454 -19.925 Td [(1.)]TJ 0 g 0 G - 0.996 0 0 1 124.802 262.757 Tm [(On)-250(entry)-251(to)-250(this)-250(r)18(outine)-250(the)-250(descriptor)-251(must)-250(be)-250(in)-250(the)-251(assembled)-250(state,)-250(i.e.)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 250.801 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 49.564 0 Td [(must)-250(alr)18(eady)-250(have)-250(been)-250(called.)]TJ + 0.996 0 0 1 124.802 262.757 Tm [(On)-250(entry)-251(to)-250(this)-250(r)18(outine)-250(the)-250(descriptor)-251(must)-250(be)-250(in)-250(the)-251(assembled)-250(state,)-250(i.e.)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 250.801 Tm [(psb_cdasb)]TJ/F84 9.9626 Tf 49.564 0 Td [(must)-250(alr)18(eady)-250(have)-250(been)-250(called.)]TJ 0 g 0 G -62.017 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 124.802 230.876 Tm [(If)-380(the)]TJ/F145 9.9626 Tf 1 0 0 1 153.429 230.876 Tm [(bldmode=psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 293.28 230.876 Tm [(value)-380(was)-380(speci\002ed)-380(at)-380(allocation)]TJ 1.02 0 0 1 124.802 218.921 Tm [(time,)-380(contributions)-354(de\002ned)-353(on)-354(the)-353(curr)18(ent)-354(pr)18(ocess)-353(but)-354(belonging)-353(to)-354(a)]TJ 0.98 0 0 1 124.802 206.966 Tm [(r)18(emote)-252(pr)18(ocess)-253(will)-252(be)-253(handled)-252(accor)18(dingly)113(.)-315(This)-253(is)-253(most)-252(likely)-253(to)-253(occur)-252(in)]TJ 1 0 0 1 124.802 195.011 Tm [(\002nite)-250(element)-250(applications,)-250(with)]TJ/F145 9.9626 Tf 144.277 0 Td [(dupl=psb_dupl_add_)]TJ/F84 9.9626 Tf 94.146 0 Td [(.)]TJ + 1.02 0 0 1 124.802 230.876 Tm [(If)-380(the)]TJ/F147 9.9626 Tf 1 0 0 1 153.429 230.876 Tm [(bldmode=psb_matbld_remote_)]TJ/F84 9.9626 Tf 1.02 0 0 1 293.28 230.876 Tm [(value)-380(was)-380(speci\002ed)-380(at)-380(allocation)]TJ 1.02 0 0 1 124.802 218.921 Tm [(time,)-380(contributions)-354(de\002ned)-353(on)-354(the)-353(curr)18(ent)-354(pr)18(ocess)-353(but)-354(belonging)-353(to)-354(a)]TJ 0.98 0 0 1 124.802 206.966 Tm [(r)18(emote)-252(pr)18(ocess)-253(will)-252(be)-253(handled)-252(accor)18(dingly)113(.)-315(This)-253(is)-253(most)-252(likely)-253(to)-253(occur)-252(in)]TJ 1 0 0 1 124.802 195.011 Tm [(\002nite)-250(element)-250(applications,)-250(with)]TJ/F147 9.9626 Tf 144.277 0 Td [(dupl=psb_dupl_add_)]TJ/F84 9.9626 Tf 94.146 0 Td [(.)]TJ 0 g 0 G -96.455 -104.573 Td [(95)]TJ 0 g 0 G @@ -20177,7 +20186,7 @@ ET endstream endobj -1657 0 obj +1658 0 obj << /Length 3253 >> @@ -20195,7 +20204,7 @@ BT /F75 11.9552 Tf 207.803 706.129 Td [(gefree)-250(\227)-250(Frees)-250(a)-250(dense)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_gefree\050x,)-525(desc_a,)-525(info\051)]TJ +/F147 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_gefree\050x,)-525(desc_a,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20208,28 +20217,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(dense)-250(matrix)-250(to)-250(be)-250(fr)18(eed.)]TJ 15.252 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ 0.98 0 0 1 175.611 577.576 Tm [(Speci\002ed)-220(as:)-299(a)-220(rank)-220(one)-220(or)-220(two)-221(array)-220(with)-220(the)-220(ALLOCA)76(T)75(ABLE)-220(or)-220(an)-220(object)]TJ 1 0 0 1 175.611 565.621 Tm [(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 33.285 0 Td [(psb)]TJ +/F147 9.9626 Tf 33.285 0 Td [(psb)]TJ ET q 1 0 0 1 225.215 565.82 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 228.353 565.621 Td [(T)]TJ +/F147 9.9626 Tf 228.353 565.621 Td [(T)]TJ ET q 1 0 0 1 234.211 565.82 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 237.349 565.621 Td [(vect)]TJ +/F147 9.9626 Tf 237.349 565.621 Td [(vect)]TJ ET q 1 0 0 1 258.898 565.82 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 262.036 565.621 Td [(type)]TJ +/F147 9.9626 Tf 262.036 565.621 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(,)-250(of)-250(type)-250(r)18(eal,)-250(complex)-250(or)-250(integer)74(.)]TJ 0 g 0 G @@ -20244,21 +20253,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.653 0 Td [(The)-250(communication)-250(descriptor)74(.)]TJ -8.249 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(variable)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 136.328 0 Td [(psb)]TJ +/F147 9.9626 Tf 136.328 0 Td [(psb)]TJ ET q 1 0 0 1 328.257 486.119 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 331.395 485.92 Td [(desc)]TJ +/F147 9.9626 Tf 331.395 485.92 Td [(desc)]TJ ET q 1 0 0 1 352.944 486.119 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 356.083 485.92 Td [(type)]TJ +/F147 9.9626 Tf 356.083 485.92 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -20275,7 +20284,7 @@ ET endstream endobj -1661 0 obj +1662 0 obj << /Length 3208 >> @@ -20293,7 +20302,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(gelp)-250(\227)-250(Applies)-250(a)-250(left)-250(permutation)-250(to)-250(a)-250(dense)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_gelp\050trans,)-525(iperm,)-525(x,)-525(info\051)]TJ +/F147 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_gelp\050trans,)-525(iperm,)-525(x,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20327,9 +20336,9 @@ ET endstream endobj -1667 0 obj +1668 0 obj << -/Length 6625 +/Length 7021 >> stream 0 g 0 G @@ -20356,106 +20365,107 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 251.618 706.129 Td [(loc)-250(\227)-250(Global)-250(to)-250(local)-250(indices)-250(convertion)]TJ +/F75 11.9552 Tf 251.618 706.129 Td [(loc)-250(\227)-250(Global)-250(to)-250(local)-250(indices)-250(conversion)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -100.913 -18.964 Td [(call)-525(psb_glob_to_loc\050x,)-525(y,)-525(desc_a,)-525(info,)-525(iact,owned\051)]TJ 0 -11.955 Td [(call)-525(psb_glob_to_loc\050x,)-525(desc_a,)-525(info,)-525(iact,owned\051)]TJ +/F147 9.9626 Tf -100.913 -19.204 Td [(call)-525(psb_glob_to_loc\050x,)-525(y,)-525(desc_a,)-525(info,)-525(iact,owned\051)]TJ 0 -11.955 Td [(call)-525(psb_glob_to_loc\050x,)-525(desc_a,)-525(info,)-525(iact,owned\051)]TJ 0 g 0 G -/F75 9.9626 Tf 0 -21.109 Td [(T)90(ype:)]TJ +/F75 9.9626 Tf 0 -22.29 Td [(T)90(ype:)]TJ 0 g 0 G /F84 9.9626 Tf 29.439 0 Td [(Asynchr)18(onous.)]TJ 0 g 0 G -/F75 9.9626 Tf -29.439 -19.602 Td [(On)-250(Entry)]TJ +/F75 9.9626 Tf -29.439 -20.42 Td [(On)-250(Entry)]TJ 0 g 0 G 0 g 0 G - 0 -19.601 Td [(x)]TJ + 0 -20.421 Td [(x)]TJ 0 g 0 G -/F84 9.9626 Tf 9.574 0 Td [(An)-250(integer)-250(vector)-250(of)-250(indices)-250(to)-250(be)-250(converted.)]TJ 15.332 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in,)-250(inout)]TJ/F84 9.9626 Tf 38.734 0 Td [(.)]TJ -70.535 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 9.574 0 Td [(An)-250(integer)-250(vector)-250(of)-250(indices)-250(to)-250(be)-250(converted.)]TJ 15.332 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in,)-250(inout)]TJ/F84 9.9626 Tf 38.734 0 Td [(.)]TJ -70.535 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)-250(of)-250(global)-250(indices,)-250(i.e.)]TJ/F147 9.9626 Tf 258.339 0 Td [(psb_lpk_)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -31.557 Td [(desc)]TJ +/F75 9.9626 Tf -325.088 -32.375 Td [(desc)]TJ ET q -1 0 0 1 171.218 535.72 cm +1 0 0 1 171.218 531.842 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F75 9.9626 Tf 174.207 535.52 Td [(a)]TJ +/F75 9.9626 Tf 174.207 531.643 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ +/F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q -1 0 0 1 360.068 487.899 cm +1 0 0 1 360.068 484.021 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 487.7 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 483.822 Td [(desc)]TJ ET q -1 0 0 1 384.755 487.899 cm +1 0 0 1 384.755 484.021 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 487.7 Td [(type)]TJ +/F147 9.9626 Tf 387.893 483.822 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -258.11 -19.602 Td [(iact)]TJ +/F75 9.9626 Tf -258.11 -20.421 Td [(iact)]TJ 0 g 0 G -/F84 9.9626 Tf 21.021 0 Td [(speci\002es)-250(action)-250(to)-250(be)-250(taken)-250(in)-250(case)-250(of)-250(range)-250(err)18(ors.)-310(Scope:)]TJ/F75 9.9626 Tf 253.795 0 Td [(global)]TJ/F84 9.9626 Tf -250.218 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.983 0 0 1 175.611 432.232 Tm [(Speci\002ed)-254(as:)-316(a)-254(character)-254(variable)]TJ/F145 9.9626 Tf 1 0 0 1 319.381 432.232 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 324.612 432.232 Tm [(gnor)18(e,)]TJ/F145 9.9626 Tf 1 0 0 1 354.422 432.232 Tm [(W)]TJ/F84 9.9626 Tf 0.983 0 0 1 359.653 432.232 Tm [(arning)-254(or)]TJ/F145 9.9626 Tf 1 0 0 1 402.308 432.232 Tm [(A)]TJ/F84 9.9626 Tf 0.983 0 0 1 407.539 432.232 Tm [(bort,)-254(default)]TJ/F145 9.9626 Tf 1 0 0 1 463.572 432.232 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 468.802 432.232 Tm [(gnor)18(e.)]TJ +/F84 9.9626 Tf 21.021 0 Td [(speci\002es)-250(action)-250(to)-250(be)-250(taken)-250(in)-250(case)-250(of)-250(range)-250(err)18(ors.)-310(Scope:)]TJ/F75 9.9626 Tf 253.795 0 Td [(global)]TJ/F84 9.9626 Tf -250.218 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.983 0 0 1 175.611 427.536 Tm [(Speci\002ed)-254(as:)-316(a)-254(character)-254(variable)]TJ/F147 9.9626 Tf 1 0 0 1 319.381 427.536 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 324.612 427.536 Tm [(gnor)18(e,)]TJ/F147 9.9626 Tf 1 0 0 1 354.422 427.536 Tm [(W)]TJ/F84 9.9626 Tf 0.983 0 0 1 359.653 427.536 Tm [(arning)-254(or)]TJ/F147 9.9626 Tf 1 0 0 1 402.308 427.536 Tm [(A)]TJ/F84 9.9626 Tf 0.983 0 0 1 407.539 427.536 Tm [(bort,)-254(default)]TJ/F147 9.9626 Tf 1 0 0 1 463.572 427.536 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 468.802 427.536 Tm [(gnor)18(e.)]TJ 0 g 0 G -/F75 9.9626 Tf 1 0 0 1 150.705 412.631 Tm [(owned)]TJ +/F75 9.9626 Tf 1 0 0 1 150.705 407.115 Tm [(owned)]TJ 0 g 0 G -/F84 9.9626 Tf 35.975 0 Td [(Spec\002es)-250(valid)-250(range)-250(of)-250(input)-250(Scope:)]TJ/F75 9.9626 Tf 159.54 0 Td [(global)]TJ/F84 9.9626 Tf -170.917 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.99 0 0 1 175.611 376.765 Tm [(If)-252(tr)8(ue,)-252(then)-252(on)1(ly)-252(indices)-252(strictly)-252(owned)-252(by)-251(the)-252(curr)18(ent)-252(pr)18(ocess)-251(ar)18(e)-252(consid-)]TJ 1 0 0 1 175.611 364.81 Tm [(er)18(ed)-250(valid,)-250(if)-250(false)-250(then)-250(halo)-250(indices)-250(ar)18(e)-250(also)-250(accepted.)-310(Default:)-310(false.)]TJ +/F84 9.9626 Tf 35.975 0 Td [(Spec\002es)-250(valid)-250(range)-250(of)-250(input)-250(Scope:)]TJ/F75 9.9626 Tf 159.54 0 Td [(global)]TJ/F84 9.9626 Tf -170.917 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.99 0 0 1 175.611 371.249 Tm [(If)-252(tr)8(ue,)-252(then)-252(on)1(ly)-252(indices)-252(strictly)-252(owned)-252(by)-251(the)-252(curr)18(ent)-252(pr)18(ocess)-251(ar)18(e)-252(consid-)]TJ 1 0 0 1 175.611 359.294 Tm [(er)18(ed)-250(valid,)-250(if)-250(false)-250(then)-250(halo)-250(indices)-250(ar)18(e)-250(also)-250(accepted.)-310(Default:)-310(false.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -21.109 Td [(On)-250(Return)]TJ +/F75 9.9626 Tf -24.906 -22.289 Td [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G - 0 -19.601 Td [(x)]TJ + 0 -20.421 Td [(x)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 160.667 324.1 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 170.229 324.1 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 177.963 324.1 Tm [(is)-259(not)-258(pr)17(esent,)-262(then)]TJ/F78 9.9626 Tf 1 0 0 1 266.607 324.1 Tm [(x)]TJ/F84 9.9626 Tf 1.02 0 0 1 274.441 324.1 Tm [(is)-259(overwritten)-258(with)-259(the)-258(translated)-259(integer)-259(indices.)]TJ 1 0 0 1 175.611 312.145 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 160.667 316.584 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 170.229 316.584 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 177.963 316.584 Tm [(is)-259(not)-258(pr)17(esent,)-262(then)]TJ/F78 9.9626 Tf 1 0 0 1 266.607 316.584 Tm [(x)]TJ/F84 9.9626 Tf 1.02 0 0 1 274.441 316.584 Tm [(is)-259(overwritten)-258(with)-259(the)-258(translated)-259(integer)-259(indices.)]TJ 1 0 0 1 175.611 304.629 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -19.602 Td [(y)]TJ +/F75 9.9626 Tf -24.906 -20.421 Td [(y)]TJ 0 g 0 G -/F84 9.9626 Tf 0.983 0 0 1 161.225 256.677 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 170.403 256.677 Tm [(y)]TJ/F84 9.9626 Tf 0.983 0 0 1 178 256.677 Tm [(is)-254(pr)18(esent,)-254(then)]TJ/F78 9.9626 Tf 1 0 0 1 246.332 256.677 Tm [(y)]TJ/F84 9.9626 Tf 0.983 0 0 1 253.929 256.677 Tm [(is)-254(overwritten)-255(with)-254(the)-254(translated)-255(integer)-254(indices,)-255(and)]TJ/F78 9.9626 Tf 1 0 0 1 489.211 256.677 Tm [(x)]TJ/F84 9.9626 Tf -313.6 -11.955 Td [(is)-250(left)-250(unchanged.)-310(Scope:)]TJ/F75 9.9626 Tf 112.557 0 Td [(global)]TJ/F84 9.9626 Tf -112.865 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.745 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 1.011 0 0 1 161.225 248.343 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 170.585 248.343 Tm [(y)]TJ/F84 9.9626 Tf 1.011 0 0 1 178.178 248.343 Tm [(is)-247(pr)18(esent,)-247(then)]TJ/F78 9.9626 Tf 1 0 0 1 248.232 248.343 Tm [(y)]TJ/F84 9.9626 Tf 1.011 0 0 1 255.825 248.343 Tm [(is)-247(overwritten)-247(with)-247(the)-246(translated)-247(integer)-247(indices,)-247(and)]TJ/F78 9.9626 Tf 1 0 0 1 175.905 236.388 Tm [(x)]TJ/F84 9.9626 Tf 1.001 0 0 1 183.603 236.388 Tm [(is)-250(left)-250(unchanged;)-250(since)]TJ/F78 9.9626 Tf 1 0 0 1 288.967 236.388 Tm [(y)]TJ/F84 9.9626 Tf 1.001 0 0 1 296.565 236.388 Tm [(contains)-250(local)-250(indices)-250(it)-250(should)-250(use)]TJ/F147 9.9626 Tf 1 0 0 1 451.824 236.388 Tm [(psb_ipk_)]TJ/F84 9.9626 Tf 1.001 0 0 1 493.666 236.388 Tm [(.)]TJ 1 0 0 1 175.611 224.433 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.745 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.906 -19.602 Td [(info)]TJ +/F75 9.9626 Tf -24.906 -20.421 Td [(info)]TJ 0 g 0 G -/F84 9.9626 Tf 23.8 0 Td [(Err)18(or)-250(code.)]TJ 1.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -47.133 -11.956 Td [(An)-250(integer)-250(value;)-250(0)-250(means)-250(no)-250(err)18(or)-250(has)-250(been)-250(detected.)]TJ/F75 11.9552 Tf -24.518 -21.108 Td [(Notes)]TJ +/F84 9.9626 Tf 23.8 0 Td [(Err)18(or)-250(code.)]TJ 1.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -47.133 -11.955 Td [(An)-250(integer)-250(value;)-250(0)-250(means)-250(no)-250(err)18(or)-250(has)-250(been)-250(detected.)]TJ 0 g 0 G -/F84 9.9626 Tf 166.874 -29.888 Td [(98)]TJ + 142.356 -29.888 Td [(98)]TJ 0 g 0 G ET endstream endobj -1671 0 obj +1672 0 obj << -/Length 775 +/Length 819 >> stream 0 g 0 G 0 g 0 G -0 g 0 G BT -/F84 9.9626 Tf 112.349 706.129 Td [(1.)]TJ +/F75 11.9552 Tf 99.895 706.129 Td [(Notes)]TJ 0 g 0 G - 1.01 0 0 1 124.802 706.129 Tm [(If)-248(an)-249(input)-248(index)-249(is)-248(out)-248(of)-249(range,)-248(then)-249(the)-248(corr)18(esponding)-249(output)-248(index)-248(is)]TJ 1 0 0 1 124.802 694.174 Tm [(set)-250(to)-250(a)-250(negative)-250(number;)]TJ +/F84 9.9626 Tf 12.454 -19.925 Td [(1.)]TJ 0 g 0 G - -12.453 -19.926 Td [(2.)]TJ + 1.01 0 0 1 124.802 686.204 Tm [(If)-248(an)-249(input)-248(index)-249(is)-248(out)-248(of)-249(range,)-248(then)-249(the)-248(corr)18(esponding)-249(output)-248(index)-248(is)]TJ 1 0 0 1 124.802 674.248 Tm [(set)-250(to)-250(a)-250(negative)-250(number;)]TJ 0 g 0 G - 0.98 0 0 1 124.493 674.248 Tm [(The)-234(default)]TJ/F145 9.9626 Tf 1 0 0 1 176.098 674.248 Tm [(I)]TJ/F84 9.9626 Tf 0.98 0 0 1 181.328 674.248 Tm [(gnor)18(e)-234(means)-234(that)-235(the)-234(negative)-234(output)-234(is)-235(the)-234(only)-234(action)-235(taken)]TJ 1 0 0 1 124.802 662.293 Tm [(on)-250(an)-250(out-of-range)-250(input.)]TJ + -12.453 -19.925 Td [(2.)]TJ +0 g 0 G + 0.98 0 0 1 124.493 654.323 Tm [(The)-234(default)]TJ/F147 9.9626 Tf 1 0 0 1 176.098 654.323 Tm [(I)]TJ/F84 9.9626 Tf 0.98 0 0 1 181.328 654.323 Tm [(gnor)18(e)-234(means)-234(that)-235(the)-234(negative)-234(output)-234(is)-235(the)-234(only)-234(action)-235(taken)]TJ 1 0 0 1 124.802 642.368 Tm [(on)-250(an)-250(out-of-range)-250(input.)]TJ 0 g 0 G - 141.968 -571.855 Td [(99)]TJ + 141.968 -551.93 Td [(99)]TJ 0 g 0 G ET endstream endobj -1678 0 obj +1679 0 obj << -/Length 5816 +/Length 6270 >> stream 0 g 0 G @@ -20485,7 +20495,7 @@ BT /F75 11.9552 Tf 242.974 706.129 Td [(glob)-250(\227)-250(Local)-250(to)-250(global)-250(indices)-250(conversion)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -92.269 -18.964 Td [(call)-525(psb_loc_to_glob\050x,)-525(y,)-525(desc_a,)-525(info,)-525(iact\051)]TJ 0 -11.955 Td [(call)-525(psb_loc_to_glob\050x,)-525(desc_a,)-525(info,)-525(iact\051)]TJ +/F147 9.9626 Tf -92.269 -18.964 Td [(call)-525(psb_loc_to_glob\050x,)-525(y,)-525(desc_a,)-525(info,)-525(iact\051)]TJ 0 -11.955 Td [(call)-525(psb_loc_to_glob\050x,)-525(desc_a,)-525(info,)-525(iact\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20496,63 +20506,63 @@ BT 0 g 0 G 0 -19.925 Td [(x)]TJ 0 g 0 G -/F84 9.9626 Tf 9.574 0 Td [(An)-250(integer)-250(vector)-250(of)-250(indices)-250(to)-250(be)-250(converted.)]TJ 15.332 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in,)-250(inout)]TJ/F84 9.9626 Tf 38.734 0 Td [(.)]TJ -70.535 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 160.279 613.442 Tm [(An)-306(integer)-306(vector)-307(of)-306(indices)-306(to)-306(be)-307(converted;)-336(if)]TJ/F78 9.9626 Tf 1 0 0 1 375.994 613.442 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 384.212 613.442 Tm [(is)-306(pr)17(esent,)-321(they)-306(ar)17(e)-306(local)]TJ 1 0 0 1 175.611 601.486 Tm [(indices,)-250(i.e.)]TJ/F147 9.9626 Tf 51.825 0 Td [(psb_ipk_)]TJ/F84 9.9626 Tf -51.825 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in,)-250(inout)]TJ/F84 9.9626 Tf 38.734 0 Td [(.)]TJ -70.535 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -31.881 Td [(desc)]TJ ET q -1 0 0 1 171.218 533.94 cm +1 0 0 1 171.218 521.985 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F75 9.9626 Tf 174.207 533.74 Td [(a)]TJ +/F75 9.9626 Tf 174.207 521.785 Td [(a)]TJ 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q -1 0 0 1 360.068 486.119 cm +1 0 0 1 360.068 474.164 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 485.92 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 473.965 Td [(desc)]TJ ET q -1 0 0 1 384.755 486.119 cm +1 0 0 1 384.755 474.164 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 485.92 Td [(type)]TJ +/F147 9.9626 Tf 387.893 473.965 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -19.926 Td [(iact)]TJ 0 g 0 G -/F84 9.9626 Tf 21.021 0 Td [(speci\002es)-250(action)-250(to)-250(be)-250(taken)-250(in)-250(case)-250(of)-250(range)-250(err)18(ors.)-310(Scope:)]TJ/F75 9.9626 Tf 253.795 0 Td [(global)]TJ/F84 9.9626 Tf -250.218 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.983 0 0 1 175.611 430.129 Tm [(Speci\002ed)-254(as:)-316(a)-254(character)-254(variable)]TJ/F145 9.9626 Tf 1 0 0 1 319.381 430.129 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 324.612 430.129 Tm [(gnor)18(e,)]TJ/F145 9.9626 Tf 1 0 0 1 354.422 430.129 Tm [(W)]TJ/F84 9.9626 Tf 0.983 0 0 1 359.653 430.129 Tm [(arning)-254(or)]TJ/F145 9.9626 Tf 1 0 0 1 402.308 430.129 Tm [(A)]TJ/F84 9.9626 Tf 0.983 0 0 1 407.539 430.129 Tm [(bort,)-254(default)]TJ/F145 9.9626 Tf 1 0 0 1 463.572 430.129 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 468.802 430.129 Tm [(gnor)18(e.)]TJ +/F84 9.9626 Tf 21.021 0 Td [(speci\002es)-250(action)-250(to)-250(be)-250(taken)-250(in)-250(case)-250(of)-250(range)-250(err)18(ors.)-310(Scope:)]TJ/F75 9.9626 Tf 253.795 0 Td [(global)]TJ/F84 9.9626 Tf -250.218 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.983 0 0 1 175.611 418.174 Tm [(Speci\002ed)-254(as:)-316(a)-254(character)-254(variable)]TJ/F147 9.9626 Tf 1 0 0 1 319.381 418.174 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 324.612 418.174 Tm [(gnor)18(e,)]TJ/F147 9.9626 Tf 1 0 0 1 354.422 418.174 Tm [(W)]TJ/F84 9.9626 Tf 0.983 0 0 1 359.653 418.174 Tm [(arning)-254(or)]TJ/F147 9.9626 Tf 1 0 0 1 402.308 418.174 Tm [(A)]TJ/F84 9.9626 Tf 0.983 0 0 1 407.539 418.174 Tm [(bort,)-254(default)]TJ/F147 9.9626 Tf 1 0 0 1 463.572 418.174 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 468.802 418.174 Tm [(gnor)18(e.)]TJ 0 g 0 G -/F75 9.9626 Tf 1 0 0 1 150.705 408.211 Tm [(On)-250(Return)]TJ +/F75 9.9626 Tf 1 0 0 1 150.705 396.256 Tm [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G 0 -19.925 Td [(x)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 160.667 388.286 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 170.229 388.286 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 177.963 388.286 Tm [(is)-259(not)-258(pr)17(esent,)-262(then)]TJ/F78 9.9626 Tf 1 0 0 1 266.607 388.286 Tm [(x)]TJ/F84 9.9626 Tf 1.02 0 0 1 274.441 388.286 Tm [(is)-259(overwritten)-258(with)-259(the)-258(translated)-259(integer)-259(indices.)]TJ 1 0 0 1 175.611 376.331 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 160.667 376.331 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 170.584 376.331 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 178.674 376.331 Tm [(is)-294(not)-293(pr)17(esent,)-305(then)]TJ/F78 9.9626 Tf 1 0 0 1 268.828 376.331 Tm [(x)]TJ/F84 9.9626 Tf 1.02 0 0 1 277.018 376.331 Tm [(is)-294(overwritten)-293(with)-294(the)-293(translated)-294(integer)-294(global)]TJ 1 0 0 1 175.611 364.376 Tm [(indices,)-250(i.e.)]TJ/F147 9.9626 Tf 51.825 0 Td [(psb_lpk_)]TJ/F84 9.9626 Tf 44.334 0 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -127.899 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -19.925 Td [(y)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 161.225 320.54 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 170.727 320.54 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 178.402 320.54 Tm [(is)-253(not)-253(pr)18(esent,)-255(then)]TJ/F78 9.9626 Tf 1 0 0 1 266.624 320.54 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 274.299 320.54 Tm [(is)-253(overwritten)-253(with)-252(the)-253(translated)-253(integer)-253(indices,)]TJ 1 0 0 1 175.611 308.585 Tm [(and)]TJ/F78 9.9626 Tf 19.652 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(left)-250(unchanged.)-310(Scope:)]TJ/F75 9.9626 Tf 112.556 0 Td [(global)]TJ/F84 9.9626 Tf -140.212 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.744 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 161.225 308.585 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 170.816 308.585 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 178.579 308.585 Tm [(not)-261(pr)17(esent,)-265(then)]TJ/F78 9.9626 Tf 1 0 0 1 257.253 308.585 Tm [(y)]TJ/F84 9.9626 Tf 1.02 0 0 1 265.016 308.585 Tm [(is)-261(overwritten)-262(with)-261(the)-262(translated)-261(global)-262(indices)-261(i.e.)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 296.63 Tm [(psb_lpk_)]TJ/F84 9.9626 Tf 41.843 0 Td [(,)-250(and)]TJ/F78 9.9626 Tf 24.633 0 Td [(x)]TJ/F84 9.9626 Tf 7.696 0 Td [(is)-250(left)-250(unchanged.)-310(Scope:)]TJ/F75 9.9626 Tf 112.556 0 Td [(global)]TJ/F84 9.9626 Tf -187.036 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.745 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(integer)-250(array)111(.)]TJ 0 g 0 G -/F75 9.9626 Tf -24.907 -19.925 Td [(info)]TJ +/F75 9.9626 Tf -24.906 -19.925 Td [(info)]TJ 0 g 0 G -/F84 9.9626 Tf 23.8 0 Td [(Err)18(or)-250(code.)]TJ 1.107 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -47.133 -11.955 Td [(An)-250(integer)-250(value;)-250(0)-250(means)-250(no)-250(err)18(or)-250(has)-250(been)-250(detected.)]TJ +/F84 9.9626 Tf 23.8 0 Td [(Err)18(or)-250(code.)]TJ 1.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -47.133 -11.955 Td [(An)-250(integer)-250(value;)-250(0)-250(means)-250(no)-250(err)18(or)-250(has)-250(been)-250(detected.)]TJ 0 g 0 G - 139.865 -114.535 Td [(100)]TJ + 139.865 -102.58 Td [(100)]TJ 0 g 0 G ET endstream endobj -1683 0 obj +1684 0 obj << /Length 3295 >> @@ -20577,7 +20587,7 @@ BT /F75 11.9552 Tf 170.586 706.129 Td [(owned)-250(\227)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -70.691 -18.964 Td [(call)-525(psb_is_owned\050x,)-525(desc_a\051)]TJ +/F147 9.9626 Tf -70.691 -18.964 Td [(call)-525(psb_is_owned\050x,)-525(desc_a\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20601,21 +20611,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 497.875 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 497.875 Td [(desc)]TJ ET q 1 0 0 1 333.945 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 497.875 Td [(type)]TJ +/F147 9.9626 Tf 337.084 497.875 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -20628,7 +20638,7 @@ BT 0 g 0 G /F84 9.9626 Tf 12.454 -19.925 Td [(1.)]TJ 0 g 0 G - 0.997 0 0 1 124.493 366.368 Tm [(This)-252(r)18(outine)-251(r)18(eturns)-252(a)]TJ/F145 9.9626 Tf 1 0 0 1 221.898 366.368 Tm [(.true.)]TJ/F84 9.9626 Tf 0.997 0 0 1 255.779 366.368 Tm [(value)-252(for)-251(an)-252(index)-252(that)-251(is)-252(strictly)-251(owned)-252(by)]TJ 1 0 0 1 124.802 354.413 Tm [(the)-250(curr)18(ent)-250(pr)18(ocess,)-250(excluding)-250(the)-250(halo)-250(indices)]TJ + 0.997 0 0 1 124.493 366.368 Tm [(This)-252(r)18(outine)-251(r)18(eturns)-252(a)]TJ/F147 9.9626 Tf 1 0 0 1 221.898 366.368 Tm [(.true.)]TJ/F84 9.9626 Tf 0.997 0 0 1 255.779 366.368 Tm [(value)-252(for)-251(an)-252(index)-252(that)-251(is)-252(strictly)-251(owned)-252(by)]TJ 1 0 0 1 124.802 354.413 Tm [(the)-250(curr)18(ent)-250(pr)18(ocess,)-250(excluding)-250(the)-250(halo)-250(indices)]TJ 0 g 0 G 139.477 -263.975 Td [(101)]TJ 0 g 0 G @@ -20636,7 +20646,7 @@ ET endstream endobj -1689 0 obj +1690 0 obj << /Length 5095 >> @@ -20661,7 +20671,7 @@ BT /F75 11.9552 Tf 249.299 706.129 Td [(index)-250(\227)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -98.594 -18.964 Td [(call)-525(psb_owned_index\050y,)-525(x,)-525(desc_a,)-525(info\051)]TJ +/F147 9.9626 Tf -98.594 -18.964 Td [(call)-525(psb_owned_index\050y,)-525(x,)-525(desc_a,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20685,27 +20695,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 497.875 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 497.875 Td [(desc)]TJ ET q 1 0 0 1 384.755 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 497.875 Td [(type)]TJ +/F147 9.9626 Tf 387.893 497.875 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -19.925 Td [(iact)]TJ 0 g 0 G -/F84 9.9626 Tf 21.021 0 Td [(speci\002es)-250(action)-250(to)-250(be)-250(taken)-250(in)-250(case)-250(of)-250(range)-250(err)18(ors.)-310(Scope:)]TJ/F75 9.9626 Tf 253.795 0 Td [(global)]TJ/F84 9.9626 Tf -250.218 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.983 0 0 1 175.611 442.084 Tm [(Speci\002ed)-254(as:)-316(a)-254(character)-254(variable)]TJ/F145 9.9626 Tf 1 0 0 1 319.381 442.084 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 324.612 442.084 Tm [(gnor)18(e,)]TJ/F145 9.9626 Tf 1 0 0 1 354.422 442.084 Tm [(W)]TJ/F84 9.9626 Tf 0.983 0 0 1 359.653 442.084 Tm [(arning)-254(or)]TJ/F145 9.9626 Tf 1 0 0 1 402.308 442.084 Tm [(A)]TJ/F84 9.9626 Tf 0.983 0 0 1 407.539 442.084 Tm [(bort,)-254(default)]TJ/F145 9.9626 Tf 1 0 0 1 463.572 442.084 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 468.802 442.084 Tm [(gnor)18(e.)]TJ +/F84 9.9626 Tf 21.021 0 Td [(speci\002es)-250(action)-250(to)-250(be)-250(taken)-250(in)-250(case)-250(of)-250(range)-250(err)18(ors.)-310(Scope:)]TJ/F75 9.9626 Tf 253.795 0 Td [(global)]TJ/F84 9.9626 Tf -250.218 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.983 0 0 1 175.611 442.084 Tm [(Speci\002ed)-254(as:)-316(a)-254(character)-254(variable)]TJ/F147 9.9626 Tf 1 0 0 1 319.381 442.084 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 324.612 442.084 Tm [(gnor)18(e,)]TJ/F147 9.9626 Tf 1 0 0 1 354.422 442.084 Tm [(W)]TJ/F84 9.9626 Tf 0.983 0 0 1 359.653 442.084 Tm [(arning)-254(or)]TJ/F147 9.9626 Tf 1 0 0 1 402.308 442.084 Tm [(A)]TJ/F84 9.9626 Tf 0.983 0 0 1 407.539 442.084 Tm [(bort,)-254(default)]TJ/F147 9.9626 Tf 1 0 0 1 463.572 442.084 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 468.802 442.084 Tm [(gnor)18(e.)]TJ 0 g 0 G /F75 9.9626 Tf 1 0 0 1 150.705 420.166 Tm [(On)-250(Return)]TJ 0 g 0 G @@ -20720,7 +20730,7 @@ BT 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 242.831 Tm [(This)-383(r)17(outine)-383(r)17(eturns)-383(a)]TJ/F145 9.9626 Tf 1 0 0 1 280.321 242.831 Tm [(.true.)]TJ/F84 9.9626 Tf 1.02 0 0 1 315.6 242.831 Tm [(value)-383(for)-384(those)-383(indices)-384(that)-383(ar)17(e)-383(strictly)]TJ 1 0 0 1 175.611 230.876 Tm [(owned)-250(by)-250(the)-250(curr)18(ent)-250(pr)18(ocess,)-250(excluding)-250(the)-250(halo)-250(indices)]TJ + 1.02 0 0 1 175.303 242.831 Tm [(This)-383(r)17(outine)-383(r)17(eturns)-383(a)]TJ/F147 9.9626 Tf 1 0 0 1 280.321 242.831 Tm [(.true.)]TJ/F84 9.9626 Tf 1.02 0 0 1 315.6 242.831 Tm [(value)-383(for)-384(those)-383(indices)-384(that)-383(ar)17(e)-383(strictly)]TJ 1 0 0 1 175.611 230.876 Tm [(owned)-250(by)-250(the)-250(curr)18(ent)-250(pr)18(ocess,)-250(excluding)-250(the)-250(halo)-250(indices)]TJ 0 g 0 G 139.477 -140.438 Td [(102)]TJ 0 g 0 G @@ -20728,7 +20738,7 @@ ET endstream endobj -1695 0 obj +1696 0 obj << /Length 3275 >> @@ -20753,7 +20763,7 @@ BT /F75 11.9552 Tf 170.586 706.129 Td [(local)-250(\227)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -70.691 -18.964 Td [(call)-525(psb_is_local\050x,)-525(desc_a\051)]TJ +/F147 9.9626 Tf -70.691 -18.964 Td [(call)-525(psb_is_local\050x,)-525(desc_a\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20777,21 +20787,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 497.875 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 497.875 Td [(desc)]TJ ET q 1 0 0 1 333.945 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 497.875 Td [(type)]TJ +/F147 9.9626 Tf 337.084 497.875 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -20804,7 +20814,7 @@ BT 0 g 0 G /F84 9.9626 Tf 12.454 -19.925 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 124.493 366.368 Tm [(This)-244(r)19(outine)-244(r)18(eturns)-244(a)]TJ/F145 9.9626 Tf 1 0 0 1 219.923 366.368 Tm [(.true.)]TJ/F84 9.9626 Tf 0.98 0 0 1 253.685 366.368 Tm [(value)-244(for)-244(an)-243(index)-244(that)-244(is)-244(local)-243(to)-244(the)-244(curr)18(e)1(nt)]TJ 1 0 0 1 124.503 354.413 Tm [(pr)18(ocess,)-250(including)-250(the)-250(halo)-250(indices)]TJ + 0.98 0 0 1 124.493 366.368 Tm [(This)-244(r)19(outine)-244(r)18(eturns)-244(a)]TJ/F147 9.9626 Tf 1 0 0 1 219.923 366.368 Tm [(.true.)]TJ/F84 9.9626 Tf 0.98 0 0 1 253.685 366.368 Tm [(value)-244(for)-244(an)-243(index)-244(that)-244(is)-244(local)-243(to)-244(the)-244(curr)18(e)1(nt)]TJ 1 0 0 1 124.503 354.413 Tm [(pr)18(ocess,)-250(including)-250(the)-250(halo)-250(indices)]TJ 0 g 0 G 139.776 -263.975 Td [(103)]TJ 0 g 0 G @@ -20812,7 +20822,7 @@ ET endstream endobj -1702 0 obj +1703 0 obj << /Length 5087 >> @@ -20837,7 +20847,7 @@ BT /F75 11.9552 Tf 238.001 706.129 Td [(index)-250(\227)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -87.296 -18.964 Td [(call)-525(psb_local_index\050y,)-525(x,)-525(desc_a,)-525(info\051)]TJ +/F147 9.9626 Tf -87.296 -18.964 Td [(call)-525(psb_local_index\050y,)-525(x,)-525(desc_a,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20861,27 +20871,27 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 497.875 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 497.875 Td [(desc)]TJ ET q 1 0 0 1 384.755 498.074 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 497.875 Td [(type)]TJ +/F147 9.9626 Tf 387.893 497.875 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -19.925 Td [(iact)]TJ 0 g 0 G -/F84 9.9626 Tf 21.021 0 Td [(speci\002es)-250(action)-250(to)-250(be)-250(taken)-250(in)-250(case)-250(of)-250(range)-250(err)18(ors.)-310(Scope:)]TJ/F75 9.9626 Tf 253.795 0 Td [(global)]TJ/F84 9.9626 Tf -250.218 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.983 0 0 1 175.611 442.084 Tm [(Speci\002ed)-254(as:)-316(a)-254(character)-254(variable)]TJ/F145 9.9626 Tf 1 0 0 1 319.381 442.084 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 324.612 442.084 Tm [(gnor)18(e,)]TJ/F145 9.9626 Tf 1 0 0 1 354.422 442.084 Tm [(W)]TJ/F84 9.9626 Tf 0.983 0 0 1 359.653 442.084 Tm [(arning)-254(or)]TJ/F145 9.9626 Tf 1 0 0 1 402.308 442.084 Tm [(A)]TJ/F84 9.9626 Tf 0.983 0 0 1 407.539 442.084 Tm [(bort,)-254(default)]TJ/F145 9.9626 Tf 1 0 0 1 463.572 442.084 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 468.802 442.084 Tm [(gnor)18(e.)]TJ +/F84 9.9626 Tf 21.021 0 Td [(speci\002es)-250(action)-250(to)-250(be)-250(taken)-250(in)-250(case)-250(of)-250(range)-250(err)18(ors.)-310(Scope:)]TJ/F75 9.9626 Tf 253.795 0 Td [(global)]TJ/F84 9.9626 Tf -250.218 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.983 0 0 1 175.611 442.084 Tm [(Speci\002ed)-254(as:)-316(a)-254(character)-254(variable)]TJ/F147 9.9626 Tf 1 0 0 1 319.381 442.084 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 324.612 442.084 Tm [(gnor)18(e,)]TJ/F147 9.9626 Tf 1 0 0 1 354.422 442.084 Tm [(W)]TJ/F84 9.9626 Tf 0.983 0 0 1 359.653 442.084 Tm [(arning)-254(or)]TJ/F147 9.9626 Tf 1 0 0 1 402.308 442.084 Tm [(A)]TJ/F84 9.9626 Tf 0.983 0 0 1 407.539 442.084 Tm [(bort,)-254(default)]TJ/F147 9.9626 Tf 1 0 0 1 463.572 442.084 Tm [(I)]TJ/F84 9.9626 Tf 0.983 0 0 1 468.802 442.084 Tm [(gnor)18(e.)]TJ 0 g 0 G /F75 9.9626 Tf 1 0 0 1 150.705 420.166 Tm [(On)-250(Return)]TJ 0 g 0 G @@ -20896,7 +20906,7 @@ BT 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G - 1.009 0 0 1 175.303 242.831 Tm [(This)-247(r)18(outine)-247(r)18(eturns)-247(a)]TJ/F145 9.9626 Tf 1 0 0 1 273.698 242.831 Tm [(.true.)]TJ/F84 9.9626 Tf 1.009 0 0 1 307.563 242.831 Tm [(value)-247(for)-247(those)-247(indices)-247(that)-247(ar)18(e)-247(local)-247(to)-247(the)]TJ 1 0 0 1 175.611 230.876 Tm [(curr)18(ent)-250(pr)18(ocess,)-250(including)-250(the)-250(halo)-250(indices.)]TJ + 1.009 0 0 1 175.303 242.831 Tm [(This)-247(r)18(outine)-247(r)18(eturns)-247(a)]TJ/F147 9.9626 Tf 1 0 0 1 273.698 242.831 Tm [(.true.)]TJ/F84 9.9626 Tf 1.009 0 0 1 307.563 242.831 Tm [(value)-247(for)-247(those)-247(indices)-247(that)-247(ar)18(e)-247(local)-247(to)-247(the)]TJ 1 0 0 1 175.611 230.876 Tm [(curr)18(ent)-250(pr)18(ocess,)-250(including)-250(the)-250(halo)-250(indices.)]TJ 0 g 0 G 139.477 -140.438 Td [(104)]TJ 0 g 0 G @@ -20904,7 +20914,7 @@ ET endstream endobj -1708 0 obj +1709 0 obj << /Length 3771 >> @@ -20929,7 +20939,7 @@ BT /F75 11.9552 Tf 177.903 706.129 Td [(boundary)-250(\227)-250(Extract)-250(list)-250(of)-250(boundary)-250(elements)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -78.008 -18.964 Td [(call)-525(psb_get_boundary\050bndel,)-525(desc,)-525(info\051)]TJ +/F147 9.9626 Tf -78.008 -18.964 Td [(call)-525(psb_get_boundary\050bndel,)-525(desc,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -20942,21 +20952,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.897 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ 0.01 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 577.576 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 577.576 Td [(desc)]TJ ET q 1 0 0 1 333.945 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 577.576 Td [(type)]TJ +/F147 9.9626 Tf 337.084 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -20977,7 +20987,7 @@ BT 0 g 0 G 1 0 0 1 112.349 322.532 Tm [(2.)]TJ 0 g 0 G - 0.985 0 0 1 124.802 322.532 Tm [(Otherwise)-253(the)-253(size)-253(of)]TJ/F145 9.9626 Tf 1 0 0 1 218.697 322.532 Tm [(bndel)]TJ/F84 9.9626 Tf 0.985 0 0 1 247.333 322.532 Tm [(will)-253(be)-253(exactly)-253(equal)-253(to)-253(the)-253(number)-253(of)-254(bound-)]TJ 1 0 0 1 124.802 310.577 Tm [(ary)-250(elements.)]TJ + 0.985 0 0 1 124.802 322.532 Tm [(Otherwise)-253(the)-253(size)-253(of)]TJ/F147 9.9626 Tf 1 0 0 1 218.697 322.532 Tm [(bndel)]TJ/F84 9.9626 Tf 0.985 0 0 1 247.333 322.532 Tm [(will)-253(be)-253(exactly)-253(equal)-253(to)-253(the)-253(number)-253(of)-254(bound-)]TJ 1 0 0 1 124.802 310.577 Tm [(ary)-250(elements.)]TJ 0 g 0 G 139.477 -220.139 Td [(105)]TJ 0 g 0 G @@ -20985,7 +20995,7 @@ ET endstream endobj -1715 0 obj +1716 0 obj << /Length 3593 >> @@ -21010,7 +21020,7 @@ BT /F75 11.9552 Tf 228.712 706.129 Td [(overlap)-250(\227)-250(Extract)-250(list)-250(of)-250(overlap)-250(elements)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -78.007 -18.964 Td [(call)-525(psb_get_overlap\050ovrel,)-525(desc,)-525(info\051)]TJ +/F147 9.9626 Tf -78.007 -18.964 Td [(call)-525(psb_get_overlap\050ovrel,)-525(desc,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -21023,21 +21033,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.896 0 Td [(the)-250(communication)-250(descriptor)74(.)]TJ 0.01 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 577.576 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 577.576 Td [(desc)]TJ ET q 1 0 0 1 384.755 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 577.576 Td [(type)]TJ +/F147 9.9626 Tf 387.893 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -21058,7 +21068,7 @@ BT 0 g 0 G -12.453 -19.926 Td [(2.)]TJ 0 g 0 G - 0.98 0 0 1 175.611 322.532 Tm [(Otherwise)-243(the)-242(size)-243(of)]TJ/F145 9.9626 Tf 1 0 0 1 268.625 322.532 Tm [(ovrel)]TJ/F84 9.9626 Tf 0.98 0 0 1 297.147 322.532 Tm [(will)-243(be)-242(exactly)-243(equal)-243(to)-243(the)-242(number)-243(of)-243(overlap)]TJ 1 0 0 1 175.611 310.577 Tm [(elements.)]TJ + 0.98 0 0 1 175.611 322.532 Tm [(Otherwise)-243(the)-242(size)-243(of)]TJ/F147 9.9626 Tf 1 0 0 1 268.625 322.532 Tm [(ovrel)]TJ/F84 9.9626 Tf 0.98 0 0 1 297.147 322.532 Tm [(will)-243(be)-242(exactly)-243(equal)-243(to)-243(the)-242(number)-243(of)-243(overlap)]TJ 1 0 0 1 175.611 310.577 Tm [(elements.)]TJ 0 g 0 G 139.477 -220.139 Td [(106)]TJ 0 g 0 G @@ -21066,47 +21076,47 @@ ET endstream endobj -1612 0 obj +1613 0 obj << /Type /ObjStm /N 100 /First 971 -/Length 10528 +/Length 10541 >> stream -1611 0 352 58 1608 115 1616 210 1613 358 1614 503 1618 650 356 709 1619 767 1615 826 -1623 921 1620 1069 1621 1216 1625 1359 360 1417 1622 1474 1628 1582 1630 1700 1631 1759 1627 1817 -1635 1912 1632 2060 1633 2206 1637 2350 364 2408 1634 2465 1639 2587 1641 2705 1642 2764 1643 2823 -1638 2882 1648 2963 1644 3120 1645 3265 1646 3408 1650 3551 368 3609 1651 3666 1652 3724 1647 3782 -1656 3890 1653 4038 1654 4180 1658 4323 372 4382 1655 4440 1660 4535 1662 4653 376 4711 1659 4768 -1666 4876 1664 5015 1668 5162 380 5221 1665 5279 1670 5387 1672 5505 1673 5563 1674 5621 1669 5679 -1677 5761 1675 5900 1679 6047 384 6106 1676 6164 1682 6272 1680 6411 1684 6558 388 6616 1685 6673 -1681 6731 1688 6839 1686 6978 1690 7125 392 7184 1691 7242 1687 7301 1694 7409 1692 7548 1696 7695 -396 7753 1697 7810 1693 7868 1701 7976 1699 8115 1703 8262 400 8321 1704 8379 1700 8438 1707 8546 -1705 8685 1709 8830 405 8888 1710 8945 1711 9003 1706 9061 1714 9156 1712 9295 1716 9440 409 9499 -% 1611 0 obj +1612 0 352 58 1609 115 1617 210 1614 358 1615 503 1619 650 356 709 1620 767 1616 826 +1624 921 1621 1069 1622 1216 1626 1359 360 1417 1623 1474 1629 1582 1631 1700 1632 1759 1628 1817 +1636 1912 1633 2060 1634 2206 1638 2350 364 2408 1635 2465 1640 2587 1642 2705 1643 2764 1644 2823 +1639 2882 1649 2963 1645 3120 1646 3265 1647 3408 1651 3551 368 3609 1652 3666 1653 3724 1648 3782 +1657 3890 1654 4038 1655 4180 1659 4323 372 4382 1656 4440 1661 4535 1663 4653 376 4711 1660 4768 +1667 4876 1665 5015 1669 5162 380 5221 1666 5279 1671 5387 1673 5505 1674 5563 1675 5621 1670 5679 +1678 5774 1676 5913 1680 6060 384 6119 1677 6177 1683 6285 1681 6424 1685 6571 388 6629 1686 6686 +1682 6744 1689 6852 1687 6991 1691 7138 392 7197 1692 7255 1688 7314 1695 7422 1693 7561 1697 7708 +396 7766 1698 7823 1694 7881 1702 7989 1700 8128 1704 8275 400 8334 1705 8392 1701 8451 1708 8559 +1706 8698 1710 8843 405 8901 1711 8958 1712 9016 1707 9074 1715 9169 1713 9308 1717 9453 409 9512 +% 1612 0 obj << -/D [1609 0 R /XYZ 98.895 753.953 null] +/D [1610 0 R /XYZ 98.895 753.953 null] >> % 352 0 obj << -/D [1609 0 R /XYZ 99.895 716.092 null] +/D [1610 0 R /XYZ 99.895 716.092 null] >> -% 1608 0 obj +% 1609 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1616 0 obj +% 1617 0 obj << /Type /Page -/Contents 1617 0 R -/Resources 1615 0 R +/Contents 1618 0 R +/Resources 1616 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1577 0 R -/Annots [ 1613 0 R 1614 0 R ] +/Parent 1578 0 R +/Annots [ 1614 0 R 1615 0 R ] >> -% 1613 0 obj +% 1614 0 obj << /Type /Annot /Subtype /Link @@ -21114,7 +21124,7 @@ stream /Rect [342.753 559.823 420.271 571.882] /A << /S /GoTo /D (spdata) >> >> -% 1614 0 obj +% 1615 0 obj << /Type /Annot /Subtype /Link @@ -21122,33 +21132,33 @@ stream /Rect [342.753 492.077 409.811 504.136] /A << /S /GoTo /D (descdata) >> >> -% 1618 0 obj +% 1619 0 obj << -/D [1616 0 R /XYZ 149.705 753.953 null] +/D [1617 0 R /XYZ 149.705 753.953 null] >> % 356 0 obj << -/D [1616 0 R /XYZ 150.705 716.092 null] +/D [1617 0 R /XYZ 150.705 716.092 null] >> -% 1619 0 obj +% 1620 0 obj << -/D [1616 0 R /XYZ 150.705 312.355 null] +/D [1617 0 R /XYZ 150.705 312.355 null] >> -% 1615 0 obj +% 1616 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1623 0 obj +% 1624 0 obj << /Type /Page -/Contents 1624 0 R -/Resources 1622 0 R +/Contents 1625 0 R +/Resources 1623 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1626 0 R -/Annots [ 1620 0 R 1621 0 R ] +/Parent 1627 0 R +/Annots [ 1621 0 R 1622 0 R ] >> -% 1620 0 obj +% 1621 0 obj << /Type /Annot /Subtype /Link @@ -21156,7 +21166,7 @@ stream /Rect [260.133 577.893 327.191 589.953] /A << /S /GoTo /D (descdata) >> >> -% 1621 0 obj +% 1622 0 obj << /Type /Annot /Subtype /Link @@ -21164,50 +21174,50 @@ stream /Rect [210.44 128.475 286.494 140.535] /A << /S /GoTo /D (vdata) >> >> -% 1625 0 obj +% 1626 0 obj << -/D [1623 0 R /XYZ 98.895 753.953 null] +/D [1624 0 R /XYZ 98.895 753.953 null] >> % 360 0 obj << -/D [1623 0 R /XYZ 99.895 716.092 null] +/D [1624 0 R /XYZ 99.895 716.092 null] >> -% 1622 0 obj +% 1623 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1628 0 obj +% 1629 0 obj << /Type /Page -/Contents 1629 0 R -/Resources 1627 0 R +/Contents 1630 0 R +/Resources 1628 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1626 0 R +/Parent 1627 0 R >> -% 1630 0 obj +% 1631 0 obj << -/D [1628 0 R /XYZ 149.705 753.953 null] +/D [1629 0 R /XYZ 149.705 753.953 null] >> -% 1631 0 obj +% 1632 0 obj << -/D [1628 0 R /XYZ 150.705 632.19 null] +/D [1629 0 R /XYZ 150.705 632.19 null] >> -% 1627 0 obj +% 1628 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1635 0 obj +% 1636 0 obj << /Type /Page -/Contents 1636 0 R -/Resources 1634 0 R +/Contents 1637 0 R +/Resources 1635 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1626 0 R -/Annots [ 1632 0 R 1633 0 R ] +/Parent 1627 0 R +/Annots [ 1633 0 R 1634 0 R ] >> -% 1632 0 obj +% 1633 0 obj << /Type /Annot /Subtype /Link @@ -21215,7 +21225,7 @@ stream /Rect [291.943 362.621 359.001 374.68] /A << /S /GoTo /D (descdata) >> >> -% 1633 0 obj +% 1634 0 obj << /Type /Annot /Subtype /Link @@ -21223,54 +21233,54 @@ stream /Rect [367.353 207.637 443.407 219.697] /A << /S /GoTo /D (vdata) >> >> -% 1637 0 obj +% 1638 0 obj << -/D [1635 0 R /XYZ 98.895 753.953 null] +/D [1636 0 R /XYZ 98.895 753.953 null] >> % 364 0 obj << -/D [1635 0 R /XYZ 99.895 716.092 null] +/D [1636 0 R /XYZ 99.895 716.092 null] >> -% 1634 0 obj +% 1635 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1639 0 obj +% 1640 0 obj << /Type /Page -/Contents 1640 0 R -/Resources 1638 0 R +/Contents 1641 0 R +/Resources 1639 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1626 0 R ->> -% 1641 0 obj -<< -/D [1639 0 R /XYZ 149.705 753.953 null] +/Parent 1627 0 R >> % 1642 0 obj << -/D [1639 0 R /XYZ 150.705 701.929 null] +/D [1640 0 R /XYZ 149.705 753.953 null] >> % 1643 0 obj << -/D [1639 0 R /XYZ 150.705 680.684 null] +/D [1640 0 R /XYZ 150.705 701.929 null] >> -% 1638 0 obj +% 1644 0 obj +<< +/D [1640 0 R /XYZ 150.705 680.684 null] +>> +% 1639 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1648 0 obj +% 1649 0 obj << /Type /Page -/Contents 1649 0 R -/Resources 1647 0 R +/Contents 1650 0 R +/Resources 1648 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1626 0 R -/Annots [ 1644 0 R 1645 0 R 1646 0 R ] +/Parent 1627 0 R +/Annots [ 1645 0 R 1646 0 R 1647 0 R ] >> -% 1644 0 obj +% 1645 0 obj << /Type /Annot /Subtype /Link @@ -21278,7 +21288,7 @@ stream /Rect [260.133 573.77 327.191 585.83] /A << /S /GoTo /D (descdata) >> >> -% 1645 0 obj +% 1646 0 obj << /Type /Annot /Subtype /Link @@ -21286,7 +21296,7 @@ stream /Rect [271.52 482.114 347.574 494.174] /A << /S /GoTo /D (vdata) >> >> -% 1646 0 obj +% 1647 0 obj << /Type /Annot /Subtype /Link @@ -21294,37 +21304,37 @@ stream /Rect [157.09 380.495 233.145 392.555] /A << /S /GoTo /D (vdata) >> >> -% 1650 0 obj +% 1651 0 obj << -/D [1648 0 R /XYZ 98.895 753.953 null] +/D [1649 0 R /XYZ 98.895 753.953 null] >> % 368 0 obj << -/D [1648 0 R /XYZ 99.895 716.092 null] +/D [1649 0 R /XYZ 99.895 716.092 null] >> -% 1651 0 obj +% 1652 0 obj << -/D [1648 0 R /XYZ 99.895 278.482 null] +/D [1649 0 R /XYZ 99.895 278.482 null] >> -% 1652 0 obj +% 1653 0 obj << -/D [1648 0 R /XYZ 99.895 244.007 null] +/D [1649 0 R /XYZ 99.895 244.007 null] >> -% 1647 0 obj +% 1648 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1656 0 obj +% 1657 0 obj << /Type /Page -/Contents 1657 0 R -/Resources 1655 0 R +/Contents 1658 0 R +/Resources 1656 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1626 0 R -/Annots [ 1653 0 R 1654 0 R ] +/Parent 1627 0 R +/Annots [ 1654 0 R 1655 0 R ] >> -% 1653 0 obj +% 1654 0 obj << /Type /Annot /Subtype /Link @@ -21332,7 +21342,7 @@ stream /Rect [207.9 561.815 283.954 573.875] /A << /S /GoTo /D (vdata) >> >> -% 1654 0 obj +% 1655 0 obj << /Type /Annot /Subtype /Link @@ -21340,135 +21350,135 @@ stream /Rect [310.942 482.114 378 494.174] /A << /S /GoTo /D (descdata) >> >> -% 1658 0 obj +% 1659 0 obj << -/D [1656 0 R /XYZ 149.705 753.953 null] +/D [1657 0 R /XYZ 149.705 753.953 null] >> % 372 0 obj << -/D [1656 0 R /XYZ 150.705 716.092 null] +/D [1657 0 R /XYZ 150.705 716.092 null] >> -% 1655 0 obj +% 1656 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1660 0 obj +% 1661 0 obj << /Type /Page -/Contents 1661 0 R -/Resources 1659 0 R +/Contents 1662 0 R +/Resources 1660 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1663 0 R +/Parent 1664 0 R >> -% 1662 0 obj +% 1663 0 obj << -/D [1660 0 R /XYZ 98.895 753.953 null] +/D [1661 0 R /XYZ 98.895 753.953 null] >> % 376 0 obj << -/D [1660 0 R /XYZ 99.895 716.092 null] +/D [1661 0 R /XYZ 99.895 716.092 null] >> -% 1659 0 obj +% 1660 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1666 0 obj +% 1667 0 obj << /Type /Page -/Contents 1667 0 R -/Resources 1665 0 R +/Contents 1668 0 R +/Resources 1666 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1663 0 R -/Annots [ 1664 0 R ] +/Parent 1664 0 R +/Annots [ 1665 0 R ] >> -% 1664 0 obj +% 1665 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [342.753 483.894 409.811 495.954] +/Rect [342.753 480.016 409.811 492.076] /A << /S /GoTo /D (descdata) >> >> -% 1668 0 obj +% 1669 0 obj << -/D [1666 0 R /XYZ 149.705 753.953 null] +/D [1667 0 R /XYZ 149.705 753.953 null] >> % 380 0 obj << -/D [1666 0 R /XYZ 150.705 716.092 null] +/D [1667 0 R /XYZ 150.705 716.092 null] >> -% 1665 0 obj +% 1666 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1670 0 obj +% 1671 0 obj << /Type /Page -/Contents 1671 0 R -/Resources 1669 0 R +/Contents 1672 0 R +/Resources 1670 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1663 0 R ->> -% 1672 0 obj -<< -/D [1670 0 R /XYZ 98.895 753.953 null] +/Parent 1664 0 R >> % 1673 0 obj << -/D [1670 0 R /XYZ 99.895 716.092 null] +/D [1671 0 R /XYZ 98.895 753.953 null] >> % 1674 0 obj << -/D [1670 0 R /XYZ 99.895 687.379 null] +/D [1671 0 R /XYZ 99.895 701.929 null] >> -% 1669 0 obj +% 1675 0 obj +<< +/D [1671 0 R /XYZ 99.895 667.454 null] +>> +% 1670 0 obj << -/Font << /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1677 0 obj +% 1678 0 obj << /Type /Page -/Contents 1678 0 R -/Resources 1676 0 R +/Contents 1679 0 R +/Resources 1677 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1663 0 R -/Annots [ 1675 0 R ] +/Parent 1664 0 R +/Annots [ 1676 0 R ] >> -% 1675 0 obj +% 1676 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [342.753 482.114 409.811 494.174] +/Rect [342.753 470.159 409.811 482.219] /A << /S /GoTo /D (descdata) >> >> -% 1679 0 obj +% 1680 0 obj << -/D [1677 0 R /XYZ 149.705 753.953 null] +/D [1678 0 R /XYZ 149.705 753.953 null] >> % 384 0 obj << -/D [1677 0 R /XYZ 150.705 716.092 null] +/D [1678 0 R /XYZ 150.705 716.092 null] >> -% 1676 0 obj +% 1677 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1682 0 obj +% 1683 0 obj << /Type /Page -/Contents 1683 0 R -/Resources 1681 0 R +/Contents 1684 0 R +/Resources 1682 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1663 0 R -/Annots [ 1680 0 R ] +/Parent 1664 0 R +/Annots [ 1681 0 R ] >> -% 1680 0 obj +% 1681 0 obj << /Type /Annot /Subtype /Link @@ -21476,33 +21486,33 @@ stream /Rect [291.943 494.069 359.001 506.129] /A << /S /GoTo /D (descdata) >> >> -% 1684 0 obj +% 1685 0 obj << -/D [1682 0 R /XYZ 98.895 753.953 null] +/D [1683 0 R /XYZ 98.895 753.953 null] >> % 388 0 obj << -/D [1682 0 R /XYZ 99.895 716.092 null] +/D [1683 0 R /XYZ 99.895 716.092 null] >> -% 1685 0 obj +% 1686 0 obj << -/D [1682 0 R /XYZ 99.895 382.093 null] +/D [1683 0 R /XYZ 99.895 382.093 null] >> -% 1681 0 obj +% 1682 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1688 0 obj +% 1689 0 obj << /Type /Page -/Contents 1689 0 R -/Resources 1687 0 R +/Contents 1690 0 R +/Resources 1688 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1663 0 R -/Annots [ 1686 0 R ] +/Parent 1664 0 R +/Annots [ 1687 0 R ] >> -% 1686 0 obj +% 1687 0 obj << /Type /Annot /Subtype /Link @@ -21510,33 +21520,33 @@ stream /Rect [342.753 494.069 409.811 506.129] /A << /S /GoTo /D (descdata) >> >> -% 1690 0 obj +% 1691 0 obj << -/D [1688 0 R /XYZ 149.705 753.953 null] +/D [1689 0 R /XYZ 149.705 753.953 null] >> % 392 0 obj << -/D [1688 0 R /XYZ 150.705 716.092 null] +/D [1689 0 R /XYZ 150.705 716.092 null] >> -% 1691 0 obj +% 1692 0 obj << -/D [1688 0 R /XYZ 150.705 258.556 null] +/D [1689 0 R /XYZ 150.705 258.556 null] >> -% 1687 0 obj +% 1688 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1694 0 obj +% 1695 0 obj << /Type /Page -/Contents 1695 0 R -/Resources 1693 0 R +/Contents 1696 0 R +/Resources 1694 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1698 0 R -/Annots [ 1692 0 R ] +/Parent 1699 0 R +/Annots [ 1693 0 R ] >> -% 1692 0 obj +% 1693 0 obj << /Type /Annot /Subtype /Link @@ -21544,33 +21554,33 @@ stream /Rect [291.943 494.069 359.001 506.129] /A << /S /GoTo /D (descdata) >> >> -% 1696 0 obj +% 1697 0 obj << -/D [1694 0 R /XYZ 98.895 753.953 null] +/D [1695 0 R /XYZ 98.895 753.953 null] >> % 396 0 obj << -/D [1694 0 R /XYZ 99.895 716.092 null] +/D [1695 0 R /XYZ 99.895 716.092 null] >> -% 1697 0 obj +% 1698 0 obj << -/D [1694 0 R /XYZ 99.895 382.093 null] +/D [1695 0 R /XYZ 99.895 382.093 null] >> -% 1693 0 obj +% 1694 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1701 0 obj +% 1702 0 obj << /Type /Page -/Contents 1702 0 R -/Resources 1700 0 R +/Contents 1703 0 R +/Resources 1701 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1698 0 R -/Annots [ 1699 0 R ] +/Parent 1699 0 R +/Annots [ 1700 0 R ] >> -% 1699 0 obj +% 1700 0 obj << /Type /Annot /Subtype /Link @@ -21578,33 +21588,33 @@ stream /Rect [342.753 494.069 409.811 506.129] /A << /S /GoTo /D (descdata) >> >> -% 1703 0 obj +% 1704 0 obj << -/D [1701 0 R /XYZ 149.705 753.953 null] +/D [1702 0 R /XYZ 149.705 753.953 null] >> % 400 0 obj << -/D [1701 0 R /XYZ 150.705 716.092 null] +/D [1702 0 R /XYZ 150.705 716.092 null] >> -% 1704 0 obj +% 1705 0 obj << -/D [1701 0 R /XYZ 150.705 258.556 null] +/D [1702 0 R /XYZ 150.705 258.556 null] >> -% 1700 0 obj +% 1701 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1707 0 obj +% 1708 0 obj << /Type /Page -/Contents 1708 0 R -/Resources 1706 0 R +/Contents 1709 0 R +/Resources 1707 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1698 0 R -/Annots [ 1705 0 R ] +/Parent 1699 0 R +/Annots [ 1706 0 R ] >> -% 1705 0 obj +% 1706 0 obj << /Type /Annot /Subtype /Link @@ -21612,37 +21622,37 @@ stream /Rect [291.943 573.77 359.001 585.83] /A << /S /GoTo /D (descdata) >> >> -% 1709 0 obj +% 1710 0 obj << -/D [1707 0 R /XYZ 98.895 753.953 null] +/D [1708 0 R /XYZ 98.895 753.953 null] >> % 405 0 obj << -/D [1707 0 R /XYZ 99.895 716.092 null] +/D [1708 0 R /XYZ 99.895 716.092 null] >> -% 1710 0 obj +% 1711 0 obj << -/D [1707 0 R /XYZ 99.895 370.138 null] +/D [1708 0 R /XYZ 99.895 370.138 null] >> -% 1711 0 obj +% 1712 0 obj << -/D [1707 0 R /XYZ 99.895 335.663 null] +/D [1708 0 R /XYZ 99.895 335.663 null] >> -% 1706 0 obj +% 1707 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1714 0 obj +% 1715 0 obj << /Type /Page -/Contents 1715 0 R -/Resources 1713 0 R +/Contents 1716 0 R +/Resources 1714 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1698 0 R -/Annots [ 1712 0 R ] +/Parent 1699 0 R +/Annots [ 1713 0 R ] >> -% 1712 0 obj +% 1713 0 obj << /Type /Annot /Subtype /Link @@ -21650,18 +21660,18 @@ stream /Rect [342.753 573.77 409.811 585.83] /A << /S /GoTo /D (descdata) >> >> -% 1716 0 obj +% 1717 0 obj << -/D [1714 0 R /XYZ 149.705 753.953 null] +/D [1715 0 R /XYZ 149.705 753.953 null] >> % 409 0 obj << -/D [1714 0 R /XYZ 150.705 716.092 null] +/D [1715 0 R /XYZ 150.705 716.092 null] >> endstream endobj -1723 0 obj +1724 0 obj << /Length 5529 >> @@ -21686,7 +21696,7 @@ BT /F75 11.9552 Tf 173.91 706.129 Td [(getrow)-250(\227)-250(Extract)-250(row\050s\051)-250(from)-250(a)-250(sparse)-250(matrix)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -74.015 -19.204 Td [(call)-525(psb_sp_getrow\050row,)-525(a,)-525(nz,)-525(ia,)-525(ja,)-525(val,)-525(info,)-525(&)]TJ 73.225 -11.955 Td [(&)-525(append,)-525(nzin,)-525(lrw\051)]TJ +/F147 9.9626 Tf -74.015 -19.204 Td [(call)-525(psb_sp_getrow\050row,)-525(a,)-525(nz,)-525(ia,)-525(ja,)-525(val,)-525(info,)-525(&)]TJ 73.225 -11.955 Td [(&)-525(append,)-525(nzin,)-525(lrw\051)]TJ 0 g 0 G /F75 9.9626 Tf -73.225 -22.29 Td [(T)90(ype:)]TJ 0 g 0 G @@ -21697,27 +21707,27 @@ BT 0 g 0 G 0 -20.421 Td [(row)]TJ 0 g 0 G -/F84 9.9626 Tf 22.386 0 Td [(The)-250(\050\002rst\051)-250(r)18(ow)-250(to)-250(be)-250(extracted.)]TJ 2.521 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)]TJ/F148 10.3811 Tf 104.323 0 Td [(>)]TJ/F84 9.9626 Tf 10.961 0 Td [(0.)]TJ +/F84 9.9626 Tf 22.386 0 Td [(The)-250(\050\002rst\051)-250(r)18(ow)-250(to)-250(be)-250(extracted.)]TJ 2.521 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)]TJ/F152 10.3811 Tf 104.323 0 Td [(>)]TJ/F84 9.9626 Tf 10.961 0 Td [(0.)]TJ 0 g 0 G /F75 9.9626 Tf -140.191 -20.42 Td [(a)]TJ 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(matrix)-250(fr)18(om)-250(which)-250(to)-250(get)-250(r)18(ows.)]TJ 14.944 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 495.976 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 495.777 Td [(Tspmat)]TJ +/F147 9.9626 Tf 312.397 495.777 Td [(Tspmat)]TJ ET q 1 0 0 1 344.406 495.976 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 347.544 495.777 Td [(type)]TJ +/F147 9.9626 Tf 347.544 495.777 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -21727,11 +21737,11 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -20.421 Td [(nzin)]TJ 0 g 0 G -/F84 9.9626 Tf 25.455 0 Td [(Input)-250(size)-250(to)-250(be)-250(appended)-250(to.)]TJ -0.548 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf -23.691 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 359.294 Tm [(Speci\002ed)-267(as:)-347(an)-267(integer)]TJ/F148 10.3811 Tf 1 0 0 1 232.103 359.294 Tm [(>)]TJ/F84 9.9626 Tf 1.02 0 0 1 243.473 359.294 Tm [(0.)-369(When)-267(append)-267(is)-267(tr)8(ue,)-272(speci\002es)-267(how)-267(many)]TJ 1 0 0 1 124.802 347.339 Tm [(entries)-250(in)-250(the)-250(output)-250(vectors)-250(ar)18(e)-250(alr)18(eady)-250(\002lled.)]TJ +/F84 9.9626 Tf 25.455 0 Td [(Input)-250(size)-250(to)-250(be)-250(appended)-250(to.)]TJ -0.548 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf -23.691 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 359.294 Tm [(Speci\002ed)-267(as:)-347(an)-267(integer)]TJ/F152 10.3811 Tf 1 0 0 1 232.103 359.294 Tm [(>)]TJ/F84 9.9626 Tf 1.02 0 0 1 243.473 359.294 Tm [(0.)-369(When)-267(append)-267(is)-267(tr)8(ue,)-272(speci\002es)-267(how)-267(many)]TJ 1 0 0 1 124.802 347.339 Tm [(entries)-250(in)-250(the)-250(output)-250(vectors)-250(ar)18(e)-250(alr)18(eady)-250(\002lled.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -20.421 Td [(lrw)]TJ 0 g 0 G -/F84 9.9626 Tf 20.165 0 Td [(The)-250(last)-250(r)18(ow)-250(to)-250(be)-250(extracted.)]TJ 4.742 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)]TJ/F148 10.3811 Tf 104.323 0 Td [(>)]TJ/F84 9.9626 Tf 10.961 0 Td [(0,)-250(default:)]TJ/F78 9.9626 Tf 46.879 0 Td [(r)-17(o)-35(w)]TJ/F84 9.9626 Tf 16.134 0 Td [(.)]TJ +/F84 9.9626 Tf 20.165 0 Td [(The)-250(last)-250(r)18(ow)-250(to)-250(be)-250(extracted.)]TJ 4.742 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf -28.652 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf -23.691 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)]TJ/F152 10.3811 Tf 104.323 0 Td [(>)]TJ/F84 9.9626 Tf 10.961 0 Td [(0,)-250(default:)]TJ/F78 9.9626 Tf 46.879 0 Td [(r)-17(o)-35(w)]TJ/F84 9.9626 Tf 16.134 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -203.204 -22.29 Td [(On)-250(Return)]TJ 0 g 0 G @@ -21742,7 +21752,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -20.421 Td [(ia)]TJ 0 g 0 G -/F84 9.9626 Tf 13.28 0 Td [(the)-250(r)18(ow)-250(indices.)]TJ 11.627 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(with)-250(the)]TJ/F145 9.9626 Tf 169.114 0 Td [(ALLOCATABLE)]TJ/F84 9.9626 Tf 60.024 0 Td [(attribute.)]TJ +/F84 9.9626 Tf 13.28 0 Td [(the)-250(r)18(ow)-250(indices.)]TJ 11.627 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.343 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(with)-250(the)]TJ/F147 9.9626 Tf 169.114 0 Td [(ALLOCATABLE)]TJ/F84 9.9626 Tf 60.024 0 Td [(attribute.)]TJ 0 g 0 G -89.661 -29.888 Td [(107)]TJ 0 g 0 G @@ -21750,7 +21760,7 @@ ET endstream endobj -1727 0 obj +1728 0 obj << /Length 3789 >> @@ -21761,11 +21771,11 @@ stream BT /F75 9.9626 Tf 150.705 706.129 Td [(ja)]TJ 0 g 0 G -/F84 9.9626 Tf 13.28 0 Td [(the)-250(column)-250(indices)-250(of)-250(the)-250(elements)-250(to)-250(be)-250(inserted.)]TJ 11.626 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(with)-250(the)]TJ/F145 9.9626 Tf 169.114 0 Td [(ALLOCATABLE)]TJ/F84 9.9626 Tf 60.025 0 Td [(attribute.)]TJ +/F84 9.9626 Tf 13.28 0 Td [(the)-250(column)-250(indices)-250(of)-250(the)-250(elements)-250(to)-250(be)-250(inserted.)]TJ 11.626 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)-250(with)-250(the)]TJ/F147 9.9626 Tf 169.114 0 Td [(ALLOCATABLE)]TJ/F84 9.9626 Tf 60.025 0 Td [(attribute.)]TJ 0 g 0 G /F75 9.9626 Tf -254.045 -19.925 Td [(val)]TJ 0 g 0 G -/F84 9.9626 Tf 18.819 0 Td [(the)-250(elements)-250(to)-250(be)-250(inserted.)]TJ 6.087 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.983 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.148 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(r)18(eal)-250(array)-250(with)-250(the)]TJ/F145 9.9626 Tf 148.76 0 Td [(ALLOCATABLE)]TJ/F84 9.9626 Tf 60.025 0 Td [(attribute.)]TJ +/F84 9.9626 Tf 18.819 0 Td [(the)-250(elements)-250(to)-250(be)-250(inserted.)]TJ 6.087 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 28.344 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -50.231 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.983 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.148 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(r)18(eal)-250(array)-250(with)-250(the)]TJ/F147 9.9626 Tf 148.76 0 Td [(ALLOCATABLE)]TJ/F84 9.9626 Tf 60.025 0 Td [(attribute.)]TJ 0 g 0 G /F75 9.9626 Tf -233.692 -19.925 Td [(info)]TJ 0 g 0 G @@ -21773,15 +21783,15 @@ BT 0 g 0 G /F84 9.9626 Tf 12.453 -19.925 Td [(1.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 480.973 Tm [(The)-263(outp)1(ut)]TJ/F78 9.9626 Tf 1 0 0 1 228.31 480.973 Tm [(n)-25(z)]TJ/F84 9.9626 Tf 1.02 0 0 1 241.315 480.973 Tm [(is)-263(always)-262(the)-263(size)-262(of)-263(the)-262(output)-263(generated)-263(b)1(y)-263(the)-263(curr)18(ent)]TJ 1.016 0 0 1 175.611 469.018 Tm [(call;)-246(thus,)-246(if)]TJ/F145 9.9626 Tf 1 0 0 1 229.489 469.018 Tm [(append=.true.)]TJ/F84 9.9626 Tf 1.016 0 0 1 297.484 469.018 Tm [(,)-246(the)-246(total)-246(output)-246(size)-246(will)-246(be)]TJ/F78 9.9626 Tf 1 0 0 1 427.023 469.018 Tm [(n)-25(z)-18(i)-32(n)]TJ/F192 10.3811 Tf 21.204 0 Td [(+)]TJ/F78 9.9626 Tf 10.255 0 Td [(n)-25(z)]TJ/F84 9.9626 Tf 1.016 0 0 1 468.818 469.018 Tm [(,)-246(with)]TJ 1.017 0 0 1 175.611 457.063 Tm [(the)-247(newly)-246(extracted)-247(coef)18(\002cients)-247(stor)18(ed)-247(in)-246(entries)]TJ/F145 9.9626 Tf 1 0 0 1 393.234 457.063 Tm [(nzin+1:nzin+nz)]TJ/F84 9.9626 Tf 1.017 0 0 1 468.958 457.063 Tm [(of)-247(the)]TJ 1 0 0 1 175.611 445.108 Tm [(array)-250(ar)18(guments;)]TJ + 1.02 0 0 1 175.303 480.973 Tm [(The)-263(outp)1(ut)]TJ/F78 9.9626 Tf 1 0 0 1 228.31 480.973 Tm [(n)-25(z)]TJ/F84 9.9626 Tf 1.02 0 0 1 241.315 480.973 Tm [(is)-263(always)-262(the)-263(size)-262(of)-263(the)-262(output)-263(generated)-263(b)1(y)-263(the)-263(curr)18(ent)]TJ 1.016 0 0 1 175.611 469.018 Tm [(call;)-246(thus,)-246(if)]TJ/F147 9.9626 Tf 1 0 0 1 229.489 469.018 Tm [(append=.true.)]TJ/F84 9.9626 Tf 1.016 0 0 1 297.484 469.018 Tm [(,)-246(the)-246(total)-246(output)-246(size)-246(will)-246(be)]TJ/F78 9.9626 Tf 1 0 0 1 427.023 469.018 Tm [(n)-25(z)-18(i)-32(n)]TJ/F197 10.3811 Tf 21.204 0 Td [(+)]TJ/F78 9.9626 Tf 10.255 0 Td [(n)-25(z)]TJ/F84 9.9626 Tf 1.016 0 0 1 468.818 469.018 Tm [(,)-246(with)]TJ 1.017 0 0 1 175.611 457.063 Tm [(the)-247(newly)-246(extracted)-247(coef)18(\002cients)-247(stor)18(ed)-247(in)-246(entries)]TJ/F147 9.9626 Tf 1 0 0 1 393.234 457.063 Tm [(nzin+1:nzin+nz)]TJ/F84 9.9626 Tf 1.017 0 0 1 468.958 457.063 Tm [(of)-247(the)]TJ 1 0 0 1 175.611 445.108 Tm [(array)-250(ar)18(guments;)]TJ 0 g 0 G -12.453 -19.926 Td [(2.)]TJ 0 g 0 G - [-450(When)]TJ/F145 9.9626 Tf 40.777 0 Td [(append=.true.)]TJ/F84 9.9626 Tf 70.485 0 Td [(the)-250(output)-250(arrays)-250(ar)18(e)-250(r)18(eallocated)-250(as)-250(necessary;)]TJ + [-450(When)]TJ/F147 9.9626 Tf 40.777 0 Td [(append=.true.)]TJ/F84 9.9626 Tf 70.485 0 Td [(the)-250(output)-250(arrays)-250(ar)18(e)-250(r)18(eallocated)-250(as)-250(necessary;)]TJ 0 g 0 G -111.262 -19.925 Td [(3.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 405.257 Tm [(The)-204(r)19(ow)-204(and)-204(column)-204(indices)-203(ar)18(e)-204(r)19(eturned)-204(in)-204(the)-203(local)-204(numbering)-204(scheme;)-221(if)]TJ 0.98 0 0 1 175.611 393.302 Tm [(the)-194(global)-194(numbering)-194(is)-193(desir)18(ed,)-206(the)-194(user)-194(may)-194(employ)-194(the)]TJ/F145 9.9626 Tf 1 0 0 1 421.701 393.302 Tm [(psb_loc_to_glob)]TJ/F84 9.9626 Tf -246.09 -11.955 Td [(r)18(outine)-250(on)-250(the)-250(output.)]TJ + 0.98 0 0 1 175.303 405.257 Tm [(The)-204(r)19(ow)-204(and)-204(column)-204(indices)-203(ar)18(e)-204(r)19(eturned)-204(in)-204(the)-203(local)-204(numbering)-204(scheme;)-221(if)]TJ 0.98 0 0 1 175.611 393.302 Tm [(the)-194(global)-194(numbering)-194(is)-193(desir)18(ed,)-206(the)-194(user)-194(may)-194(employ)-194(the)]TJ/F147 9.9626 Tf 1 0 0 1 421.701 393.302 Tm [(psb_loc_to_glob)]TJ/F84 9.9626 Tf -246.09 -11.955 Td [(r)18(outine)-250(on)-250(the)-250(output.)]TJ 0 g 0 G 139.477 -290.909 Td [(108)]TJ 0 g 0 G @@ -21789,9 +21799,9 @@ ET endstream endobj -1737 0 obj +1738 0 obj << -/Length 4035 +/Length 4027 >> stream 0 g 0 G @@ -21807,7 +21817,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(sizeof)-250(\227)-250(Memory)-250(occupation)]TJ/F84 9.9626 Tf -57.406 -18.964 Td [(This)-250(function)-250(computes)-250(the)-250(memory)-250(occupation)-250(of)-250(a)-250(PSBLAS)-250(object.)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0.308 -21.918 Td [(isz)-525(=)-525(psb_sizeof\050a\051)]TJ 0 -11.955 Td [(isz)-525(=)-525(psb_sizeof\050desc_a\051)]TJ 0 -11.955 Td [(isz)-525(=)-525(psb_sizeof\050prec\051)]TJ +/F147 9.9626 Tf 0.308 -21.918 Td [(isz)-525(=)-525(psb_sizeof\050a\051)]TJ 0 -11.955 Td [(isz)-525(=)-525(psb_sizeof\050desc_a\051)]TJ 0 -11.955 Td [(isz)-525(=)-525(psb_sizeof\050prec\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -21820,21 +21830,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.574 0 Td [(A)-250(sparse)-250(matrix)]TJ/F78 9.9626 Tf 72.971 0 Td [(A)]TJ/F84 9.9626 Tf 7.318 0 Td [(.)]TJ -64.956 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 531.947 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 531.748 Td [(Tspmat)]TJ +/F147 9.9626 Tf 312.397 531.748 Td [(Tspmat)]TJ ET q 1 0 0 1 344.406 531.947 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 347.544 531.748 Td [(type)]TJ +/F147 9.9626 Tf 347.544 531.748 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -21849,21 +21859,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(Communication)-250(descriptor)74(.)]TJ -8.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 464.201 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 464.002 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 464.002 Td [(desc)]TJ ET q 1 0 0 1 333.945 464.201 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 464.002 Td [(type)]TJ +/F147 9.9626 Tf 337.084 464.002 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -21871,21 +21881,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.349 0 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.183 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 337.631 408.41 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 340.77 408.211 Td [(Tprec)]TJ +/F147 9.9626 Tf 340.77 408.211 Td [(Tprec)]TJ ET q 1 0 0 1 367.549 408.41 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 370.687 408.211 Td [(type)]TJ +/F147 9.9626 Tf 370.687 408.211 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -21894,15 +21904,15 @@ BT 0 g 0 G 0 -19.925 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 172.363 368.361 Tm [(The)-266(memory)-267(occupati)1(on)-267(of)-266(the)-266(object)-267(speci\002ed)-266(in)-266(the)-266(calling)]TJ 1 0 0 1 124.802 356.405 Tm [(sequence,)-250(in)-250(bytes.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.432 -11.955 Td [(Returned)-250(as:)-310(an)]TJ/F145 9.9626 Tf 71.82 0 Td [(integer\050psb_long_int_k_\051)]TJ/F84 9.9626 Tf 128.019 0 Td [(number)74(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 172.363 368.361 Tm [(The)-266(memory)-267(occupati)1(on)-267(of)-266(the)-266(object)-267(speci\002ed)-266(in)-266(the)-266(calling)]TJ 1 0 0 1 124.802 356.405 Tm [(sequence,)-250(in)-250(bytes.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.432 -11.955 Td [(Returned)-250(as:)-310(an)]TJ/F147 9.9626 Tf 71.82 0 Td [(integer\050psb_lpk_\051)]TJ/F84 9.9626 Tf 91.406 0 Td [(number)74(.)]TJ 0 g 0 G - -60.362 -242.057 Td [(109)]TJ + -23.749 -242.057 Td [(109)]TJ 0 g 0 G ET endstream endobj -1742 0 obj +1743 0 obj << /Length 7828 >> @@ -21941,7 +21951,7 @@ BT /F75 11.9552 Tf 174.555 651.3 Td [(hsort)-250(\227)-250(Sorting)-250(by)-250(the)-250(Heapsort)-250(algorithm)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -23.85 -19.808 Td [(call)-525(psb_isort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_msort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_qsort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_hsort\050x,ix,dir,flag,reord\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 575.819 Tm [(These)-314(serial)-313(r)17(outines)-313(sort)-314(a)-314(sequence)]TJ/F78 9.9626 Tf 1 0 0 1 335.711 575.819 Tm [(X)]TJ/F84 9.9626 Tf 1.02 0 0 1 346.436 575.819 Tm [(into)-314(ascending)-313(or)-314(descending)-314(or)18(-)]TJ 1.02 0 0 1 150.705 563.864 Tm [(der)73(.)-328(The)-253(ar)18(gument)-253(meaning)-253(is)-253(identical)-253(for)-253(all)-253(calls;)-257(the)-253(only)-253(dif)17(f)1(er)17(ence)-253(is)-253(the)]TJ 1 0 0 1 150.705 551.909 Tm [(algorithm)-250(used)-250(to)-250(accomplish)-250(the)-250(task)-250(\050see)-250(Usage)-250(Notes)-250(below\051.)]TJ +/F147 9.9626 Tf -23.85 -19.808 Td [(call)-525(psb_isort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_msort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_qsort\050x,ix,dir,flag,reord\051)]TJ 0 -11.955 Td [(call)-525(psb_hsort\050x,ix,dir,flag,reord\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 575.819 Tm [(These)-314(serial)-313(r)17(outines)-313(sort)-314(a)-314(sequence)]TJ/F78 9.9626 Tf 1 0 0 1 335.711 575.819 Tm [(X)]TJ/F84 9.9626 Tf 1.02 0 0 1 346.436 575.819 Tm [(into)-314(ascending)-313(or)-314(descending)-314(or)18(-)]TJ 1.02 0 0 1 150.705 563.864 Tm [(der)73(.)-328(The)-253(ar)18(gument)-253(meaning)-253(is)-253(identical)-253(for)-253(all)-253(calls;)-257(the)-253(only)-253(dif)17(f)1(er)17(ence)-253(is)-253(the)]TJ 1 0 0 1 150.705 551.909 Tm [(algorithm)-250(used)-250(to)-250(accomplish)-250(the)-250(task)-250(\050see)-250(Usage)-250(Notes)-250(below\051.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -19.808 Td [(T)90(ype:)]TJ 0 g 0 G @@ -21956,7 +21966,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.906 -19.866 Td [(ix)]TJ 0 g 0 G -/F84 9.9626 Tf 12.891 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.707 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 424.682 Tm [(Speci\002ed)-198(as:)-288(an)-198(integer)-198(array)-198(of)-198(\050at)-198(least\051)-198(t)1(he)-198(same)-198(size)-198(as)]TJ/F78 9.9626 Tf 1 0 0 1 418.918 424.682 Tm [(X)]TJ/F84 9.9626 Tf 0.98 0 0 1 426.455 424.682 Tm [(.)-297(This)-198(ar)18(gument)]TJ 1 0 0 1 175.611 412.726 Tm [(is)-250(r)18(equir)18(ed)-250(when)]TJ/F78 9.9626 Tf 76.926 0 Td [(r)-17(e)-25(o)-25(r)-17(d)]TJ/F192 10.3811 Tf 24.884 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ +/F84 9.9626 Tf 12.891 0 Td [(A)-250(vector)-250(of)-250(indices.)]TJ 11.707 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 424.682 Tm [(Speci\002ed)-198(as:)-288(an)-198(integer)-198(array)-198(of)-198(\050at)-198(least\051)-198(t)1(he)-198(same)-198(size)-198(as)]TJ/F78 9.9626 Tf 1 0 0 1 418.918 424.682 Tm [(X)]TJ/F84 9.9626 Tf 0.98 0 0 1 426.455 424.682 Tm [(.)-297(This)-198(ar)18(gument)]TJ 1 0 0 1 175.611 412.726 Tm [(is)-250(r)18(equir)18(ed)-250(when)]TJ/F78 9.9626 Tf 76.926 0 Td [(r)-17(e)-25(o)-25(r)-17(d)]TJ/F197 10.3811 Tf 24.884 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ ET q 1 0 0 1 303.745 412.926 cm @@ -21992,26 +22002,26 @@ BT 0 g 0 G /F75 9.9626 Tf 0 -19.867 Td [(Integer)-250(and)-250(real)-250(data:)]TJ 0 g 0 G -/F145 9.9626 Tf 101.28 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 339.655 349.083 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 345.778 349.083 Tm [(psb_sort_down_)]TJ/F84 9.9626 Tf 1.02 0 0 1 419.003 349.083 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 425.126 349.083 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 349.083 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 197.529 337.128 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 78.455 0 Td [(;)-250(default)]TJ/F145 9.9626 Tf 38.784 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 62.765 0 Td [(.)]TJ +/F147 9.9626 Tf 101.28 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 339.655 349.083 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 345.778 349.083 Tm [(psb_sort_down_)]TJ/F84 9.9626 Tf 1.02 0 0 1 419.003 349.083 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 425.126 349.083 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 1.02 0 0 1 493.121 349.083 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 197.529 337.128 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 78.455 0 Td [(;)-250(default)]TJ/F147 9.9626 Tf 38.784 0 Td [(psb_sort_up_)]TJ/F84 9.9626 Tf 62.765 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -201.922 -15.881 Td [(Complex)-250(data:)]TJ 0 g 0 G -/F145 9.9626 Tf 70.287 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 313.892 321.247 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 318.345 321.247 Tm [(psb_lsort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.8 321.247 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 401.254 321.247 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 469.248 321.247 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 473.701 321.247 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 552.157 321.247 Tm [(;)]TJ 1 0 0 1 197.529 309.292 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 67.994 0 Td [(.)]TJ +/F147 9.9626 Tf 70.287 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 313.892 321.247 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 318.345 321.247 Tm [(psb_lsort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.8 321.247 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 401.254 321.247 Tm [(psb_asort_up_)]TJ/F84 9.9626 Tf 0.98 0 0 1 469.248 321.247 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 473.701 321.247 Tm [(psb_asort_down_)]TJ/F84 9.9626 Tf 0.98 0 0 1 552.157 321.247 Tm [(;)]TJ 1 0 0 1 197.529 309.292 Tm [(default)]TJ/F147 9.9626 Tf 33.803 0 Td [(psb_lsort_up_)]TJ/F84 9.9626 Tf 67.994 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -148.621 -19.867 Td [(\003ag)]TJ 0 g 0 G -/F84 9.9626 Tf 21.091 0 Td [(Whether)-250(to)-250(keep)-250(the)-250(original)-250(values)-250(in)]TJ/F78 9.9626 Tf 171.519 0 Td [(I)-81(X)]TJ/F84 9.9626 Tf 11.661 0 Td [(.)]TJ -179.673 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 265.515 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 301.54 265.515 Tm [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 265.515 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 403.429 265.515 Tm [(psb_sort_keep_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 497.575 265.515 Tm [(;)]TJ 1 0 0 1 175.611 253.56 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ +/F84 9.9626 Tf 21.091 0 Td [(Whether)-250(to)-250(keep)-250(the)-250(original)-250(values)-250(in)]TJ/F78 9.9626 Tf 171.519 0 Td [(I)-81(X)]TJ/F84 9.9626 Tf 11.661 0 Td [(.)]TJ -179.673 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 265.515 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F147 9.9626 Tf 1 0 0 1 301.54 265.515 Tm [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 265.515 Tm [(or)]TJ/F147 9.9626 Tf 1 0 0 1 403.429 265.515 Tm [(psb_sort_keep_idx_)]TJ/F84 9.9626 Tf 0.98 0 0 1 497.575 265.515 Tm [(;)]TJ 1 0 0 1 175.611 253.56 Tm [(default)]TJ/F147 9.9626 Tf 33.803 0 Td [(psb_sort_ovw_idx_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -147.625 -19.866 Td [(reord)]TJ 0 g 0 G -/F84 9.9626 Tf 0.984 0 0 1 179.546 233.694 Tm [(Whether)-253(to)-254(r)19(eor)18(der)-253(the)-254(input)-253(vector)]TJ/F78 9.9626 Tf 1 0 0 1 337.115 233.694 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 344.804 233.694 Tm [(or)-253(just)-254(r)19(eturn)]TJ/F78 9.9626 Tf 1 0 0 1 404.732 233.694 Tm [(I)-81(X)]TJ/F84 9.9626 Tf 0.984 0 0 1 418.877 233.694 Tm [(for)-253(further)-254(usage.)]TJ 1 0 0 1 175.303 221.738 Tm [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 209.783 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F145 9.9626 Tf 1 0 0 1 301.54 209.783 Tm [(psb_sort_reord_x_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 209.783 Tm [(or)]TJ/F145 9.9626 Tf 1 0 0 1 403.429 209.783 Tm [(psb_sort_noreord_x_)]TJ/F84 9.9626 Tf 0.98 0 0 1 502.806 209.783 Tm [(;)]TJ 1 0 0 1 175.611 197.828 Tm [(default)]TJ/F145 9.9626 Tf 33.803 0 Td [(psb_sort_reord_x_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ +/F84 9.9626 Tf 0.984 0 0 1 179.546 233.694 Tm [(Whether)-253(to)-254(r)19(eor)18(der)-253(the)-254(input)-253(vector)]TJ/F78 9.9626 Tf 1 0 0 1 337.115 233.694 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 344.804 233.694 Tm [(or)-253(just)-254(r)19(eturn)]TJ/F78 9.9626 Tf 1 0 0 1 404.732 233.694 Tm [(I)-81(X)]TJ/F84 9.9626 Tf 0.984 0 0 1 418.877 233.694 Tm [(for)-253(further)-254(usage.)]TJ 1 0 0 1 175.303 221.738 Tm [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 0.98 0 0 1 175.611 209.783 Tm [(Speci\002ed)-194(as:)-286(an)-193(integer)-194(value)]TJ/F147 9.9626 Tf 1 0 0 1 301.54 209.783 Tm [(psb_sort_reord_x_)]TJ/F84 9.9626 Tf 0.98 0 0 1 392.349 209.783 Tm [(or)]TJ/F147 9.9626 Tf 1 0 0 1 403.429 209.783 Tm [(psb_sort_noreord_x_)]TJ/F84 9.9626 Tf 0.98 0 0 1 502.806 209.783 Tm [(;)]TJ 1 0 0 1 175.611 197.828 Tm [(default)]TJ/F147 9.9626 Tf 33.803 0 Td [(psb_sort_reord_x_)]TJ/F84 9.9626 Tf 88.916 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -147.625 -21.771 Td [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G 0 -19.866 Td [(x)]TJ 0 g 0 G -/F84 9.9626 Tf 0.984 0 0 1 160.359 156.191 Tm [(The)-254(sequence)-254(of)-254(values;)-254(if)]TJ/F145 9.9626 Tf 1 0 0 1 274.16 156.191 Tm [(reord=psb_sort_reord_x_)]TJ/F84 9.9626 Tf 0.984 0 0 1 396.947 156.191 Tm [(it)-254(will)-254(be)-254(in)-254(the)-254(chosen)]TJ 1 0 0 1 175.611 144.236 Tm [(or)18(dering.)]TJ -0.308 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ +/F84 9.9626 Tf 0.984 0 0 1 160.359 156.191 Tm [(The)-254(sequence)-254(of)-254(values;)-254(if)]TJ/F147 9.9626 Tf 1 0 0 1 274.16 156.191 Tm [(reord=psb_sort_reord_x_)]TJ/F84 9.9626 Tf 0.984 0 0 1 396.947 156.191 Tm [(it)-254(will)-254(be)-254(in)-254(the)-254(chosen)]TJ 1 0 0 1 175.611 144.236 Tm [(or)18(dering.)]TJ -0.308 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(,)-250(r)18(eal)-250(or)-250(complex)-250(array)-250(of)-250(rank)-250(1.)]TJ 0 g 0 G 139.477 -29.888 Td [(110)]TJ 0 g 0 G @@ -22019,9 +22029,9 @@ ET endstream endobj -1746 0 obj +1747 0 obj << -/Length 11593 +/Length 11603 >> stream 0 g 0 G @@ -22046,7 +22056,7 @@ BT 0 g 0 G -12.453 -19.926 Td [(4.)]TJ 0 g 0 G - 0.99 0 0 1 124.802 484.958 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 133.93 484.958 Tm [(r)-17(e)-25(o)-25(r)-17(d)]TJ/F192 10.3811 Tf 24.891 0 Td [(=)]TJ/F78 9.9626 Tf 11.642 0 Td [(p)-25(s)-25(b)]TJ + 0.99 0 0 1 124.802 484.958 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 133.93 484.958 Tm [(r)-17(e)-25(o)-25(r)-17(d)]TJ/F197 10.3811 Tf 24.891 0 Td [(=)]TJ/F78 9.9626 Tf 11.642 0 Td [(p)-25(s)-25(b)]TJ ET q 1 0 0 1 185.152 485.158 cm @@ -22078,7 +22088,7 @@ BT 0 g 0 G -12.453 -19.925 Td [(5.)]TJ 0 g 0 G - 0.98 0 0 1 124.802 441.123 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 135.146 441.123 Tm [(f)-160(l)-70(a)-47(g)]TJ/F192 10.3811 Tf 20.72 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ + 0.98 0 0 1 124.802 441.123 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 135.146 441.123 Tm [(f)-160(l)-70(a)-47(g)]TJ/F197 10.3811 Tf 20.72 0 Td [(=)]TJ/F78 9.9626 Tf 11.634 0 Td [(p)-25(s)-25(b)]TJ ET q 1 0 0 1 182.189 441.322 cm @@ -22106,11 +22116,11 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F84 9.9626 Tf 0.98 0 0 1 246.101 441.123 Tm [(then)-244(the)-244(entries)-244(in)]TJ/F78 9.9626 Tf 1 0 0 1 326.032 441.123 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.587 0 Td [(\050)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.769 441.123 Tm [(1)]TJ 1 0 0 1 346.542 441.123 Tm [(:)]TJ/F78 9.9626 Tf 5.507 0 Td [(n)]TJ/F192 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.37 441.123 Tm [(wher)18(e)]TJ/F78 9.9626 Tf 1 0 0 1 393.733 441.123 Tm [(n)]TJ/F84 9.9626 Tf 0.98 0 0 1 401.779 441.123 Tm [(is)-244(the)-244(size)]TJ 0.984 0 0 1 124.802 429.167 Tm [(of)]TJ/F78 9.9626 Tf 1 0 0 1 136.206 429.167 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 143.904 429.167 Tm [(ar)18(e)-254(initialized)-254(to)]TJ/F78 9.9626 Tf 1 0 0 1 216.929 429.167 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.588 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F190 10.3811 Tf 7.046 0 Td [(\040)]TJ/F78 9.9626 Tf 13.332 0 Td [(i)]TJ/F84 9.9626 Tf 0.984 0 0 1 256.15 429.167 Tm [(;)-254(thus,)-255(upon)-254(r)18(eturn)-254(fr)18(om)-254(the)-254(subr)18(outine,)-254(for)]TJ 1.02 0 0 1 124.802 417.212 Tm [(each)-260(index)]TJ/F78 9.9626 Tf 1 0 0 1 175.703 417.212 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 181.308 417.212 Tm [(we)-260(have)-260(in)]TJ/F78 9.9626 Tf 1 0 0 1 233.102 417.212 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.588 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 255.772 417.212 Tm [(the)-260(position)-260(that)-260(the)-259(item)]TJ/F78 9.9626 Tf 1 0 0 1 371.842 417.212 Tm [(x)]TJ/F192 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F192 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 391.255 417.212 Tm [(occupied)-260(in)]TJ 1 0 0 1 124.802 405.257 Tm [(the)-250(original)-250(data)-250(sequence;)]TJ +/F84 9.9626 Tf 0.98 0 0 1 246.101 441.123 Tm [(then)-244(the)-244(entries)-244(in)]TJ/F78 9.9626 Tf 1 0 0 1 326.032 441.123 Tm [(i)-49(x)]TJ/F197 10.3811 Tf 8.587 0 Td [(\050)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.769 441.123 Tm [(1)]TJ 1 0 0 1 346.542 441.123 Tm [(:)]TJ/F78 9.9626 Tf 5.507 0 Td [(n)]TJ/F197 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.37 441.123 Tm [(wher)18(e)]TJ/F78 9.9626 Tf 1 0 0 1 393.733 441.123 Tm [(n)]TJ/F84 9.9626 Tf 0.98 0 0 1 401.779 441.123 Tm [(is)-244(the)-244(size)]TJ 0.984 0 0 1 124.802 429.167 Tm [(of)]TJ/F78 9.9626 Tf 1 0 0 1 136.206 429.167 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 143.904 429.167 Tm [(ar)18(e)-254(initialized)-254(to)]TJ/F78 9.9626 Tf 1 0 0 1 216.929 429.167 Tm [(i)-49(x)]TJ/F197 10.3811 Tf 8.588 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F195 10.3811 Tf 7.046 0 Td [(\040)]TJ/F78 9.9626 Tf 13.332 0 Td [(i)]TJ/F84 9.9626 Tf 0.984 0 0 1 256.15 429.167 Tm [(;)-254(thus,)-255(upon)-254(r)18(eturn)-254(fr)18(om)-254(the)-254(subr)18(outine,)-254(for)]TJ 1.02 0 0 1 124.802 417.212 Tm [(each)-260(index)]TJ/F78 9.9626 Tf 1 0 0 1 175.703 417.212 Tm [(i)]TJ/F84 9.9626 Tf 1.02 0 0 1 181.308 417.212 Tm [(we)-260(have)-260(in)]TJ/F78 9.9626 Tf 1 0 0 1 233.102 417.212 Tm [(i)-49(x)]TJ/F197 10.3811 Tf 8.588 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 255.772 417.212 Tm [(the)-260(position)-260(that)-260(the)-259(item)]TJ/F78 9.9626 Tf 1 0 0 1 371.842 417.212 Tm [(x)]TJ/F197 10.3811 Tf 5.33 0 Td [(\050)]TJ/F78 9.9626 Tf 4.204 0 Td [(i)]TJ/F197 10.3811 Tf 3.088 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 391.255 417.212 Tm [(occupied)-260(in)]TJ 1 0 0 1 124.802 405.257 Tm [(the)-250(original)-250(data)-250(sequence;)]TJ 0 g 0 G -12.453 -19.925 Td [(6.)]TJ 0 g 0 G - 1.02 0 0 1 124.802 385.332 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 136.291 385.332 Tm [(f)-160(l)-70(a)-47(g)]TJ/F192 10.3811 Tf 22.147 0 Td [(=)]TJ/F78 9.9626 Tf 13.061 0 Td [(p)-25(s)-25(b)]TJ + 1.02 0 0 1 124.802 385.332 Tm [(If)]TJ/F78 9.9626 Tf 1 0 0 1 136.291 385.332 Tm [(f)-160(l)-70(a)-47(g)]TJ/F197 10.3811 Tf 22.147 0 Td [(=)]TJ/F78 9.9626 Tf 13.061 0 Td [(p)-25(s)-25(b)]TJ ET q 1 0 0 1 186.188 385.531 cm @@ -22138,27 +22148,27 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F84 9.9626 Tf 1.02 0 0 1 252.283 385.332 Tm [(the)-321(r)18(outine)-321(will)-321(assume)-321(that)-321(the)-321(entries)-321(in)]TJ/F78 9.9626 Tf 1 0 0 1 124.857 373.377 Tm [(i)-49(x)]TJ/F192 10.3811 Tf 8.587 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)]TJ/F192 10.3811 Tf 2.74 0 Td [(\051)]TJ/F84 9.9626 Tf 6.64 0 Td [(have)-250(alr)18(eady)-250(been)-250(initialized)-250(by)-250(the)-250(user;)]TJ +/F84 9.9626 Tf 1.02 0 0 1 252.283 385.332 Tm [(the)-321(r)18(outine)-321(will)-321(assume)-321(that)-321(the)-321(entries)-321(in)]TJ/F78 9.9626 Tf 1 0 0 1 124.857 373.377 Tm [(i)-49(x)]TJ/F197 10.3811 Tf 8.587 0 Td [(\050)]TJ/F84 9.9626 Tf 4.274 0 Td [(:)]TJ/F197 10.3811 Tf 2.74 0 Td [(\051)]TJ/F84 9.9626 Tf 6.64 0 Td [(have)-250(alr)18(eady)-250(been)-250(initialized)-250(by)-250(the)-250(user;)]TJ 0 g 0 G -34.749 -19.926 Td [(7.)]TJ 0 g 0 G - 0.98 0 0 1 124.493 353.451 Tm [(Thr)18(ee)-256(sorting)-256(algorithms)-256(have)-256(a)-256(similar)]TJ/F78 9.9626 Tf 1 0 0 1 296.993 353.451 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.662 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 344.691 353.451 Tm [(expected)-256(r)8(unning)-256(time,)]TJ 1.017 0 0 1 124.384 341.496 Tm [(wher)18(eas)-247(insertion)-246(sort)-247(has)-246(an)-247(expected)-246(r)8(unning)-247(time)]TJ/F78 9.9626 Tf 1 0 0 1 360.734 341.496 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 387.23 341.496 Tm [(;)-247(of)-246(the)-247(other)]TJ 0.999 0 0 1 124.802 329.541 Tm [(thr)18(ee,)-250(in)-250(the)-249(average)-250(case)-250(quicksort)-250(will)-249(be)-250(the)-250(fastest)-250(and)-249(mer)18(ge-sort)-250(the)]TJ 1 0 0 1 124.802 317.586 Tm [(slowest.)-310(However)-250(note)-250(that:)]TJ + 0.98 0 0 1 124.493 353.451 Tm [(Thr)18(ee)-256(sorting)-256(algorithms)-256(have)-256(a)-256(similar)]TJ/F78 9.9626 Tf 1 0 0 1 296.993 353.451 Tm [(O)]TJ/F197 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.662 0 Td [(n)]TJ/F197 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 344.691 353.451 Tm [(expected)-256(r)8(unning)-256(time,)]TJ 1.017 0 0 1 124.384 341.496 Tm [(wher)18(eas)-247(insertion)-246(sort)-247(has)-246(an)-247(expected)-246(r)8(unning)-247(time)]TJ/F78 9.9626 Tf 1 0 0 1 360.734 341.496 Tm [(O)]TJ/F197 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F197 10.3811 Tf 4.408 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.017 0 0 1 387.23 341.496 Tm [(;)-247(of)-246(the)-247(other)]TJ 0.999 0 0 1 124.802 329.541 Tm [(thr)18(ee,)-250(in)-250(the)-249(average)-250(case)-250(quicksort)-250(will)-249(be)-250(the)-250(fastest)-250(and)-249(mer)18(ge-sort)-250(the)]TJ 1 0 0 1 124.802 317.586 Tm [(slowest.)-310(However)-250(note)-250(that:)]TJ 0 g 0 G 5.32 -19.925 Td [(\050a\051)]TJ 0 g 0 G - 1.02 0 0 1 146.411 297.661 Tm [(The)-274(the)-273(best)-274(case)-274(r)8(unning)-274(ti)1(me)-274(for)-274(insertion)-274(so)1(rt)-274(is)]TJ/F243 9.9626 Tf 1 0 0 1 376.039 297.661 Tm [(W)]TJ/F192 10.3811 Tf 8.528 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F192 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 401.56 297.661 Tm [(while)-274(the)]TJ 1.02 0 0 1 146.72 285.705 Tm [(average)-359(and)-360(worst)-359(case)-359(ar)17(e)]TJ/F78 9.9626 Tf 1 0 0 1 275.57 285.705 Tm [(O)]TJ/F192 10.3811 Tf 7.999 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F192 10.3811 Tf 4.409 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 302.065 285.705 Tm [(;)-416(however)-360(for)-359(very)-359(short)-360(input)]TJ 1 0 0 1 146.72 273.75 Tm [(sequences)-250(this)-250(is)-250(likely)-250(to)-250(be)-250(the)-250(fastest)-250(method;)]TJ + 1.02 0 0 1 146.411 297.661 Tm [(The)-286(best)-287(case)-286(r)8(unning)-286(time)-287(for)-286(insertion)-286(sort)-287(is)]TJ/F241 9.9626 Tf 1 0 0 1 360.32 297.661 Tm [(W)]TJ/F197 10.3811 Tf 8.528 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F197 10.3811 Tf 5.789 0 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 385.97 297.661 Tm [(while)-286(the)-287(av-)]TJ 1.02 0 0 1 146.72 285.705 Tm [(erage)-277(and)-278(worst)-277(case)-277(ar)18(e)]TJ/F78 9.9626 Tf 1 0 0 1 260.579 285.705 Tm [(O)]TJ/F197 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.617 Td [(2)]TJ/F197 10.3811 Tf 4.408 -3.617 Td [(\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 287.075 285.705 Tm [(;)-293(mor)17(eover)73(,)-285(for)-278(very)-277(short)-277(input)-278(se-)]TJ 1 0 0 1 146.441 273.75 Tm [(quences)-250(this)-250(is)-250(likely)-250(to)-250(be)-250(the)-250(fastest)-250(method;)]TJ 0 g 0 G - -17.126 -15.94 Td [(\050b\051)]TJ + -16.847 -15.94 Td [(\050b\051)]TJ 0 g 0 G - 0.98 0 0 1 146.411 257.81 Tm [(The)-241(worst)-240(case)-241(r)8(unning)-241(time)-240(for)-241(quicksort)-241(is)]TJ/F78 9.9626 Tf 1 0 0 1 338.306 257.81 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.616 Td [(2)]TJ/F192 10.3811 Tf 4.408 -3.616 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.802 257.81 Tm [(;)-245(the)-241(algorithm)-241(im-)]TJ 1.007 0 0 1 146.421 245.855 Tm [(plemented)-246(her)18(e)-246(follows)-246(the)-246(well-known)-246(median-of-thr)18(ee)-246(heuristics,)]TJ 1 0 0 1 146.72 233.9 Tm [(but)-250(the)-250(worst)-250(case)-250(may)-250(still)-250(apply;)]TJ + 0.98 0 0 1 146.411 257.81 Tm [(The)-241(worst)-240(case)-241(r)8(unning)-241(time)-240(for)-241(quicksort)-241(is)]TJ/F78 9.9626 Tf 1 0 0 1 338.306 257.81 Tm [(O)]TJ/F197 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 7.5716 Tf 5.664 3.616 Td [(2)]TJ/F197 10.3811 Tf 4.408 -3.616 Td [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.802 257.81 Tm [(;)-245(the)-241(algorithm)-241(im-)]TJ 1.007 0 0 1 146.421 245.855 Tm [(plemented)-246(her)18(e)-246(follows)-246(the)-246(well-known)-246(median-of-thr)18(ee)-246(heuristics,)]TJ 1 0 0 1 146.72 233.9 Tm [(but)-250(the)-250(worst)-250(case)-250(may)-250(still)-250(apply;)]TJ 0 g 0 G -16.04 -15.94 Td [(\050c\051)]TJ 0 g 0 G - 0.98 0 0 1 146.411 217.96 Tm [(The)-194(worst)-194(case)-194(r)9(unning)-194(time)-194(for)-194(mer)18(ge-sort)-193(and)-194(heap-sort)-194(is)]TJ/F78 9.9626 Tf 1 0 0 1 402.204 217.96 Tm [(O)]TJ/F192 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.663 0 Td [(n)]TJ/F192 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf -296.533 -11.956 Td [(as)-250(the)-250(average)-250(case;)]TJ + 0.98 0 0 1 146.411 217.96 Tm [(The)-194(worst)-194(case)-194(r)9(unning)-194(time)-194(for)-194(mer)18(ge-sort)-193(and)-194(heap-sort)-194(is)]TJ/F78 9.9626 Tf 1 0 0 1 402.204 217.96 Tm [(O)]TJ/F197 10.3811 Tf 8 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(n)]TJ/F84 9.9626 Tf 7.324 0 Td [(log)]TJ/F78 9.9626 Tf 15.663 0 Td [(n)]TJ/F197 10.3811 Tf 5.788 0 Td [(\051)]TJ/F84 9.9626 Tf -296.533 -11.956 Td [(as)-250(the)-250(average)-250(case;)]TJ 0 g 0 G -17.704 -15.94 Td [(\050d\051)]TJ 0 g 0 G - 1.005 0 0 1 146.411 190.064 Tm [(The)-249(mer)18(ge-sort)-249(algorithm)-249(is)-249(implemented)-249(to)-250(take)-249(advantage)-249(of)-249(sub-)]TJ 1.02 0 0 1 146.72 178.109 Tm [(sequences)-260(that)-261(may)-261(be)-260(alr)18(eady)-261(in)-260(the)-261(desir)18(ed)-261(or)18(dering)-261(prior)-260(to)-261(the)]TJ 1.02 0 0 1 146.72 166.154 Tm [(subr)18(outine)-321(call;)-358(this)-321(situation)-320(is)-321(r)18(elatively)-321(common)-320(when)-321(dealing)]TJ 0.98 0 0 1 146.301 154.199 Tm [(with)-239(gr)18(oups)-240(of)-239(indices)-239(of)-240(sparse)-239(matrix)-240(entries,)-242(thus)-240(mer)19(ge-sort)-240(is)-239(the)]TJ 1.02 0 0 1 146.421 142.243 Tm [(pr)18(eferr)17(ed)-268(choice)-268(when)-268(a)-268(sorting)-268(is)-268(needed)-268(by)-269(other)-268(r)18(outines)-268(in)-268(the)]TJ 1 0 0 1 146.72 130.288 Tm [(library)111(.)]TJ + 1.005 0 0 1 146.411 190.064 Tm [(The)-249(mer)18(ge-sort)-249(algorithm)-249(is)-249(implemented)-249(to)-250(take)-249(advantage)-249(of)-249(sub-)]TJ 1.02 0 0 1 146.72 178.109 Tm [(sequences)-260(that)-261(may)-261(be)-260(alr)18(eady)-261(in)-260(the)-261(desir)18(ed)-261(or)18(dering)-261(prior)-260(to)-261(the)]TJ 1.02 0 0 1 146.72 166.154 Tm [(subr)18(outine)-321(call;)-358(this)-321(situation)-320(is)-321(r)18(elatively)-321(common)-320(when)-321(dealing)]TJ 0.98 0 0 1 146.301 154.199 Tm [(with)-239(gr)18(oups)-240(of)-239(indices)-239(of)-240(sparse)-239(matrix)-240(entries,)-242(thus)-240(mer)19(ge-sort)-240(is)-239(the)]TJ 0.998 0 0 1 146.421 142.243 Tm [(pr)18(eferr)18(ed)-251(choice)-251(when)-252(a)-251(sorting)-251(r)18(outine)-251(is)-252(needed)-251(for)-251(pr)18(epr)18(ocessing)]TJ 1 0 0 1 146.72 130.288 Tm [(matrix)-250(data.)]TJ 0 g 0 G 117.559 -39.85 Td [(111)]TJ 0 g 0 G @@ -22166,7 +22176,7 @@ ET endstream endobj -1761 0 obj +1762 0 obj << /Length 172 >> @@ -22182,7 +22192,7 @@ ET endstream endobj -1765 0 obj +1766 0 obj << /Length 6837 >> @@ -22200,7 +22210,7 @@ BT /F75 11.9552 Tf 151.016 706.129 Td [(init)-250(\227)-250(Initializes)-250(PSBLAS)-250(parallel)-250(environment)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_init\050ctxt,)-525(np,)-525(basectxt,)-525(ids,)-525(extcomm\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 669.261 Tm [(This)-354(subr)18(outine)-353(initializes)-354(the)-354(PSBLAS)-353(parallel)-354(envir)18(onment,)-381(de\002ning)-353(a)]TJ 1 0 0 1 99.616 657.306 Tm [(virtual)-250(parallel)-250(machine.)]TJ +/F147 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_init\050ctxt,)-525(np,)-525(basectxt,)-525(ids,)-525(extcomm\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 669.261 Tm [(This)-354(subr)18(outine)-353(initializes)-354(the)-354(PSBLAS)-353(parallel)-354(envir)18(onment,)-381(de\002ning)-353(a)]TJ 1 0 0 1 99.616 657.306 Tm [(virtual)-250(parallel)-250(machine.)]TJ 0 g 0 G /F75 9.9626 Tf 0.279 -16.715 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22233,7 +22243,7 @@ BT 0 g 0 G /F75 9.9626 Tf -277.188 -18.32 Td [(ids)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 118.705 459.715 Tm [(Identities)-374(of)-374(the)-374(pr)18(ocesses)-374(to)-374(use)-374(for)-374(t)1(he)-374(new)-374(context;)-439(the)-373(ar)17(gument)-374(is)]TJ 1.02 0 0 1 124.802 447.76 Tm [(ignor)18(ed)-287(when)]TJ/F145 9.9626 Tf 1 0 0 1 190.771 447.76 Tm [(np)]TJ/F84 9.9626 Tf 1.02 0 0 1 204.14 447.76 Tm [(is)-286(not)-286(speci\002ed.)-428(This)-286(allows)-286(the)-286(pr)17(ocesses)-286(in)-286(the)-286(new)]TJ 1 0 0 1 124.802 435.805 Tm [(envir)18(onment)-250(to)-250(be)-250(in)-250(an)-250(or)18(der)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(original)-250(one.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)-560(Default:)-310(use)-250(the)-250(indices)]TJ/F192 10.3811 Tf 240.57 0 Td [(\050)]TJ/F84 9.9626 Tf 4.149 0 Td [(0)-179(.)-192(.)-192(.)]TJ/F78 9.9626 Tf 19.967 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1)]TJ/F192 10.3811 Tf 5.106 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 118.705 459.715 Tm [(Identities)-374(of)-374(the)-374(pr)18(ocesses)-374(to)-374(use)-374(for)-374(t)1(he)-374(new)-374(context;)-439(the)-373(ar)17(gument)-374(is)]TJ 1.02 0 0 1 124.802 447.76 Tm [(ignor)18(ed)-287(when)]TJ/F147 9.9626 Tf 1 0 0 1 190.771 447.76 Tm [(np)]TJ/F84 9.9626 Tf 1.02 0 0 1 204.14 447.76 Tm [(is)-286(not)-286(speci\002ed.)-428(This)-286(allows)-286(the)-286(pr)17(ocesses)-286(in)-286(the)-286(new)]TJ 1 0 0 1 124.802 435.805 Tm [(envir)18(onment)-250(to)-250(be)-250(in)-250(an)-250(or)18(der)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(original)-250(one.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(array)111(.)-560(Default:)-310(use)-250(the)-250(indices)]TJ/F197 10.3811 Tf 240.57 0 Td [(\050)]TJ/F84 9.9626 Tf 4.149 0 Td [(0)-179(.)-192(.)-192(.)]TJ/F78 9.9626 Tf 19.967 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1)]TJ/F197 10.3811 Tf 5.106 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -322.483 -18.319 Td [(extcomm)]TJ 0 g 0 G @@ -22258,7 +22268,7 @@ BT 0 g 0 G 0 -18.32 Td [(ctxt)]TJ 0 g 0 G -/F84 9.9626 Tf 1.01 0 0 1 120.916 273.665 Tm [(the)-246(communication)-245(context)-246(identifying)-246(the)-245(virtual)-246(parallel)-245(machine,)-247(t)1(ype)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 261.71 Tm [(psb_ctxt_type)]TJ/F84 9.9626 Tf 1.004 0 0 1 192.796 261.71 Tm [(.)-310(Note)-249(that)-250(this)-249(is)-249(always)-250(a)-249(duplicate)-249(of)]TJ/F145 9.9626 Tf 1 0 0 1 367.227 261.71 Tm [(basectxt)]TJ/F84 9.9626 Tf 1.004 0 0 1 409.07 261.71 Tm [(,)-249(so)-250(that)]TJ 0.985 0 0 1 124.802 249.754 Tm [(library)-255(communications)-256(ar)19(e)-256(completely)-255(separated)-256(fr)19(om)-256(other)-255(communica-)]TJ 1 0 0 1 124.802 237.799 Tm [(tion)-250(operations.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.744 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable.)]TJ/F75 11.9552 Tf -24.907 -17.904 Td [(Notes)]TJ +/F84 9.9626 Tf 1.01 0 0 1 120.916 273.665 Tm [(the)-246(communication)-245(context)-246(identifying)-246(the)-245(virtual)-246(parallel)-245(machine,)-247(t)1(ype)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 261.71 Tm [(psb_ctxt_type)]TJ/F84 9.9626 Tf 1.004 0 0 1 192.796 261.71 Tm [(.)-310(Note)-249(that)-250(this)-249(is)-249(always)-250(a)-249(duplicate)-249(of)]TJ/F147 9.9626 Tf 1 0 0 1 367.227 261.71 Tm [(basectxt)]TJ/F84 9.9626 Tf 1.004 0 0 1 409.07 261.71 Tm [(,)-249(so)-250(that)]TJ 0.985 0 0 1 124.802 249.754 Tm [(library)-255(communications)-256(ar)19(e)-256(completely)-255(separated)-256(fr)19(om)-256(other)-255(communica-)]TJ 1 0 0 1 124.802 237.799 Tm [(tion)-250(operations.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.744 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable.)]TJ/F75 11.9552 Tf -24.907 -17.904 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.454 -16.714 Td [(1.)]TJ 0 g 0 G @@ -22274,9 +22284,9 @@ ET endstream endobj -1771 0 obj +1772 0 obj << -/Length 4738 +/Length 4732 >> stream 0 g 0 G @@ -22292,7 +22302,7 @@ BT /F75 11.9552 Tf 0.996 0 0 1 201.745 706.129 Tm [(info)-250(\227)-249(Return)-250(information)-250(about)-249(PSBLAS)-250(parallel)-250(en-)]TJ 1 0 0 1 177.269 692.181 Tm [(vironment)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -26.564 -18.964 Td [(call)-525(psb_info\050ctxt,)-525(iam,)-525(np\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 165.649 651.3 Tm [(This)-224(subr)19(outine)-224(r)19(eturns)-224(information)-223(about)-224(the)-223(PSBLAS)-224(parallel)-224(envi)1(r)18(onment,)]TJ 1 0 0 1 150.705 639.344 Tm [(de\002ning)-250(a)-250(virtual)-250(parallel)-250(machine.)]TJ +/F147 9.9626 Tf -26.564 -18.964 Td [(call)-525(psb_info\050ctxt,)-525(iam,)-525(np\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 165.649 651.3 Tm [(This)-224(subr)19(outine)-224(r)19(eturns)-224(information)-223(about)-224(the)-223(PSBLAS)-224(parallel)-224(envi)1(r)18(onment,)]TJ 1 0 0 1 150.705 639.344 Tm [(de\002ning)-250(a)-250(virtual)-250(parallel)-250(machine.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22310,19 +22320,19 @@ BT 0 g 0 G 0 -19.925 Td [(iam)]TJ 0 g 0 G -/F84 9.9626 Tf 22.137 0 Td [(Identi\002er)-250(of)-250(curr)18(ent)-250(pr)18(ocess)-250(in)-250(the)-250(PSBLAS)-250(virtual)-250(parallel)-250(machine.)]TJ 2.769 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.745 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)]TJ/F190 10.3811 Tf 134.191 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F190 10.3811 Tf 7.873 0 Td [(\024)]TJ/F78 9.9626 Tf 11.016 0 Td [(i)-47(a)-25(m)]TJ/F190 10.3811 Tf 18.678 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1)]TJ +/F84 9.9626 Tf 22.137 0 Td [(Identi\002er)-250(of)-250(curr)18(ent)-250(pr)18(ocess)-250(in)-250(the)-250(PSBLAS)-250(virtual)-250(parallel)-250(machine.)]TJ 2.769 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.745 -11.955 Td [(Returned)-250(as:)-310(an)-250(integer)-250(value.)]TJ/F195 10.3811 Tf 135.267 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F195 10.3811 Tf 7.873 0 Td [(\024)]TJ/F78 9.9626 Tf 11.016 0 Td [(i)-47(a)-25(m)]TJ/F195 10.3811 Tf 18.678 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1)]TJ 0 g 0 G -/F75 9.9626 Tf -239.579 -19.925 Td [(np)]TJ +/F75 9.9626 Tf -240.655 -19.925 Td [(np)]TJ 0 g 0 G -/F84 9.9626 Tf 17.156 0 Td [(Number)-250(of)-250(pr)18(ocesses)-250(in)-250(the)-250(PSBLAS)-250(virtual)-250(parallel)-250(machine.)]TJ 7.751 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.071 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.744 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable.)]TJ/F75 11.9552 Tf -24.907 -21.918 Td [(Notes)]TJ +/F84 9.9626 Tf 17.156 0 Td [(Number)-250(of)-250(pr)18(ocesses)-250(in)-250(the)-250(PSBLAS)-250(virtual)-250(parallel)-250(machine.)]TJ 7.751 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.071 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -46.744 -11.955 Td [(Returned)-250(as:)-310(an)-250(integer)-250(variable.)]TJ/F75 11.9552 Tf -24.907 -21.918 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.453 -19.925 Td [(1.)]TJ 0 g 0 G - 1.02 0 0 1 175.611 332.495 Tm [(For)-337(pr)18(ocesses)-337(in)-337(the)-337(virtual)-337(parallel)-337(machine)-336(the)-337(identi\002er)-337(will)-337(satisfy)]TJ 1 0 0 1 175.611 320.54 Tm [(0)]TJ/F190 10.3811 Tf 7.874 0 Td [(\024)]TJ/F78 9.9626 Tf 11.016 0 Td [(i)-47(a)-25(m)]TJ/F190 10.3811 Tf 18.678 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1;)]TJ + 1.02 0 0 1 175.611 332.495 Tm [(For)-337(pr)18(ocesses)-337(in)-337(the)-337(virtual)-337(parallel)-337(machine)-336(the)-337(identi\002er)-337(will)-337(satisfy)]TJ 1 0 0 1 175.611 320.54 Tm [(0)]TJ/F195 10.3811 Tf 7.874 0 Td [(\024)]TJ/F78 9.9626 Tf 11.016 0 Td [(i)-47(a)-25(m)]TJ/F195 10.3811 Tf 18.678 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1;)]TJ 0 g 0 G -84.741 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 175.611 300.615 Tm [(If)-304(the)-303(user)-304(has)-304(r)18(equested)-304(on)]TJ/F145 9.9626 Tf 1 0 0 1 305.201 300.615 Tm [(psb_init)]TJ/F84 9.9626 Tf 1.02 0 0 1 350.13 300.615 Tm [(a)-304(number)-303(of)-304(pr)18(ocesses)-304(less)-304(than)]TJ 1.02 0 0 1 175.611 288.659 Tm [(the)-253(total)-254(available)-253(in)-253(the)-254(parallel)-253(execution)-253(envir)17(onment,)-255(the)-253(r)17(emaining)]TJ 0.992 0 0 1 175.313 276.704 Tm [(pr)18(ocesses)-251(will)-251(have)-251(on)-252(r)19(eturn)]TJ/F78 9.9626 Tf 1 0 0 1 305.592 276.704 Tm [(i)-47(a)-25(m)]TJ/F192 10.3811 Tf 18.677 0 Td [(=)]TJ/F190 10.3811 Tf 11.086 0 Td [(\000)]TJ/F84 9.9626 Tf 0.992 0 0 1 343.549 276.704 Tm [(1;)-252(the)-251(only)-251(call)-251(involving)]TJ/F145 9.9626 Tf 1 0 0 1 453.875 276.704 Tm [(ctxt)]TJ/F84 9.9626 Tf 0.992 0 0 1 477.279 276.704 Tm [(that)]TJ 1 0 0 1 175.611 264.749 Tm [(any)-250(such)-250(pr)18(ocess)-250(may)-250(execute)-250(is)-250(to)]TJ/F145 9.9626 Tf 155.296 0 Td [(psb_exit)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ + 1.02 0 0 1 175.611 300.615 Tm [(If)-304(the)-303(user)-304(has)-304(r)18(equested)-304(on)]TJ/F147 9.9626 Tf 1 0 0 1 305.201 300.615 Tm [(psb_init)]TJ/F84 9.9626 Tf 1.02 0 0 1 350.13 300.615 Tm [(a)-304(number)-303(of)-304(pr)18(ocesses)-304(less)-304(than)]TJ 1.02 0 0 1 175.611 288.659 Tm [(the)-253(total)-254(available)-253(in)-253(the)-254(parallel)-253(execution)-253(envir)17(onment,)-255(the)-253(r)17(emaining)]TJ 0.992 0 0 1 175.313 276.704 Tm [(pr)18(ocesses)-251(will)-251(have)-251(on)-252(r)19(eturn)]TJ/F78 9.9626 Tf 1 0 0 1 305.592 276.704 Tm [(i)-47(a)-25(m)]TJ/F197 10.3811 Tf 18.677 0 Td [(=)]TJ/F195 10.3811 Tf 11.086 0 Td [(\000)]TJ/F84 9.9626 Tf 0.992 0 0 1 343.549 276.704 Tm [(1;)-252(the)-251(only)-251(call)-251(involving)]TJ/F147 9.9626 Tf 1 0 0 1 453.875 276.704 Tm [(ctxt)]TJ/F84 9.9626 Tf 0.992 0 0 1 477.279 276.704 Tm [(that)]TJ 1 0 0 1 175.611 264.749 Tm [(any)-250(such)-250(pr)18(ocess)-250(may)-250(execute)-250(is)-250(to)]TJ/F147 9.9626 Tf 155.296 0 Td [(psb_exit)]TJ/F84 9.9626 Tf 41.843 0 Td [(.)]TJ 0 g 0 G -57.662 -174.311 Td [(114)]TJ 0 g 0 G @@ -22330,9 +22340,9 @@ ET endstream endobj -1777 0 obj +1778 0 obj << -/Length 4507 +/Length 4473 >> stream 0 g 0 G @@ -22348,7 +22358,7 @@ BT /F75 11.9552 Tf 151.016 706.129 Td [(exit)-250(\227)-250(Exit)-250(from)-250(PSBLAS)-250(parallel)-250(environment)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_exit\050ctxt\051)]TJ 0 -11.955 Td [(call)-525(psb_exit\050ctxt,close\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(subr)18(outine)-250(exits)-250(fr)18(om)-250(the)-250(PSBLAS)-250(parallel)-250(virtual)-250(machine.)]TJ +/F147 9.9626 Tf -51.121 -18.964 Td [(call)-525(psb_exit\050ctxt\051)]TJ 0 -11.955 Td [(call)-525(psb_exit\050ctxt,close\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(subr)18(outine)-250(exits)-250(fr)18(om)-250(the)-250(PSBLAS)-250(parallel)-250(virtual)-250(machine.)]TJ 0 g 0 G /F75 9.9626 Tf -14.944 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22367,23 +22377,23 @@ BT 0 g 0 G /F84 9.9626 Tf 12.454 -19.925 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 124.493 426.144 Tm [(This)-218(r)19(outine)-218(may)-217(be)-218(called)-217(even)-218(if)-218(a)-217(pr)18(evious)-217(call)-218(to)]TJ/F145 9.9626 Tf 1 0 0 1 345.207 426.144 Tm [(psb_info)]TJ/F84 9.9626 Tf 0.98 0 0 1 389.174 426.144 Tm [(has)-218(r)19(eturned)]TJ 1.02 0 0 1 124.384 414.189 Tm [(with)]TJ/F78 9.9626 Tf 1 0 0 1 147.897 414.189 Tm [(i)-47(a)-25(m)]TJ/F192 10.3811 Tf 19.251 0 Td [(=)]TJ/F190 10.3811 Tf 11.66 0 Td [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 187.002 414.189 Tm [(1;)-291(indeed,)-283(it)-275(it)-276(is)-276(the)-275(only)-276(r)18(outine)-276(that)-275(may)-276(be)-275(called)-276(with)]TJ 1 0 0 1 124.802 402.234 Tm [(ar)18(gument)]TJ/F145 9.9626 Tf 45.389 0 Td [(ctxt)]TJ/F84 9.9626 Tf 23.412 0 Td [(in)-250(this)-250(situation.)]TJ + 0.98 0 0 1 124.493 426.144 Tm [(This)-218(r)19(outine)-218(may)-217(be)-218(called)-217(even)-218(if)-218(a)-217(pr)18(evious)-217(call)-218(to)]TJ/F147 9.9626 Tf 1 0 0 1 345.207 426.144 Tm [(psb_info)]TJ/F84 9.9626 Tf 0.98 0 0 1 389.174 426.144 Tm [(has)-218(r)19(eturned)]TJ 1.02 0 0 1 124.384 414.189 Tm [(with)]TJ/F78 9.9626 Tf 1 0 0 1 147.897 414.189 Tm [(i)-47(a)-25(m)]TJ/F197 10.3811 Tf 19.251 0 Td [(=)]TJ/F195 10.3811 Tf 11.66 0 Td [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 187.002 414.189 Tm [(1;)-291(indeed,)-283(it)-275(it)-276(is)-276(the)-275(only)-276(r)18(outine)-276(that)-275(may)-276(be)-275(called)-276(with)]TJ 1 0 0 1 124.802 402.234 Tm [(ar)18(gument)]TJ/F147 9.9626 Tf 45.389 0 Td [(ctxt)]TJ/F84 9.9626 Tf 23.412 0 Td [(in)-250(this)-250(situation.)]TJ 0 g 0 G -81.254 -19.926 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 124.413 382.308 Tm [(A)-249(call)-249(to)-248(this)-249(r)18(outine)-249(with)]TJ/F145 9.9626 Tf 1 0 0 1 241.568 382.308 Tm [(close=.true.)]TJ/F84 9.9626 Tf 1.02 0 0 1 306.86 382.308 Tm [(implies)-249(a)-248(call)-249(to)]TJ/F145 9.9626 Tf 1 0 0 1 379.547 382.308 Tm [(MPI_Finalize)]TJ/F84 9.9626 Tf 1.02 0 0 1 442.311 382.308 Tm [(,)]TJ 1 0 0 1 124.802 370.353 Tm [(after)-250(which)-250(no)-250(parallel)-250(r)18(outine)-250(may)-250(be)-250(called.)]TJ + 1.02 0 0 1 124.413 382.308 Tm [(A)-249(call)-249(to)-248(this)-249(r)18(outine)-249(with)]TJ/F147 9.9626 Tf 1 0 0 1 241.568 382.308 Tm [(close=.true.)]TJ/F84 9.9626 Tf 1.02 0 0 1 306.86 382.308 Tm [(implies)-249(a)-248(call)-249(to)]TJ/F147 9.9626 Tf 1 0 0 1 379.547 382.308 Tm [(MPI_Finalize)]TJ/F84 9.9626 Tf 1.02 0 0 1 442.311 382.308 Tm [(,)]TJ 1 0 0 1 124.802 370.353 Tm [(after)-250(which)-250(no)-250(parallel)-250(r)18(outine)-250(may)-250(be)-250(called.)]TJ 0 g 0 G -12.453 -19.925 Td [(3.)]TJ 0 g 0 G - 1.015 0 0 1 124.802 350.428 Tm [(If)-245(the)-246(user)-245(whishes)-246(to)-245(use)-246(multiple)-245(communication)-246(contexts)-245(in)-246(the)-245(same)]TJ 1.02 0 0 1 124.503 338.473 Tm [(pr)18(ogram,)-354(or)-332(to)-332(enter)-332(and)-332(exit)-332(multiple)-332(times)-332(into)-332(the)-332(parallel)-333(en)1(vir)17(on-)]TJ 1.02 0 0 1 124.802 326.518 Tm [(ment,)-356(this)-334(r)18(outine)-334(may)-334(be)-334(called)-334(to)-333(selectively)-334(close)-334(the)-334(contexts)-334(with)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 314.562 Tm [(close=.false.)]TJ/F84 9.9626 Tf 0.98 0 0 1 192.796 314.562 Tm [(,)-206(while)-194(on)-194(the)-194(last)-194(call)-193(it)-194(should)-194(be)-194(called)-194(with)]TJ/F145 9.9626 Tf 1 0 0 1 386.196 314.562 Tm [(close=.true.)]TJ/F84 9.9626 Tf -261.394 -11.955 Td [(to)-250(shutdown)-250(in)-250(a)-250(clean)-250(way)-250(the)-250(entir)18(e)-250(parallel)-250(envir)18(onment.)]TJ + 1.015 0 0 1 124.802 350.428 Tm [(If)-245(the)-246(user)-245(whishes)-246(to)-245(use)-246(multiple)-245(communication)-246(contexts)-245(in)-246(the)-245(same)]TJ 1.02 0 0 1 124.503 338.473 Tm [(pr)18(ogram,)-354(or)-332(to)-332(enter)-332(and)-332(exit)-332(multiple)-332(times)-332(into)-332(the)-332(parallel)-333(en)1(vir)17(on-)]TJ 1.02 0 0 1 124.802 326.518 Tm [(ment,)-356(this)-334(r)18(outine)-334(may)-334(be)-334(called)-334(to)-333(selectively)-334(close)-334(the)-334(contexts)-334(with)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 314.562 Tm [(close=.false.)]TJ/F84 9.9626 Tf 1.018 0 0 1 192.796 314.562 Tm [(,)-245(while)-245(on)-245(the)-245(last)-245(instance)-245(it)-245(should)-245(close)-245(in)-245(a)-245(clean)-245(way)]TJ 1 0 0 1 124.802 302.607 Tm [(the)-250(entir)18(e)-250(parallel)-250(envir)18(onment)-250(with)]TJ/F147 9.9626 Tf 161.831 0 Td [(close=.true.)]TJ 0 g 0 G - 139.477 -212.169 Td [(115)]TJ +/F84 9.9626 Tf -22.354 -212.169 Td [(115)]TJ 0 g 0 G ET endstream endobj -1785 0 obj +1786 0 obj << /Length 2607 >> @@ -22415,7 +22425,7 @@ BT /F75 11.9552 Tf 248.952 706.129 Td [(comm)-250(\227)-250(Get)-250(the)-250(MPI)-250(communicator)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -98.247 -18.964 Td [(icomm)-525(=)-525(psb_get_mpi_comm\050ctxt\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 665.247 Tm [(This)-345(funct)1(ion)-345(r)18(eturns)-345(the)-344(MPI)-345(communicator)-344(associated)-345(with)-344(a)-345(PSBLAS)]TJ 1 0 0 1 150.705 653.292 Tm [(context)]TJ +/F147 9.9626 Tf -98.247 -18.964 Td [(icomm)-525(=)-525(psb_get_mpi_comm\050ctxt\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 665.247 Tm [(This)-345(funct)1(ion)-345(r)18(eturns)-345(the)-344(MPI)-345(communicator)-344(associated)-345(with)-344(a)-345(PSBLAS)]TJ 1 0 0 1 150.705 653.292 Tm [(context)]TJ 0 g 0 G /F75 9.9626 Tf 0 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22433,7 +22443,7 @@ BT 0 g 0 G 0 -19.926 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 223.173 503.852 Tm [(The)-300(MPI)-299(communicator)-300(associated)-300(with)-300(the)-300(PSBLAS)-299(virtual)]TJ 1 0 0 1 175.313 491.897 Tm [(parallel)-250(machine.)]TJ 0.298 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ/F75 11.9552 Tf 0.999 0 0 1 150.705 422.159 Tm [(Notes)]TJ/F84 9.9626 Tf 0.999 0 0 1 185.028 422.159 Tm [(The)-249(subr)18(outine)-250(version)]TJ/F145 9.9626 Tf 1 0 0 1 289.412 422.159 Tm [(psb_get_mpicomm)]TJ/F84 9.9626 Tf 0.999 0 0 1 370.349 422.159 Tm [(is)-249(still)-250(available)-249(but)-250(is)-249(depr)18(e-)]TJ 1 0 0 1 150.705 410.204 Tm [(cated.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 223.173 503.852 Tm [(The)-300(MPI)-299(communicator)-300(associated)-300(with)-300(the)-300(PSBLAS)-299(virtual)]TJ 1 0 0 1 175.313 491.897 Tm [(parallel)-250(machine.)]TJ 0.298 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ/F75 11.9552 Tf 0.999 0 0 1 150.705 422.159 Tm [(Notes)]TJ/F84 9.9626 Tf 0.999 0 0 1 185.028 422.159 Tm [(The)-249(subr)18(outine)-250(version)]TJ/F147 9.9626 Tf 1 0 0 1 289.412 422.159 Tm [(psb_get_mpicomm)]TJ/F84 9.9626 Tf 0.999 0 0 1 370.349 422.159 Tm [(is)-249(still)-250(available)-249(but)-250(is)-249(depr)18(e-)]TJ 1 0 0 1 150.705 410.204 Tm [(cated.)]TJ 0 g 0 G 164.383 -319.766 Td [(116)]TJ 0 g 0 G @@ -22441,7 +22451,7 @@ ET endstream endobj -1789 0 obj +1790 0 obj << /Length 3383 >> @@ -22473,7 +22483,7 @@ BT /F75 11.9552 Tf 198.143 706.129 Td [(rank)-250(\227)-250(Get)-250(the)-250(MPI)-250(rank)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -98.248 -18.964 Td [(rank)-525(=)-525(psb_get_mpi_rank\050ctxt,)-525(id\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(function)-250(r)18(eturns)-250(the)-250(MPI)-250(rank)-250(of)-250(the)-250(PSBLAS)-250(pr)18(ocess)]TJ/F78 9.9626 Tf 257.337 0 Td [(i)-32(d)]TJ +/F147 9.9626 Tf -98.248 -18.964 Td [(rank)-525(=)-525(psb_get_mpi_rank\050ctxt,)-525(id\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(function)-250(r)18(eturns)-250(the)-250(MPI)-250(rank)-250(of)-250(the)-250(PSBLAS)-250(pr)18(ocess)]TJ/F78 9.9626 Tf 257.337 0 Td [(i)-32(d)]TJ 0 g 0 G /F75 9.9626 Tf -272.281 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22488,14 +22498,14 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.926 Td [(id)]TJ 0 g 0 G -/F84 9.9626 Tf 14.386 0 Td [(Identi\002er)-250(of)-250(a)-250(pr)18(ocess)-250(in)-250(the)-250(PSBLAS)-250(virtual)-250(parallel)-250(machine.)]TJ 10.521 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(0)]TJ/F190 10.3811 Tf 141.939 0 Td [(\024)]TJ/F78 9.9626 Tf 11.016 0 Td [(i)-32(d)]TJ/F190 10.3811 Tf 11.086 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1)]TJ +/F84 9.9626 Tf 14.386 0 Td [(Identi\002er)-250(of)-250(a)-250(pr)18(ocess)-250(in)-250(the)-250(PSBLAS)-250(virtual)-250(parallel)-250(machine.)]TJ 10.521 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(0)]TJ/F195 10.3811 Tf 141.939 0 Td [(\024)]TJ/F78 9.9626 Tf 11.016 0 Td [(i)-32(d)]TJ/F195 10.3811 Tf 11.086 0 Td [(\024)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1)]TJ 0 g 0 G /F75 9.9626 Tf -223.669 -21.918 Td [(On)-250(Return)]TJ 0 g 0 G 0 g 0 G 0 -19.925 Td [(Funciton)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.468 0 Td [(The)-250(MPI)-250(rank)-250(associated)-250(with)-250(the)-250(PSBLAS)-250(pr)18(ocess)]TJ/F78 9.9626 Tf 224.292 0 Td [(i)-32(d)]TJ/F84 9.9626 Tf 8.194 0 Td [(.)]TJ -280.047 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ/F75 11.9552 Tf 0.98 0 0 1 99.895 378.323 Tm [(Notes)]TJ/F84 9.9626 Tf 0.98 0 0 1 133.429 378.323 Tm [(The)-235(subr)18(outine)-235(version)]TJ/F145 9.9626 Tf 1 0 0 1 235.414 378.323 Tm [(psb_get_rank)]TJ/F84 9.9626 Tf 0.98 0 0 1 300.476 378.323 Tm [(is)-235(still)-236(available)-235(but)-236(is)-235(depr)18(ecated.)]TJ +/F84 9.9626 Tf 72.468 0 Td [(The)-250(MPI)-250(rank)-250(associated)-250(with)-250(the)-250(PSBLAS)-250(pr)18(ocess)]TJ/F78 9.9626 Tf 224.292 0 Td [(i)-32(d)]TJ/F84 9.9626 Tf 8.194 0 Td [(.)]TJ -280.047 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ/F75 11.9552 Tf 0.98 0 0 1 99.895 378.323 Tm [(Notes)]TJ/F84 9.9626 Tf 0.98 0 0 1 133.429 378.323 Tm [(The)-235(subr)18(outine)-235(version)]TJ/F147 9.9626 Tf 1 0 0 1 235.414 378.323 Tm [(psb_get_rank)]TJ/F84 9.9626 Tf 0.98 0 0 1 300.476 378.323 Tm [(is)-235(still)-236(available)-235(but)-236(is)-235(depr)18(ecated.)]TJ 0 g 0 G 1 0 0 1 264.279 90.438 Tm [(117)]TJ 0 g 0 G @@ -22503,7 +22513,7 @@ ET endstream endobj -1793 0 obj +1794 0 obj << /Length 1171 >> @@ -22521,7 +22531,7 @@ BT /F75 11.9552 Tf 201.825 706.129 Td [(wtime)-250(\227)-250(W)74(all)-250(clock)-250(timing)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.12 -18.964 Td [(time)-525(=)-525(psb_wtime\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 665.247 Tm [(This)-374(function)-374(r)17(eturns)-374(a)-374(wall)-374(clock)-374(timer)72(.)-691(The)-374(r)18(esolution)-375(of)-374(the)-374(timer)-374(is)]TJ 1 0 0 1 150.705 653.292 Tm [(dependent)-250(on)-250(the)-250(underlying)-250(parallel)-250(envir)18(onment)-250(implementation.)]TJ +/F147 9.9626 Tf -51.12 -18.964 Td [(time)-525(=)-525(psb_wtime\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 165.649 665.247 Tm [(This)-374(function)-374(r)17(eturns)-374(a)-374(wall)-374(clock)-374(timer)72(.)-691(The)-374(r)18(esolution)-375(of)-374(the)-374(timer)-374(is)]TJ 1 0 0 1 150.705 653.292 Tm [(dependent)-250(on)-250(the)-250(underlying)-250(parallel)-250(envir)18(onment)-250(implementation.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22532,7 +22542,7 @@ BT 0 g 0 G 0 -19.926 Td [(Function)-250(value)]TJ 0 g 0 G -/F84 9.9626 Tf 72.776 0 Td [(the)-250(elapsed)-250(time)-250(in)-250(seconds.)]TJ -47.87 -11.955 Td [(Returned)-250(as:)-310(a)]TJ/F145 9.9626 Tf 66.022 0 Td [(real\050psb_dpk_\051)]TJ/F84 9.9626 Tf 75.716 0 Td [(variable.)]TJ +/F84 9.9626 Tf 72.776 0 Td [(the)-250(elapsed)-250(time)-250(in)-250(seconds.)]TJ -47.87 -11.955 Td [(Returned)-250(as:)-310(a)]TJ/F147 9.9626 Tf 66.022 0 Td [(real\050psb_dpk_\051)]TJ/F84 9.9626 Tf 75.716 0 Td [(variable.)]TJ 0 g 0 G -2.261 -491.123 Td [(118)]TJ 0 g 0 G @@ -22540,7 +22550,7 @@ ET endstream endobj -1797 0 obj +1798 0 obj << /Length 1466 >> @@ -22558,7 +22568,7 @@ BT /F75 11.9552 Tf 0.998 0 0 1 150.976 706.129 Tm [(barrier)-250(\227)-251(Sinchronizati)1(on)-251(point)-250(parallel)-250(environment)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 1 0 0 1 99.895 687.165 Tm [(call)-525(psb_barrier\050ctxt\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 665.247 Tm [(This)-293(subr)18(outine)-293(acts)-293(as)-293(an)-293(explicit)-293(synchr)18(onization)-293(point)-293(for)-293(the)-293(PSBLAS)]TJ 1 0 0 1 99.596 653.292 Tm [(parallel)-250(virtual)-250(machine.)]TJ +/F147 9.9626 Tf 1 0 0 1 99.895 687.165 Tm [(call)-525(psb_barrier\050ctxt\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 665.247 Tm [(This)-293(subr)18(outine)-293(acts)-293(as)-293(an)-293(explicit)-293(synchr)18(onization)-293(point)-293(for)-293(the)-293(PSBLAS)]TJ 1 0 0 1 99.596 653.292 Tm [(parallel)-250(virtual)-250(machine.)]TJ 0 g 0 G /F75 9.9626 Tf 0.299 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22577,7 +22587,7 @@ ET endstream endobj -1801 0 obj +1802 0 obj << /Length 1287 >> @@ -22595,7 +22605,7 @@ BT /F75 11.9552 Tf 201.825 706.129 Td [(abort)-250(\227)-250(Abort)-250(a)-250(computation)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.12 -18.964 Td [(call)-525(psb_abort\050ctxt\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(subr)18(outine)-250(aborts)-250(computation)-250(on)-250(the)-250(parallel)-250(virtual)-250(machine.)]TJ +/F147 9.9626 Tf -51.12 -18.964 Td [(call)-525(psb_abort\050ctxt\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(subr)18(outine)-250(aborts)-250(computation)-250(on)-250(the)-250(parallel)-250(virtual)-250(machine.)]TJ 0 g 0 G /F75 9.9626 Tf -14.944 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22614,7 +22624,7 @@ ET endstream endobj -1805 0 obj +1806 0 obj << /Length 6065 >> @@ -22632,7 +22642,7 @@ BT /F75 11.9552 Tf 151.016 706.129 Td [(bcast)-250(\227)-250(Broadcast)-250(data)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -51.121 -19.198 Td [(call)-525(psb_bcast\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.992 0 0 1 114.839 664.53 Tm [(This)-251(subr)18(outine)-251(implements)-251(a)-251(br)18(oadcast)-250(operation)-251(based)-251(on)-251(the)-251(underlying)]TJ 1 0 0 1 99.895 652.575 Tm [(communication)-250(library)111(.)]TJ +/F147 9.9626 Tf -51.121 -19.198 Td [(call)-525(psb_bcast\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.992 0 0 1 114.839 664.53 Tm [(This)-251(subr)18(outine)-251(implements)-251(a)-251(br)18(oadcast)-250(operation)-251(based)-251(on)-251(the)-251(underlying)]TJ 1 0 0 1 99.895 652.575 Tm [(communication)-250(library)111(.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.288 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22651,15 +22661,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -20.408 Td [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 23.253 0 Td [(Root)-250(pr)18(ocess)-250(holding)-250(data)-250(to)-250(be)-250(br)18(oadcast.)]TJ 1.654 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F148 10.3811 Tf 138.85 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F148 10.3811 Tf 19.923 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1,)-250(default)-250(0)]TJ +/F84 9.9626 Tf 23.253 0 Td [(Root)-250(pr)18(ocess)-250(holding)-250(data)-250(to)-250(be)-250(br)18(oadcast.)]TJ 1.654 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F152 10.3811 Tf 138.85 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F152 10.3811 Tf 19.923 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1,)-250(default)-250(0)]TJ 0 g 0 G /F75 9.9626 Tf -246.025 -20.409 Td [(mode)]TJ 0 g 0 G -/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ +/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -32.364 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ 0 g 0 G /F75 9.9626 Tf -57.485 -22.401 Td [(On)-250(Return)]TJ 0 g 0 G @@ -22674,7 +22684,7 @@ ET endstream endobj -1810 0 obj +1811 0 obj << /Length 5230 >> @@ -22686,15 +22696,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.906 -19.925 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.917 Td [(Notes)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.917 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 560.674 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 193.994 560.674 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 560.674 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 548.719 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ + 0.98 0 0 1 175.303 560.674 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 193.994 560.674 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 560.674 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 548.719 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 528.794 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 195.057 528.794 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 528.794 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 395.907 528.794 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 528.794 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 516.839 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 504.884 Tm [(the)]TJ/F145 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ + 1.02 0 0 1 175.303 528.794 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 195.057 528.794 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 528.794 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 395.907 528.794 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 528.794 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 516.839 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 504.884 Tm [(the)]TJ/F147 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -22708,7 +22718,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 482.268 Td [(call)]TJ +/F235 8.9664 Tf 188.015 482.268 Td [(call)]TJ 0 g 0 G [-525(psb_bcast\050ctxt,dat,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -22729,7 +22739,7 @@ BT 0 g 0 G /F84 9.9626 Tf -48.393 -36.164 Td [(3.)]TJ 0 g 0 G - 1.02 0 0 1 175.113 435.145 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F145 9.9626 Tf 1 0 0 1 379.88 435.145 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 435.145 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 435.145 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 435.145 Tm [(be)]TJ 1 0 0 1 175.611 423.19 Tm [(accessed)-250(between)-250(calls:)]TJ + 1.02 0 0 1 175.113 435.145 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F147 9.9626 Tf 1 0 0 1 379.88 435.145 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 435.145 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 435.145 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 435.145 Tm [(be)]TJ 1 0 0 1 175.611 423.19 Tm [(accessed)-250(between)-250(calls:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -22743,7 +22753,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 400.575 Td [(call)]TJ +/F235 8.9664 Tf 188.015 400.575 Td [(call)]TJ 0 g 0 G [-525(psb_bcast\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -22766,12 +22776,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ +/F281 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf -37.658 -10.959 Td [(call)]TJ +/F235 8.9664 Tf -37.658 -10.959 Td [(call)]TJ 0 g 0 G [-525(psb_bcast\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -22797,7 +22807,7 @@ ET endstream endobj -1818 0 obj +1819 0 obj << /Length 6196 >> @@ -22815,7 +22825,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(sum)-250(\227)-250(Global)-250(sum)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_sum\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.991 0 0 1 114.839 664.53 Tm [(This)-253(subr)18(outine)-253(implements)-254(a)-253(sum)-253(r)18(eduction)-253(operation)-254(based)-253(on)-253(the)-254(under)19(-)]TJ 1 0 0 1 99.895 652.575 Tm [(lying)-250(communication)-250(library)111(.)]TJ +/F147 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_sum\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.991 0 0 1 114.839 664.53 Tm [(This)-253(subr)18(outine)-253(implements)-254(a)-253(sum)-253(r)18(eduction)-253(operation)-254(based)-253(on)-253(the)-254(under)19(-)]TJ 1 0 0 1 99.895 652.575 Tm [(lying)-250(communication)-250(library)111(.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.288 Td [(T)90(ype:)]TJ 0 g 0 G @@ -22834,15 +22844,15 @@ BT 0 g 0 G /F75 9.9626 Tf 1 0 0 1 99.895 443.056 Tm [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 23.253 0 Td [(Pr)18(ocess)-250(to)-250(hold)-250(the)-250(\002nal)-250(sum,)-250(or)]TJ/F190 10.3811 Tf 143.744 0 Td [(\000)]TJ/F84 9.9626 Tf 8.195 0 Td [(1)-250(to)-250(make)-250(it)-250(available)-250(on)-250(all)-250(pr)18(ocesses.)]TJ -150.285 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F190 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F148 10.3811 Tf 7.873 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F148 10.3811 Tf 19.923 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ +/F84 9.9626 Tf 23.253 0 Td [(Pr)18(ocess)-250(to)-250(hold)-250(the)-250(\002nal)-250(sum,)-250(or)]TJ/F195 10.3811 Tf 143.744 0 Td [(\000)]TJ/F84 9.9626 Tf 8.195 0 Td [(1)-250(to)-250(make)-250(it)-250(available)-250(on)-250(all)-250(pr)18(ocesses.)]TJ -150.285 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F195 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F152 10.3811 Tf 7.873 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F152 10.3811 Tf 19.923 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ 0 g 0 G /F75 9.9626 Tf -254.344 -20.408 Td [(mode)]TJ 0 g 0 G -/F84 9.9626 Tf 0.983 0 0 1 129.843 374.827 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 362.871 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 315.051 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 303.096 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 323.986 303.096 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 303.096 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 291.14 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 291.14 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 239.567 291.14 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 291.14 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 279.185 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ +/F84 9.9626 Tf 0.983 0 0 1 129.843 374.827 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 362.871 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 315.051 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 303.096 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 323.986 303.096 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 303.096 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 291.14 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 291.14 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 239.567 291.14 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 291.14 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 279.185 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -32.363 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ 0 g 0 G /F75 9.9626 Tf -57.485 -22.401 Td [(On)-250(Return)]TJ 0 g 0 G @@ -22857,7 +22867,7 @@ ET endstream endobj -1822 0 obj +1823 0 obj << /Length 5025 >> @@ -22869,15 +22879,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.598 -19.926 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.918 Td [(Notes)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.918 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 572.629 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 193.994 572.629 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 572.629 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 560.674 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ + 0.98 0 0 1 175.303 572.629 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 193.994 572.629 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 572.629 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 560.674 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 540.749 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 195.057 540.749 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 540.749 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 395.907 540.749 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 540.749 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 528.794 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 516.839 Tm [(the)]TJ/F145 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ + 1.02 0 0 1 175.303 540.749 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 195.057 540.749 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 540.749 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 395.907 540.749 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 540.749 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 528.794 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 516.839 Tm [(the)]TJ/F147 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -22891,7 +22901,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 494.224 Td [(call)]TJ +/F235 8.9664 Tf 188.015 494.224 Td [(call)]TJ 0 g 0 G [-525(psb_sum\050ctxt,dat,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -22912,7 +22922,7 @@ BT 0 g 0 G /F84 9.9626 Tf -48.393 -36.165 Td [(3.)]TJ 0 g 0 G - 1.02 0 0 1 175.113 447.1 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F145 9.9626 Tf 1 0 0 1 379.88 447.1 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 447.1 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 447.1 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 447.1 Tm [(be)]TJ 1 0 0 1 175.611 435.145 Tm [(accessed)-250(between)-250(calls:)]TJ + 1.02 0 0 1 175.113 447.1 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F147 9.9626 Tf 1 0 0 1 379.88 447.1 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 447.1 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 447.1 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 447.1 Tm [(be)]TJ 1 0 0 1 175.611 435.145 Tm [(accessed)-250(between)-250(calls:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -22926,7 +22936,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 412.53 Td [(call)]TJ +/F235 8.9664 Tf 188.015 412.53 Td [(call)]TJ 0 g 0 G [-525(psb_sum\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -22949,12 +22959,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ +/F281 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf -37.658 -10.959 Td [(call)]TJ +/F235 8.9664 Tf -37.658 -10.959 Td [(call)]TJ 0 g 0 G [-525(psb_sum\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -22980,7 +22990,7 @@ ET endstream endobj -1719 0 obj +1720 0 obj << /Type /ObjStm /N 100 @@ -22988,39 +22998,39 @@ endobj /Length 9365 >> stream -1717 0 1718 59 1713 118 1722 213 1720 352 1724 497 413 555 1721 612 1726 735 1728 853 -1729 912 1730 971 1731 1030 1725 1089 1736 1211 1732 1368 1733 1513 1734 1660 1738 1807 417 1865 -1735 1922 1741 2030 1743 2148 421 2207 1740 2265 1745 2387 1747 2505 1748 2563 1749 2621 1750 2679 -1751 2736 1752 2794 1753 2852 1754 2910 1755 2968 1756 3026 1757 3084 1758 3142 1744 3200 1760 3337 -1762 3455 425 3514 1759 3572 1764 3653 1766 3771 429 3829 1767 3886 1768 3944 1763 4002 1770 4138 -1772 4256 433 4315 1773 4373 1774 4431 1769 4488 1776 4624 1778 4742 437 4800 1779 4857 1780 4915 -1781 4973 1775 5031 1784 5167 1786 5285 441 5344 1783 5402 1788 5497 1790 5615 445 5673 1787 5730 -1792 5852 1794 5970 449 6029 1791 6087 1796 6182 1798 6300 453 6358 1795 6415 1800 6510 1802 6628 -457 6687 1799 6745 1804 6840 1806 6958 461 7016 1803 7073 1809 7224 1811 7342 1812 7401 1813 7460 -1814 7519 1808 7578 1817 7716 1819 7834 465 7892 1816 7949 1821 8100 1823 8218 1824 8277 1825 8336 -% 1717 0 obj +1718 0 1719 59 1714 118 1723 213 1721 352 1725 497 413 555 1722 612 1727 735 1729 853 +1730 912 1731 971 1732 1030 1726 1089 1737 1211 1733 1368 1734 1513 1735 1660 1739 1807 417 1865 +1736 1922 1742 2030 1744 2148 421 2207 1741 2265 1746 2387 1748 2505 1749 2563 1750 2621 1751 2679 +1752 2736 1753 2794 1754 2852 1755 2910 1756 2968 1757 3026 1758 3084 1759 3142 1745 3200 1761 3337 +1763 3455 425 3514 1760 3572 1765 3653 1767 3771 429 3829 1768 3886 1769 3944 1764 4002 1771 4138 +1773 4256 433 4315 1774 4373 1775 4431 1770 4488 1777 4624 1779 4742 437 4800 1780 4857 1781 4915 +1782 4973 1776 5031 1785 5167 1787 5285 441 5344 1784 5402 1789 5497 1791 5615 445 5673 1788 5730 +1793 5852 1795 5970 449 6029 1792 6087 1797 6182 1799 6300 453 6358 1796 6415 1801 6510 1803 6628 +457 6687 1800 6745 1805 6840 1807 6958 461 7016 1804 7073 1810 7224 1812 7342 1813 7401 1814 7460 +1815 7519 1809 7578 1818 7716 1820 7834 465 7892 1817 7949 1822 8100 1824 8218 1825 8277 1826 8336 +% 1718 0 obj << -/D [1714 0 R /XYZ 150.705 370.138 null] +/D [1715 0 R /XYZ 150.705 370.138 null] >> -% 1718 0 obj +% 1719 0 obj << -/D [1714 0 R /XYZ 150.705 338.313 null] +/D [1715 0 R /XYZ 150.705 338.313 null] >> -% 1713 0 obj +% 1714 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1722 0 obj +% 1723 0 obj << /Type /Page -/Contents 1723 0 R -/Resources 1721 0 R +/Contents 1724 0 R +/Resources 1722 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1698 0 R -/Annots [ 1720 0 R ] +/Parent 1699 0 R +/Annots [ 1721 0 R ] >> -% 1720 0 obj +% 1721 0 obj << /Type /Annot /Subtype /Link @@ -23028,58 +23038,58 @@ stream /Rect [291.943 491.971 369.462 504.031] /A << /S /GoTo /D (spdata) >> >> -% 1724 0 obj +% 1725 0 obj << -/D [1722 0 R /XYZ 98.895 753.953 null] +/D [1723 0 R /XYZ 98.895 753.953 null] >> % 413 0 obj << -/D [1722 0 R /XYZ 99.895 716.092 null] +/D [1723 0 R /XYZ 99.895 716.092 null] >> -% 1721 0 obj +% 1722 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F148 1490 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F152 1491 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1726 0 obj +% 1727 0 obj << /Type /Page -/Contents 1727 0 R -/Resources 1725 0 R +/Contents 1728 0 R +/Resources 1726 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1698 0 R ->> -% 1728 0 obj -<< -/D [1726 0 R /XYZ 149.705 753.953 null] +/Parent 1699 0 R >> % 1729 0 obj << -/D [1726 0 R /XYZ 150.705 496.698 null] +/D [1727 0 R /XYZ 149.705 753.953 null] >> % 1730 0 obj << -/D [1726 0 R /XYZ 150.705 438.313 null] +/D [1727 0 R /XYZ 150.705 496.698 null] >> % 1731 0 obj << -/D [1726 0 R /XYZ 150.705 418.388 null] +/D [1727 0 R /XYZ 150.705 438.313 null] >> -% 1725 0 obj +% 1732 0 obj +<< +/D [1727 0 R /XYZ 150.705 418.388 null] +>> +% 1726 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1736 0 obj +% 1737 0 obj << /Type /Page -/Contents 1737 0 R -/Resources 1735 0 R +/Contents 1738 0 R +/Resources 1736 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1739 0 R -/Annots [ 1732 0 R 1733 0 R 1734 0 R ] +/Parent 1740 0 R +/Annots [ 1733 0 R 1734 0 R 1735 0 R ] >> -% 1732 0 obj +% 1733 0 obj << /Type /Annot /Subtype /Link @@ -23087,7 +23097,7 @@ stream /Rect [291.943 527.942 369.462 540.002] /A << /S /GoTo /D (spdata) >> >> -% 1733 0 obj +% 1734 0 obj << /Type /Annot /Subtype /Link @@ -23095,7 +23105,7 @@ stream /Rect [291.943 460.196 359.001 472.256] /A << /S /GoTo /D (descdata) >> >> -% 1734 0 obj +% 1735 0 obj << /Type /Annot /Subtype /Link @@ -23103,413 +23113,413 @@ stream /Rect [320.317 404.405 392.605 416.465] /A << /S /GoTo /D (precdata) >> >> -% 1738 0 obj +% 1739 0 obj << -/D [1736 0 R /XYZ 98.895 753.953 null] +/D [1737 0 R /XYZ 98.895 753.953 null] >> % 417 0 obj << -/D [1736 0 R /XYZ 99.895 716.092 null] +/D [1737 0 R /XYZ 99.895 716.092 null] >> -% 1735 0 obj +% 1736 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1741 0 obj +% 1742 0 obj << /Type /Page -/Contents 1742 0 R -/Resources 1740 0 R +/Contents 1743 0 R +/Resources 1741 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1739 0 R +/Parent 1740 0 R >> -% 1743 0 obj +% 1744 0 obj << -/D [1741 0 R /XYZ 149.705 753.953 null] +/D [1742 0 R /XYZ 149.705 753.953 null] >> % 421 0 obj << -/D [1741 0 R /XYZ 150.705 716.092 null] +/D [1742 0 R /XYZ 150.705 716.092 null] >> -% 1740 0 obj +% 1741 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1745 0 obj +% 1746 0 obj << /Type /Page -/Contents 1746 0 R -/Resources 1744 0 R +/Contents 1747 0 R +/Resources 1745 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1739 0 R ->> -% 1747 0 obj -<< -/D [1745 0 R /XYZ 98.895 753.953 null] +/Parent 1740 0 R >> % 1748 0 obj << -/D [1745 0 R /XYZ 99.895 644.145 null] +/D [1746 0 R /XYZ 98.895 753.953 null] >> % 1749 0 obj << -/D [1745 0 R /XYZ 99.895 610.946 null] +/D [1746 0 R /XYZ 99.895 644.145 null] >> % 1750 0 obj << -/D [1745 0 R /XYZ 99.895 567.11 null] +/D [1746 0 R /XYZ 99.895 610.946 null] >> % 1751 0 obj << -/D [1745 0 R /XYZ 99.895 498.089 null] +/D [1746 0 R /XYZ 99.895 567.11 null] >> % 1752 0 obj << -/D [1745 0 R /XYZ 99.895 455.529 null] +/D [1746 0 R /XYZ 99.895 498.089 null] >> % 1753 0 obj << -/D [1745 0 R /XYZ 99.895 398.463 null] +/D [1746 0 R /XYZ 99.895 455.529 null] >> % 1754 0 obj << -/D [1745 0 R /XYZ 99.895 366.582 null] +/D [1746 0 R /XYZ 99.895 398.463 null] >> % 1755 0 obj << -/D [1745 0 R /XYZ 99.895 311.449 null] +/D [1746 0 R /XYZ 99.895 366.582 null] >> % 1756 0 obj << -/D [1745 0 R /XYZ 99.895 268.948 null] +/D [1746 0 R /XYZ 99.895 311.449 null] >> % 1757 0 obj << -/D [1745 0 R /XYZ 99.895 229.098 null] +/D [1746 0 R /XYZ 99.895 268.948 null] >> % 1758 0 obj << -/D [1745 0 R /XYZ 99.895 201.202 null] +/D [1746 0 R /XYZ 99.895 229.098 null] >> -% 1744 0 obj +% 1759 0 obj +<< +/D [1746 0 R /XYZ 99.895 201.202 null] +>> +% 1745 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F243 1285 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F241 1286 0 R >> /ProcSet [ /PDF /Text ] >> -% 1760 0 obj +% 1761 0 obj << /Type /Page -/Contents 1761 0 R -/Resources 1759 0 R +/Contents 1762 0 R +/Resources 1760 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1739 0 R +/Parent 1740 0 R >> -% 1762 0 obj +% 1763 0 obj << -/D [1760 0 R /XYZ 149.705 753.953 null] +/D [1761 0 R /XYZ 149.705 753.953 null] >> % 425 0 obj << -/D [1760 0 R /XYZ 150.705 716.092 null] +/D [1761 0 R /XYZ 150.705 716.092 null] >> -% 1759 0 obj +% 1760 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1764 0 obj +% 1765 0 obj << /Type /Page -/Contents 1765 0 R -/Resources 1763 0 R +/Contents 1766 0 R +/Resources 1764 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1739 0 R +/Parent 1740 0 R >> -% 1766 0 obj +% 1767 0 obj << -/D [1764 0 R /XYZ 98.895 753.953 null] +/D [1765 0 R /XYZ 98.895 753.953 null] >> % 429 0 obj << -/D [1764 0 R /XYZ 99.895 716.092 null] +/D [1765 0 R /XYZ 99.895 716.092 null] >> -% 1767 0 obj +% 1768 0 obj << -/D [1764 0 R /XYZ 99.895 170.282 null] +/D [1765 0 R /XYZ 99.895 170.282 null] >> -% 1768 0 obj +% 1769 0 obj << -/D [1764 0 R /XYZ 99.895 149.368 null] +/D [1765 0 R /XYZ 99.895 149.368 null] >> -% 1763 0 obj +% 1764 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F197 943 0 R /F78 686 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1770 0 obj +% 1771 0 obj << /Type /Page -/Contents 1771 0 R -/Resources 1769 0 R +/Contents 1772 0 R +/Resources 1770 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1739 0 R +/Parent 1740 0 R >> -% 1772 0 obj +% 1773 0 obj << -/D [1770 0 R /XYZ 149.705 753.953 null] +/D [1771 0 R /XYZ 149.705 753.953 null] >> % 433 0 obj << -/D [1770 0 R /XYZ 150.705 716.092 null] +/D [1771 0 R /XYZ 150.705 716.092 null] >> -% 1773 0 obj +% 1774 0 obj << -/D [1770 0 R /XYZ 150.705 348.22 null] +/D [1771 0 R /XYZ 150.705 348.22 null] >> -% 1774 0 obj +% 1775 0 obj << -/D [1770 0 R /XYZ 150.705 313.8 null] +/D [1771 0 R /XYZ 150.705 313.8 null] >> -% 1769 0 obj +% 1770 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F78 686 0 R /F192 942 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F195 942 0 R /F78 686 0 R /F197 943 0 R >> /ProcSet [ /PDF /Text ] >> -% 1776 0 obj +% 1777 0 obj << /Type /Page -/Contents 1777 0 R -/Resources 1775 0 R +/Contents 1778 0 R +/Resources 1776 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1782 0 R +/Parent 1783 0 R >> -% 1778 0 obj +% 1779 0 obj << -/D [1776 0 R /XYZ 98.895 753.953 null] +/D [1777 0 R /XYZ 98.895 753.953 null] >> % 437 0 obj << -/D [1776 0 R /XYZ 99.895 716.092 null] ->> -% 1779 0 obj -<< -/D [1776 0 R /XYZ 99.895 441.869 null] +/D [1777 0 R /XYZ 99.895 716.092 null] >> % 1780 0 obj << -/D [1776 0 R /XYZ 99.895 395.439 null] +/D [1777 0 R /XYZ 99.895 441.869 null] >> % 1781 0 obj << -/D [1776 0 R /XYZ 99.895 363.559 null] +/D [1777 0 R /XYZ 99.895 395.439 null] >> -% 1775 0 obj +% 1782 0 obj +<< +/D [1777 0 R /XYZ 99.895 363.559 null] +>> +% 1776 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1784 0 obj +% 1785 0 obj << /Type /Page -/Contents 1785 0 R -/Resources 1783 0 R +/Contents 1786 0 R +/Resources 1784 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1782 0 R +/Parent 1783 0 R >> -% 1786 0 obj +% 1787 0 obj << -/D [1784 0 R /XYZ 149.705 753.953 null] +/D [1785 0 R /XYZ 149.705 753.953 null] >> % 441 0 obj << -/D [1784 0 R /XYZ 150.705 716.092 null] +/D [1785 0 R /XYZ 150.705 716.092 null] >> -% 1783 0 obj +% 1784 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1788 0 obj +% 1789 0 obj << /Type /Page -/Contents 1789 0 R -/Resources 1787 0 R +/Contents 1790 0 R +/Resources 1788 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1782 0 R +/Parent 1783 0 R >> -% 1790 0 obj +% 1791 0 obj << -/D [1788 0 R /XYZ 98.895 753.953 null] +/D [1789 0 R /XYZ 98.895 753.953 null] >> % 445 0 obj << -/D [1788 0 R /XYZ 99.895 716.092 null] +/D [1789 0 R /XYZ 99.895 716.092 null] >> -% 1787 0 obj +% 1788 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1792 0 obj +% 1793 0 obj << /Type /Page -/Contents 1793 0 R -/Resources 1791 0 R +/Contents 1794 0 R +/Resources 1792 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1782 0 R +/Parent 1783 0 R >> -% 1794 0 obj +% 1795 0 obj << -/D [1792 0 R /XYZ 149.705 753.953 null] +/D [1793 0 R /XYZ 149.705 753.953 null] >> % 449 0 obj << -/D [1792 0 R /XYZ 150.705 716.092 null] +/D [1793 0 R /XYZ 150.705 716.092 null] >> -% 1791 0 obj +% 1792 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1796 0 obj +% 1797 0 obj << /Type /Page -/Contents 1797 0 R -/Resources 1795 0 R +/Contents 1798 0 R +/Resources 1796 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1782 0 R +/Parent 1783 0 R >> -% 1798 0 obj +% 1799 0 obj << -/D [1796 0 R /XYZ 98.895 753.953 null] +/D [1797 0 R /XYZ 98.895 753.953 null] >> % 453 0 obj << -/D [1796 0 R /XYZ 99.895 716.092 null] +/D [1797 0 R /XYZ 99.895 716.092 null] >> -% 1795 0 obj +% 1796 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1800 0 obj +% 1801 0 obj << /Type /Page -/Contents 1801 0 R -/Resources 1799 0 R +/Contents 1802 0 R +/Resources 1800 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1782 0 R +/Parent 1783 0 R >> -% 1802 0 obj +% 1803 0 obj << -/D [1800 0 R /XYZ 149.705 753.953 null] +/D [1801 0 R /XYZ 149.705 753.953 null] >> % 457 0 obj << -/D [1800 0 R /XYZ 150.705 716.092 null] +/D [1801 0 R /XYZ 150.705 716.092 null] >> -% 1799 0 obj +% 1800 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1804 0 obj +% 1805 0 obj << /Type /Page -/Contents 1805 0 R -/Resources 1803 0 R +/Contents 1806 0 R +/Resources 1804 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1807 0 R +/Parent 1808 0 R >> -% 1806 0 obj +% 1807 0 obj << -/D [1804 0 R /XYZ 98.895 753.953 null] +/D [1805 0 R /XYZ 98.895 753.953 null] >> % 461 0 obj << -/D [1804 0 R /XYZ 99.895 716.092 null] +/D [1805 0 R /XYZ 99.895 716.092 null] >> -% 1803 0 obj +% 1804 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F152 1491 0 R /F197 943 0 R /F78 686 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1809 0 obj +% 1810 0 obj << /Type /Page -/Contents 1810 0 R -/Resources 1808 0 R +/Contents 1811 0 R +/Resources 1809 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1807 0 R ->> -% 1811 0 obj -<< -/D [1809 0 R /XYZ 149.705 753.953 null] +/Parent 1808 0 R >> % 1812 0 obj << -/D [1809 0 R /XYZ 150.705 576.399 null] +/D [1810 0 R /XYZ 149.705 753.953 null] >> % 1813 0 obj << -/D [1809 0 R /XYZ 150.705 541.925 null] +/D [1810 0 R /XYZ 150.705 576.399 null] >> % 1814 0 obj << -/D [1809 0 R /XYZ 150.705 451.085 null] +/D [1810 0 R /XYZ 150.705 541.925 null] >> -% 1808 0 obj +% 1815 0 obj +<< +/D [1810 0 R /XYZ 150.705 451.085 null] +>> +% 1809 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F235 1045 0 R /F78 686 0 R /F281 1816 0 R >> /ProcSet [ /PDF /Text ] >> -% 1817 0 obj +% 1818 0 obj << /Type /Page -/Contents 1818 0 R -/Resources 1816 0 R +/Contents 1819 0 R +/Resources 1817 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1807 0 R +/Parent 1808 0 R >> -% 1819 0 obj +% 1820 0 obj << -/D [1817 0 R /XYZ 98.895 753.953 null] +/D [1818 0 R /XYZ 98.895 753.953 null] >> % 465 0 obj << -/D [1817 0 R /XYZ 99.895 716.092 null] +/D [1818 0 R /XYZ 99.895 716.092 null] >> -% 1816 0 obj +% 1817 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F195 942 0 R /F152 1491 0 R /F197 943 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1821 0 obj +% 1822 0 obj << /Type /Page -/Contents 1822 0 R -/Resources 1820 0 R +/Contents 1823 0 R +/Resources 1821 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1807 0 R ->> -% 1823 0 obj -<< -/D [1821 0 R /XYZ 149.705 753.953 null] +/Parent 1808 0 R >> % 1824 0 obj << -/D [1821 0 R /XYZ 150.705 588.355 null] +/D [1822 0 R /XYZ 149.705 753.953 null] >> % 1825 0 obj << -/D [1821 0 R /XYZ 150.705 553.88 null] +/D [1822 0 R /XYZ 150.705 588.355 null] +>> +% 1826 0 obj +<< +/D [1822 0 R /XYZ 150.705 553.88 null] >> endstream endobj -1830 0 obj +1831 0 obj << /Length 6060 >> @@ -23527,7 +23537,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(max)-250(\227)-250(Global)-250(maximum)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_max\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 114.839 664.53 Tm [(This)-253(subr)18(outine)-253(implements)-253(a)-253(maximum)-253(valuer)19(eduction)-254(oper)1(ation)-254(based)-253(on)]TJ 1 0 0 1 99.895 652.575 Tm [(the)-250(underlying)-250(communication)-250(library)111(.)]TJ +/F147 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_max\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 114.839 664.53 Tm [(This)-253(subr)18(outine)-253(implements)-253(a)-253(maximum)-253(valuer)19(eduction)-254(oper)1(ation)-254(based)-253(on)]TJ 1 0 0 1 99.895 652.575 Tm [(the)-250(underlying)-250(communication)-250(library)111(.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.288 Td [(T)90(ype:)]TJ 0 g 0 G @@ -23546,15 +23556,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -20.409 Td [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 1.009 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-247(to)-247(hold)-247(the)-247(\002nal)-247(maximum,)-247(or)]TJ/F190 10.3811 Tf 1 0 0 1 294.6 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 1.009 0 0 1 302.794 443.056 Tm [(1)-247(to)-247(make)-247(it)-247(available)-247(on)-246(a)-1(l)1(l)-247(pr)17(o-)]TJ 1 0 0 1 124.802 431.101 Tm [(cesses.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F190 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F148 10.3811 Tf 7.873 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F148 10.3811 Tf 19.923 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ +/F84 9.9626 Tf 1.009 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-247(to)-247(hold)-247(the)-247(\002nal)-247(maximum,)-247(or)]TJ/F195 10.3811 Tf 1 0 0 1 294.6 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 1.009 0 0 1 302.794 443.056 Tm [(1)-247(to)-247(make)-247(it)-247(available)-247(on)-246(a)-1(l)1(l)-247(pr)17(o-)]TJ 1 0 0 1 124.802 431.101 Tm [(cesses.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F195 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F152 10.3811 Tf 7.873 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F152 10.3811 Tf 19.923 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ 0 g 0 G /F75 9.9626 Tf -254.344 -32.364 Td [(mode)]TJ 0 g 0 G -/F84 9.9626 Tf 0.983 0 0 1 129.843 350.916 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 338.961 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 291.14 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 279.185 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 323.986 279.185 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 279.185 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 267.23 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 267.23 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 239.567 267.23 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 267.23 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 255.275 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ +/F84 9.9626 Tf 0.983 0 0 1 129.843 350.916 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 338.961 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 291.14 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 279.185 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 323.986 279.185 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 279.185 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 267.23 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 267.23 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 239.567 267.23 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 267.23 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 255.275 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -32.364 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ 0 g 0 G /F75 9.9626 Tf -57.485 -22.402 Td [(On)-250(Return)]TJ 0 g 0 G @@ -23569,7 +23579,7 @@ ET endstream endobj -1834 0 obj +1835 0 obj << /Length 5209 >> @@ -23581,15 +23591,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.906 -19.925 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.917 Td [(Notes)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.917 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 560.674 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 193.994 560.674 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 560.674 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 548.719 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ + 0.98 0 0 1 175.303 560.674 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 193.994 560.674 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 560.674 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 548.719 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 528.794 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 195.057 528.794 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 528.794 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 395.907 528.794 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 528.794 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 516.839 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 504.884 Tm [(the)]TJ/F145 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ + 1.02 0 0 1 175.303 528.794 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 195.057 528.794 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 528.794 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 395.907 528.794 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 528.794 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 516.839 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 504.884 Tm [(the)]TJ/F147 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -23603,7 +23613,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 482.268 Td [(call)]TJ +/F235 8.9664 Tf 188.015 482.268 Td [(call)]TJ 0 g 0 G [-525(psb_max\050ctxt,dat,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -23624,7 +23634,7 @@ BT 0 g 0 G /F84 9.9626 Tf -48.393 -36.164 Td [(3.)]TJ 0 g 0 G - 1.02 0 0 1 175.113 435.145 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F145 9.9626 Tf 1 0 0 1 379.88 435.145 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 435.145 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 435.145 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 435.145 Tm [(be)]TJ 1 0 0 1 175.611 423.19 Tm [(accessed)-250(between)-250(calls:)]TJ + 1.02 0 0 1 175.113 435.145 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F147 9.9626 Tf 1 0 0 1 379.88 435.145 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 435.145 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 435.145 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 435.145 Tm [(be)]TJ 1 0 0 1 175.611 423.19 Tm [(accessed)-250(between)-250(calls:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -23638,7 +23648,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 400.575 Td [(call)]TJ +/F235 8.9664 Tf 188.015 400.575 Td [(call)]TJ 0 g 0 G [-525(psb_max\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -23661,12 +23671,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ +/F281 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf -37.658 -10.959 Td [(call)]TJ +/F235 8.9664 Tf -37.658 -10.959 Td [(call)]TJ 0 g 0 G [-525(psb_max\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -23692,7 +23702,7 @@ ET endstream endobj -1841 0 obj +1842 0 obj << /Length 6144 >> @@ -23710,7 +23720,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(min)-250(\227)-250(Global)-250(minimum)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_min\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 664.53 Tm [(This)-247(subr)18(outine)-247(implements)-246(a)-247(minimum)-247(value)-246(r)17(eduction)-246(operation)-247(based)]TJ 1 0 0 1 99.895 652.575 Tm [(on)-250(the)-250(underlying)-250(communication)-250(library)111(.)]TJ +/F147 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_min\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 114.839 664.53 Tm [(This)-247(subr)18(outine)-247(implements)-246(a)-247(minimum)-247(value)-246(r)17(eduction)-246(operation)-247(based)]TJ 1 0 0 1 99.895 652.575 Tm [(on)-250(the)-250(underlying)-250(communication)-250(library)111(.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.288 Td [(T)90(ype:)]TJ 0 g 0 G @@ -23729,15 +23739,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -20.409 Td [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 0.986 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-253(to)-254(hold)-253(the)-253(\002nal)-254(value,)-253(or)]TJ/F190 10.3811 Tf 1 0 0 1 270.3 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 0.986 0 0 1 278.495 443.056 Tm [(1)-253(to)-254(make)-253(it)-254(available)-253(on)-253(all)-254(pr)19(ocesses.)]TJ 1 0 0 1 124.802 431.101 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F190 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F148 10.3811 Tf 7.873 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F148 10.3811 Tf 19.923 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ +/F84 9.9626 Tf 0.986 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-253(to)-254(hold)-253(the)-253(\002nal)-254(value,)-253(or)]TJ/F195 10.3811 Tf 1 0 0 1 270.3 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 0.986 0 0 1 278.495 443.056 Tm [(1)-253(to)-254(make)-253(it)-254(available)-253(on)-253(all)-254(pr)19(ocesses.)]TJ 1 0 0 1 124.802 431.101 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F195 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F152 10.3811 Tf 7.873 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F152 10.3811 Tf 19.923 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ 0 g 0 G /F75 9.9626 Tf -254.344 -32.364 Td [(mode)]TJ 0 g 0 G -/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ +/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -32.364 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ 0 g 0 G /F75 9.9626 Tf -57.485 -22.401 Td [(On)-250(Return)]TJ 0 g 0 G @@ -23752,7 +23762,7 @@ ET endstream endobj -1846 0 obj +1847 0 obj << /Length 5122 >> @@ -23764,15 +23774,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.598 -19.925 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.917 Td [(Notes)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.917 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 560.674 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 193.994 560.674 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 560.674 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 548.719 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ + 0.98 0 0 1 175.303 560.674 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 193.994 560.674 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 560.674 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 548.719 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 528.794 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 195.057 528.794 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 528.794 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 395.907 528.794 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 528.794 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 516.839 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 504.884 Tm [(the)]TJ/F145 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ + 1.02 0 0 1 175.303 528.794 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 195.057 528.794 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 528.794 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 395.907 528.794 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 528.794 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 516.839 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 504.884 Tm [(the)]TJ/F147 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -23786,7 +23796,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 482.268 Td [(call)]TJ +/F235 8.9664 Tf 188.015 482.268 Td [(call)]TJ 0 g 0 G [-525(psb_min\050ctxt,dat,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -23807,7 +23817,7 @@ BT 0 g 0 G /F84 9.9626 Tf -48.393 -36.164 Td [(3.)]TJ 0 g 0 G - 1.02 0 0 1 175.113 435.145 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F145 9.9626 Tf 1 0 0 1 379.88 435.145 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 435.145 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 435.145 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 435.145 Tm [(be)]TJ 1 0 0 1 175.611 423.19 Tm [(accessed)-250(between)-250(calls:)]TJ + 1.02 0 0 1 175.113 435.145 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F147 9.9626 Tf 1 0 0 1 379.88 435.145 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 435.145 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 435.145 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 435.145 Tm [(be)]TJ 1 0 0 1 175.611 423.19 Tm [(accessed)-250(between)-250(calls:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -23821,7 +23831,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 400.575 Td [(call)]TJ +/F235 8.9664 Tf 188.015 400.575 Td [(call)]TJ 0 g 0 G [-525(psb_min\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -23844,12 +23854,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ +/F281 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf -37.658 -10.959 Td [(call)]TJ +/F235 8.9664 Tf -37.658 -10.959 Td [(call)]TJ 0 g 0 G [-525(psb_min\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -23875,7 +23885,7 @@ ET endstream endobj -1853 0 obj +1854 0 obj << /Length 6205 >> @@ -23893,7 +23903,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(amx)-250(\227)-250(Global)-250(maximum)-250(absolute)-250(value)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_amx\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 114.839 664.53 Tm [(This)-250(subr)19(outine)-250(implements)-250(a)-249(maximum)-250(absolute)-250(value)-249(r)18(eduction)-250(operation)]TJ 1 0 0 1 99.895 652.575 Tm [(based)-250(on)-250(the)-250(underlying)-250(communication)-250(library)111(.)]TJ +/F147 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_amx\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 114.839 664.53 Tm [(This)-250(subr)19(outine)-250(implements)-250(a)-249(maximum)-250(absolute)-250(value)-249(r)18(eduction)-250(operation)]TJ 1 0 0 1 99.895 652.575 Tm [(based)-250(on)-250(the)-250(underlying)-250(communication)-250(library)111(.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.288 Td [(T)90(ype:)]TJ 0 g 0 G @@ -23912,15 +23922,15 @@ BT 0 g 0 G /F75 9.9626 Tf 1 0 0 1 99.895 443.056 Tm [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 0.986 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-253(to)-254(hold)-253(the)-253(\002nal)-254(value,)-253(or)]TJ/F190 10.3811 Tf 1 0 0 1 270.3 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 0.986 0 0 1 278.495 443.056 Tm [(1)-253(to)-254(make)-253(it)-254(available)-253(on)-253(all)-254(pr)19(ocesses.)]TJ 1 0 0 1 124.802 431.101 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F190 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F148 10.3811 Tf 7.873 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F148 10.3811 Tf 19.923 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ +/F84 9.9626 Tf 0.986 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-253(to)-254(hold)-253(the)-253(\002nal)-254(value,)-253(or)]TJ/F195 10.3811 Tf 1 0 0 1 270.3 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 0.986 0 0 1 278.495 443.056 Tm [(1)-253(to)-254(make)-253(it)-254(available)-253(on)-253(all)-254(pr)19(ocesses.)]TJ 1 0 0 1 124.802 431.101 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F195 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F152 10.3811 Tf 7.873 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F152 10.3811 Tf 19.923 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ 0 g 0 G /F75 9.9626 Tf -254.344 -32.364 Td [(mode)]TJ 0 g 0 G -/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ +/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -32.364 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ 0 g 0 G /F75 9.9626 Tf -57.485 -22.401 Td [(On)-250(Return)]TJ 0 g 0 G @@ -23935,7 +23945,7 @@ ET endstream endobj -1857 0 obj +1858 0 obj << /Length 5076 >> @@ -23947,15 +23957,15 @@ BT 0 g 0 G /F75 9.9626 Tf 1 0 0 1 150.705 662.293 Tm [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.918 Td [(Notes)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.918 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 572.629 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 193.994 572.629 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 572.629 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 560.674 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ + 0.98 0 0 1 175.303 572.629 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 193.994 572.629 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 572.629 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 560.674 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 540.749 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 195.057 540.749 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 540.749 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 395.907 540.749 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 540.749 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 528.794 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 516.839 Tm [(the)]TJ/F145 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ + 1.02 0 0 1 175.303 540.749 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 195.057 540.749 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 540.749 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 395.907 540.749 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 540.749 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 528.794 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 516.839 Tm [(the)]TJ/F147 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -23969,7 +23979,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 494.224 Td [(call)]TJ +/F235 8.9664 Tf 188.015 494.224 Td [(call)]TJ 0 g 0 G [-525(psb_amx\050ctxt,dat,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -23990,7 +24000,7 @@ BT 0 g 0 G /F84 9.9626 Tf -48.393 -36.165 Td [(3.)]TJ 0 g 0 G - 1.02 0 0 1 175.113 447.1 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F145 9.9626 Tf 1 0 0 1 379.88 447.1 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 447.1 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 447.1 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 447.1 Tm [(be)]TJ 1 0 0 1 175.611 435.145 Tm [(accessed)-250(between)-250(calls:)]TJ + 1.02 0 0 1 175.113 447.1 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F147 9.9626 Tf 1 0 0 1 379.88 447.1 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 447.1 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 447.1 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 447.1 Tm [(be)]TJ 1 0 0 1 175.611 435.145 Tm [(accessed)-250(between)-250(calls:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -24002,7 +24012,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 178.6 412.53 Td [(call)]TJ +/F235 8.9664 Tf 178.6 412.53 Td [(call)]TJ 0 g 0 G [-525(psb_amx\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -24025,12 +24035,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ +/F281 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf -37.658 -10.959 Td [(call)]TJ +/F235 8.9664 Tf -37.658 -10.959 Td [(call)]TJ 0 g 0 G [-525(psb_amx\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -24056,7 +24066,7 @@ ET endstream endobj -1864 0 obj +1865 0 obj << /Length 6206 >> @@ -24074,7 +24084,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(amn)-250(\227)-250(Global)-250(minimum)-250(absolute)-250(value)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_amn\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.983 0 0 1 114.839 664.53 Tm [(This)-255(subr)19(outine)-255(implements)-255(a)-254(minimum)-255(absolute)-255(value)-255(r)19(eduction)-255(operation)]TJ 1 0 0 1 99.895 652.575 Tm [(based)-250(on)-250(the)-250(underlying)-250(communication)-250(library)111(.)]TJ +/F147 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_amn\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 0.983 0 0 1 114.839 664.53 Tm [(This)-255(subr)19(outine)-255(implements)-255(a)-254(minimum)-255(absolute)-255(value)-255(r)19(eduction)-255(operation)]TJ 1 0 0 1 99.895 652.575 Tm [(based)-250(on)-250(the)-250(underlying)-250(communication)-250(library)111(.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.288 Td [(T)90(ype:)]TJ 0 g 0 G @@ -24093,15 +24103,15 @@ BT 0 g 0 G /F75 9.9626 Tf 1 0 0 1 99.895 443.056 Tm [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 0.986 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-253(to)-254(hold)-253(the)-253(\002nal)-254(value,)-253(or)]TJ/F190 10.3811 Tf 1 0 0 1 270.3 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 0.986 0 0 1 278.495 443.056 Tm [(1)-253(to)-254(make)-253(it)-254(available)-253(on)-253(all)-254(pr)19(ocesses.)]TJ 1 0 0 1 124.802 431.101 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F190 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F148 10.3811 Tf 7.873 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F148 10.3811 Tf 19.923 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ +/F84 9.9626 Tf 0.986 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-253(to)-254(hold)-253(the)-253(\002nal)-254(value,)-253(or)]TJ/F195 10.3811 Tf 1 0 0 1 270.3 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 0.986 0 0 1 278.495 443.056 Tm [(1)-253(to)-254(make)-253(it)-254(available)-253(on)-253(all)-254(pr)19(ocesses.)]TJ 1 0 0 1 124.802 431.101 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F195 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F152 10.3811 Tf 7.873 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F152 10.3811 Tf 19.923 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ 0 g 0 G /F75 9.9626 Tf -254.344 -32.364 Td [(mode)]TJ 0 g 0 G -/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ +/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -32.364 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ 0 g 0 G /F75 9.9626 Tf -57.485 -22.401 Td [(On)-250(Return)]TJ 0 g 0 G @@ -24116,7 +24126,7 @@ ET endstream endobj -1868 0 obj +1869 0 obj << /Length 5140 >> @@ -24128,15 +24138,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.598 -19.925 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.917 Td [(Notes)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.917 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 560.674 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 193.994 560.674 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 560.674 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 548.719 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ + 0.98 0 0 1 175.303 560.674 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 193.994 560.674 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 560.674 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 548.719 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 528.794 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 195.057 528.794 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 528.794 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 395.907 528.794 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 528.794 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 516.839 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 504.884 Tm [(the)]TJ/F145 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ + 1.02 0 0 1 175.303 528.794 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 195.057 528.794 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 528.794 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 395.907 528.794 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 528.794 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 516.839 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 504.884 Tm [(the)]TJ/F147 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -24150,7 +24160,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 482.268 Td [(call)]TJ +/F235 8.9664 Tf 188.015 482.268 Td [(call)]TJ 0 g 0 G [-525(psb_amn\050ctxt,dat,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -24171,7 +24181,7 @@ BT 0 g 0 G /F84 9.9626 Tf -48.393 -36.164 Td [(3.)]TJ 0 g 0 G - 1.02 0 0 1 175.113 435.145 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F145 9.9626 Tf 1 0 0 1 379.88 435.145 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 435.145 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 435.145 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 435.145 Tm [(be)]TJ 1 0 0 1 175.611 423.19 Tm [(accessed)-250(between)-250(calls:)]TJ + 1.02 0 0 1 175.113 435.145 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F147 9.9626 Tf 1 0 0 1 379.88 435.145 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 435.145 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 435.145 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 435.145 Tm [(be)]TJ 1 0 0 1 175.611 423.19 Tm [(accessed)-250(between)-250(calls:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -24185,7 +24195,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 400.575 Td [(call)]TJ +/F235 8.9664 Tf 188.015 400.575 Td [(call)]TJ 0 g 0 G [-525(psb_amn\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -24208,12 +24218,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ +/F281 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf -37.658 -10.959 Td [(call)]TJ +/F235 8.9664 Tf -37.658 -10.959 Td [(call)]TJ 0 g 0 G [-525(psb_amn\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -24239,7 +24249,7 @@ ET endstream endobj -1875 0 obj +1876 0 obj << /Length 6113 >> @@ -24257,7 +24267,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(nrm2)-250(\227)-250(Global)-250(2-norm)-250(reduction)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_nrm2\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 1.014 0 0 1 114.839 664.53 Tm [(This)-246(subr)18(outine)-246(implements)-246(a)-246(2-norm)-246(value)-246(r)17(educti)1(on)-247(ope)1(ration)-247(b)1(ased)-247(on)]TJ 1 0 0 1 99.895 652.575 Tm [(the)-250(underlying)-250(communication)-250(library)111(.)]TJ +/F147 9.9626 Tf -57.098 -19.198 Td [(call)-525(psb_nrm2\050ctxt,)-525(dat)-525([,)-525(root,)-525(mode,)-525(request]\051)]TJ/F84 9.9626 Tf 1.014 0 0 1 114.839 664.53 Tm [(This)-246(subr)18(outine)-246(implements)-246(a)-246(2-norm)-246(value)-246(r)17(educti)1(on)-247(ope)1(ration)-247(b)1(ased)-247(on)]TJ 1 0 0 1 99.895 652.575 Tm [(the)-250(underlying)-250(communication)-250(library)111(.)]TJ 0 g 0 G /F75 9.9626 Tf 0 -20.288 Td [(T)90(ype:)]TJ 0 g 0 G @@ -24276,15 +24286,15 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -20.409 Td [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 0.986 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-253(to)-254(hold)-253(the)-253(\002nal)-254(value,)-253(or)]TJ/F190 10.3811 Tf 1 0 0 1 270.3 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 0.986 0 0 1 278.495 443.056 Tm [(1)-253(to)-254(make)-253(it)-254(available)-253(on)-253(all)-254(pr)19(ocesses.)]TJ 1 0 0 1 124.802 431.101 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F190 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F148 10.3811 Tf 7.873 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F148 10.3811 Tf 19.923 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ +/F84 9.9626 Tf 0.986 0 0 1 123.148 443.056 Tm [(Pr)18(ocess)-253(to)-254(hold)-253(the)-253(\002nal)-254(value,)-253(or)]TJ/F195 10.3811 Tf 1 0 0 1 270.3 443.056 Tm [(\000)]TJ/F84 9.9626 Tf 0.986 0 0 1 278.495 443.056 Tm [(1)-253(to)-254(make)-253(it)-254(available)-253(on)-253(all)-254(pr)19(ocesses.)]TJ 1 0 0 1 124.802 431.101 Tm [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)]TJ/F195 10.3811 Tf 131.102 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1)]TJ/F152 10.3811 Tf 7.873 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 10.986 0 Td [(r)-17(o)-35(o)-35(t)]TJ/F152 10.3811 Tf 19.923 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.132 0 Td [(1,)-250(default)-250(-1.)]TJ 0 g 0 G /F75 9.9626 Tf -254.344 -32.364 Td [(mode)]TJ 0 g 0 G -/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ +/F84 9.9626 Tf 0.983 0 0 1 129.843 362.871 Tm [(Whether)-256(the)-255(call)-256(is)-256(started)-256(in)-255(non-blocking)-256(mode)-256(and)-256(completed)-255(later)75(,)-256(or)]TJ 1 0 0 1 124.802 350.916 Tm [(is)-250(executed)-250(synchr)18(onously)111(.)]TJ 0 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.802 303.096 Tm [(Speci\002ed)-285(as:)-383(an)-285(integer)-285(value.)-423(The)-284(action)-285(to)-285(be)-285(taken)-284(is)-285(determined)-285(by)]TJ 1.02 0 0 1 124.802 291.14 Tm [(its)-329(bit)-328(\002elds,)-350(which)-329(can)-328(be)-329(set)-329(with)-328(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 323.986 291.14 Tm [(OR)]TJ/F84 9.9626 Tf 1.02 0 0 1 334.446 291.14 Tm [(.)-329(Basic)-328(action)-329(values)-329(ar)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 124.802 279.185 Tm [(psb_collective_start_)]TJ/F84 9.9626 Tf 0.98 0 0 1 234.639 279.185 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 239.567 279.185 Tm [(psb_collective_end_)]TJ/F84 9.9626 Tf 0.98 0 0 1 338.943 279.185 Tm [(.)-316(Default:)-316(both)-255(\002elds)-254(ar)18(e)]TJ 1 0 0 1 124.802 267.23 Tm [(selected)-250(\050i.e.)-310(r)18(equir)18(e)-250(synchr)18(onous)-250(completion\051.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -32.364 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.439 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ 0 g 0 G /F75 9.9626 Tf -57.485 -22.401 Td [(On)-250(Return)]TJ 0 g 0 G @@ -24299,7 +24309,7 @@ ET endstream endobj -1880 0 obj +1881 0 obj << /Length 6575 >> @@ -24311,7 +24321,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.906 -19.926 Td [(request)]TJ 0 g 0 G -/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F145 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.918 Td [(Notes)]TJ +/F84 9.9626 Tf 38.346 0 Td [(A)-250(r)18(equest)-250(variable)-250(to)-250(check)-250(for)-250(operation)-250(completion.)]TJ -13.44 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(If)]TJ/F147 9.9626 Tf 9.166 0 Td [(mode)]TJ/F84 9.9626 Tf 23.412 0 Td [(speci\002es)-250(non-blocking)-250(action,)-250(then)-250(this)-250(variable)-250(must)-250(be)-250(pr)18(esent.)]TJ/F75 11.9552 Tf -57.484 -21.918 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.453 -19.926 Td [(1.)]TJ 0 g 0 G @@ -24319,22 +24329,22 @@ BT 0 g 0 G -12.453 -19.925 Td [(2.)]TJ 0 g 0 G - 0.999 0 0 1 175.611 540.749 Tm [(Denoting)-251(by)]TJ/F78 9.9626 Tf 1 0 0 1 232.93 540.749 Tm [(d)-40(a)-25(t)]TJ/F78 7.5716 Tf 13.536 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.999 0 0 1 251.713 540.749 Tm [(the)-251(value)-251(of)-250(the)-251(variable)]TJ/F78 9.9626 Tf 1 0 0 1 360.51 540.749 Tm [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 0.999 0 0 1 376.501 540.749 Tm [(on)-251(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 425.568 540.749 Tm [(i)]TJ/F84 9.9626 Tf 0.999 0 0 1 428.532 540.749 Tm [(,)-251(the)-251(output)]TJ/F78 9.9626 Tf 1 0 0 1 482.247 540.749 Tm [(r)-17(e)-25(s)]TJ/F84 9.9626 Tf -306.636 -11.955 Td [(is)-250(equivalent)-250(to)-250(the)-250(computation)-250(of)]TJ/F78 9.9626 Tf 124.797 -25.467 Td [(r)-17(e)-25(s)]TJ/F192 10.3811 Tf 15.061 0 Td [(=)]TJ/F17 9.9626 Tf 11.086 10.922 Td [(r)]TJ + 0.999 0 0 1 175.611 540.749 Tm [(Denoting)-251(by)]TJ/F78 9.9626 Tf 1 0 0 1 232.93 540.749 Tm [(d)-40(a)-25(t)]TJ/F78 7.5716 Tf 13.536 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.999 0 0 1 251.713 540.749 Tm [(the)-251(value)-251(of)-250(the)-251(variable)]TJ/F78 9.9626 Tf 1 0 0 1 360.51 540.749 Tm [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 0.999 0 0 1 376.501 540.749 Tm [(on)-251(pr)18(ocess)]TJ/F78 9.9626 Tf 1 0 0 1 425.568 540.749 Tm [(i)]TJ/F84 9.9626 Tf 0.999 0 0 1 428.532 540.749 Tm [(,)-251(the)-251(output)]TJ/F78 9.9626 Tf 1 0 0 1 482.247 540.749 Tm [(r)-17(e)-25(s)]TJ/F84 9.9626 Tf -306.636 -11.955 Td [(is)-250(equivalent)-250(to)-250(the)-250(computation)-250(of)]TJ/F78 9.9626 Tf 124.797 -25.467 Td [(r)-17(e)-25(s)]TJ/F197 10.3811 Tf 15.061 0 Td [(=)]TJ/F17 9.9626 Tf 11.086 10.922 Td [(r)]TJ ET q 1 0 0 1 336.642 514.443 cm []0 d 0 J 0.389 w 0 0 m 30.512 0 l S Q BT -/F243 13.9477 Tf 336.766 501.255 Td [(\345)]TJ/F78 7.5716 Tf 4.245 -8.765 Td [(i)]TJ/F78 9.9626 Tf 8.365 10.837 Td [(d)-40(a)-25(t)]TJ/F84 7.5716 Tf 13.494 3.472 Td [(2)]TJ/F78 7.5716 Tf 0.042 -7.026 Td [(i)]TJ/F84 9.9626 Tf 4.242 3.554 Td [(,)]TJ -191.961 -30.807 Td [(with)-250(car)18(e)-250(taken)-250(to)-250(avoid)-250(unnecessary)-250(over\003ow)92(.)]TJ +/F241 13.9477 Tf 336.766 501.255 Td [(\345)]TJ/F78 7.5716 Tf 4.245 -8.765 Td [(i)]TJ/F78 9.9626 Tf 8.365 10.837 Td [(d)-40(a)-25(t)]TJ/F84 7.5716 Tf 13.494 3.472 Td [(2)]TJ/F78 7.5716 Tf 0.042 -7.026 Td [(i)]TJ/F84 9.9626 Tf 4.242 3.554 Td [(,)]TJ -191.961 -30.807 Td [(with)-250(car)18(e)-250(taken)-250(to)-250(avoid)-250(unnecessary)-250(over\003ow)92(.)]TJ 0 g 0 G -12.035 -19.925 Td [(3.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 452.595 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 193.994 452.595 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 452.595 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 440.64 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ + 0.98 0 0 1 175.303 452.595 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 193.994 452.595 Tm [(dat)]TJ/F84 9.9626 Tf 0.98 0 0 1 212.032 452.595 Tm [(ar)18(gument)-240(is)-240(both)-241(input)-240(and)-241(output,)-243(and)-240(its)-241(value)-240(may)-240(be)-241(changed)]TJ 1 0 0 1 175.611 440.64 Tm [(even)-250(on)-250(pr)18(ocesses)-250(dif)18(fer)18(ent)-250(fr)18(om)-250(the)-250(\002nal)-250(r)18(esult)-250(destination.)]TJ 0 g 0 G -12.453 -19.926 Td [(4.)]TJ 0 g 0 G - 1.02 0 0 1 175.303 420.714 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 195.057 420.714 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 420.714 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F145 9.9626 Tf 1 0 0 1 395.907 420.714 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 420.714 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 408.759 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 396.804 Tm [(the)]TJ/F145 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ + 1.02 0 0 1 175.303 420.714 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 195.057 420.714 Tm [(mode)]TJ/F84 9.9626 Tf 1.02 0 0 1 218.722 420.714 Tm [(ar)18(gument)-270(can)-270(be)-270(built)-270(with)-270(the)-270(bitwise)]TJ/F147 9.9626 Tf 1 0 0 1 395.907 420.714 Tm [(IOR\050\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.803 420.714 Tm [(operator;)-282(in)-270(the)]TJ 0.988 0 0 1 175.611 408.759 Tm [(following)-254(example,)-255(the)-254(ar)18(gument)-254(is)-255(for)18(cing)-254(immediate)-254(completion,)-255(hence)]TJ 1 0 0 1 175.611 396.804 Tm [(the)]TJ/F147 9.9626 Tf 16.309 0 Td [(request)]TJ/F84 9.9626 Tf 39.103 0 Td [(ar)18(gument)-250(needs)-250(not)-250(be)-250(speci\002ed:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -24348,7 +24358,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 188.015 374.189 Td [(call)]TJ +/F235 8.9664 Tf 188.015 374.189 Td [(call)]TJ 0 g 0 G [-525(psb_nrm2\050ctxt,dat,&)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -24369,7 +24379,7 @@ BT 0 g 0 G /F84 9.9626 Tf -48.393 -36.164 Td [(5.)]TJ 0 g 0 G - 1.02 0 0 1 175.113 327.066 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F145 9.9626 Tf 1 0 0 1 379.88 327.066 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 327.066 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 327.066 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 327.066 Tm [(be)]TJ 1 0 0 1 175.611 315.11 Tm [(accessed)-250(between)-250(calls:)]TJ + 1.02 0 0 1 175.113 327.066 Tm [(When)-250(splitting)-250(the)-250(operation)-250(in)-250(two)-250(c)1(alls,)-252(the)]TJ/F147 9.9626 Tf 1 0 0 1 379.88 327.066 Tm [(dat)]TJ/F84 9.9626 Tf 1.02 0 0 1 398.111 327.066 Tm [(ar)18(gument)]TJ/F78 9.9626 Tf 1.02 0 0 1 444.411 327.066 Tm [(must)-250(not)]TJ/F84 9.9626 Tf 1.02 0 0 1 483.929 327.066 Tm [(be)]TJ 1 0 0 1 175.611 315.11 Tm [(accessed)-250(between)-250(calls:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -24381,7 +24391,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 178.6 292.495 Td [(call)]TJ +/F235 8.9664 Tf 178.6 292.495 Td [(call)]TJ 0 g 0 G [-525(psb_nrm2\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -24404,12 +24414,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ +/F281 8.9664 Tf 37.658 0 Td [(!)-525(Do)-525(not)-525(access)-525(dat)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf -37.658 -10.959 Td [(call)]TJ +/F235 8.9664 Tf -37.658 -10.959 Td [(call)]TJ 0 g 0 G [-525(psb_nrm2\050ctxt,dat,mode)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -24435,7 +24445,7 @@ ET endstream endobj -1890 0 obj +1891 0 obj << /Length 5618 >> @@ -24453,7 +24463,7 @@ BT /F75 11.9552 Tf 156.993 706.129 Td [(snd)-250(\227)-250(Send)-250(data)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_snd\050ctxt,)-525(dat,)-525(dst,)-525(m\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(subr)18(outine)-250(sends)-250(a)-250(packet)-250(of)-250(data)-250(to)-250(a)-250(destination.)]TJ +/F147 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_snd\050ctxt,)-525(dat,)-525(dst,)-525(m\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(subr)18(outine)-250(sends)-250(a)-250(packet)-250(of)-250(data)-250(to)-250(a)-250(destination.)]TJ 0 g 0 G /F75 9.9626 Tf -14.944 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -24472,11 +24482,11 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.925 Td [(dst)]TJ 0 g 0 G -/F84 9.9626 Tf 18.81 0 Td [(Destination)-250(pr)18(ocess.)]TJ 6.097 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F148 10.3811 Tf 138.85 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(d)-25(s)-25(t)]TJ/F148 10.3811 Tf 15.689 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1.)]TJ +/F84 9.9626 Tf 18.81 0 Td [(Destination)-250(pr)18(ocess.)]TJ 6.097 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -66.072 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F152 10.3811 Tf 138.85 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(d)-25(s)-25(t)]TJ/F152 10.3811 Tf 15.689 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.503 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1.)]TJ 0 g 0 G /F75 9.9626 Tf -241.89 -31.88 Td [(m)]TJ 0 g 0 G -/F84 9.9626 Tf 13.838 0 Td [(Number)-250(of)-250(r)18(ows.)]TJ 11.069 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(Optional)]TJ/F84 9.9626 Tf 40.946 0 Td [(.)]TJ -67.725 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F148 10.3811 Tf 138.85 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(m)]TJ/F148 10.3811 Tf 10.767 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(s)-18(i)-32(z)-25(e)]TJ/F192 10.3811 Tf 15.94 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 13.494 0 Td [(,)-167(1)]TJ/F192 10.3811 Tf 9.257 0 Td [(\051)]TJ/F84 9.9626 Tf 4.15 0 Td [(.)]TJ 1.02 0 0 1 124.304 294.637 Tm [(When)]TJ/F78 9.9626 Tf 1 0 0 1 153.769 294.637 Tm [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 1.02 0 0 1 169.747 294.637 Tm [(is)-244(a)-245(rank)-244(2)-245(array)109(,)-244(speci\002es)-245(the)-244(number)-244(of)-245(r)18(ows)-244(to)-245(be)-244(sent)-245(inde-)]TJ 0.98 0 0 1 124.503 282.682 Tm [(pendently)-236(of)-236(the)-236(leading)-236(dimension)]TJ/F78 9.9626 Tf 1 0 0 1 280.369 282.682 Tm [(s)-18(i)-32(z)-25(e)]TJ/F192 10.3811 Tf 15.94 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 0.98 0 0 1 314.077 282.682 Tm [(,)-170(1)]TJ/F192 10.3811 Tf 1 0 0 1 323.185 282.682 Tm [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 327.334 282.682 Tm [(;)-242(must)-236(have)-236(the)-236(same)-236(value)]TJ 1 0 0 1 124.802 270.727 Tm [(on)-250(sending)-250(and)-250(r)18(eceiving)-250(pr)18(ocesses.)]TJ +/F84 9.9626 Tf 13.838 0 Td [(Number)-250(of)-250(r)18(ows.)]TJ 11.069 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.523 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(Optional)]TJ/F84 9.9626 Tf 40.946 0 Td [(.)]TJ -67.725 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F152 10.3811 Tf 138.85 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(m)]TJ/F152 10.3811 Tf 10.767 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(s)-18(i)-32(z)-25(e)]TJ/F197 10.3811 Tf 15.94 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 13.494 0 Td [(,)-167(1)]TJ/F197 10.3811 Tf 9.257 0 Td [(\051)]TJ/F84 9.9626 Tf 4.15 0 Td [(.)]TJ 1.02 0 0 1 124.304 294.637 Tm [(When)]TJ/F78 9.9626 Tf 1 0 0 1 153.769 294.637 Tm [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 1.02 0 0 1 169.747 294.637 Tm [(is)-244(a)-245(rank)-244(2)-245(array)109(,)-244(speci\002es)-245(the)-244(number)-244(of)-245(r)18(ows)-244(to)-245(be)-244(sent)-245(inde-)]TJ 0.98 0 0 1 124.503 282.682 Tm [(pendently)-236(of)-236(the)-236(leading)-236(dimension)]TJ/F78 9.9626 Tf 1 0 0 1 280.369 282.682 Tm [(s)-18(i)-32(z)-25(e)]TJ/F197 10.3811 Tf 15.94 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 0.98 0 0 1 314.077 282.682 Tm [(,)-170(1)]TJ/F197 10.3811 Tf 1 0 0 1 323.185 282.682 Tm [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 327.334 282.682 Tm [(;)-242(must)-236(have)-236(the)-236(same)-236(value)]TJ 1 0 0 1 124.802 270.727 Tm [(on)-250(sending)-250(and)-250(r)18(eceiving)-250(pr)18(ocesses.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -21.918 Td [(On)-250(Return)]TJ 0 g 0 G @@ -24492,7 +24502,7 @@ ET endstream endobj -1895 0 obj +1896 0 obj << /Length 5630 >> @@ -24510,7 +24520,7 @@ BT /F75 11.9552 Tf 207.803 706.129 Td [(rcv)-250(\227)-250(Receive)-250(data)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_rcv\050ctxt,)-525(dat,)-525(src,)-525(m\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(subr)18(outine)-250(r)18(eceives)-250(a)-250(packet)-250(of)-250(data)-250(to)-250(a)-250(destination.)]TJ +/F147 9.9626 Tf -57.098 -18.964 Td [(call)-525(psb_rcv\050ctxt,)-525(dat,)-525(src,)-525(m\051)]TJ/F84 9.9626 Tf 14.944 -21.918 Td [(This)-250(subr)18(outine)-250(r)18(eceives)-250(a)-250(packet)-250(of)-250(data)-250(to)-250(a)-250(destination.)]TJ 0 g 0 G /F75 9.9626 Tf -14.944 -19.925 Td [(T)90(ype:)]TJ 0 g 0 G @@ -24525,11 +24535,11 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.926 Td [(src)]TJ 0 g 0 G -/F84 9.9626 Tf 17.703 0 Td [(Sour)18(ce)-250(pr)18(ocess.)]TJ 7.204 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.071 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F148 10.3811 Tf 138.85 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(s)-15(r)-17(c)]TJ/F148 10.3811 Tf 15.14 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F190 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1.)]TJ +/F84 9.9626 Tf 17.703 0 Td [(Sour)18(ce)-250(pr)18(ocess.)]TJ 7.204 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -66.071 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F152 10.3811 Tf 138.85 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(s)-15(r)-17(c)]TJ/F152 10.3811 Tf 15.14 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(n)-80(p)]TJ/F195 10.3811 Tf 13.504 0 Td [(\000)]TJ/F84 9.9626 Tf 10.131 0 Td [(1.)]TJ 0 g 0 G /F75 9.9626 Tf -241.342 -31.881 Td [(m)]TJ 0 g 0 G -/F84 9.9626 Tf 13.838 0 Td [(Number)-250(of)-250(r)18(ows.)]TJ 11.069 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(Optional)]TJ/F84 9.9626 Tf 40.946 0 Td [(.)]TJ -67.725 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F148 10.3811 Tf 138.85 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(m)]TJ/F148 10.3811 Tf 10.767 0 Td [(<)]TJ/F192 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(s)-18(i)-32(z)-25(e)]TJ/F192 10.3811 Tf 15.94 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 13.494 0 Td [(,)-167(1)]TJ/F192 10.3811 Tf 9.257 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ 1.02 0 0 1 175.113 398.249 Tm [(When)]TJ/F78 9.9626 Tf 1 0 0 1 204.579 398.249 Tm [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 1.02 0 0 1 220.557 398.249 Tm [(is)-244(a)-245(rank)-244(2)-244(array)108(,)-244(speci\002es)-245(the)-244(number)-244(of)-245(r)18(ows)-244(to)-245(be)-244(sent)-244(inde-)]TJ 0.98 0 0 1 175.313 386.293 Tm [(pendently)-236(of)-236(the)-236(leading)-236(dimension)]TJ/F78 9.9626 Tf 1 0 0 1 331.178 386.293 Tm [(s)-18(i)-32(z)-25(e)]TJ/F192 10.3811 Tf 15.94 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.887 386.293 Tm [(,)-170(1)]TJ/F192 10.3811 Tf 1 0 0 1 373.994 386.293 Tm [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 378.144 386.293 Tm [(;)-242(must)-236(have)-236(the)-236(same)-236(value)]TJ 1 0 0 1 175.611 374.338 Tm [(on)-250(sending)-250(and)-250(r)18(eceiving)-250(pr)18(ocesses.)]TJ +/F84 9.9626 Tf 13.838 0 Td [(Number)-250(of)-250(r)18(ows.)]TJ 11.069 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(global)]TJ/F84 9.9626 Tf 28.782 0 Td [(.)]TJ -60.522 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(Optional)]TJ/F84 9.9626 Tf 40.946 0 Td [(.)]TJ -67.725 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value)-250(0)]TJ/F152 10.3811 Tf 138.85 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(m)]TJ/F152 10.3811 Tf 10.767 0 Td [(<)]TJ/F197 10.3811 Tf 8.319 0 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(s)-18(i)-32(z)-25(e)]TJ/F197 10.3811 Tf 15.94 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 13.494 0 Td [(,)-167(1)]TJ/F197 10.3811 Tf 9.257 0 Td [(\051)]TJ/F84 9.9626 Tf 4.149 0 Td [(.)]TJ 1.02 0 0 1 175.113 398.249 Tm [(When)]TJ/F78 9.9626 Tf 1 0 0 1 204.579 398.249 Tm [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 1.02 0 0 1 220.557 398.249 Tm [(is)-244(a)-245(rank)-244(2)-244(array)108(,)-244(speci\002es)-245(the)-244(number)-244(of)-245(r)18(ows)-244(to)-245(be)-244(sent)-244(inde-)]TJ 0.98 0 0 1 175.313 386.293 Tm [(pendently)-236(of)-236(the)-236(leading)-236(dimension)]TJ/F78 9.9626 Tf 1 0 0 1 331.178 386.293 Tm [(s)-18(i)-32(z)-25(e)]TJ/F197 10.3811 Tf 15.94 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(d)-40(a)-25(t)]TJ/F84 9.9626 Tf 0.98 0 0 1 364.887 386.293 Tm [(,)-170(1)]TJ/F197 10.3811 Tf 1 0 0 1 373.994 386.293 Tm [(\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 378.144 386.293 Tm [(;)-242(must)-236(have)-236(the)-236(same)-236(value)]TJ 1 0 0 1 175.611 374.338 Tm [(on)-250(sending)-250(and)-250(r)18(eceiving)-250(pr)18(ocesses.)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -21.918 Td [(On)-250(Return)]TJ 0 g 0 G @@ -24548,23 +24558,23 @@ ET endstream endobj -1902 0 obj +1903 0 obj << -/Length 6870 +/Length 6890 >> stream 0 g 0 G 0 g 0 G BT -/F75 14.3462 Tf 99.895 705.784 Td [(8)-1000(Error)-250(handling)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 683.082 Tm [(The)-317(PSBLAS)-317(library)-317(err)17(or)-317(handling)-317(policy)-317(has)-317(been)-317(completely)-318(r)18(ewritten)-317(in)]TJ 1.02 0 0 1 99.616 671.127 Tm [(version)-315(2.0.)-514(The)-314(idea)-315(behind)-315(the)-315(design)-315(of)-315(this)-315(new)-315(err)17(or)-314(handling)-315(strategy)]TJ 1.02 0 0 1 99.895 659.172 Tm [(is)-261(to)-260(keep)-261(err)17(or)-260(messages)-261(on)-261(a)-260(stack)-261(allowing)-261(the)-260(user)-261(to)-261(trace)-261(back)-260(up)-261(to)-261(the)]TJ 1.02 0 0 1 99.596 647.217 Tm [(point)-270(wher)17(e)-270(the)-271(\002rst)-270(err)17(or)-270(message)-270(has)-271(been)-270(generated.)-380(Every)-271(r)18(outine)-271(in)-270(the)]TJ 0.98 0 0 1 99.895 635.261 Tm [(PSBLAS-2.0)-245(library)-245(has,)-247(as)-245(last)-245(non-optional)-245(ar)18(gument,)-247(an)-245(integer)]TJ/F145 9.9626 Tf 1 0 0 1 384.203 635.261 Tm [(info)]TJ/F84 9.9626 Tf 0.98 0 0 1 407.517 635.261 Tm [(variable;)]TJ 1 0 0 1 99.477 623.306 Tm [(whenever)74(,)-251(inside)-250(the)-251(r)18(outine,)-250(an)-251(err)18(or)-250(is)-251(detected,)-250(this)-251(variable)-250(is)-251(set)-250(to)-251(a)-250(value)]TJ 1.02 0 0 1 99.895 611.351 Tm [(corr)18(esponding)-337(to)-336(a)-337(speci\002c)-336(err)17(or)-336(code.)-578(Then)-337(this)-336(err)17(or)-336(code)-337(is)-336(also)-337(pushed)]TJ 1.02 0 0 1 99.895 599.396 Tm [(on)-299(the)-299(err)17(or)-299(stack)-299(and)-299(then)-299(either)-299(contr)17(ol)-299(is)-299(r)18(eturned)-299(to)-300(the)-299(caller)-299(r)18(outine)-299(or)]TJ 1.005 0 0 1 99.895 587.441 Tm [(the)-249(execution)-249(is)-249(aborted,)-249(depending)-249(on)-250(the)-249(users)-249(choice.)-309(At)-249(the)-249(time)-249(when)-250(the)]TJ 0.98 0 0 1 99.895 575.486 Tm [(execution)-218(is)-218(aborted,)-226(an)-218(err)18(or)-218(message)-218(is)-218(printed)-218(on)-218(standar)18(d)-218(output)-218(with)-218(a)-218(level)]TJ 0.98 0 0 1 99.895 563.53 Tm [(of)-247(verbosity)-247(than)-246(can)-247(be)-247(chosen)-247(by)-247(the)-246(user)75(.)-313(If)-247(the)-247(execution)-247(is)-247(not)-246(aborted,)-249(then,)]TJ 0.98 0 0 1 99.895 551.575 Tm [(the)-256(caller)-256(r)18(outine)-256(checks)-256(the)-256(value)-256(r)18(eturned)-256(in)-256(the)]TJ/F145 9.9626 Tf 1 0 0 1 316.265 551.575 Tm [(info)]TJ/F84 9.9626 Tf 0.98 0 0 1 339.687 551.575 Tm [(variable)-256(and,)-256(if)-257(not)-256(zer)19(o,)]TJ 1.02 0 0 1 99.895 539.62 Tm [(an)-247(err)17(or)-247(condition)-247(is)-247(raised.)-311(This)-247(pr)18(ocess)-247(continues)-248(on)-247(all)-247(the)-247(levels)-248(o)1(f)-248(nested)]TJ 1 0 0 1 99.895 527.665 Tm [(calls)-250(until)-250(the)-250(level)-250(wher)18(e)-250(the)-250(user)-250(decides)-250(to)-250(abort)-250(the)-250(pr)18(ogram)-250(execution.)]TJ 1.018 0 0 1 114.839 515.71 Tm [(Figur)18(e)]TJ +/F75 14.3462 Tf 99.895 705.784 Td [(8)-1000(Error)-250(handling)]TJ/F84 9.9626 Tf 0.996 0 0 1 99.587 683.082 Tm [(The)-250(PSBLAS)-251(library)-250(err)18(or)-251(handli)1(ng)-251(policy)-250(has)-251(been)-250(de\002ned)-251(at)-250(the)-250(time)-251(version)]TJ 0.98 0 0 1 99.895 671.127 Tm [(2.0)-240(was)-240(written.)-311(The)-240(idea)-240(behind)-240(the)-240(design)-240(of)-240(err)18(or)-240(handling)-240(strategy)-240(is)-240(to)-240(keep)]TJ 0.99 0 0 1 99.895 659.172 Tm [(err)18(or)-253(messages)-254(on)-253(a)-254(stack)-253(allowing)-254(the)-253(user)-254(to)-253(trace)-254(back)-253(up)-253(to)-254(the)-253(point)-254(wher)18(e)]TJ 0.983 0 0 1 99.895 647.217 Tm [(the)-253(\002rst)-254(err)19(or)-254(message)-253(has)-254(been)-253(generated.)-315(Every)-253(r)18(outine)-253(in)-254(the)-253(PSBLAS)-254(lib)1(rary)]TJ 1.005 0 0 1 99.895 635.261 Tm [(has,)-247(as)-248(last)-247(non-optional)-247(ar)18(gument,)-247(an)-247(integer)]TJ/F147 9.9626 Tf 1 0 0 1 304.383 635.261 Tm [(info)]TJ/F84 9.9626 Tf 1.005 0 0 1 327.779 635.261 Tm [(variable;)-248(whenever)74(,)-247(inside)]TJ 0.997 0 0 1 99.895 623.306 Tm [(the)-251(r)18(outine,)-251(an)-251(err)18(or)-250(is)-251(detected,)-251(this)-251(variable)-251(is)-251(set)-251(to)-250(a)-251(value)-251(corr)18(esponding)-251(to)]TJ 0.994 0 0 1 99.895 611.351 Tm [(a)-251(speci\002c)-250(err)18(or)-251(code.)-312(Then)-250(this)-251(err)18(or)-251(code)-250(is)-251(also)-251(pushed)-251(on)-250(the)-251(err)18(or)-251(stack)-250(and)]TJ 1.011 0 0 1 99.895 599.396 Tm [(then)-247(either)-248(contr)18(ol)-247(is)-248(r)18(eturned)-247(to)-248(the)-247(caller)-247(r)17(outine)-247(or)-247(the)-248(execution)-247(is)-247(aborted,)]TJ 1.015 0 0 1 99.895 587.441 Tm [(depending)-247(on)-246(the)-247(users)-246(choice.)-307(At)-246(the)-247(time)-246(when)-247(the)-247(execu)1(tion)-247(is)-247(aborted,)-246(an)]TJ 0.98 0 0 1 99.895 575.486 Tm [(err)18(or)-214(message)-215(is)-214(printed)-215(on)-215(standar)19(d)-215(output)-214(with)-215(a)-214(level)-215(of)-215(verbosit)1(y)-215(than)-215(can)-214(be)]TJ 0.98 0 0 1 99.895 563.53 Tm [(chosen)-228(by)-229(t)1(he)-229(user)76(.)-308(If)-228(the)-228(execution)-228(is)-229(not)-228(aborted,)-233(then,)-234(the)-228(caller)-228(r)18(outine)-228(checks)]TJ 1.02 0 0 1 99.895 551.575 Tm [(the)-276(v)1(alue)-276(r)18(eturned)-276(in)-275(the)]TJ/F147 9.9626 Tf 1 0 0 1 214.874 551.575 Tm [(info)]TJ/F84 9.9626 Tf 1.02 0 0 1 238.594 551.575 Tm [(variable)-275(and,)-284(if)-275(not)-276(zer)18(o,)-283(an)-275(err)17(or)-275(condition)-276(is)]TJ 1.02 0 0 1 99.895 539.62 Tm [(raised.)-445(This)-292(pr)17(oce)1(ss)-293(continues)-292(on)-292(all)-292(the)-292(levels)-292(of)-292(nested)-292(calls)-293(unt)1(il)-293(the)-292(level)]TJ 1 0 0 1 99.477 527.665 Tm [(wher)18(e)-250(the)-250(user)-250(decides)-250(to)-250(abort)-250(the)-250(pr)18(ogram)-250(execution.)]TJ 1.018 0 0 1 114.839 515.71 Tm [(Figur)18(e)]TJ 0 0 1 rg 0 0 1 RG [-246(5)]TJ 0 g 0 G - [-246(shows)-245(the)-246(layout)-246(of)-245(a)-246(generic)]TJ/F145 9.9626 Tf 1 0 0 1 286.762 515.71 Tm [(psb_foo)]TJ/F84 9.9626 Tf 1.018 0 0 1 325.866 515.71 Tm [(r)18(outine)-246(with)-246(r)18(espect)-246(to)-245(the)]TJ 1.004 0 0 1 99.895 503.755 Tm [(PSBLAS-2.0)-250(err)18(or)-250(handling)-250(policy)111(.)-311(It)-250(is)-250(possible)-250(to)-250(see)-249(how)91(,)-250(whenever)-250(an)-250(err)18(or)]TJ 1.02 0 0 1 99.895 491.799 Tm [(condition)-246(is)-247(det)1(ected,)-247(the)]TJ/F145 9.9626 Tf 1 0 0 1 214.838 491.799 Tm [(info)]TJ/F84 9.9626 Tf 1.02 0 0 1 238.262 491.799 Tm [(variable)-246(is)-246(set)-247(to)-246(the)-246(corr)17(esponding)-246(err)18(or)-246(code)]TJ 1.02 0 0 1 99.477 479.844 Tm [(which)-277(is,)-285(then,)-285(pushed)-277(on)-277(top)-277(of)-277(the)-277(stack)-277(by)-277(means)-277(of)-277(the)]TJ/F145 9.9626 Tf 1 0 0 1 365.652 479.844 Tm [(psb_errpush)]TJ/F84 9.9626 Tf 1.02 0 0 1 423.186 479.844 Tm [(.)-400(An)]TJ 0.992 0 0 1 99.895 467.889 Tm [(err)18(or)-251(condition)-251(may)-251(be)-251(dir)18(ectly)-251(detected)-251(inside)-251(a)-251(r)18(outine)-251(or)-252(i)1(ndir)18(ectly)-251(checking)]TJ 1.02 0 0 1 99.895 455.934 Tm [(the)-333(err)18(or)-333(code)-333(r)17(eturned)-333(r)18(eturned)-333(by)-333(a)-333(called)-333(r)18(outine.)-568(Whene)1(ver)-333(an)-333(err)17(or)-333(is)]TJ 0.98 0 0 1 99.895 443.979 Tm [(encounter)18(ed,)-240(after)-238(it)-237(has)-237(been)-237(pushed)-238(on)-237(stack,)-241(the)-237(pr)19(ogram)-238(execution)-237(skips)-237(to)-237(a)]TJ 0.98 0 0 1 99.596 432.024 Tm [(point)-252(wher)19(e)-252(the)-251(err)18(or)-251(condition)-252(is)-251(handled;)-253(the)-252(err)19(or)-252(condition)-251(is)-252(handled)-251(either)]TJ 1.015 0 0 1 99.895 420.068 Tm [(by)-246(r)18(eturning)-245(contr)17(ol)-245(to)-246(t)1(he)-246(caller)-245(r)17(outine)-245(or)-246(by)-245(calling)-246(the)]TJ/F145 9.9626 Tf 1 0 0 1 356.419 420.068 Tm [(psb\134_error)]TJ/F84 9.9626 Tf 1.015 0 0 1 411.205 420.068 Tm [(r)18(outine)]TJ 1.02 0 0 1 99.477 408.113 Tm [(which)-255(prints)-254(the)-255(content)-255(of)-255(the)-254(err)17(or)-254(stack)-255(and)-255(aborts)-255(the)-254(pr)17(ogram)-254(execution,)]TJ 0.98 0 0 1 99.895 396.158 Tm [(accor)18(ding)-242(to)-242(the)-242(choice)-241(made)-242(by)-242(the)-242(user)-242(with)]TJ/F145 9.9626 Tf 1 0 0 1 299.812 396.158 Tm [(psb_set_erraction)]TJ/F84 9.9626 Tf 0.98 0 0 1 388.728 396.158 Tm [(.)-312(The)-242(default)]TJ 1.02 0 0 1 99.895 384.203 Tm [(is)-314(to)-314(print)-314(the)-313(err)17(or)-314(and)-313(terminate)-314(the)-314(pr)18(ogram,)-331(but)-314(the)-314(user)-314(may)-314(choose)-314(to)]TJ 1 0 0 1 99.895 372.248 Tm [(handle)-250(the)-250(err)18(or)-250(explicitly)111(.)]TJ 0.98 0 0 1 114.839 360.293 Tm [(Figur)18(e)]TJ + [-246(shows)-245(the)-246(layout)-246(of)-245(a)-246(generic)]TJ/F147 9.9626 Tf 1 0 0 1 286.762 515.71 Tm [(psb_foo)]TJ/F84 9.9626 Tf 1.018 0 0 1 325.866 515.71 Tm [(r)18(outine)-246(with)-246(r)18(espect)-246(to)-245(the)]TJ 1.02 0 0 1 99.895 503.755 Tm [(PSBLAS)-322(err)17(or)-322(handling)-322(policy)109(.)-536(It)-322(is)-322(possible)-323(to)-322(see)-322(how)90(,)-341(whenever)-323(an)-322(err)18(or)]TJ 1.02 0 0 1 99.895 491.799 Tm [(condition)-246(is)-247(det)1(ected,)-247(the)]TJ/F147 9.9626 Tf 1 0 0 1 214.838 491.799 Tm [(info)]TJ/F84 9.9626 Tf 1.02 0 0 1 238.262 491.799 Tm [(variable)-246(is)-246(set)-247(to)-246(the)-246(corr)17(esponding)-246(err)18(or)-246(code)]TJ 1.02 0 0 1 99.477 479.844 Tm [(which)-277(is,)-285(then,)-285(pushed)-277(on)-277(top)-277(of)-277(the)-277(stack)-277(by)-277(means)-277(of)-277(the)]TJ/F147 9.9626 Tf 1 0 0 1 365.652 479.844 Tm [(psb_errpush)]TJ/F84 9.9626 Tf 1.02 0 0 1 423.186 479.844 Tm [(.)-400(An)]TJ 0.992 0 0 1 99.895 467.889 Tm [(err)18(or)-251(condition)-251(may)-251(be)-251(dir)18(ectly)-251(detected)-251(inside)-251(a)-251(r)18(outine)-251(or)-252(i)1(ndir)18(ectly)-251(checking)]TJ 1.02 0 0 1 99.895 455.934 Tm [(the)-333(err)18(or)-333(code)-333(r)17(eturned)-333(r)18(eturned)-333(by)-333(a)-333(called)-333(r)18(outine.)-568(Whene)1(ver)-333(an)-333(err)17(or)-333(is)]TJ 0.98 0 0 1 99.895 443.979 Tm [(encounter)18(ed,)-240(after)-238(it)-237(has)-237(been)-237(pushed)-238(on)-237(stack,)-241(the)-237(pr)19(ogram)-238(execution)-237(skips)-237(to)-237(a)]TJ 0.98 0 0 1 99.596 432.024 Tm [(point)-252(wher)19(e)-252(the)-251(err)18(or)-251(condition)-252(is)-251(handled;)-253(the)-252(err)19(or)-252(condition)-251(is)-252(handled)-251(either)]TJ 1.015 0 0 1 99.895 420.068 Tm [(by)-246(r)18(eturning)-245(contr)17(ol)-245(to)-246(t)1(he)-246(caller)-245(r)17(outine)-245(or)-246(by)-245(calling)-246(the)]TJ/F147 9.9626 Tf 1 0 0 1 356.419 420.068 Tm [(psb\134_error)]TJ/F84 9.9626 Tf 1.015 0 0 1 411.205 420.068 Tm [(r)18(outine)]TJ 1.02 0 0 1 99.477 408.113 Tm [(which)-255(prints)-254(the)-255(content)-255(of)-255(the)-254(err)17(or)-254(stack)-255(and)-255(aborts)-255(the)-254(pr)17(ogram)-254(execution,)]TJ 0.98 0 0 1 99.895 396.158 Tm [(accor)18(ding)-242(to)-242(the)-242(choice)-241(made)-242(by)-242(the)-242(user)-242(with)]TJ/F147 9.9626 Tf 1 0 0 1 299.812 396.158 Tm [(psb_set_erraction)]TJ/F84 9.9626 Tf 0.98 0 0 1 388.728 396.158 Tm [(.)-312(The)-242(default)]TJ 1.02 0 0 1 99.895 384.203 Tm [(is)-314(to)-314(print)-314(the)-313(err)17(or)-314(and)-313(terminate)-314(the)-314(pr)18(ogram,)-331(but)-314(the)-314(user)-314(may)-314(choose)-314(to)]TJ 1 0 0 1 99.895 372.248 Tm [(handle)-250(the)-250(err)18(or)-250(explicitly)111(.)]TJ 1.02 0 0 1 114.839 360.293 Tm [(Figur)18(e)]TJ 0 0 1 rg 0 0 1 RG - [-224(6)]TJ + [-248(6)]TJ 0 g 0 G - [-225(r)18(e)1(ports)-225(a)-225(sample)-224(err)18(or)-225(message)-224(generated)-225(by)-224(the)-225(PSBLAS-2.0)-224(library)113(.)]TJ 1.02 0 0 1 99.587 348.337 Tm [(This)-253(err)18(or)-254(has)-253(been)-253(generated)-253(by)-253(the)-253(fact)-253(that)-253(the)-254(user)-253(has)-253(chosen)-253(the)-253(invalid)]TJ 0.98 0 0 1 98.401 336.382 Tm [(\223FOO\224)-255(storage)-254(format)-255(to)-254(r)18(epr)19(esent)-255(the)-254(sparse)-255(matrix.)-316(Fr)18(om)-254(this)-255(err)19(or)-255(message)-254(it)]TJ 0.98 0 0 1 99.895 324.427 Tm [(is)-217(possible)-218(to)-217(see)-217(that)-218(the)-217(err)18(or)-217(has)-217(been)-218(detected)-217(inside)-217(the)]TJ/F145 9.9626 Tf 1 0 0 1 352.938 324.427 Tm [(psb_cest)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.903 324.427 Tm [(subr)18(outine)]TJ 1 0 0 1 99.895 312.472 Tm [(called)-250(by)]TJ/F145 9.9626 Tf 42.092 0 Td [(psb_spasb)]TJ/F84 9.9626 Tf 49.564 0 Td [(...)-310(by)-250(pr)18(ocess)-250(0)-250(\050i.e.)-310(the)-250(r)18(oot)-250(pr)18(ocess\051.)]TJ + [-247(r)18(eports)-247(a)-248(sample)-247(err)18(or)-247(message)-248(generated)-247(by)-247(the)-247(PSBLAS)-248(libr)1(ary)108(.)]TJ 1.02 0 0 1 99.587 348.337 Tm [(This)-253(err)18(or)-254(has)-253(been)-253(generated)-253(by)-253(the)-253(fact)-253(that)-253(the)-254(user)-253(has)-253(chosen)-253(the)-253(invalid)]TJ 0.98 0 0 1 98.401 336.382 Tm [(\223FOO\224)-255(storage)-254(format)-255(to)-254(r)18(epr)19(esent)-255(the)-254(sparse)-255(matrix.)-316(Fr)18(om)-254(this)-255(err)19(or)-255(message)-254(it)]TJ 0.98 0 0 1 99.895 324.427 Tm [(is)-217(possible)-218(to)-217(see)-217(that)-218(the)-217(err)18(or)-217(has)-217(been)-218(detected)-217(inside)-217(the)]TJ/F147 9.9626 Tf 1 0 0 1 352.938 324.427 Tm [(psb_cest)]TJ/F84 9.9626 Tf 0.98 0 0 1 396.903 324.427 Tm [(subr)18(outine)]TJ 1 0 0 1 99.895 312.472 Tm [(called)-250(by)]TJ/F147 9.9626 Tf 42.092 0 Td [(psb_spasb)]TJ/F84 9.9626 Tf 49.564 0 Td [(...)-310(by)-250(pr)18(ocess)-250(0)-250(\050i.e.)-310(the)-250(r)18(oot)-250(pr)18(ocess\051.)]TJ 0 g 0 G 72.728 -222.034 Td [(137)]TJ 0 g 0 G @@ -24572,9 +24582,9 @@ ET endstream endobj -1908 0 obj +1909 0 obj << -/Length 10395 +/Length 10391 >> stream 0 g 0 G @@ -24590,7 +24600,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F145 9.9626 Tf 153.694 698.757 Td [(subroutine)]TJ +/F147 9.9626 Tf 153.694 698.757 Td [(subroutine)]TJ 0 g 0 G [-525(psb_foo\050some)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -24602,12 +24612,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 9.9626 Tf 15.691 -11.956 Td [(!...)]TJ +/F281 9.9626 Tf 15.691 -11.956 Td [(!...)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 0 -11.955 Td [(if)]TJ +/F147 9.9626 Tf 0 -11.955 Td [(if)]TJ 0 g 0 G [(\050error)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -24656,12 +24666,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 9.9626 Tf 0 -11.956 Td [(!...)]TJ +/F281 9.9626 Tf 0 -11.956 Td [(!...)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 0 -11.955 Td [(call)]TJ +/F147 9.9626 Tf 0 -11.955 Td [(call)]TJ 0 g 0 G [-525(psb_bar\050some)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -24725,10 +24735,10 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 9.9626 Tf 0 -11.955 Td [(!...)]TJ +/F281 9.9626 Tf 0 -11.955 Td [(!...)]TJ 0 g 0 G 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG -/F145 9.9626 Tf -15.691 -11.955 Td [(9999)]TJ +/F147 9.9626 Tf -15.691 -11.955 Td [(9999)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G @@ -24777,17 +24787,17 @@ BT 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0 g 0 G 0 g 0 G -/F84 9.9626 Tf 1.018 0 0 1 150.705 382.059 Tm [(Listing)-246(5:)-306(The)-247(layout)-246(of)-246(a)-247(generic)]TJ/F145 9.9626 Tf 1 0 0 1 299.955 382.059 Tm [(psb)]TJ +/F84 9.9626 Tf 1.018 0 0 1 150.705 382.059 Tm [(Listing)-246(5:)-306(The)-247(layout)-246(of)-246(a)-247(generic)]TJ/F147 9.9626 Tf 1 0 0 1 299.955 382.059 Tm [(psb)]TJ ET q 1 0 0 1 316.274 382.258 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 319.412 382.059 Td [(foo)]TJ/F84 9.9626 Tf 1.018 0 0 1 337.602 382.059 Tm [(r)18(outine)-247(with)-246(r)18(espect)-247(to)-246(PSBLAS-2.0)]TJ 1 0 0 1 150.705 370.104 Tm [(err)18(or)-250(handling)-250(policy)111(.)]TJ +/F147 9.9626 Tf 319.412 382.059 Td [(foo)]TJ/F84 9.9626 Tf 1.018 0 0 1 337.602 382.059 Tm [(r)18(outine)-247(with)-246(r)18(espect)-247(to)-246(PSBLAS-2.0)]TJ 1 0 0 1 150.705 370.104 Tm [(err)18(or)-250(handling)-250(policy)111(.)]TJ 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG -/F145 9.9626 Tf 0 -19.609 Td [(==========================================================)]TJ +/F147 9.9626 Tf 0 -19.609 Td [(==========================================================)]TJ 0 g 0 G 0 -11.955 Td [(Process:)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -25008,22 +25018,22 @@ BT 0 g 0 G 0 -11.955 Td [(Aborting...)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 150.705 165.681 Tm [(Listing)-316(6:)-445(A)-316(sample)-316(PSBLAS-3.0)-316(err)18(or)-316(message.)-516(Pr)18(ocess)-316(0)-316(detected)-316(an)-316(err)18(or)]TJ 1 0 0 1 150.705 153.726 Tm [(condition)-250(inside)-250(the)-250(psb)]TJ +/F84 9.9626 Tf 0.98 0 0 1 150.705 165.681 Tm [(Listing)-195(6:)-286(A)-195(sample)-195(PSBLAS)-195(err)19(or)-195(message.)-296(Pr)18(ocess)-195(0)-195(detected)-195(an)-195(err)19(or)-195(condition)]TJ 1 0 0 1 150.705 153.726 Tm [(inside)-250(the)-250(psb)]TJ ET q -1 0 0 1 257.025 153.925 cm +1 0 0 1 212.502 153.925 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F84 9.9626 Tf 260.013 153.726 Td [(cest)-250(subr)18(outine)]TJ +/F84 9.9626 Tf 215.491 153.726 Td [(cest)-250(subr)18(outine)]TJ 0 g 0 G - 55.075 -63.288 Td [(138)]TJ + 99.597 -63.288 Td [(138)]TJ 0 g 0 G ET endstream endobj -1912 0 obj +1913 0 obj << /Length 3566 >> @@ -25134,7 +25144,7 @@ ET endstream endobj -1919 0 obj +1920 0 obj << /Length 1379 >> @@ -25177,7 +25187,7 @@ ET endstream endobj -1925 0 obj +1926 0 obj << /Length 1583 >> @@ -25234,7 +25244,7 @@ ET endstream endobj -1931 0 obj +1932 0 obj << /Length 2082 >> @@ -25297,7 +25307,7 @@ Q BT /F75 9.9626 Tf 167.023 599.494 Td [(act)]TJ 0 g 0 G -/F84 9.9626 Tf 17.704 0 Td [(the)-250(type)-250(of)-250(action.)]TJ -9.116 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(.)-310(Possible)-250(values:)]TJ/F145 9.9626 Tf 179.117 0 Td [(psb_act_ret)]TJ/F84 9.9626 Tf 57.533 0 Td [(,)]TJ/F145 9.9626 Tf 4.982 0 Td [(psb_act_abort)]TJ/F84 9.9626 Tf 67.994 0 Td [(.)]TJ +/F84 9.9626 Tf 17.704 0 Td [(the)-250(type)-250(of)-250(action.)]TJ -9.116 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)74(.)-310(Possible)-250(values:)]TJ/F147 9.9626 Tf 179.117 0 Td [(psb_act_ret)]TJ/F84 9.9626 Tf 57.533 0 Td [(,)]TJ/F147 9.9626 Tf 4.982 0 Td [(psb_act_abort)]TJ/F84 9.9626 Tf 67.994 0 Td [(.)]TJ 0 g 0 G -170.149 -461.235 Td [(142)]TJ 0 g 0 G @@ -25305,7 +25315,7 @@ ET endstream endobj -1937 0 obj +1938 0 obj << /Length 535 >> @@ -25313,7 +25323,7 @@ stream 0 g 0 G 0 g 0 G BT -/F75 14.3462 Tf 99.895 705.784 Td [(9)-1000(Utilities)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.397 683.082 Tm [(W)90(e)-272(have)-272(some)-272(utilities)-272(available)-272(for)-272(input)-272(and)-272(output)-272(of)-272(sparse)-272(matrices;)-286(the)]TJ 1 0 0 1 99.895 671.127 Tm [(interfaces)-250(to)-250(these)-250(r)18(outines)-250(ar)18(e)-250(available)-250(in)-250(the)-250(module)]TJ/F145 9.9626 Tf 242.01 0 Td [(psb_util_mod)]TJ/F84 9.9626 Tf 62.764 0 Td [(.)]TJ +/F75 14.3462 Tf 99.895 705.784 Td [(9)-1000(Utilities)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.397 683.082 Tm [(W)90(e)-272(have)-272(some)-272(utilities)-272(available)-272(for)-272(input)-272(and)-272(output)-272(of)-272(sparse)-272(matrices;)-286(the)]TJ 1 0 0 1 99.895 671.127 Tm [(interfaces)-250(to)-250(these)-250(r)18(outines)-250(ar)18(e)-250(available)-250(in)-250(the)-250(module)]TJ/F147 9.9626 Tf 242.01 0 Td [(psb_util_mod)]TJ/F84 9.9626 Tf 62.764 0 Td [(.)]TJ 0 g 0 G -140.39 -580.689 Td [(143)]TJ 0 g 0 G @@ -25321,7 +25331,7 @@ ET endstream endobj -1827 0 obj +1828 0 obj << /Type /ObjStm /N 100 @@ -25329,343 +25339,343 @@ endobj /Length 9498 >> stream -1826 0 1820 58 1829 196 1831 314 469 372 1828 429 1833 580 1835 698 1836 757 1837 816 -1838 875 1832 934 1840 1072 1842 1190 473 1248 1839 1305 1845 1456 1847 1574 1848 1633 1849 1692 -1850 1751 1844 1810 1852 1948 1854 2066 477 2124 1851 2181 1856 2332 1858 2450 1859 2509 1860 2568 -1861 2626 1855 2684 1863 2822 1865 2940 481 2998 1862 3055 1867 3206 1869 3324 1870 3383 1871 3442 -1872 3501 1866 3560 1874 3698 1876 3816 485 3874 1873 3931 1879 4082 1881 4200 1882 4259 1883 4318 -1885 4376 1886 4435 1887 4494 1878 4553 1889 4734 1891 4852 489 4910 1892 4967 1888 5025 1894 5176 -1896 5294 493 5353 1897 5411 1893 5470 1901 5621 1898 5769 1899 5917 1903 6065 497 6123 1900 6180 -1907 6275 1909 6393 1904 6452 1905 6511 1906 6570 1911 6667 1913 6785 501 6843 1914 6900 1915 6958 -1910 7016 1918 7097 1920 7215 505 7274 1921 7332 1922 7390 1917 7449 1924 7530 1926 7648 509 7706 -1927 7763 1928 7821 1923 7879 1930 7960 1932 8078 513 8137 1933 8195 1934 8253 1929 8312 1936 8407 -% 1826 0 obj +1827 0 1821 58 1830 196 1832 314 469 372 1829 429 1834 580 1836 698 1837 757 1838 816 +1839 875 1833 934 1841 1072 1843 1190 473 1248 1840 1305 1846 1456 1848 1574 1849 1633 1850 1692 +1851 1751 1845 1810 1853 1948 1855 2066 477 2124 1852 2181 1857 2332 1859 2450 1860 2509 1861 2568 +1862 2626 1856 2684 1864 2822 1866 2940 481 2998 1863 3055 1868 3206 1870 3324 1871 3383 1872 3442 +1873 3501 1867 3560 1875 3698 1877 3816 485 3874 1874 3931 1880 4082 1882 4200 1883 4259 1884 4318 +1886 4376 1887 4435 1888 4494 1879 4553 1890 4734 1892 4852 489 4910 1893 4967 1889 5025 1895 5176 +1897 5294 493 5353 1898 5411 1894 5470 1902 5621 1899 5769 1900 5917 1904 6065 497 6123 1901 6180 +1908 6275 1910 6393 1905 6452 1906 6511 1907 6570 1912 6667 1914 6785 501 6843 1915 6900 1916 6958 +1911 7016 1919 7097 1921 7215 505 7274 1922 7332 1923 7390 1918 7449 1925 7530 1927 7648 509 7706 +1928 7763 1929 7821 1924 7879 1931 7960 1933 8078 513 8137 1934 8195 1935 8253 1930 8312 1937 8407 +% 1827 0 obj << -/D [1821 0 R /XYZ 150.705 463.04 null] +/D [1822 0 R /XYZ 150.705 463.04 null] >> -% 1820 0 obj +% 1821 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F235 1045 0 R /F78 686 0 R /F281 1816 0 R >> /ProcSet [ /PDF /Text ] >> -% 1829 0 obj +% 1830 0 obj << /Type /Page -/Contents 1830 0 R -/Resources 1828 0 R +/Contents 1831 0 R +/Resources 1829 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1807 0 R +/Parent 1808 0 R >> -% 1831 0 obj +% 1832 0 obj << -/D [1829 0 R /XYZ 98.895 753.953 null] +/D [1830 0 R /XYZ 98.895 753.953 null] >> % 469 0 obj << -/D [1829 0 R /XYZ 99.895 716.092 null] +/D [1830 0 R /XYZ 99.895 716.092 null] >> -% 1828 0 obj +% 1829 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F195 942 0 R /F152 1491 0 R /F197 943 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1833 0 obj +% 1834 0 obj << /Type /Page -/Contents 1834 0 R -/Resources 1832 0 R +/Contents 1835 0 R +/Resources 1833 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1807 0 R ->> -% 1835 0 obj -<< -/D [1833 0 R /XYZ 149.705 753.953 null] +/Parent 1808 0 R >> % 1836 0 obj << -/D [1833 0 R /XYZ 150.705 576.399 null] +/D [1834 0 R /XYZ 149.705 753.953 null] >> % 1837 0 obj << -/D [1833 0 R /XYZ 150.705 541.925 null] +/D [1834 0 R /XYZ 150.705 576.399 null] >> % 1838 0 obj << -/D [1833 0 R /XYZ 150.705 451.085 null] +/D [1834 0 R /XYZ 150.705 541.925 null] >> -% 1832 0 obj +% 1839 0 obj +<< +/D [1834 0 R /XYZ 150.705 451.085 null] +>> +% 1833 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F235 1045 0 R /F78 686 0 R /F281 1816 0 R >> /ProcSet [ /PDF /Text ] >> -% 1840 0 obj +% 1841 0 obj << /Type /Page -/Contents 1841 0 R -/Resources 1839 0 R +/Contents 1842 0 R +/Resources 1840 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1843 0 R +/Parent 1844 0 R >> -% 1842 0 obj +% 1843 0 obj << -/D [1840 0 R /XYZ 98.895 753.953 null] +/D [1841 0 R /XYZ 98.895 753.953 null] >> % 473 0 obj << -/D [1840 0 R /XYZ 99.895 716.092 null] +/D [1841 0 R /XYZ 99.895 716.092 null] >> -% 1839 0 obj +% 1840 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F195 942 0 R /F152 1491 0 R /F197 943 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1845 0 obj +% 1846 0 obj << /Type /Page -/Contents 1846 0 R -/Resources 1844 0 R +/Contents 1847 0 R +/Resources 1845 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1843 0 R ->> -% 1847 0 obj -<< -/D [1845 0 R /XYZ 149.705 753.953 null] +/Parent 1844 0 R >> % 1848 0 obj << -/D [1845 0 R /XYZ 150.705 576.399 null] +/D [1846 0 R /XYZ 149.705 753.953 null] >> % 1849 0 obj << -/D [1845 0 R /XYZ 150.705 541.925 null] +/D [1846 0 R /XYZ 150.705 576.399 null] >> % 1850 0 obj << -/D [1845 0 R /XYZ 150.705 451.085 null] +/D [1846 0 R /XYZ 150.705 541.925 null] >> -% 1844 0 obj +% 1851 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> +/D [1846 0 R /XYZ 150.705 451.085 null] +>> +% 1845 0 obj +<< +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F235 1045 0 R /F78 686 0 R /F281 1816 0 R >> /ProcSet [ /PDF /Text ] >> -% 1852 0 obj +% 1853 0 obj << /Type /Page -/Contents 1853 0 R -/Resources 1851 0 R +/Contents 1854 0 R +/Resources 1852 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1843 0 R +/Parent 1844 0 R >> -% 1854 0 obj +% 1855 0 obj << -/D [1852 0 R /XYZ 98.895 753.953 null] +/D [1853 0 R /XYZ 98.895 753.953 null] >> % 477 0 obj << -/D [1852 0 R /XYZ 99.895 716.092 null] +/D [1853 0 R /XYZ 99.895 716.092 null] >> -% 1851 0 obj +% 1852 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F195 942 0 R /F152 1491 0 R /F197 943 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1856 0 obj +% 1857 0 obj << /Type /Page -/Contents 1857 0 R -/Resources 1855 0 R +/Contents 1858 0 R +/Resources 1856 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1843 0 R ->> -% 1858 0 obj -<< -/D [1856 0 R /XYZ 149.705 753.953 null] +/Parent 1844 0 R >> % 1859 0 obj << -/D [1856 0 R /XYZ 150.705 588.355 null] +/D [1857 0 R /XYZ 149.705 753.953 null] >> % 1860 0 obj << -/D [1856 0 R /XYZ 150.705 553.88 null] +/D [1857 0 R /XYZ 150.705 588.355 null] >> % 1861 0 obj << -/D [1856 0 R /XYZ 150.705 463.04 null] +/D [1857 0 R /XYZ 150.705 553.88 null] >> -% 1855 0 obj +% 1862 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> +/D [1857 0 R /XYZ 150.705 463.04 null] +>> +% 1856 0 obj +<< +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F235 1045 0 R /F78 686 0 R /F281 1816 0 R >> /ProcSet [ /PDF /Text ] >> -% 1863 0 obj +% 1864 0 obj << /Type /Page -/Contents 1864 0 R -/Resources 1862 0 R +/Contents 1865 0 R +/Resources 1863 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1843 0 R +/Parent 1844 0 R >> -% 1865 0 obj +% 1866 0 obj << -/D [1863 0 R /XYZ 98.895 753.953 null] +/D [1864 0 R /XYZ 98.895 753.953 null] >> % 481 0 obj << -/D [1863 0 R /XYZ 99.895 716.092 null] +/D [1864 0 R /XYZ 99.895 716.092 null] >> -% 1862 0 obj +% 1863 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F195 942 0 R /F152 1491 0 R /F197 943 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1867 0 obj +% 1868 0 obj << /Type /Page -/Contents 1868 0 R -/Resources 1866 0 R +/Contents 1869 0 R +/Resources 1867 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1843 0 R ->> -% 1869 0 obj -<< -/D [1867 0 R /XYZ 149.705 753.953 null] +/Parent 1844 0 R >> % 1870 0 obj << -/D [1867 0 R /XYZ 150.705 576.399 null] +/D [1868 0 R /XYZ 149.705 753.953 null] >> % 1871 0 obj << -/D [1867 0 R /XYZ 150.705 541.925 null] +/D [1868 0 R /XYZ 150.705 576.399 null] >> % 1872 0 obj << -/D [1867 0 R /XYZ 150.705 451.085 null] +/D [1868 0 R /XYZ 150.705 541.925 null] >> -% 1866 0 obj +% 1873 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F233 1044 0 R /F78 686 0 R /F279 1815 0 R >> +/D [1868 0 R /XYZ 150.705 451.085 null] +>> +% 1867 0 obj +<< +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F235 1045 0 R /F78 686 0 R /F281 1816 0 R >> /ProcSet [ /PDF /Text ] >> -% 1874 0 obj +% 1875 0 obj << /Type /Page -/Contents 1875 0 R -/Resources 1873 0 R +/Contents 1876 0 R +/Resources 1874 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1877 0 R +/Parent 1878 0 R >> -% 1876 0 obj +% 1877 0 obj << -/D [1874 0 R /XYZ 98.895 753.953 null] +/D [1875 0 R /XYZ 98.895 753.953 null] >> % 485 0 obj << -/D [1874 0 R /XYZ 99.895 716.092 null] +/D [1875 0 R /XYZ 99.895 716.092 null] >> -% 1873 0 obj +% 1874 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F190 941 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F195 942 0 R /F152 1491 0 R /F197 943 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 1879 0 obj +% 1880 0 obj << /Type /Page -/Contents 1880 0 R -/Resources 1878 0 R +/Contents 1881 0 R +/Resources 1879 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1877 0 R ->> -% 1881 0 obj -<< -/D [1879 0 R /XYZ 149.705 753.953 null] +/Parent 1878 0 R >> % 1882 0 obj << -/D [1879 0 R /XYZ 150.705 588.355 null] +/D [1880 0 R /XYZ 149.705 753.953 null] >> % 1883 0 obj << -/D [1879 0 R /XYZ 150.705 553.88 null] +/D [1880 0 R /XYZ 150.705 588.355 null] >> -% 1885 0 obj +% 1884 0 obj << -/D [1879 0 R /XYZ 150.705 465.726 null] +/D [1880 0 R /XYZ 150.705 553.88 null] >> % 1886 0 obj << -/D [1879 0 R /XYZ 150.705 433.845 null] +/D [1880 0 R /XYZ 150.705 465.726 null] >> % 1887 0 obj << -/D [1879 0 R /XYZ 150.705 343.006 null] +/D [1880 0 R /XYZ 150.705 433.845 null] >> -% 1878 0 obj +% 1888 0 obj +<< +/D [1880 0 R /XYZ 150.705 343.006 null] +>> +% 1879 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F17 1884 0 R /F243 1285 0 R /F233 1044 0 R /F279 1815 0 R >> +/Font << /F84 687 0 R /F75 685 0 R /F147 941 0 R /F78 686 0 R /F197 943 0 R /F17 1885 0 R /F241 1286 0 R /F235 1045 0 R /F281 1816 0 R >> /ProcSet [ /PDF /Text ] >> -% 1889 0 obj +% 1890 0 obj << /Type /Page -/Contents 1890 0 R -/Resources 1888 0 R +/Contents 1891 0 R +/Resources 1889 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1877 0 R +/Parent 1878 0 R >> -% 1891 0 obj +% 1892 0 obj << -/D [1889 0 R /XYZ 98.895 753.953 null] +/D [1890 0 R /XYZ 98.895 753.953 null] >> % 489 0 obj << -/D [1889 0 R /XYZ 99.895 716.092 null] +/D [1890 0 R /XYZ 99.895 716.092 null] >> -% 1892 0 obj +% 1893 0 obj << -/D [1889 0 R /XYZ 99.895 222.691 null] +/D [1890 0 R /XYZ 99.895 222.691 null] >> -% 1888 0 obj +% 1889 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F148 1490 0 R /F192 942 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F152 1491 0 R /F197 943 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1894 0 obj +% 1895 0 obj << /Type /Page -/Contents 1895 0 R -/Resources 1893 0 R +/Contents 1896 0 R +/Resources 1894 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1877 0 R +/Parent 1878 0 R >> -% 1896 0 obj +% 1897 0 obj << -/D [1894 0 R /XYZ 149.705 753.953 null] +/D [1895 0 R /XYZ 149.705 753.953 null] >> % 493 0 obj << -/D [1894 0 R /XYZ 150.705 716.092 null] +/D [1895 0 R /XYZ 150.705 716.092 null] >> -% 1897 0 obj +% 1898 0 obj << -/D [1894 0 R /XYZ 150.705 222.691 null] +/D [1895 0 R /XYZ 150.705 222.691 null] >> -% 1893 0 obj +% 1894 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F148 1490 0 R /F192 942 0 R /F78 686 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F152 1491 0 R /F197 943 0 R /F78 686 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 1901 0 obj +% 1902 0 obj << /Type /Page -/Contents 1902 0 R -/Resources 1900 0 R +/Contents 1903 0 R +/Resources 1901 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1877 0 R -/Annots [ 1898 0 R 1899 0 R ] +/Parent 1878 0 R +/Annots [ 1899 0 R 1900 0 R ] >> -% 1898 0 obj +% 1899 0 obj << /Type /Annot /Subtype /Link @@ -25673,180 +25683,180 @@ stream /Rect [145.364 511.904 152.427 523.964] /A << /S /GoTo /D (listing.5) >> >> -% 1899 0 obj +% 1900 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [143.975 356.487 150.849 368.547] +/Rect [145.442 356.487 152.515 368.547] /A << /S /GoTo /D (listing.6) >> >> -% 1903 0 obj +% 1904 0 obj << -/D [1901 0 R /XYZ 98.895 753.953 null] +/D [1902 0 R /XYZ 98.895 753.953 null] >> % 497 0 obj << -/D [1901 0 R /XYZ 99.895 716.092 null] +/D [1902 0 R /XYZ 99.895 716.092 null] >> -% 1900 0 obj +% 1901 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1907 0 obj +% 1908 0 obj << /Type /Page -/Contents 1908 0 R -/Resources 1906 0 R +/Contents 1909 0 R +/Resources 1907 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1877 0 R +/Parent 1878 0 R >> -% 1909 0 obj -<< -/D [1907 0 R /XYZ 149.705 753.953 null] ->> -% 1904 0 obj +% 1910 0 obj << -/D [1907 0 R /XYZ 150.705 411.235 null] +/D [1908 0 R /XYZ 149.705 753.953 null] >> % 1905 0 obj << -/D [1907 0 R /XYZ 150.705 182.902 null] +/D [1908 0 R /XYZ 150.705 411.235 null] >> % 1906 0 obj << -/Font << /F145 940 0 R /F279 1815 0 R /F84 687 0 R >> +/D [1908 0 R /XYZ 150.705 182.902 null] +>> +% 1907 0 obj +<< +/Font << /F147 941 0 R /F281 1816 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1911 0 obj +% 1912 0 obj << /Type /Page -/Contents 1912 0 R -/Resources 1910 0 R +/Contents 1913 0 R +/Resources 1911 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1916 0 R +/Parent 1917 0 R >> -% 1913 0 obj +% 1914 0 obj << -/D [1911 0 R /XYZ 98.895 753.953 null] +/D [1912 0 R /XYZ 98.895 753.953 null] >> % 501 0 obj << -/D [1911 0 R /XYZ 99.895 716.092 null] +/D [1912 0 R /XYZ 99.895 716.092 null] >> -% 1914 0 obj +% 1915 0 obj << -/D [1911 0 R /XYZ 99.895 690.058 null] +/D [1912 0 R /XYZ 99.895 690.058 null] >> -% 1915 0 obj +% 1916 0 obj << -/D [1911 0 R /XYZ 99.895 693.143 null] +/D [1912 0 R /XYZ 99.895 693.143 null] >> -% 1910 0 obj +% 1911 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1918 0 obj +% 1919 0 obj << /Type /Page -/Contents 1919 0 R -/Resources 1917 0 R +/Contents 1920 0 R +/Resources 1918 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1916 0 R +/Parent 1917 0 R >> -% 1920 0 obj +% 1921 0 obj << -/D [1918 0 R /XYZ 149.705 753.953 null] +/D [1919 0 R /XYZ 149.705 753.953 null] >> % 505 0 obj << -/D [1918 0 R /XYZ 150.705 716.092 null] +/D [1919 0 R /XYZ 150.705 716.092 null] >> -% 1921 0 obj +% 1922 0 obj << -/D [1918 0 R /XYZ 150.705 678.98 null] +/D [1919 0 R /XYZ 150.705 678.98 null] >> -% 1922 0 obj +% 1923 0 obj << -/D [1918 0 R /XYZ 150.705 679.195 null] +/D [1919 0 R /XYZ 150.705 679.195 null] >> -% 1917 0 obj +% 1918 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1924 0 obj +% 1925 0 obj << /Type /Page -/Contents 1925 0 R -/Resources 1923 0 R +/Contents 1926 0 R +/Resources 1924 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1916 0 R +/Parent 1917 0 R >> -% 1926 0 obj +% 1927 0 obj << -/D [1924 0 R /XYZ 98.895 753.953 null] +/D [1925 0 R /XYZ 98.895 753.953 null] >> % 509 0 obj << -/D [1924 0 R /XYZ 99.895 716.092 null] +/D [1925 0 R /XYZ 99.895 716.092 null] >> -% 1927 0 obj +% 1928 0 obj << -/D [1924 0 R /XYZ 99.895 689.963 null] +/D [1925 0 R /XYZ 99.895 689.963 null] >> -% 1928 0 obj +% 1929 0 obj << -/D [1924 0 R /XYZ 99.895 693.143 null] +/D [1925 0 R /XYZ 99.895 693.143 null] >> -% 1923 0 obj +% 1924 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1930 0 obj +% 1931 0 obj << /Type /Page -/Contents 1931 0 R -/Resources 1929 0 R +/Contents 1932 0 R +/Resources 1930 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1916 0 R +/Parent 1917 0 R >> -% 1932 0 obj +% 1933 0 obj << -/D [1930 0 R /XYZ 149.705 753.953 null] +/D [1931 0 R /XYZ 149.705 753.953 null] >> % 513 0 obj << -/D [1930 0 R /XYZ 150.705 716.092 null] +/D [1931 0 R /XYZ 150.705 716.092 null] >> -% 1933 0 obj +% 1934 0 obj << -/D [1930 0 R /XYZ 150.705 678.98 null] +/D [1931 0 R /XYZ 150.705 678.98 null] >> -% 1934 0 obj +% 1935 0 obj << -/D [1930 0 R /XYZ 150.705 679.195 null] +/D [1931 0 R /XYZ 150.705 679.195 null] >> -% 1929 0 obj +% 1930 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1936 0 obj +% 1937 0 obj << /Type /Page -/Contents 1937 0 R -/Resources 1935 0 R +/Contents 1938 0 R +/Resources 1936 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1916 0 R +/Parent 1917 0 R >> endstream endobj -1943 0 obj +1944 0 obj << /Length 4752 >> @@ -25881,11 +25891,11 @@ BT 0 g 0 G 0 -19.925 Td [(\002lename)]TJ 0 g 0 G -/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(r)18(ead.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 1.02 0 0 1 175.611 575.584 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F145 9.9626 Tf 1 0 0 1 474.418 575.584 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.649 575.584 Tm [(,)-330(in)]TJ 1.003 0 0 1 175.193 563.628 Tm [(which)-250(case)-250(the)-250(default)-250(input)-250(unit)-250(5)-250(\050i.e.)-311(standar)18(d)-250(input)-250(in)-250(Unix)-250(jar)18(gon\051)-250(is)]TJ 1 0 0 1 175.611 551.673 Tm [(used.)-310(Default:)]TJ/F145 9.9626 Tf 65.185 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ +/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(r)18(ead.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 1.02 0 0 1 175.611 575.584 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F147 9.9626 Tf 1 0 0 1 474.418 575.584 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.649 575.584 Tm [(,)-330(in)]TJ 1.003 0 0 1 175.193 563.628 Tm [(which)-250(case)-250(the)-250(default)-250(input)-250(unit)-250(5)-250(\050i.e.)-311(standar)18(d)-250(input)-250(in)-250(Unix)-250(jar)18(gon\051)-250(is)]TJ 1 0 0 1 175.611 551.673 Tm [(used.)-310(Default:)]TJ/F147 9.9626 Tf 65.185 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -95.322 -19.925 Td [(iunit)]TJ 0 g 0 G -/F84 9.9626 Tf 26.799 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.201 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F145 9.9626 Tf 287.758 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ +/F84 9.9626 Tf 26.799 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.201 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F147 9.9626 Tf 287.758 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -317.894 -21.918 Td [(On)-250(Return)]TJ 0 g 0 G @@ -25894,21 +25904,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(sparse)-250(matrix)-250(r)18(ead)-250(fr)18(om)-250(\002le.)]TJ 14.636 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 442.283 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 442.084 Td [(Tspmat)]TJ +/F147 9.9626 Tf 363.206 442.084 Td [(Tspmat)]TJ ET q 1 0 0 1 395.216 442.283 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 398.354 442.084 Td [(type)]TJ +/F147 9.9626 Tf 398.354 442.084 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -25930,7 +25940,7 @@ ET endstream endobj -1950 0 obj +1951 0 obj << /Length 5153 >> @@ -25967,21 +25977,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix)-250(to)-250(be)-250(written.)]TJ 14.635 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(required)]TJ/F84 9.9626 Tf 39.292 0 Td [(.)]TJ -62.983 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 575.783 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 575.584 Td [(Tspmat)]TJ +/F147 9.9626 Tf 312.397 575.584 Td [(Tspmat)]TJ ET q 1 0 0 1 344.406 575.783 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 347.544 575.584 Td [(type)]TJ +/F147 9.9626 Tf 347.544 575.584 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -25991,11 +26001,11 @@ BT 0 g 0 G /F75 9.9626 Tf -24.907 -19.926 Td [(\002lename)]TJ 0 g 0 G -/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(written)-250(to.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ 1.02 0 0 1 124.802 464.002 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F145 9.9626 Tf 1 0 0 1 423.609 464.002 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 428.839 464.002 Tm [(,)-330(in)]TJ 0.999 0 0 1 124.384 452.047 Tm [(which)-249(case)-249(the)-249(default)-249(output)-250(unit)-249(6)-249(\050i.e.)-310(standar)18(d)-249(output)-249(in)-249(Unix)-249(jar)18(gon\051)]TJ 1 0 0 1 124.802 440.092 Tm [(is)-250(used.)-310(Default:)]TJ/F145 9.9626 Tf 74.799 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ +/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(written)-250(to.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ 1.02 0 0 1 124.802 464.002 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F147 9.9626 Tf 1 0 0 1 423.609 464.002 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 428.839 464.002 Tm [(,)-330(in)]TJ 0.999 0 0 1 124.384 452.047 Tm [(which)-249(case)-249(the)-249(default)-249(output)-250(unit)-249(6)-249(\050i.e.)-310(standar)18(d)-249(output)-249(in)-249(Unix)-249(jar)18(gon\051)]TJ 1 0 0 1 124.802 440.092 Tm [(is)-250(used.)-310(Default:)]TJ/F147 9.9626 Tf 74.799 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -104.936 -19.926 Td [(iunit)]TJ 0 g 0 G -/F84 9.9626 Tf 26.8 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.202 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F145 9.9626 Tf 287.757 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ +/F84 9.9626 Tf 26.8 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.202 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F147 9.9626 Tf 287.757 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -317.895 -19.925 Td [(key)]TJ 0 g 0 G @@ -26018,7 +26028,7 @@ ET endstream endobj -1958 0 obj +1959 0 obj << /Length 3684 >> @@ -26067,11 +26077,11 @@ BT 0 g 0 G 0 -19.925 Td [(\002lename)]TJ 0 g 0 G -/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(r)18(ead.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 1.02 0 0 1 175.611 575.584 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F145 9.9626 Tf 1 0 0 1 474.418 575.584 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.649 575.584 Tm [(,)-330(in)]TJ 1.003 0 0 1 175.193 563.628 Tm [(which)-250(case)-250(the)-250(default)-250(input)-250(unit)-250(5)-250(\050i.e.)-311(standar)18(d)-250(input)-250(in)-250(Unix)-250(jar)18(gon\051)-250(is)]TJ 1 0 0 1 175.611 551.673 Tm [(used.)-310(Default:)]TJ/F145 9.9626 Tf 65.185 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ +/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(r)18(ead.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 1.02 0 0 1 175.611 575.584 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F147 9.9626 Tf 1 0 0 1 474.418 575.584 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.649 575.584 Tm [(,)-330(in)]TJ 1.003 0 0 1 175.193 563.628 Tm [(which)-250(case)-250(the)-250(default)-250(input)-250(unit)-250(5)-250(\050i.e.)-311(standar)18(d)-250(input)-250(in)-250(Unix)-250(jar)18(gon\051)-250(is)]TJ 1 0 0 1 175.611 551.673 Tm [(used.)-310(Default:)]TJ/F147 9.9626 Tf 65.185 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -95.322 -19.925 Td [(iunit)]TJ 0 g 0 G -/F84 9.9626 Tf 26.799 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.201 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F145 9.9626 Tf 287.758 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ +/F84 9.9626 Tf 26.799 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.201 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F147 9.9626 Tf 287.758 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -317.894 -21.918 Td [(On)-250(Return)]TJ 0 g 0 G @@ -26080,21 +26090,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(sparse)-250(matrix)-250(r)18(ead)-250(fr)18(om)-250(\002le.)]TJ 14.636 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.984 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 442.283 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 442.084 Td [(Tspmat)]TJ +/F147 9.9626 Tf 363.206 442.084 Td [(Tspmat)]TJ ET q 1 0 0 1 395.216 442.283 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 398.354 442.084 Td [(type)]TJ +/F147 9.9626 Tf 398.354 442.084 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -26108,7 +26118,7 @@ ET endstream endobj -1965 0 obj +1966 0 obj << /Length 4361 >> @@ -26157,11 +26167,11 @@ BT 0 g 0 G 0 -19.925 Td [(\002lename)]TJ 0 g 0 G -/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(r)18(ead.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ 1.02 0 0 1 124.802 575.584 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F145 9.9626 Tf 1 0 0 1 423.609 575.584 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 428.839 575.584 Tm [(,)-330(in)]TJ 1.003 0 0 1 124.384 563.628 Tm [(which)-250(case)-250(the)-250(default)-250(input)-250(unit)-250(5)-250(\050i.e.)-311(standar)18(d)-250(input)-250(in)-250(Unix)-250(jar)18(gon\051)-250(is)]TJ 1 0 0 1 124.802 551.673 Tm [(used.)-310(Default:)]TJ/F145 9.9626 Tf 65.185 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ +/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(r)18(ead.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ 1.02 0 0 1 124.802 575.584 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F147 9.9626 Tf 1 0 0 1 423.609 575.584 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 428.839 575.584 Tm [(,)-330(in)]TJ 1.003 0 0 1 124.384 563.628 Tm [(which)-250(case)-250(the)-250(default)-250(input)-250(unit)-250(5)-250(\050i.e.)-311(standar)18(d)-250(input)-250(in)-250(Unix)-250(jar)18(gon\051)-250(is)]TJ 1 0 0 1 124.802 551.673 Tm [(used.)-310(Default:)]TJ/F147 9.9626 Tf 65.185 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -95.322 -19.925 Td [(iunit)]TJ 0 g 0 G -/F84 9.9626 Tf 26.8 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.202 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F145 9.9626 Tf 287.757 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ +/F84 9.9626 Tf 26.8 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.202 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F147 9.9626 Tf 287.757 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -317.895 -21.918 Td [(On)-250(Return)]TJ 0 g 0 G @@ -26170,28 +26180,28 @@ BT 0 g 0 G /F84 9.9626 Tf 11.069 0 Td [(Rigth)-250(hand)-250(side\050s\051.)]TJ 13.529 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 1.02 0 0 1 124.413 442.084 Tm [(An)-368(array)-368(of)-367(type)-368(r)18(eal)-368(or)-368(complex,)-398(rank)-368(1)-368(or)-368(2)-367(and)-368(having)-368(the)-368(ALLO-)]TJ 1.005 0 0 1 124.802 430.129 Tm [(CA)74(T)73(ABLE)-248(at)1(tribute,)-248(or)-248(an)-248(object)-248(of)-248(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 302.957 430.129 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 302.957 430.129 Tm [(psb)]TJ ET q 1 0 0 1 319.275 430.328 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 322.414 430.129 Td [(T)]TJ +/F147 9.9626 Tf 322.414 430.129 Td [(T)]TJ ET q 1 0 0 1 328.272 430.328 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 331.41 430.129 Td [(vect)]TJ +/F147 9.9626 Tf 331.41 430.129 Td [(vect)]TJ ET q 1 0 0 1 352.959 430.328 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 356.097 430.129 Td [(type)]TJ +/F147 9.9626 Tf 356.097 430.129 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 1.005 0 0 1 377.018 430.129 Tm [(,)-248(of)-248(type)-248(r)18(eal)-247(or)]TJ 1 0 0 1 124.802 418.174 Tm [(complex.)]TJ 1.019 0 0 1 124.304 406.219 Tm [(W)54(ill)-245(be)-245(allocated)-245(and)-245(\002lled)-245(in)-245(if)-245(the)-245(input)-244(\002le)-245(contains)-245(a)-245(right)-245(hand)-245(side,)]TJ 1 0 0 1 124.802 394.263 Tm [(otherwise)-250(will)-250(be)-250(left)-250(in)-250(the)-250(UNALLOCA)74(TED)-250(state.)]TJ 0 g 0 G @@ -26205,7 +26215,7 @@ ET endstream endobj -1972 0 obj +1973 0 obj << /Length 7544 >> @@ -26256,21 +26266,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(sparse)-250(matrix)-250(to)-250(be)-250(written.)]TJ 14.635 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(required)]TJ/F84 9.9626 Tf 39.293 0 Td [(.)]TJ -62.983 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.137 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.137 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 578.783 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 578.584 Td [(Tspmat)]TJ +/F147 9.9626 Tf 363.206 578.584 Td [(Tspmat)]TJ ET q 1 0 0 1 395.216 578.783 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 398.354 578.584 Td [(type)]TJ +/F147 9.9626 Tf 398.354 578.584 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -26280,11 +26290,11 @@ BT 0 g 0 G /F75 9.9626 Tf -24.906 -19.464 Td [(\002lename)]TJ 0 g 0 G -/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(written)-250(to.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 1.02 0 0 1 175.611 479.881 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F145 9.9626 Tf 1 0 0 1 474.418 479.881 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.649 479.881 Tm [(,)-330(in)]TJ 0.999 0 0 1 175.193 467.926 Tm [(which)-249(case)-249(the)-249(default)-250(outp)1(ut)-250(unit)-249(6)-249(\050i.e.)-310(standar)18(d)-249(output)-249(in)-249(Unix)-249(jar)18(gon\051)]TJ 1 0 0 1 175.611 455.97 Tm [(is)-250(used.)-310(Default:)]TJ/F145 9.9626 Tf 74.799 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ +/F84 9.9626 Tf 43.965 0 Td [(The)-250(name)-250(of)-250(the)-250(\002le)-250(to)-250(be)-250(written)-250(to.)]TJ -19.367 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 1.02 0 0 1 175.611 479.881 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F147 9.9626 Tf 1 0 0 1 474.418 479.881 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 479.649 479.881 Tm [(,)-330(in)]TJ 0.999 0 0 1 175.193 467.926 Tm [(which)-249(case)-249(the)-249(default)-250(outp)1(ut)-250(unit)-249(6)-249(\050i.e.)-310(standar)18(d)-249(output)-249(in)-249(Unix)-249(jar)18(gon\051)]TJ 1 0 0 1 175.611 455.97 Tm [(is)-250(used.)-310(Default:)]TJ/F147 9.9626 Tf 74.799 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -104.935 -19.463 Td [(iunit)]TJ 0 g 0 G -/F84 9.9626 Tf 26.799 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.201 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F145 9.9626 Tf 287.758 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ +/F84 9.9626 Tf 26.799 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.201 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 23.999 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -61.878 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F147 9.9626 Tf 287.758 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -317.894 -20.764 Td [(On)-250(Return)]TJ 0 g 0 G @@ -26306,7 +26316,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 153.694 250.747 Td [(type)]TJ +/F235 8.9664 Tf 153.694 250.747 Td [(type)]TJ 0 g 0 G [(\050psb_ldspmat_type\051)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -26359,7 +26369,7 @@ BT [-525(info\051)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0 g 0 G -/F84 9.9626 Tf -3.298 -23.747 Td [(T)92(o)-250(simplify)-250(this)-250(pr)18(ocedur)18(e)-250(in)]TJ/F145 9.9626 Tf 129.513 0 Td [(C)]TJ/F84 9.9626 Tf 5.23 0 Td [(,)-250(ther)18(e)-250(is)-250(a)-250(utility)-250(function)]TJ +/F84 9.9626 Tf -3.298 -23.747 Td [(T)92(o)-250(simplify)-250(this)-250(pr)18(ocedur)18(e)-250(in)]TJ/F147 9.9626 Tf 129.513 0 Td [(C)]TJ/F84 9.9626 Tf 5.23 0 Td [(,)-250(ther)18(e)-250(is)-250(a)-250(utility)-250(function)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -26370,7 +26380,7 @@ Q 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0 g 0 G BT -/F233 8.9664 Tf 153.694 144.073 Td [(psb_i_t)]TJ +/F235 8.9664 Tf 153.694 144.073 Td [(psb_i_t)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(psb_c_)]TJ @@ -26392,7 +26402,7 @@ ET endstream endobj -1979 0 obj +1980 0 obj << /Length 7395 >> @@ -26443,28 +26453,28 @@ BT 0 g 0 G /F84 9.9626 Tf 11.069 0 Td [(Rigth)-250(hand)-250(side\050s\051.)]TJ 13.529 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 0.98 0 0 1 124.413 578.396 Tm [(An)-194(array)-194(of)-194(type)-194(r)19(eal)-194(or)-194(complex,)-206(rank)-194(1)-194(or)-194(2,)-206(or)-194(an)-193(object)-194(of)-194(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 397.211 578.396 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 397.211 578.396 Tm [(psb)]TJ ET q 1 0 0 1 413.53 578.595 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 416.668 578.396 Td [(T)]TJ +/F147 9.9626 Tf 416.668 578.396 Td [(T)]TJ ET q 1 0 0 1 422.526 578.595 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 425.664 578.396 Td [(vect)]TJ +/F147 9.9626 Tf 425.664 578.396 Td [(vect)]TJ ET q 1 0 0 1 447.213 578.595 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 450.351 578.396 Td [(type)]TJ +/F147 9.9626 Tf 450.351 578.396 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 0.98 0 0 1 471.273 578.396 Tm [(,)]TJ 1 0 0 1 124.802 566.441 Tm [(of)-250(type)-250(r)18(eal)-250(or)-250(complex;)-250(its)-250(contents)-250(will)-250(be)-250(written)-250(to)-250(disk.)]TJ 0 g 0 G @@ -26474,11 +26484,11 @@ BT 0 g 0 G /F75 9.9626 Tf -43.965 -31.448 Td [(vtitle)]TJ 0 g 0 G -/F84 9.9626 Tf 28.772 0 Td [(Matrix)-250(title.)]TJ -4.174 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 0.98 0 0 1 124.413 479.635 Tm [(A)-214(charachter)-213(variable)-214(holding)-213(a)-214(descriptive)-214(t)1(itle)-214(for)-214(the)-213(vector)-214(to)-213(be)-214(written)]TJ 1 0 0 1 124.802 467.68 Tm [(to)-250(\002le.)-310(T)90(ype:)]TJ/F75 9.9626 Tf 54.455 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 1.02 0 0 1 124.802 455.725 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F145 9.9626 Tf 1 0 0 1 423.609 455.725 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 428.839 455.725 Tm [(,)-330(in)]TJ 1.003 0 0 1 124.384 443.77 Tm [(which)-250(case)-250(the)-250(default)-250(input)-250(unit)-250(5)-250(\050i.e.)-311(standar)18(d)-250(input)-250(in)-250(Unix)-250(jar)18(gon\051)-250(is)]TJ 1 0 0 1 124.802 431.814 Tm [(used.)-310(Default:)]TJ/F145 9.9626 Tf 65.185 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ +/F84 9.9626 Tf 28.772 0 Td [(Matrix)-250(title.)]TJ -4.174 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf 0.98 0 0 1 124.413 479.635 Tm [(A)-214(charachter)-213(variable)-214(holding)-213(a)-214(descriptive)-214(t)1(itle)-214(for)-214(the)-213(vector)-214(to)-213(be)-214(written)]TJ 1 0 0 1 124.802 467.68 Tm [(to)-250(\002le.)-310(T)90(ype:)]TJ/F75 9.9626 Tf 54.455 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ 1.02 0 0 1 124.802 455.725 Tm [(Speci\002ed)-313(as:)-440(a)-313(character)-314(variable)-313(containing)-313(a)-313(valid)-313(\002le)-313(name,)-331(or)]TJ/F147 9.9626 Tf 1 0 0 1 423.609 455.725 Tm [(-)]TJ/F84 9.9626 Tf 1.02 0 0 1 428.839 455.725 Tm [(,)-330(in)]TJ 1.003 0 0 1 124.384 443.77 Tm [(which)-250(case)-250(the)-250(default)-250(input)-250(unit)-250(5)-250(\050i.e.)-311(standar)18(d)-250(input)-250(in)-250(Unix)-250(jar)18(gon\051)-250(is)]TJ 1 0 0 1 124.802 431.814 Tm [(used.)-310(Default:)]TJ/F147 9.9626 Tf 65.185 0 Td [(-)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -95.322 -19.492 Td [(iunit)]TJ 0 g 0 G -/F84 9.9626 Tf 26.8 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.202 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F145 9.9626 Tf 287.757 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ +/F84 9.9626 Tf 26.8 0 Td [(The)-250(Fortran)-250(\002le)-250(unit)-250(number)74(.)]TJ -2.202 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 24 0 Td [(optional)]TJ/F84 9.9626 Tf 38.186 0 Td [(.)]TJ -61.877 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(value.)-310(Only)-250(meaningful)-250(if)-250(\002lename)-250(is)-250(not)]TJ/F147 9.9626 Tf 287.757 0 Td [(-)]TJ/F84 9.9626 Tf 5.231 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -317.895 -20.836 Td [(On)-250(Return)]TJ 0 g 0 G @@ -26500,7 +26510,7 @@ Q 0 g 0 G 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 102.884 221.378 Td [(real)]TJ +/F235 8.9664 Tf 102.884 221.378 Td [(real)]TJ 0 g 0 G [(\050psb_dpk_\051,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -26561,7 +26571,7 @@ BT [(info\051)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0 g 0 G -/F84 9.9626 Tf -3.297 -23.777 Td [(T)92(o)-250(simplify)-250(this)-250(pr)18(ocedur)18(e)-250(in)]TJ/F145 9.9626 Tf 129.512 0 Td [(C)]TJ/F84 9.9626 Tf 5.231 0 Td [(,)-250(ther)18(e)-250(is)-250(a)-250(utility)-250(function)]TJ +/F84 9.9626 Tf -3.297 -23.777 Td [(T)92(o)-250(simplify)-250(this)-250(pr)18(ocedur)18(e)-250(in)]TJ/F147 9.9626 Tf 129.512 0 Td [(C)]TJ/F84 9.9626 Tf 5.231 0 Td [(,)-250(ther)18(e)-250(is)-250(a)-250(utility)-250(function)]TJ 0 g 0 G 29.949 -41.41 Td [(149)]TJ 0 g 0 G @@ -26569,7 +26579,7 @@ ET endstream endobj -1985 0 obj +1986 0 obj << /Length 656 >> @@ -26585,7 +26595,7 @@ Q 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0 g 0 G BT -/F233 8.9664 Tf 153.694 701.446 Td [(psb_i_t)]TJ +/F235 8.9664 Tf 153.694 701.446 Td [(psb_i_t)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G [-525(psb_c_)]TJ @@ -26607,7 +26617,7 @@ ET endstream endobj -1989 0 obj +1990 0 obj << /Length 1399 >> @@ -26627,7 +26637,7 @@ BT 0 g 0 G 0 -19.925 Td [(\225)]TJ 0 g 0 G - [-500(Block)-250(Jacobi)-250(with)-250(an)-250(appr)18(oximate)-250(inverse)]TJ 1.02 0 0 1 99.587 591.426 Tm [(The)-312(supporting)-312(data)-312(type)-312(and)-312(subr)18(outine)-312(interfaces)-312(ar)17(e)-312(de\002ned)-312(in)-312(the)-312(mod-)]TJ 1.011 0 0 1 99.895 579.471 Tm [(ule)]TJ/F145 9.9626 Tf 1 0 0 1 116.209 579.471 Tm [(psb_prec_mod)]TJ/F84 9.9626 Tf 1.011 0 0 1 178.973 579.471 Tm [(.)-306(The)-247(old)-247(interfaces)]TJ/F145 9.9626 Tf 1 0 0 1 266.312 579.471 Tm [(psb_precinit)]TJ/F84 9.9626 Tf 1.011 0 0 1 331.561 579.471 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 351.097 579.471 Tm [(psb_precbld)]TJ/F84 9.9626 Tf 1.011 0 0 1 411.115 579.471 Tm [(ar)18(e)-247(still)]TJ 1 0 0 1 99.895 567.515 Tm [(supported)-250(for)-250(backwar)18(d)-250(compatibility)]TJ + [-500(Block)-250(Jacobi)-250(with)-250(an)-250(appr)18(oximate)-250(inverse)]TJ 1.02 0 0 1 99.587 591.426 Tm [(The)-312(supporting)-312(data)-312(type)-312(and)-312(subr)18(outine)-312(interfaces)-312(ar)17(e)-312(de\002ned)-312(in)-312(the)-312(mod-)]TJ 1.011 0 0 1 99.895 579.471 Tm [(ule)]TJ/F147 9.9626 Tf 1 0 0 1 116.209 579.471 Tm [(psb_prec_mod)]TJ/F84 9.9626 Tf 1.011 0 0 1 178.973 579.471 Tm [(.)-306(The)-247(old)-247(interfaces)]TJ/F147 9.9626 Tf 1 0 0 1 266.312 579.471 Tm [(psb_precinit)]TJ/F84 9.9626 Tf 1.011 0 0 1 331.561 579.471 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 351.097 579.471 Tm [(psb_precbld)]TJ/F84 9.9626 Tf 1.011 0 0 1 411.115 579.471 Tm [(ar)18(e)-247(still)]TJ 1 0 0 1 99.895 567.515 Tm [(supported)-250(for)-250(backwar)18(d)-250(compatibility)]TJ 0 g 0 G 164.384 -477.077 Td [(151)]TJ 0 g 0 G @@ -26635,7 +26645,7 @@ ET endstream endobj -1997 0 obj +1998 0 obj << /Length 5053 >> @@ -26646,7 +26656,7 @@ BT /F75 11.9552 Tf 150.705 706.129 Td [(10.1)-1000(init)-250(\227)-250(Initialize)-250(a)-250(preconditioner)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -18.964 Td [(call)-525(prec%init\050icontxt,ptype,)-525(info\051)]TJ +/F147 9.9626 Tf 0 -18.964 Td [(call)-525(prec%init\050icontxt,ptype,)-525(info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -26670,21 +26680,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.349 0 Td [(Scope:)]TJ/F75 9.9626 Tf 31.431 0 Td [(local)]TJ/F84 9.9626 Tf -31.182 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.148 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.51 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.51 0 Td [(psb)]TJ ET q 1 0 0 1 388.441 446.268 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 391.579 446.069 Td [(Tprec)]TJ +/F147 9.9626 Tf 391.579 446.069 Td [(Tprec)]TJ ET q 1 0 0 1 418.358 446.268 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.497 446.069 Td [(type)]TJ +/F147 9.9626 Tf 421.497 446.069 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -26727,7 +26737,7 @@ ET endstream endobj -2008 0 obj +2009 0 obj << /Length 4359 >> @@ -26739,9 +26749,9 @@ BT 0 g 0 G 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 107 -18.964 Td [(call)]TJ +/F147 9.9626 Tf 107 -18.964 Td [(call)]TJ 0 g 0 G - [-525(p%set\050what,val,info\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 665.247 Tm [(This)-384(method)-385(sets)-384(the)-385(parameters)-384(de\002ning)-385(the)-385(sub)1(domain)-385(solver)-385(whe)1(n)-385(the)]TJ 0.987 0 0 1 99.596 653.292 Tm [(pr)18(econditioner)-253(type)-253(is)]TJ/F145 9.9626 Tf 1 0 0 1 197.784 653.292 Tm [(BJAC)]TJ/F84 9.9626 Tf 0.987 0 0 1 218.705 653.292 Tm [(.)-253(Mor)18(e)-253(pr)19(ecisely)112(,)-253(the)-253(parameter)-253(identi\002ed)-252(by)]TJ/F145 9.9626 Tf 1 0 0 1 413.168 653.292 Tm [(what)]TJ/F84 9.9626 Tf 0.987 0 0 1 436.576 653.292 Tm [(is)]TJ 1 0 0 1 99.895 641.337 Tm [(assigned)-250(the)-250(value)-250(contained)-250(in)]TJ/F145 9.9626 Tf 141.229 0 Td [(val)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ/F75 11.9552 Tf -157.386 -29.888 Td [(Arguments)]TJ/F145 9.9626 Tf 21.126 -15.534 Td [(what)]TJ + [-525(p%set\050what,val,info\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 665.247 Tm [(This)-384(method)-385(sets)-384(the)-385(parameters)-384(de\002ning)-385(the)-385(sub)1(domain)-385(solver)-385(whe)1(n)-385(the)]TJ 0.987 0 0 1 99.596 653.292 Tm [(pr)18(econditioner)-253(type)-253(is)]TJ/F147 9.9626 Tf 1 0 0 1 197.784 653.292 Tm [(BJAC)]TJ/F84 9.9626 Tf 0.987 0 0 1 218.705 653.292 Tm [(.)-253(Mor)18(e)-253(pr)19(ecisely)112(,)-253(the)-253(parameter)-253(identi\002ed)-252(by)]TJ/F147 9.9626 Tf 1 0 0 1 413.168 653.292 Tm [(what)]TJ/F84 9.9626 Tf 0.987 0 0 1 436.576 653.292 Tm [(is)]TJ 1 0 0 1 99.895 641.337 Tm [(assigned)-250(the)-250(value)-250(contained)-250(in)]TJ/F147 9.9626 Tf 141.229 0 Td [(val)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ/F75 11.9552 Tf -157.386 -29.888 Td [(Arguments)]TJ/F147 9.9626 Tf 21.126 -15.534 Td [(what)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG [-2541(character)]TJ 0 g 0 G @@ -26756,7 +26766,7 @@ BT 0 0 1 rg 0 0 1 RG [-250(21)]TJ 0 g 0 G - [(.)]TJ/F145 9.9626 Tf -46.233 -11.955 Td [(val)]TJ + [(.)]TJ/F147 9.9626 Tf -46.233 -11.955 Td [(val)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG @@ -26764,7 +26774,7 @@ BT 0 g 0 G /F78 9.9626 Tf 1.02 0 0 1 211.187 560.05 Tm [(or)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F145 9.9626 Tf 1 0 0 1 227.438 560.05 Tm [(character)]TJ +/F147 9.9626 Tf 1 0 0 1 227.438 560.05 Tm [(character)]TJ 0 g 0 G [(\050)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG @@ -26775,15 +26785,15 @@ BT 0 g 0 G [(\051)]TJ/F78 9.9626 Tf 1.02 0 0 1 318.911 560.05 Tm [(or)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F145 9.9626 Tf 1 0 0 1 335.162 560.05 Tm [(real)]TJ +/F147 9.9626 Tf 1 0 0 1 335.162 560.05 Tm [(real)]TJ 0 g 0 G [(\050psb_spk_\051)]TJ/F78 9.9626 Tf 1.02 0 0 1 416.174 560.05 Tm [(or)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F145 9.9626 Tf 1 0 0 1 432.425 560.05 Tm [(real)]TJ +/F147 9.9626 Tf 1 0 0 1 432.425 560.05 Tm [(real)]TJ 0 g 0 G [(\050psb_dpk_\051)]TJ/F84 9.9626 Tf 1.02 0 0 1 505.65 560.05 Tm [(,)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 1 0 0 1 166.788 548.095 Tm [(intent)]TJ +/F147 9.9626 Tf 1 0 0 1 166.788 548.095 Tm [(intent)]TJ 0 g 0 G [(\050in\051)]TJ/F84 9.9626 Tf 52.303 0 Td [(.)]TJ 1.02 0 0 1 166.479 536.14 Tm [(The)-390(value)-390(of)-390(the)-389(parameter)-390(to)-390(be)-390(set.)-738(The)-390(list)-390(of)-390(allowed)-390(values)-389(and)-390(the)]TJ 1.02 0 0 1 166.788 524.184 Tm [(corr)18(esponding)-365(data)-364(types)-365(is)-364(given)-365(in)-364(T)90(able)]TJ 0 0 1 rg 0 0 1 RG @@ -26791,7 +26801,7 @@ BT 0 g 0 G [(.)-663(When)-364(the)-365(valu)1(e)-365(is)-364(of)-365(type)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F145 9.9626 Tf 1 0 0 1 166.788 512.229 Tm [(character)]TJ +/F147 9.9626 Tf 1 0 0 1 166.788 512.229 Tm [(character)]TJ 0 g 0 G [(\050)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG @@ -26800,7 +26810,7 @@ BT 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG [(=*)]TJ 0 g 0 G - [(\051)]TJ/F84 9.9626 Tf 83.685 0 Td [(,)-250(it)-250(is)-250(also)-250(tr)18(eated)-250(as)-250(case)-250(insensitive.)]TJ/F145 9.9626 Tf -129.656 -11.955 Td [(info)]TJ + [(\051)]TJ/F84 9.9626 Tf 83.685 0 Td [(,)-250(it)-250(is)-250(also)-250(tr)18(eated)-250(as)-250(case)-250(insensitive.)]TJ/F147 9.9626 Tf -129.656 -11.955 Td [(info)]TJ 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG [-2514(integer)]TJ 0 g 0 G @@ -26826,7 +26836,7 @@ ET endstream endobj -2012 0 obj +2013 0 obj << /Length 13651 >> @@ -26850,7 +26860,7 @@ q Q 1 0 0 1 -322.56 -716.092 cm BT -/F233 8.9664 Tf 335.209 875.945 Td [(what)]TJ +/F235 8.9664 Tf 335.209 875.945 Td [(what)]TJ ET q 1 0 0 1 432.13 872.657 cm @@ -26864,7 +26874,7 @@ q []0 d 0 J 0.398 w 0 0 m 0 10.959 l S Q BT -/F233 8.9664 Tf 543.974 875.945 Td [(val)]TJ +/F235 8.9664 Tf 543.974 875.945 Td [(val)]TJ ET q 1 0 0 1 623.888 872.657 cm @@ -26894,7 +26904,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 335.444 864.587 Td [(\015SUB_SOLVE\015)]TJ +/F235 8.9664 Tf 335.444 864.587 Td [(\015SUB_SOLVE\015)]TJ 0 g 0 G ET q @@ -26903,7 +26913,7 @@ q Q 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 438.108 864.587 Td [(character)]TJ +/F235 8.9664 Tf 438.108 864.587 Td [(character)]TJ 0 g 0 G [(\050)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG @@ -26920,7 +26930,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 544.209 864.587 Td [(\015ILU\015)]TJ +/F235 8.9664 Tf 544.209 864.587 Td [(\015ILU\015)]TJ 0 g 0 G 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG 0 -10.959 Td [(\015ILUT\015)]TJ @@ -26964,7 +26974,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 335.444 787.476 Td [(\015SUB_FILLIN\015)]TJ +/F235 8.9664 Tf 335.444 787.476 Td [(\015SUB_FILLIN\015)]TJ 0 g 0 G ET q @@ -26973,7 +26983,7 @@ q Q 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 438.108 787.476 Td [(integer)]TJ +/F235 8.9664 Tf 438.108 787.476 Td [(integer)]TJ 0 g 0 G ET q @@ -26981,7 +26991,7 @@ q []0 d 0 J 0.398 w 0 0 m 0 21.918 l S Q BT -/F84 8.9664 Tf 543.859 787.476 Td [(Any)-250(integer)]TJ 0.35 -10.959 Td [(number)]TJ/F190 9.343 Tf 33.691 0 Td [(\025)]TJ/F84 8.9664 Tf 9.865 0 Td [(0)]TJ +/F84 8.9664 Tf 543.859 787.476 Td [(Any)-250(integer)]TJ 0.35 -10.959 Td [(number)]TJ/F195 9.343 Tf 33.691 0 Td [(\025)]TJ/F84 8.9664 Tf 9.865 0 Td [(0)]TJ ET q 1 0 0 1 623.888 773.23 cm @@ -27011,7 +27021,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 335.444 765.16 Td [(\015SUB_ILUTHRS\015)]TJ +/F235 8.9664 Tf 335.444 765.16 Td [(\015SUB_ILUTHRS\015)]TJ 0 g 0 G ET q @@ -27020,7 +27030,7 @@ q Q 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 438.108 765.16 Td [(real)]TJ +/F235 8.9664 Tf 438.108 765.16 Td [(real)]TJ 0 g 0 G [(\050kind_parameter\051)]TJ ET @@ -27029,7 +27039,7 @@ q []0 d 0 J 0.398 w 0 0 m 0 21.918 l S Q BT -/F84 8.9664 Tf 1.02 0 0 1 543.859 765.16 Tm [(Any)-1148(r)18(eal)-1148(num-)]TJ 1 0 0 1 544.209 754.201 Tm [(ber)]TJ/F190 9.343 Tf 15.148 0 Td [(\025)]TJ/F84 8.9664 Tf 9.866 0 Td [(0)]TJ +/F84 8.9664 Tf 1.02 0 0 1 543.859 765.16 Tm [(Any)-1148(r)18(eal)-1148(num-)]TJ 1 0 0 1 544.209 754.201 Tm [(ber)]TJ/F195 9.343 Tf 15.148 0 Td [(\025)]TJ/F84 8.9664 Tf 9.866 0 Td [(0)]TJ ET q 1 0 0 1 623.888 750.913 cm @@ -27059,7 +27069,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 335.444 742.844 Td [(\015ILU_ALG\015)]TJ +/F235 8.9664 Tf 335.444 742.844 Td [(\015ILU_ALG\015)]TJ 0 g 0 G ET q @@ -27068,7 +27078,7 @@ q Q 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 438.108 742.844 Td [(character)]TJ +/F235 8.9664 Tf 438.108 742.844 Td [(character)]TJ 0 g 0 G [(\050)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG @@ -27085,7 +27095,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 544.209 742.844 Td [(\015MILU\015)]TJ +/F235 8.9664 Tf 544.209 742.844 Td [(\015MILU\015)]TJ 0 g 0 G ET q @@ -27094,7 +27104,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 629.865 742.844 Td [(\015NONE\015)]TJ +/F235 8.9664 Tf 629.865 742.844 Td [(\015NONE\015)]TJ 0 g 0 G ET q @@ -27118,7 +27128,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 335.444 731.486 Td [(\015ILUT_SCALE\015)]TJ +/F235 8.9664 Tf 335.444 731.486 Td [(\015ILUT_SCALE\015)]TJ 0 g 0 G ET q @@ -27127,7 +27137,7 @@ q Q 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 438.108 731.486 Td [(character)]TJ +/F235 8.9664 Tf 438.108 731.486 Td [(character)]TJ 0 g 0 G [(\050)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG @@ -27144,7 +27154,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 544.209 731.486 Td [(\015MAXVAL\015)]TJ +/F235 8.9664 Tf 544.209 731.486 Td [(\015MAXVAL\015)]TJ 0 g 0 G 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG 0 -10.959 Td [(\015DIAG\015)]TJ @@ -27168,7 +27178,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 629.865 731.486 Td [(\015NONE\015)]TJ +/F235 8.9664 Tf 629.865 731.486 Td [(\015NONE\015)]TJ 0 g 0 G ET q @@ -27192,7 +27202,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 335.444 665.334 Td [(\015INV_FILLIN\015)]TJ +/F235 8.9664 Tf 335.444 665.334 Td [(\015INV_FILLIN\015)]TJ 0 g 0 G ET q @@ -27201,7 +27211,7 @@ q Q 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 438.108 665.334 Td [(integer)]TJ +/F235 8.9664 Tf 438.108 665.334 Td [(integer)]TJ 0 g 0 G ET q @@ -27209,7 +27219,7 @@ q []0 d 0 J 0.398 w 0 0 m 0 21.918 l S Q BT -/F84 8.9664 Tf 543.859 665.334 Td [(Any)-250(integer)]TJ 0.35 -10.959 Td [(number)]TJ/F190 9.343 Tf 33.691 0 Td [(\025)]TJ/F84 8.9664 Tf 9.865 0 Td [(0)]TJ +/F84 8.9664 Tf 543.859 665.334 Td [(Any)-250(integer)]TJ 0.35 -10.959 Td [(number)]TJ/F195 9.343 Tf 33.691 0 Td [(\025)]TJ/F84 8.9664 Tf 9.865 0 Td [(0)]TJ ET q 1 0 0 1 623.888 651.088 cm @@ -27239,7 +27249,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 335.444 643.018 Td [(\015INV_ILUTHRS\015)]TJ +/F235 8.9664 Tf 335.444 643.018 Td [(\015INV_ILUTHRS\015)]TJ 0 g 0 G ET q @@ -27248,7 +27258,7 @@ q Q 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 438.108 643.018 Td [(real)]TJ +/F235 8.9664 Tf 438.108 643.018 Td [(real)]TJ 0 g 0 G [(\050kind_parameter\051)]TJ ET @@ -27257,7 +27267,7 @@ q []0 d 0 J 0.398 w 0 0 m 0 21.918 l S Q BT -/F84 8.9664 Tf 1.02 0 0 1 543.859 643.018 Tm [(Any)-1148(r)18(eal)-1148(num-)]TJ 1 0 0 1 544.209 632.059 Tm [(ber)]TJ/F190 9.343 Tf 15.148 0 Td [(\025)]TJ/F84 8.9664 Tf 9.866 0 Td [(0)]TJ +/F84 8.9664 Tf 1.02 0 0 1 543.859 643.018 Tm [(Any)-1148(r)18(eal)-1148(num-)]TJ 1 0 0 1 544.209 632.059 Tm [(ber)]TJ/F195 9.343 Tf 15.148 0 Td [(\025)]TJ/F84 8.9664 Tf 9.866 0 Td [(0)]TJ ET q 1 0 0 1 623.888 628.771 cm @@ -27287,7 +27297,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 335.444 620.702 Td [(\015AINV_ALG\015)]TJ +/F235 8.9664 Tf 335.444 620.702 Td [(\015AINV_ALG\015)]TJ 0 g 0 G ET q @@ -27296,7 +27306,7 @@ q Q 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 438.108 620.702 Td [(character)]TJ +/F235 8.9664 Tf 438.108 620.702 Td [(character)]TJ 0 g 0 G [(\050)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG @@ -27313,7 +27323,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 544.209 620.702 Td [(\015LLK\015)]TJ +/F235 8.9664 Tf 544.209 620.702 Td [(\015LLK\015)]TJ 0 g 0 G 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG 0 -10.959 Td [(\015SYM-LLK\015)]TJ @@ -27331,7 +27341,7 @@ q Q 0.25 0.44 0.63 rg 0.25 0.44 0.63 RG BT -/F233 8.9664 Tf 629.865 620.702 Td [(\015LLK\015)]TJ +/F235 8.9664 Tf 629.865 620.702 Td [(\015LLK\015)]TJ 0 g 0 G ET q @@ -27367,7 +27377,7 @@ ET endstream endobj -2021 0 obj +2022 0 obj << /Length 7660 >> @@ -27378,7 +27388,7 @@ BT /F75 11.9552 Tf 99.895 706.129 Td [(10.3)-1000(build)-250(\227)-250(Builds)-250(a)-250(preconditioner)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -20.364 Td [(call)-525(prec%build\050a,)-525(desc_a,)-525(info[,amold,vmold,imold]\051)]TJ +/F147 9.9626 Tf 0 -20.364 Td [(call)-525(prec%build\050a,)-525(desc_a,)-525(info[,amold,vmold,imold]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -24.086 Td [(T)90(ype:)]TJ 0 g 0 G @@ -27391,21 +27401,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(system)-250(sparse)-250(matrix.)-310(Scope:)]TJ/F75 9.9626 Tf 146.23 0 Td [(local)]TJ/F84 9.9626 Tf -131.595 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(,)-250(tar)18(get.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(sparse)-250(matrix)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 190.872 0 Td [(psb)]TJ +/F147 9.9626 Tf 190.872 0 Td [(psb)]TJ ET q 1 0 0 1 331.993 580.382 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 335.131 580.183 Td [(Tspmat)]TJ +/F147 9.9626 Tf 335.131 580.183 Td [(Tspmat)]TJ ET q 1 0 0 1 367.141 580.382 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 370.279 580.183 Td [(type)]TJ +/F147 9.9626 Tf 370.279 580.183 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -27413,21 +27423,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.349 0 Td [(the)-250(pr)18(econditioner)74(.)]TJ 0.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ 0.98 0 0 1 124.802 509.547 Tm [(Speci\002ed)-194(as:)-286(an)-193(alr)18(eady)-194(initialized)-194(pr)19(econdtioner)-194(data)-194(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 1 0 0 1 396.852 509.547 Tm [(psb)]TJ +/F147 9.9626 Tf 1 0 0 1 396.852 509.547 Tm [(psb)]TJ ET q 1 0 0 1 413.17 509.746 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 416.309 509.547 Td [(Tprec)]TJ +/F147 9.9626 Tf 416.309 509.547 Td [(Tprec)]TJ ET q 1 0 0 1 443.088 509.746 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 446.226 509.547 Td [(type)]TJ +/F147 9.9626 Tf 446.226 509.547 Td [(type)]TJ 0 g 0 G 0 g 0 G /F75 9.9626 Tf -346.331 -34.771 Td [(desc)]TJ @@ -27441,119 +27451,119 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(pr)18(oblem)-250(communication)-250(descriptor)74(.)-310(Scope:)]TJ/F75 9.9626 Tf 208.625 0 Td [(local)]TJ/F84 9.9626 Tf -217.492 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(,)-250(tar)18(get.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(communication)-250(descriptor)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 247.648 0 Td [(psb)]TJ +/F147 9.9626 Tf 247.648 0 Td [(psb)]TJ ET q 1 0 0 1 388.769 439.11 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 391.907 438.911 Td [(desc)]TJ +/F147 9.9626 Tf 391.907 438.911 Td [(desc)]TJ ET q 1 0 0 1 413.456 439.11 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 416.594 438.911 Td [(type)]TJ +/F147 9.9626 Tf 416.594 438.911 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -337.621 -22.816 Td [(amold)]TJ 0 g 0 G -/F84 9.9626 Tf 33.455 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(matrix)-250(storage.)]TJ -8.548 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(a)-250(class)-250(derived)-250(fr)18(om)]TJ/F145 9.9626 Tf 201.393 0 Td [(psb)]TJ +/F84 9.9626 Tf 33.455 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(matrix)-250(storage.)]TJ -8.548 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(a)-250(class)-250(derived)-250(fr)18(om)]TJ/F147 9.9626 Tf 201.393 0 Td [(psb)]TJ ET q 1 0 0 1 342.513 368.474 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 345.652 368.275 Td [(T)]TJ +/F147 9.9626 Tf 345.652 368.275 Td [(T)]TJ ET q 1 0 0 1 351.51 368.474 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 354.648 368.275 Td [(base)]TJ +/F147 9.9626 Tf 354.648 368.275 Td [(base)]TJ ET q 1 0 0 1 376.197 368.474 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 379.335 368.275 Td [(sparse)]TJ +/F147 9.9626 Tf 379.335 368.275 Td [(sparse)]TJ ET q 1 0 0 1 411.345 368.474 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 414.483 368.275 Td [(mat)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ +/F147 9.9626 Tf 414.483 368.275 Td [(mat)]TJ/F84 9.9626 Tf 15.691 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -330.279 -22.816 Td [(vmold)]TJ 0 g 0 G -/F84 9.9626 Tf 34.013 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(vector)-250(storage.)]TJ -9.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(a)-250(class)-250(derived)-250(fr)18(om)]TJ/F145 9.9626 Tf 201.393 0 Td [(psb)]TJ +/F84 9.9626 Tf 34.013 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(vector)-250(storage.)]TJ -9.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(a)-250(class)-250(derived)-250(fr)18(om)]TJ/F147 9.9626 Tf 201.393 0 Td [(psb)]TJ ET q 1 0 0 1 342.513 297.838 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 345.652 297.638 Td [(T)]TJ +/F147 9.9626 Tf 345.652 297.638 Td [(T)]TJ ET q 1 0 0 1 351.51 297.838 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 354.648 297.638 Td [(base)]TJ +/F147 9.9626 Tf 354.648 297.638 Td [(base)]TJ ET q 1 0 0 1 376.197 297.838 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 379.335 297.638 Td [(vect)]TJ +/F147 9.9626 Tf 379.335 297.638 Td [(vect)]TJ ET q 1 0 0 1 400.884 297.838 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 404.022 297.638 Td [(type)]TJ/F84 9.9626 Tf 20.922 0 Td [(.)]TJ +/F147 9.9626 Tf 404.022 297.638 Td [(type)]TJ/F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -325.049 -22.815 Td [(imold)]TJ 0 g 0 G -/F84 9.9626 Tf 31.791 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(integer)-250(vector)-250(storage.)]TJ -6.884 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 227.002 Tm [(Speci\002ed)-194(as:)-286(an)-193(object)-194(of)-194(a)-194(class)-194(derived)-194(fr)19(om)-194(\050integer\051)]TJ/F145 9.9626 Tf 1 0 0 1 356.282 227.002 Tm [(psb)]TJ +/F84 9.9626 Tf 31.791 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(integer)-250(vector)-250(storage.)]TJ -6.884 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 0.98 0 0 1 124.802 227.002 Tm [(Speci\002ed)-194(as:)-286(an)-193(object)-194(of)-194(a)-194(class)-194(derived)-194(fr)19(om)-194(\050integer\051)]TJ/F147 9.9626 Tf 1 0 0 1 356.282 227.002 Tm [(psb)]TJ ET q 1 0 0 1 372.601 227.202 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 375.739 227.002 Td [(T)]TJ +/F147 9.9626 Tf 375.739 227.002 Td [(T)]TJ ET q 1 0 0 1 381.597 227.202 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 384.735 227.002 Td [(base)]TJ +/F147 9.9626 Tf 384.735 227.002 Td [(base)]TJ ET q 1 0 0 1 406.284 227.202 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 409.422 227.002 Td [(vect)]TJ +/F147 9.9626 Tf 409.422 227.002 Td [(vect)]TJ ET q 1 0 0 1 430.971 227.202 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 434.11 227.002 Td [(type)]TJ/F84 9.9626 Tf 0.98 0 0 1 455.031 227.002 Tm [(.)]TJ +/F147 9.9626 Tf 434.11 227.002 Td [(type)]TJ/F84 9.9626 Tf 0.98 0 0 1 455.031 227.002 Tm [(.)]TJ 0 g 0 G /F75 9.9626 Tf 1 0 0 1 99.895 202.917 Tm [(On)-250(Return)]TJ 0 g 0 G @@ -27562,21 +27572,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.349 0 Td [(the)-250(pr)18(econditioner)74(.)]TJ 0.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econdtioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 193.612 0 Td [(psb)]TJ +/F147 9.9626 Tf 193.612 0 Td [(psb)]TJ ET q 1 0 0 1 334.732 132.48 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.871 132.281 Td [(Tprec)]TJ +/F147 9.9626 Tf 337.871 132.281 Td [(Tprec)]TJ ET q 1 0 0 1 364.65 132.48 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 367.788 132.281 Td [(type)]TJ +/F147 9.9626 Tf 367.788 132.281 Td [(type)]TJ 0 g 0 G 0 g 0 G /F84 9.9626 Tf -103.509 -41.843 Td [(155)]TJ @@ -27585,7 +27595,7 @@ ET endstream endobj -2025 0 obj +2026 0 obj << /Length 1133 >> @@ -27596,7 +27606,7 @@ stream BT /F75 9.9626 Tf 150.705 706.129 Td [(info)]TJ 0 g 0 G -/F84 9.9626 Tf 23.8 0 Td [(Err)18(or)-250(code.)]TJ 1.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -47.133 -11.955 Td [(An)-250(integer)-250(value;)-250(0)-250(means)-250(no)-250(err)18(or)-250(has)-250(been)-250(detected.)]TJ 1.02 0 0 1 150.396 636.39 Tm [(The)]TJ/F145 9.9626 Tf 1 0 0 1 170.746 636.39 Tm [(amold)]TJ/F84 9.9626 Tf 1.02 0 0 1 196.898 636.39 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 202.989 636.39 Tm [(vmold)]TJ/F84 9.9626 Tf 1.02 0 0 1 232.48 636.39 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 253.023 636.39 Tm [(imold)]TJ/F84 9.9626 Tf 1.02 0 0 1 282.514 636.39 Tm [(ar)18(guments)-329(may)-328(be)-329(employed)-329(to)-328(interface)-329(with)]TJ 1 0 0 1 150.705 624.435 Tm [(special)-250(devices,)-250(such)-250(as)-250(GPUs)-250(and)-250(other)-250(accelerators.)]TJ +/F84 9.9626 Tf 23.8 0 Td [(Err)18(or)-250(code.)]TJ 1.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(out)]TJ/F84 9.9626 Tf 14.944 0 Td [(.)]TJ -47.133 -11.955 Td [(An)-250(integer)-250(value;)-250(0)-250(means)-250(no)-250(err)18(or)-250(has)-250(been)-250(detected.)]TJ 1.02 0 0 1 150.396 636.39 Tm [(The)]TJ/F147 9.9626 Tf 1 0 0 1 170.746 636.39 Tm [(amold)]TJ/F84 9.9626 Tf 1.02 0 0 1 196.898 636.39 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 202.989 636.39 Tm [(vmold)]TJ/F84 9.9626 Tf 1.02 0 0 1 232.48 636.39 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 253.023 636.39 Tm [(imold)]TJ/F84 9.9626 Tf 1.02 0 0 1 282.514 636.39 Tm [(ar)18(guments)-329(may)-328(be)-329(employed)-329(to)-328(interface)-329(with)]TJ 1 0 0 1 150.705 624.435 Tm [(special)-250(devices,)-250(such)-250(as)-250(GPUs)-250(and)-250(other)-250(accelerators.)]TJ 0 g 0 G 164.383 -533.997 Td [(156)]TJ 0 g 0 G @@ -27604,7 +27614,7 @@ ET endstream endobj -2034 0 obj +2035 0 obj << /Length 6132 >> @@ -27615,7 +27625,7 @@ BT /F75 11.9552 Tf 99.895 706.129 Td [(10.4)-1000(apply)-250(\227)-250(Preconditioner)-250(application)-250(routine)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -18.964 Td [(call)-525(prec%apply\050x,y,desc_a,info,trans,work\051)]TJ 0 -11.955 Td [(call)-525(prec%apply\050x,desc_a,info,trans\051)]TJ +/F147 9.9626 Tf 0 -18.964 Td [(call)-525(prec%apply\050x,y,desc_a,info,trans,work\051)]TJ 0 -11.955 Td [(call)-525(prec%apply\050x,desc_a,info,trans\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -27628,21 +27638,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.349 0 Td [(the)-250(pr)18(econditioner)74(.)-310(Scope:)]TJ/F75 9.9626 Tf 117.836 0 Td [(local)]TJ/F84 9.9626 Tf -117.587 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 337.631 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 340.77 577.576 Td [(Tprec)]TJ +/F147 9.9626 Tf 340.77 577.576 Td [(Tprec)]TJ ET q 1 0 0 1 367.549 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 370.687 577.576 Td [(type)]TJ +/F147 9.9626 Tf 370.687 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -27650,28 +27660,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(sour)18(ce)-250(vector)74(.)-310(Scope:)]TJ/F75 9.9626 Tf 111.142 0 Td [(local)]TJ/F84 9.9626 Tf -96.507 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(array)-250(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 218.688 0 Td [(psb)]TJ +/F147 9.9626 Tf 218.688 0 Td [(psb)]TJ ET q 1 0 0 1 359.808 521.985 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 362.947 521.785 Td [(T)]TJ +/F147 9.9626 Tf 362.947 521.785 Td [(T)]TJ ET q 1 0 0 1 368.804 521.985 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 371.943 521.785 Td [(vect)]TJ +/F147 9.9626 Tf 371.943 521.785 Td [(vect)]TJ ET q 1 0 0 1 393.492 521.985 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 396.63 521.785 Td [(type)]TJ +/F147 9.9626 Tf 396.63 521.785 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -27686,21 +27696,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(the)-250(pr)18(oblem)-250(communication)-250(descriptor)74(.)-310(Scope:)]TJ/F75 9.9626 Tf 208.625 0 Td [(local)]TJ/F84 9.9626 Tf -217.492 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(communication)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 200.207 0 Td [(psb)]TJ +/F147 9.9626 Tf 200.207 0 Td [(psb)]TJ ET q 1 0 0 1 341.328 466.194 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 344.466 465.994 Td [(desc)]TJ +/F147 9.9626 Tf 344.466 465.994 Td [(desc)]TJ ET q 1 0 0 1 366.015 466.194 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 369.153 465.994 Td [(type)]TJ +/F147 9.9626 Tf 369.153 465.994 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -27719,28 +27729,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.521 0 Td [(the)-250(destination)-250(vector)74(.)-310(Scope:)]TJ/F75 9.9626 Tf 131.913 0 Td [(local)]TJ/F84 9.9626 Tf -117.836 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(array)-250(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 218.688 0 Td [(psb)]TJ +/F147 9.9626 Tf 218.688 0 Td [(psb)]TJ ET q 1 0 0 1 359.808 276.904 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 362.947 276.704 Td [(T)]TJ +/F147 9.9626 Tf 362.947 276.704 Td [(T)]TJ ET q 1 0 0 1 368.804 276.904 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 371.943 276.704 Td [(vect)]TJ +/F147 9.9626 Tf 371.943 276.704 Td [(vect)]TJ ET q 1 0 0 1 393.492 276.904 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 396.63 276.704 Td [(type)]TJ +/F147 9.9626 Tf 396.63 276.704 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -27758,7 +27768,7 @@ ET endstream endobj -2040 0 obj +2041 0 obj << /Length 3490 >> @@ -27769,7 +27779,7 @@ BT /F75 11.9552 Tf 150.705 706.129 Td [(10.5)-1000(descr)-250(\227)-250(Prints)-250(a)-250(description)-250(of)-250(current)-250(preconditioner)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -18.964 Td [(call)-525(prec%descr\050info\051)]TJ 0 -11.955 Td [(call)-525(prec%descr\050info,iout,)-525(root\051)]TJ +/F147 9.9626 Tf 0 -18.964 Td [(call)-525(prec%descr\050info\051)]TJ 0 -11.955 Td [(call)-525(prec%descr\050info,iout,)-525(root\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -27782,21 +27792,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.348 0 Td [(the)-250(pr)18(econditioner)74(.)-310(Scope:)]TJ/F75 9.9626 Tf 117.837 0 Td [(local)]TJ/F84 9.9626 Tf -117.587 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 388.441 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 391.579 577.576 Td [(Tprec)]TJ +/F147 9.9626 Tf 391.579 577.576 Td [(Tprec)]TJ ET q 1 0 0 1 418.358 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.497 577.576 Td [(type)]TJ +/F147 9.9626 Tf 421.497 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -27806,7 +27816,7 @@ BT 0 g 0 G /F75 9.9626 Tf -24.906 -19.925 Td [(root)]TJ 0 g 0 G -/F84 9.9626 Tf 23.252 0 Td [(Pr)18(ocess)-250(fr)18(om)-250(which)-250(to)-250(print)-250(Scope:)]TJ/F75 9.9626 Tf 155.834 0 Td [(local)]TJ/F84 9.9626 Tf -154.488 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 1.02 0 0 1 175.611 465.994 Tm [(Speci\002ed)-342(as:)-498(an)-341(integer)-342(number)-342(between)-342(0)-342(and)]TJ/F78 9.9626 Tf 1 0 0 1 396.349 465.994 Tm [(n)-80(p)]TJ/F190 10.3811 Tf 13.868 0 Td [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 420.713 465.994 Tm [(1,)-366(in)-342(which)-342(case)]TJ 1.02 0 0 1 175.611 454.039 Tm [(the)-264(speci\002ed)-265(pr)18(ocess)-265(will)-264(print)-264(the)-265(description,)-269(or)]TJ/F190 10.3811 Tf 1 0 0 1 401.395 454.039 Tm [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 409.589 454.039 Tm [(1,)-269(in)-265(which)-264(case)-265(all)]TJ 1 0 0 1 175.313 442.084 Tm [(pr)18(ocesses)-250(will)-250(print.)-310(Default:)-310(0.)]TJ +/F84 9.9626 Tf 23.252 0 Td [(Pr)18(ocess)-250(fr)18(om)-250(which)-250(to)-250(print)-250(Scope:)]TJ/F75 9.9626 Tf 155.834 0 Td [(local)]TJ/F84 9.9626 Tf -154.488 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ 1.02 0 0 1 175.611 465.994 Tm [(Speci\002ed)-342(as:)-498(an)-341(integer)-342(number)-342(between)-342(0)-342(and)]TJ/F78 9.9626 Tf 1 0 0 1 396.349 465.994 Tm [(n)-80(p)]TJ/F195 10.3811 Tf 13.868 0 Td [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 420.713 465.994 Tm [(1,)-366(in)-342(which)-342(case)]TJ 1.02 0 0 1 175.611 454.039 Tm [(the)-264(speci\002ed)-265(pr)18(ocess)-265(will)-264(print)-264(the)-265(description,)-269(or)]TJ/F195 10.3811 Tf 1 0 0 1 401.395 454.039 Tm [(\000)]TJ/F84 9.9626 Tf 1.02 0 0 1 409.589 454.039 Tm [(1,)-269(in)-265(which)-264(case)-265(all)]TJ 1 0 0 1 175.313 442.084 Tm [(pr)18(ocesses)-250(will)-250(print.)-310(Default:)-310(0.)]TJ 0 g 0 G /F75 9.9626 Tf -24.608 -19.925 Td [(On)-250(Return)]TJ 0 g 0 G @@ -27821,7 +27831,7 @@ ET endstream endobj -2044 0 obj +2045 0 obj << /Length 973 >> @@ -27832,7 +27842,7 @@ BT /F75 11.9552 Tf 99.895 706.129 Td [(10.6)-1000(clone)-250(\227)-250(clone)-250(current)-250(preconditioner)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -18.964 Td [(call)-1050(prec%clone\050precout,info\051)]TJ +/F147 9.9626 Tf 0 -18.964 Td [(call)-1050(prec%clone\050precout,info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -27862,7 +27872,7 @@ ET endstream endobj -1939 0 obj +1940 0 obj << /Type /ObjStm /N 100 @@ -27870,39 +27880,39 @@ endobj /Length 10929 >> stream -1938 0 517 58 1935 115 1942 210 1940 349 1944 494 521 553 1945 611 1946 670 1941 729 -1949 824 1947 963 1951 1108 525 1166 1952 1223 1953 1281 1948 1339 1957 1434 1955 1573 1959 1718 -529 1777 1960 1835 1961 1893 1956 1952 1964 2047 1962 2186 1966 2330 533 2388 1967 2445 1968 2502 -1963 2560 1971 2655 1969 2794 1973 2939 537 2998 1974 3056 1975 3115 1970 3174 1978 3297 1976 3436 -1980 3578 541 3636 1981 3693 1982 3751 1977 3809 1984 3932 1986 4050 1983 4109 1988 4192 1990 4310 -545 4368 1987 4425 1996 4520 1992 4677 1993 4824 1994 4972 1998 5119 549 5178 1999 5236 1995 5294 -2007 5402 2001 5568 2002 5715 2003 5862 2004 6010 2009 6157 553 6215 2006 6272 2011 6380 2005 6519 -2013 6682 2000 6741 2010 6801 2020 6911 2015 7077 2016 7222 2017 7369 2018 7516 2022 7663 557 7721 -2019 7778 2024 7873 2026 7991 2023 8050 2033 8145 2027 8320 2028 8465 2029 8608 2030 8755 2031 8899 -2035 9048 561 9106 2032 9163 2039 9258 2037 9397 2041 9542 565 9601 2038 9659 2043 9781 2045 9899 -% 1938 0 obj +1939 0 517 58 1936 115 1943 210 1941 349 1945 494 521 553 1946 611 1947 670 1942 729 +1950 824 1948 963 1952 1108 525 1166 1953 1223 1954 1281 1949 1339 1958 1434 1956 1573 1960 1718 +529 1777 1961 1835 1962 1893 1957 1952 1965 2047 1963 2186 1967 2330 533 2388 1968 2445 1969 2502 +1964 2560 1972 2655 1970 2794 1974 2939 537 2998 1975 3056 1976 3115 1971 3174 1979 3297 1977 3436 +1981 3578 541 3636 1982 3693 1983 3751 1978 3809 1985 3932 1987 4050 1984 4109 1989 4192 1991 4310 +545 4368 1988 4425 1997 4520 1993 4677 1994 4824 1995 4972 1999 5119 549 5178 2000 5236 1996 5294 +2008 5402 2002 5568 2003 5715 2004 5862 2005 6010 2010 6157 553 6215 2007 6272 2012 6380 2006 6519 +2014 6682 2001 6741 2011 6801 2021 6911 2016 7077 2017 7222 2018 7369 2019 7516 2023 7663 557 7721 +2020 7778 2025 7873 2027 7991 2024 8050 2034 8145 2028 8320 2029 8465 2030 8608 2031 8755 2032 8899 +2036 9048 561 9106 2033 9163 2040 9258 2038 9397 2042 9542 565 9601 2039 9659 2044 9781 2046 9899 +% 1939 0 obj << -/D [1936 0 R /XYZ 98.895 753.953 null] +/D [1937 0 R /XYZ 98.895 753.953 null] >> % 517 0 obj << -/D [1936 0 R /XYZ 99.895 716.092 null] +/D [1937 0 R /XYZ 99.895 716.092 null] >> -% 1935 0 obj +% 1936 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1942 0 obj +% 1943 0 obj << /Type /Page -/Contents 1943 0 R -/Resources 1941 0 R +/Contents 1944 0 R +/Resources 1942 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1916 0 R -/Annots [ 1940 0 R ] +/Parent 1917 0 R +/Annots [ 1941 0 R ] >> -% 1940 0 obj +% 1941 0 obj << /Type /Annot /Subtype /Link @@ -27910,37 +27920,37 @@ stream /Rect [342.753 438.278 420.271 450.338] /A << /S /GoTo /D (spdata) >> >> -% 1944 0 obj +% 1945 0 obj << -/D [1942 0 R /XYZ 149.705 753.953 null] +/D [1943 0 R /XYZ 149.705 753.953 null] >> % 521 0 obj << -/D [1942 0 R /XYZ 150.705 716.092 null] +/D [1943 0 R /XYZ 150.705 716.092 null] >> -% 1945 0 obj +% 1946 0 obj << -/D [1942 0 R /XYZ 150.705 676.015 null] +/D [1943 0 R /XYZ 150.705 676.015 null] >> -% 1946 0 obj +% 1947 0 obj << -/D [1942 0 R /XYZ 150.705 679.195 null] +/D [1943 0 R /XYZ 150.705 679.195 null] >> -% 1941 0 obj +% 1942 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1949 0 obj +% 1950 0 obj << /Type /Page -/Contents 1950 0 R -/Resources 1948 0 R +/Contents 1951 0 R +/Resources 1949 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1954 0 R -/Annots [ 1947 0 R ] +/Parent 1955 0 R +/Annots [ 1948 0 R ] >> -% 1947 0 obj +% 1948 0 obj << /Type /Annot /Subtype /Link @@ -27948,37 +27958,37 @@ stream /Rect [291.943 571.778 369.462 583.837] /A << /S /GoTo /D (spdata) >> >> -% 1951 0 obj +% 1952 0 obj << -/D [1949 0 R /XYZ 98.895 753.953 null] +/D [1950 0 R /XYZ 98.895 753.953 null] >> % 525 0 obj << -/D [1949 0 R /XYZ 99.895 716.092 null] +/D [1950 0 R /XYZ 99.895 716.092 null] >> -% 1952 0 obj +% 1953 0 obj << -/D [1949 0 R /XYZ 99.895 676.015 null] +/D [1950 0 R /XYZ 99.895 676.015 null] >> -% 1953 0 obj +% 1954 0 obj << -/D [1949 0 R /XYZ 99.895 679.195 null] +/D [1950 0 R /XYZ 99.895 679.195 null] >> -% 1948 0 obj +% 1949 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1957 0 obj +% 1958 0 obj << /Type /Page -/Contents 1958 0 R -/Resources 1956 0 R +/Contents 1959 0 R +/Resources 1957 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1954 0 R -/Annots [ 1955 0 R ] +/Parent 1955 0 R +/Annots [ 1956 0 R ] >> -% 1955 0 obj +% 1956 0 obj << /Type /Annot /Subtype /Link @@ -27986,37 +27996,37 @@ stream /Rect [342.753 438.278 420.271 450.338] /A << /S /GoTo /D (spdata) >> >> -% 1959 0 obj +% 1960 0 obj << -/D [1957 0 R /XYZ 149.705 753.953 null] +/D [1958 0 R /XYZ 149.705 753.953 null] >> % 529 0 obj << -/D [1957 0 R /XYZ 150.705 716.092 null] +/D [1958 0 R /XYZ 150.705 716.092 null] >> -% 1960 0 obj +% 1961 0 obj << -/D [1957 0 R /XYZ 150.705 678.98 null] +/D [1958 0 R /XYZ 150.705 678.98 null] >> -% 1961 0 obj +% 1962 0 obj << -/D [1957 0 R /XYZ 150.705 679.195 null] +/D [1958 0 R /XYZ 150.705 679.195 null] >> -% 1956 0 obj +% 1957 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1964 0 obj +% 1965 0 obj << /Type /Page -/Contents 1965 0 R -/Resources 1963 0 R +/Contents 1966 0 R +/Resources 1964 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1954 0 R -/Annots [ 1962 0 R ] +/Parent 1955 0 R +/Annots [ 1963 0 R ] >> -% 1962 0 obj +% 1963 0 obj << /Type /Annot /Subtype /Link @@ -28024,37 +28034,37 @@ stream /Rect [301.961 426.323 378.015 438.383] /A << /S /GoTo /D (vdata) >> >> -% 1966 0 obj +% 1967 0 obj << -/D [1964 0 R /XYZ 98.895 753.953 null] +/D [1965 0 R /XYZ 98.895 753.953 null] >> % 533 0 obj << -/D [1964 0 R /XYZ 99.895 716.092 null] +/D [1965 0 R /XYZ 99.895 716.092 null] >> -% 1967 0 obj +% 1968 0 obj << -/D [1964 0 R /XYZ 99.895 678.98 null] +/D [1965 0 R /XYZ 99.895 678.98 null] >> -% 1968 0 obj +% 1969 0 obj << -/D [1964 0 R /XYZ 99.895 679.195 null] +/D [1965 0 R /XYZ 99.895 679.195 null] >> -% 1963 0 obj +% 1964 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1971 0 obj +% 1972 0 obj << /Type /Page -/Contents 1972 0 R -/Resources 1970 0 R +/Contents 1973 0 R +/Resources 1971 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1954 0 R -/Annots [ 1969 0 R ] +/Parent 1955 0 R +/Annots [ 1970 0 R ] >> -% 1969 0 obj +% 1970 0 obj << /Type /Annot /Subtype /Link @@ -28062,37 +28072,37 @@ stream /Rect [342.753 574.778 420.271 586.838] /A << /S /GoTo /D (spdata) >> >> -% 1973 0 obj +% 1974 0 obj << -/D [1971 0 R /XYZ 149.705 753.953 null] +/D [1972 0 R /XYZ 149.705 753.953 null] >> % 537 0 obj << -/D [1971 0 R /XYZ 150.705 716.092 null] +/D [1972 0 R /XYZ 150.705 716.092 null] >> -% 1974 0 obj +% 1975 0 obj << -/D [1971 0 R /XYZ 150.705 679.441 null] +/D [1972 0 R /XYZ 150.705 679.441 null] >> -% 1975 0 obj +% 1976 0 obj << -/D [1971 0 R /XYZ 150.705 679.657 null] +/D [1972 0 R /XYZ 150.705 679.657 null] >> -% 1970 0 obj +% 1971 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R /F235 1045 0 R >> /ProcSet [ /PDF /Text ] >> -% 1978 0 obj +% 1979 0 obj << /Type /Page -/Contents 1979 0 R -/Resources 1977 0 R +/Contents 1980 0 R +/Resources 1978 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1954 0 R -/Annots [ 1976 0 R ] +/Parent 1955 0 R +/Annots [ 1977 0 R ] >> -% 1976 0 obj +% 1977 0 obj << /Type /Annot /Subtype /Link @@ -28100,75 +28110,75 @@ stream /Rect [396.215 574.59 472.269 586.65] /A << /S /GoTo /D (vdata) >> >> -% 1980 0 obj +% 1981 0 obj << -/D [1978 0 R /XYZ 98.895 753.953 null] +/D [1979 0 R /XYZ 98.895 753.953 null] >> % 541 0 obj << -/D [1978 0 R /XYZ 99.895 716.092 null] +/D [1979 0 R /XYZ 99.895 716.092 null] >> -% 1981 0 obj +% 1982 0 obj << -/D [1978 0 R /XYZ 99.895 679.413 null] +/D [1979 0 R /XYZ 99.895 679.413 null] >> -% 1982 0 obj +% 1983 0 obj << -/D [1978 0 R /XYZ 99.895 679.628 null] +/D [1979 0 R /XYZ 99.895 679.628 null] >> -% 1977 0 obj +% 1978 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R /F235 1045 0 R >> /ProcSet [ /PDF /Text ] >> -% 1984 0 obj +% 1985 0 obj << /Type /Page -/Contents 1985 0 R -/Resources 1983 0 R +/Contents 1986 0 R +/Resources 1984 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1954 0 R +/Parent 1955 0 R >> -% 1986 0 obj +% 1987 0 obj << -/D [1984 0 R /XYZ 149.705 753.953 null] +/D [1985 0 R /XYZ 149.705 753.953 null] >> -% 1983 0 obj +% 1984 0 obj << -/Font << /F233 1044 0 R /F84 687 0 R >> +/Font << /F235 1045 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 1988 0 obj +% 1989 0 obj << /Type /Page -/Contents 1989 0 R -/Resources 1987 0 R +/Contents 1990 0 R +/Resources 1988 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1991 0 R +/Parent 1992 0 R >> -% 1990 0 obj +% 1991 0 obj << -/D [1988 0 R /XYZ 98.895 753.953 null] +/D [1989 0 R /XYZ 98.895 753.953 null] >> % 545 0 obj << -/D [1988 0 R /XYZ 99.895 716.092 null] +/D [1989 0 R /XYZ 99.895 716.092 null] >> -% 1987 0 obj +% 1988 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 1996 0 obj +% 1997 0 obj << /Type /Page -/Contents 1997 0 R -/Resources 1995 0 R +/Contents 1998 0 R +/Resources 1996 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1991 0 R -/Annots [ 1992 0 R 1993 0 R 1994 0 R ] +/Parent 1992 0 R +/Annots [ 1993 0 R 1994 0 R 1995 0 R ] >> -% 1992 0 obj +% 1993 0 obj << /Type /Annot /Subtype /Link @@ -28176,7 +28186,7 @@ stream /Rect [371.126 442.264 443.414 454.323] /A << /S /GoTo /D (precdata) >> >> -% 1993 0 obj +% 1994 0 obj << /Type /Annot /Subtype /Link @@ -28184,7 +28194,7 @@ stream /Rect [222.066 352.6 228.343 366.303] /A << /S /GoTo /D (Hfootnote.4) >> >> -% 1994 0 obj +% 1995 0 obj << /Type /Annot /Subtype /Link @@ -28192,33 +28202,33 @@ stream /Rect [221.319 235.698 233.275 245.108] /A << /S /GoTo /D (table.21) >> >> -% 1998 0 obj +% 1999 0 obj << -/D [1996 0 R /XYZ 149.705 753.953 null] +/D [1997 0 R /XYZ 149.705 753.953 null] >> % 549 0 obj << -/D [1996 0 R /XYZ 150.705 716.092 null] +/D [1997 0 R /XYZ 150.705 716.092 null] >> -% 1999 0 obj +% 2000 0 obj << -/D [1996 0 R /XYZ 165.051 129.79 null] +/D [1997 0 R /XYZ 165.051 129.79 null] >> -% 1995 0 obj +% 1996 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2007 0 obj +% 2008 0 obj << /Type /Page -/Contents 2008 0 R -/Resources 2006 0 R +/Contents 2009 0 R +/Resources 2007 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1991 0 R -/Annots [ 2001 0 R 2002 0 R 2003 0 R 2004 0 R ] +/Parent 1992 0 R +/Annots [ 2002 0 R 2003 0 R 2004 0 R 2005 0 R ] >> -% 2001 0 obj +% 2002 0 obj << /Type /Annot /Subtype /Link @@ -28226,7 +28236,7 @@ stream /Rect [283.359 567.422 295.314 580.259] /A << /S /GoTo /D (table.21) >> >> -% 2002 0 obj +% 2003 0 obj << /Type /Annot /Subtype /Link @@ -28234,7 +28244,7 @@ stream /Rect [366.137 520.379 378.292 532.438] /A << /S /GoTo /D (table.21) >> >> -% 2003 0 obj +% 2004 0 obj << /Type /Annot /Subtype /Link @@ -28242,7 +28252,7 @@ stream /Rect [379.319 483.736 386.292 496.573] /A << /S /GoTo /D (section.8) >> >> -% 2004 0 obj +% 2005 0 obj << /Type /Annot /Subtype /Link @@ -28250,29 +28260,29 @@ stream /Rect [136.757 451.412 148.712 460.822] /A << /S /GoTo /D (table.21) >> >> -% 2009 0 obj +% 2010 0 obj << -/D [2007 0 R /XYZ 98.895 753.953 null] +/D [2008 0 R /XYZ 98.895 753.953 null] >> % 553 0 obj << -/D [2007 0 R /XYZ 99.895 716.092 null] +/D [2008 0 R /XYZ 99.895 716.092 null] >> -% 2006 0 obj +% 2007 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2011 0 obj +% 2012 0 obj << /Type /Page -/Contents 2012 0 R -/Resources 2010 0 R +/Contents 2013 0 R +/Resources 2011 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1991 0 R -/Annots [ 2005 0 R ] +/Parent 1992 0 R +/Annots [ 2006 0 R ] >> -% 2005 0 obj +% 2006 0 obj << /Type /Annot /Subtype /Link @@ -28280,29 +28290,29 @@ stream /Rect [404.253 212.933 412.423 220.405] /A << /S /GoTo /D (cite.BERTACCINIFILIPPONE) >> >> -% 2013 0 obj +% 2014 0 obj << -/D [2011 0 R /XYZ 149.705 753.953 null] +/D [2012 0 R /XYZ 149.705 753.953 null] >> -% 2000 0 obj +% 2001 0 obj << -/D [2011 0 R /XYZ -3900.052 719.08 null] +/D [2012 0 R /XYZ -3900.052 719.08 null] >> -% 2010 0 obj +% 2011 0 obj << -/Font << /F233 1044 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> +/Font << /F235 1045 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 2020 0 obj +% 2021 0 obj << /Type /Page -/Contents 2021 0 R -/Resources 2019 0 R +/Contents 2022 0 R +/Resources 2020 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1991 0 R -/Annots [ 2015 0 R 2016 0 R 2017 0 R 2018 0 R ] +/Parent 1992 0 R +/Annots [ 2016 0 R 2017 0 R 2018 0 R 2019 0 R ] >> -% 2015 0 obj +% 2016 0 obj << /Type /Annot /Subtype /Link @@ -28310,7 +28320,7 @@ stream /Rect [314.678 576.377 392.197 588.437] /A << /S /GoTo /D (spdata) >> >> -% 2016 0 obj +% 2017 0 obj << /Type /Annot /Subtype /Link @@ -28318,7 +28328,7 @@ stream /Rect [395.856 505.741 468.144 517.801] /A << /S /GoTo /D (precdata) >> >> -% 2017 0 obj +% 2018 0 obj << /Type /Annot /Subtype /Link @@ -28326,7 +28336,7 @@ stream /Rect [371.454 435.105 438.512 447.165] /A << /S /GoTo /D (descdata) >> >> -% 2018 0 obj +% 2019 0 obj << /Type /Annot /Subtype /Link @@ -28334,46 +28344,46 @@ stream /Rect [317.418 128.475 389.706 140.535] /A << /S /GoTo /D (precdata) >> >> -% 2022 0 obj +% 2023 0 obj << -/D [2020 0 R /XYZ 98.895 753.953 null] +/D [2021 0 R /XYZ 98.895 753.953 null] >> % 557 0 obj << -/D [2020 0 R /XYZ 99.895 716.092 null] +/D [2021 0 R /XYZ 99.895 716.092 null] >> -% 2019 0 obj +% 2020 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2024 0 obj +% 2025 0 obj << /Type /Page -/Contents 2025 0 R -/Resources 2023 0 R +/Contents 2026 0 R +/Resources 2024 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1991 0 R +/Parent 1992 0 R >> -% 2026 0 obj +% 2027 0 obj << -/D [2024 0 R /XYZ 149.705 753.953 null] +/D [2025 0 R /XYZ 149.705 753.953 null] >> -% 2023 0 obj +% 2024 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2033 0 obj +% 2034 0 obj << /Type /Page -/Contents 2034 0 R -/Resources 2032 0 R +/Contents 2035 0 R +/Resources 2033 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2036 0 R -/Annots [ 2027 0 R 2028 0 R 2029 0 R 2030 0 R 2031 0 R ] +/Parent 2037 0 R +/Annots [ 2028 0 R 2029 0 R 2030 0 R 2031 0 R 2032 0 R ] >> -% 2027 0 obj +% 2028 0 obj << /Type /Annot /Subtype /Link @@ -28381,7 +28391,7 @@ stream /Rect [320.317 573.77 392.605 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2028 0 obj +% 2029 0 obj << /Type /Annot /Subtype /Link @@ -28389,7 +28399,7 @@ stream /Rect [342.493 517.98 418.548 530.039] /A << /S /GoTo /D (vdata) >> >> -% 2029 0 obj +% 2030 0 obj << /Type /Annot /Subtype /Link @@ -28397,7 +28407,7 @@ stream /Rect [324.013 462.189 391.071 474.248] /A << /S /GoTo /D (descdata) >> >> -% 2030 0 obj +% 2031 0 obj << /Type /Annot /Subtype /Link @@ -28405,7 +28415,7 @@ stream /Rect [342.493 272.899 418.548 284.958] /A << /S /GoTo /D (vdata) >> >> -% 2031 0 obj +% 2032 0 obj << /Type /Annot /Subtype /Link @@ -28413,29 +28423,29 @@ stream /Rect [431.552 183.235 443.387 196.238] /A << /S /GoTo /D (section.11) >> >> -% 2035 0 obj +% 2036 0 obj << -/D [2033 0 R /XYZ 98.895 753.953 null] +/D [2034 0 R /XYZ 98.895 753.953 null] >> % 561 0 obj << -/D [2033 0 R /XYZ 99.895 716.092 null] +/D [2034 0 R /XYZ 99.895 716.092 null] >> -% 2032 0 obj +% 2033 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2039 0 obj +% 2040 0 obj << /Type /Page -/Contents 2040 0 R -/Resources 2038 0 R +/Contents 2041 0 R +/Resources 2039 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2036 0 R -/Annots [ 2037 0 R ] +/Parent 2037 0 R +/Annots [ 2038 0 R ] >> -% 2037 0 obj +% 2038 0 obj << /Type /Annot /Subtype /Link @@ -28443,35 +28453,35 @@ stream /Rect [371.126 573.77 443.414 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2041 0 obj +% 2042 0 obj << -/D [2039 0 R /XYZ 149.705 753.953 null] +/D [2040 0 R /XYZ 149.705 753.953 null] >> % 565 0 obj << -/D [2039 0 R /XYZ 150.705 716.092 null] +/D [2040 0 R /XYZ 150.705 716.092 null] >> -% 2038 0 obj +% 2039 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R /F78 686 0 R /F190 941 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R /F78 686 0 R /F195 942 0 R >> /ProcSet [ /PDF /Text ] >> -% 2043 0 obj +% 2044 0 obj << /Type /Page -/Contents 2044 0 R -/Resources 2042 0 R +/Contents 2045 0 R +/Resources 2043 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2036 0 R +/Parent 2037 0 R >> -% 2045 0 obj +% 2046 0 obj << -/D [2043 0 R /XYZ 98.895 753.953 null] +/D [2044 0 R /XYZ 98.895 753.953 null] >> endstream endobj -2051 0 obj +2052 0 obj << /Length 2715 >> @@ -28482,7 +28492,7 @@ BT /F75 11.9552 Tf 150.705 706.129 Td [(10.7)-1000(free)-250(\227)-250(Free)-250(a)-250(preconditioner)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf 0 -18.964 Td [(call)-525(prec%free\050info\051)]TJ +/F147 9.9626 Tf 0 -18.964 Td [(call)-525(prec%free\050info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -28495,21 +28505,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.348 0 Td [(the)-250(pr)18(econditioner)74(.)]TJ 0.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 388.441 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 391.579 577.576 Td [(Tprec)]TJ +/F147 9.9626 Tf 391.579 577.576 Td [(Tprec)]TJ ET q 1 0 0 1 418.358 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.497 577.576 Td [(type)]TJ +/F147 9.9626 Tf 421.497 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -28520,21 +28530,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.348 0 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.182 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 388.441 502.059 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 391.579 501.86 Td [(Tprec)]TJ +/F147 9.9626 Tf 391.579 501.86 Td [(Tprec)]TJ ET q 1 0 0 1 418.358 502.059 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.497 501.86 Td [(type)]TJ +/F147 9.9626 Tf 421.497 501.86 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -28548,7 +28558,7 @@ ET endstream endobj -2059 0 obj +2060 0 obj << /Length 6107 >> @@ -28566,7 +28576,7 @@ BT /F75 11.9552 Tf 178.907 706.129 Td [(wrk)-250(\227)-250(preconditioner)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -79.012 -18.964 Td [(call)-525(prec%allocate_wrk\050info[,vmold]\051)]TJ +/F147 9.9626 Tf -79.012 -18.964 Td [(call)-525(prec%allocate_wrk\050info[,vmold]\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -28579,55 +28589,55 @@ BT 0 g 0 G /F84 9.9626 Tf 24.349 0 Td [(the)-250(pr)18(econditioner)74(.)]TJ 0.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 337.631 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 340.77 577.576 Td [(Tprec)]TJ +/F147 9.9626 Tf 340.77 577.576 Td [(Tprec)]TJ ET q 1 0 0 1 367.549 577.775 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 370.687 577.576 Td [(type)]TJ +/F147 9.9626 Tf 370.687 577.576 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -291.714 -19.925 Td [(vmold)]TJ 0 g 0 G -/F84 9.9626 Tf 34.013 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(vector)-250(storage.)]TJ -9.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(a)-250(class)-250(derived)-250(fr)18(om)]TJ/F145 9.9626 Tf 201.393 0 Td [(psb)]TJ +/F84 9.9626 Tf 34.013 0 Td [(The)-250(desir)18(ed)-250(dynamic)-250(type)-250(for)-250(the)-250(internal)-250(vector)-250(storage.)]TJ -9.106 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(object)-250(of)-250(a)-250(class)-250(derived)-250(fr)18(om)]TJ/F147 9.9626 Tf 201.393 0 Td [(psb)]TJ ET q 1 0 0 1 342.513 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 345.652 509.83 Td [(T)]TJ +/F147 9.9626 Tf 345.652 509.83 Td [(T)]TJ ET q 1 0 0 1 351.51 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 354.648 509.83 Td [(base)]TJ +/F147 9.9626 Tf 354.648 509.83 Td [(base)]TJ ET q 1 0 0 1 376.197 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 379.335 509.83 Td [(vect)]TJ +/F147 9.9626 Tf 379.335 509.83 Td [(vect)]TJ ET q 1 0 0 1 400.884 510.029 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 404.022 509.83 Td [(type)]TJ/F84 9.9626 Tf 20.922 0 Td [(.)]TJ +/F147 9.9626 Tf 404.022 509.83 Td [(type)]TJ/F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -325.049 -19.925 Td [(On)-250(Exit)]TJ 0 g 0 G @@ -28636,21 +28646,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.349 0 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.183 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 337.631 434.313 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 340.77 434.114 Td [(Tprec)]TJ +/F147 9.9626 Tf 340.77 434.114 Td [(Tprec)]TJ ET q 1 0 0 1 367.549 434.313 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 370.687 434.114 Td [(type)]TJ +/F147 9.9626 Tf 370.687 434.114 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -28664,7 +28674,7 @@ BT 0 0 1 rg 0 0 1 RG [-495(13)]TJ 0 g 0 G - [(,)-249(memor)1(y)-248(allocation)-248(and)-248(deallocation)-248(usually)-248(have)-248(a)-247(much)]TJ 1.005 0 0 1 99.895 296.63 Tm [(lar)18(ger)-247(over)18(head,)-248(signi\002cantly)-247(af)18(fecting)-247(performance.)-308(T)92(o)-247(alleviate)-247(this)-247(pr)17(oblem)]TJ 1.02 0 0 1 99.477 284.674 Tm [(we)-301(de\002ne)-300(this)-301(method)-300(that)-301(pr)18(eallocates)-301(internal)-300(storage;)-329(it)-300(is)-301(intended)-300(to)-301(be)]TJ 0.98 0 0 1 99.895 272.719 Tm [(invoked)-245(p)1(rior)-245(to)-244(the)-245(iterative)-244(solver)-245(method,)-246(so)-245(that)-244(the)-245(necessary)-244(internal)-245(work)]TJ 1 0 0 1 99.895 260.764 Tm [(storage)-250(is)-250(available)-250(thr)18(oughout)-250(the)-250(iterative)-250(method)-250(application.)]TJ 1.002 0 0 1 114.839 248.809 Tm [(When)-250(using)-251(GPUs)-250(or)-251(other)-250(specialized)-250(devices,)-251(the)]TJ/F145 9.9626 Tf 1 0 0 1 342.254 248.809 Tm [(vmold)]TJ/F84 9.9626 Tf 1.002 0 0 1 370.906 248.809 Tm [(ar)18(gument)-250(is)-251(also)]TJ 1.019 0 0 1 99.895 236.854 Tm [(necessary)-246(to)-246(ensur)17(e)-246(the)-246(internal)-246(work)-246(vectors)-247(ar)18(e)-246(of)-246(the)-246(appr)17(opriate)-246(dynamic)]TJ 1 0 0 1 99.895 224.899 Tm [(type)-250(to)-250(exploit)-250(the)-250(accelerator)-250(har)18(dwar)18(e.)]TJ + [(,)-249(memor)1(y)-248(allocation)-248(and)-248(deallocation)-248(usually)-248(have)-248(a)-247(much)]TJ 1.005 0 0 1 99.895 296.63 Tm [(lar)18(ger)-247(over)18(head,)-248(signi\002cantly)-247(af)18(fecting)-247(performance.)-308(T)92(o)-247(alleviate)-247(this)-247(pr)17(oblem)]TJ 1.02 0 0 1 99.477 284.674 Tm [(we)-301(de\002ne)-300(this)-301(method)-300(that)-301(pr)18(eallocates)-301(internal)-300(storage;)-329(it)-300(is)-301(intended)-300(to)-301(be)]TJ 0.98 0 0 1 99.895 272.719 Tm [(invoked)-245(p)1(rior)-245(to)-244(the)-245(iterative)-244(solver)-245(method,)-246(so)-245(that)-244(the)-245(necessary)-244(internal)-245(work)]TJ 1 0 0 1 99.895 260.764 Tm [(storage)-250(is)-250(available)-250(thr)18(oughout)-250(the)-250(iterative)-250(method)-250(application.)]TJ 1.002 0 0 1 114.839 248.809 Tm [(When)-250(using)-251(GPUs)-250(or)-251(other)-250(specialized)-250(devices,)-251(the)]TJ/F147 9.9626 Tf 1 0 0 1 342.254 248.809 Tm [(vmold)]TJ/F84 9.9626 Tf 1.002 0 0 1 370.906 248.809 Tm [(ar)18(gument)-250(is)-251(also)]TJ 1.019 0 0 1 99.895 236.854 Tm [(necessary)-246(to)-246(ensur)17(e)-246(the)-246(internal)-246(work)-246(vectors)-247(ar)18(e)-246(of)-246(the)-246(appr)17(opriate)-246(dynamic)]TJ 1 0 0 1 99.895 224.899 Tm [(type)-250(to)-250(exploit)-250(the)-250(accelerator)-250(har)18(dwar)18(e.)]TJ 0 g 0 G 164.384 -134.461 Td [(161)]TJ 0 g 0 G @@ -28672,7 +28682,7 @@ ET endstream endobj -2066 0 obj +2067 0 obj << /Length 3194 >> @@ -28690,7 +28700,7 @@ BT /F75 11.9552 Tf 242.998 706.129 Td [(wrk)-250(\227)-250(preconditioner)]TJ 0 g 0 G 0 g 0 G -/F145 9.9626 Tf -92.293 -18.964 Td [(call)-525(prec%allocate_wrk\050info\051)]TJ 0 -11.955 Td [(call)-525(prec%free_wrk\050info\051)]TJ +/F147 9.9626 Tf -92.293 -18.964 Td [(call)-525(prec%allocate_wrk\050info\051)]TJ 0 -11.955 Td [(call)-525(prec%free_wrk\050info\051)]TJ 0 g 0 G /F75 9.9626 Tf 0 -21.918 Td [(T)90(ype:)]TJ 0 g 0 G @@ -28703,21 +28713,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.348 0 Td [(the)-250(pr)18(econditioner)74(.)]TJ 0.558 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.319 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 388.441 565.82 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 391.579 565.621 Td [(Tprec)]TJ +/F147 9.9626 Tf 391.579 565.621 Td [(Tprec)]TJ ET q 1 0 0 1 418.358 565.82 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.497 565.621 Td [(type)]TJ +/F147 9.9626 Tf 421.497 565.621 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -28728,21 +28738,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.348 0 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.182 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(pr)18(econditioner)-250(data)-250(str)8(uctur)18(e)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 196.511 0 Td [(psb)]TJ +/F147 9.9626 Tf 196.511 0 Td [(psb)]TJ ET q 1 0 0 1 388.441 490.104 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 391.579 489.905 Td [(Tprec)]TJ +/F147 9.9626 Tf 391.579 489.905 Td [(Tprec)]TJ ET q 1 0 0 1 418.358 490.104 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 421.497 489.905 Td [(type)]TJ +/F147 9.9626 Tf 421.497 489.905 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -28760,7 +28770,7 @@ ET endstream endobj -2070 0 obj +2071 0 obj << /Length 607 >> @@ -28768,7 +28778,7 @@ stream 0 g 0 G 0 g 0 G BT -/F75 14.3462 Tf 99.895 705.784 Td [(11)-1000(Iterative)-250(Methods)]TJ/F84 9.9626 Tf 1.006 0 0 1 99.895 683.082 Tm [(In)-249(this)-250(chapter)-249(we)-250(pr)18(ovide)-249(r)18(outines)-250(for)-249(pr)18(econditioners)-250(and)-249(iterative)-249(methods.)]TJ 0.98 0 0 1 99.587 671.127 Tm [(The)-194(interfaces)-194(for)-194(it)1(erative)-194(methods)-194(ar)18(e)-194(available)-194(in)-193(the)-194(module)]TJ/F145 9.9626 Tf 1 0 0 1 369.457 671.127 Tm [(psb_linsolve_mod)]TJ/F84 9.9626 Tf 0.98 0 0 1 453.142 671.127 Tm [(.)]TJ +/F75 14.3462 Tf 99.895 705.784 Td [(11)-1000(Iterative)-250(Methods)]TJ/F84 9.9626 Tf 1.006 0 0 1 99.895 683.082 Tm [(In)-249(this)-250(chapter)-249(we)-250(pr)18(ovide)-249(r)18(outines)-250(for)-249(pr)18(econditioners)-250(and)-249(iterative)-249(methods.)]TJ 0.98 0 0 1 99.587 671.127 Tm [(The)-194(interfaces)-194(for)-194(it)1(erative)-194(methods)-194(ar)18(e)-194(available)-194(in)-193(the)-194(module)]TJ/F147 9.9626 Tf 1 0 0 1 369.457 671.127 Tm [(psb_linsolve_mod)]TJ/F84 9.9626 Tf 0.98 0 0 1 453.142 671.127 Tm [(.)]TJ 0 g 0 G 1 0 0 1 264.279 90.438 Tm [(163)]TJ 0 g 0 G @@ -28776,7 +28786,7 @@ ET endstream endobj -2078 0 obj +2079 0 obj << /Length 8466 >> @@ -28795,36 +28805,36 @@ BT 0 g 0 G /F75 9.9626 Tf -14.944 -18.774 Td [(1)]TJ 0 g 0 G -/F84 9.9626 Tf 0.99 0 0 1 160.667 644.481 Tm [(normwise)-253(backwar)19(d)-253(err)18(or)-252(in)-253(the)-252(in\002nity)-253(norm;)-252(the)-253(iteration)-252(is)-253(stopped)-252(when)]TJ/F78 9.9626 Tf 1 0 0 1 269.703 617.617 Tm [(e)-15(r)-25(r)]TJ/F192 10.3811 Tf 15.141 0 Td [(=)]TJ/F190 10.3811 Tf 40.619 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.042 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(k)]TJ +/F84 9.9626 Tf 0.99 0 0 1 160.667 644.481 Tm [(normwise)-253(backwar)19(d)-253(err)18(or)-252(in)-253(the)-252(in\002nity)-253(norm;)-252(the)-253(iteration)-252(is)-253(stopped)-252(when)]TJ/F78 9.9626 Tf 1 0 0 1 269.703 617.617 Tm [(e)-15(r)-25(r)]TJ/F197 10.3811 Tf 15.141 0 Td [(=)]TJ/F195 10.3811 Tf 40.619 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.042 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(k)]TJ ET q 1 0 0 1 297.001 620.108 cm []0 d 0 J 0.398 w 0 0 m 74.372 0 l S Q BT -/F192 10.3811 Tf 297.125 610.783 Td [(\050)]TJ/F190 10.3811 Tf 4.274 0 Td [(k)]TJ/F78 9.9626 Tf 5.938 0 Td [(A)]TJ/F190 10.3811 Tf 7.442 0 Td [(k)-24(k)]TJ/F78 9.9626 Tf 11.048 0 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(k)]TJ/F192 10.3811 Tf 7.377 0 Td [(+)]TJ/F190 10.3811 Tf 10.255 0 Td [(k)]TJ/F78 9.9626 Tf 5.44 0 Td [(b)]TJ/F190 10.3811 Tf 4.862 0 Td [(k)]TJ/F192 10.3811 Tf 5.439 0 Td [(\051)]TJ/F148 10.3811 Tf 8.237 6.834 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ +/F197 10.3811 Tf 297.125 610.783 Td [(\050)]TJ/F195 10.3811 Tf 4.274 0 Td [(k)]TJ/F78 9.9626 Tf 5.938 0 Td [(A)]TJ/F195 10.3811 Tf 7.442 0 Td [(k)-24(k)]TJ/F78 9.9626 Tf 11.048 0 Td [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(k)]TJ/F197 10.3811 Tf 7.377 0 Td [(+)]TJ/F195 10.3811 Tf 10.255 0 Td [(k)]TJ/F78 9.9626 Tf 5.44 0 Td [(b)]TJ/F195 10.3811 Tf 4.862 0 Td [(k)]TJ/F197 10.3811 Tf 5.439 0 Td [(\051)]TJ/F152 10.3811 Tf 8.237 6.834 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ 0 g 0 G /F75 9.9626 Tf -235.841 -29.908 Td [(2)]TJ 0 g 0 G -/F84 9.9626 Tf 9.963 0 Td [(Relative)-250(r)18(esidual)-250(in)-250(the)-250(2-norm;)-250(the)-250(iteration)-250(is)-250(stopped)-250(when)]TJ/F78 9.9626 Tf 136.209 -26.865 Td [(e)-15(r)-25(r)]TJ/F192 10.3811 Tf 15.14 0 Td [(=)]TJ/F190 10.3811 Tf 13.446 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.042 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(k)]TJ +/F84 9.9626 Tf 9.963 0 Td [(Relative)-250(r)18(esidual)-250(in)-250(the)-250(2-norm;)-250(the)-250(iteration)-250(is)-250(stopped)-250(when)]TJ/F78 9.9626 Tf 136.209 -26.865 Td [(e)-15(r)-25(r)]TJ/F197 10.3811 Tf 15.14 0 Td [(=)]TJ/F195 10.3811 Tf 13.446 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.042 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(k)]TJ ET q 1 0 0 1 324.174 563.335 cm []0 d 0 J 0.398 w 0 0 m 20.025 0 l S Q BT -/F190 10.3811 Tf 324.299 554.01 Td [(k)]TJ/F78 9.9626 Tf 5.439 0 Td [(b)]TJ/F190 10.3811 Tf 4.862 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ/F148 10.3811 Tf 8.371 8.578 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ +/F195 10.3811 Tf 324.299 554.01 Td [(k)]TJ/F78 9.9626 Tf 5.439 0 Td [(b)]TJ/F195 10.3811 Tf 4.862 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ/F152 10.3811 Tf 8.371 8.578 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ 0 g 0 G /F75 9.9626 Tf -208.667 -29.848 Td [(3)]TJ 0 g 0 G -/F84 9.9626 Tf 9.962 0 Td [(Relative)-250(r)18(esidual)-250(r)18(eduction)-250(in)-250(the)-250(2-norm;)-250(the)-250(iteration)-250(is)-250(stopped)-250(when)]TJ/F78 9.9626 Tf 134.486 -26.865 Td [(e)-15(r)-25(r)]TJ/F192 10.3811 Tf 15.141 0 Td [(=)]TJ/F190 10.3811 Tf 15.169 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.042 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(k)]TJ +/F84 9.9626 Tf 9.962 0 Td [(Relative)-250(r)18(esidual)-250(r)18(eduction)-250(in)-250(the)-250(2-norm;)-250(the)-250(iteration)-250(is)-250(stopped)-250(when)]TJ/F78 9.9626 Tf 134.486 -26.865 Td [(e)-15(r)-25(r)]TJ/F197 10.3811 Tf 15.141 0 Td [(=)]TJ/F195 10.3811 Tf 15.169 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.042 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(k)]TJ ET q 1 0 0 1 322.451 506.622 cm []0 d 0 J 0.398 w 0 0 m 23.472 0 l S Q BT -/F190 10.3811 Tf 322.575 497.297 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F84 7.5716 Tf 4 -1.744 Td [(0)]TJ/F190 10.3811 Tf 4.409 1.744 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ/F148 10.3811 Tf 8.371 8.578 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ/F84 9.9626 Tf 1.02 0 0 1 150.396 474.283 Tm [(The)-333(behaviour)-333(is)-333(contr)18(olled)-333(by)-333(the)-333(istop)-333(ar)18(gument)-333(\050see)-333(later\051.)-567(In)-333(the)-333(above)]TJ 0.98 0 0 1 150.705 462.327 Tm [(formulae,)]TJ/F78 9.9626 Tf 1 0 0 1 194.836 462.327 Tm [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 204.675 462.327 Tm [(is)-199(the)-199(tentative)-198(solution)-199(and)]TJ/F78 9.9626 Tf 1 0 0 1 324.514 462.327 Tm [(r)]TJ/F78 7.5716 Tf 4.042 -1.96 Td [(i)]TJ/F192 10.3811 Tf 5.642 1.96 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(b)]TJ/F190 10.3811 Tf 6.29 0 Td [(\000)]TJ/F78 9.9626 Tf 10.245 0 Td [(A)-42(x)]TJ/F78 7.5716 Tf 12.759 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 379.269 462.327 Tm [(the)-199(corr)19(esponding)-199(r)18(esidual)]TJ 1 0 0 1 150.705 450.372 Tm [(at)-250(the)]TJ/F78 9.9626 Tf 27.083 0 Td [(i)]TJ/F84 9.9626 Tf 2.964 0 Td [(-th)-250(iteration.)]TJ -28.306 -17.357 Td [(c)-175(a)-175(l)-174(l)-880(p)-105(s)-105(b)]TJ +/F195 10.3811 Tf 322.575 497.297 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F84 7.5716 Tf 4 -1.744 Td [(0)]TJ/F195 10.3811 Tf 4.409 1.744 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ/F152 10.3811 Tf 8.371 8.578 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ/F84 9.9626 Tf 1.02 0 0 1 150.396 474.283 Tm [(The)-333(behaviour)-333(is)-333(contr)18(olled)-333(by)-333(the)-333(istop)-333(ar)18(gument)-333(\050see)-333(later\051.)-567(In)-333(the)-333(above)]TJ 0.98 0 0 1 150.705 462.327 Tm [(formulae,)]TJ/F78 9.9626 Tf 1 0 0 1 194.836 462.327 Tm [(x)]TJ/F78 7.5716 Tf 5.148 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 204.675 462.327 Tm [(is)-199(the)-199(tentative)-198(solution)-199(and)]TJ/F78 9.9626 Tf 1 0 0 1 324.514 462.327 Tm [(r)]TJ/F78 7.5716 Tf 4.042 -1.96 Td [(i)]TJ/F197 10.3811 Tf 5.642 1.96 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(b)]TJ/F195 10.3811 Tf 6.29 0 Td [(\000)]TJ/F78 9.9626 Tf 10.245 0 Td [(A)-42(x)]TJ/F78 7.5716 Tf 12.759 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 379.269 462.327 Tm [(the)-199(corr)19(esponding)-199(r)18(esidual)]TJ 1 0 0 1 150.705 450.372 Tm [(at)-250(the)]TJ/F78 9.9626 Tf 27.083 0 Td [(i)]TJ/F84 9.9626 Tf 2.964 0 Td [(-th)-250(iteration.)]TJ -28.306 -17.357 Td [(c)-175(a)-175(l)-174(l)-880(p)-105(s)-105(b)]TJ ET q 1 0 0 1 201.089 433.215 cm @@ -28893,21 +28903,21 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(sparse)-250(matrix)]TJ/F78 9.9626 Tf 178.414 0 Td [(A)]TJ/F84 9.9626 Tf 7.318 0 Td [(.)]TJ -170.788 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 138.701 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 138.501 Td [(Tspmat)]TJ +/F147 9.9626 Tf 363.206 138.501 Td [(Tspmat)]TJ ET q 1 0 0 1 395.216 138.701 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 398.354 138.501 Td [(type)]TJ +/F147 9.9626 Tf 398.354 138.501 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -28917,7 +28927,7 @@ q []0 d 0 J 0.398 w 0 0 m 137.482 0 l S Q BT -/F84 5.9776 Tf 161.564 123.219 Td [(5)]TJ/F84 7.9701 Tf 3.487 -2.893 Td [(Note:)-310(the)-250(implementation)-250(is)-250(for)]TJ/F78 7.9701 Tf 113.298 0 Td [(F)-31(C)-45(G)]TJ/F192 8.3049 Tf 16.386 0 Td [(\050)]TJ/F84 7.9701 Tf 3.32 0 Td [(1)]TJ/F192 8.3049 Tf 4.085 0 Td [(\051)]TJ/F84 7.9701 Tf 3.319 0 Td [(.)]TJ +/F84 5.9776 Tf 161.564 123.219 Td [(5)]TJ/F84 7.9701 Tf 3.487 -2.893 Td [(Note:)-310(the)-250(implementation)-250(is)-250(for)]TJ/F78 7.9701 Tf 113.298 0 Td [(F)-31(C)-45(G)]TJ/F197 8.3049 Tf 16.386 0 Td [(\050)]TJ/F84 7.9701 Tf 3.32 0 Td [(1)]TJ/F197 8.3049 Tf 4.085 0 Td [(\051)]TJ/F84 7.9701 Tf 3.319 0 Td [(.)]TJ 0 g 0 G 0 g 0 G /F84 9.9626 Tf 9.629 -29.888 Td [(164)]TJ @@ -28926,7 +28936,7 @@ ET endstream endobj -2089 0 obj +2090 0 obj << /Length 7173 >> @@ -28939,21 +28949,21 @@ BT 0 g 0 G /F84 9.9626 Tf 24.04 0 Td [(The)-250(data)-250(str)8(uctur)18(e)-250(containing)-250(the)-250(pr)18(econditioner)74(.)]TJ 0.867 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 658.308 Td [(Tprec)]TJ +/F147 9.9626 Tf 312.397 658.308 Td [(Tprec)]TJ ET q 1 0 0 1 339.176 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 342.314 658.308 Td [(type)]TJ +/F147 9.9626 Tf 342.314 658.308 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -28961,28 +28971,28 @@ BT 0 g 0 G /F84 9.9626 Tf 10.76 0 Td [(The)-250(RHS)-250(vector)74(.)]TJ 14.147 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(array)-250(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 218.688 0 Td [(psb)]TJ +/F147 9.9626 Tf 218.688 0 Td [(psb)]TJ ET q 1 0 0 1 359.808 588.484 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 362.947 588.285 Td [(T)]TJ +/F147 9.9626 Tf 362.947 588.285 Td [(T)]TJ ET q 1 0 0 1 368.804 588.484 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 371.943 588.285 Td [(vect)]TJ +/F147 9.9626 Tf 371.943 588.285 Td [(vect)]TJ ET q 1 0 0 1 393.492 588.484 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 396.63 588.285 Td [(type)]TJ +/F147 9.9626 Tf 396.63 588.285 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -28990,28 +29000,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(initial)-250(guess.)]TJ 15.253 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(inout)]TJ/F84 9.9626 Tf 24.349 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(array)-250(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 218.688 0 Td [(psb)]TJ +/F147 9.9626 Tf 218.688 0 Td [(psb)]TJ ET q 1 0 0 1 359.808 518.461 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 362.947 518.262 Td [(T)]TJ +/F147 9.9626 Tf 362.947 518.262 Td [(T)]TJ ET q 1 0 0 1 368.804 518.461 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 371.943 518.262 Td [(vect)]TJ +/F147 9.9626 Tf 371.943 518.262 Td [(vect)]TJ ET q 1 0 0 1 393.492 518.461 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 396.63 518.262 Td [(type)]TJ +/F147 9.9626 Tf 396.63 518.262 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -29030,35 +29040,35 @@ BT 0 g 0 G /F84 9.9626 Tf 9.963 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 309.258 378.415 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 378.216 Td [(desc)]TJ +/F147 9.9626 Tf 312.397 378.216 Td [(desc)]TJ ET q 1 0 0 1 333.945 378.415 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 337.084 378.216 Td [(type)]TJ +/F147 9.9626 Tf 337.084 378.216 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -22.203 Td [(itmax)]TJ 0 g 0 G -/F84 9.9626 Tf 30.127 0 Td [(The)-250(maximum)-250(number)-250(of)-250(iterations)-250(to)-250(perform.)]TJ -5.22 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.57 0 Td [(i)-32(t)-25(m)-40(a)-42(x)]TJ/F192 10.3811 Tf 27.743 0 Td [(=)]TJ/F84 9.9626 Tf 10.962 0 Td [(1000.)]TJ -77.275 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable)]TJ/F78 9.9626 Tf 142.349 0 Td [(i)-32(t)-25(m)-40(a)-42(x)]TJ/F190 10.3811 Tf 27.744 0 Td [(\025)]TJ/F84 9.9626 Tf 10.961 0 Td [(1.)]TJ +/F84 9.9626 Tf 30.127 0 Td [(The)-250(maximum)-250(number)-250(of)-250(iterations)-250(to)-250(perform.)]TJ -5.22 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.57 0 Td [(i)-32(t)-25(m)-40(a)-42(x)]TJ/F197 10.3811 Tf 27.743 0 Td [(=)]TJ/F84 9.9626 Tf 10.962 0 Td [(1000.)]TJ -77.275 -11.956 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable)]TJ/F78 9.9626 Tf 142.349 0 Td [(i)-32(t)-25(m)-40(a)-42(x)]TJ/F195 10.3811 Tf 27.744 0 Td [(\025)]TJ/F84 9.9626 Tf 10.961 0 Td [(1.)]TJ 0 g 0 G /F75 9.9626 Tf -205.961 -22.202 Td [(itrace)]TJ 0 g 0 G -/F84 9.9626 Tf 0.98 0 0 1 129.773 274.035 Tm [(If)]TJ/F148 10.3811 Tf 1 0 0 1 138.672 274.035 Tm [(>)]TJ/F84 9.9626 Tf 0.98 0 0 1 149.634 274.035 Tm [(0)-229(print)-228(out)-229(an)-229(informational)-228(message)-229(about)-229(conver)19(gence)-229(every)]TJ/F78 9.9626 Tf 1 0 0 1 419.702 274.035 Tm [(i)-32(t)-15(r)-50(a)-25(c)-25(e)]TJ/F84 9.9626 Tf -294.9 -11.955 Td [(iterations.)-310(If)]TJ/F192 10.3811 Tf 56.313 0 Td [(=)]TJ/F84 9.9626 Tf 10.962 0 Td [(0)-250(print)-250(a)-250(message)-250(in)-250(case)-250(of)-250(conver)18(gence)-250(failur)18(e.)]TJ -67.275 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.57 0 Td [(i)-32(t)-15(r)-50(a)-25(c)-25(e)]TJ/F192 10.3811 Tf 26.797 0 Td [(=)]TJ/F190 10.3811 Tf 11.086 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1.)]TJ +/F84 9.9626 Tf 0.98 0 0 1 129.773 274.035 Tm [(If)]TJ/F152 10.3811 Tf 1 0 0 1 138.672 274.035 Tm [(>)]TJ/F84 9.9626 Tf 0.98 0 0 1 149.634 274.035 Tm [(0)-229(print)-228(out)-229(an)-229(informational)-228(message)-229(about)-229(conver)19(gence)-229(every)]TJ/F78 9.9626 Tf 1 0 0 1 419.702 274.035 Tm [(i)-32(t)-15(r)-50(a)-25(c)-25(e)]TJ/F84 9.9626 Tf -294.9 -11.955 Td [(iterations.)-310(If)]TJ/F197 10.3811 Tf 56.313 0 Td [(=)]TJ/F84 9.9626 Tf 10.962 0 Td [(0)-250(print)-250(a)-250(message)-250(in)-250(case)-250(of)-250(conver)18(gence)-250(failur)18(e.)]TJ -67.275 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.57 0 Td [(i)-32(t)-15(r)-50(a)-25(c)-25(e)]TJ/F197 10.3811 Tf 26.797 0 Td [(=)]TJ/F195 10.3811 Tf 11.086 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1.)]TJ 0 g 0 G /F75 9.9626 Tf -109.554 -34.158 Td [(irst)]TJ 0 g 0 G -/F84 9.9626 Tf 19.527 0 Td [(An)-250(integer)-250(specifying)-250(the)-250(r)18(estart)-250(parameter)74(.)]TJ 5.38 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.443 132.281 Tm [(V)90(alues:)]TJ/F78 9.9626 Tf 1 0 0 1 162.528 132.281 Tm [(i)-22(r)-35(s)-25(t)]TJ/F148 10.3811 Tf 20.115 0 Td [(>)]TJ/F84 9.9626 Tf 1.02 0 0 1 196.049 132.281 Tm [(0.)-694(Th)1(is)-375(is)-375(employed)-375(for)-375(the)-375(BiCGST)72(ABL)-375(or)-374(RGMRES)]TJ 1 0 0 1 124.802 120.326 Tm [(methods,)-250(otherwise)-250(it)-250(is)-250(ignor)18(ed.)]TJ +/F84 9.9626 Tf 19.527 0 Td [(An)-250(integer)-250(specifying)-250(the)-250(r)18(estart)-250(parameter)74(.)]TJ 5.38 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.02 0 0 1 124.443 132.281 Tm [(V)90(alues:)]TJ/F78 9.9626 Tf 1 0 0 1 162.528 132.281 Tm [(i)-22(r)-35(s)-25(t)]TJ/F152 10.3811 Tf 20.115 0 Td [(>)]TJ/F84 9.9626 Tf 1.02 0 0 1 196.049 132.281 Tm [(0.)-694(Th)1(is)-375(is)-375(employed)-375(for)-375(the)-375(BiCGST)72(ABL)-375(or)-374(RGMRES)]TJ 1 0 0 1 124.802 120.326 Tm [(methods,)-250(otherwise)-250(it)-250(is)-250(ignor)18(ed.)]TJ 0 g 0 G 139.477 -29.888 Td [(165)]TJ 0 g 0 G @@ -29066,7 +29076,7 @@ ET endstream endobj -2094 0 obj +2095 0 obj << /Length 4580 >> @@ -29086,28 +29096,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(computed)-250(solution.)]TJ 15.252 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(array)-250(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 218.688 0 Td [(psb)]TJ +/F147 9.9626 Tf 218.688 0 Td [(psb)]TJ ET q 1 0 0 1 410.618 558.881 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 413.756 558.682 Td [(T)]TJ +/F147 9.9626 Tf 413.756 558.682 Td [(T)]TJ ET q 1 0 0 1 419.614 558.881 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.752 558.682 Td [(vect)]TJ +/F147 9.9626 Tf 422.752 558.682 Td [(vect)]TJ ET q 1 0 0 1 444.301 558.881 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 447.439 558.682 Td [(type)]TJ +/F147 9.9626 Tf 447.439 558.682 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -29133,9 +29143,9 @@ ET endstream endobj -2102 0 obj +2104 0 obj << -/Length 8759 +/Length 8778 >> stream 0 g 0 G @@ -29148,134 +29158,138 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 156.993 706.129 Td [(richardson)-250(\227)-250(Richardson)-250(Iteration)-250(Driver)-250(Routine)]TJ/F84 9.9626 Tf -57.406 -19.209 Td [(This)-250(subr)18(outine)-250(is)-250(a)-250(driver)-250(implementig)-250(a)-250(Richar)18(dson)-250(iteration)]TJ/F78 9.9626 Tf 111.157 -22.171 Td [(x)]TJ/F78 7.5716 Tf 5.2 -2.085 Td [(k)]TJ/F192 7.8896 Tf 3.589 0 Td [(+)]TJ/F84 7.5716 Tf 6.228 0 Td [(1)]TJ/F192 10.3811 Tf 7.176 2.085 Td [(=)]TJ/F78 9.9626 Tf 11.534 0 Td [(M)]TJ/F190 7.8896 Tf 9.674 4.115 Td [(\000)]TJ/F84 9.9626 Tf 6.726 -4.115 Td [(1)]TJ/F192 10.3811 Tf 5.105 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(b)]TJ/F190 10.3811 Tf 6.799 0 Td [(\000)]TJ/F78 9.9626 Tf 10.754 0 Td [(A)-42(x)]TJ/F78 7.5716 Tf 12.812 -2.085 Td [(k)]TJ/F192 10.3811 Tf 4.117 2.085 Td [(\051)-209(+)]TJ/F78 9.9626 Tf 16.636 0 Td [(x)]TJ/F78 7.5716 Tf 5.201 -2.085 Td [(k)]TJ/F84 9.9626 Tf 3.992 2.085 Td [(,)]TJ -231.084 -22.17 Td [(with)-250(the)-250(pr)18(econditioner)-250(operator)]TJ/F78 9.9626 Tf 147.599 0 Td [(M)]TJ/F84 9.9626 Tf 12.07 0 Td [(de\002ned)-250(in)-250(the)-250(pr)18(evious)-250(section.)]TJ -144.307 -12.082 Td [(The)-250(stopping)-250(criterion)-250(can)-250(take)-250(the)-250(following)-250(values:)]TJ +/F75 11.9552 Tf 156.993 706.129 Td [(richardson)-250(\227)-250(Richardson)-250(Iteration)-250(Driver)-250(Routine)]TJ/F84 9.9626 Tf -57.406 -19.162 Td [(This)-250(subr)18(outine)-250(is)-250(a)-250(driver)-250(implementig)-250(a)-250(Richar)18(dson)-250(iteration)]TJ/F78 9.9626 Tf 111.755 -23.373 Td [(x)]TJ/F78 7.5716 Tf 5.2 -2.085 Td [(k)]TJ/F197 7.8896 Tf 3.589 0 Td [(+)]TJ/F84 7.5716 Tf 6.228 0 Td [(1)]TJ/F197 10.3811 Tf 7.176 2.085 Td [(=)]TJ/F78 9.9626 Tf 11.534 0 Td [(M)]TJ/F195 7.8896 Tf 9.674 4.115 Td [(\000)]TJ/F84 7.5716 Tf 6.227 0 Td [(1)]TJ/F197 10.3811 Tf 4.409 -4.115 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(b)]TJ/F195 10.3811 Tf 6.798 0 Td [(\000)]TJ/F78 9.9626 Tf 10.754 0 Td [(A)-42(x)]TJ/F78 7.5716 Tf 12.812 -2.085 Td [(k)]TJ/F197 10.3811 Tf 4.117 2.085 Td [(\051)-209(+)]TJ/F78 9.9626 Tf 16.636 0 Td [(x)]TJ/F78 7.5716 Tf 5.201 -2.085 Td [(k)]TJ/F84 9.9626 Tf 3.992 2.085 Td [(,)]TJ -230.486 -22.122 Td [(with)-250(the)-250(pr)18(econditioner)-250(operator)]TJ/F78 9.9626 Tf 147.599 0 Td [(M)]TJ/F84 9.9626 Tf 12.07 0 Td [(de\002ned)-250(in)-250(section)]TJ +0 0 1 rg 0 0 1 RG + [-250(10)]TJ +0 g 0 G + [(.)]TJ -144.307 -12.058 Td [(The)-250(stopping)-250(criterion)-250(can)-250(take)-250(the)-250(following)-250(values:)]TJ 0 g 0 G -/F75 9.9626 Tf -14.944 -20.304 Td [(1)]TJ +/F75 9.9626 Tf -14.944 -20.232 Td [(1)]TJ 0 g 0 G -/F84 9.9626 Tf 0.99 0 0 1 109.858 610.193 Tm [(normwise)-252(backwar)18(d)-253(err)18(or)-252(in)-253(the)-252(in\002nity)-253(norm;)-252(the)-253(iteration)-252(is)-253(stopped)-252(when)]TJ/F78 9.9626 Tf 1 0 0 1 218.894 581.636 Tm [(e)-15(r)-25(r)]TJ/F192 10.3811 Tf 15.14 0 Td [(=)]TJ/F190 10.3811 Tf 40.62 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.041 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(k)]TJ +/F84 9.9626 Tf 0.99 0 0 1 109.858 609.182 Tm [(normwise)-252(backwar)18(d)-253(err)18(or)-252(in)-253(the)-252(in\002nity)-253(norm;)-252(the)-253(iteration)-252(is)-253(stopped)-252(when)]TJ/F78 9.9626 Tf 1 0 0 1 218.894 580.673 Tm [(e)-15(r)-25(r)]TJ/F197 10.3811 Tf 15.14 0 Td [(=)]TJ/F195 10.3811 Tf 40.62 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.041 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(k)]TJ ET q -1 0 0 1 246.191 584.127 cm +1 0 0 1 246.191 583.164 cm []0 d 0 J 0.398 w 0 0 m 74.372 0 l S Q BT -/F192 10.3811 Tf 246.316 574.802 Td [(\050)]TJ/F190 10.3811 Tf 4.274 0 Td [(k)]TJ/F78 9.9626 Tf 5.938 0 Td [(A)]TJ/F190 10.3811 Tf 7.442 0 Td [(k)-24(k)]TJ/F78 9.9626 Tf 11.048 0 Td [(x)]TJ/F78 7.5716 Tf 5.147 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.876 1.96 Td [(k)]TJ/F192 10.3811 Tf 7.376 0 Td [(+)]TJ/F190 10.3811 Tf 10.256 0 Td [(k)]TJ/F78 9.9626 Tf 5.44 0 Td [(b)]TJ/F190 10.3811 Tf 4.861 0 Td [(k)]TJ/F192 10.3811 Tf 5.44 0 Td [(\051)]TJ/F148 10.3811 Tf 8.236 6.834 Td [(<)]TJ/F78 9.9626 Tf 11.087 0 Td [(e)-80(p)-25(s)]TJ +/F197 10.3811 Tf 246.316 573.839 Td [(\050)]TJ/F195 10.3811 Tf 4.274 0 Td [(k)]TJ/F78 9.9626 Tf 5.938 0 Td [(A)]TJ/F195 10.3811 Tf 7.442 0 Td [(k)-24(k)]TJ/F78 9.9626 Tf 11.048 0 Td [(x)]TJ/F78 7.5716 Tf 5.147 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.876 1.96 Td [(k)]TJ/F197 10.3811 Tf 7.376 0 Td [(+)]TJ/F195 10.3811 Tf 10.256 0 Td [(k)]TJ/F78 9.9626 Tf 5.44 0 Td [(b)]TJ/F195 10.3811 Tf 4.861 0 Td [(k)]TJ/F197 10.3811 Tf 5.44 0 Td [(\051)]TJ/F152 10.3811 Tf 8.236 6.834 Td [(<)]TJ/F78 9.9626 Tf 11.087 0 Td [(e)-80(p)-25(s)]TJ 0 g 0 G -/F75 9.9626 Tf -235.842 -32.142 Td [(2)]TJ +/F75 9.9626 Tf -235.842 -32.045 Td [(2)]TJ 0 g 0 G -/F84 9.9626 Tf 9.963 0 Td [(Relative)-250(r)18(esidual)-250(in)-250(the)-250(2-norm;)-250(the)-250(iteration)-250(is)-250(stopped)-250(when)]TJ/F78 9.9626 Tf 136.209 -28.557 Td [(e)-15(r)-25(r)]TJ/F192 10.3811 Tf 15.141 0 Td [(=)]TJ/F190 10.3811 Tf 13.446 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.041 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(k)]TJ +/F84 9.9626 Tf 9.963 0 Td [(Relative)-250(r)18(esidual)-250(in)-250(the)-250(2-norm;)-250(the)-250(iteration)-250(is)-250(stopped)-250(when)]TJ/F78 9.9626 Tf 136.209 -28.509 Td [(e)-15(r)-25(r)]TJ/F197 10.3811 Tf 15.141 0 Td [(=)]TJ/F195 10.3811 Tf 13.446 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.041 -1.96 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.96 Td [(k)]TJ ET q -1 0 0 1 273.365 523.428 cm +1 0 0 1 273.365 522.61 cm []0 d 0 J 0.398 w 0 0 m 20.025 0 l S Q BT -/F190 10.3811 Tf 273.49 514.103 Td [(k)]TJ/F78 9.9626 Tf 5.439 0 Td [(b)]TJ/F190 10.3811 Tf 4.862 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ/F148 10.3811 Tf 8.371 8.578 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ +/F195 10.3811 Tf 273.49 513.285 Td [(k)]TJ/F78 9.9626 Tf 5.439 0 Td [(b)]TJ/F195 10.3811 Tf 4.862 0 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ/F152 10.3811 Tf 8.371 8.578 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ 0 g 0 G -/F75 9.9626 Tf -208.668 -32.082 Td [(3)]TJ +/F75 9.9626 Tf -208.668 -31.986 Td [(3)]TJ 0 g 0 G -/F84 9.9626 Tf 9.963 0 Td [(Relative)-250(r)18(esidual)-250(r)18(eduction)-250(in)-250(the)-250(2-norm;)-250(the)-250(iteration)-250(is)-250(stopped)-250(when)]TJ/F78 9.9626 Tf 134.486 -28.556 Td [(e)-15(r)-25(r)]TJ/F192 10.3811 Tf 15.14 0 Td [(=)]TJ/F190 10.3811 Tf 15.17 6.744 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.041 -1.96 Td [(i)]TJ/F190 10.3811 Tf 2.875 1.96 Td [(k)]TJ +/F84 9.9626 Tf 9.963 0 Td [(Relative)-250(r)18(esidual)-250(r)18(eduction)-250(in)-250(the)-250(2-norm;)-250(the)-250(iteration)-250(is)-250(stopped)-250(when)]TJ/F78 9.9626 Tf 134.486 -28.508 Td [(e)-15(r)-25(r)]TJ/F197 10.3811 Tf 15.14 0 Td [(=)]TJ/F195 10.3811 Tf 15.17 6.745 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F78 7.5716 Tf 4.041 -1.961 Td [(i)]TJ/F195 10.3811 Tf 2.875 1.961 Td [(k)]TJ ET q -1 0 0 1 271.641 462.789 cm +1 0 0 1 271.641 462.115 cm []0 d 0 J 0.398 w 0 0 m 23.472 0 l S Q BT -/F190 10.3811 Tf 271.766 453.464 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F84 7.5716 Tf 4 -1.744 Td [(0)]TJ/F190 10.3811 Tf 4.408 1.744 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ/F148 10.3811 Tf 8.371 8.579 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 428.217 Tm [(The)-333(behaviour)-333(is)-333(contr)18(olled)-333(by)-333(the)-333(istop)-333(ar)18(gument)-333(\050see)-333(later\051.)-567(In)-333(the)-333(above)]TJ 0.98 0 0 1 99.895 416.261 Tm [(formulae,)]TJ/F78 9.9626 Tf 1 0 0 1 144.027 416.261 Tm [(x)]TJ/F78 7.5716 Tf 5.147 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 153.866 416.261 Tm [(is)-199(the)-199(tentat)1(ive)-199(solution)-199(and)]TJ/F78 9.9626 Tf 1 0 0 1 273.705 416.261 Tm [(r)]TJ/F78 7.5716 Tf 4.041 -1.96 Td [(i)]TJ/F192 10.3811 Tf 5.643 1.96 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(b)]TJ/F190 10.3811 Tf 6.29 0 Td [(\000)]TJ/F78 9.9626 Tf 10.245 0 Td [(A)-42(x)]TJ/F78 7.5716 Tf 12.758 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 328.46 416.261 Tm [(the)-199(corr)19(esponding)-199(r)18(esidual)]TJ 1 0 0 1 99.895 404.306 Tm [(at)-250(the)]TJ/F78 9.9626 Tf 27.083 0 Td [(i)]TJ/F84 9.9626 Tf 2.964 0 Td [(-th)-250(iteration.)]TJ -28.305 -18.185 Td [(c)-175(a)-175(l)-174(l)-888(p)-113(s)-113(b)]TJ +/F195 10.3811 Tf 271.766 452.79 Td [(k)]TJ/F78 9.9626 Tf 5.34 0 Td [(r)]TJ/F84 7.5716 Tf 4 -1.744 Td [(0)]TJ/F195 10.3811 Tf 4.408 1.744 Td [(k)]TJ/F84 7.5716 Tf 5.315 -1.744 Td [(2)]TJ/F152 10.3811 Tf 8.371 8.579 Td [(<)]TJ/F78 9.9626 Tf 11.086 0 Td [(e)-80(p)-25(s)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.587 427.639 Tm [(The)-333(behaviour)-333(is)-333(contr)18(olled)-333(by)-333(the)-333(istop)-333(ar)18(gument)-333(\050see)-333(later\051.)-567(In)-333(the)-333(above)]TJ 0.98 0 0 1 99.895 415.684 Tm [(formulae,)]TJ/F78 9.9626 Tf 1 0 0 1 144.027 415.684 Tm [(x)]TJ/F78 7.5716 Tf 5.147 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 153.866 415.684 Tm [(is)-199(the)-199(tentat)1(ive)-199(solution)-199(and)]TJ/F78 9.9626 Tf 1 0 0 1 273.705 415.684 Tm [(r)]TJ/F78 7.5716 Tf 4.041 -1.96 Td [(i)]TJ/F197 10.3811 Tf 5.643 1.96 Td [(=)]TJ/F78 9.9626 Tf 11.086 0 Td [(b)]TJ/F195 10.3811 Tf 6.29 0 Td [(\000)]TJ/F78 9.9626 Tf 10.245 0 Td [(A)-42(x)]TJ/F78 7.5716 Tf 12.758 -1.96 Td [(i)]TJ/F84 9.9626 Tf 0.98 0 0 1 328.46 415.684 Tm [(the)-199(corr)19(esponding)-199(r)18(esidual)]TJ 1 0 0 1 99.895 403.729 Tm [(at)-250(the)]TJ/F78 9.9626 Tf 27.083 0 Td [(i)]TJ/F84 9.9626 Tf 2.964 0 Td [(-th)-250(iteration.)]TJ -28.305 -18.138 Td [(c)-175(a)-175(l)-174(l)-888(p)-113(s)-113(b)]TJ ET q -1 0 0 1 150.598 386.32 cm +1 0 0 1 150.598 385.79 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F84 9.9626 Tf 154.71 386.121 Td [(r)-113(i)-113(c)-112(h)-113(a)-113(r)-113(d)-113(s)-113(o)-112(n)-247(\050)-166(a)-242(,)-255(p)-80(r)-81(e)-80(c)-335(,)-191(b)-206(,)-203(x)-231(,)-234(e)-60(p)-59(s)-293(,)-273(d)-98(e)-98(s)-97(c)]TJ +/F84 9.9626 Tf 154.71 385.591 Td [(r)-113(i)-113(c)-112(h)-113(a)-113(r)-113(d)-113(s)-113(o)-112(n)-247(\050)-166(a)-242(,)-255(p)-80(r)-81(e)-80(c)-335(,)-191(b)-206(,)-203(x)-231(,)-234(e)-60(p)-59(s)-293(,)-273(d)-98(e)-98(s)-97(c)]TJ ET q -1 0 0 1 334.087 386.32 cm +1 0 0 1 334.087 385.79 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F84 9.9626 Tf 338.05 386.121 Td [(a)-370(,)-283(i)-108(n)-109(f)-108(o)-273(,)-57(&)]TJ -209.153 -11.956 Td [(&)-580(i)-69(t)-69(m)-70(a)-69(x)-313(,)-327(i)-151(t)-152(e)-151(r)-478(,)-281(e)-107(r)-106(r)-387(,)-321(i)-145(t)-146(r)-146(a)-145(c)-146(e)-466(,)-311(i)-135(s)-135(t)-136(o)-135(p)-269(\051)]TJ +/F84 9.9626 Tf 338.05 385.591 Td [(a)-370(,)-283(i)-108(n)-109(f)-108(o)-273(,)-57(&)]TJ -209.153 -11.955 Td [(&)-580(i)-69(t)-69(m)-70(a)-69(x)-313(,)-327(i)-151(t)-152(e)-151(r)-478(,)-281(e)-107(r)-106(r)-387(,)-321(i)-145(t)-146(r)-146(a)-145(c)-146(e)-466(,)-311(i)-135(s)-135(t)-136(o)-135(p)-269(\051)]TJ 0 g 0 G 0 g 0 G 0 g 0 G -/F75 9.9626 Tf -29.002 -28.653 Td [(T)90(ype:)]TJ +/F75 9.9626 Tf -29.002 -28.51 Td [(T)90(ype:)]TJ 0 g 0 G /F84 9.9626 Tf 29.828 0 Td [(Synchr)18(onous.)]TJ 0 g 0 G -/F75 9.9626 Tf -29.828 -20.431 Td [(On)-250(Entry)]TJ +/F75 9.9626 Tf -29.828 -20.334 Td [(On)-250(Entry)]TJ 0 g 0 G 0 g 0 G - 0 -20.431 Td [(a)]TJ + 0 -20.335 Td [(a)]TJ 0 g 0 G -/F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(sparse)-250(matrix)]TJ/F78 9.9626 Tf 178.414 0 Td [(A)]TJ/F84 9.9626 Tf 7.317 0 Td [(.)]TJ -170.787 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ +/F84 9.9626 Tf 9.963 0 Td [(the)-250(local)-250(portion)-250(of)-250(global)-250(sparse)-250(matrix)]TJ/F78 9.9626 Tf 178.414 0 Td [(A)]TJ/F84 9.9626 Tf 7.317 0 Td [(.)]TJ -170.787 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q -1 0 0 1 309.258 257.028 cm +1 0 0 1 309.258 256.836 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 256.829 Td [(Tspmat)]TJ +/F147 9.9626 Tf 312.397 256.636 Td [(Tspmat)]TJ ET q -1 0 0 1 344.406 257.028 cm +1 0 0 1 344.406 256.836 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 347.544 256.829 Td [(type)]TJ +/F147 9.9626 Tf 347.544 256.636 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -268.571 -20.431 Td [(prec)]TJ +/F75 9.9626 Tf -268.571 -20.334 Td [(prec)]TJ 0 g 0 G -/F84 9.9626 Tf 24.04 0 Td [(The)-250(data)-250(str)8(uctur)18(e)-250(containing)-250(the)-250(pr)18(econditioner)74(.)]TJ 0.867 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ +/F84 9.9626 Tf 24.04 0 Td [(The)-250(data)-250(str)8(uctur)18(e)-250(containing)-250(the)-250(pr)18(econditioner)74(.)]TJ 0.867 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.956 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q -1 0 0 1 309.258 188.777 cm +1 0 0 1 309.258 188.68 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 312.397 188.577 Td [(Tprec)]TJ +/F147 9.9626 Tf 312.397 188.481 Td [(Tprec)]TJ ET q -1 0 0 1 339.176 188.777 cm +1 0 0 1 339.176 188.68 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 342.314 188.577 Td [(type)]TJ +/F147 9.9626 Tf 342.314 188.481 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G -/F75 9.9626 Tf -263.34 -20.431 Td [(b)]TJ +/F75 9.9626 Tf -263.34 -20.335 Td [(b)]TJ 0 g 0 G /F84 9.9626 Tf 10.76 0 Td [(The)-250(RHS)-250(vector)74(.)]TJ 14.147 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.741 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.779 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(array)-250(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 218.688 0 Td [(psb)]TJ +/F147 9.9626 Tf 218.688 0 Td [(psb)]TJ ET q 1 0 0 1 359.808 120.525 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 362.947 120.326 Td [(T)]TJ +/F147 9.9626 Tf 362.947 120.326 Td [(T)]TJ ET q 1 0 0 1 368.804 120.525 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 371.943 120.326 Td [(vect)]TJ +/F147 9.9626 Tf 371.943 120.326 Td [(vect)]TJ ET q 1 0 0 1 393.492 120.525 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 396.63 120.326 Td [(type)]TJ +/F147 9.9626 Tf 396.63 120.326 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G @@ -29285,7 +29299,7 @@ ET endstream endobj -2111 0 obj +2113 0 obj << /Length 6806 >> @@ -29298,28 +29312,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(initial)-250(guess.)]TJ 15.252 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.956 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(array)-250(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 218.688 0 Td [(psb)]TJ +/F147 9.9626 Tf 218.688 0 Td [(psb)]TJ ET q 1 0 0 1 410.618 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 413.756 658.308 Td [(T)]TJ +/F147 9.9626 Tf 413.756 658.308 Td [(T)]TJ ET q 1 0 0 1 419.614 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.752 658.308 Td [(vect)]TJ +/F147 9.9626 Tf 422.752 658.308 Td [(vect)]TJ ET q 1 0 0 1 444.301 658.507 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 447.439 658.308 Td [(type)]TJ +/F147 9.9626 Tf 447.439 658.308 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -29338,31 +29352,31 @@ BT 0 g 0 G /F84 9.9626 Tf 9.962 0 Td [(contains)-250(data)-250(str)8(uctur)18(es)-250(for)-250(communications.)]TJ -8.558 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Speci\002ed)-250(as:)-310(a)-250(str)8(uctur)18(ed)-250(data)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 168.138 0 Td [(psb)]TJ +/F147 9.9626 Tf 168.138 0 Td [(psb)]TJ ET q 1 0 0 1 360.068 524.012 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 363.206 523.813 Td [(desc)]TJ +/F147 9.9626 Tf 363.206 523.813 Td [(desc)]TJ ET q 1 0 0 1 384.755 524.012 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 387.893 523.813 Td [(type)]TJ +/F147 9.9626 Tf 387.893 523.813 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -258.11 -19.428 Td [(itmax)]TJ 0 g 0 G -/F84 9.9626 Tf 30.127 0 Td [(The)-250(maximum)-250(number)-250(of)-250(iterations)-250(to)-250(perform.)]TJ -5.221 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.57 0 Td [(i)-32(t)-25(m)-40(a)-42(x)]TJ/F192 10.3811 Tf 27.744 0 Td [(=)]TJ/F84 9.9626 Tf 10.961 0 Td [(1000.)]TJ -77.275 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable)]TJ/F78 9.9626 Tf 142.35 0 Td [(i)-32(t)-25(m)-40(a)-42(x)]TJ/F190 10.3811 Tf 27.743 0 Td [(\025)]TJ/F84 9.9626 Tf 10.962 0 Td [(1.)]TJ +/F84 9.9626 Tf 30.127 0 Td [(The)-250(maximum)-250(number)-250(of)-250(iterations)-250(to)-250(perform.)]TJ -5.221 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.57 0 Td [(i)-32(t)-25(m)-40(a)-42(x)]TJ/F197 10.3811 Tf 27.744 0 Td [(=)]TJ/F84 9.9626 Tf 10.961 0 Td [(1000.)]TJ -77.275 -11.955 Td [(Speci\002ed)-250(as:)-310(an)-250(integer)-250(variable)]TJ/F78 9.9626 Tf 142.35 0 Td [(i)-32(t)-25(m)-40(a)-42(x)]TJ/F195 10.3811 Tf 27.743 0 Td [(\025)]TJ/F84 9.9626 Tf 10.962 0 Td [(1.)]TJ 0 g 0 G /F75 9.9626 Tf -205.961 -19.428 Td [(itrace)]TJ 0 g 0 G -/F84 9.9626 Tf 0.98 0 0 1 180.583 425.182 Tm [(If)]TJ/F148 10.3811 Tf 1 0 0 1 189.481 425.182 Tm [(>)]TJ/F84 9.9626 Tf 0.98 0 0 1 200.443 425.182 Tm [(0)-229(print)-228(out)-229(an)-229(informational)-228(message)-229(about)-229(conver)19(gence)-229(every)]TJ/F78 9.9626 Tf 1 0 0 1 470.511 425.182 Tm [(i)-32(t)-15(r)-50(a)-25(c)-25(e)]TJ/F84 9.9626 Tf -294.9 -11.955 Td [(iterations.)-310(If)]TJ/F192 10.3811 Tf 56.313 0 Td [(=)]TJ/F84 9.9626 Tf 10.962 0 Td [(0)-250(print)-250(a)-250(message)-250(in)-250(case)-250(of)-250(conver)18(gence)-250(failur)18(e.)]TJ -67.275 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.57 0 Td [(i)-32(t)-15(r)-50(a)-25(c)-25(e)]TJ/F192 10.3811 Tf 26.797 0 Td [(=)]TJ/F190 10.3811 Tf 11.086 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1.)]TJ +/F84 9.9626 Tf 0.98 0 0 1 180.583 425.182 Tm [(If)]TJ/F152 10.3811 Tf 1 0 0 1 189.481 425.182 Tm [(>)]TJ/F84 9.9626 Tf 0.98 0 0 1 200.443 425.182 Tm [(0)-229(print)-228(out)-229(an)-229(informational)-228(message)-229(about)-229(conver)19(gence)-229(every)]TJ/F78 9.9626 Tf 1 0 0 1 470.511 425.182 Tm [(i)-32(t)-15(r)-50(a)-25(c)-25(e)]TJ/F84 9.9626 Tf -294.9 -11.955 Td [(iterations.)-310(If)]TJ/F197 10.3811 Tf 56.313 0 Td [(=)]TJ/F84 9.9626 Tf 10.962 0 Td [(0)-250(print)-250(a)-250(message)-250(in)-250(case)-250(of)-250(conver)18(gence)-250(failur)18(e.)]TJ -67.275 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(global)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(in)]TJ/F84 9.9626 Tf 9.404 0 Td [(.)]TJ -41.205 -11.955 Td [(Default:)]TJ/F78 9.9626 Tf 38.57 0 Td [(i)-32(t)-15(r)-50(a)-25(c)-25(e)]TJ/F197 10.3811 Tf 26.797 0 Td [(=)]TJ/F195 10.3811 Tf 11.086 0 Td [(\000)]TJ/F84 9.9626 Tf 8.194 0 Td [(1.)]TJ 0 g 0 G /F75 9.9626 Tf -109.553 -31.383 Td [(istop)]TJ 0 g 0 G @@ -29375,28 +29389,28 @@ BT 0 g 0 G /F84 9.9626 Tf 9.654 0 Td [(The)-250(computed)-250(solution.)]TJ 15.252 -11.955 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf -31.74 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(required)]TJ/F84 9.9626 Tf -26.78 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.801 0 Td [(inout)]TJ/F84 9.9626 Tf 24.348 0 Td [(.)]TJ -56.149 -11.956 Td [(Speci\002ed)-250(as:)-310(a)-250(rank)-250(one)-250(array)-250(or)-250(an)-250(object)-250(of)-250(type)]TJ 0 0 1 rg 0 0 1 RG -/F145 9.9626 Tf 218.688 0 Td [(psb)]TJ +/F147 9.9626 Tf 218.688 0 Td [(psb)]TJ ET q 1 0 0 1 410.618 187.773 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 413.756 187.573 Td [(T)]TJ +/F147 9.9626 Tf 413.756 187.573 Td [(T)]TJ ET q 1 0 0 1 419.614 187.773 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 422.752 187.573 Td [(vect)]TJ +/F147 9.9626 Tf 422.752 187.573 Td [(vect)]TJ ET q 1 0 0 1 444.301 187.773 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F145 9.9626 Tf 447.439 187.573 Td [(type)]TJ +/F147 9.9626 Tf 447.439 187.573 Td [(type)]TJ 0 g 0 G /F84 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G @@ -29410,7 +29424,7 @@ ET endstream endobj -2115 0 obj +2117 0 obj << /Length 1090 >> @@ -29433,7 +29447,7 @@ ET endstream endobj -2126 0 obj +2128 0 obj << /Length 8172 >> @@ -29447,14 +29461,14 @@ BT 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 189.997 640.328 Tm [(a)-255(CUDA)-255(library)-255(originally)-254(published)-255(as)]TJ 0 1 0 0 k 0 1 0 0 K -/F145 9.9626 Tf 1 0 0 1 369.934 640.328 Tm [(https://code.google.com/)]TJ -194.323 -11.955 Td [(p/spgpu/)]TJ +/F147 9.9626 Tf 1 0 0 1 369.934 640.328 Tm [(https://code.google.com/)]TJ -194.323 -11.955 Td [(p/spgpu/)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 221.323 628.373 Tm [(and)-381(now)-380(included)-381(in)-381(the)]TJ/F145 9.9626 Tf 1 0 0 1 340.526 628.373 Tm [(cuda)]TJ/F84 9.9626 Tf 1.02 0 0 1 365.316 628.373 Tm [(subdir)73(,)-415(for)-381(computations)-380(on)]TJ 1 0 0 1 175.611 616.418 Tm [(NVIDIA)-250(GPUs;)]TJ +/F84 9.9626 Tf 1.02 0 0 1 221.323 628.373 Tm [(and)-381(now)-380(included)-381(in)-381(the)]TJ/F147 9.9626 Tf 1 0 0 1 340.526 628.373 Tm [(cuda)]TJ/F84 9.9626 Tf 1.02 0 0 1 365.316 628.373 Tm [(subdir)73(,)-415(for)-381(computations)-380(on)]TJ 1 0 0 1 175.611 616.418 Tm [(NVIDIA)-250(GPUs;)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -19.514 Td [(LIBRSB)]TJ 0 g 0 G 0 1 0 0 k 0 1 0 0 K -/F145 9.9626 Tf 41.514 0 Td [(http://sourceforge.net/projects/librsb/)]TJ +/F147 9.9626 Tf 41.514 0 Td [(http://sourceforge.net/projects/librsb/)]TJ 0 g 0 G /F84 9.9626 Tf 1.02 0 0 1 396.202 596.904 Tm [(,)-324(for)-309(computations)-308(on)]TJ 1 0 0 1 175.611 584.949 Tm [(multicor)18(e)-250(parallel)-250(machines.)]TJ 1.02 0 0 1 150.396 565.847 Tm [(The)-350(infrastr)8(uctur)18(e)-350(laid)-350(out)-350(in)-349(the)-350(base)-350(library)-350(to)-350(allow)-349(for)-350(these)-350(extensions)]TJ 1.02 0 0 1 150.705 553.891 Tm [(is)-306(detailed)-306(in)-306(the)-306(r)18(efer)17(ences)-306([)]TJ 1 0 0 rg 1 0 0 RG @@ -29476,11 +29490,11 @@ BT 0 g 0 G 13.888 -19.102 Td [(\225)]TJ 0 g 0 G -/F145 9.9626 Tf 11.018 0 Td [(USE)]TJ/F84 9.9626 Tf 18.182 0 Td [(the)-250(appr)18(opriat)-250(modules)-250(\050)]TJ/F145 9.9626 Tf 110.036 0 Td [(psb_ext_mod)]TJ/F84 9.9626 Tf 57.534 0 Td [(,)]TJ/F145 9.9626 Tf 4.981 0 Td [(psb_cuda_mod)]TJ/F84 9.9626 Tf 62.764 0 Td [(\051;)]TJ +/F147 9.9626 Tf 11.018 0 Td [(USE)]TJ/F84 9.9626 Tf 18.182 0 Td [(the)-250(appr)18(opriat)-250(modules)-250(\050)]TJ/F147 9.9626 Tf 110.036 0 Td [(psb_ext_mod)]TJ/F84 9.9626 Tf 57.534 0 Td [(,)]TJ/F147 9.9626 Tf 4.981 0 Td [(psb_cuda_mod)]TJ/F84 9.9626 Tf 62.764 0 Td [(\051;)]TJ 0 g 0 G -264.515 -19.514 Td [(\225)]TJ 0 g 0 G - 0.98 0 0 1 175.611 443.461 Tm [(Declar)18(e)-214(a)]TJ/F78 9.9626 Tf 0.98 0 0 1 217.329 443.461 Tm [(mold)]TJ/F84 9.9626 Tf 0.98 0 0 1 238.952 443.461 Tm [(variable)-215(of)-214(the)-215(necessary)-214(type)-215(\050e.g.)]TJ/F145 9.9626 Tf 1 0 0 1 388.614 443.461 Tm [(psb_d_ell_sparse_mat)]TJ/F84 9.9626 Tf 0.98 0 0 1 493.22 443.461 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 175.611 431.506 Tm [(psb_d_hlg_sparse_mat)]TJ/F84 9.9626 Tf 104.607 0 Td [(,)]TJ/F145 9.9626 Tf 4.982 0 Td [(psb_d_vect_cuda)]TJ/F84 9.9626 Tf 78.455 0 Td [(\051;)]TJ + 0.98 0 0 1 175.611 443.461 Tm [(Declar)18(e)-214(a)]TJ/F78 9.9626 Tf 0.98 0 0 1 217.329 443.461 Tm [(mold)]TJ/F84 9.9626 Tf 0.98 0 0 1 238.952 443.461 Tm [(variable)-215(of)-214(the)-215(necessary)-214(type)-215(\050e.g.)]TJ/F147 9.9626 Tf 1 0 0 1 388.614 443.461 Tm [(psb_d_ell_sparse_mat)]TJ/F84 9.9626 Tf 0.98 0 0 1 493.22 443.461 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 175.611 431.506 Tm [(psb_d_hlg_sparse_mat)]TJ/F84 9.9626 Tf 104.607 0 Td [(,)]TJ/F147 9.9626 Tf 4.982 0 Td [(psb_d_vect_cuda)]TJ/F84 9.9626 Tf 78.455 0 Td [(\051;)]TJ 0 g 0 G -199.062 -19.513 Td [(\225)]TJ 0 g 0 G @@ -29496,7 +29510,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 153.694 334.821 Td [(program)]TJ +/F235 8.9664 Tf 153.694 334.821 Td [(program)]TJ 0 g 0 G [-525(my_cuda_test)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -29667,7 +29681,7 @@ ET endstream endobj -2140 0 obj +2142 0 obj << /Length 9201 >> @@ -29686,12 +29700,12 @@ Q 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG BT -/F279 8.9664 Tf 112.299 701.446 Td [(!)-525(My)-525(own)-525(home-grown)-525(matrix)-525(generator)]TJ +/F281 8.9664 Tf 112.299 701.446 Td [(!)-525(My)-525(own)-525(home-grown)-525(matrix)-525(generator)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf 0 -10.958 Td [(call)]TJ +/F235 8.9664 Tf 0 -10.958 Td [(call)]TJ 0 g 0 G [-525(gen_matrix\050ctxt,)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG @@ -29800,12 +29814,12 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 0 -21.918 Td [(!)-525(Do)-525(sparse)-525(MV)]TJ +/F281 8.9664 Tf 0 -21.918 Td [(!)-525(Do)-525(sparse)-525(MV)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf 0 -10.958 Td [(call)]TJ +/F235 8.9664 Tf 0 -10.958 Td [(call)]TJ 0 g 0 G [-525(psb_spmm\050done,agpu,xg,dzero,bg,desc_a,info\051)]TJ 0.25 0.63 0.44 rg 0.25 0.63 0.44 RG @@ -29904,7 +29918,7 @@ BT [-525(my_cuda_test)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 114.839 403.191 Tm [(A)-337(full)-338(example)-337(of)-337(this)-338(strategy)-337(can)-338(be)-337(seen)-337(in)-338(the)]TJ/F145 9.9626 Tf 1 0 0 1 344.519 403.191 Tm [(test/ext/kernel)]TJ/F84 9.9626 Tf 1.02 0 0 1 426.402 403.191 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 99.895 391.236 Tm [(test/cuda/kernel)]TJ/F84 9.9626 Tf 1.008 0 0 1 186.064 391.236 Tm [(subdir)18(ectories,)-248(wher)18(e)-247(we)-247(pr)18(ovide)-248(sample)-247(pr)18(ograms)-247(to)-248(test)]TJ 1.003 0 0 1 99.895 379.281 Tm [(the)-250(speed)-249(of)-250(the)-250(sparse)-249(matrix-vector)-250(pr)18(oduct)-249(with)-250(the)-250(various)-249(data)-250(str)8(uctur)18(es)]TJ 1 0 0 1 99.895 367.325 Tm [(included)-250(in)-250(the)-250(library)111(.)]TJ/F75 11.9552 Tf 0 -29.238 Td [(12.2)-1000(Extensions')-250(Data)-250(Structures)]TJ/F84 9.9626 Tf 0.995 0 0 1 99.507 319.088 Tm [(Access)-250(to)-250(the)-250(facilities)-250(pr)18(ovided)-250(by)-250(the)-250(EXT)-250(library)-251(is)-250(mainly)-250(achieved)-250(thr)18(ough)]TJ 1.02 0 0 1 99.895 307.133 Tm [(the)-335(data)-336(types)-335(that)-335(ar)18(e)-336(pr)18(ovided)-335(within.)-575(The)-335(data)-335(classes)-335(ar)17(e)-335(derived)-335(fr)17(om)]TJ 1.004 0 0 1 99.895 295.178 Tm [(the)-250(base)-249(classes)-250(in)-249(PSBLAS,)-250(thr)18(ough)-249(the)-250(Fortran)-249(2003)-250(mechanism)-249(of)]TJ/F78 9.9626 Tf 1.004 0 0 1 400.534 295.178 Tm [(type)-250(exten-)]TJ 1 0 0 1 99.895 283.222 Tm [(sion)]TJ/F84 9.9626 Tf 19.098 0 Td [([)]TJ +/F84 9.9626 Tf 1.02 0 0 1 114.839 403.191 Tm [(A)-337(full)-338(example)-337(of)-337(this)-338(strategy)-337(can)-338(be)-337(seen)-337(in)-338(the)]TJ/F147 9.9626 Tf 1 0 0 1 344.519 403.191 Tm [(test/ext/kernel)]TJ/F84 9.9626 Tf 1.02 0 0 1 426.402 403.191 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 99.895 391.236 Tm [(test/cuda/kernel)]TJ/F84 9.9626 Tf 1.008 0 0 1 186.064 391.236 Tm [(subdir)18(ectories,)-248(wher)18(e)-247(we)-247(pr)18(ovide)-248(sample)-247(pr)18(ograms)-247(to)-248(test)]TJ 1.003 0 0 1 99.895 379.281 Tm [(the)-250(speed)-249(of)-250(the)-250(sparse)-249(matrix-vector)-250(pr)18(oduct)-249(with)-250(the)-250(various)-249(data)-250(str)8(uctur)18(es)]TJ 1 0 0 1 99.895 367.325 Tm [(included)-250(in)-250(the)-250(library)111(.)]TJ/F75 11.9552 Tf 0 -29.238 Td [(12.2)-1000(Extensions')-250(Data)-250(Structures)]TJ/F84 9.9626 Tf 0.995 0 0 1 99.507 319.088 Tm [(Access)-250(to)-250(the)-250(facilities)-250(pr)18(ovided)-250(by)-250(the)-250(EXT)-250(library)-251(is)-250(mainly)-250(achieved)-250(thr)18(ough)]TJ 1.02 0 0 1 99.895 307.133 Tm [(the)-335(data)-336(types)-335(that)-335(ar)18(e)-336(pr)18(ovided)-335(within.)-575(The)-335(data)-335(classes)-335(ar)17(e)-335(derived)-335(fr)17(om)]TJ 1.004 0 0 1 99.895 295.178 Tm [(the)-250(base)-249(classes)-250(in)-249(PSBLAS,)-250(thr)18(ough)-249(the)-250(Fortran)-249(2003)-250(mechanism)-249(of)]TJ/F78 9.9626 Tf 1.004 0 0 1 400.534 295.178 Tm [(type)-250(exten-)]TJ 1 0 0 1 99.895 283.222 Tm [(sion)]TJ/F84 9.9626 Tf 19.098 0 Td [([)]TJ 1 0 0 rg 1 0 0 RG [(18)]TJ 0 g 0 G @@ -29916,7 +29930,7 @@ BT 0 0 1 rg 0 0 1 RG [-194(6)]TJ 0 g 0 G - [(\051)-194(comprises)-194(two)-193(2-dimensional)]TJ 1.02 0 0 1 99.895 168.146 Tm [(arrays)]TJ/F145 9.9626 Tf 1 0 0 1 130.767 168.146 Tm [(AS)]TJ/F84 9.9626 Tf 1.02 0 0 1 143.951 168.146 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 163.879 168.146 Tm [(JA)]TJ/F84 9.9626 Tf 1.02 0 0 1 177.063 168.146 Tm [(with)]TJ/F145 9.9626 Tf 1 0 0 1 200.445 168.146 Tm [(M)]TJ/F84 9.9626 Tf 1.02 0 0 1 208.399 168.146 Tm [(r)18(ows)-268(and)]TJ/F145 9.9626 Tf 1 0 0 1 253.216 168.146 Tm [(MAXNZR)]TJ/F84 9.9626 Tf 1.02 0 0 1 287.322 168.146 Tm [(columns,)-274(wher)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 361.667 168.146 Tm [(MAXNZR)]TJ/F84 9.9626 Tf 1.02 0 0 1 395.772 168.146 Tm [(is)-268(the)-268(max-)]TJ 1.02 0 0 1 99.895 156.191 Tm [(imum)-289(number)-288(of)-289(nonzer)17(os)-288(in)-289(any)-289(r)18(ow)-289([)]TJ/F75 9.9626 Tf 1 0 0 1 279.688 156.191 Tm [(?)]TJ/F84 9.9626 Tf 1.02 0 0 1 284.111 156.191 Tm [(].)-435(Each)-289(r)18(ow)-289(of)-288(the)-289(arrays)]TJ/F145 9.9626 Tf 1 0 0 1 399.875 156.191 Tm [(AS)]TJ/F84 9.9626 Tf 1.02 0 0 1 413.269 156.191 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 433.407 156.191 Tm [(JA)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.895 144.236 Tm [(contains)-357(the)-358(coef)18(\002cients)-357(and)-357(column)-358(indices;)-413(r)17(ows)-357(shorter)-357(than)]TJ/F145 9.9626 Tf 1 0 0 1 394.811 144.236 Tm [(MAXNZR)]TJ/F84 9.9626 Tf 1.02 0 0 1 429.823 144.236 Tm [(ar)18(e)]TJ 0.98 0 0 1 99.596 132.281 Tm [(padded)-229(with)-229(zer)19(o)-229(coef)18(\002cients)-229(and)-229(appr)19(opriate)-229(column)-229(indices,)-234(e.g.)-307(the)-229(last)-229(valid)]TJ 1 0 0 1 99.895 120.326 Tm [(one)-250(found)-250(in)-250(the)-250(same)-250(r)18(ow)92(.)]TJ + [(\051)-194(comprises)-194(two)-193(2-dimensional)]TJ 1.02 0 0 1 99.895 168.146 Tm [(arrays)]TJ/F147 9.9626 Tf 1 0 0 1 130.767 168.146 Tm [(AS)]TJ/F84 9.9626 Tf 1.02 0 0 1 143.951 168.146 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 163.879 168.146 Tm [(JA)]TJ/F84 9.9626 Tf 1.02 0 0 1 177.063 168.146 Tm [(with)]TJ/F147 9.9626 Tf 1 0 0 1 200.445 168.146 Tm [(M)]TJ/F84 9.9626 Tf 1.02 0 0 1 208.399 168.146 Tm [(r)18(ows)-268(and)]TJ/F147 9.9626 Tf 1 0 0 1 253.216 168.146 Tm [(MAXNZR)]TJ/F84 9.9626 Tf 1.02 0 0 1 287.322 168.146 Tm [(columns,)-274(wher)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 361.667 168.146 Tm [(MAXNZR)]TJ/F84 9.9626 Tf 1.02 0 0 1 395.772 168.146 Tm [(is)-268(the)-268(max-)]TJ 1.02 0 0 1 99.895 156.191 Tm [(imum)-289(number)-288(of)-289(nonzer)17(os)-288(in)-289(any)-289(r)18(ow)-289([)]TJ/F75 9.9626 Tf 1 0 0 1 279.688 156.191 Tm [(?)]TJ/F84 9.9626 Tf 1.02 0 0 1 284.111 156.191 Tm [(].)-435(Each)-289(r)18(ow)-289(of)-288(the)-289(arrays)]TJ/F147 9.9626 Tf 1 0 0 1 399.875 156.191 Tm [(AS)]TJ/F84 9.9626 Tf 1.02 0 0 1 413.269 156.191 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 433.407 156.191 Tm [(JA)]TJ/F84 9.9626 Tf 1.02 0 0 1 99.895 144.236 Tm [(contains)-357(the)-358(coef)18(\002cients)-357(and)-357(column)-358(indices;)-413(r)17(ows)-357(shorter)-357(than)]TJ/F147 9.9626 Tf 1 0 0 1 394.811 144.236 Tm [(MAXNZR)]TJ/F84 9.9626 Tf 1.02 0 0 1 429.823 144.236 Tm [(ar)18(e)]TJ 0.98 0 0 1 99.596 132.281 Tm [(padded)-229(with)-229(zer)19(o)-229(coef)18(\002cients)-229(and)-229(appr)19(opriate)-229(column)-229(indices,)-234(e.g.)-307(the)-229(last)-229(valid)]TJ 1 0 0 1 99.895 120.326 Tm [(one)-250(found)-250(in)-250(the)-250(same)-250(r)18(ow)92(.)]TJ 0 g 0 G 164.384 -29.888 Td [(171)]TJ 0 g 0 G @@ -29924,7 +29938,7 @@ ET endstream endobj -2149 0 obj +2151 0 obj << /Length 4837 >> @@ -29973,11 +29987,11 @@ BT /F84 9.9626 Tf 245.769 373.573 Td [(Figur)18(e)-250(5:)-310(Example)-250(of)-250(sparse)-250(matrix)]TJ 0 g 0 G 0 g 0 G - 0.98 0 0 1 165.649 339.81 Tm [(The)-252(matrix-vector)-252(pr)19(oduct)]TJ/F78 9.9626 Tf 1 0 0 1 282.309 339.81 Tm [(y)]TJ/F192 10.3811 Tf 7.997 0 Td [(=)]TJ/F78 9.9626 Tf 11.584 0 Td [(A)-42(x)]TJ/F84 9.9626 Tf 0.98 0 0 1 317.166 339.81 Tm [(can)-252(be)-252(computed)-251(with)-252(the)-252(code)-252(shown)-252(in)]TJ 1.003 0 0 1 150.316 327.855 Tm [(Alg.)]TJ + 0.98 0 0 1 165.649 339.81 Tm [(The)-252(matrix-vector)-252(pr)19(oduct)]TJ/F78 9.9626 Tf 1 0 0 1 282.309 339.81 Tm [(y)]TJ/F197 10.3811 Tf 7.997 0 Td [(=)]TJ/F78 9.9626 Tf 11.584 0 Td [(A)-42(x)]TJ/F84 9.9626 Tf 0.98 0 0 1 317.166 339.81 Tm [(can)-252(be)-252(computed)-251(with)-252(the)-252(code)-252(shown)-252(in)]TJ 1.003 0 0 1 150.316 327.855 Tm [(Alg.)]TJ 0 0 1 rg 0 0 1 RG [-250(1)]TJ 0 g 0 G - [(;)-250(it)-250(costs)-250(one)-250(memory)-251(wri)1(te)-251(pe)1(r)-251(oute)1(r)-251(ite)1(ration,)-251(plus)-250(thr)18(ee)-250(memory)-250(r)18(eads)]TJ 1 0 0 1 150.705 315.9 Tm [(and)-250(two)-250(\003oating-point)-250(operations)-250(per)-250(inner)-250(iteration.)]TJ 1.02 0 0 1 165.649 303.412 Tm [(Unless)-327(all)-327(r)18(ows)-327(have)-327(exactly)-326(the)-327(same)-327(number)-327(of)-327(nonzer)18(os,)-347(some)-327(of)-327(the)]TJ 1.02 0 0 1 150.705 291.457 Tm [(coef)18(\002cients)-388(in)-387(the)]TJ/F145 9.9626 Tf 1 0 0 1 235.636 291.457 Tm [(AS)]TJ/F84 9.9626 Tf 1.02 0 0 1 250.035 291.457 Tm [(array)-388(will)-387(be)-388(zer)18(os;)-459(ther)18(efor)17(e)-387(this)-388(data)-388(str)8(uctur)18(e)-388(will)]TJ 1.02 0 0 1 150.705 279.501 Tm [(have)-270(an)-269(over)17(head)-269(both)-270(in)-270(ter)1(ms)-270(of)-270(memory)-269(space)-270(and)-270(r)18(edundant)-270(operations)]TJ 1 0 0 1 150.376 267.546 Tm [(\050multiplications)-250(by)-250(zer)18(o\051.)-310(The)-250(over)18(head)-250(can)-250(be)-250(acceptable)-250(if:)]TJ + [(;)-250(it)-250(costs)-250(one)-250(memory)-251(wri)1(te)-251(pe)1(r)-251(oute)1(r)-251(ite)1(ration,)-251(plus)-250(thr)18(ee)-250(memory)-250(r)18(eads)]TJ 1 0 0 1 150.705 315.9 Tm [(and)-250(two)-250(\003oating-point)-250(operations)-250(per)-250(inner)-250(iteration.)]TJ 1.02 0 0 1 165.649 303.412 Tm [(Unless)-327(all)-327(r)18(ows)-327(have)-327(exactly)-326(the)-327(same)-327(number)-327(of)-327(nonzer)18(os,)-347(some)-327(of)-327(the)]TJ 1.02 0 0 1 150.705 291.457 Tm [(coef)18(\002cients)-388(in)-387(the)]TJ/F147 9.9626 Tf 1 0 0 1 235.636 291.457 Tm [(AS)]TJ/F84 9.9626 Tf 1.02 0 0 1 250.035 291.457 Tm [(array)-388(will)-387(be)-388(zer)18(os;)-459(ther)18(efor)17(e)-387(this)-388(data)-388(str)8(uctur)18(e)-388(will)]TJ 1.02 0 0 1 150.705 279.501 Tm [(have)-270(an)-269(over)17(head)-269(both)-270(in)-270(ter)1(ms)-270(of)-270(memory)-269(space)-270(and)-270(r)18(edundant)-270(operations)]TJ 1 0 0 1 150.376 267.546 Tm [(\050multiplications)-250(by)-250(zer)18(o\051.)-310(The)-250(over)18(head)-250(can)-250(be)-250(acceptable)-250(if:)]TJ 0 g 0 G 12.782 -21.523 Td [(1.)]TJ 0 g 0 G @@ -29985,7 +29999,7 @@ BT 0 g 0 G -12.453 -22.056 Td [(2.)]TJ 0 g 0 G - 0.98 0 0 1 175.303 212.011 Tm [(The)-243(r)19(egularity)-243(of)-243(th)1(e)-243(data)-243(str)8(uctur)19(e)-243(allows)-243(for)-242(faster)-243(code,)-245(e.g.)-312(by)-243(allowing)]TJ 1 0 0 1 175.333 200.056 Tm [(vectorization,)-250(ther)18(eby)-250(of)18(fsetting)-250(the)-250(additional)-250(storage)-250(r)18(equir)18(ements.)]TJ 1.02 0 0 1 150.705 178.532 Tm [(In)-323(the)-323(extr)18(eme)-324(case)-323(wher)18(e)-323(the)-323(input)-323(matrix)-323(has)-323(one)-323(full)-323(r)17(ow)91(,)-343(the)-323(ELLP)90(ACK)]TJ 1.01 0 0 1 150.705 166.577 Tm [(str)8(uctur)18(e)-246(would)-246(r)18(equir)17(e)-246(mor)18(e)-246(memory)-246(than)-246(the)-246(normal)-246(2D)-246(array)-246(storage.)-307(The)]TJ 1.02 0 0 1 150.705 154.621 Tm [(ELLP)90(ACK)-246(storage)-245(format)-246(was)-246(very)-246(popular)-245(in)-246(the)-246(vector)-246(computing)-245(days;)-247(in)]TJ 0.98 0 0 1 150.705 142.666 Tm [(modern)-231(CPUs)-231(it)-231(is)-231(not)-231(quite)-231(as)-231(popular)75(,)-236(but)-231(it)-231(is)-231(the)-231(basis)-231(for)-231(many)-231(GPU)-231(formats.)]TJ 1 0 0 1 165.649 130.178 Tm [(The)-250(r)18(elevant)-250(data)-250(type)-250(is)]TJ/F145 9.9626 Tf 110.952 0 Td [(psb_T_ell_sparse_mat)]TJ/F84 9.9626 Tf 104.607 0 Td [(:)]TJ + 0.98 0 0 1 175.303 212.011 Tm [(The)-243(r)19(egularity)-243(of)-243(th)1(e)-243(data)-243(str)8(uctur)19(e)-243(allows)-243(for)-242(faster)-243(code,)-245(e.g.)-312(by)-243(allowing)]TJ 1 0 0 1 175.333 200.056 Tm [(vectorization,)-250(ther)18(eby)-250(of)18(fsetting)-250(the)-250(additional)-250(storage)-250(r)18(equir)18(ements.)]TJ 1.02 0 0 1 150.705 178.532 Tm [(In)-323(the)-323(extr)18(eme)-324(case)-323(wher)18(e)-323(the)-323(input)-323(matrix)-323(has)-323(one)-323(full)-323(r)17(ow)91(,)-343(the)-323(ELLP)90(ACK)]TJ 1.01 0 0 1 150.705 166.577 Tm [(str)8(uctur)18(e)-246(would)-246(r)18(equir)17(e)-246(mor)18(e)-246(memory)-246(than)-246(the)-246(normal)-246(2D)-246(array)-246(storage.)-307(The)]TJ 1.02 0 0 1 150.705 154.621 Tm [(ELLP)90(ACK)-246(storage)-245(format)-246(was)-246(very)-246(popular)-245(in)-246(the)-246(vector)-246(computing)-245(days;)-247(in)]TJ 0.98 0 0 1 150.705 142.666 Tm [(modern)-231(CPUs)-231(it)-231(is)-231(not)-231(quite)-231(as)-231(popular)75(,)-236(but)-231(it)-231(is)-231(the)-231(basis)-231(for)-231(many)-231(GPU)-231(formats.)]TJ 1 0 0 1 165.649 130.178 Tm [(The)-250(r)18(elevant)-250(data)-250(type)-250(is)]TJ/F147 9.9626 Tf 110.952 0 Td [(psb_T_ell_sparse_mat)]TJ/F84 9.9626 Tf 104.607 0 Td [(:)]TJ 0 g 0 G -66.12 -39.74 Td [(172)]TJ 0 g 0 G @@ -29993,21 +30007,21 @@ ET endstream endobj -2133 0 obj +2135 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/mat.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2154 0 R +/PTEX.InfoDict 2156 0 R /BBox [0 0 438 395] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << -/R7 2155 0 R +/R7 2157 0 R >>/XObject << -/R8 2156 0 R +/R8 2158 0 R >>>> /Length 3551 /Filter /FlateDecode @@ -30036,7 +30050,7 @@ r ´JXŘxčťóCąů[— S¬ëąĎć^zݰ.ĽŻ÷ëFÜ$ä 5`2. LŁ× 0 · ćÁî# Z(DôżSđ÷žĹjý˛Ą¬ł*'fÖĺťĂÝÖ;?buŢîŹR­rś†ţŤ—* Ýś—"@„ŤÂúaËiý(˙« o^˙/o*o endstream endobj -2156 0 obj +2158 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -30055,193 +30069,43 @@ stream & Ů˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ř˙Ŕ@ endstream endobj -2160 0 obj -<< -/Length 7547 ->> -stream -0 g 0 G -0 g 0 G -0 g 0 G -1 0 0 1 154.285 609.491 cm -q -.52 0 0 .52 0 0 cm -q -1 0 0 1 0 0 cm -/Im7 Do -Q -Q -0 g 0 G -1 0 0 1 -154.285 -609.491 cm -BT -/F84 9.9626 Tf 152.938 587.573 Td [(Figur)18(e)-250(6:)-310(ELLP)92(ACK)-250(compr)18(ession)-250(of)-250(matrix)-250(in)-250(Figur)18(e)]TJ -0 0 1 rg 0 0 1 RG - [-250(5)]TJ -0 g 0 G -0 g 0 G -0 g 0 G -0 g 0 G -0 g 0 G -/F75 8.9664 Tf -16.48 -31.498 Td [(d)-11(o)]TJ/F84 8.9664 Tf 17.426 0 Td [(i)-243(=)-89(1)-178(,)-98(n)]TJ -5.537 -10.959 Td [(t)-168(=)-32(0)]TJ/F75 8.9664 Tf -1.13 -10.958 Td [(d)-11(o)]TJ/F84 8.9664 Tf 17.682 0 Td [(j)-272(=)-89(1)-177(,)-121(m)-32(a)-32(x)-32(n)-32(z)-32(r)]TJ -5.792 -10.959 Td [(t)-734(=)-734(t)-734(+)-1289(a)-92(s)-226(\050)-236(i)-381(,)-358(j)-342(\051)]TJ 85.313 -2.332 Td [(*)]TJ 5.293 2.332 Td [(x)-176(\050)-288(j)-156(a)-289(\050)-236(i)-381(,)-358(j)-361(\051)-178(\051)]TJ/F75 8.9664 Tf -102.419 -10.959 Td [(e)-19(n)-20(d)-630(d)-11(o)]TJ/F84 8.9664 Tf 0.022 -10.959 Td [(y)-156(\050)-288(i)-288(\051)-730(=)-734(t)]TJ/F75 8.9664 Tf -10.782 -10.959 Td [(e)-19(n)-20(d)-630(d)-12(o)]TJ -0 g 0 G -0 g 0 G -0 g 0 G -0 g 0 G -0 g 0 G -/F75 9.9626 Tf 16.498 -17.519 Td [(Algorithm)-250(1:)]TJ/F84 9.9626 Tf 60.055 0 Td [(Matrix-V)111(ector)-250(pr)18(oduct)-250(in)-250(ELL)-250(format)]TJ -0 g 0 G -0 g 0 G -0 g 0 G -0.95 0.95 0.95 rg 0.95 0.95 0.95 RG -0.95 0.95 0.95 rg 0.95 0.95 0.95 RG -ET -q -1 0 0 1 99.895 316.473 cm -0 0 343.711 126.526 re f -Q -0.95 0.95 0.95 rg 0.95 0.95 0.95 RG -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -BT -/F233 8.9664 Tf 112.299 432.339 Td [(type)]TJ -0 g 0 G - [(,)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG - [-525(extends)]TJ -0 g 0 G - [(\050psb_d_base_sparse_mat\051)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG - [-525(::)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G - [-525(psb_d_ell_sparse_mat)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 9.414 -10.959 Td [(!)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.38 0.63 0.69 rg 0.38 0.63 0.69 RG - 0 -10.959 Td [(!)-525(ITPACK/ELL)-525(format,)-525(extended.)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.38 0.63 0.69 rg 0.38 0.63 0.69 RG - 0 -10.959 Td [(!)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F233 8.9664 Tf 0 -21.918 Td [(integer)]TJ -0 g 0 G - [(\050psb_ipk_\051,)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG - [-525(allocatable)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG - [-525(::)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G - [-525(irn\050:\051,)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G - [-525(ja\050:,:\051,)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G - [-525(idiag\050:\051)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.56 0.13 0.00 rg 0.56 0.13 0.00 RG - 0 -10.959 Td [(real)]TJ -0 g 0 G - [(\050psb_dpk_\051,)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG - [-525(allocatable)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG - [-525(::)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G - [-525(val\050:,:\051)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG - -9.414 -21.918 Td [(contains)]TJ -0 g 0 G -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G - 9.414 -10.959 Td [(....)]TJ -0.73 0.73 0.73 rg 0.73 0.73 0.73 RG -0 g 0 G -0.00 0.44 0.13 rg 0.00 0.44 0.13 RG - -9.414 -10.958 Td [(end)-525(type)]TJ -0 g 0 G - [-525(psb_d_ell_sparse_mat)]TJ -0.95 0.95 0.95 rg 0.95 0.95 0.95 RG -0 g 0 G -/F75 9.9626 Tf -12.404 -39.81 Td [(Hacked)-250(ELLP)74(ACK)]TJ/F84 9.9626 Tf 0.98 0 0 1 99.587 263.883 Tm [(The)]TJ/F78 9.9626 Tf 0.98 0 0 1 118.234 263.883 Tm [(hacked)-236(ELLP)132(ACK)]TJ/F84 9.9626 Tf 0.98 0 0 1 190.781 263.883 Tm [(\050)]TJ/F75 9.9626 Tf 0.98 0 0 1 194.032 263.883 Tm [(HLL)]TJ/F84 9.9626 Tf 0.98 0 0 1 214.096 263.883 Tm [(\051)-236(format)-236(alleviates)-236(the)-236(main)-236(pr)19(oblem)-236(of)-236(the)-236(ELLP)94(ACK)]TJ 0.989 0 0 1 99.895 251.928 Tm [(format,)-252(that)-253(is,)-252(the)-252(amount)-253(of)-252(memory)-252(r)18(equir)18(ed)-252(by)-252(padding)-252(for)-253(sparse)-252(matrices)]TJ 1 0 0 1 99.895 239.973 Tm [(in)-250(which)-250(the)-250(maximum)-250(r)18(ow)-250(length)-250(is)-250(lar)18(ger)-250(than)-250(the)-250(average.)]TJ 1.02 0 0 1 114.839 227.97 Tm [(The)-421(number)-421(of)-422(elements)-421(allocated)-421(to)-421(padding)-421(is)]TJ/F192 10.3811 Tf 1 0 0 1 345.511 227.97 Tm [([)-24(\050)]TJ/F78 9.9626 Tf 7.403 0 Td [(m)]TJ/F190 10.3811 Tf 10.6 0 Td [(\003)]TJ/F78 9.9626 Tf 8.039 0 Td [(m)-40(a)-42(x)-70(N)-76(R)]TJ/F192 10.3811 Tf 34.072 0 Td [(\051)]TJ/F190 10.3811 Tf 6.874 0 Td [(\000)]TJ/F192 10.3811 Tf 10.919 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(m)]TJ/F190 10.3811 Tf 10.6 0 Td [(\003)]TJ/F78 9.9626 Tf -338.123 -11.955 Td [(a)-25(v)-47(g)-60(N)-76(R)]TJ/F192 10.3811 Tf 31.104 0 Td [(\051)-537(=)]TJ/F78 9.9626 Tf 23.266 0 Td [(m)]TJ/F190 10.3811 Tf 10.451 0 Td [(\003)]TJ/F192 10.3811 Tf 7.891 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(m)-40(a)-42(x)-70(N)-76(R)]TJ/F190 10.3811 Tf 36.523 0 Td [(\000)]TJ/F78 9.9626 Tf 10.919 0 Td [(a)-25(v)-47(g)-60(N)-76(R)]TJ/F192 10.3811 Tf 31.103 0 Td [(\051)-23(])]TJ/F84 9.9626 Tf 1.02 0 0 1 266.856 216.015 Tm [(for)-382(both)]TJ/F145 9.9626 Tf 1 0 0 1 307.954 216.015 Tm [(AS)]TJ/F84 9.9626 Tf 1.02 0 0 1 322.291 216.015 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 343.374 216.015 Tm [(JA)]TJ/F84 9.9626 Tf 1.02 0 0 1 357.711 216.015 Tm [(arrays,)-416(wher)18(e)]TJ/F78 9.9626 Tf 1 0 0 1 424.587 216.015 Tm [(m)]TJ/F84 9.9626 Tf 1.02 0 0 1 436.341 216.015 Tm [(is)]TJ 0.995 0 0 1 99.895 204.06 Tm [(equal)-252(to)-252(the)-252(number)-252(of)-252(r)18(ows)-252(of)-252(the)-252(matrix)1(,)]TJ/F78 9.9626 Tf 1 0 0 1 287.784 204.06 Tm [(m)-40(a)-42(x)-70(N)-76(R)]TJ/F84 9.9626 Tf 0.995 0 0 1 324.229 204.06 Tm [(is)-252(the)-252(maximum)-252(number)-252(of)]TJ 0.998 0 0 1 99.895 192.104 Tm [(nonzer)18(o)-251(elements)-251(in)-251(every)-251(r)18(ow)-252(and)]TJ/F78 9.9626 Tf 1 0 0 1 257.847 192.104 Tm [(a)-25(v)-47(g)-60(N)-76(R)]TJ/F84 9.9626 Tf 0.998 0 0 1 291.322 192.104 Tm [(is)-251(the)-251(average)-251(number)-252(of)-251(nonzer)18(os.)]TJ 1.017 0 0 1 99.587 180.149 Tm [(Ther)18(efor)17(e)-245(a)-246(single)-245(densely)-246(populated)-245(r)17(ow)-245(can)-246(seriously)-246(af)18(fec)1(t)-246(the)-246(total)-245(size)-246(of)]TJ 1 0 0 1 99.895 168.194 Tm [(the)-250(allocation.)]TJ 1.02 0 0 1 114.839 156.191 Tm [(T)90(o)-335(limit)-336(this)-335(ef)18(fect,)-358(in)-336(t)1(he)-336(HLL)-335(format)-336(we)-335(br)18(eak)-336(the)-335(original)-336(matrix)-335(into)]TJ 0.985 0 0 1 99.895 144.236 Tm [(equally)-254(sized)-253(gr)18(oups)-253(of)-254(r)18(ows)-253(\050called)]TJ/F78 9.9626 Tf 0.985 0 0 1 259.082 144.236 Tm [(hacks)]TJ/F84 9.9626 Tf 0.985 0 0 1 280.514 144.236 Tm [(\051,)-254(and)-253(then)-254(stor)19(e)-254(these)-253(gr)18(oups)-254(as)-253(inde-)]TJ 1.02 0 0 1 99.596 132.281 Tm [(pendent)-249(matrices)-249(in)-249(ELLP)90(ACK)-249(format.)-315(The)-249(gr)18(oups)-249(can)-249(be)-249(arranged)-249(selecting)]TJ 1.02 0 0 1 99.895 120.326 Tm [(r)18(ows)-332(in)-331(an)-331(arbitrarily)-331(manner;)-374(indeed,)-353(if)-331(the)-331(r)18(ows)-332(ar)18(e)-331(sorted)-331(by)-331(decr)17(easing)]TJ -0 g 0 G - 1 0 0 1 264.279 90.438 Tm [(173)]TJ -0 g 0 G -ET - -endstream -endobj -2046 0 obj +2047 0 obj << /Type /ObjStm /N 100 /First 987 -/Length 12093 ->> -stream -569 0 2042 57 2050 152 2047 300 2048 445 2052 592 573 651 2049 709 2058 804 2053 970 -2054 1115 2055 1262 2056 1416 2060 1565 577 1623 2057 1680 2065 1775 2061 1932 2062 2079 2063 2226 -2067 2380 581 2439 2064 2497 2069 2592 2071 2710 585 2768 2068 2825 2077 2920 2073 3068 2074 3218 -2079 3363 589 3422 2080 3480 2081 3539 2082 3598 2083 3657 2076 3715 2088 3866 2075 4032 2084 4179 -2085 4323 2086 4467 2090 4612 2087 4670 2093 4821 2091 4960 2095 5104 2092 5163 2101 5271 2096 5428 -2097 5573 2098 5720 2103 5862 593 5920 2104 5977 2105 6035 2106 6093 2100 6151 2110 6302 2099 6459 -2107 6603 2108 6750 2112 6894 2109 6953 2114 7104 2116 7222 2113 7280 2125 7361 2118 7554 2128 7730 -2119 7905 2120 8088 2121 8240 2122 8395 2123 8547 2127 8701 597 8760 601 8818 2124 8876 2139 8999 -2131 9156 2132 9305 2134 9452 2141 9599 606 9657 610 9714 2142 9771 2143 9829 2138 9887 2148 10025 -2154 10164 2155 10344 2137 10387 2150 10534 2145 10593 2151 10652 2152 10711 2153 10770 2147 10829 2159 10967 +/Length 12111 +>> +stream +569 0 2043 57 2051 152 2048 300 2049 445 2053 592 573 651 2050 709 2059 804 2054 970 +2055 1115 2056 1262 2057 1416 2061 1565 577 1623 2058 1680 2066 1775 2062 1932 2063 2079 2064 2226 +2068 2380 581 2439 2065 2497 2070 2592 2072 2710 585 2768 2069 2825 2078 2920 2074 3068 2075 3218 +2080 3363 589 3422 2081 3480 2082 3539 2083 3598 2084 3657 2077 3715 2089 3866 2076 4032 2085 4179 +2086 4323 2087 4467 2091 4612 2088 4670 2094 4821 2092 4960 2096 5104 2093 5163 2103 5271 2097 5437 +2098 5586 2099 5730 2100 5877 2105 6019 593 6077 2106 6134 2107 6192 2108 6250 2102 6308 2112 6459 +2101 6616 2109 6760 2110 6907 2114 7051 2111 7110 2116 7261 2118 7379 2115 7437 2127 7518 2120 7711 +2130 7887 2121 8062 2122 8245 2123 8397 2124 8552 2125 8704 2129 8858 597 8917 601 8975 2126 9033 +2141 9156 2133 9313 2134 9462 2136 9609 2143 9756 606 9814 610 9871 2144 9928 2145 9986 2140 10044 +2150 10182 2156 10321 2157 10501 2139 10544 2152 10691 2147 10750 2153 10809 2154 10868 2155 10927 2149 10986 % 569 0 obj << -/D [2043 0 R /XYZ 99.895 716.092 null] +/D [2044 0 R /XYZ 99.895 716.092 null] >> -% 2042 0 obj +% 2043 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2050 0 obj +% 2051 0 obj << /Type /Page -/Contents 2051 0 R -/Resources 2049 0 R +/Contents 2052 0 R +/Resources 2050 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2036 0 R -/Annots [ 2047 0 R 2048 0 R ] +/Parent 2037 0 R +/Annots [ 2048 0 R 2049 0 R ] >> -% 2047 0 obj +% 2048 0 obj << /Type /Annot /Subtype /Link @@ -30249,7 +30113,7 @@ stream /Rect [371.126 573.77 443.414 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2048 0 obj +% 2049 0 obj << /Type /Annot /Subtype /Link @@ -30257,29 +30121,29 @@ stream /Rect [371.126 498.054 443.414 510.114] /A << /S /GoTo /D (precdata) >> >> -% 2052 0 obj +% 2053 0 obj << -/D [2050 0 R /XYZ 149.705 753.953 null] +/D [2051 0 R /XYZ 149.705 753.953 null] >> % 573 0 obj << -/D [2050 0 R /XYZ 150.705 716.092 null] +/D [2051 0 R /XYZ 150.705 716.092 null] >> -% 2049 0 obj +% 2050 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2058 0 obj +% 2059 0 obj << /Type /Page -/Contents 2059 0 R -/Resources 2057 0 R +/Contents 2060 0 R +/Resources 2058 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2036 0 R -/Annots [ 2053 0 R 2054 0 R 2055 0 R 2056 0 R ] +/Parent 2037 0 R +/Annots [ 2054 0 R 2055 0 R 2056 0 R 2057 0 R ] >> -% 2053 0 obj +% 2054 0 obj << /Type /Annot /Subtype /Link @@ -30287,7 +30151,7 @@ stream /Rect [320.317 573.77 392.605 585.83] /A << /S /GoTo /D (precdata) >> >> -% 2054 0 obj +% 2055 0 obj << /Type /Annot /Subtype /Link @@ -30295,7 +30159,7 @@ stream /Rect [320.317 430.308 392.605 442.368] /A << /S /GoTo /D (precdata) >> >> -% 2055 0 obj +% 2056 0 obj << /Type /Annot /Subtype /Link @@ -30303,7 +30167,7 @@ stream /Rect [129.909 304.779 149.563 316.839] /A << /S /GoTo /D (subsection.12.4) >> >> -% 2056 0 obj +% 2057 0 obj << /Type /Annot /Subtype /Link @@ -30311,29 +30175,29 @@ stream /Rect [172.161 304.779 184.246 316.839] /A << /S /GoTo /D (section.13) >> >> -% 2060 0 obj +% 2061 0 obj << -/D [2058 0 R /XYZ 98.895 753.953 null] +/D [2059 0 R /XYZ 98.895 753.953 null] >> % 577 0 obj << -/D [2058 0 R /XYZ 99.895 716.092 null] +/D [2059 0 R /XYZ 99.895 716.092 null] >> -% 2057 0 obj +% 2058 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2065 0 obj +% 2066 0 obj << /Type /Page -/Contents 2066 0 R -/Resources 2064 0 R +/Contents 2067 0 R +/Resources 2065 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2036 0 R -/Annots [ 2061 0 R 2062 0 R 2063 0 R ] +/Parent 2037 0 R +/Annots [ 2062 0 R 2063 0 R 2064 0 R ] >> -% 2061 0 obj +% 2062 0 obj << /Type /Annot /Subtype /Link @@ -30341,7 +30205,7 @@ stream /Rect [371.126 561.815 443.414 573.875] /A << /S /GoTo /D (precdata) >> >> -% 2062 0 obj +% 2063 0 obj << /Type /Annot /Subtype /Link @@ -30349,7 +30213,7 @@ stream /Rect [371.126 486.099 443.414 498.159] /A << /S /GoTo /D (precdata) >> >> -% 2063 0 obj +% 2064 0 obj << /Type /Annot /Subtype /Link @@ -30357,50 +30221,50 @@ stream /Rect [443.742 396.435 463.169 408.495] /A << /S /GoTo /D (subsection.10.8) >> >> -% 2067 0 obj +% 2068 0 obj << -/D [2065 0 R /XYZ 149.705 753.953 null] +/D [2066 0 R /XYZ 149.705 753.953 null] >> % 581 0 obj << -/D [2065 0 R /XYZ 150.705 716.092 null] +/D [2066 0 R /XYZ 150.705 716.092 null] >> -% 2064 0 obj +% 2065 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2069 0 obj +% 2070 0 obj << /Type /Page -/Contents 2070 0 R -/Resources 2068 0 R +/Contents 2071 0 R +/Resources 2069 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2072 0 R +/Parent 2073 0 R >> -% 2071 0 obj +% 2072 0 obj << -/D [2069 0 R /XYZ 98.895 753.953 null] +/D [2070 0 R /XYZ 98.895 753.953 null] >> % 585 0 obj << -/D [2069 0 R /XYZ 99.895 716.092 null] +/D [2070 0 R /XYZ 99.895 716.092 null] >> -% 2068 0 obj +% 2069 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2077 0 obj +% 2078 0 obj << /Type /Page -/Contents 2078 0 R -/Resources 2076 0 R +/Contents 2079 0 R +/Resources 2077 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2072 0 R -/Annots [ 2073 0 R 2074 0 R ] +/Parent 2073 0 R +/Annots [ 2074 0 R 2075 0 R ] >> -% 2073 0 obj +% 2074 0 obj << /Type /Annot /Subtype /Link @@ -30408,7 +30272,7 @@ stream /Rect [379.973 275.278 386.249 288.868] /A << /S /GoTo /D (Hfootnote.5) >> >> -% 2074 0 obj +% 2075 0 obj << /Type /Annot /Subtype /Link @@ -30416,45 +30280,45 @@ stream /Rect [342.753 134.696 420.271 146.755] /A << /S /GoTo /D (spdata) >> >> -% 2079 0 obj +% 2080 0 obj << -/D [2077 0 R /XYZ 149.705 753.953 null] +/D [2078 0 R /XYZ 149.705 753.953 null] >> % 589 0 obj << -/D [2077 0 R /XYZ 150.705 716.092 null] ->> -% 2080 0 obj -<< -/D [2077 0 R /XYZ 150.705 444.811 null] +/D [2078 0 R /XYZ 150.705 716.092 null] >> % 2081 0 obj << -/D [2077 0 R /XYZ 150.705 444.971 null] +/D [2078 0 R /XYZ 150.705 444.811 null] >> % 2082 0 obj << -/D [2077 0 R /XYZ 150.705 433.015 null] +/D [2078 0 R /XYZ 150.705 444.971 null] >> % 2083 0 obj << -/D [2077 0 R /XYZ 165.051 129.79 null] +/D [2078 0 R /XYZ 150.705 433.015 null] >> -% 2076 0 obj +% 2084 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R /F145 940 0 R >> +/D [2078 0 R /XYZ 165.051 129.79 null] +>> +% 2077 0 obj +<< +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F152 1491 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2088 0 obj +% 2089 0 obj << /Type /Page -/Contents 2089 0 R -/Resources 2087 0 R +/Contents 2090 0 R +/Resources 2088 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2072 0 R -/Annots [ 2075 0 R 2084 0 R 2085 0 R 2086 0 R ] +/Parent 2073 0 R +/Annots [ 2076 0 R 2085 0 R 2086 0 R 2087 0 R ] >> -% 2075 0 obj +% 2076 0 obj << /Type /Annot /Subtype /Link @@ -30462,7 +30326,7 @@ stream /Rect [291.943 654.503 364.232 666.562] /A << /S /GoTo /D (precdata) >> >> -% 2084 0 obj +% 2085 0 obj << /Type /Annot /Subtype /Link @@ -30470,7 +30334,7 @@ stream /Rect [342.493 584.479 418.548 596.539] /A << /S /GoTo /D (vdata) >> >> -% 2085 0 obj +% 2086 0 obj << /Type /Annot /Subtype /Link @@ -30478,7 +30342,7 @@ stream /Rect [342.493 514.456 418.548 526.516] /A << /S /GoTo /D (vdata) >> >> -% 2086 0 obj +% 2087 0 obj << /Type /Annot /Subtype /Link @@ -30486,25 +30350,25 @@ stream /Rect [291.943 374.41 359.001 386.47] /A << /S /GoTo /D (descdata) >> >> -% 2090 0 obj +% 2091 0 obj << -/D [2088 0 R /XYZ 98.895 753.953 null] +/D [2089 0 R /XYZ 98.895 753.953 null] >> -% 2087 0 obj +% 2088 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F152 1491 0 R >> /ProcSet [ /PDF /Text ] >> -% 2093 0 obj +% 2094 0 obj << /Type /Page -/Contents 2094 0 R -/Resources 2092 0 R +/Contents 2095 0 R +/Resources 2093 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2072 0 R -/Annots [ 2091 0 R ] +/Parent 2073 0 R +/Annots [ 2092 0 R ] >> -% 2091 0 obj +% 2092 0 obj << /Type /Annot /Subtype /Link @@ -30512,41 +30376,49 @@ stream /Rect [393.303 554.876 469.357 566.936] /A << /S /GoTo /D (vdata) >> >> -% 2095 0 obj +% 2096 0 obj << -/D [2093 0 R /XYZ 149.705 753.953 null] +/D [2094 0 R /XYZ 149.705 753.953 null] >> -% 2092 0 obj +% 2093 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2101 0 obj +% 2103 0 obj << /Type /Page -/Contents 2102 0 R -/Resources 2100 0 R +/Contents 2104 0 R +/Resources 2102 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2072 0 R -/Annots [ 2096 0 R 2097 0 R 2098 0 R ] +/Parent 2073 0 R +/Annots [ 2097 0 R 2098 0 R 2099 0 R 2100 0 R ] >> -% 2096 0 obj +% 2097 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [291.943 253.023 369.462 265.083] +/Rect [338.667 637.666 350.622 649.726] +/A << /S /GoTo /D (section.10) >> +>> +% 2098 0 obj +<< +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [291.943 252.831 369.462 264.89] /A << /S /GoTo /D (spdata) >> >> -% 2097 0 obj +% 2099 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [291.943 184.772 364.232 196.831] +/Rect [291.943 184.675 364.232 196.735] /A << /S /GoTo /D (precdata) >> >> -% 2098 0 obj +% 2100 0 obj << /Type /Annot /Subtype /Link @@ -30554,41 +30426,41 @@ stream /Rect [342.493 116.52 418.548 128.58] /A << /S /GoTo /D (vdata) >> >> -% 2103 0 obj +% 2105 0 obj << -/D [2101 0 R /XYZ 98.895 753.953 null] +/D [2103 0 R /XYZ 98.895 753.953 null] >> % 593 0 obj << -/D [2101 0 R /XYZ 99.895 716.092 null] +/D [2103 0 R /XYZ 99.895 716.092 null] >> -% 2104 0 obj +% 2106 0 obj << -/D [2101 0 R /XYZ 99.895 397.916 null] +/D [2103 0 R /XYZ 99.895 397.387 null] >> -% 2105 0 obj +% 2107 0 obj << -/D [2101 0 R /XYZ 99.895 398.076 null] +/D [2103 0 R /XYZ 99.895 397.546 null] >> -% 2106 0 obj +% 2108 0 obj << -/D [2101 0 R /XYZ 99.895 386.121 null] +/D [2103 0 R /XYZ 99.895 385.591 null] >> -% 2100 0 obj +% 2102 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F152 1491 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2110 0 obj +% 2112 0 obj << /Type /Page -/Contents 2111 0 R -/Resources 2109 0 R +/Contents 2113 0 R +/Resources 2111 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2072 0 R -/Annots [ 2099 0 R 2107 0 R 2108 0 R ] +/Parent 2073 0 R +/Annots [ 2101 0 R 2109 0 R 2110 0 R ] >> -% 2099 0 obj +% 2101 0 obj << /Type /Annot /Subtype /Link @@ -30596,7 +30468,7 @@ stream /Rect [393.303 654.503 469.357 666.562] /A << /S /GoTo /D (vdata) >> >> -% 2107 0 obj +% 2109 0 obj << /Type /Annot /Subtype /Link @@ -30604,7 +30476,7 @@ stream /Rect [342.753 520.007 409.811 532.067] /A << /S /GoTo /D (descdata) >> >> -% 2108 0 obj +% 2110 0 obj << /Type /Annot /Subtype /Link @@ -30612,63 +30484,63 @@ stream /Rect [393.303 183.768 469.357 195.827] /A << /S /GoTo /D (vdata) >> >> -% 2112 0 obj +% 2114 0 obj << -/D [2110 0 R /XYZ 149.705 753.953 null] +/D [2112 0 R /XYZ 149.705 753.953 null] >> -% 2109 0 obj +% 2111 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F148 1490 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F152 1491 0 R >> /ProcSet [ /PDF /Text ] >> -% 2114 0 obj +% 2116 0 obj << /Type /Page -/Contents 2115 0 R -/Resources 2113 0 R +/Contents 2117 0 R +/Resources 2115 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2117 0 R +/Parent 2119 0 R >> -% 2116 0 obj +% 2118 0 obj << -/D [2114 0 R /XYZ 98.895 753.953 null] +/D [2116 0 R /XYZ 98.895 753.953 null] >> -% 2113 0 obj +% 2115 0 obj << /Font << /F75 685 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2125 0 obj +% 2127 0 obj << /Type /Page -/Contents 2126 0 R -/Resources 2124 0 R +/Contents 2128 0 R +/Resources 2126 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2117 0 R -/Annots [ 2118 0 R 2128 0 R 2119 0 R 2120 0 R 2121 0 R 2122 0 R 2123 0 R ] +/Parent 2119 0 R +/Annots [ 2120 0 R 2130 0 R 2121 0 R 2122 0 R 2123 0 R 2124 0 R 2125 0 R ] >> -% 2118 0 obj +% 2120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [368.938 636.522 495.412 648.582] /Subtype/Link/A<> >> -% 2128 0 obj +% 2130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [174.615 624.567 218.45 636.627] /Subtype/Link/A<> >> -% 2119 0 obj +% 2121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [191.223 593.098 397.198 605.158] /Subtype/Link/A<> >> -% 2120 0 obj +% 2122 0 obj << /Type /Annot /Subtype /Link @@ -30676,7 +30548,7 @@ stream /Rect [280.59 552.835 292.545 561.841] /A << /S /GoTo /D (cite.DesPat:11) >> >> -% 2121 0 obj +% 2123 0 obj << /Type /Annot /Subtype /Link @@ -30684,7 +30556,7 @@ stream /Rect [296.203 552.835 308.158 561.692] /A << /S /GoTo /D (cite.CaFiRo:2014) >> >> -% 2122 0 obj +% 2124 0 obj << /Type /Annot /Subtype /Link @@ -30692,7 +30564,7 @@ stream /Rect [311.815 552.835 323.771 561.841] /A << /S /GoTo /D (cite.Sparse03) >> >> -% 2123 0 obj +% 2125 0 obj << /Type /Annot /Subtype /Link @@ -30700,33 +30572,33 @@ stream /Rect [209.414 540.781 221.369 549.737] /A << /S /GoTo /D (cite.OurTechRep) >> >> -% 2127 0 obj +% 2129 0 obj << -/D [2125 0 R /XYZ 149.705 753.953 null] +/D [2127 0 R /XYZ 149.705 753.953 null] >> % 597 0 obj << -/D [2125 0 R /XYZ 150.705 716.092 null] +/D [2127 0 R /XYZ 150.705 716.092 null] >> % 601 0 obj << -/D [2125 0 R /XYZ 150.705 525.151 null] +/D [2127 0 R /XYZ 150.705 525.151 null] >> -% 2124 0 obj +% 2126 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R /F78 686 0 R /F233 1044 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R /F78 686 0 R /F235 1045 0 R >> /ProcSet [ /PDF /Text ] >> -% 2139 0 obj +% 2141 0 obj << /Type /Page -/Contents 2140 0 R -/Resources 2138 0 R +/Contents 2142 0 R +/Resources 2140 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2117 0 R -/Annots [ 2131 0 R 2132 0 R 2134 0 R ] +/Parent 2119 0 R +/Annots [ 2133 0 R 2134 0 R 2136 0 R ] >> -% 2131 0 obj +% 2133 0 obj << /Type /Annot /Subtype /Link @@ -30734,7 +30606,7 @@ stream /Rect [121.315 282.067 133.27 291.173] /A << /S /GoTo /D (cite.MRC:11) >> >> -% 2132 0 obj +% 2134 0 obj << /Type /Annot /Subtype /Link @@ -30742,7 +30614,7 @@ stream /Rect [253.836 246.183 265.791 255.592] /A << /S /GoTo /D (table.22) >> >> -% 2134 0 obj +% 2136 0 obj << /Type /Annot /Subtype /Link @@ -30750,53 +30622,53 @@ stream /Rect [310.367 176.296 317.241 188.355] /A << /S /GoTo /D (figure.6) >> >> -% 2141 0 obj +% 2143 0 obj << -/D [2139 0 R /XYZ 98.895 753.953 null] +/D [2141 0 R /XYZ 98.895 753.953 null] >> % 606 0 obj << -/D [2139 0 R /XYZ 99.895 349.244 null] +/D [2141 0 R /XYZ 99.895 349.244 null] >> % 610 0 obj << -/D [2139 0 R /XYZ 99.895 231.907 null] +/D [2141 0 R /XYZ 99.895 231.907 null] >> -% 2142 0 obj +% 2144 0 obj << -/D [2139 0 R /XYZ 99.895 211.056 null] +/D [2141 0 R /XYZ 99.895 211.056 null] >> -% 2143 0 obj +% 2145 0 obj << -/D [2139 0 R /XYZ 99.895 120.166 null] +/D [2141 0 R /XYZ 99.895 120.166 null] >> -% 2138 0 obj +% 2140 0 obj << -/Font << /F279 1815 0 R /F233 1044 0 R /F84 687 0 R /F145 940 0 R /F75 685 0 R /F78 686 0 R >> +/Font << /F281 1816 0 R /F235 1045 0 R /F84 687 0 R /F147 941 0 R /F75 685 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2148 0 obj +% 2150 0 obj << /Type /Page -/Contents 2149 0 R -/Resources 2147 0 R +/Contents 2151 0 R +/Resources 2149 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2117 0 R -/Annots [ 2137 0 R ] +/Parent 2119 0 R +/Annots [ 2139 0 R ] >> -% 2154 0 obj +% 2156 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133929+01'00') /ModDate (D:20140329133929+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2155 0 obj +% 2157 0 obj << /Type /ExtGState /OPM 1 >> -% 2137 0 obj +% 2139 0 obj << /Type /Annot /Subtype /Link @@ -30804,60 +30676,201 @@ stream /Rect [170.554 324.049 177.543 336.109] /A << /S /GoTo /D (algocf.1) >> >> -% 2150 0 obj +% 2152 0 obj << -/D [2148 0 R /XYZ 149.705 753.953 null] +/D [2150 0 R /XYZ 149.705 753.953 null] >> -% 2145 0 obj +% 2147 0 obj << -/D [2148 0 R /XYZ 150.705 716.092 null] +/D [2150 0 R /XYZ 150.705 716.092 null] >> -% 2151 0 obj +% 2153 0 obj << -/D [2148 0 R /XYZ 397.506 407.446 null] +/D [2150 0 R /XYZ 397.506 407.446 null] >> -% 2152 0 obj +% 2154 0 obj << -/D [2148 0 R /XYZ 150.705 260.219 null] +/D [2150 0 R /XYZ 150.705 260.219 null] >> -% 2153 0 obj +% 2155 0 obj << -/D [2148 0 R /XYZ 150.705 226.207 null] +/D [2150 0 R /XYZ 150.705 226.207 null] >> -% 2147 0 obj +% 2149 0 obj << -/Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R >> -/XObject << /Im6 2133 0 R >> +/Font << /F84 687 0 R /F78 686 0 R /F197 943 0 R /F147 941 0 R >> +/XObject << /Im6 2135 0 R >> /ProcSet [ /PDF /Text ] >> -% 2159 0 obj + +endstream +endobj +2162 0 obj << -/Type /Page -/Contents 2160 0 R -/Resources 2158 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 2117 0 R -/Annots [ 2136 0 R ] +/Length 7547 >> +stream +0 g 0 G +0 g 0 G +0 g 0 G +1 0 0 1 154.285 609.491 cm +q +.52 0 0 .52 0 0 cm +q +1 0 0 1 0 0 cm +/Im7 Do +Q +Q +0 g 0 G +1 0 0 1 -154.285 -609.491 cm +BT +/F84 9.9626 Tf 152.938 587.573 Td [(Figur)18(e)-250(6:)-310(ELLP)92(ACK)-250(compr)18(ession)-250(of)-250(matrix)-250(in)-250(Figur)18(e)]TJ +0 0 1 rg 0 0 1 RG + [-250(5)]TJ +0 g 0 G +0 g 0 G +0 g 0 G +0 g 0 G +0 g 0 G +/F75 8.9664 Tf -16.48 -31.498 Td [(d)-11(o)]TJ/F84 8.9664 Tf 17.426 0 Td [(i)-243(=)-89(1)-178(,)-98(n)]TJ -5.537 -10.959 Td [(t)-168(=)-32(0)]TJ/F75 8.9664 Tf -1.13 -10.958 Td [(d)-11(o)]TJ/F84 8.9664 Tf 17.682 0 Td [(j)-272(=)-89(1)-177(,)-121(m)-32(a)-32(x)-32(n)-32(z)-32(r)]TJ -5.792 -10.959 Td [(t)-734(=)-734(t)-734(+)-1289(a)-92(s)-226(\050)-236(i)-381(,)-358(j)-342(\051)]TJ 85.313 -2.332 Td [(*)]TJ 5.293 2.332 Td [(x)-176(\050)-288(j)-156(a)-289(\050)-236(i)-381(,)-358(j)-361(\051)-178(\051)]TJ/F75 8.9664 Tf -102.419 -10.959 Td [(e)-19(n)-20(d)-630(d)-11(o)]TJ/F84 8.9664 Tf 0.022 -10.959 Td [(y)-156(\050)-288(i)-288(\051)-730(=)-734(t)]TJ/F75 8.9664 Tf -10.782 -10.959 Td [(e)-19(n)-20(d)-630(d)-12(o)]TJ +0 g 0 G +0 g 0 G +0 g 0 G +0 g 0 G +0 g 0 G +/F75 9.9626 Tf 16.498 -17.519 Td [(Algorithm)-250(1:)]TJ/F84 9.9626 Tf 60.055 0 Td [(Matrix-V)111(ector)-250(pr)18(oduct)-250(in)-250(ELL)-250(format)]TJ +0 g 0 G +0 g 0 G +0 g 0 G +0.95 0.95 0.95 rg 0.95 0.95 0.95 RG +0.95 0.95 0.95 rg 0.95 0.95 0.95 RG +ET +q +1 0 0 1 99.895 316.473 cm +0 0 343.711 126.526 re f +Q +0.95 0.95 0.95 rg 0.95 0.95 0.95 RG +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG +BT +/F235 8.9664 Tf 112.299 432.339 Td [(type)]TJ +0 g 0 G + [(,)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG + [-525(extends)]TJ +0 g 0 G + [(\050psb_d_base_sparse_mat\051)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG + [-525(::)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G + [-525(psb_d_ell_sparse_mat)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.38 0.63 0.69 rg 0.38 0.63 0.69 RG +/F281 8.9664 Tf 9.414 -10.959 Td [(!)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.38 0.63 0.69 rg 0.38 0.63 0.69 RG + 0 -10.959 Td [(!)-525(ITPACK/ELL)-525(format,)-525(extended.)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.38 0.63 0.69 rg 0.38 0.63 0.69 RG + 0 -10.959 Td [(!)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.56 0.13 0.00 rg 0.56 0.13 0.00 RG +/F235 8.9664 Tf 0 -21.918 Td [(integer)]TJ +0 g 0 G + [(\050psb_ipk_\051,)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG + [-525(allocatable)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG + [-525(::)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G + [-525(irn\050:\051,)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G + [-525(ja\050:,:\051,)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G + [-525(idiag\050:\051)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.56 0.13 0.00 rg 0.56 0.13 0.00 RG + 0 -10.959 Td [(real)]TJ +0 g 0 G + [(\050psb_dpk_\051,)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG + [-525(allocatable)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG + [-525(::)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G + [-525(val\050:,:\051)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG + -9.414 -21.918 Td [(contains)]TJ +0 g 0 G +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G + 9.414 -10.959 Td [(....)]TJ +0.73 0.73 0.73 rg 0.73 0.73 0.73 RG +0 g 0 G +0.00 0.44 0.13 rg 0.00 0.44 0.13 RG + -9.414 -10.958 Td [(end)-525(type)]TJ +0 g 0 G + [-525(psb_d_ell_sparse_mat)]TJ +0.95 0.95 0.95 rg 0.95 0.95 0.95 RG +0 g 0 G +/F75 9.9626 Tf -12.404 -39.81 Td [(Hacked)-250(ELLP)74(ACK)]TJ/F84 9.9626 Tf 0.98 0 0 1 99.587 263.883 Tm [(The)]TJ/F78 9.9626 Tf 0.98 0 0 1 118.234 263.883 Tm [(hacked)-236(ELLP)132(ACK)]TJ/F84 9.9626 Tf 0.98 0 0 1 190.781 263.883 Tm [(\050)]TJ/F75 9.9626 Tf 0.98 0 0 1 194.032 263.883 Tm [(HLL)]TJ/F84 9.9626 Tf 0.98 0 0 1 214.096 263.883 Tm [(\051)-236(format)-236(alleviates)-236(the)-236(main)-236(pr)19(oblem)-236(of)-236(the)-236(ELLP)94(ACK)]TJ 0.989 0 0 1 99.895 251.928 Tm [(format,)-252(that)-253(is,)-252(the)-252(amount)-253(of)-252(memory)-252(r)18(equir)18(ed)-252(by)-252(padding)-252(for)-253(sparse)-252(matrices)]TJ 1 0 0 1 99.895 239.973 Tm [(in)-250(which)-250(the)-250(maximum)-250(r)18(ow)-250(length)-250(is)-250(lar)18(ger)-250(than)-250(the)-250(average.)]TJ 1.02 0 0 1 114.839 227.97 Tm [(The)-421(number)-421(of)-422(elements)-421(allocated)-421(to)-421(padding)-421(is)]TJ/F197 10.3811 Tf 1 0 0 1 345.511 227.97 Tm [([)-24(\050)]TJ/F78 9.9626 Tf 7.403 0 Td [(m)]TJ/F195 10.3811 Tf 10.6 0 Td [(\003)]TJ/F78 9.9626 Tf 8.039 0 Td [(m)-40(a)-42(x)-70(N)-76(R)]TJ/F197 10.3811 Tf 34.072 0 Td [(\051)]TJ/F195 10.3811 Tf 6.874 0 Td [(\000)]TJ/F197 10.3811 Tf 10.919 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(m)]TJ/F195 10.3811 Tf 10.6 0 Td [(\003)]TJ/F78 9.9626 Tf -338.123 -11.955 Td [(a)-25(v)-47(g)-60(N)-76(R)]TJ/F197 10.3811 Tf 31.104 0 Td [(\051)-537(=)]TJ/F78 9.9626 Tf 23.266 0 Td [(m)]TJ/F195 10.3811 Tf 10.451 0 Td [(\003)]TJ/F197 10.3811 Tf 7.891 0 Td [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(m)-40(a)-42(x)-70(N)-76(R)]TJ/F195 10.3811 Tf 36.523 0 Td [(\000)]TJ/F78 9.9626 Tf 10.919 0 Td [(a)-25(v)-47(g)-60(N)-76(R)]TJ/F197 10.3811 Tf 31.103 0 Td [(\051)-23(])]TJ/F84 9.9626 Tf 1.02 0 0 1 266.856 216.015 Tm [(for)-382(both)]TJ/F147 9.9626 Tf 1 0 0 1 307.954 216.015 Tm [(AS)]TJ/F84 9.9626 Tf 1.02 0 0 1 322.291 216.015 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 343.374 216.015 Tm [(JA)]TJ/F84 9.9626 Tf 1.02 0 0 1 357.711 216.015 Tm [(arrays,)-416(wher)18(e)]TJ/F78 9.9626 Tf 1 0 0 1 424.587 216.015 Tm [(m)]TJ/F84 9.9626 Tf 1.02 0 0 1 436.341 216.015 Tm [(is)]TJ 0.995 0 0 1 99.895 204.06 Tm [(equal)-252(to)-252(the)-252(number)-252(of)-252(r)18(ows)-252(of)-252(the)-252(matrix)1(,)]TJ/F78 9.9626 Tf 1 0 0 1 287.784 204.06 Tm [(m)-40(a)-42(x)-70(N)-76(R)]TJ/F84 9.9626 Tf 0.995 0 0 1 324.229 204.06 Tm [(is)-252(the)-252(maximum)-252(number)-252(of)]TJ 0.998 0 0 1 99.895 192.104 Tm [(nonzer)18(o)-251(elements)-251(in)-251(every)-251(r)18(ow)-252(and)]TJ/F78 9.9626 Tf 1 0 0 1 257.847 192.104 Tm [(a)-25(v)-47(g)-60(N)-76(R)]TJ/F84 9.9626 Tf 0.998 0 0 1 291.322 192.104 Tm [(is)-251(the)-251(average)-251(number)-252(of)-251(nonzer)18(os.)]TJ 1.017 0 0 1 99.587 180.149 Tm [(Ther)18(efor)17(e)-245(a)-246(single)-245(densely)-246(populated)-245(r)17(ow)-245(can)-246(seriously)-246(af)18(fec)1(t)-246(the)-246(total)-245(size)-246(of)]TJ 1 0 0 1 99.895 168.194 Tm [(the)-250(allocation.)]TJ 1.02 0 0 1 114.839 156.191 Tm [(T)90(o)-335(limit)-336(this)-335(ef)18(fect,)-358(in)-336(t)1(he)-336(HLL)-335(format)-336(we)-335(br)18(eak)-336(the)-335(original)-336(matrix)-335(into)]TJ 0.985 0 0 1 99.895 144.236 Tm [(equally)-254(sized)-253(gr)18(oups)-253(of)-254(r)18(ows)-253(\050called)]TJ/F78 9.9626 Tf 0.985 0 0 1 259.082 144.236 Tm [(hacks)]TJ/F84 9.9626 Tf 0.985 0 0 1 280.514 144.236 Tm [(\051,)-254(and)-253(then)-254(stor)19(e)-254(these)-253(gr)18(oups)-254(as)-253(inde-)]TJ 1.02 0 0 1 99.596 132.281 Tm [(pendent)-249(matrices)-249(in)-249(ELLP)90(ACK)-249(format.)-315(The)-249(gr)18(oups)-249(can)-249(be)-249(arranged)-249(selecting)]TJ 1.02 0 0 1 99.895 120.326 Tm [(r)18(ows)-332(in)-331(an)-331(arbitrarily)-331(manner;)-374(indeed,)-353(if)-331(the)-331(r)18(ows)-332(ar)18(e)-331(sorted)-331(by)-331(decr)17(easing)]TJ +0 g 0 G + 1 0 0 1 264.279 90.438 Tm [(173)]TJ +0 g 0 G +ET endstream endobj -2135 0 obj +2137 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/ell.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2171 0 R +/PTEX.InfoDict 2174 0 R /BBox [0 0 447 205] /Resources << /ProcSet [ /PDF /ImageC /Text ] /ExtGState << -/R7 2172 0 R +/R7 2175 0 R >>/XObject << -/R8 2173 0 R ->>/Font << /R9 2174 0 R/R11 2175 0 R>> +/R8 2176 0 R +>>/Font << /R9 2177 0 R/R11 2178 0 R>> >> /Length 2281 /Filter /FlateDecode @@ -30869,7 +30882,7 @@ x Íy-?ýíůďŻßńGz·5®„ůËéOß}ŕMžsĺľAtű·ÔŹÇ˙|THF endstream endobj -2173 0 obj +2176 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -30888,7 +30901,7 @@ stream ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙;YŻ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŕ endstream endobj -2178 0 obj +2180 0 obj << /Filter /FlateDecode /Length 171 @@ -30897,7 +30910,7 @@ stream xś]ŹM F÷ś‚ŕOŰĸ±mš¶Ŕa0,‚¸čí; vфߛ|~¸ÖD.ÁÁ #×ĆŞ€‹[ q2–•WâNy‡Yz&ú›ôďŹGNÔßĺŚâYžóMą9ŕ.^i'dmQt­ÖC«ţžŞMőž¬)Yź:2čDŘ^26Y?‚iRŞt4ŕ°†€6ćŢąWęc,ţľćťO§Ĺľ=+V endstream endobj -2180 0 obj +2182 0 obj << /Filter /FlateDecode /Length 191 @@ -30907,7 +30920,7 @@ x â ±—U}íuT-mËüǸTŻ)ĎuÉşDŢyřýC ±¸(Š|iŃ_Ŕ endstream endobj -2181 0 obj +2183 0 obj << /Filter /FlateDecode /Length1 11124 @@ -30956,7 +30969,7 @@ B “žŃ endstream endobj -2182 0 obj +2184 0 obj << /Filter /FlateDecode /Length1 3512 @@ -30972,7 +30985,7 @@ a lţ'÷uţoL|E÷ľr«Ço¸ß9®ńßşÓŁúľÁ( endstream endobj -2189 0 obj +2191 0 obj << /Length 8640 >> @@ -30980,7 +30993,7 @@ stream 0 g 0 G 0 g 0 G BT -/F84 9.9626 Tf 1.002 0 0 1 150.705 706.129 Tm [(number)-250(of)-250(nonzer)18(os)-251(we)-250(obtain)-250(essentially)-250(the)-250(JAgged)-250(Diagonals)-251(format.)-311(If)-250(the)]TJ 1.02 0 0 1 150.705 694.174 Tm [(r)18(ows)-295(ar)18(e)-294(not)-294(in)-295(the)-294(original)-294(or)18(der)72(,)-306(then)-294(an)-295(additional)-294(vector)]TJ/F78 9.9626 Tf 1.02 0 0 1 423.988 694.174 Tm [(rIdx)]TJ/F84 9.9626 Tf 1.02 0 0 1 444.477 694.174 Tm [(is)-294(r)17(equir)18(ed,)]TJ 1 0 0 1 150.705 682.219 Tm [(storing)-250(the)-250(actual)-250(r)18(ow)-250(index)-250(for)-250(each)-250(r)18(ow)-250(in)-250(the)-250(data)-250(str)8(uctur)18(e.)]TJ 0.981 0 0 1 165.649 670.198 Tm [(The)-255(multiple)-255(ELLP)94(ACK-like)-255(buf)18(fers)-255(ar)18(e)-255(stac)1(ked)-255(together)-255(inside)-255(a)-255(single,)-255(one)]TJ 0.993 0 0 1 150.705 658.242 Tm [(dimensional)-252(array;)-252(an)-251(additional)-252(vector)]TJ/F78 9.9626 Tf 0.993 0 0 1 326.015 658.242 Tm [(hackOffsets)]TJ/F84 9.9626 Tf 0.993 0 0 1 374.299 658.242 Tm [(is)-252(pr)18(ovided)-251(to)-252(keep)-252(track)-252(of)]TJ 1.009 0 0 1 150.705 646.287 Tm [(the)-248(individual)-248(submatrices.)-308(All)-248(hacks)-249(have)-248(the)-248(same)-248(number)-248(of)-248(r)18(ows)]TJ/F78 9.9626 Tf 1.009 0 0 1 458.348 646.287 Tm [(hackSize)]TJ/F84 9.9626 Tf 1.009 0 0 1 493.148 646.287 Tm [(;)]TJ 0.985 0 0 1 150.705 634.332 Tm [(hence,)-255(the)]TJ/F78 9.9626 Tf 0.985 0 0 1 196.944 634.332 Tm [(hackOffsets)]TJ/F84 9.9626 Tf 0.985 0 0 1 244.865 634.332 Tm [(vector)-254(is)-255(an)-254(array)-255(of)]TJ/F192 10.3811 Tf 1 0 0 1 333.788 634.332 Tm [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(m)]TJ/F84 9.9626 Tf 8 0 Td [(/)]TJ/F78 9.9626 Tf 6.336 0 Td [(h)-40(a)-25(c)-25(k)-30(S)-18(i)-32(z)-25(e)]TJ/F192 10.3811 Tf 36.682 0 Td [(\051)-210(+)]TJ/F84 9.9626 Tf 0.985 0 0 1 405.427 634.332 Tm [(1)-254(elements,)-255(each)-254(one)]TJ 0.985 0 0 1 150.406 622.377 Tm [(pointing)-253(to)-253(the)-253(\002rst)-253(index)-253(of)-253(a)-253(submatrix)-254(ins)1(ide)-254(the)-253(stacked)]TJ/F78 9.9626 Tf 0.985 0 0 1 408.705 622.377 Tm [(cM)]TJ/F84 9.9626 Tf 0.985 0 0 1 421.963 622.377 Tm [(/)]TJ/F78 9.9626 Tf 0.985 0 0 1 427.91 622.377 Tm [(rP)]TJ/F84 9.9626 Tf 0.985 0 0 1 440.206 622.377 Tm [(buf)18(fers,)-253(plus)]TJ 1.02 0 0 1 150.705 610.422 Tm [(an)-269(additional)-269(element)-268(pointing)-269(past)-269(the)-269(end)-269(of)-268(the)-269(last)-269(block,)-275(wher)18(e)-269(the)-269(next)]TJ 1.006 0 0 1 150.705 598.467 Tm [(one)-248(would)-249(begin.)-308(W)92(e)-249(thus)-248(have)-249(the)-248(pr)18(operty)-249(that)-248(the)-249(el)1(ements)-249(of)-248(the)]TJ/F78 9.9626 Tf 1 0 0 1 456.901 598.467 Tm [(k)]TJ/F84 9.9626 Tf 1.006 0 0 1 461.498 598.467 Tm [(-th)]TJ/F78 9.9626 Tf 1.006 0 0 1 476.426 598.467 Tm [(hack)]TJ/F84 9.9626 Tf 0.995 0 0 1 150.705 586.511 Tm [(ar)18(e)-252(stor)18(ed)-251(between)]TJ/F145 9.9626 Tf 1 0 0 1 236.017 586.511 Tm [(hackOffsets[k])]TJ/F84 9.9626 Tf 0.995 0 0 1 311.738 586.511 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 331.016 586.511 Tm [(hackOffsets[k+1])]TJ/F84 9.9626 Tf 0.995 0 0 1 414.702 586.511 Tm [(,)-252(similarly)-252(to)-252(what)]TJ 1 0 0 1 150.705 574.556 Tm [(happens)-250(in)-250(the)-250(CSR)-250(format.)]TJ +/F84 9.9626 Tf 1.002 0 0 1 150.705 706.129 Tm [(number)-250(of)-250(nonzer)18(os)-251(we)-250(obtain)-250(essentially)-250(the)-250(JAgged)-250(Diagonals)-251(format.)-311(If)-250(the)]TJ 1.02 0 0 1 150.705 694.174 Tm [(r)18(ows)-295(ar)18(e)-294(not)-294(in)-295(the)-294(original)-294(or)18(der)72(,)-306(then)-294(an)-295(additional)-294(vector)]TJ/F78 9.9626 Tf 1.02 0 0 1 423.988 694.174 Tm [(rIdx)]TJ/F84 9.9626 Tf 1.02 0 0 1 444.477 694.174 Tm [(is)-294(r)17(equir)18(ed,)]TJ 1 0 0 1 150.705 682.219 Tm [(storing)-250(the)-250(actual)-250(r)18(ow)-250(index)-250(for)-250(each)-250(r)18(ow)-250(in)-250(the)-250(data)-250(str)8(uctur)18(e.)]TJ 0.981 0 0 1 165.649 670.198 Tm [(The)-255(multiple)-255(ELLP)94(ACK-like)-255(buf)18(fers)-255(ar)18(e)-255(stac)1(ked)-255(together)-255(inside)-255(a)-255(single,)-255(one)]TJ 0.993 0 0 1 150.705 658.242 Tm [(dimensional)-252(array;)-252(an)-251(additional)-252(vector)]TJ/F78 9.9626 Tf 0.993 0 0 1 326.015 658.242 Tm [(hackOffsets)]TJ/F84 9.9626 Tf 0.993 0 0 1 374.299 658.242 Tm [(is)-252(pr)18(ovided)-251(to)-252(keep)-252(track)-252(of)]TJ 1.009 0 0 1 150.705 646.287 Tm [(the)-248(individual)-248(submatrices.)-308(All)-248(hacks)-249(have)-248(the)-248(same)-248(number)-248(of)-248(r)18(ows)]TJ/F78 9.9626 Tf 1.009 0 0 1 458.348 646.287 Tm [(hackSize)]TJ/F84 9.9626 Tf 1.009 0 0 1 493.148 646.287 Tm [(;)]TJ 0.985 0 0 1 150.705 634.332 Tm [(hence,)-255(the)]TJ/F78 9.9626 Tf 0.985 0 0 1 196.944 634.332 Tm [(hackOffsets)]TJ/F84 9.9626 Tf 0.985 0 0 1 244.865 634.332 Tm [(vector)-254(is)-255(an)-254(array)-255(of)]TJ/F197 10.3811 Tf 1 0 0 1 333.788 634.332 Tm [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(m)]TJ/F84 9.9626 Tf 8 0 Td [(/)]TJ/F78 9.9626 Tf 6.336 0 Td [(h)-40(a)-25(c)-25(k)-30(S)-18(i)-32(z)-25(e)]TJ/F197 10.3811 Tf 36.682 0 Td [(\051)-210(+)]TJ/F84 9.9626 Tf 0.985 0 0 1 405.427 634.332 Tm [(1)-254(elements,)-255(each)-254(one)]TJ 0.985 0 0 1 150.406 622.377 Tm [(pointing)-253(to)-253(the)-253(\002rst)-253(index)-253(of)-253(a)-253(submatrix)-254(ins)1(ide)-254(the)-253(stacked)]TJ/F78 9.9626 Tf 0.985 0 0 1 408.705 622.377 Tm [(cM)]TJ/F84 9.9626 Tf 0.985 0 0 1 421.963 622.377 Tm [(/)]TJ/F78 9.9626 Tf 0.985 0 0 1 427.91 622.377 Tm [(rP)]TJ/F84 9.9626 Tf 0.985 0 0 1 440.206 622.377 Tm [(buf)18(fers,)-253(plus)]TJ 1.02 0 0 1 150.705 610.422 Tm [(an)-269(additional)-269(element)-268(pointing)-269(past)-269(the)-269(end)-269(of)-268(the)-269(last)-269(block,)-275(wher)18(e)-269(the)-269(next)]TJ 1.006 0 0 1 150.705 598.467 Tm [(one)-248(would)-249(begin.)-308(W)92(e)-249(thus)-248(have)-249(the)-248(pr)18(operty)-249(that)-248(the)-249(el)1(ements)-249(of)-248(the)]TJ/F78 9.9626 Tf 1 0 0 1 456.901 598.467 Tm [(k)]TJ/F84 9.9626 Tf 1.006 0 0 1 461.498 598.467 Tm [(-th)]TJ/F78 9.9626 Tf 1.006 0 0 1 476.426 598.467 Tm [(hack)]TJ/F84 9.9626 Tf 0.995 0 0 1 150.705 586.511 Tm [(ar)18(e)-252(stor)18(ed)-251(between)]TJ/F147 9.9626 Tf 1 0 0 1 236.017 586.511 Tm [(hackOffsets[k])]TJ/F84 9.9626 Tf 0.995 0 0 1 311.738 586.511 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 331.016 586.511 Tm [(hackOffsets[k+1])]TJ/F84 9.9626 Tf 0.995 0 0 1 414.702 586.511 Tm [(,)-252(similarly)-252(to)-252(what)]TJ 1 0 0 1 150.705 574.556 Tm [(happens)-250(in)-250(the)-250(CSR)-250(format.)]TJ 0 g 0 G ET 1 0 0 1 197.579 452.455 cm @@ -31000,7 +31013,7 @@ BT 0 g 0 G 0 g 0 G 0 g 0 G - 0.982 0 0 1 165.649 406.495 Tm [(W)56(ith)-254(this)-254(data)-254(str)8(uctur)19(e)-254(a)-254(very)-254(long)-254(r)18(ow)-254(only)-254(af)19(f)-1(ects)-254(one)-254(hack,)-254(and)-254(ther)19(efor)18(e)]TJ 1 0 0 1 150.705 394.54 Tm [(the)-250(additional)-250(memory)-250(is)-250(limited)-250(to)-250(the)-250(hack)-250(in)-250(which)-250(the)-250(r)18(ow)-250(appears.)]TJ 14.944 -12.021 Td [(The)-250(r)18(elevant)-250(data)-250(type)-250(is)]TJ/F145 9.9626 Tf 110.952 0 Td [(psb_T_hll_sparse_mat)]TJ/F84 9.9626 Tf 104.607 0 Td [(:)]TJ + 0.982 0 0 1 165.649 406.495 Tm [(W)56(ith)-254(this)-254(data)-254(str)8(uctur)19(e)-254(a)-254(very)-254(long)-254(r)18(ow)-254(only)-254(af)19(f)-1(ects)-254(one)-254(hack,)-254(and)-254(ther)19(efor)18(e)]TJ 1 0 0 1 150.705 394.54 Tm [(the)-250(additional)-250(memory)-250(is)-250(limited)-250(to)-250(the)-250(hack)-250(in)-250(which)-250(the)-250(r)18(ow)-250(appears.)]TJ 14.944 -12.021 Td [(The)-250(r)18(elevant)-250(data)-250(type)-250(is)]TJ/F147 9.9626 Tf 110.952 0 Td [(psb_T_hll_sparse_mat)]TJ/F84 9.9626 Tf 104.607 0 Td [(:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -31014,7 +31027,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 163.108 359.772 Td [(type)]TJ +/F235 8.9664 Tf 163.108 359.772 Td [(type)]TJ 0 g 0 G [(,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -31034,7 +31047,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 9.415 -10.959 Td [(!)]TJ +/F281 8.9664 Tf 9.415 -10.959 Td [(!)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G @@ -31049,7 +31062,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F233 8.9664 Tf 0 -10.959 Td [(integer)]TJ +/F235 8.9664 Tf 0 -10.959 Td [(integer)]TJ 0 g 0 G [(\050psb_ipk_\051)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -31088,12 +31101,12 @@ BT [-525(idiag\050:\051,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G - 18.829 -10.959 Td [(hkoffs\050:\051)]TJ/F148 5.1905 Tf -15.277 0 Td [(,)]TJ/F190 5.1905 Tf 0.61 0 Td [(!)]TJ + 18.829 -10.959 Td [(hkoffs\050:\051)]TJ/F152 5.1905 Tf -15.277 0 Td [(,)]TJ/F195 5.1905 Tf 0.61 0 Td [(!)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F233 8.9664 Tf -4.162 -10.959 Td [(real)]TJ +/F235 8.9664 Tf -4.162 -10.959 Td [(real)]TJ 0 g 0 G [(\050psb_dpk_\051,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -31128,7 +31141,7 @@ BT 0 0 1 rg 0 0 1 RG [-248(8)]TJ 0 g 0 G - [(\051)-248(has)-248(a)-247(2-dimensional)-248(array)]TJ/F145 9.9626 Tf 1 0 0 1 483.955 180.167 Tm [(AS)]TJ/F84 9.9626 Tf 0.98 0 0 1 150.705 168.212 Tm [(containing)-223(in)-222(each)-223(column)-223(the)-222(coef)18(\002cients)-223(along)-223(a)-222(diagonal)-223(of)-223(the)-222(matrix,)-229(and)-223(an)]TJ 0.98 0 0 1 150.705 156.257 Tm [(integer)-254(array)]TJ/F145 9.9626 Tf 1 0 0 1 208.91 156.257 Tm [(OFFSET)]TJ/F84 9.9626 Tf 0.98 0 0 1 242.771 156.257 Tm [(that)-254(determines)-254(wher)19(e)-254(each)-254(diagonal)-254(starts.)-316(The)-253(diagonals)]TJ 1 0 0 1 150.705 144.302 Tm [(in)]TJ/F145 9.9626 Tf 11.188 0 Td [(AS)]TJ/F84 9.9626 Tf 12.951 0 Td [(ar)18(e)-250(padded)-250(with)-250(zer)18(os)-250(as)-250(necessary)111(.)]TJ 1.01 0 0 1 165.649 132.281 Tm [(The)-248(code)-248(to)-249(compute)-248(the)-248(matrix-vector)-248(pr)17(oduct)]TJ/F78 9.9626 Tf 1 0 0 1 378.488 132.281 Tm [(y)]TJ/F192 10.3811 Tf 8.011 0 Td [(=)]TJ/F78 9.9626 Tf 11.598 0 Td [(A)-42(x)]TJ/F84 9.9626 Tf 1.01 0 0 1 413.412 132.281 Tm [(is)-248(shown)-249(in)-248(Alg.)]TJ + [(\051)-248(has)-248(a)-247(2-dimensional)-248(array)]TJ/F147 9.9626 Tf 1 0 0 1 483.955 180.167 Tm [(AS)]TJ/F84 9.9626 Tf 0.98 0 0 1 150.705 168.212 Tm [(containing)-223(in)-222(each)-223(column)-223(the)-222(coef)18(\002cients)-223(along)-223(a)-222(diagonal)-223(of)-223(the)-222(matrix,)-229(and)-223(an)]TJ 0.98 0 0 1 150.705 156.257 Tm [(integer)-254(array)]TJ/F147 9.9626 Tf 1 0 0 1 208.91 156.257 Tm [(OFFSET)]TJ/F84 9.9626 Tf 0.98 0 0 1 242.771 156.257 Tm [(that)-254(determines)-254(wher)19(e)-254(each)-254(diagonal)-254(starts.)-316(The)-253(diagonals)]TJ 1 0 0 1 150.705 144.302 Tm [(in)]TJ/F147 9.9626 Tf 11.188 0 Td [(AS)]TJ/F84 9.9626 Tf 12.951 0 Td [(ar)18(e)-250(padded)-250(with)-250(zer)18(os)-250(as)-250(necessary)111(.)]TJ 1.01 0 0 1 165.649 132.281 Tm [(The)-248(code)-248(to)-249(compute)-248(the)-248(matrix-vector)-248(pr)17(oduct)]TJ/F78 9.9626 Tf 1 0 0 1 378.488 132.281 Tm [(y)]TJ/F197 10.3811 Tf 8.011 0 Td [(=)]TJ/F78 9.9626 Tf 11.598 0 Td [(A)-42(x)]TJ/F84 9.9626 Tf 1.01 0 0 1 413.412 132.281 Tm [(is)-248(shown)-249(in)-248(Alg.)]TJ 0 0 1 rg 0 0 1 RG [-248(2)]TJ 0 g 0 G @@ -31140,20 +31153,20 @@ ET endstream endobj -2183 0 obj +2185 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../figures/hll.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2193 0 R +/PTEX.InfoDict 2195 0 R /BBox [0 0 494 214] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 2194 0 R ->>/Font << /R8 2195 0 R/R10 2196 0 R>> +/R7 2196 0 R +>>/Font << /R8 2197 0 R/R10 2198 0 R>> >> /Length 2880 /Filter /FlateDecode @@ -31175,7 +31188,7 @@ l Ů<řÇ×O?Ó‚•2.šg9_˙*×Ps źOřYT¨•®UĽv˛rĆşźÂăSóřbzh”8†Ń˝ÂXZĘü°ó`—ťúçźť†@8čwŕô)a˙…˘ŞküśËEvťëń»›šK°|dGs%´D ŹYšVňÔ@( ázé‹ńCü˙ć׬áż8Ç7•xVÇ‹ éŃi3kč4˝đw(Ölú¸V*|ik¬Ô¦âÓ*řkµřĺŔ—žŃŃ÷K•_á•Box:ŔŔŻżĆë‘HĎ+x´“ęĆi[‡;¬<žżÁ˛ĐůĹ+i ś°ůźř`8Ľ=˙ł·‡ endstream endobj -2198 0 obj +2200 0 obj << /Filter /FlateDecode /Length 214 @@ -31184,7 +31197,7 @@ stream xś]Á‚0 †ď{Š˝Á@˛ě˘ŁľŔťŮ±L<řö¶EOK šp#Ý&ÉQZ]ŚV«ÓqA« ×ÍĆăřÝn ¸G6ЍŃë4ť(„‡ ÇéÍÍé~ąR6čő&Ž{řaÎx˙.[±D˝ĐK·ČQ7idZń?:ő;> @@ -31266,7 +31279,7 @@ stream 0 g 0 G 0 g 0 G BT -/F84 9.9626 Tf 1.02 0 0 1 99.895 706.129 Tm [(memory)-286(write)-286(and)-286(two)-286(\003oating-point)-286(operations)-286(per)-286(inner)-287(iter)1(ation.)-427(The)-286(ac-)]TJ 0.984 0 0 1 99.895 694.174 Tm [(cesses)-255(to)]TJ/F145 9.9626 Tf 1 0 0 1 139.647 694.174 Tm [(AS)]TJ/F84 9.9626 Tf 0.984 0 0 1 152.603 694.174 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 171.695 694.174 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 179.42 694.174 Tm [(ar)18(e)-254(in)-255(strict)-254(sequential)-255(or)19(der)75(,)-255(ther)19(efor)18(e)-255(no)-254(indir)18(ect)-254(addr)18(essing)]TJ 1 0 0 1 99.895 682.219 Tm [(is)-250(r)18(equir)18(ed.)]TJ +/F84 9.9626 Tf 1.02 0 0 1 99.895 706.129 Tm [(memory)-286(write)-286(and)-286(two)-286(\003oating-point)-286(operations)-286(per)-286(inner)-287(iter)1(ation.)-427(The)-286(ac-)]TJ 0.984 0 0 1 99.895 694.174 Tm [(cesses)-255(to)]TJ/F147 9.9626 Tf 1 0 0 1 139.647 694.174 Tm [(AS)]TJ/F84 9.9626 Tf 0.984 0 0 1 152.603 694.174 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 171.695 694.174 Tm [(x)]TJ/F84 9.9626 Tf 0.984 0 0 1 179.42 694.174 Tm [(ar)18(e)-254(in)-255(strict)-254(sequential)-255(or)19(der)75(,)-255(ther)19(efor)18(e)-255(no)-254(indir)18(ect)-254(addr)18(essing)]TJ 1 0 0 1 99.895 682.219 Tm [(is)-250(r)18(equir)18(ed.)]TJ 0 g 0 G ET 1 0 0 1 146.769 562.733 cm @@ -31301,7 +31314,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 136.657 494.353 Td [(do)]TJ +/F235 8.9664 Tf 136.657 494.353 Td [(do)]TJ 0 g 0 G [-525(j)]TJ 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -31466,7 +31479,7 @@ BT 0 g 0 G 0 g 0 G 0 g 0 G - -97.969 -26.977 Td [(The)-250(r)18(elevant)-250(data)-250(type)-250(is)]TJ/F145 9.9626 Tf 110.953 0 Td [(psb_T_dia_sparse_mat)]TJ/F84 9.9626 Tf 104.607 0 Td [(:)]TJ + -97.969 -26.977 Td [(The)-250(r)18(elevant)-250(data)-250(type)-250(is)]TJ/F147 9.9626 Tf 110.953 0 Td [(psb_T_dia_sparse_mat)]TJ/F84 9.9626 Tf 104.607 0 Td [(:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -31480,7 +31493,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 112.299 313.591 Td [(type)]TJ +/F235 8.9664 Tf 112.299 313.591 Td [(type)]TJ 0 g 0 G [(,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -31500,7 +31513,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 9.414 -10.959 Td [(!)]TJ +/F281 8.9664 Tf 9.414 -10.959 Td [(!)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G @@ -31515,7 +31528,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG -/F233 8.9664 Tf 0 -21.918 Td [(integer)]TJ +/F235 8.9664 Tf 0 -21.918 Td [(integer)]TJ 0 g 0 G [(\050psb_ipk_\051,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -31582,20 +31595,20 @@ ET endstream endobj -2205 0 obj +2207 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/dia.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2214 0 R +/PTEX.InfoDict 2216 0 R /BBox [0 0 499 211] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 2215 0 R ->>/Font << /R8 2216 0 R/R10 2217 0 R>> +/R7 2217 0 R +>>/Font << /R8 2218 0 R/R10 2219 0 R>> >> /Length 2502 /Filter /FlateDecode @@ -31613,7 +31626,7 @@ $ rca™ń8ĎzD—‹bŤH…°d'Ą˘šĂ\LŔ/óą¬1ŮŚ,0F c¨)T#  7Ě,Ąj7ß%ÎĄšäŰć›RŮ6ßq4›/Éٸg]Ťĺű\¦—×\ĂW\¬ň+3,ęmó˝Lr´›ďJŽ·Í7ńĹÓĐČţ¶ů&ţ?9łů.y’QQШ» ťŃ•Ś&GsĽmľ7ě“LĎ‹I7=šűmóMąm›/]”o›/ÉvóUQxT»ů._ŕlŰć»ňâ›QUÔĚá×.Ü$Rg{çćńĘŘcé‚Lçúqçţú1ş‡Źç×><>ľbűJ:ŞŠŢËĂ_Ć˝:dş’·p>yşovŞ†çż‘ăżűîă·ĎÓ‘Żě-u„縑óßżË&& endstream endobj -2219 0 obj +2221 0 obj << /Filter /FlateDecode /Length 177 @@ -31623,7 +31636,7 @@ x ˘t s1#8ý÷ŐUĂlŽÉV‹"α’ˇCc×fÄb/Šű˛íôĺĹ9áŞ=Fp©śQbćxÖÁďŇŕCvQůđY˘ endstream endobj -2221 0 obj +2223 0 obj << /Filter /FlateDecode /Length 197 @@ -31632,7 +31645,7 @@ stream xś]M …÷ś‚FmL»qѦi{ÄÁ° ꢷď0j]Ľ Ěß#k»kçÝĘłGśÍ Vnť",ó đFçY^đÁ™ő ŠfŇeíM‡÷'ǰ;ßőŮ3żĐMľ×y€%hQűBIk?ü=Ő{AoŹĚ3“„ŔČd™+’+Äš°Jh ›ËŞP˛*â ±Q$ĆFźCŇÉÎą=7[ŚŕWňLž’çá÷-a©ŠŁŘsÇbă endstream endobj -2222 0 obj +2224 0 obj << /Filter /FlateDecode /Length1 9528 @@ -31666,7 +31679,7 @@ E óźó_ ů[ŘCŰ×,š0Z­ĘţŰ Ę+é×…¬Ăż]úi ^Ťgů\Ţo´ůČŻ›‰ň'/! `˘ěÁŠŕĆ?G˙Áž˙…&X‘łś‰çI,ŻÖĆĺbřQ ~Ľü÷8É߇ă­^×Ô:·éŰ š×ŐßZ˝pÎ"Ł'ŰőDĘrms#×0F~ť6McŁřÓ´ÎĺBi6U Żé˙đČľüŤ?ôčGNÔŮý_XR‡Ť=ńŃč—$=zC/]l»ĽĂQd‰E3ꊭ˙îi endstream endobj -2223 0 obj +2225 0 obj << /Filter /FlateDecode /Length1 4304 @@ -31692,7 +31705,7 @@ Hp —řď}Ř».|wy endstream endobj -2228 0 obj +2230 0 obj << /Length 9674 >> @@ -31700,7 +31713,7 @@ stream 0 g 0 G 0 g 0 G BT -/F84 9.9626 Tf 1.004 0 0 1 150.705 706.129 Tm [(the)-248(amount)-247(of)-248(needed)-248(padding;)-248(mor)18(eover)74(,)-248(while)-248(the)-248(DIA)-248(code)-247(is)-248(easily)-248(vector)18(-)]TJ 0.999 0 0 1 150.705 694.174 Tm [(ized,)-249(it)-249(does)-249(not)-249(necessarily)-250(make)-249(optimal)-249(use)-249(of)-249(the)-249(memory)-249(hierar)18(chy)111(.)-310(While)]TJ 0.99 0 0 1 150.406 682.219 Tm [(pr)18(ocessing)-252(each)-252(diagonal)-252(we)-252(ar)18(e)-252(updating)-252(entries)-252(in)-252(the)-252(output)-252(vector)]TJ/F145 9.9626 Tf 1 0 0 1 457.277 682.219 Tm [(y)]TJ/F84 9.9626 Tf 0.99 0 0 1 462.508 682.219 Tm [(,)-252(which)]TJ 0.98 0 0 1 150.705 670.263 Tm [(is)-248(then)-248(accessed)-247(multiple)-248(times;)-250(if)-248(the)-248(vector)]TJ/F145 9.9626 Tf 1 0 0 1 342.631 670.263 Tm [(y)]TJ/F84 9.9626 Tf 0.98 0 0 1 350.281 670.263 Tm [(is)-248(too)-248(lar)19(ge)-248(to)-248(r)19(emain)-248(in)-248(the)-248(cache)]TJ 1 0 0 1 150.705 658.308 Tm [(memory)111(,)-250(the)-250(associated)-250(cache)-250(miss)-250(penalty)-250(is)-250(paid)-250(multiple)-250(times.)]TJ 1.02 0 0 1 165.649 646.353 Tm [(The)]TJ/F78 9.9626 Tf 1.02 0 0 1 186.392 646.353 Tm [(hacked)-367(DIA)]TJ/F84 9.9626 Tf 1.02 0 0 1 239.757 646.353 Tm [(\050)]TJ/F75 9.9626 Tf 1.02 0 0 1 243.141 646.353 Tm [(HDIA)]TJ/F84 9.9626 Tf 1.02 0 0 1 271.929 646.353 Tm [(\051)-367(format)-368(was)-367(designed)-367(to)-367(contain)-368(the)-367(amount)-367(of)]TJ 1.02 0 0 1 150.406 634.398 Tm [(padding,)-346(by)-325(br)18(eaking)-326(the)-325(original)-326(matrix)-325(into)-326(equally)-325(sized)-325(gr)17(oups)-325(of)-326(r)18(ows)]TJ 1.013 0 0 1 150.376 622.443 Tm [(\050)]TJ/F78 9.9626 Tf 1.013 0 0 1 153.737 622.443 Tm [(hacks)]TJ/F84 9.9626 Tf 1.013 0 0 1 175.778 622.443 Tm [(\051,)-246(and)-245(then)-245(storing)-246(these)-245(gr)18(oups)-246(as)-245(independent)-246(matrices)-245(in)-245(DIA)-246(format.)]TJ 1.004 0 0 1 150.396 610.488 Tm [(This)-250(appr)18(oach)-250(is)-250(similar)-250(to)-250(that)-250(of)-250(HLL,)-250(and)-250(r)18(equir)18(es)-250(using)-250(an)-250(of)17(f)1(set)-250(vector)-250(for)]TJ 1.013 0 0 1 150.705 598.532 Tm [(each)-247(submatrix.)-306(Again,)-247(similarly)-246(to)-247(HLL,)-247(the)-247(various)-247(submatrices)-246(ar)17(e)-246(stacked)]TJ 0.991 0 0 1 150.705 586.577 Tm [(inside)-253(a)-252(linear)-253(array)-253(to)-252(impr)18(ove)-253(memory)-252(management.)-314(The)-253(fact)-252(that)-253(the)-253(matrix)]TJ 0.98 0 0 1 150.705 574.622 Tm [(is)-212(accessed)-212(in)-212(slices)-212(help)1(s)-212(in)-212(r)18(educing)-212(cache)-212(misses,)-220(especially)-212(r)18(egar)19(ding)-212(accesses)]TJ 1 0 0 1 150.705 562.667 Tm [(to)-250(the)-250(vector)]TJ/F145 9.9626 Tf 57.424 0 Td [(y)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 1.003 0 0 1 165.649 550.712 Tm [(An)-248(a)-1(ddi)1(tional)-249(vector)]TJ/F78 9.9626 Tf 1.003 0 0 1 259.673 550.712 Tm [(hackOffsets)]TJ/F84 9.9626 Tf 1.003 0 0 1 308.411 550.712 Tm [(is)-249(pr)18(ovided)-248(to)-249(complete)-248(the)-249(matrix)-248(format;)]TJ 0.999 0 0 1 150.705 538.757 Tm [(given)-250(that)]TJ/F78 9.9626 Tf 0.999 0 0 1 197.561 538.757 Tm [(hackSize)]TJ/F84 9.9626 Tf 0.999 0 0 1 234.51 538.757 Tm [(is)-250(the)-251(number)-250(of)-251(r)18(ows)-250(of)-251(each)-250(hack,)-251(the)]TJ/F78 9.9626 Tf 0.999 0 0 1 408.824 538.757 Tm [(hackOffsets)]TJ/F84 9.9626 Tf 0.999 0 0 1 457.388 538.757 Tm [(vector)-250(is)]TJ 1.013 0 0 1 150.705 526.801 Tm [(made)-246(by)-246(an)-246(array)-246(of)]TJ/F192 10.3811 Tf 1 0 0 1 242.857 526.801 Tm [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(m)]TJ/F84 9.9626 Tf 8 0 Td [(/)]TJ/F78 9.9626 Tf 6.336 0 Td [(h)-40(a)-25(c)-25(k)-30(S)-18(i)-32(z)-25(e)]TJ/F192 10.3811 Tf 36.682 0 Td [(\051)-209(+)]TJ/F84 9.9626 Tf 1.013 0 0 1 314.476 526.801 Tm [(1)-246(elements,)-246(pointing)-246(to)-246(the)-246(\002rst)-246(diagonal)]TJ 0.98 0 0 1 150.705 514.846 Tm [(of)18(fset)-215(of)-215(a)-214(submatrix)-215(inside)-215(the)-215(stacked)]TJ/F78 9.9626 Tf 0.98 0 0 1 318.648 514.846 Tm [(offsets)]TJ/F84 9.9626 Tf 0.98 0 0 1 345.153 514.846 Tm [(buf)18(fers,)-223(plus)-215(an)-214(additional)-215(element)]TJ 0.98 0 0 1 150.705 502.891 Tm [(equal)-226(to)-225(the)-226(number)-225(of)-226(nonzer)18(o)-225(diagonals)-226(in)-226(the)-225(whole)-226(matrix.)-306(W)94(e)-226(thus)-226(have)-225(the)]TJ 0.98 0 0 1 150.406 490.936 Tm [(pr)18(operty)-202(that)-202(the)-201(number)-202(of)-202(diagonals)-202(of)-202(the)]TJ/F78 9.9626 Tf 1 0 0 1 341.485 490.936 Tm [(k)]TJ/F84 9.9626 Tf 0.98 0 0 1 346.083 490.936 Tm [(-th)]TJ/F78 9.9626 Tf 0.98 0 0 1 360.171 490.936 Tm [(hack)]TJ/F84 9.9626 Tf 0.98 0 0 1 379.718 490.936 Tm [(is)-202(given)-202(by)]TJ/F78 9.9626 Tf 0.98 0 0 1 427.587 490.936 Tm [(hackOffsets[k+1])]TJ 1 0 0 1 149.709 478.981 Tm [(-)-250(hackOffsets[k])]TJ/F84 9.9626 Tf 62.983 0 Td [(.)]TJ +/F84 9.9626 Tf 1.004 0 0 1 150.705 706.129 Tm [(the)-248(amount)-247(of)-248(needed)-248(padding;)-248(mor)18(eover)74(,)-248(while)-248(the)-248(DIA)-248(code)-247(is)-248(easily)-248(vector)18(-)]TJ 0.999 0 0 1 150.705 694.174 Tm [(ized,)-249(it)-249(does)-249(not)-249(necessarily)-250(make)-249(optimal)-249(use)-249(of)-249(the)-249(memory)-249(hierar)18(chy)111(.)-310(While)]TJ 0.99 0 0 1 150.406 682.219 Tm [(pr)18(ocessing)-252(each)-252(diagonal)-252(we)-252(ar)18(e)-252(updating)-252(entries)-252(in)-252(the)-252(output)-252(vector)]TJ/F147 9.9626 Tf 1 0 0 1 457.277 682.219 Tm [(y)]TJ/F84 9.9626 Tf 0.99 0 0 1 462.508 682.219 Tm [(,)-252(which)]TJ 0.98 0 0 1 150.705 670.263 Tm [(is)-248(then)-248(accessed)-247(multiple)-248(times;)-250(if)-248(the)-248(vector)]TJ/F147 9.9626 Tf 1 0 0 1 342.631 670.263 Tm [(y)]TJ/F84 9.9626 Tf 0.98 0 0 1 350.281 670.263 Tm [(is)-248(too)-248(lar)19(ge)-248(to)-248(r)19(emain)-248(in)-248(the)-248(cache)]TJ 1 0 0 1 150.705 658.308 Tm [(memory)111(,)-250(the)-250(associated)-250(cache)-250(miss)-250(penalty)-250(is)-250(paid)-250(multiple)-250(times.)]TJ 1.02 0 0 1 165.649 646.353 Tm [(The)]TJ/F78 9.9626 Tf 1.02 0 0 1 186.392 646.353 Tm [(hacked)-367(DIA)]TJ/F84 9.9626 Tf 1.02 0 0 1 239.757 646.353 Tm [(\050)]TJ/F75 9.9626 Tf 1.02 0 0 1 243.141 646.353 Tm [(HDIA)]TJ/F84 9.9626 Tf 1.02 0 0 1 271.929 646.353 Tm [(\051)-367(format)-368(was)-367(designed)-367(to)-367(contain)-368(the)-367(amount)-367(of)]TJ 1.02 0 0 1 150.406 634.398 Tm [(padding,)-346(by)-325(br)18(eaking)-326(the)-325(original)-326(matrix)-325(into)-326(equally)-325(sized)-325(gr)17(oups)-325(of)-326(r)18(ows)]TJ 1.013 0 0 1 150.376 622.443 Tm [(\050)]TJ/F78 9.9626 Tf 1.013 0 0 1 153.737 622.443 Tm [(hacks)]TJ/F84 9.9626 Tf 1.013 0 0 1 175.778 622.443 Tm [(\051,)-246(and)-245(then)-245(storing)-246(these)-245(gr)18(oups)-246(as)-245(independent)-246(matrices)-245(in)-245(DIA)-246(format.)]TJ 1.004 0 0 1 150.396 610.488 Tm [(This)-250(appr)18(oach)-250(is)-250(similar)-250(to)-250(that)-250(of)-250(HLL,)-250(and)-250(r)18(equir)18(es)-250(using)-250(an)-250(of)17(f)1(set)-250(vector)-250(for)]TJ 1.013 0 0 1 150.705 598.532 Tm [(each)-247(submatrix.)-306(Again,)-247(similarly)-246(to)-247(HLL,)-247(the)-247(various)-247(submatrices)-246(ar)17(e)-246(stacked)]TJ 0.991 0 0 1 150.705 586.577 Tm [(inside)-253(a)-252(linear)-253(array)-253(to)-252(impr)18(ove)-253(memory)-252(management.)-314(The)-253(fact)-252(that)-253(the)-253(matrix)]TJ 0.98 0 0 1 150.705 574.622 Tm [(is)-212(accessed)-212(in)-212(slices)-212(help)1(s)-212(in)-212(r)18(educing)-212(cache)-212(misses,)-220(especially)-212(r)18(egar)19(ding)-212(accesses)]TJ 1 0 0 1 150.705 562.667 Tm [(to)-250(the)-250(vector)]TJ/F147 9.9626 Tf 57.424 0 Td [(y)]TJ/F84 9.9626 Tf 5.23 0 Td [(.)]TJ 1.003 0 0 1 165.649 550.712 Tm [(An)-248(a)-1(ddi)1(tional)-249(vector)]TJ/F78 9.9626 Tf 1.003 0 0 1 259.673 550.712 Tm [(hackOffsets)]TJ/F84 9.9626 Tf 1.003 0 0 1 308.411 550.712 Tm [(is)-249(pr)18(ovided)-248(to)-249(complete)-248(the)-249(matrix)-248(format;)]TJ 0.999 0 0 1 150.705 538.757 Tm [(given)-250(that)]TJ/F78 9.9626 Tf 0.999 0 0 1 197.561 538.757 Tm [(hackSize)]TJ/F84 9.9626 Tf 0.999 0 0 1 234.51 538.757 Tm [(is)-250(the)-251(number)-250(of)-251(r)18(ows)-250(of)-251(each)-250(hack,)-251(the)]TJ/F78 9.9626 Tf 0.999 0 0 1 408.824 538.757 Tm [(hackOffsets)]TJ/F84 9.9626 Tf 0.999 0 0 1 457.388 538.757 Tm [(vector)-250(is)]TJ 1.013 0 0 1 150.705 526.801 Tm [(made)-246(by)-246(an)-246(array)-246(of)]TJ/F197 10.3811 Tf 1 0 0 1 242.857 526.801 Tm [(\050)]TJ/F78 9.9626 Tf 4.274 0 Td [(m)]TJ/F84 9.9626 Tf 8 0 Td [(/)]TJ/F78 9.9626 Tf 6.336 0 Td [(h)-40(a)-25(c)-25(k)-30(S)-18(i)-32(z)-25(e)]TJ/F197 10.3811 Tf 36.682 0 Td [(\051)-209(+)]TJ/F84 9.9626 Tf 1.013 0 0 1 314.476 526.801 Tm [(1)-246(elements,)-246(pointing)-246(to)-246(the)-246(\002rst)-246(diagonal)]TJ 0.98 0 0 1 150.705 514.846 Tm [(of)18(fset)-215(of)-215(a)-214(submatrix)-215(inside)-215(the)-215(stacked)]TJ/F78 9.9626 Tf 0.98 0 0 1 318.648 514.846 Tm [(offsets)]TJ/F84 9.9626 Tf 0.98 0 0 1 345.153 514.846 Tm [(buf)18(fers,)-223(plus)-215(an)-214(additional)-215(element)]TJ 0.98 0 0 1 150.705 502.891 Tm [(equal)-226(to)-225(the)-226(number)-225(of)-226(nonzer)18(o)-225(diagonals)-226(in)-226(the)-225(whole)-226(matrix.)-306(W)94(e)-226(thus)-226(have)-225(the)]TJ 0.98 0 0 1 150.406 490.936 Tm [(pr)18(operty)-202(that)-202(the)-201(number)-202(of)-202(diagonals)-202(of)-202(the)]TJ/F78 9.9626 Tf 1 0 0 1 341.485 490.936 Tm [(k)]TJ/F84 9.9626 Tf 0.98 0 0 1 346.083 490.936 Tm [(-th)]TJ/F78 9.9626 Tf 0.98 0 0 1 360.171 490.936 Tm [(hack)]TJ/F84 9.9626 Tf 0.98 0 0 1 379.718 490.936 Tm [(is)-202(given)-202(by)]TJ/F78 9.9626 Tf 0.98 0 0 1 427.587 490.936 Tm [(hackOffsets[k+1])]TJ 1 0 0 1 149.709 478.981 Tm [(-)-250(hackOffsets[k])]TJ/F84 9.9626 Tf 62.983 0 Td [(.)]TJ 0 g 0 G ET 1 0 0 1 197.579 370.389 cm @@ -31720,7 +31733,7 @@ BT 0 g 0 G 0 g 0 G 0 g 0 G - -33.102 -23.941 Td [(The)-250(r)18(elevant)-250(data)-250(type)-250(is)]TJ/F145 9.9626 Tf 110.952 0 Td [(psb_T_hdia_sparse_mat)]TJ/F84 9.9626 Tf 109.837 0 Td [(:)]TJ + -33.102 -23.941 Td [(The)-250(r)18(elevant)-250(data)-250(type)-250(is)]TJ/F147 9.9626 Tf 110.952 0 Td [(psb_T_hdia_sparse_mat)]TJ/F84 9.9626 Tf 109.837 0 Td [(:)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG ET @@ -31734,7 +31747,7 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 163.108 301.945 Td [(type)]TJ +/F235 8.9664 Tf 163.108 301.945 Td [(type)]TJ 0 g 0 G [-525(pm)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -31819,7 +31832,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.38 0.63 0.69 rg 0.38 0.63 0.69 RG -/F279 8.9664 Tf 9.415 -10.959 Td [(!)]TJ +/F281 8.9664 Tf 9.415 -10.959 Td [(!)]TJ 0 g 0 G 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G @@ -31834,7 +31847,7 @@ BT 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F233 8.9664 Tf 0 -21.918 Td [(type)]TJ +/F235 8.9664 Tf 0 -21.918 Td [(type)]TJ 0 g 0 G [(\050pm\051,)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -31919,22 +31932,22 @@ ET endstream endobj -2224 0 obj +2226 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../figures/hdia.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 2231 0 R +/PTEX.InfoDict 2233 0 R /BBox [0 0 556 211] /Resources << /ProcSet [ /PDF /ImageC /Text ] /ExtGState << -/R7 2232 0 R +/R7 2234 0 R >>/XObject << -/R8 2233 0 R ->>/Font << /R9 2234 0 R/R11 2235 0 R>> +/R8 2235 0 R +>>/Font << /R9 2236 0 R/R11 2237 0 R>> >> /Length 3027 /Filter /FlateDecode @@ -31951,7 +31964,7 @@ mC ŕŐŔ–ĹčÚWšŮ‡ńZ1m੆CË8?¬ąe—¶Ühc·ćÖó57‘-7ÖhhlABg–›Ä ŽQ ěYP׾ÖĚĆZkađfĂŢ%÷1#YSńüőtĂIoĂ`·FzT#Ô:ž©""ŇŇw+ ÄÁíj€eqA#X#͸g =Đ·‰ 1€cP€D-¶,ĆZűJ3k-Í^Zn˘‘ĐrśłABĎqLË-‡9źć|S,›cŐphbABg–›Ä ‰Z lYڵö•fF]æf^ň¨gÚ8Ĺł7ŐÄŠýlT3"ޱ ÚżţV)Z?·ľăfĚşˇ1Ö°X]]ůLČż†ŮYáKjϢÖKedj›<ź®đ/o•˘‡‹í—çŰ>úéĆĹPó\+użUóq™ż¨ŮńĽ(q|KŕcÉtőĽh|¤;ÓDź8TÜč3¦ĆĂYË«HŚÇŠ”Ű+˝ť’¬Q‹‰n¨ű±űěţǨ١kŁ1*R$˘™®`jš“†Ňč •f‘Ş,vU#žĹűŘ}JoŇ|íYťÖ„5%sMč%Çxé?k‚SW-"RMXQ»Ö„G°Ć|d®ÉŐ§Ô„ě5kšéŠjŇăéŐwjt·n˛¨VUÁne4;Řrô!”6t„A· ˇY!éeB±:łhŤ ¬yâJŕ×:ůD#†R[Dď°a§Ě–Isµ<H«eŐđdˇ čm8Ď% P§ő§#Ţ´Ď·mŕxGĽÎZË‘ýn9s…#Ŕjő§á‚N5‚ĚcG,r©™®Çum”Ň|űi¬˝–»8ľPĂôE!řć*]Šâ ŰćGR,_#ů¬ÝÍ?fCésöâÄńßâÝ´Ď·}$˝”Ç®`Ly®…ČR+Q—ć#­ÍKłŮzT&zµ)ŠH_x6Ł=“ĄO±ôů˘Og„ixLEđ8•É«KŽcł2žŮOO¦áU ˇňjSĂJ[ęYâE,l^yÖŃge”´Ř˘ţđ™‰o˛ }DęBtôú§ëĎÎ'şÖŃ"ý¨†ů‡Ç +Š}–é愆̶fbôBÍŹŹ™ţďńůřÍĂí›7ýéxřń6żqžßź`Ú dśöPŔ‡çŰť{őđŹ›Ďř%Ą^Ťw¬ă_îÎ…)ôzÜăÉŽ-îú ĘŞ#Oú! smčéRßa÷ý»;˙ęľaĂě\ş«Żţúđ‡Ű=–ŚsŘﮆßÝݦ@ďwńŐ}Íî.ă?„NC ¬Ô,PŚ{¤ …áŰÔ…öJź«Ť÷ôş8¬ĺą×ô}Ż ĎHzw÷ű׿ýăń§ďľ{‹ŔU­áîۇ}±ŁÇŔ„nbURA4ŰăÇą@7ú#Ăׯ"íW}Ľ{{Ľ~ófZÍÍă‡ęđg)wćG?Üţ4ş‘ endstream endobj -2233 0 obj +2235 0 obj << /Subtype /Image /ColorSpace /DeviceGray @@ -31970,7 +31983,7 @@ stream ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ 0l?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü@ endstream endobj -2237 0 obj +2239 0 obj << /Filter /FlateDecode /Length 177 @@ -31979,7 +31992,7 @@ stream xś]Ź1Ă EwNÁ €0´C”%]24ŞÚ^€€‰ˇ·/8I‡¶ülë›őĂmđ.SöHAż SëĽI°†-i ĚÎŃPăt>ł^T$¬ż«řţD eěÎŁZ€=Ĺ;b×č``ŤJCR~Ňr޵ÖvĽůÉ]0Ůcł1ç%“VˇKUPĽ JĽvęęáęđ4Dő–řŚo ÍjĎyř}C¬*Z‚|ďY› endstream endobj -2239 0 obj +2241 0 obj << /Filter /FlateDecode /Length 213 @@ -31991,7 +32004,7 @@ e ¦Y$ŕĹcÂß ó”yJę Űál« endstream endobj -2240 0 obj +2242 0 obj << /Filter /FlateDecode /Length1 10604 @@ -32025,7 +32038,7 @@ b YŃFťŹ.ţŤÎ X°bÍŇÎąKoßľ¦ůúÚş9 ô,p÷xý˙ÍgĽ˛xή`Ś˙K)ÄDŔl;Áy‚jö8Ô­¨[ß˙áí°×ţŇď=2ŘdqmŚëřᏓžôčŐđĂú‹;­EĆP%ď÷˙=X endstream endobj -2241 0 obj +2243 0 obj << /Filter /FlateDecode /Length1 5080 @@ -32046,7 +32059,7 @@ Y2 pÓÇ}3ÇóyŘŕ.”pÄ€×ĎôÁ›Źý˙âqÁ%§t1Ţ®onb©łećŃM¸éĂáË0÷ǵ3kçéD ^đoŰw# çô°'Ě?¸˛rtĺÁ3÷9#§ţëňľW|ŢŢ|Ź˘űďš«A†űD¸źŕűe0ąbÎxőŻ`}u¤¸%üžÄ÷÷đý\3“ąŮZź­ľeÓ?Ľ|Odň?¸Żđo2őU3đÜÖ˙ă˙­đ˙ÍWúßÓ )' endstream endobj -2244 0 obj +2246 0 obj << /Length 1097 >> @@ -32065,7 +32078,7 @@ Q 0 g 0 G 0.56 0.13 0.00 rg 0.56 0.13 0.00 RG BT -/F233 8.9664 Tf 121.713 701.446 Td [(integer)]TJ +/F235 8.9664 Tf 121.713 701.446 Td [(integer)]TJ 0 g 0 G [(\050psb_long_int_k_\051)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -32106,7 +32119,7 @@ ET endstream endobj -2248 0 obj +2250 0 obj << /Length 7873 >> @@ -32144,12 +32157,12 @@ Q 0 g 0 G 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG BT -/F233 8.9664 Tf 172.523 370.757 Td [(call)]TJ +/F235 8.9664 Tf 172.523 370.757 Td [(call)]TJ 0 g 0 G [-525(psb_spmm\050alpha,a,x,beta,y,desc_a,info\051)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 150.286 347.275 Tm [(will)-258(transpar)18(ently)-258(and)-258(automatically)-257(be)-258(performed)-258(on)-258(the)-257(GPU)-258(whenever)-258(all)]TJ 1.014 0 0 1 150.705 335.32 Tm [(thr)18(ee)-246(data)-245(inputs)]TJ/F145 9.9626 Tf 1 0 0 1 228.932 335.32 Tm [(a)]TJ/F84 9.9626 Tf 1.014 0 0 1 234.162 335.32 Tm [(,)]TJ/F145 9.9626 Tf 1 0 0 1 239.17 335.32 Tm [(x)]TJ/F84 9.9626 Tf 1.014 0 0 1 246.88 335.32 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 266.463 335.32 Tm [(y)]TJ/F84 9.9626 Tf 1.014 0 0 1 274.173 335.32 Tm [(ar)18(e)-246(GPU-enabled.)-305(If)-246(a)-245(pr)18(ogram)-246(makes)-245(many)-246(such)]TJ 1 0 0 1 150.705 323.364 Tm [(calls)-250(sequentially)111(,)-250(then)]TJ +/F84 9.9626 Tf 1.02 0 0 1 150.286 347.275 Tm [(will)-258(transpar)18(ently)-258(and)-258(automatically)-257(be)-258(performed)-258(on)-258(the)-257(GPU)-258(whenever)-258(all)]TJ 1.014 0 0 1 150.705 335.32 Tm [(thr)18(ee)-246(data)-245(inputs)]TJ/F147 9.9626 Tf 1 0 0 1 228.932 335.32 Tm [(a)]TJ/F84 9.9626 Tf 1.014 0 0 1 234.162 335.32 Tm [(,)]TJ/F147 9.9626 Tf 1 0 0 1 239.17 335.32 Tm [(x)]TJ/F84 9.9626 Tf 1.014 0 0 1 246.88 335.32 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 266.463 335.32 Tm [(y)]TJ/F84 9.9626 Tf 1.014 0 0 1 274.173 335.32 Tm [(ar)18(e)-246(GPU-enabled.)-305(If)-246(a)-245(pr)18(ogram)-246(makes)-245(many)-246(such)]TJ 1 0 0 1 150.705 323.364 Tm [(calls)-250(sequentially)111(,)-250(then)]TJ 0 g 0 G 13.888 -18.472 Td [(\225)]TJ 0 g 0 G @@ -32157,15 +32170,15 @@ BT 0 g 0 G -104.945 -19.198 Td [(\225)]TJ 0 g 0 G - 1.02 0 0 1 175.611 261.784 Tm [(Subsequent)-308(kernel)-308(invocations)-308(involving)-307(the)-308(same)-308(vector)-308(will)-308(\002nd)-308(the)]TJ 1 0 0 1 175.611 249.828 Tm [(data)-250(on)-250(the)-250(GPU)-250(side)-250(so)-250(that)-250(they)-250(will)-250(r)8(un)-250(at)-250(full)-250(speed.)]TJ 1.016 0 0 1 150.705 231.356 Tm [(For)-246(all)-245(invocations)-246(after)-246(the)-245(\002rst)-246(the)-246(only)-245(data)-246(that)-246(will)-245(have)-246(to)-246(be)-246(transferr)18(ed)]TJ 1.02 0 0 1 150.705 219.401 Tm [(to/fr)18(om)-254(the)-254(main)-253(memory)-254(will)-254(be)-253(the)-254(scalars)]TJ/F145 9.9626 Tf 1 0 0 1 355.319 219.401 Tm [(alpha)]TJ/F84 9.9626 Tf 1.02 0 0 1 384.049 219.401 Tm [(and)]TJ/F145 9.9626 Tf 1 0 0 1 403.83 219.401 Tm [(beta)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.752 219.401 Tm [(,)-256(and)-253(the)-254(r)18(eturn)]TJ 1 0 0 1 150.705 207.446 Tm [(code)]TJ/F145 9.9626 Tf 23.213 0 Td [(info)]TJ/F84 9.9626 Tf 20.921 0 Td [(.)]TJ + 1.02 0 0 1 175.611 261.784 Tm [(Subsequent)-308(kernel)-308(invocations)-308(involving)-307(the)-308(same)-308(vector)-308(will)-308(\002nd)-308(the)]TJ 1 0 0 1 175.611 249.828 Tm [(data)-250(on)-250(the)-250(GPU)-250(side)-250(so)-250(that)-250(they)-250(will)-250(r)8(un)-250(at)-250(full)-250(speed.)]TJ 1.016 0 0 1 150.705 231.356 Tm [(For)-246(all)-245(invocations)-246(after)-246(the)-245(\002rst)-246(the)-246(only)-245(data)-246(that)-246(will)-245(have)-246(to)-246(be)-246(transferr)18(ed)]TJ 1.02 0 0 1 150.705 219.401 Tm [(to/fr)18(om)-254(the)-254(main)-253(memory)-254(will)-254(be)-253(the)-254(scalars)]TJ/F147 9.9626 Tf 1 0 0 1 355.319 219.401 Tm [(alpha)]TJ/F84 9.9626 Tf 1.02 0 0 1 384.049 219.401 Tm [(and)]TJ/F147 9.9626 Tf 1 0 0 1 403.83 219.401 Tm [(beta)]TJ/F84 9.9626 Tf 1.02 0 0 1 424.752 219.401 Tm [(,)-256(and)-253(the)-254(r)18(eturn)]TJ 1 0 0 1 150.705 207.446 Tm [(code)]TJ/F147 9.9626 Tf 23.213 0 Td [(info)]TJ/F84 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G /F75 9.9626 Tf -44.134 -20.101 Td [(V)111(ectors:)]TJ 0 g 0 G -/F84 9.9626 Tf 1.003 0 0 1 191.073 187.345 Tm [(The)-248(data)-248(type)]TJ/F145 9.9626 Tf 1 0 0 1 254.2 187.345 Tm [(psb_T_vect_gpu)]TJ/F84 9.9626 Tf 1.003 0 0 1 329.904 187.345 Tm [(pr)18(ovides)-248(a)-248(GPU-enabled)-248(extension)-249(of)]TJ 1.02 0 0 1 175.611 175.39 Tm [(the)-261(inner)-261(type)]TJ/F145 9.9626 Tf 1 0 0 1 241.259 175.39 Tm [(psb_T_base_vect_type)]TJ/F84 9.9626 Tf 1.02 0 0 1 345.866 175.39 Tm [(,)-265(and)-260(must)-261(be)-261(used)-261(together)-260(with)]TJ 1.02 0 0 1 175.611 163.435 Tm [(the)-274(other)-275(inner)-274(matrix)-274(type)-275(to)-274(make)-274(full)-275(use)-274(of)-274(the)-275(G)1(PU)-275(computational)]TJ 1 0 0 1 175.611 151.479 Tm [(capabilities;)]TJ +/F84 9.9626 Tf 1.003 0 0 1 191.073 187.345 Tm [(The)-248(data)-248(type)]TJ/F147 9.9626 Tf 1 0 0 1 254.2 187.345 Tm [(psb_T_vect_gpu)]TJ/F84 9.9626 Tf 1.003 0 0 1 329.904 187.345 Tm [(pr)18(ovides)-248(a)-248(GPU-enabled)-248(extension)-249(of)]TJ 1.02 0 0 1 175.611 175.39 Tm [(the)-261(inner)-261(type)]TJ/F147 9.9626 Tf 1 0 0 1 241.259 175.39 Tm [(psb_T_base_vect_type)]TJ/F84 9.9626 Tf 1.02 0 0 1 345.866 175.39 Tm [(,)-265(and)-260(must)-261(be)-261(used)-261(together)-260(with)]TJ 1.02 0 0 1 175.611 163.435 Tm [(the)-274(other)-275(inner)-274(matrix)-274(type)-275(to)-274(make)-274(full)-275(use)-274(of)-274(the)-275(G)1(PU)-275(computational)]TJ 1 0 0 1 175.611 151.479 Tm [(capabilities;)]TJ 0 g 0 G /F75 9.9626 Tf -24.906 -19.198 Td [(CSR:)]TJ 0 g 0 G -/F84 9.9626 Tf 0.982 0 0 1 178.341 132.281 Tm [(The)-255(data)-256(type)]TJ/F145 9.9626 Tf 1 0 0 1 240.361 132.281 Tm [(psb_T_csrg_sparse_mat)]TJ/F84 9.9626 Tf 0.982 0 0 1 352.697 132.281 Tm [(pr)18(ovides)-255(an)-256(interface)-255(to)-255(the)-256(GPU)]TJ 1 0 0 1 175.333 120.326 Tm [(version)-250(of)-250(CSR)-250(available)-250(in)-250(the)-250(NVIDIA)-250(CuSP)92(ARSE)-250(library;)]TJ +/F84 9.9626 Tf 0.982 0 0 1 178.341 132.281 Tm [(The)-255(data)-256(type)]TJ/F147 9.9626 Tf 1 0 0 1 240.361 132.281 Tm [(psb_T_csrg_sparse_mat)]TJ/F84 9.9626 Tf 0.982 0 0 1 352.697 132.281 Tm [(pr)18(ovides)-255(an)-256(interface)-255(to)-255(the)-256(GPU)]TJ 1 0 0 1 175.333 120.326 Tm [(version)-250(of)-250(CSR)-250(available)-250(in)-250(the)-250(NVIDIA)-250(CuSP)92(ARSE)-250(library;)]TJ 0 g 0 G 139.755 -29.888 Td [(178)]TJ 0 g 0 G @@ -32173,7 +32186,7 @@ ET endstream endobj -2252 0 obj +2254 0 obj << /Length 5844 >> @@ -32184,19 +32197,19 @@ stream BT /F75 9.9626 Tf 99.895 706.129 Td [(HYB:)]TJ 0 g 0 G -/F84 9.9626 Tf 0.98 0 0 1 128.647 706.129 Tm [(The)-251(data)-252(type)]TJ/F145 9.9626 Tf 1 0 0 1 190.423 706.129 Tm [(psb_T_hybg_sparse_mat)]TJ/F84 9.9626 Tf 0.98 0 0 1 302.715 706.129 Tm [(pr)18(ovides)-251(an)-251(interface)-252(to)-251(the)-252(HYB)]TJ 1.02 0 0 1 124.802 694.174 Tm [(GPU)-295(storage)-296(available)-295(in)-295(the)-296(NVIDIA)-295(CuSP)90(ARSE)-295(library)109(.)-455(The)-296(internal)]TJ 1.001 0 0 1 124.802 682.219 Tm [(str)8(uctur)18(e)-249(is)-249(opaque,)-249(hence)-249(the)-250(h)1(ost)-250(side)-249(is)-249(just)-249(CSR;)-249(the)-249(HYB)-249(data)-249(format)]TJ 1 0 0 1 124.802 670.263 Tm [(is)-250(only)-250(available)-250(up)-250(to)-250(CUDA)-250(version)-250(10.)]TJ +/F84 9.9626 Tf 0.98 0 0 1 128.647 706.129 Tm [(The)-251(data)-252(type)]TJ/F147 9.9626 Tf 1 0 0 1 190.423 706.129 Tm [(psb_T_hybg_sparse_mat)]TJ/F84 9.9626 Tf 0.98 0 0 1 302.715 706.129 Tm [(pr)18(ovides)-251(an)-251(interface)-252(to)-251(the)-252(HYB)]TJ 1.02 0 0 1 124.802 694.174 Tm [(GPU)-295(storage)-296(available)-295(in)-295(the)-296(NVIDIA)-295(CuSP)90(ARSE)-295(library)109(.)-455(The)-296(internal)]TJ 1.001 0 0 1 124.802 682.219 Tm [(str)8(uctur)18(e)-249(is)-249(opaque,)-249(hence)-249(the)-250(h)1(ost)-250(side)-249(is)-249(just)-249(CSR;)-249(the)-249(HYB)-249(data)-249(format)]TJ 1 0 0 1 124.802 670.263 Tm [(is)-250(only)-250(available)-250(up)-250(to)-250(CUDA)-250(version)-250(10.)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -20.26 Td [(ELL:)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 125.32 650.003 Tm [(The)-265(data)-265(type)]TJ/F145 9.9626 Tf 1 0 0 1 190.038 650.003 Tm [(psb_T_elg_sparse_mat)]TJ/F84 9.9626 Tf 1.02 0 0 1 297.34 650.003 Tm [(pr)18(ovides)-266(an)-265(interface)-265(to)-265(the)-265(ELL-)]TJ 1 0 0 1 124.802 638.048 Tm [(P)92(ACK)-250(implementation)-250(fr)18(om)-250(SPGPU;)]TJ +/F84 9.9626 Tf 1.02 0 0 1 125.32 650.003 Tm [(The)-265(data)-265(type)]TJ/F147 9.9626 Tf 1 0 0 1 190.038 650.003 Tm [(psb_T_elg_sparse_mat)]TJ/F84 9.9626 Tf 1.02 0 0 1 297.34 650.003 Tm [(pr)18(ovides)-266(an)-265(interface)-265(to)-265(the)-265(ELL-)]TJ 1 0 0 1 124.802 638.048 Tm [(P)92(ACK)-250(implementation)-250(fr)18(om)-250(SPGPU;)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -20.261 Td [(HLL:)]TJ 0 g 0 G -/F84 9.9626 Tf 0.98 0 0 1 127.532 617.787 Tm [(The)-194(data)-194(type)]TJ/F145 9.9626 Tf 1 0 0 1 187.621 617.787 Tm [(psb_T_hlg_sparse_mat)]TJ/F84 9.9626 Tf 0.98 0 0 1 294.121 617.787 Tm [(pr)18(ovides)-193(an)-194(interface)-194(to)-194(the)-194(Hacked)]TJ 1 0 0 1 124.802 605.832 Tm [(ELLP)92(ACK)-250(implementation)-250(fr)18(om)-250(SPGPU;)]TJ +/F84 9.9626 Tf 0.98 0 0 1 127.532 617.787 Tm [(The)-194(data)-194(type)]TJ/F147 9.9626 Tf 1 0 0 1 187.621 617.787 Tm [(psb_T_hlg_sparse_mat)]TJ/F84 9.9626 Tf 0.98 0 0 1 294.121 617.787 Tm [(pr)18(ovides)-193(an)-194(interface)-194(to)-194(the)-194(Hacked)]TJ 1 0 0 1 124.802 605.832 Tm [(ELLP)92(ACK)-250(implementation)-250(fr)18(om)-250(SPGPU;)]TJ 0 g 0 G /F75 9.9626 Tf -24.907 -20.261 Td [(HDIA:)]TJ 0 g 0 G -/F84 9.9626 Tf 1.02 0 0 1 135.282 585.571 Tm [(The)-298(data)-297(type)]TJ/F145 9.9626 Tf 1 0 0 1 200.986 585.571 Tm [(psb_T_hdiag_sparse_mat)]TJ/F84 9.9626 Tf 1.02 0 0 1 319.077 585.571 Tm [(pr)18(ovides)-298(an)-298(in)1(terface)-298(to)-298(the)]TJ 1 0 0 1 124.802 573.616 Tm [(Hacked)-250(DIAgonals)-250(implementation)-250(fr)18(om)-250(SPGPU;)]TJ/F75 14.3462 Tf -24.907 -34.763 Td [(13)-1000(CUDA)-250(Environment)-250(Routines)]TJ/F75 11.9552 Tf 0 -24.857 Td [(psb)]TJ +/F84 9.9626 Tf 1.02 0 0 1 135.282 585.571 Tm [(The)-298(data)-297(type)]TJ/F147 9.9626 Tf 1 0 0 1 200.986 585.571 Tm [(psb_T_hdiag_sparse_mat)]TJ/F84 9.9626 Tf 1.02 0 0 1 319.077 585.571 Tm [(pr)18(ovides)-298(an)-298(in)1(terface)-298(to)-298(the)]TJ 1 0 0 1 124.802 573.616 Tm [(Hacked)-250(DIAgonals)-250(implementation)-250(fr)18(om)-250(SPGPU;)]TJ/F75 14.3462 Tf -24.907 -34.763 Td [(13)-1000(CUDA)-250(Environment)-250(Routines)]TJ/F75 11.9552 Tf 0 -24.857 Td [(psb)]TJ ET q 1 0 0 1 120.53 514.195 cm @@ -32212,7 +32225,7 @@ Q BT /F75 11.9552 Tf 154.315 513.996 Td [(init)-250(\227)-250(Initializes)-250(PSBLAS-CUDA)-250(environment)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -54.42 -19.126 Td [(call)]TJ +/F147 9.9626 Tf -54.42 -19.126 Td [(call)]TJ 0 g 0 G [-525(psb_cuda_init\050ctxt)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG @@ -32233,9 +32246,9 @@ BT 0 g 0 G /F84 9.9626 Tf 34.311 0 Td [(ID)-250(of)-250(CUDA)-250(device)-250(to)-250(attach)-250(to.)]TJ -9.404 -11.956 Td [(Scope:)]TJ/F75 9.9626 Tf 31.432 0 Td [(local)]TJ/F84 9.9626 Tf 21.579 0 Td [(.)]TJ -53.32 -11.955 Td [(T)90(ype:)]TJ/F75 9.9626 Tf 27.088 0 Td [(optional)]TJ/F84 9.9626 Tf 38.187 0 Td [(.)]TJ -64.966 -11.955 Td [(Intent:)]TJ/F75 9.9626 Tf 31.8 0 Td [(in)]TJ/F84 9.9626 Tf 9.405 0 Td [(.)]TJ 1.003 0 0 1 124.802 364.098 Tm [(Speci\002ed)-249(as:)-308(an)-249(integer)-248(value.)-558(Default:)-308(use)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf 1 0 0 1 317.836 364.098 Tm [(mod)]TJ +/F147 9.9626 Tf 1 0 0 1 317.836 364.098 Tm [(mod)]TJ 0 g 0 G - [(\050iam,ngpu\051)]TJ/F84 9.9626 Tf 1.003 0 0 1 388.314 364.098 Tm [(wher)18(e)]TJ/F145 9.9626 Tf 1 0 0 1 418.287 364.098 Tm [(iam)]TJ/F84 9.9626 Tf 1.003 0 0 1 436.462 364.098 Tm [(is)]TJ 1.011 0 0 1 124.802 352.143 Tm [(the)-247(calling)-248(pr)18(ocess)-247(index)-248(and)]TJ/F145 9.9626 Tf 1 0 0 1 256.205 352.143 Tm [(ngpu)]TJ/F84 9.9626 Tf 1.011 0 0 1 279.618 352.143 Tm [(is)-247(the)-248(total)-247(number)-248(of)-247(CUDA)-247(devices)]TJ 1 0 0 1 124.802 340.187 Tm [(available)-250(on)-250(the)-250(curr)18(ent)-250(node.)]TJ/F75 11.9552 Tf -24.907 -20.176 Td [(Notes)]TJ + [(\050iam,ngpu\051)]TJ/F84 9.9626 Tf 1.003 0 0 1 388.314 364.098 Tm [(wher)18(e)]TJ/F147 9.9626 Tf 1 0 0 1 418.287 364.098 Tm [(iam)]TJ/F84 9.9626 Tf 1.003 0 0 1 436.462 364.098 Tm [(is)]TJ 1.011 0 0 1 124.802 352.143 Tm [(the)-247(calling)-248(pr)18(ocess)-247(index)-248(and)]TJ/F147 9.9626 Tf 1 0 0 1 256.205 352.143 Tm [(ngpu)]TJ/F84 9.9626 Tf 1.011 0 0 1 279.618 352.143 Tm [(is)-247(the)-248(total)-247(number)-248(of)-247(CUDA)-247(devices)]TJ 1 0 0 1 124.802 340.187 Tm [(available)-250(on)-250(the)-250(curr)18(ent)-250(node.)]TJ/F75 11.9552 Tf -24.907 -20.176 Td [(Notes)]TJ 0 g 0 G /F84 9.9626 Tf 12.454 -20.177 Td [(1.)]TJ 0 g 0 G @@ -32255,7 +32268,7 @@ Q BT /F75 11.9552 Tf 154.315 270.224 Td [(exit)-250(\227)-250(Exit)-250(from)-250(PSBLAS-CUDA)-250(environment)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -54.42 -19.126 Td [(call)]TJ +/F147 9.9626 Tf -54.42 -19.126 Td [(call)]TJ 0 g 0 G [-525(psb_cuda_exit\050ctxt\051)]TJ/F84 9.9626 Tf 14.944 -22.254 Td [(This)-250(subr)18(outine)-250(exits)-250(fr)18(om)-250(the)-250(PSBLAS)-250(CUDA)-250(context.)]TJ 0 g 0 G @@ -32276,7 +32289,7 @@ ET endstream endobj -2257 0 obj +2259 0 obj << /Length 5432 >> @@ -32300,7 +32313,7 @@ Q BT /F75 11.9552 Tf 205.125 706.129 Td [(DeviceSync)-250(\227)-250(Synchronize)-250(CUDA)-250(device)]TJ 0.00 0.44 0.13 rg 0.00 0.44 0.13 RG -/F145 9.9626 Tf -54.42 -19.65 Td [(call)]TJ +/F147 9.9626 Tf -54.42 -19.65 Td [(call)]TJ 0 g 0 G [-525(psb_cuda_DeviceSync\050\051)]TJ/F84 9.9626 Tf 0.98 0 0 1 165.649 663.146 Tm [(This)-249(subr)18(out)1(ine)-249(ensur)18(es)-249(that)-249(all)-249(pr)19(eviosly)-249(invoked)-249(kernels,)-250(i.e.)-315(all)-249(invocation)]TJ 1 0 0 1 150.705 651.191 Tm [(of)-250(CUDA-side)-250(code,)-250(have)-250(completed.)]TJ/F75 11.9552 Tf 0 -31.147 Td [(psb)]TJ ET @@ -32316,7 +32329,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 205.125 620.044 Td [(getDeviceCount)]TJ/F145 9.9626 Tf -54.42 -19.65 Td [(ngpus)]TJ +/F75 11.9552 Tf 205.125 620.044 Td [(getDeviceCount)]TJ/F147 9.9626 Tf -54.42 -19.65 Td [(ngpus)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32338,7 +32351,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 205.125 545.914 Td [(getDevice)]TJ/F145 9.9626 Tf -54.42 -19.65 Td [(dev)]TJ +/F75 11.9552 Tf 205.125 545.914 Td [(getDevice)]TJ/F147 9.9626 Tf -54.42 -19.65 Td [(dev)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32360,7 +32373,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 205.125 471.784 Td [(setDevice)]TJ/F145 9.9626 Tf -54.42 -19.65 Td [(info)]TJ +/F75 11.9552 Tf 205.125 471.784 Td [(setDevice)]TJ/F147 9.9626 Tf -54.42 -19.65 Td [(info)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32382,7 +32395,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 205.125 397.654 Td [(DeviceHasUV)129(A)]TJ/F145 9.9626 Tf -54.42 -19.65 Td [(hasUva)]TJ +/F75 11.9552 Tf 205.125 397.654 Td [(DeviceHasUV)129(A)]TJ/F147 9.9626 Tf -54.42 -19.65 Td [(hasUva)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32404,7 +32417,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 205.125 311.569 Td [(W)74(arpSize)]TJ/F145 9.9626 Tf -54.42 -19.65 Td [(nw)]TJ +/F75 11.9552 Tf 205.125 311.569 Td [(W)74(arpSize)]TJ/F147 9.9626 Tf -54.42 -19.65 Td [(nw)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32426,7 +32439,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 205.125 237.439 Td [(MultiProcessors)]TJ/F145 9.9626 Tf -54.42 -19.65 Td [(nmp)]TJ +/F75 11.9552 Tf 205.125 237.439 Td [(MultiProcessors)]TJ/F147 9.9626 Tf -54.42 -19.65 Td [(nmp)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32448,7 +32461,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 205.125 163.309 Td [(MaxThreadsPerMP)]TJ/F145 9.9626 Tf -54.42 -19.65 Td [(nt)]TJ +/F75 11.9552 Tf 205.125 163.309 Td [(MaxThreadsPerMP)]TJ/F147 9.9626 Tf -54.42 -19.65 Td [(nt)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32464,7 +32477,7 @@ ET endstream endobj -2261 0 obj +2263 0 obj << /Length 2725 >> @@ -32486,7 +32499,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 154.315 706.129 Td [(MaxRegistersPerBlock)]TJ/F145 9.9626 Tf -54.42 -18.964 Td [(nr)]TJ +/F75 11.9552 Tf 154.315 706.129 Td [(MaxRegistersPerBlock)]TJ/F147 9.9626 Tf -54.42 -18.964 Td [(nr)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32508,7 +32521,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 154.315 636.114 Td [(MemoryClockRate)]TJ/F145 9.9626 Tf -54.42 -18.964 Td [(cl)]TJ +/F75 11.9552 Tf 154.315 636.114 Td [(MemoryClockRate)]TJ/F147 9.9626 Tf -54.42 -18.964 Td [(cl)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32530,7 +32543,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 154.315 566.1 Td [(MemoryBusW)37(idth)]TJ/F145 9.9626 Tf -54.42 -18.964 Td [(nb)]TJ +/F75 11.9552 Tf 154.315 566.1 Td [(MemoryBusW)37(idth)]TJ/F147 9.9626 Tf -54.42 -18.964 Td [(nb)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32552,7 +32565,7 @@ q []0 d 0 J 0.398 w 0 0 m 3.587 0 l S Q BT -/F75 11.9552 Tf 154.315 496.085 Td [(MemoryPeakBandwidth)]TJ/F145 9.9626 Tf -54.42 -18.964 Td [(bw)]TJ +/F75 11.9552 Tf 154.315 496.085 Td [(MemoryPeakBandwidth)]TJ/F147 9.9626 Tf -54.42 -18.964 Td [(bw)]TJ 0.73 0.73 0.73 rg 0.73 0.73 0.73 RG 0 g 0 G 0.40 0.40 0.40 rg 0.40 0.40 0.40 RG @@ -32568,7 +32581,7 @@ ET endstream endobj -2266 0 obj +2268 0 obj << /Length 81 >> @@ -32583,7 +32596,7 @@ ET endstream endobj -2270 0 obj +2272 0 obj << /Length 7303 >> @@ -32647,59 +32660,68 @@ ET endstream endobj -2176 0 obj +2173 0 obj << /Type /ObjStm /N 100 -/First 989 -/Length 11972 ->> -stream -2171 0 2172 180 2174 223 2175 428 2177 717 2179 938 2136 1151 2161 1297 2146 1355 2162 1414 -2163 1473 2164 1532 2165 1591 2166 1650 2167 1709 2168 1768 2169 1826 2157 1885 2170 1944 2158 2002 -2188 2197 2193 2354 2194 2534 2195 2577 2196 2880 2197 3085 2199 3298 2184 3519 2185 3666 2186 3813 -2190 3960 2191 4019 2192 4077 2187 4136 2208 4346 2214 4485 2215 4665 2216 4708 2217 4909 2218 5204 -2220 5425 2206 5638 2210 5784 2203 5842 2211 5901 2204 5959 2212 6018 2207 6076 2227 6230 2231 6369 -2232 6549 2234 6592 2235 6799 2236 7100 2238 7321 2225 7534 2229 7681 2230 7740 2226 7799 2243 7981 -2245 8099 2242 8157 2247 8240 2249 8358 614 8417 2246 8475 2251 8598 2253 8716 618 8774 622 8830 -2254 8887 626 8945 2250 9002 2256 9097 2258 9215 630 9274 634 9332 638 9390 642 9448 646 9506 -650 9564 654 9622 658 9680 2255 9738 2260 9833 2262 9951 662 10009 666 10066 670 10123 674 10180 -2259 10237 2265 10332 2267 10450 2264 10509 2269 10577 2271 10695 2272 10753 2273 10811 2014 10869 958 10926 -% 2171 0 obj +/First 990 +/Length 12055 +>> +stream +2161 0 2174 139 2175 319 2177 362 2178 567 2179 856 2181 1077 2138 1290 2163 1436 2148 1494 +2164 1553 2165 1612 2166 1671 2167 1730 2168 1789 2169 1848 2170 1907 2171 1965 2159 2024 2172 2083 +2160 2141 2190 2336 2195 2493 2196 2673 2197 2716 2198 3019 2199 3224 2201 3437 2186 3658 2187 3805 +2188 3952 2192 4099 2193 4158 2194 4216 2189 4275 2210 4485 2216 4624 2217 4804 2218 4847 2219 5048 +2220 5343 2222 5564 2208 5777 2212 5923 2205 5981 2213 6040 2206 6098 2214 6157 2209 6215 2229 6369 +2233 6508 2234 6688 2236 6731 2237 6938 2238 7239 2240 7460 2227 7673 2231 7820 2232 7879 2228 7938 +2245 8120 2247 8238 2244 8296 2249 8379 2251 8497 614 8556 2248 8614 2253 8737 2255 8855 618 8913 +622 8969 2256 9026 626 9084 2252 9141 2258 9236 2260 9354 630 9413 634 9471 638 9529 642 9587 +646 9645 650 9703 654 9761 658 9819 2257 9877 2262 9972 2264 10090 662 10148 666 10205 670 10262 +674 10319 2261 10376 2267 10471 2269 10589 2266 10648 2271 10716 2273 10834 2274 10892 2275 10950 2015 11008 +% 2161 0 obj +<< +/Type /Page +/Contents 2162 0 R +/Resources 2160 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 2119 0 R +/Annots [ 2138 0 R ] +>> +% 2174 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133928+01'00') /ModDate (D:20140329133928+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2172 0 obj +% 2175 0 obj << /Type /ExtGState /OPM 1 >> -% 2174 0 obj +% 2177 0 obj << /BaseFont /YAZDUX+TimesNewRomanPSMT -/FontDescriptor 2177 0 R -/ToUnicode 2178 0 R +/FontDescriptor 2179 0 R +/ToUnicode 2180 0 R /Type /Font /FirstChar 48 /LastChar 57 /Widths [ 500 500 500 500 500 0 0 500 500 500] /Subtype /TrueType >> -% 2175 0 obj +% 2178 0 obj << /BaseFont /NDNSMY+FreeSerif -/FontDescriptor 2179 0 R -/ToUnicode 2180 0 R +/FontDescriptor 2181 0 R +/ToUnicode 2182 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 0 0 0 0 0 0 0 385 0 0 0 0 0 0 0 667 529 0 0 0 0 0 701] /Subtype /TrueType >> -% 2177 0 obj +% 2179 0 obj << /Type /FontDescriptor /FontName /YAZDUX+TimesNewRomanPSMT @@ -32711,9 +32733,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2181 0 R +/FontFile2 2183 0 R >> -% 2179 0 obj +% 2181 0 obj << /Type /FontDescriptor /FontName /NDNSMY+FreeSerif @@ -32725,9 +32747,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2182 0 R +/FontFile2 2184 0 R >> -% 2136 0 obj +% 2138 0 obj << /Type /Annot /Subtype /Link @@ -32735,104 +32757,104 @@ stream /Rect [384.587 583.767 391.56 595.827] /A << /S /GoTo /D (figure.5) >> >> -% 2161 0 obj -<< -/D [2159 0 R /XYZ 98.895 753.953 null] ->> -% 2146 0 obj -<< -/D [2159 0 R /XYZ 389.217 621.446 null] ->> -% 2162 0 obj +% 2163 0 obj << -/D [2159 0 R /XYZ 114.839 563.747 null] +/D [2161 0 R /XYZ 98.895 753.953 null] >> -% 2163 0 obj +% 2148 0 obj << -/D [2159 0 R /XYZ 114.839 567.034 null] +/D [2161 0 R /XYZ 389.217 621.446 null] >> % 2164 0 obj << -/D [2159 0 R /XYZ 114.839 556.075 null] +/D [2161 0 R /XYZ 114.839 563.747 null] >> % 2165 0 obj << -/D [2159 0 R /XYZ 114.839 545.116 null] +/D [2161 0 R /XYZ 114.839 567.034 null] >> % 2166 0 obj << -/D [2159 0 R /XYZ 114.839 534.158 null] +/D [2161 0 R /XYZ 114.839 556.075 null] >> % 2167 0 obj << -/D [2159 0 R /XYZ 114.839 523.199 null] +/D [2161 0 R /XYZ 114.839 545.116 null] >> % 2168 0 obj << -/D [2159 0 R /XYZ 114.839 512.24 null] +/D [2161 0 R /XYZ 114.839 534.158 null] >> % 2169 0 obj << -/D [2159 0 R /XYZ 114.839 501.281 null] +/D [2161 0 R /XYZ 114.839 523.199 null] >> -% 2157 0 obj +% 2170 0 obj << -/D [2159 0 R /XYZ 114.839 481.057 null] +/D [2161 0 R /XYZ 114.839 512.24 null] >> -% 2170 0 obj +% 2171 0 obj << -/D [2159 0 R /XYZ 99.895 294.895 null] +/D [2161 0 R /XYZ 114.839 501.281 null] >> -% 2158 0 obj +% 2159 0 obj << -/Font << /F84 687 0 R /F75 685 0 R /F233 1044 0 R /F279 1815 0 R /F78 686 0 R /F192 942 0 R /F190 941 0 R /F145 940 0 R >> -/XObject << /Im7 2135 0 R >> +/D [2161 0 R /XYZ 114.839 481.057 null] +>> +% 2172 0 obj +<< +/D [2161 0 R /XYZ 99.895 294.895 null] +>> +% 2160 0 obj +<< +/Font << /F84 687 0 R /F75 685 0 R /F235 1045 0 R /F281 1816 0 R /F78 686 0 R /F197 943 0 R /F195 942 0 R /F147 941 0 R >> +/XObject << /Im7 2137 0 R >> /ProcSet [ /PDF /Text ] >> -% 2188 0 obj +% 2190 0 obj << /Type /Page -/Contents 2189 0 R -/Resources 2187 0 R +/Contents 2191 0 R +/Resources 2189 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2117 0 R -/Annots [ 2184 0 R 2185 0 R 2186 0 R ] +/Parent 2119 0 R +/Annots [ 2186 0 R 2187 0 R 2188 0 R ] >> -% 2193 0 obj +% 2195 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133928+01'00') /ModDate (D:20140329133928+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2194 0 obj +% 2196 0 obj << /Type /ExtGState /OPM 1 >> -% 2195 0 obj +% 2197 0 obj << /BaseFont /MCSFLP+FreeSerif -/FontDescriptor 2197 0 R -/ToUnicode 2198 0 R +/FontDescriptor 2199 0 R +/ToUnicode 2200 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 670 0 610 564 0 714 0 385 709 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2196 0 obj +% 2198 0 obj << /BaseFont /AJRCAD+TimesNewRomanPSMT -/FontDescriptor 2199 0 R -/ToUnicode 2200 0 R +/FontDescriptor 2201 0 R +/ToUnicode 2202 0 R /Type /Font /FirstChar 48 /LastChar 57 /Widths [ 500 500 500 500 500 0 0 500 500 500] /Subtype /TrueType >> -% 2197 0 obj +% 2199 0 obj << /Type /FontDescriptor /FontName /MCSFLP+FreeSerif @@ -32844,9 +32866,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2201 0 R +/FontFile2 2203 0 R >> -% 2199 0 obj +% 2201 0 obj << /Type /FontDescriptor /FontName /AJRCAD+TimesNewRomanPSMT @@ -32858,9 +32880,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2202 0 R +/FontFile2 2204 0 R >> -% 2184 0 obj +% 2186 0 obj << /Type /Annot /Subtype /Link @@ -32868,7 +32890,7 @@ stream /Rect [453.687 426.731 460.661 438.791] /A << /S /GoTo /D (figure.5) >> >> -% 2185 0 obj +% 2187 0 obj << /Type /Annot /Subtype /Link @@ -32876,7 +32898,7 @@ stream /Rect [354.541 176.362 361.575 188.421] /A << /S /GoTo /D (figure.8) >> >> -% 2186 0 obj +% 2188 0 obj << /Type /Annot /Subtype /Link @@ -32884,68 +32906,68 @@ stream /Rect [487.118 128.475 494.142 140.535] /A << /S /GoTo /D (algocf.2) >> >> -% 2190 0 obj +% 2192 0 obj << -/D [2188 0 R /XYZ 149.705 753.953 null] +/D [2190 0 R /XYZ 149.705 753.953 null] >> -% 2191 0 obj +% 2193 0 obj << -/D [2188 0 R /XYZ 447.542 464.41 null] +/D [2190 0 R /XYZ 447.542 464.41 null] >> -% 2192 0 obj +% 2194 0 obj << -/D [2188 0 R /XYZ 150.705 211.214 null] +/D [2190 0 R /XYZ 150.705 211.214 null] >> -% 2187 0 obj +% 2189 0 obj << -/Font << /F84 687 0 R /F78 686 0 R /F192 942 0 R /F145 940 0 R /F233 1044 0 R /F279 1815 0 R /F148 1490 0 R /F190 941 0 R /F75 685 0 R >> -/XObject << /Im8 2183 0 R >> +/Font << /F84 687 0 R /F78 686 0 R /F197 943 0 R /F147 941 0 R /F235 1045 0 R /F281 1816 0 R /F152 1491 0 R /F195 942 0 R /F75 685 0 R >> +/XObject << /Im8 2185 0 R >> /ProcSet [ /PDF /Text ] >> -% 2208 0 obj +% 2210 0 obj << /Type /Page -/Contents 2209 0 R -/Resources 2207 0 R +/Contents 2211 0 R +/Resources 2209 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2213 0 R -/Annots [ 2206 0 R ] +/Parent 2215 0 R +/Annots [ 2208 0 R ] >> -% 2214 0 obj +% 2216 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133927+01'00') /ModDate (D:20140329133927+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2215 0 obj +% 2217 0 obj << /Type /ExtGState /OPM 1 >> -% 2216 0 obj +% 2218 0 obj << /BaseFont /BNRUAU+TimesNewRomanPSMT -/FontDescriptor 2218 0 R -/ToUnicode 2219 0 R +/FontDescriptor 2220 0 R +/ToUnicode 2221 0 R /Type /Font /FirstChar 45 /LastChar 55 /Widths [ 333 0 0 500 500 500 0 0 0 0 500] /Subtype /TrueType >> -% 2217 0 obj +% 2219 0 obj << /BaseFont /ICFUKB+FreeSerif -/FontDescriptor 2220 0 R -/ToUnicode 2221 0 R +/FontDescriptor 2222 0 R +/ToUnicode 2223 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 0 0 610 564 0 0 0 0 0 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2218 0 obj +% 2220 0 obj << /Type /FontDescriptor /FontName /BNRUAU+TimesNewRomanPSMT @@ -32957,9 +32979,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2222 0 R +/FontFile2 2224 0 R >> -% 2220 0 obj +% 2222 0 obj << /Type /FontDescriptor /FontName /ICFUKB+FreeSerif @@ -32971,9 +32993,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2223 0 R +/FontFile2 2225 0 R >> -% 2206 0 obj +% 2208 0 obj << /Type /Annot /Subtype /Link @@ -32981,76 +33003,76 @@ stream /Rect [371.292 537.01 378.265 549.069] /A << /S /GoTo /D (figure.5) >> >> -% 2210 0 obj +% 2212 0 obj << -/D [2208 0 R /XYZ 98.895 753.953 null] +/D [2210 0 R /XYZ 98.895 753.953 null] >> -% 2203 0 obj +% 2205 0 obj << -/D [2208 0 R /XYZ 396.732 574.688 null] +/D [2210 0 R /XYZ 396.732 574.688 null] >> -% 2211 0 obj +% 2213 0 obj << -/D [2208 0 R /XYZ 99.895 526.012 null] +/D [2210 0 R /XYZ 99.895 526.012 null] >> -% 2204 0 obj +% 2206 0 obj << -/D [2208 0 R /XYZ 114.839 383.469 null] +/D [2210 0 R /XYZ 114.839 383.469 null] >> -% 2212 0 obj +% 2214 0 obj << -/D [2208 0 R /XYZ 99.895 187.185 null] +/D [2210 0 R /XYZ 99.895 187.185 null] >> -% 2207 0 obj +% 2209 0 obj << -/Font << /F84 687 0 R /F145 940 0 R /F233 1044 0 R /F75 685 0 R /F279 1815 0 R >> -/XObject << /Im9 2205 0 R >> +/Font << /F84 687 0 R /F147 941 0 R /F235 1045 0 R /F75 685 0 R /F281 1816 0 R >> +/XObject << /Im9 2207 0 R >> /ProcSet [ /PDF /Text ] >> -% 2227 0 obj +% 2229 0 obj << /Type /Page -/Contents 2228 0 R -/Resources 2226 0 R +/Contents 2230 0 R +/Resources 2228 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2213 0 R -/Annots [ 2225 0 R ] +/Parent 2215 0 R +/Annots [ 2227 0 R ] >> -% 2231 0 obj +% 2233 0 obj << /Producer (GPL Ghostscript 9.10) /CreationDate (D:20140329133928+01'00') /ModDate (D:20140329133928+01'00') /Creator (cairo 1.13.1 \(http://cairographics.org\)) >> -% 2232 0 obj +% 2234 0 obj << /Type /ExtGState /OPM 1 >> -% 2234 0 obj +% 2236 0 obj << /BaseFont /PBIKKX+TimesNewRomanPSMT -/FontDescriptor 2236 0 R -/ToUnicode 2237 0 R +/FontDescriptor 2238 0 R +/ToUnicode 2239 0 R /Type /Font /FirstChar 45 /LastChar 55 /Widths [ 333 0 0 500 500 0 500 500 500 500 500] /Subtype /TrueType >> -% 2235 0 obj +% 2237 0 obj << /BaseFont /ZBHFTP+FreeSerif -/FontDescriptor 2238 0 R -/ToUnicode 2239 0 R +/FontDescriptor 2240 0 R +/ToUnicode 2241 0 R /Type /Font /FirstChar 32 /LastChar 89 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 670 0 610 564 0 714 0 0 709 0 0 0 724 0 0 667 529 606 0 0 0 0 701] /Subtype /TrueType >> -% 2236 0 obj +% 2238 0 obj << /Type /FontDescriptor /FontName /PBIKKX+TimesNewRomanPSMT @@ -33062,9 +33084,9 @@ stream /ItalicAngle 0 /StemV 95 /MissingWidth 777 -/FontFile2 2240 0 R +/FontFile2 2242 0 R >> -% 2238 0 obj +% 2240 0 obj << /Type /FontDescriptor /FontName /ZBHFTP+FreeSerif @@ -33076,9 +33098,9 @@ stream /ItalicAngle 0 /StemV 105 /MissingWidth 600 -/FontFile2 2241 0 R +/FontFile2 2243 0 R >> -% 2225 0 obj +% 2227 0 obj << /Type /Annot /Subtype /Link @@ -33086,222 +33108,218 @@ stream /Rect [440.392 344.666 447.366 356.726] /A << /S /GoTo /D (figure.5) >> >> -% 2229 0 obj +% 2231 0 obj << -/D [2227 0 R /XYZ 149.705 753.953 null] +/D [2229 0 R /XYZ 149.705 753.953 null] >> -% 2230 0 obj +% 2232 0 obj << -/D [2227 0 R /XYZ 447.542 382.345 null] +/D [2229 0 R /XYZ 447.542 382.345 null] >> -% 2226 0 obj +% 2228 0 obj << -/Font << /F84 687 0 R /F145 940 0 R /F78 686 0 R /F75 685 0 R /F192 942 0 R /F233 1044 0 R /F279 1815 0 R >> -/XObject << /Im10 2224 0 R >> +/Font << /F84 687 0 R /F147 941 0 R /F78 686 0 R /F75 685 0 R /F197 943 0 R /F235 1045 0 R /F281 1816 0 R >> +/XObject << /Im10 2226 0 R >> /ProcSet [ /PDF /Text ] >> -% 2243 0 obj +% 2245 0 obj << /Type /Page -/Contents 2244 0 R -/Resources 2242 0 R +/Contents 2246 0 R +/Resources 2244 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2213 0 R +/Parent 2215 0 R >> -% 2245 0 obj +% 2247 0 obj << -/D [2243 0 R /XYZ 98.895 753.953 null] +/D [2245 0 R /XYZ 98.895 753.953 null] >> -% 2242 0 obj +% 2244 0 obj << -/Font << /F233 1044 0 R /F84 687 0 R >> +/Font << /F235 1045 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2247 0 obj +% 2249 0 obj << /Type /Page -/Contents 2248 0 R -/Resources 2246 0 R +/Contents 2250 0 R +/Resources 2248 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2213 0 R +/Parent 2215 0 R >> -% 2249 0 obj +% 2251 0 obj << -/D [2247 0 R /XYZ 149.705 753.953 null] +/D [2249 0 R /XYZ 149.705 753.953 null] >> % 614 0 obj << -/D [2247 0 R /XYZ 150.705 716.092 null] +/D [2249 0 R /XYZ 150.705 716.092 null] >> -% 2246 0 obj +% 2248 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F233 1044 0 R /F145 940 0 R /F78 686 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F235 1045 0 R /F147 941 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2251 0 obj +% 2253 0 obj << /Type /Page -/Contents 2252 0 R -/Resources 2250 0 R +/Contents 2254 0 R +/Resources 2252 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2213 0 R +/Parent 2215 0 R >> -% 2253 0 obj +% 2255 0 obj << -/D [2251 0 R /XYZ 98.895 753.953 null] +/D [2253 0 R /XYZ 98.895 753.953 null] >> % 618 0 obj << -/D [2251 0 R /XYZ 99.895 554.06 null] +/D [2253 0 R /XYZ 99.895 554.06 null] >> % 622 0 obj << -/D [2251 0 R /XYZ 99.895 527.944 null] +/D [2253 0 R /XYZ 99.895 527.944 null] >> -% 2254 0 obj +% 2256 0 obj << -/D [2251 0 R /XYZ 99.895 315.727 null] +/D [2253 0 R /XYZ 99.895 315.727 null] >> % 626 0 obj << -/D [2251 0 R /XYZ 99.895 284.171 null] +/D [2253 0 R /XYZ 99.895 284.171 null] >> -% 2250 0 obj +% 2252 0 obj << -/Font << /F75 685 0 R /F84 687 0 R /F145 940 0 R >> +/Font << /F75 685 0 R /F84 687 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2256 0 obj +% 2258 0 obj << /Type /Page -/Contents 2257 0 R -/Resources 2255 0 R +/Contents 2259 0 R +/Resources 2257 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2213 0 R +/Parent 2215 0 R >> -% 2258 0 obj +% 2260 0 obj << -/D [2256 0 R /XYZ 149.705 753.953 null] +/D [2258 0 R /XYZ 149.705 753.953 null] >> % 630 0 obj << -/D [2256 0 R /XYZ 150.705 720.077 null] +/D [2258 0 R /XYZ 150.705 720.077 null] >> % 634 0 obj << -/D [2256 0 R /XYZ 150.705 633.991 null] +/D [2258 0 R /XYZ 150.705 633.991 null] >> % 638 0 obj << -/D [2256 0 R /XYZ 150.705 559.861 null] +/D [2258 0 R /XYZ 150.705 559.861 null] >> % 642 0 obj << -/D [2256 0 R /XYZ 150.705 485.732 null] +/D [2258 0 R /XYZ 150.705 485.732 null] >> % 646 0 obj << -/D [2256 0 R /XYZ 150.705 411.602 null] +/D [2258 0 R /XYZ 150.705 411.602 null] >> % 650 0 obj << -/D [2256 0 R /XYZ 150.705 325.516 null] +/D [2258 0 R /XYZ 150.705 325.516 null] >> % 654 0 obj << -/D [2256 0 R /XYZ 150.705 251.386 null] +/D [2258 0 R /XYZ 150.705 251.386 null] >> % 658 0 obj << -/D [2256 0 R /XYZ 150.705 177.256 null] +/D [2258 0 R /XYZ 150.705 177.256 null] >> -% 2255 0 obj +% 2257 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2260 0 obj +% 2262 0 obj << /Type /Page -/Contents 2261 0 R -/Resources 2259 0 R +/Contents 2263 0 R +/Resources 2261 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2263 0 R +/Parent 2265 0 R >> -% 2262 0 obj +% 2264 0 obj << -/D [2260 0 R /XYZ 98.895 753.953 null] +/D [2262 0 R /XYZ 98.895 753.953 null] >> % 662 0 obj << -/D [2260 0 R /XYZ 99.895 720.077 null] +/D [2262 0 R /XYZ 99.895 720.077 null] >> % 666 0 obj << -/D [2260 0 R /XYZ 99.895 650.062 null] +/D [2262 0 R /XYZ 99.895 650.062 null] >> % 670 0 obj << -/D [2260 0 R /XYZ 99.895 580.047 null] +/D [2262 0 R /XYZ 99.895 580.047 null] >> % 674 0 obj << -/D [2260 0 R /XYZ 99.895 510.033 null] +/D [2262 0 R /XYZ 99.895 510.033 null] >> -% 2259 0 obj +% 2261 0 obj << -/Font << /F75 685 0 R /F145 940 0 R /F84 687 0 R >> +/Font << /F75 685 0 R /F147 941 0 R /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2265 0 obj +% 2267 0 obj << /Type /Page -/Contents 2266 0 R -/Resources 2264 0 R +/Contents 2268 0 R +/Resources 2266 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2263 0 R +/Parent 2265 0 R >> -% 2267 0 obj +% 2269 0 obj << -/D [2265 0 R /XYZ 149.705 753.953 null] +/D [2267 0 R /XYZ 149.705 753.953 null] >> -% 2264 0 obj +% 2266 0 obj << /Font << /F84 687 0 R >> /ProcSet [ /PDF /Text ] >> -% 2269 0 obj +% 2271 0 obj << /Type /Page -/Contents 2270 0 R -/Resources 2268 0 R +/Contents 2272 0 R +/Resources 2270 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2263 0 R +/Parent 2265 0 R >> -% 2271 0 obj -<< -/D [2269 0 R /XYZ 98.895 753.953 null] ->> -% 2272 0 obj +% 2273 0 obj << -/D [2269 0 R /XYZ 99.895 723.717 null] +/D [2271 0 R /XYZ 98.895 753.953 null] >> -% 2273 0 obj +% 2274 0 obj << -/D [2269 0 R /XYZ 99.895 698.792 null] +/D [2271 0 R /XYZ 99.895 723.717 null] >> -% 2014 0 obj +% 2275 0 obj << -/D [2269 0 R /XYZ 99.895 638.64 null] +/D [2271 0 R /XYZ 99.895 698.792 null] >> -% 958 0 obj +% 2015 0 obj << -/D [2269 0 R /XYZ 99.895 595.644 null] +/D [2271 0 R /XYZ 99.895 638.64 null] >> endstream endobj -2279 0 obj +2281 0 obj << /Length 6164 >> @@ -33316,7 +33334,7 @@ BT 0 g 0 G -212.051 -19.926 Td [([14])]TJ 0 g 0 G - 1.02 0 0 1 172.284 674.248 Tm [(Karypis,)-341(G.)-322(and)-322(Kumar)73(,)-341(V)126(.,)]TJ/F78 9.9626 Tf 1.02 0 0 1 299.262 674.248 Tm [(METIS:)-322(Unstructur)18(ed)-322(Graph)-322(Partitioning)-322(and)]TJ 1.02 0 0 1 172.005 662.293 Tm [(Sparse)-386(Matrix)-386(Ordering)-386(System)]TJ/F84 9.9626 Tf 1.02 0 0 1 308.549 662.293 Tm [(.)-386(Minneapolis,)-421(MN)-386(55455:)-586(University)-386(of)]TJ 1.02 0 0 1 172.284 650.338 Tm [(Minnesota,)-447(Department)-406(of)-407(Computer)-406(Science,)-447(1995.)-407(Internet)-406(Addr)17(ess:)]TJ/F145 9.9626 Tf 1 0 0 1 172.284 638.383 Tm [(http://www.cs.umn.edu/~karypis)]TJ/F84 9.9626 Tf 156.91 0 Td [(.)]TJ + 1.02 0 0 1 172.284 674.248 Tm [(Karypis,)-341(G.)-322(and)-322(Kumar)73(,)-341(V)126(.,)]TJ/F78 9.9626 Tf 1.02 0 0 1 299.262 674.248 Tm [(METIS:)-322(Unstructur)18(ed)-322(Graph)-322(Partitioning)-322(and)]TJ 1.02 0 0 1 172.005 662.293 Tm [(Sparse)-386(Matrix)-386(Ordering)-386(System)]TJ/F84 9.9626 Tf 1.02 0 0 1 308.549 662.293 Tm [(.)-386(Minneapolis,)-421(MN)-386(55455:)-586(University)-386(of)]TJ 1.02 0 0 1 172.284 650.338 Tm [(Minnesota,)-447(Department)-406(of)-407(Computer)-406(Science,)-447(1995.)-407(Internet)-406(Addr)17(ess:)]TJ/F147 9.9626 Tf 1 0 0 1 172.284 638.383 Tm [(http://www.cs.umn.edu/~karypis)]TJ/F84 9.9626 Tf 156.91 0 Td [(.)]TJ 0 g 0 G -178.489 -19.925 Td [([15])]TJ 0 g 0 G @@ -33364,7 +33382,7 @@ ET endstream endobj -2297 0 obj +2299 0 obj << /Length1 1383 /Length2 5908 @@ -33435,7 +33453,7 @@ W ň6S&Şĺ_!“˝SÎ|esU›FĚR™y† ˘Y‹Ąýžď­§N endstream endobj -2299 0 obj +2301 0 obj << /Length1 1956 /Length2 7144 @@ -33552,7 +33570,7 @@ _g\e+J`ÚĽu F˝Aa´´˙.P’gvźţěÇaósl řŻZBh·ő´gćÇ –Wµ Ű-‹BѶ”N°ŠÜhú`˨[ÉW÷jßí)q(µÎăÓĚý÷ÍŚţđ.wYŐć‹$ŢQ¬˙0±€®Ń]Šü endstream endobj -2301 0 obj +2303 0 obj << /Length1 1442 /Length2 6151 @@ -33630,7 +33648,7 @@ n^ r sb˘VŘb)l 2ĹţSŠ„TŁ­H+PMzjÔîëzËiÍfí$ŽDáŚMkV©° Ă?ă\ŮĽÄ>ެßƶaą<ˇČčEEŁÜL˝¦D…Ż6=tŻ–EŇ÷µ€đŕŔ.…(Á%FoÜ~­´ô6€rŤý¦\l•ů;séń'$Öµ…ďß>ž4ąŹ˙r$ď2¨DZý~*®\R ů·Yi$=ޡĄk‡ĺ'ŻÖĺ“™úý.m…6ŻÂ–„tY0’O$đ)şQń’ršČUQ…»+¶ßŞúÔ4(¨«,‡°Qb8¬—mÓ©qý±âŔÁÝHä°=‘ś,YŠ8i  ˙‡˝Ş”SZ6Žöă˝mŘ@»`é7~â"L7\ăąßFdN#FţýHR´K´KHpb40 2ÂÚ~HÇKε֊úřX endstream endobj -2303 0 obj +2305 0 obj << /Length1 1478 /Length2 6403 @@ -33711,7 +33729,7 @@ O GÁ0˙Ńűň˙¦ś˙+B°¸+›ć¸žbĄqGYŔđitâLxRIPv®Ő˝Ť·hÎÄÓÔĄşŇĎ‹^ž˝:nwĺňśŐp5żĐ>^؉RĄŢä}đ4ü¸żŚň™áůŢaŚgül}×^™(©t7aÝÔ &ó˝¶)±ZS«‘ ”ľ8˙n}@f0;­b.ŰŁELě›7†%·ą›3CŞ,ň@ä7ąŐď[I [1sI¬îĹXÚ<Ćü[›fÜŚą¶ÝaŻ:?yşČç3"ču/'Ř\Ödń ÁDÓąÚ=»qUü ęškóÎşůH‚â$ y§ďQ7ĽplŽ*žmhS]ADäŰäřů5Îă˝üĆ«ü‹79µ endstream endobj -2305 0 obj +2307 0 obj << /Length1 1688 /Length2 8444 @@ -33802,7 +33820,7 @@ p bŠ|Ü<dF.ĘÂĂOü¶˝Łć[–ßČÝv°óżö±O¨hgĂy‡Qě®—»ĺ¶ ‘«h›0}¦ŹŞ»˝Üő,ďĺč:Ő(Ń–~¨–Ŕ–’6uüŤ‹ŤmXóR·VĂ<‡­ĐłJVíM\Fw%T6VÍvýŃQnéϨ˙¦:Ď M¤\Ú…Uá-:φ57M}ÎŢ!ăZ‘D ęs‰ ç {$Qű0Ý„nëť®ęÓ Ę(ăN3°Ţ[( ˝¶?™ÓŚoÜî9T˝”ŇućŇ«6nŔu÷đD!qáíZ”ŤŢU›·ÍÜT”!pťÚąVŘžďó‡/…Č\ýh^‡:ń'.AµEőľS‹6P*BËY‹Lź endstream endobj -2307 0 obj +2309 0 obj << /Length1 2571 /Length2 18274 @@ -33992,7 +34010,7 @@ bvT ­¬Ě$LŽ`u\$˙yý îË63rŚa ů*}L¬˙Oţ­Nűšâ°Vz`NÁ~©âÖüËďţD|°Ď!5…çĆkW· ÎďŻËŹĹ[uő 1HÉ6ĹGÍ y‚ŔDĐűW…ÔCż•%‹Ň¸ŹVîŹ96şkś>lLtĆgŃ)d:ă|Ů\Ž,?†ĹŮľ¦d”5·ÖŚ‘ěˇâŘ#2}‰Äń‘«Ă™ >>©™–Ay÷r5dý>>Ç:XqażÓŮ x^ĺJÓ^a”Ő ŔÝ2PAˇ˝Îk@¨APŁíÓ~<˘GÇ€w*ßjRr… (ŢŤbí]4˛2ća´Ť<ˇď‰öŹ‚kdů©#YtuÎdW'*ŐłC+% 9vČ˝âđq endstream endobj -2309 0 obj +2311 0 obj << /Length1 1509 /Length2 2696 @@ -34054,7 +34072,7 @@ currentfile eexec ˘˝›ß˝€eĐ´Ë*›ąˇĹ×KŔËHŞX3.Óg 2L9tžčbMťµ$˙x*Ý™4$R=ĺ Ţ+JUůCwŠe–䡞±…›-%ţe)ťęłÓĽÖ\™MS{Ć•Këžł.ś endstream endobj -2311 0 obj +2313 0 obj << /Length1 2495 /Length2 16116 @@ -34241,7 +34259,7 @@ uÖ‚ }ă´űKç+ŃŕôÎďČL5XáçB´Ć`{PŘžFR/´e¦•{›ůÉţżxěłIf!«ĐŢdĺw!q>)Îż ç«׫ÍélŢV•]$>Řđ€Om•ĹÂť€„”śKé1îy®ďŕ^Ńź= "YkčK‡ÇÉÜgtĽ[1ŕ6eŕ´§p[hNcľ}]Ű#Ü^ŤékNoĘĽm, ±5uى‘yéá<Őnĺ•TAłťt<ÍwŁ&+•5O–y[šě÷N„ţ[ŞP±+J ă$ěiŮŤ/×%”ÖŢHEPBÓaÓŇŕz`~-Âôa+Őʏwi W€´ęÔ=ŢţYÝĂĘ˙%ŕb-ČňĐČSQ­=SVuIwď®–ĄH°¸CŇ8űq—-şŁ ©›¨íWŁť‰R͢ݼ?ÎÎď҉GĽ»g5…Ťáá)Ó9 P9©_öQ‰+Ë[nŇŢđ‘kˇđ#ß%J!ł„zůŽř6:ČLŃiŃ)Yđ´™exR4ëĚ©b&Śťř-Ŕé¸Îäbź©łĎ e’đNćbłx+’ÎÔ‚>ęxró}Ô„%öSx#«ĆóěđáŔĽŕÔ\/¸aĬ1^BIO˙Ě…Ô•x_ĺ<=răÔTi¤ş˝Ôř_ä­[›ÖŤÉ-Wżő…&íŹg!zÂ{N•i×%’3s|彨’66gú಑do–D»ą^-@AćJ–đHSPşHSäŹ[NŤĄ©:ORŘ~Ť\¨·bj–•1 ăćp endstream endobj -2313 0 obj +2315 0 obj << /Length1 1191 /Length2 3225 @@ -34287,7 +34305,7 @@ s; 3B@•Fs5ň® endstream endobj -2315 0 obj +2317 0 obj << /Length1 1188 /Length2 2740 @@ -34336,7 +34354,7 @@ AÖŞ^ 6» f žŃrş^‚7Łö1ë5ajłŕˇAšşŁ¨nWÉ©!µp© cílov®>ŐŞI8©3!ŐÜ/Ş JÝÚ?|iî$dŘ_ěń(°/;Ĺb÷üŇ49Ăď•Ű%XľeĘalĄŘw픋v_ŐĚąűś@dr®Ëp.álä§Ź<çęÉJt~˝źM«÷[نyś ä™ű3ąî[Î{ endstream endobj -2317 0 obj +2319 0 obj << /Length1 1614 /Length2 22531 @@ -34456,7 +34474,7 @@ s ˙K=ö˛ ’á(ŰHfUďÎărŇřľIQ$W0LÇňĹŐµ8ŽĹX‘kŻß‰ôą­JĎMĐz{äPăŔ÷–˘Ô“‹ľ>$ yň§ŃéÚ"Éjrş˝ľ‹XfŻyÓLEśtnÖy“ÉŽś‰ö•Q]Ex.ň˘B‚…;®ú[„çđĂ‚XánÍUîOýĹ›1Nd É¸&÷ďÎŚţ endstream endobj -2319 0 obj +2321 0 obj << /Length1 1616 /Length2 24418 @@ -34581,7 +34599,7 @@ c51 AĚř2C0Ż5§Śń¸űoÔ]}‰I(&*㤠˝;Ă@ar˝’§×@ ž\-@ó…Ô|†5JľĎZ¬¬ŇżÖTŰĆ⼠.áçŤ1ĺT–€"aőJk:‘ąbÄ–D»| endstream endobj -2321 0 obj +2323 0 obj << /Length1 1620 /Length2 18334 @@ -34690,7 +34708,7 @@ GÉ˝ Ďż([‘ç[·ş tźz|' ŤoŇUc×yrHŻ+ÍÝ(m§‚ 8Áýµ$#%Ľ°˘űŐ endstream endobj -2323 0 obj +2325 0 obj << /Length 1007 >> @@ -34760,7 +34778,7 @@ end endstream endobj -2324 0 obj +2326 0 obj << /Length 1577 >> @@ -34875,7 +34893,7 @@ end endstream endobj -2325 0 obj +2327 0 obj << /Length 1535 >> @@ -34981,7 +34999,7 @@ end endstream endobj -2326 0 obj +2328 0 obj << /Length 1724 >> @@ -35104,7 +35122,7 @@ end endstream endobj -2327 0 obj +2329 0 obj << /Length 2050 >> @@ -35250,7 +35268,7 @@ end endstream endobj -2328 0 obj +2330 0 obj << /Length 1543 >> @@ -35363,7 +35381,7 @@ end endstream endobj -2329 0 obj +2331 0 obj << /Length 1538 >> @@ -35476,7 +35494,7 @@ end endstream endobj -2330 0 obj +2332 0 obj << /Length 1538 >> @@ -35589,7 +35607,7 @@ end endstream endobj -2331 0 obj +2333 0 obj << /Length 853 >> @@ -35647,7 +35665,7 @@ end endstream endobj -2332 0 obj +2334 0 obj << /Length 1113 >> @@ -35725,7 +35743,7 @@ end endstream endobj -2333 0 obj +2335 0 obj << /Length 1477 >> @@ -35828,7 +35846,7 @@ end endstream endobj -2334 0 obj +2336 0 obj << /Length 1477 >> @@ -35931,7 +35949,7 @@ end endstream endobj -2335 0 obj +2337 0 obj << /Length 1482 >> @@ -36034,157 +36052,161 @@ end endstream endobj -2276 0 obj +2278 0 obj << /Type /ObjStm /N 100 -/First 1009 -/Length 18475 ->> -stream -957 0 916 57 917 114 933 171 913 228 914 284 2274 341 909 399 2275 456 2268 514 -2278 608 2280 726 1074 785 945 844 915 902 912 960 908 1018 2144 1076 911 1135 2281 1193 -910 1252 2129 1309 2130 1368 2282 1427 2277 1486 2283 1581 2284 1601 2285 1972 2286 2075 2287 2398 -2288 2421 2289 2876 2290 3005 2291 3303 2292 3949 2294 4420 2295 5051 2296 5522 2298 6097 2300 6322 -2302 6654 2304 6898 2306 7169 2308 7517 2310 8023 2312 8257 2314 8731 2316 8963 2318 9194 2320 9673 -2322 10249 2293 10667 1884 11108 1815 11271 1490 11434 942 11595 941 11754 940 11914 1000 12075 1044 12236 -1285 12397 1157 12561 685 12731 687 12921 686 13111 688 13301 894 13414 978 13527 1052 13644 1087 13764 -1117 13884 1158 14004 1205 14124 1244 14244 1300 14364 1351 14484 1400 14604 1457 14724 1492 14844 1534 14964 -1577 15084 1626 15204 1663 15324 1698 15444 1739 15564 1782 15684 1807 15804 1843 15924 1877 16044 1916 16164 -1954 16284 1991 16404 2036 16524 2072 16644 2117 16764 2213 16884 2263 17004 2336 17106 2337 17224 2338 17345 -% 957 0 obj +/First 1007 +/Length 18409 +>> +stream +959 0 958 57 916 114 917 171 934 228 913 285 914 341 2276 398 909 456 2277 513 +2270 571 2280 665 2282 783 1075 842 946 901 915 959 912 1017 908 1075 2146 1133 911 1192 +2283 1250 910 1309 2131 1366 2132 1425 2284 1484 2279 1543 2285 1638 2286 1658 2287 2029 2288 2132 +2289 2455 2290 2478 2291 2933 2292 3062 2293 3360 2294 4006 2296 4477 2297 5108 2298 5579 2300 6154 +2302 6379 2304 6711 2306 6955 2308 7226 2310 7574 2312 8080 2314 8314 2316 8788 2318 9020 2320 9251 +2322 9730 2324 10306 2295 10724 1885 11165 1816 11328 1491 11491 943 11652 942 11811 941 11971 1001 12132 +1045 12293 1286 12454 1158 12618 685 12788 687 12978 686 13168 688 13358 894 13471 979 13584 1053 13701 +1088 13821 1118 13941 1159 14061 1206 14181 1245 14301 1301 14421 1352 14541 1401 14661 1458 14781 1493 14901 +1535 15021 1578 15141 1627 15261 1664 15381 1699 15501 1740 15621 1783 15741 1808 15861 1844 15981 1878 16101 +1917 16221 1955 16341 1992 16461 2037 16581 2073 16701 2119 16821 2215 16941 2265 17061 2338 17163 2339 17281 +% 959 0 obj +<< +/D [2271 0 R /XYZ 99.895 595.644 null] +>> +% 958 0 obj << -/D [2269 0 R /XYZ 99.895 538.043 null] +/D [2271 0 R /XYZ 99.895 538.043 null] >> % 916 0 obj << -/D [2269 0 R /XYZ 99.895 477.792 null] +/D [2271 0 R /XYZ 99.895 477.792 null] >> % 917 0 obj << -/D [2269 0 R /XYZ 99.895 433.422 null] +/D [2271 0 R /XYZ 99.895 433.422 null] >> -% 933 0 obj +% 934 0 obj << -/D [2269 0 R /XYZ 99.895 398.456 null] +/D [2271 0 R /XYZ 99.895 398.456 null] >> % 913 0 obj << -/D [2269 0 R /XYZ 99.895 352.81 null] +/D [2271 0 R /XYZ 99.895 352.81 null] >> % 914 0 obj << -/D [2269 0 R /XYZ 99.895 307.164 null] +/D [2271 0 R /XYZ 99.895 307.164 null] >> -% 2274 0 obj +% 2276 0 obj << -/D [2269 0 R /XYZ 99.895 261.519 null] +/D [2271 0 R /XYZ 99.895 261.519 null] >> % 909 0 obj << -/D [2269 0 R /XYZ 99.895 215.873 null] +/D [2271 0 R /XYZ 99.895 215.873 null] >> -% 2275 0 obj +% 2277 0 obj << -/D [2269 0 R /XYZ 99.895 170.895 null] +/D [2271 0 R /XYZ 99.895 170.895 null] >> -% 2268 0 obj +% 2270 0 obj << /Font << /F75 685 0 R /F84 687 0 R /F78 686 0 R >> /ProcSet [ /PDF /Text ] >> -% 2278 0 obj +% 2280 0 obj << /Type /Page -/Contents 2279 0 R -/Resources 2277 0 R +/Contents 2281 0 R +/Resources 2279 0 R /MediaBox [0 0 595.276 841.89] -/Parent 2263 0 R +/Parent 2265 0 R >> -% 2280 0 obj +% 2282 0 obj << -/D [2278 0 R /XYZ 149.705 753.953 null] +/D [2280 0 R /XYZ 149.705 753.953 null] >> -% 1074 0 obj +% 1075 0 obj << -/D [2278 0 R /XYZ 150.705 716.092 null] +/D [2280 0 R /XYZ 150.705 716.092 null] >> -% 945 0 obj +% 946 0 obj << -/D [2278 0 R /XYZ 150.705 687.379 null] +/D [2280 0 R /XYZ 150.705 687.379 null] >> % 915 0 obj << -/D [2278 0 R /XYZ 150.705 632.184 null] +/D [2280 0 R /XYZ 150.705 632.184 null] >> % 912 0 obj << -/D [2278 0 R /XYZ 150.705 590.403 null] +/D [2280 0 R /XYZ 150.705 590.403 null] >> % 908 0 obj << -/D [2278 0 R /XYZ 150.705 545.192 null] +/D [2280 0 R /XYZ 150.705 545.192 null] >> -% 2144 0 obj +% 2146 0 obj << -/D [2278 0 R /XYZ 150.705 512.037 null] +/D [2280 0 R /XYZ 150.705 512.037 null] >> % 911 0 obj << -/D [2278 0 R /XYZ 150.705 480.156 null] +/D [2280 0 R /XYZ 150.705 480.156 null] >> -% 2281 0 obj +% 2283 0 obj << -/D [2278 0 R /XYZ 150.705 448.276 null] +/D [2280 0 R /XYZ 150.705 448.276 null] >> % 910 0 obj << -/D [2278 0 R /XYZ 150.705 407.09 null] +/D [2280 0 R /XYZ 150.705 407.09 null] >> -% 2129 0 obj +% 2131 0 obj << -/D [2278 0 R /XYZ 150.705 348.649 null] +/D [2280 0 R /XYZ 150.705 348.649 null] >> -% 2130 0 obj +% 2132 0 obj << -/D [2278 0 R /XYZ 150.705 304.874 null] +/D [2280 0 R /XYZ 150.705 304.874 null] >> -% 2282 0 obj +% 2284 0 obj << -/D [2278 0 R /XYZ 150.705 260.978 null] +/D [2280 0 R /XYZ 150.705 260.978 null] >> -% 2277 0 obj +% 2279 0 obj << -/Font << /F84 687 0 R /F78 686 0 R /F145 940 0 R >> +/Font << /F84 687 0 R /F78 686 0 R /F147 941 0 R >> /ProcSet [ /PDF /Text ] >> -% 2283 0 obj +% 2285 0 obj [1000] -% 2284 0 obj +% 2286 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] -% 2285 0 obj +% 2287 0 obj [277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8] -% 2286 0 obj +% 2288 0 obj [831 660 753 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 853 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0 0 0 881 0 0 0 0 0 0 0 0 0 0 0 0 234 0 881 767] -% 2287 0 obj +% 2289 0 obj [528 542] -% 2288 0 obj +% 2290 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] -% 2289 0 obj +% 2291 0 obj [531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] -% 2290 0 obj +% 2292 0 obj [388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8] -% 2291 0 obj +% 2293 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] -% 2292 0 obj -[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] % 2294 0 obj +[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] +% 2296 0 obj [605 608 167 380 611 291 313 333 0 333 606 0 667 500 333 287 0 0 0 0 0 0 0 0 0 0 0 0 333 208 250 278 371 500 500 840 778 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 0 0 0 278 500 500 1000 500 500 333 1144 525 331 998 0 0 0 0 0 0 500 500 606 500 1000 333 979 424 331 827 0 0 667 0 278 500 500 500 500 606 500] -% 2295 0 obj +% 2297 0 obj [528 545 167 333 556 278 333 333 0 333 606 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 333 250 333 500 500 500 889 778 278 333 333 389 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 500 747 722 611 667 778 611 556 722 778 333 333 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 333 606 333 606 500 278 444 463 407 500 389 278 500 500 278 278 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444] -% 2296 0 obj -[611 611 167 333 611 333 333 333 0 333 606 0 667 500 333 333 0 0 0 0 0 0 0 0 0 0 0 0 333 227 250 278 402 500 500 889 833 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 667 722 833 611 556 833 833 389 389 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 606 333 606 500 278 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 310 606 310 606 0 0 0 333 500 500 1000 500 500 333 1000 611 389 1000 0 0 0 0 0 0 500 500 606 500 1000] % 2298 0 obj +[611 611 167 333 611 333 333 333 0 333 606 0 667 500 333 333 0 0 0 0 0 0 0 0 0 0 0 0 333 227 250 278 402 500 500 889 833 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 667 722 833 611 556 833 833 389 389 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 606 333 606 500 278 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 310 606 310 606 0 0 0 333 500 500 1000 500 500 333 1000 611 389 1000 0 0 0 0 0 0 500 500 606 500 1000] +% 2300 0 obj << /Type /FontDescriptor /FontName /MNPEHI+CMEX10 @@ -36197,9 +36219,9 @@ stream /StemV 47 /XHeight 431 /CharSet (/radicalbigg) -/FontFile 2297 0 R +/FontFile 2299 0 R >> -% 2300 0 obj +% 2302 0 obj << /Type /FontDescriptor /FontName /SFGIZH+CMITT10 @@ -36212,9 +36234,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/C/D/E/H/I/K/L/M/P/T/V/a/c/comma/d/e/exclam/f/g/h/hyphen/i/k/m/n/o/p/parenleft/parenright/period/r/s/slash/t/w/x/y) -/FontFile 2299 0 R +/FontFile 2301 0 R >> -% 2302 0 obj +% 2304 0 obj << /Type /FontDescriptor /FontName /TPELEW+CMMI10 @@ -36227,9 +36249,9 @@ stream /StemV 72 /XHeight 431 /CharSet (/arrowhookleft/greater/less) -/FontFile 2301 0 R +/FontFile 2303 0 R >> -% 2304 0 obj +% 2306 0 obj << /Type /FontDescriptor /FontName /SOSTRQ+CMR10 @@ -36242,9 +36264,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/bracketleft/bracketright/equal/parenleft/parenright/plus) -/FontFile 2303 0 R +/FontFile 2305 0 R >> -% 2306 0 obj +% 2308 0 obj << /Type /FontDescriptor /FontName /VKSUEJ+CMSY10 @@ -36257,9 +36279,9 @@ stream /StemV 40 /XHeight 431 /CharSet (/B/H/I/arrowleft/arrowright/asteriskmath/bar/bardbl/braceleft/braceright/element/greaterequal/lessequal/minus/negationslash/radical) -/FontFile 2305 0 R +/FontFile 2307 0 R >> -% 2308 0 obj +% 2310 0 obj << /Type /FontDescriptor /FontName /XIQVGP+CMTT10 @@ -36272,9 +36294,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asciitilde/asterisk/b/backslash/bracketleft/bracketright/c/colon/comma/d/e/equal/f/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotesingle/r/s/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 2307 0 R +/FontFile 2309 0 R >> -% 2310 0 obj +% 2312 0 obj << /Type /FontDescriptor /FontName /KPZRIA+CMTT8 @@ -36287,9 +36309,9 @@ stream /StemV 76 /XHeight 431 /CharSet (/b/c/d/e/i/l/n/p/r/s/t) -/FontFile 2309 0 R +/FontFile 2311 0 R >> -% 2312 0 obj +% 2314 0 obj << /Type /FontDescriptor /FontName /FYMOSO+CMTT9 @@ -36302,9 +36324,9 @@ stream /StemV 74 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/c/colon/comma/d/e/equal/f/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotesingle/r/s/semicolon/six/slash/t/two/u/underscore/v/w/x/y/z/zero) -/FontFile 2311 0 R +/FontFile 2313 0 R >> -% 2314 0 obj +% 2316 0 obj << /Type /FontDescriptor /FontName /ZSBXRF+PazoMath @@ -36317,9 +36339,9 @@ stream /StemV 95 /XHeight 0 /CharSet (/Omega/infinity/summation) -/FontFile 2313 0 R +/FontFile 2315 0 R >> -% 2316 0 obj +% 2318 0 obj << /Type /FontDescriptor /FontName /DUJUUF+PazoMath-Italic @@ -36332,9 +36354,9 @@ stream /StemV 65 /XHeight 0 /CharSet (/alpha/beta) -/FontFile 2315 0 R +/FontFile 2317 0 R >> -% 2318 0 obj +% 2320 0 obj << /Type /FontDescriptor /FontName /BDDEWM+URWPalladioL-Bold @@ -36347,9 +36369,9 @@ stream /StemV 123 /XHeight 471 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/Z/a/b/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2317 0 R +/FontFile 2319 0 R >> -% 2320 0 obj +% 2322 0 obj << /Type /FontDescriptor /FontName /GLTUCO+URWPalladioL-Roma @@ -36362,9 +36384,9 @@ stream /StemV 84 /XHeight 469 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/bracketleft/bracketright/bullet/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/grave/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/section/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2319 0 R +/FontFile 2321 0 R >> -% 2322 0 obj +% 2324 0 obj << /Type /FontDescriptor /FontName /ZZXCQL+URWPalladioL-Ital @@ -36377,453 +36399,453 @@ stream /StemV 78 /XHeight 482 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/f/fi/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/plus/q/quoteright/r/s/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2321 0 R +/FontFile 2323 0 R >> -% 2293 0 obj +% 2295 0 obj << /Type /Encoding /Differences [2/fi/fl 30/grave 38/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 61/equal 63/question 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 147/quotedblleft/quotedblright/bullet/endash/emdash 167/section] >> -% 1884 0 obj +% 1885 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MNPEHI+CMEX10 -/FontDescriptor 2298 0 R +/FontDescriptor 2300 0 R /FirstChar 114 /LastChar 114 -/Widths 2283 0 R -/ToUnicode 2323 0 R +/Widths 2285 0 R +/ToUnicode 2325 0 R >> -% 1815 0 obj +% 1816 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SFGIZH+CMITT10 -/FontDescriptor 2300 0 R +/FontDescriptor 2302 0 R /FirstChar 33 /LastChar 121 -/Widths 2284 0 R -/ToUnicode 2324 0 R +/Widths 2286 0 R +/ToUnicode 2326 0 R >> -% 1490 0 obj +% 1491 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TPELEW+CMMI10 -/FontDescriptor 2302 0 R +/FontDescriptor 2304 0 R /FirstChar 44 /LastChar 62 -/Widths 2285 0 R -/ToUnicode 2325 0 R +/Widths 2287 0 R +/ToUnicode 2327 0 R >> -% 942 0 obj +% 943 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SOSTRQ+CMR10 -/FontDescriptor 2304 0 R +/FontDescriptor 2306 0 R /FirstChar 40 /LastChar 93 -/Widths 2290 0 R -/ToUnicode 2326 0 R +/Widths 2292 0 R +/ToUnicode 2328 0 R >> -% 941 0 obj +% 942 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VKSUEJ+CMSY10 -/FontDescriptor 2306 0 R +/FontDescriptor 2308 0 R /FirstChar 0 /LastChar 112 -/Widths 2291 0 R -/ToUnicode 2327 0 R +/Widths 2293 0 R +/ToUnicode 2329 0 R >> -% 940 0 obj +% 941 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XIQVGP+CMTT10 -/FontDescriptor 2308 0 R +/FontDescriptor 2310 0 R /FirstChar 13 /LastChar 126 -/Widths 2292 0 R -/ToUnicode 2328 0 R +/Widths 2294 0 R +/ToUnicode 2330 0 R >> -% 1000 0 obj +% 1001 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KPZRIA+CMTT8 -/FontDescriptor 2310 0 R +/FontDescriptor 2312 0 R /FirstChar 98 /LastChar 116 -/Widths 2289 0 R -/ToUnicode 2329 0 R +/Widths 2291 0 R +/ToUnicode 2331 0 R >> -% 1044 0 obj +% 1045 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FYMOSO+CMTT9 -/FontDescriptor 2312 0 R +/FontDescriptor 2314 0 R /FirstChar 13 /LastChar 122 -/Widths 2288 0 R -/ToUnicode 2330 0 R +/Widths 2290 0 R +/ToUnicode 2332 0 R >> -% 1285 0 obj +% 1286 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZSBXRF+PazoMath -/FontDescriptor 2314 0 R +/FontDescriptor 2316 0 R /FirstChar 87 /LastChar 229 -/Widths 2286 0 R -/ToUnicode 2331 0 R +/Widths 2288 0 R +/ToUnicode 2333 0 R >> -% 1157 0 obj +% 1158 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DUJUUF+PazoMath-Italic -/FontDescriptor 2316 0 R +/FontDescriptor 2318 0 R /FirstChar 97 /LastChar 98 -/Widths 2287 0 R -/ToUnicode 2332 0 R +/Widths 2289 0 R +/ToUnicode 2334 0 R >> % 685 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BDDEWM+URWPalladioL-Bold -/FontDescriptor 2318 0 R +/FontDescriptor 2320 0 R /FirstChar 2 /LastChar 151 -/Widths 2296 0 R -/Encoding 2293 0 R -/ToUnicode 2333 0 R +/Widths 2298 0 R +/Encoding 2295 0 R +/ToUnicode 2335 0 R >> % 687 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GLTUCO+URWPalladioL-Roma -/FontDescriptor 2320 0 R +/FontDescriptor 2322 0 R /FirstChar 2 /LastChar 167 -/Widths 2294 0 R -/Encoding 2293 0 R -/ToUnicode 2334 0 R +/Widths 2296 0 R +/Encoding 2295 0 R +/ToUnicode 2336 0 R >> % 686 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZZXCQL+URWPalladioL-Ital -/FontDescriptor 2322 0 R +/FontDescriptor 2324 0 R /FirstChar 2 /LastChar 122 -/Widths 2295 0 R -/Encoding 2293 0 R -/ToUnicode 2335 0 R +/Widths 2297 0 R +/Encoding 2295 0 R +/ToUnicode 2337 0 R >> % 688 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R +/Parent 2338 0 R /Kids [678 0 R 691 0 R 737 0 R 793 0 R 841 0 R 884 0 R] >> % 894 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R -/Kids [892 0 R 906 0 R 924 0 R 937 0 R 950 0 R 962 0 R] +/Parent 2338 0 R +/Kids [892 0 R 906 0 R 924 0 R 938 0 R 951 0 R 963 0 R] >> -% 978 0 obj +% 979 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R -/Kids [967 0 R 982 0 R 1003 0 R 1014 0 R 1022 0 R 1033 0 R] +/Parent 2338 0 R +/Kids [968 0 R 983 0 R 1004 0 R 1015 0 R 1023 0 R 1034 0 R] >> -% 1052 0 obj +% 1053 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R -/Kids [1049 0 R 1054 0 R 1058 0 R 1063 0 R 1070 0 R 1078 0 R] +/Parent 2338 0 R +/Kids [1050 0 R 1055 0 R 1059 0 R 1064 0 R 1071 0 R 1079 0 R] >> -% 1087 0 obj +% 1088 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R -/Kids [1083 0 R 1089 0 R 1093 0 R 1097 0 R 1103 0 R 1107 0 R] +/Parent 2338 0 R +/Kids [1084 0 R 1090 0 R 1094 0 R 1098 0 R 1104 0 R 1108 0 R] >> -% 1117 0 obj +% 1118 0 obj << /Type /Pages /Count 6 -/Parent 2336 0 R -/Kids [1113 0 R 1120 0 R 1126 0 R 1133 0 R 1139 0 R 1143 0 R] +/Parent 2338 0 R +/Kids [1114 0 R 1121 0 R 1127 0 R 1134 0 R 1140 0 R 1144 0 R] >> -% 1158 0 obj +% 1159 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1154 0 R 1162 0 R 1172 0 R 1178 0 R 1189 0 R 1194 0 R] +/Parent 2339 0 R +/Kids [1155 0 R 1163 0 R 1173 0 R 1179 0 R 1190 0 R 1195 0 R] >> -% 1205 0 obj +% 1206 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1201 0 R 1207 0 R 1215 0 R 1223 0 R 1228 0 R 1236 0 R] +/Parent 2339 0 R +/Kids [1202 0 R 1208 0 R 1216 0 R 1224 0 R 1229 0 R 1237 0 R] >> -% 1244 0 obj +% 1245 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1241 0 R 1249 0 R 1254 0 R 1267 0 R 1274 0 R 1282 0 R] +/Parent 2339 0 R +/Kids [1242 0 R 1250 0 R 1255 0 R 1268 0 R 1275 0 R 1283 0 R] >> -% 1300 0 obj +% 1301 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1293 0 R 1309 0 R 1315 0 R 1326 0 R 1332 0 R 1343 0 R] +/Parent 2339 0 R +/Kids [1294 0 R 1310 0 R 1316 0 R 1327 0 R 1333 0 R 1344 0 R] >> -% 1351 0 obj +% 1352 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1348 0 R 1360 0 R 1365 0 R 1374 0 R 1380 0 R 1389 0 R] +/Parent 2339 0 R +/Kids [1349 0 R 1361 0 R 1366 0 R 1375 0 R 1381 0 R 1390 0 R] >> -% 1400 0 obj +% 1401 0 obj << /Type /Pages /Count 6 -/Parent 2337 0 R -/Kids [1396 0 R 1410 0 R 1417 0 R 1426 0 R 1434 0 R 1438 0 R] +/Parent 2339 0 R +/Kids [1397 0 R 1411 0 R 1418 0 R 1427 0 R 1435 0 R 1439 0 R] >> -% 1457 0 obj +% 1458 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1453 0 R 1459 0 R 1465 0 R 1472 0 R 1476 0 R 1481 0 R] +/Parent 2340 0 R +/Kids [1454 0 R 1460 0 R 1466 0 R 1473 0 R 1477 0 R 1482 0 R] >> -% 1492 0 obj +% 1493 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1487 0 R 1494 0 R 1505 0 R 1510 0 R 1519 0 R 1526 0 R] +/Parent 2340 0 R +/Kids [1488 0 R 1495 0 R 1506 0 R 1511 0 R 1520 0 R 1527 0 R] >> -% 1534 0 obj +% 1535 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1531 0 R 1538 0 R 1542 0 R 1550 0 R 1555 0 R 1563 0 R] +/Parent 2340 0 R +/Kids [1532 0 R 1539 0 R 1543 0 R 1551 0 R 1556 0 R 1564 0 R] >> -% 1577 0 obj +% 1578 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1569 0 R 1579 0 R 1592 0 R 1596 0 R 1609 0 R 1616 0 R] +/Parent 2340 0 R +/Kids [1570 0 R 1580 0 R 1593 0 R 1597 0 R 1610 0 R 1617 0 R] >> -% 1626 0 obj +% 1627 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1623 0 R 1628 0 R 1635 0 R 1639 0 R 1648 0 R 1656 0 R] +/Parent 2340 0 R +/Kids [1624 0 R 1629 0 R 1636 0 R 1640 0 R 1649 0 R 1657 0 R] >> -% 1663 0 obj +% 1664 0 obj << /Type /Pages /Count 6 -/Parent 2338 0 R -/Kids [1660 0 R 1666 0 R 1670 0 R 1677 0 R 1682 0 R 1688 0 R] +/Parent 2340 0 R +/Kids [1661 0 R 1667 0 R 1671 0 R 1678 0 R 1683 0 R 1689 0 R] >> -% 1698 0 obj +% 1699 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [1694 0 R 1701 0 R 1707 0 R 1714 0 R 1722 0 R 1726 0 R] +/Parent 2341 0 R +/Kids [1695 0 R 1702 0 R 1708 0 R 1715 0 R 1723 0 R 1727 0 R] >> -% 1739 0 obj +% 1740 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [1736 0 R 1741 0 R 1745 0 R 1760 0 R 1764 0 R 1770 0 R] +/Parent 2341 0 R +/Kids [1737 0 R 1742 0 R 1746 0 R 1761 0 R 1765 0 R 1771 0 R] >> -% 1782 0 obj +% 1783 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [1776 0 R 1784 0 R 1788 0 R 1792 0 R 1796 0 R 1800 0 R] +/Parent 2341 0 R +/Kids [1777 0 R 1785 0 R 1789 0 R 1793 0 R 1797 0 R 1801 0 R] >> -% 1807 0 obj +% 1808 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [1804 0 R 1809 0 R 1817 0 R 1821 0 R 1829 0 R 1833 0 R] +/Parent 2341 0 R +/Kids [1805 0 R 1810 0 R 1818 0 R 1822 0 R 1830 0 R 1834 0 R] >> -% 1843 0 obj +% 1844 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [1840 0 R 1845 0 R 1852 0 R 1856 0 R 1863 0 R 1867 0 R] +/Parent 2341 0 R +/Kids [1841 0 R 1846 0 R 1853 0 R 1857 0 R 1864 0 R 1868 0 R] >> -% 1877 0 obj +% 1878 0 obj << /Type /Pages /Count 6 -/Parent 2339 0 R -/Kids [1874 0 R 1879 0 R 1889 0 R 1894 0 R 1901 0 R 1907 0 R] +/Parent 2341 0 R +/Kids [1875 0 R 1880 0 R 1890 0 R 1895 0 R 1902 0 R 1908 0 R] >> -% 1916 0 obj +% 1917 0 obj << /Type /Pages /Count 6 -/Parent 2340 0 R -/Kids [1911 0 R 1918 0 R 1924 0 R 1930 0 R 1936 0 R 1942 0 R] +/Parent 2342 0 R +/Kids [1912 0 R 1919 0 R 1925 0 R 1931 0 R 1937 0 R 1943 0 R] >> -% 1954 0 obj +% 1955 0 obj << /Type /Pages /Count 6 -/Parent 2340 0 R -/Kids [1949 0 R 1957 0 R 1964 0 R 1971 0 R 1978 0 R 1984 0 R] +/Parent 2342 0 R +/Kids [1950 0 R 1958 0 R 1965 0 R 1972 0 R 1979 0 R 1985 0 R] >> -% 1991 0 obj +% 1992 0 obj << /Type /Pages /Count 6 -/Parent 2340 0 R -/Kids [1988 0 R 1996 0 R 2007 0 R 2011 0 R 2020 0 R 2024 0 R] +/Parent 2342 0 R +/Kids [1989 0 R 1997 0 R 2008 0 R 2012 0 R 2021 0 R 2025 0 R] >> -% 2036 0 obj +% 2037 0 obj << /Type /Pages /Count 6 -/Parent 2340 0 R -/Kids [2033 0 R 2039 0 R 2043 0 R 2050 0 R 2058 0 R 2065 0 R] +/Parent 2342 0 R +/Kids [2034 0 R 2040 0 R 2044 0 R 2051 0 R 2059 0 R 2066 0 R] >> -% 2072 0 obj +% 2073 0 obj << /Type /Pages /Count 6 -/Parent 2340 0 R -/Kids [2069 0 R 2077 0 R 2088 0 R 2093 0 R 2101 0 R 2110 0 R] +/Parent 2342 0 R +/Kids [2070 0 R 2078 0 R 2089 0 R 2094 0 R 2103 0 R 2112 0 R] >> -% 2117 0 obj +% 2119 0 obj << /Type /Pages /Count 6 -/Parent 2340 0 R -/Kids [2114 0 R 2125 0 R 2139 0 R 2148 0 R 2159 0 R 2188 0 R] +/Parent 2342 0 R +/Kids [2116 0 R 2127 0 R 2141 0 R 2150 0 R 2161 0 R 2190 0 R] >> -% 2213 0 obj +% 2215 0 obj << /Type /Pages /Count 6 -/Parent 2341 0 R -/Kids [2208 0 R 2227 0 R 2243 0 R 2247 0 R 2251 0 R 2256 0 R] +/Parent 2343 0 R +/Kids [2210 0 R 2229 0 R 2245 0 R 2249 0 R 2253 0 R 2258 0 R] >> -% 2263 0 obj +% 2265 0 obj << /Type /Pages /Count 4 -/Parent 2341 0 R -/Kids [2260 0 R 2265 0 R 2269 0 R 2278 0 R] ->> -% 2336 0 obj -<< -/Type /Pages -/Count 36 -/Parent 2342 0 R -/Kids [688 0 R 894 0 R 978 0 R 1052 0 R 1087 0 R 1117 0 R] +/Parent 2343 0 R +/Kids [2262 0 R 2267 0 R 2271 0 R 2280 0 R] >> -% 2337 0 obj +% 2338 0 obj << /Type /Pages /Count 36 -/Parent 2342 0 R -/Kids [1158 0 R 1205 0 R 1244 0 R 1300 0 R 1351 0 R 1400 0 R] +/Parent 2344 0 R +/Kids [688 0 R 894 0 R 979 0 R 1053 0 R 1088 0 R 1118 0 R] >> -% 2338 0 obj +% 2339 0 obj << /Type /Pages /Count 36 -/Parent 2342 0 R -/Kids [1457 0 R 1492 0 R 1534 0 R 1577 0 R 1626 0 R 1663 0 R] +/Parent 2344 0 R +/Kids [1159 0 R 1206 0 R 1245 0 R 1301 0 R 1352 0 R 1401 0 R] >> endstream endobj -2343 0 obj +2345 0 obj << /Type /ObjStm /N 100 -/First 892 -/Length 9786 ->> -stream -2339 0 2340 121 2341 242 2342 327 2344 432 675 501 671 575 667 663 663 751 659 839 -655 927 651 1015 647 1103 643 1191 639 1279 635 1367 631 1455 627 1543 623 1631 619 1705 -615 1817 611 1891 607 1979 602 2067 598 2141 594 2266 590 2340 586 2414 582 2539 578 2613 -574 2701 570 2789 566 2877 562 2965 558 3053 554 3141 550 3229 546 3303 542 3428 538 3502 -534 3590 530 3678 526 3766 522 3854 518 3928 514 4053 510 4127 506 4215 502 4303 498 4377 -494 4502 490 4576 486 4664 482 4752 478 4840 474 4928 470 5016 466 5104 462 5192 458 5280 -454 5368 450 5456 446 5544 442 5632 438 5720 434 5808 430 5896 426 5970 422 6096 418 6170 -414 6258 410 6346 406 6434 401 6522 397 6610 393 6698 389 6786 385 6874 381 6962 377 7050 -373 7138 369 7226 365 7314 361 7402 357 7490 353 7578 349 7666 345 7754 341 7842 337 7930 -333 8018 329 8106 325 8194 321 8282 317 8370 313 8444 309 8570 305 8644 301 8732 297 8820 -% 2339 0 obj +/First 893 +/Length 9834 +>> +stream +2340 0 2341 121 2342 242 2343 363 2344 448 2346 553 675 622 671 696 667 784 663 872 +659 960 655 1048 651 1136 647 1224 643 1312 639 1400 635 1488 631 1576 627 1664 623 1752 +619 1826 615 1938 611 2012 607 2100 602 2188 598 2262 594 2387 590 2461 586 2535 582 2660 +578 2734 574 2822 570 2910 566 2998 562 3086 558 3174 554 3262 550 3350 546 3424 542 3549 +538 3623 534 3711 530 3799 526 3887 522 3975 518 4049 514 4174 510 4248 506 4336 502 4424 +498 4498 494 4623 490 4697 486 4785 482 4873 478 4961 474 5049 470 5137 466 5225 462 5313 +458 5401 454 5489 450 5577 446 5665 442 5753 438 5841 434 5929 430 6017 426 6091 422 6217 +418 6291 414 6379 410 6467 406 6555 401 6643 397 6731 393 6819 389 6907 385 6995 381 7083 +377 7171 373 7259 369 7347 365 7435 361 7523 357 7611 353 7699 349 7787 345 7875 341 7963 +337 8051 333 8139 329 8227 325 8315 321 8403 317 8491 313 8565 309 8691 305 8765 301 8853 +% 2340 0 obj << /Type /Pages /Count 36 -/Parent 2342 0 R -/Kids [1698 0 R 1739 0 R 1782 0 R 1807 0 R 1843 0 R 1877 0 R] +/Parent 2344 0 R +/Kids [1458 0 R 1493 0 R 1535 0 R 1578 0 R 1627 0 R 1664 0 R] >> -% 2340 0 obj +% 2341 0 obj << /Type /Pages /Count 36 -/Parent 2342 0 R -/Kids [1916 0 R 1954 0 R 1991 0 R 2036 0 R 2072 0 R 2117 0 R] +/Parent 2344 0 R +/Kids [1699 0 R 1740 0 R 1783 0 R 1808 0 R 1844 0 R 1878 0 R] >> -% 2341 0 obj +% 2342 0 obj +<< +/Type /Pages +/Count 36 +/Parent 2344 0 R +/Kids [1917 0 R 1955 0 R 1992 0 R 2037 0 R 2073 0 R 2119 0 R] +>> +% 2343 0 obj << /Type /Pages /Count 10 -/Parent 2342 0 R -/Kids [2213 0 R 2263 0 R] +/Parent 2344 0 R +/Kids [2215 0 R 2265 0 R] >> -% 2342 0 obj +% 2344 0 obj << /Type /Pages /Count 190 -/Kids [2336 0 R 2337 0 R 2338 0 R 2339 0 R 2340 0 R 2341 0 R] +/Kids [2338 0 R 2339 0 R 2340 0 R 2341 0 R 2342 0 R 2343 0 R] >> -% 2344 0 obj +% 2346 0 obj << /Type /Outlines /First 4 0 R @@ -37588,6 +37610,27 @@ stream /Prev 297 0 R /Next 305 0 R >> + +endstream +endobj +2347 0 obj +<< +/Type /ObjStm +/N 100 +/First 890 +/Length 11873 +>> +stream +297 0 293 74 289 199 285 273 281 361 277 449 273 537 269 625 265 713 261 801 +257 889 253 977 249 1065 245 1153 241 1241 237 1329 233 1417 229 1505 225 1579 221 1704 +217 1777 213 1864 209 1938 205 2026 200 2114 196 2202 192 2290 188 2364 184 2490 180 2564 +176 2652 172 2740 168 2828 164 2916 160 3004 156 3092 152 3180 148 3268 144 3356 140 3444 +136 3532 132 3620 128 3708 124 3796 120 3884 116 3972 112 4060 108 4134 104 4260 100 4333 +96 4418 92 4501 88 4583 84 4665 80 4747 76 4829 72 4911 68 4993 64 5075 60 5157 +56 5239 52 5321 48 5403 44 5472 40 5581 36 5701 32 5770 28 5826 24 5945 20 6027 +16 6096 12 6214 8 6294 4 6359 2348 6452 2349 6649 2350 6822 2351 7002 2352 7179 2353 7356 +2354 7536 2355 7714 2356 7894 2357 8072 2358 8252 2359 8427 2360 8592 2361 8763 2362 8933 2363 9105 +2364 9275 2365 9447 2366 9616 2367 9785 2368 9957 2369 10127 2370 10299 2371 10469 2372 10641 2373 10811 % 297 0 obj << /Title 298 0 R @@ -37595,27 +37638,6 @@ stream /Parent 293 0 R /Next 301 0 R >> - -endstream -endobj -2345 0 obj -<< -/Type /ObjStm -/N 100 -/First 893 -/Length 11990 ->> -stream -293 0 289 125 285 199 281 287 277 375 273 463 269 551 265 639 261 727 257 815 -253 903 249 991 245 1079 241 1167 237 1255 233 1343 229 1431 225 1505 221 1630 217 1703 -213 1790 209 1864 205 1952 200 2040 196 2128 192 2216 188 2290 184 2416 180 2490 176 2578 -172 2666 168 2754 164 2842 160 2930 156 3018 152 3106 148 3194 144 3282 140 3370 136 3458 -132 3546 128 3634 124 3722 120 3810 116 3898 112 3986 108 4060 104 4186 100 4259 96 4344 -92 4427 88 4509 84 4591 80 4673 76 4755 72 4837 68 4919 64 5001 60 5083 56 5165 -52 5247 48 5329 44 5398 40 5507 36 5627 32 5696 28 5752 24 5871 20 5953 16 6022 -12 6140 8 6220 4 6285 2346 6378 2347 6574 2348 6747 2349 6927 2350 7104 2351 7281 2352 7461 -2353 7639 2354 7819 2355 7997 2356 8177 2357 8352 2358 8517 2359 8688 2360 8858 2361 9030 2362 9200 -2363 9372 2364 9541 2365 9710 2366 9882 2367 10052 2368 10224 2369 10394 2370 10566 2371 10736 2372 10908 % 293 0 obj << /Title 294 0 R @@ -38205,747 +38227,747 @@ stream << /Title 5 0 R /A 1 0 R -/Parent 2344 0 R +/Parent 2346 0 R /First 8 0 R /Last 619 0 R /Count -14 >> -% 2346 0 obj +% 2348 0 obj << -/Names [(Doc-Start) 684 0 R (Hfootnote.1) 943 0 R (Hfootnote.2) 944 0 R (Hfootnote.3) 999 0 R (Hfootnote.4) 1999 0 R (Hfootnote.5) 2083 0 R] +/Names [(Doc-Start) 684 0 R (Hfootnote.1) 944 0 R (Hfootnote.2) 945 0 R (Hfootnote.3) 1000 0 R (Hfootnote.4) 2000 0 R (Hfootnote.5) 2084 0 R] /Limits [(Doc-Start) (Hfootnote.5)] >> -% 2347 0 obj +% 2349 0 obj << -/Names [(Item.1) 970 0 R (Item.10) 986 0 R (Item.100) 1711 0 R (Item.101) 1717 0 R (Item.102) 1718 0 R (Item.103) 1729 0 R] +/Names [(Item.1) 971 0 R (Item.10) 987 0 R (Item.100) 1712 0 R (Item.101) 1718 0 R (Item.102) 1719 0 R (Item.103) 1730 0 R] /Limits [(Item.1) (Item.103)] >> -% 2348 0 obj +% 2350 0 obj << -/Names [(Item.104) 1730 0 R (Item.105) 1731 0 R (Item.106) 1748 0 R (Item.107) 1749 0 R (Item.108) 1750 0 R (Item.109) 1751 0 R] +/Names [(Item.104) 1731 0 R (Item.105) 1732 0 R (Item.106) 1749 0 R (Item.107) 1750 0 R (Item.108) 1751 0 R (Item.109) 1752 0 R] /Limits [(Item.104) (Item.109)] >> -% 2349 0 obj +% 2351 0 obj << -/Names [(Item.11) 987 0 R (Item.110) 1752 0 R (Item.111) 1753 0 R (Item.112) 1754 0 R (Item.113) 1755 0 R (Item.114) 1756 0 R] +/Names [(Item.11) 988 0 R (Item.110) 1753 0 R (Item.111) 1754 0 R (Item.112) 1755 0 R (Item.113) 1756 0 R (Item.114) 1757 0 R] /Limits [(Item.11) (Item.114)] >> -% 2350 0 obj +% 2352 0 obj << -/Names [(Item.115) 1757 0 R (Item.116) 1758 0 R (Item.117) 1767 0 R (Item.118) 1768 0 R (Item.119) 1773 0 R (Item.12) 988 0 R] +/Names [(Item.115) 1758 0 R (Item.116) 1759 0 R (Item.117) 1768 0 R (Item.118) 1769 0 R (Item.119) 1774 0 R (Item.12) 989 0 R] /Limits [(Item.115) (Item.12)] >> -% 2351 0 obj +% 2353 0 obj << -/Names [(Item.120) 1774 0 R (Item.121) 1779 0 R (Item.122) 1780 0 R (Item.123) 1781 0 R (Item.124) 1812 0 R (Item.125) 1813 0 R] +/Names [(Item.120) 1775 0 R (Item.121) 1780 0 R (Item.122) 1781 0 R (Item.123) 1782 0 R (Item.124) 1813 0 R (Item.125) 1814 0 R] /Limits [(Item.120) (Item.125)] >> -% 2352 0 obj +% 2354 0 obj << -/Names [(Item.126) 1814 0 R (Item.127) 1824 0 R (Item.128) 1825 0 R (Item.129) 1826 0 R (Item.13) 989 0 R (Item.130) 1836 0 R] +/Names [(Item.126) 1815 0 R (Item.127) 1825 0 R (Item.128) 1826 0 R (Item.129) 1827 0 R (Item.13) 990 0 R (Item.130) 1837 0 R] /Limits [(Item.126) (Item.130)] >> -% 2353 0 obj +% 2355 0 obj << -/Names [(Item.131) 1837 0 R (Item.132) 1838 0 R (Item.133) 1848 0 R (Item.134) 1849 0 R (Item.135) 1850 0 R (Item.136) 1859 0 R] +/Names [(Item.131) 1838 0 R (Item.132) 1839 0 R (Item.133) 1849 0 R (Item.134) 1850 0 R (Item.135) 1851 0 R (Item.136) 1860 0 R] /Limits [(Item.131) (Item.136)] >> -% 2354 0 obj +% 2356 0 obj << -/Names [(Item.137) 1860 0 R (Item.138) 1861 0 R (Item.139) 1870 0 R (Item.14) 990 0 R (Item.140) 1871 0 R (Item.141) 1872 0 R] +/Names [(Item.137) 1861 0 R (Item.138) 1862 0 R (Item.139) 1871 0 R (Item.14) 991 0 R (Item.140) 1872 0 R (Item.141) 1873 0 R] /Limits [(Item.137) (Item.141)] >> -% 2355 0 obj +% 2357 0 obj << -/Names [(Item.142) 1882 0 R (Item.143) 1883 0 R (Item.144) 1885 0 R (Item.145) 1886 0 R (Item.146) 1887 0 R (Item.147) 1892 0 R] +/Names [(Item.142) 1883 0 R (Item.143) 1884 0 R (Item.144) 1886 0 R (Item.145) 1887 0 R (Item.146) 1888 0 R (Item.147) 1893 0 R] /Limits [(Item.142) (Item.147)] >> -% 2356 0 obj +% 2358 0 obj << -/Names [(Item.148) 1897 0 R (Item.149) 2152 0 R (Item.15) 991 0 R (Item.150) 2153 0 R (Item.151) 2254 0 R (Item.16) 992 0 R] +/Names [(Item.148) 1898 0 R (Item.149) 2154 0 R (Item.15) 992 0 R (Item.150) 2155 0 R (Item.151) 2256 0 R (Item.16) 993 0 R] /Limits [(Item.148) (Item.16)] >> -% 2357 0 obj +% 2359 0 obj << -/Names [(Item.17) 993 0 R (Item.18) 994 0 R (Item.19) 995 0 R (Item.2) 971 0 R (Item.20) 996 0 R (Item.21) 997 0 R] +/Names [(Item.17) 994 0 R (Item.18) 995 0 R (Item.19) 996 0 R (Item.2) 972 0 R (Item.20) 997 0 R (Item.21) 998 0 R] /Limits [(Item.17) (Item.21)] >> -% 2358 0 obj +% 2360 0 obj << -/Names [(Item.22) 998 0 R (Item.23) 1006 0 R (Item.24) 1007 0 R (Item.25) 1008 0 R (Item.26) 1009 0 R (Item.27) 1010 0 R] +/Names [(Item.22) 999 0 R (Item.23) 1007 0 R (Item.24) 1008 0 R (Item.25) 1009 0 R (Item.26) 1010 0 R (Item.27) 1011 0 R] /Limits [(Item.22) (Item.27)] >> -% 2359 0 obj +% 2361 0 obj << -/Names [(Item.28) 1011 0 R (Item.29) 1025 0 R (Item.3) 972 0 R (Item.30) 1026 0 R (Item.31) 1027 0 R (Item.32) 1028 0 R] +/Names [(Item.28) 1012 0 R (Item.29) 1026 0 R (Item.3) 973 0 R (Item.30) 1027 0 R (Item.31) 1028 0 R (Item.32) 1029 0 R] /Limits [(Item.28) (Item.32)] >> -% 2360 0 obj +% 2362 0 obj << -/Names [(Item.33) 1029 0 R (Item.34) 1036 0 R (Item.35) 1037 0 R (Item.36) 1038 0 R (Item.37) 1039 0 R (Item.38) 1040 0 R] +/Names [(Item.33) 1030 0 R (Item.34) 1037 0 R (Item.35) 1038 0 R (Item.36) 1039 0 R (Item.37) 1040 0 R (Item.38) 1041 0 R] /Limits [(Item.33) (Item.38)] >> -% 2361 0 obj +% 2363 0 obj << -/Names [(Item.39) 1041 0 R (Item.4) 973 0 R (Item.40) 1042 0 R (Item.41) 1043 0 R (Item.42) 1086 0 R (Item.43) 1100 0 R] +/Names [(Item.39) 1042 0 R (Item.4) 974 0 R (Item.40) 1043 0 R (Item.41) 1044 0 R (Item.42) 1087 0 R (Item.43) 1101 0 R] /Limits [(Item.39) (Item.43)] >> -% 2362 0 obj +% 2364 0 obj << -/Names [(Item.44) 1101 0 R (Item.45) 1181 0 R (Item.46) 1210 0 R (Item.47) 1231 0 R (Item.48) 1257 0 R (Item.49) 1429 0 R] +/Names [(Item.44) 1102 0 R (Item.45) 1182 0 R (Item.46) 1211 0 R (Item.47) 1232 0 R (Item.48) 1258 0 R (Item.49) 1430 0 R] /Limits [(Item.44) (Item.49)] >> -% 2363 0 obj +% 2365 0 obj << -/Names [(Item.5) 974 0 R (Item.50) 1430 0 R (Item.51) 1431 0 R (Item.52) 1484 0 R (Item.53) 1491 0 R (Item.54) 1497 0 R] +/Names [(Item.5) 975 0 R (Item.50) 1431 0 R (Item.51) 1432 0 R (Item.52) 1485 0 R (Item.53) 1492 0 R (Item.54) 1498 0 R] /Limits [(Item.5) (Item.54)] >> -% 2364 0 obj +% 2366 0 obj << -/Names [(Item.55) 1498 0 R (Item.56) 1499 0 R (Item.57) 1500 0 R (Item.58) 1501 0 R (Item.59) 1513 0 R (Item.6) 975 0 R] +/Names [(Item.55) 1499 0 R (Item.56) 1500 0 R (Item.57) 1501 0 R (Item.58) 1502 0 R (Item.59) 1514 0 R (Item.6) 976 0 R] /Limits [(Item.55) (Item.6)] >> -% 2365 0 obj +% 2367 0 obj << -/Names [(Item.60) 1514 0 R (Item.61) 1515 0 R (Item.62) 1522 0 R (Item.63) 1545 0 R (Item.64) 1546 0 R (Item.65) 1553 0 R] +/Names [(Item.60) 1515 0 R (Item.61) 1516 0 R (Item.62) 1523 0 R (Item.63) 1546 0 R (Item.64) 1547 0 R (Item.65) 1554 0 R] /Limits [(Item.60) (Item.65)] >> -% 2366 0 obj +% 2368 0 obj << -/Names [(Item.66) 1558 0 R (Item.67) 1559 0 R (Item.68) 1560 0 R (Item.69) 1572 0 R (Item.7) 976 0 R (Item.70) 1573 0 R] +/Names [(Item.66) 1559 0 R (Item.67) 1560 0 R (Item.68) 1561 0 R (Item.69) 1573 0 R (Item.7) 977 0 R (Item.70) 1574 0 R] /Limits [(Item.66) (Item.70)] >> -% 2367 0 obj +% 2369 0 obj << -/Names [(Item.71) 1574 0 R (Item.72) 1575 0 R (Item.73) 1576 0 R (Item.74) 1582 0 R (Item.75) 1583 0 R (Item.76) 1584 0 R] +/Names [(Item.71) 1575 0 R (Item.72) 1576 0 R (Item.73) 1577 0 R (Item.74) 1583 0 R (Item.75) 1584 0 R (Item.76) 1585 0 R] /Limits [(Item.71) (Item.76)] >> -% 2368 0 obj +% 2370 0 obj << -/Names [(Item.77) 1585 0 R (Item.78) 1586 0 R (Item.79) 1587 0 R (Item.8) 977 0 R (Item.80) 1599 0 R (Item.81) 1600 0 R] +/Names [(Item.77) 1586 0 R (Item.78) 1587 0 R (Item.79) 1588 0 R (Item.8) 978 0 R (Item.80) 1600 0 R (Item.81) 1601 0 R] /Limits [(Item.77) (Item.81)] >> -% 2369 0 obj +% 2371 0 obj << -/Names [(Item.82) 1601 0 R (Item.83) 1602 0 R (Item.84) 1603 0 R (Item.85) 1604 0 R (Item.86) 1605 0 R (Item.87) 1619 0 R] +/Names [(Item.82) 1602 0 R (Item.83) 1603 0 R (Item.84) 1604 0 R (Item.85) 1605 0 R (Item.86) 1606 0 R (Item.87) 1620 0 R] /Limits [(Item.82) (Item.87)] >> -% 2370 0 obj +% 2372 0 obj << -/Names [(Item.88) 1631 0 R (Item.89) 1642 0 R (Item.9) 985 0 R (Item.90) 1643 0 R (Item.91) 1651 0 R (Item.92) 1652 0 R] +/Names [(Item.88) 1632 0 R (Item.89) 1643 0 R (Item.9) 986 0 R (Item.90) 1644 0 R (Item.91) 1652 0 R (Item.92) 1653 0 R] /Limits [(Item.88) (Item.92)] >> -% 2371 0 obj +% 2373 0 obj << -/Names [(Item.93) 1673 0 R (Item.94) 1674 0 R (Item.95) 1685 0 R (Item.96) 1691 0 R (Item.97) 1697 0 R (Item.98) 1704 0 R] +/Names [(Item.93) 1674 0 R (Item.94) 1675 0 R (Item.95) 1686 0 R (Item.96) 1692 0 R (Item.97) 1698 0 R (Item.98) 1705 0 R] /Limits [(Item.93) (Item.98)] >> -% 2372 0 obj -<< -/Names [(Item.99) 1710 0 R (algocf.1) 2157 0 R (algocf.2) 2204 0 R (algocfline.1) 2143 0 R (algocfline.2) 2211 0 R (cite.2007c) 957 0 R] -/Limits [(Item.99) (cite.2007c)] ->> endstream endobj -2374 0 obj +2375 0 obj << /Type /ObjStm /N 100 -/First 1040 -/Length 19303 ->> -stream -2373 0 2375 205 2376 459 2377 678 2378 880 2379 1074 2380 1254 2381 1442 2382 1668 2383 1888 -2384 2113 2385 2349 2386 2585 2387 2815 2388 3015 2389 3195 2390 3374 2391 3554 2392 3733 2393 3913 -2394 4092 2395 4272 2396 4450 2397 4628 2398 4808 2399 4987 2400 5167 2401 5346 2402 5526 2403 5705 -2404 5878 2405 6050 2406 6220 2407 6392 2408 6562 2409 6734 2410 6903 2411 7072 2412 7244 2413 7414 -2414 7586 2415 7756 2416 7928 2417 8099 2418 8271 2419 8441 2420 8637 2421 8831 2422 9029 2423 9217 -2424 9400 2425 9579 2426 9809 2427 10039 2428 10262 2429 10482 2430 10710 2431 10935 2432 11157 2433 11383 -2434 11613 2435 11842 2436 12069 2437 12291 2438 12521 2439 12746 2440 12968 2441 13190 2442 13436 2443 13698 -2444 13954 2445 14222 2446 14490 2447 14752 2448 15014 2449 15214 2450 15394 2451 15569 2452 15738 2453 15834 -2454 15948 2455 16060 2456 16171 2457 16282 2458 16402 2459 16525 2460 16643 2461 16756 2462 16868 2463 16980 -2464 17091 2465 17203 2466 17316 2467 17442 2468 17567 2469 17698 2470 17822 2471 17914 2472 18033 2473 18151 -% 2373 0 obj +/First 1039 +/Length 19379 +>> +stream +2374 0 2376 189 2377 394 2378 648 2379 867 2380 1069 2381 1263 2382 1443 2383 1631 2384 1857 +2385 2077 2386 2302 2387 2538 2388 2774 2389 3004 2390 3204 2391 3384 2392 3563 2393 3743 2394 3922 +2395 4102 2396 4281 2397 4461 2398 4639 2399 4817 2400 4997 2401 5176 2402 5356 2403 5535 2404 5715 +2405 5894 2406 6067 2407 6239 2408 6409 2409 6581 2410 6751 2411 6923 2412 7092 2413 7261 2414 7433 +2415 7603 2416 7775 2417 7945 2418 8117 2419 8288 2420 8460 2421 8630 2422 8826 2423 9020 2424 9218 +2425 9406 2426 9589 2427 9768 2428 9998 2429 10228 2430 10451 2431 10671 2432 10899 2433 11124 2434 11346 +2435 11572 2436 11802 2437 12031 2438 12258 2439 12480 2440 12710 2441 12935 2442 13157 2443 13379 2444 13625 +2445 13887 2446 14143 2447 14411 2448 14679 2449 14941 2450 15203 2451 15403 2452 15583 2453 15758 2454 15927 +2455 16023 2456 16137 2457 16249 2458 16360 2459 16471 2460 16591 2461 16714 2462 16832 2463 16945 2464 17057 +2465 17169 2466 17280 2467 17392 2468 17505 2469 17631 2470 17756 2471 17887 2472 18011 2473 18103 2474 18222 +% 2374 0 obj +<< +/Names [(Item.99) 1711 0 R (algocf.1) 2159 0 R (algocf.2) 2206 0 R (algocfline.1) 2145 0 R (algocfline.2) 2213 0 R (cite.2007c) 958 0 R] +/Limits [(Item.99) (cite.2007c)] +>> +% 2376 0 obj << -/Names [(cite.2007d) 958 0 R (cite.BERTACCINIFILIPPONE) 2014 0 R (cite.BLACS) 933 0 R (cite.BLAS1) 915 0 R (cite.BLAS2) 916 0 R (cite.BLAS3) 917 0 R] +/Names [(cite.2007d) 959 0 R (cite.BERTACCINIFILIPPONE) 2015 0 R (cite.BLACS) 934 0 R (cite.BLAS1) 915 0 R (cite.BLAS2) 916 0 R (cite.BLAS3) 917 0 R] /Limits [(cite.2007d) (cite.BLAS3)] >> -% 2375 0 obj +% 2377 0 obj << -/Names [(cite.CaFiRo:2014) 2129 0 R (cite.DesPat:11) 910 0 R (cite.DesignPatterns) 1074 0 R (cite.Filippone:2017:SMM:3034774.3017994) 2282 0 R (cite.KIVA3PSBLAS) 2275 0 R (cite.METIS) 945 0 R] +/Names [(cite.CaFiRo:2014) 2131 0 R (cite.DesPat:11) 910 0 R (cite.DesignPatterns) 1075 0 R (cite.Filippone:2017:SMM:3034774.3017994) 2284 0 R (cite.KIVA3PSBLAS) 2277 0 R (cite.METIS) 946 0 R] /Limits [(cite.CaFiRo:2014) (cite.METIS)] >> -% 2376 0 obj +% 2378 0 obj << -/Names [(cite.MPI1) 2281 0 R (cite.MRC:11) 2144 0 R (cite.OurTechRep) 2130 0 R (cite.PARA04FOREST) 2273 0 R (cite.PSBLAS) 2274 0 R (cite.RouXiaXu:11) 911 0 R] +/Names [(cite.MPI1) 2283 0 R (cite.MRC:11) 2146 0 R (cite.OurTechRep) 2132 0 R (cite.PARA04FOREST) 2275 0 R (cite.PSBLAS) 2276 0 R (cite.RouXiaXu:11) 911 0 R] /Limits [(cite.MPI1) (cite.RouXiaXu:11)] >> -% 2377 0 obj +% 2379 0 obj << -/Names [(cite.Sparse03) 909 0 R (cite.machiels) 912 0 R (cite.metcalf) 908 0 R (cite.sblas02) 914 0 R (cite.sblas97) 913 0 R (descdata) 1017 0 R] +/Names [(cite.Sparse03) 909 0 R (cite.machiels) 912 0 R (cite.metcalf) 908 0 R (cite.sblas02) 914 0 R (cite.sblas97) 913 0 R (descdata) 1018 0 R] /Limits [(cite.Sparse03) (descdata)] >> -% 2378 0 obj +% 2380 0 obj << -/Names [(equation.4.1) 1296 0 R (equation.4.2) 1297 0 R (equation.4.3) 1298 0 R (figure.1) 927 0 R (figure.2) 953 0 R (figure.3) 1399 0 R] +/Names [(equation.4.1) 1297 0 R (equation.4.2) 1298 0 R (equation.4.3) 1299 0 R (figure.1) 927 0 R (figure.2) 954 0 R (figure.3) 1400 0 R] /Limits [(equation.4.1) (figure.3)] >> -% 2379 0 obj +% 2381 0 obj << -/Names [(figure.4) 1432 0 R (figure.5) 2151 0 R (figure.6) 2146 0 R (figure.7) 2191 0 R (figure.8) 2203 0 R (figure.9) 2230 0 R] +/Names [(figure.4) 1433 0 R (figure.5) 2153 0 R (figure.6) 2148 0 R (figure.7) 2193 0 R (figure.8) 2205 0 R (figure.9) 2232 0 R] /Limits [(figure.4) (figure.9)] >> -% 2380 0 obj +% 2382 0 obj << -/Names [(listing.1) 1045 0 R (listing.2) 1075 0 R (listing.3) 1118 0 R (listing.4) 1137 0 R (listing.5) 1904 0 R (listing.6) 1905 0 R] +/Names [(listing.1) 1046 0 R (listing.2) 1076 0 R (listing.3) 1119 0 R (listing.4) 1138 0 R (listing.5) 1905 0 R (listing.6) 1906 0 R] /Limits [(listing.1) (listing.6)] >> -% 2381 0 obj +% 2383 0 obj << -/Names [(lstlisting.-1) 1258 0 R (lstlisting.-10) 1974 0 R (lstlisting.-11) 1981 0 R (lstlisting.-12) 2080 0 R (lstlisting.-13) 2104 0 R (lstlisting.-14) 2162 0 R] +/Names [(lstlisting.-1) 1259 0 R (lstlisting.-10) 1975 0 R (lstlisting.-11) 1982 0 R (lstlisting.-12) 2081 0 R (lstlisting.-13) 2106 0 R (lstlisting.-14) 2164 0 R] /Limits [(lstlisting.-1) (lstlisting.-14)] >> -% 2382 0 obj +% 2384 0 obj << -/Names [(lstlisting.-2) 1914 0 R (lstlisting.-3) 1921 0 R (lstlisting.-4) 1927 0 R (lstlisting.-5) 1933 0 R (lstlisting.-6) 1945 0 R (lstlisting.-7) 1952 0 R] +/Names [(lstlisting.-2) 1915 0 R (lstlisting.-3) 1922 0 R (lstlisting.-4) 1928 0 R (lstlisting.-5) 1934 0 R (lstlisting.-6) 1946 0 R (lstlisting.-7) 1953 0 R] /Limits [(lstlisting.-2) (lstlisting.-7)] >> -% 2383 0 obj +% 2385 0 obj << -/Names [(lstlisting.-8) 1960 0 R (lstlisting.-9) 1967 0 R (lstnumber.-1.1) 1259 0 R (lstnumber.-1.2) 1260 0 R (lstnumber.-1.3) 1261 0 R (lstnumber.-1.4) 1262 0 R] +/Names [(lstlisting.-8) 1961 0 R (lstlisting.-9) 1968 0 R (lstnumber.-1.1) 1260 0 R (lstnumber.-1.2) 1261 0 R (lstnumber.-1.3) 1262 0 R (lstnumber.-1.4) 1263 0 R] /Limits [(lstlisting.-8) (lstnumber.-1.4)] >> -% 2384 0 obj +% 2386 0 obj << -/Names [(lstnumber.-10.1) 1975 0 R (lstnumber.-11.1) 1982 0 R (lstnumber.-12.1) 2081 0 R (lstnumber.-12.2) 2082 0 R (lstnumber.-13.1) 2105 0 R (lstnumber.-13.2) 2106 0 R] +/Names [(lstnumber.-10.1) 1976 0 R (lstnumber.-11.1) 1983 0 R (lstnumber.-12.1) 2082 0 R (lstnumber.-12.2) 2083 0 R (lstnumber.-13.1) 2107 0 R (lstnumber.-13.2) 2108 0 R] /Limits [(lstnumber.-10.1) (lstnumber.-13.2)] >> -% 2385 0 obj +% 2387 0 obj << -/Names [(lstnumber.-14.1) 2163 0 R (lstnumber.-14.2) 2164 0 R (lstnumber.-14.3) 2165 0 R (lstnumber.-14.4) 2166 0 R (lstnumber.-14.5) 2167 0 R (lstnumber.-14.6) 2168 0 R] +/Names [(lstnumber.-14.1) 2165 0 R (lstnumber.-14.2) 2166 0 R (lstnumber.-14.3) 2167 0 R (lstnumber.-14.4) 2168 0 R (lstnumber.-14.5) 2169 0 R (lstnumber.-14.6) 2170 0 R] /Limits [(lstnumber.-14.1) (lstnumber.-14.6)] >> -% 2386 0 obj +% 2388 0 obj << -/Names [(lstnumber.-14.7) 2169 0 R (lstnumber.-2.1) 1915 0 R (lstnumber.-3.1) 1922 0 R (lstnumber.-4.1) 1928 0 R (lstnumber.-5.1) 1934 0 R (lstnumber.-6.1) 1946 0 R] +/Names [(lstnumber.-14.7) 2171 0 R (lstnumber.-2.1) 1916 0 R (lstnumber.-3.1) 1923 0 R (lstnumber.-4.1) 1929 0 R (lstnumber.-5.1) 1935 0 R (lstnumber.-6.1) 1947 0 R] /Limits [(lstnumber.-14.7) (lstnumber.-6.1)] >> -% 2387 0 obj +% 2389 0 obj << -/Names [(lstnumber.-7.1) 1953 0 R (lstnumber.-8.1) 1961 0 R (lstnumber.-9.1) 1968 0 R (page.1) 683 0 R (page.10) 1016 0 R (page.100) 1679 0 R] +/Names [(lstnumber.-7.1) 1954 0 R (lstnumber.-8.1) 1962 0 R (lstnumber.-9.1) 1969 0 R (page.1) 683 0 R (page.10) 1017 0 R (page.100) 1680 0 R] /Limits [(lstnumber.-7.1) (page.100)] >> -% 2388 0 obj +% 2390 0 obj << -/Names [(page.101) 1684 0 R (page.102) 1690 0 R (page.103) 1696 0 R (page.104) 1703 0 R (page.105) 1709 0 R (page.106) 1716 0 R] +/Names [(page.101) 1685 0 R (page.102) 1691 0 R (page.103) 1697 0 R (page.104) 1704 0 R (page.105) 1710 0 R (page.106) 1717 0 R] /Limits [(page.101) (page.106)] >> -% 2389 0 obj +% 2391 0 obj << -/Names [(page.107) 1724 0 R (page.108) 1728 0 R (page.109) 1738 0 R (page.11) 1024 0 R (page.110) 1743 0 R (page.111) 1747 0 R] +/Names [(page.107) 1725 0 R (page.108) 1729 0 R (page.109) 1739 0 R (page.11) 1025 0 R (page.110) 1744 0 R (page.111) 1748 0 R] /Limits [(page.107) (page.111)] >> -% 2390 0 obj +% 2392 0 obj << -/Names [(page.112) 1762 0 R (page.113) 1766 0 R (page.114) 1772 0 R (page.115) 1778 0 R (page.116) 1786 0 R (page.117) 1790 0 R] +/Names [(page.112) 1763 0 R (page.113) 1767 0 R (page.114) 1773 0 R (page.115) 1779 0 R (page.116) 1787 0 R (page.117) 1791 0 R] /Limits [(page.112) (page.117)] >> -% 2391 0 obj +% 2393 0 obj << -/Names [(page.118) 1794 0 R (page.119) 1798 0 R (page.12) 1035 0 R (page.120) 1802 0 R (page.121) 1806 0 R (page.122) 1811 0 R] +/Names [(page.118) 1795 0 R (page.119) 1799 0 R (page.12) 1036 0 R (page.120) 1803 0 R (page.121) 1807 0 R (page.122) 1812 0 R] /Limits [(page.118) (page.122)] >> -% 2392 0 obj +% 2394 0 obj << -/Names [(page.123) 1819 0 R (page.124) 1823 0 R (page.125) 1831 0 R (page.126) 1835 0 R (page.127) 1842 0 R (page.128) 1847 0 R] +/Names [(page.123) 1820 0 R (page.124) 1824 0 R (page.125) 1832 0 R (page.126) 1836 0 R (page.127) 1843 0 R (page.128) 1848 0 R] /Limits [(page.123) (page.128)] >> -% 2393 0 obj +% 2395 0 obj << -/Names [(page.129) 1854 0 R (page.13) 1051 0 R (page.130) 1858 0 R (page.131) 1865 0 R (page.132) 1869 0 R (page.133) 1876 0 R] +/Names [(page.129) 1855 0 R (page.13) 1052 0 R (page.130) 1859 0 R (page.131) 1866 0 R (page.132) 1870 0 R (page.133) 1877 0 R] /Limits [(page.129) (page.133)] >> -% 2394 0 obj +% 2396 0 obj << -/Names [(page.134) 1881 0 R (page.135) 1891 0 R (page.136) 1896 0 R (page.137) 1903 0 R (page.138) 1909 0 R (page.139) 1913 0 R] +/Names [(page.134) 1882 0 R (page.135) 1892 0 R (page.136) 1897 0 R (page.137) 1904 0 R (page.138) 1910 0 R (page.139) 1914 0 R] /Limits [(page.134) (page.139)] >> -% 2395 0 obj +% 2397 0 obj << -/Names [(page.14) 1056 0 R (page.140) 1920 0 R (page.141) 1926 0 R (page.142) 1932 0 R (page.143) 1938 0 R (page.144) 1944 0 R] +/Names [(page.14) 1057 0 R (page.140) 1921 0 R (page.141) 1927 0 R (page.142) 1933 0 R (page.143) 1939 0 R (page.144) 1945 0 R] /Limits [(page.14) (page.144)] >> -% 2396 0 obj +% 2398 0 obj << -/Names [(page.145) 1951 0 R (page.146) 1959 0 R (page.147) 1966 0 R (page.148) 1973 0 R (page.149) 1980 0 R (page.15) 1060 0 R] +/Names [(page.145) 1952 0 R (page.146) 1960 0 R (page.147) 1967 0 R (page.148) 1974 0 R (page.149) 1981 0 R (page.15) 1061 0 R] /Limits [(page.145) (page.15)] >> -% 2397 0 obj +% 2399 0 obj << -/Names [(page.150) 1986 0 R (page.151) 1990 0 R (page.152) 1998 0 R (page.153) 2009 0 R (page.154) 2013 0 R (page.155) 2022 0 R] +/Names [(page.150) 1987 0 R (page.151) 1991 0 R (page.152) 1999 0 R (page.153) 2010 0 R (page.154) 2014 0 R (page.155) 2023 0 R] /Limits [(page.150) (page.155)] >> -% 2398 0 obj +% 2400 0 obj << -/Names [(page.156) 2026 0 R (page.157) 2035 0 R (page.158) 2041 0 R (page.159) 2045 0 R (page.16) 1065 0 R (page.160) 2052 0 R] +/Names [(page.156) 2027 0 R (page.157) 2036 0 R (page.158) 2042 0 R (page.159) 2046 0 R (page.16) 1066 0 R (page.160) 2053 0 R] /Limits [(page.156) (page.160)] >> -% 2399 0 obj +% 2401 0 obj << -/Names [(page.161) 2060 0 R (page.162) 2067 0 R (page.163) 2071 0 R (page.164) 2079 0 R (page.165) 2090 0 R (page.166) 2095 0 R] +/Names [(page.161) 2061 0 R (page.162) 2068 0 R (page.163) 2072 0 R (page.164) 2080 0 R (page.165) 2091 0 R (page.166) 2096 0 R] /Limits [(page.161) (page.166)] >> -% 2400 0 obj +% 2402 0 obj << -/Names [(page.167) 2103 0 R (page.168) 2112 0 R (page.169) 2116 0 R (page.17) 1072 0 R (page.170) 2127 0 R (page.171) 2141 0 R] +/Names [(page.167) 2105 0 R (page.168) 2114 0 R (page.169) 2118 0 R (page.17) 1073 0 R (page.170) 2129 0 R (page.171) 2143 0 R] /Limits [(page.167) (page.171)] >> -% 2401 0 obj +% 2403 0 obj << -/Names [(page.172) 2150 0 R (page.173) 2161 0 R (page.174) 2190 0 R (page.175) 2210 0 R (page.176) 2229 0 R (page.177) 2245 0 R] +/Names [(page.172) 2152 0 R (page.173) 2163 0 R (page.174) 2192 0 R (page.175) 2212 0 R (page.176) 2231 0 R (page.177) 2247 0 R] /Limits [(page.172) (page.177)] >> -% 2402 0 obj +% 2404 0 obj << -/Names [(page.178) 2249 0 R (page.179) 2253 0 R (page.18) 1080 0 R (page.180) 2258 0 R (page.181) 2262 0 R (page.182) 2267 0 R] +/Names [(page.178) 2251 0 R (page.179) 2255 0 R (page.18) 1081 0 R (page.180) 2260 0 R (page.181) 2264 0 R (page.182) 2269 0 R] /Limits [(page.178) (page.182)] >> -% 2403 0 obj +% 2405 0 obj << -/Names [(page.183) 2271 0 R (page.184) 2280 0 R (page.19) 1085 0 R (page.2) 693 0 R (page.20) 1091 0 R (page.21) 1095 0 R] +/Names [(page.183) 2273 0 R (page.184) 2282 0 R (page.19) 1086 0 R (page.2) 693 0 R (page.20) 1092 0 R (page.21) 1096 0 R] /Limits [(page.183) (page.21)] >> -% 2404 0 obj +% 2406 0 obj << -/Names [(page.22) 1099 0 R (page.23) 1105 0 R (page.24) 1109 0 R (page.25) 1115 0 R (page.26) 1122 0 R (page.27) 1128 0 R] +/Names [(page.22) 1100 0 R (page.23) 1106 0 R (page.24) 1110 0 R (page.25) 1116 0 R (page.26) 1123 0 R (page.27) 1129 0 R] /Limits [(page.22) (page.27)] >> -% 2405 0 obj +% 2407 0 obj << -/Names [(page.28) 1135 0 R (page.29) 1141 0 R (page.3) 926 0 R (page.30) 1145 0 R (page.31) 1156 0 R (page.32) 1164 0 R] +/Names [(page.28) 1136 0 R (page.29) 1142 0 R (page.3) 926 0 R (page.30) 1146 0 R (page.31) 1157 0 R (page.32) 1165 0 R] /Limits [(page.28) (page.32)] >> -% 2406 0 obj +% 2408 0 obj << -/Names [(page.33) 1174 0 R (page.34) 1180 0 R (page.35) 1191 0 R (page.36) 1196 0 R (page.37) 1203 0 R (page.38) 1209 0 R] +/Names [(page.33) 1175 0 R (page.34) 1181 0 R (page.35) 1192 0 R (page.36) 1197 0 R (page.37) 1204 0 R (page.38) 1210 0 R] /Limits [(page.33) (page.38)] >> -% 2407 0 obj +% 2409 0 obj << -/Names [(page.39) 1217 0 R (page.4) 939 0 R (page.40) 1225 0 R (page.41) 1230 0 R (page.42) 1238 0 R (page.43) 1243 0 R] +/Names [(page.39) 1218 0 R (page.4) 940 0 R (page.40) 1226 0 R (page.41) 1231 0 R (page.42) 1239 0 R (page.43) 1244 0 R] /Limits [(page.39) (page.43)] >> -% 2408 0 obj +% 2410 0 obj << -/Names [(page.44) 1251 0 R (page.45) 1256 0 R (page.46) 1269 0 R (page.47) 1276 0 R (page.48) 1284 0 R (page.49) 1295 0 R] +/Names [(page.44) 1252 0 R (page.45) 1257 0 R (page.46) 1270 0 R (page.47) 1277 0 R (page.48) 1285 0 R (page.49) 1296 0 R] /Limits [(page.44) (page.49)] >> -% 2409 0 obj +% 2411 0 obj << -/Names [(page.5) 952 0 R (page.50) 1311 0 R (page.51) 1317 0 R (page.52) 1328 0 R (page.53) 1334 0 R (page.54) 1345 0 R] +/Names [(page.5) 953 0 R (page.50) 1312 0 R (page.51) 1318 0 R (page.52) 1329 0 R (page.53) 1335 0 R (page.54) 1346 0 R] /Limits [(page.5) (page.54)] >> -% 2410 0 obj +% 2412 0 obj << -/Names [(page.55) 1350 0 R (page.56) 1362 0 R (page.57) 1367 0 R (page.58) 1376 0 R (page.59) 1382 0 R (page.6) 964 0 R] +/Names [(page.55) 1351 0 R (page.56) 1363 0 R (page.57) 1368 0 R (page.58) 1377 0 R (page.59) 1383 0 R (page.6) 965 0 R] /Limits [(page.55) (page.6)] >> -% 2411 0 obj +% 2413 0 obj << -/Names [(page.60) 1391 0 R (page.61) 1398 0 R (page.62) 1412 0 R (page.63) 1419 0 R (page.64) 1428 0 R (page.65) 1436 0 R] +/Names [(page.60) 1392 0 R (page.61) 1399 0 R (page.62) 1413 0 R (page.63) 1420 0 R (page.64) 1429 0 R (page.65) 1437 0 R] /Limits [(page.60) (page.65)] >> -% 2412 0 obj +% 2414 0 obj << -/Names [(page.66) 1440 0 R (page.67) 1455 0 R (page.68) 1461 0 R (page.69) 1467 0 R (page.7) 969 0 R (page.70) 1474 0 R] +/Names [(page.66) 1441 0 R (page.67) 1456 0 R (page.68) 1462 0 R (page.69) 1468 0 R (page.7) 970 0 R (page.70) 1475 0 R] /Limits [(page.66) (page.70)] >> -% 2413 0 obj +% 2415 0 obj << -/Names [(page.71) 1478 0 R (page.72) 1483 0 R (page.73) 1489 0 R (page.74) 1496 0 R (page.75) 1507 0 R (page.76) 1512 0 R] +/Names [(page.71) 1479 0 R (page.72) 1484 0 R (page.73) 1490 0 R (page.74) 1497 0 R (page.75) 1508 0 R (page.76) 1513 0 R] /Limits [(page.71) (page.76)] >> -% 2414 0 obj +% 2416 0 obj << -/Names [(page.77) 1521 0 R (page.78) 1528 0 R (page.79) 1533 0 R (page.8) 984 0 R (page.80) 1540 0 R (page.81) 1544 0 R] +/Names [(page.77) 1522 0 R (page.78) 1529 0 R (page.79) 1534 0 R (page.8) 985 0 R (page.80) 1541 0 R (page.81) 1545 0 R] /Limits [(page.77) (page.81)] >> -% 2415 0 obj +% 2417 0 obj << -/Names [(page.82) 1552 0 R (page.83) 1557 0 R (page.84) 1565 0 R (page.85) 1571 0 R (page.86) 1581 0 R (page.87) 1594 0 R] +/Names [(page.82) 1553 0 R (page.83) 1558 0 R (page.84) 1566 0 R (page.85) 1572 0 R (page.86) 1582 0 R (page.87) 1595 0 R] /Limits [(page.82) (page.87)] >> -% 2416 0 obj +% 2418 0 obj << -/Names [(page.88) 1598 0 R (page.89) 1611 0 R (page.9) 1005 0 R (page.90) 1618 0 R (page.91) 1625 0 R (page.92) 1630 0 R] +/Names [(page.88) 1599 0 R (page.89) 1612 0 R (page.9) 1006 0 R (page.90) 1619 0 R (page.91) 1626 0 R (page.92) 1631 0 R] /Limits [(page.88) (page.92)] >> -% 2417 0 obj +% 2419 0 obj << -/Names [(page.93) 1637 0 R (page.94) 1641 0 R (page.95) 1650 0 R (page.96) 1658 0 R (page.97) 1662 0 R (page.98) 1668 0 R] +/Names [(page.93) 1638 0 R (page.94) 1642 0 R (page.95) 1651 0 R (page.96) 1659 0 R (page.97) 1663 0 R (page.98) 1669 0 R] /Limits [(page.93) (page.98)] >> -% 2418 0 obj +% 2420 0 obj << -/Names [(page.99) 1672 0 R (page.i) 739 0 R (page.ii) 795 0 R (page.iii) 843 0 R (page.iv) 886 0 R (precdata) 1136 0 R] +/Names [(page.99) 1673 0 R (page.i) 739 0 R (page.ii) 795 0 R (page.iii) 843 0 R (page.iv) 886 0 R (precdata) 1137 0 R] /Limits [(page.99) (precdata)] >> -% 2419 0 obj +% 2421 0 obj << /Names [(section*.1) 740 0 R (section*.10) 634 0 R (section*.11) 638 0 R (section*.12) 642 0 R (section*.13) 646 0 R (section*.14) 650 0 R] /Limits [(section*.1) (section*.14)] >> -% 2420 0 obj +% 2422 0 obj << /Names [(section*.15) 654 0 R (section*.16) 658 0 R (section*.17) 662 0 R (section*.18) 666 0 R (section*.19) 670 0 R (section*.2) 7 0 R] /Limits [(section*.15) (section*.2)] >> -% 2421 0 obj +% 2423 0 obj << -/Names [(section*.20) 674 0 R (section*.21) 2272 0 R (section*.3) 2142 0 R (section*.4) 2170 0 R (section*.5) 2192 0 R (section*.6) 2212 0 R] +/Names [(section*.20) 674 0 R (section*.21) 2274 0 R (section*.3) 2144 0 R (section*.4) 2172 0 R (section*.5) 2194 0 R (section*.6) 2214 0 R] /Limits [(section*.20) (section*.6)] >> -% 2422 0 obj +% 2424 0 obj << /Names [(section*.7) 622 0 R (section*.8) 626 0 R (section*.9) 630 0 R (section.1) 11 0 R (section.10) 545 0 R (section.11) 585 0 R] /Limits [(section*.7) (section.11)] >> -% 2423 0 obj +% 2425 0 obj << /Names [(section.12) 597 0 R (section.13) 618 0 R (section.2) 15 0 R (section.3) 39 0 R (section.4) 224 0 R (section.5) 292 0 R] /Limits [(section.12) (section.5)] >> -% 2424 0 obj +% 2426 0 obj << -/Names [(section.6) 312 0 R (section.7) 425 0 R (section.8) 497 0 R (section.9) 517 0 R (spbasedata) 1081 0 R (spdata) 1073 0 R] +/Names [(section.6) 312 0 R (section.7) 425 0 R (section.8) 497 0 R (section.9) 517 0 R (spbasedata) 1082 0 R (spdata) 1074 0 R] /Limits [(section.6) (spdata)] >> -% 2425 0 obj +% 2427 0 obj << /Names [(subsection.10.1) 549 0 R (subsection.10.2) 553 0 R (subsection.10.3) 557 0 R (subsection.10.4) 561 0 R (subsection.10.5) 565 0 R (subsection.10.6) 569 0 R] /Limits [(subsection.10.1) (subsection.10.6)] >> -% 2426 0 obj +% 2428 0 obj << /Names [(subsection.10.7) 573 0 R (subsection.10.8) 577 0 R (subsection.10.9) 581 0 R (subsection.11.1) 589 0 R (subsection.11.2) 593 0 R (subsection.12.1) 601 0 R] /Limits [(subsection.10.7) (subsection.12.1)] >> -% 2427 0 obj +% 2429 0 obj << /Names [(subsection.12.2) 606 0 R (subsection.12.3) 610 0 R (subsection.12.4) 614 0 R (subsection.2.1) 19 0 R (subsection.2.2) 23 0 R (subsection.2.3) 27 0 R] /Limits [(subsection.12.2) (subsection.2.3)] >> -% 2428 0 obj +% 2430 0 obj << /Names [(subsection.2.4) 35 0 R (subsection.3.1) 43 0 R (subsection.3.2) 107 0 R (subsection.3.3) 187 0 R (subsection.3.4) 216 0 R (subsection.3.5) 220 0 R] /Limits [(subsection.2.4) (subsection.3.5)] >> -% 2429 0 obj +% 2431 0 obj << /Names [(subsection.4.1) 228 0 R (subsection.4.10) 264 0 R (subsection.4.11) 268 0 R (subsection.4.12) 272 0 R (subsection.4.13) 276 0 R (subsection.4.14) 280 0 R] /Limits [(subsection.4.1) (subsection.4.14)] >> -% 2430 0 obj +% 2432 0 obj << /Names [(subsection.4.15) 284 0 R (subsection.4.16) 288 0 R (subsection.4.2) 232 0 R (subsection.4.3) 236 0 R (subsection.4.4) 240 0 R (subsection.4.5) 244 0 R] /Limits [(subsection.4.15) (subsection.4.5)] >> -% 2431 0 obj +% 2433 0 obj << /Names [(subsection.4.6) 248 0 R (subsection.4.7) 252 0 R (subsection.4.8) 256 0 R (subsection.4.9) 260 0 R (subsection.5.1) 296 0 R (subsection.5.2) 300 0 R] /Limits [(subsection.4.6) (subsection.5.2)] >> -% 2432 0 obj +% 2434 0 obj << /Names [(subsection.5.3) 304 0 R (subsection.5.4) 308 0 R (subsection.6.1) 316 0 R (subsection.6.10) 352 0 R (subsection.6.11) 356 0 R (subsection.6.12) 360 0 R] /Limits [(subsection.5.3) (subsection.6.12)] >> -% 2433 0 obj +% 2435 0 obj << /Names [(subsection.6.13) 364 0 R (subsection.6.14) 368 0 R (subsection.6.15) 372 0 R (subsection.6.16) 376 0 R (subsection.6.17) 380 0 R (subsection.6.18) 384 0 R] /Limits [(subsection.6.13) (subsection.6.18)] >> -% 2434 0 obj +% 2436 0 obj << /Names [(subsection.6.19) 388 0 R (subsection.6.2) 320 0 R (subsection.6.20) 392 0 R (subsection.6.21) 396 0 R (subsection.6.22) 400 0 R (subsection.6.23) 405 0 R] /Limits [(subsection.6.19) (subsection.6.23)] >> -% 2435 0 obj +% 2437 0 obj << /Names [(subsection.6.24) 409 0 R (subsection.6.25) 413 0 R (subsection.6.26) 417 0 R (subsection.6.27) 421 0 R (subsection.6.3) 324 0 R (subsection.6.4) 328 0 R] /Limits [(subsection.6.24) (subsection.6.4)] >> -% 2436 0 obj +% 2438 0 obj << /Names [(subsection.6.5) 332 0 R (subsection.6.6) 336 0 R (subsection.6.7) 340 0 R (subsection.6.8) 344 0 R (subsection.6.9) 348 0 R (subsection.7.1) 429 0 R] /Limits [(subsection.6.5) (subsection.7.1)] >> -% 2437 0 obj +% 2439 0 obj << /Names [(subsection.7.10) 465 0 R (subsection.7.11) 469 0 R (subsection.7.12) 473 0 R (subsection.7.13) 477 0 R (subsection.7.14) 481 0 R (subsection.7.15) 485 0 R] /Limits [(subsection.7.10) (subsection.7.15)] >> -% 2438 0 obj +% 2440 0 obj << /Names [(subsection.7.16) 489 0 R (subsection.7.17) 493 0 R (subsection.7.2) 433 0 R (subsection.7.3) 437 0 R (subsection.7.4) 441 0 R (subsection.7.5) 445 0 R] /Limits [(subsection.7.16) (subsection.7.5)] >> -% 2439 0 obj +% 2441 0 obj << /Names [(subsection.7.6) 449 0 R (subsection.7.7) 453 0 R (subsection.7.8) 457 0 R (subsection.7.9) 461 0 R (subsection.8.1) 501 0 R (subsection.8.2) 505 0 R] /Limits [(subsection.7.6) (subsection.8.2)] >> -% 2440 0 obj +% 2442 0 obj << /Names [(subsection.8.3) 509 0 R (subsection.8.4) 513 0 R (subsection.9.1) 521 0 R (subsection.9.2) 525 0 R (subsection.9.3) 529 0 R (subsection.9.4) 533 0 R] /Limits [(subsection.8.3) (subsection.9.4)] >> -% 2441 0 obj +% 2443 0 obj << /Names [(subsection.9.5) 537 0 R (subsection.9.6) 541 0 R (subsubsection.2.3.1) 31 0 R (subsubsection.3.1.1) 47 0 R (subsubsection.3.1.10) 83 0 R (subsubsection.3.1.11) 87 0 R] /Limits [(subsection.9.5) (subsubsection.3.1.11)] >> -% 2442 0 obj +% 2444 0 obj << /Names [(subsubsection.3.1.12) 91 0 R (subsubsection.3.1.13) 95 0 R (subsubsection.3.1.14) 99 0 R (subsubsection.3.1.15) 103 0 R (subsubsection.3.1.2) 51 0 R (subsubsection.3.1.3) 55 0 R] /Limits [(subsubsection.3.1.12) (subsubsection.3.1.3)] >> -% 2443 0 obj +% 2445 0 obj << /Names [(subsubsection.3.1.4) 59 0 R (subsubsection.3.1.5) 63 0 R (subsubsection.3.1.6) 67 0 R (subsubsection.3.1.7) 71 0 R (subsubsection.3.1.8) 75 0 R (subsubsection.3.1.9) 79 0 R] /Limits [(subsubsection.3.1.4) (subsubsection.3.1.9)] >> -% 2444 0 obj +% 2446 0 obj << /Names [(subsubsection.3.2.1) 111 0 R (subsubsection.3.2.10) 147 0 R (subsubsection.3.2.11) 151 0 R (subsubsection.3.2.12) 155 0 R (subsubsection.3.2.13) 159 0 R (subsubsection.3.2.14) 163 0 R] /Limits [(subsubsection.3.2.1) (subsubsection.3.2.14)] >> -% 2445 0 obj +% 2447 0 obj << /Names [(subsubsection.3.2.15) 167 0 R (subsubsection.3.2.16) 171 0 R (subsubsection.3.2.17) 175 0 R (subsubsection.3.2.18) 179 0 R (subsubsection.3.2.19) 183 0 R (subsubsection.3.2.2) 115 0 R] /Limits [(subsubsection.3.2.15) (subsubsection.3.2.2)] >> -% 2446 0 obj +% 2448 0 obj << /Names [(subsubsection.3.2.3) 119 0 R (subsubsection.3.2.4) 123 0 R (subsubsection.3.2.5) 127 0 R (subsubsection.3.2.6) 131 0 R (subsubsection.3.2.7) 135 0 R (subsubsection.3.2.8) 139 0 R] /Limits [(subsubsection.3.2.3) (subsubsection.3.2.8)] >> -% 2447 0 obj +% 2449 0 obj << /Names [(subsubsection.3.2.9) 143 0 R (subsubsection.3.3.1) 191 0 R (subsubsection.3.3.2) 195 0 R (subsubsection.3.3.3) 199 0 R (subsubsection.3.3.4) 204 0 R (subsubsection.3.3.5) 208 0 R] /Limits [(subsubsection.3.2.9) (subsubsection.3.3.5)] >> -% 2448 0 obj +% 2450 0 obj << -/Names [(subsubsection.3.3.6) 212 0 R (table.1) 1129 0 R (table.10) 1277 0 R (table.11) 1286 0 R (table.12) 1299 0 R (table.13) 1318 0 R] +/Names [(subsubsection.3.3.6) 212 0 R (table.1) 1130 0 R (table.10) 1278 0 R (table.11) 1287 0 R (table.12) 1300 0 R (table.13) 1319 0 R] /Limits [(subsubsection.3.3.6) (table.13)] >> -% 2449 0 obj +% 2451 0 obj << -/Names [(table.14) 1346 0 R (table.15) 1363 0 R (table.16) 1377 0 R (table.17) 1392 0 R (table.18) 1420 0 R (table.19) 1456 0 R] +/Names [(table.14) 1347 0 R (table.15) 1364 0 R (table.16) 1378 0 R (table.17) 1393 0 R (table.18) 1421 0 R (table.19) 1457 0 R] /Limits [(table.14) (table.19)] >> -% 2450 0 obj +% 2452 0 obj << -/Names [(table.2) 1175 0 R (table.20) 1468 0 R (table.21) 2000 0 R (table.22) 2145 0 R (table.3) 1192 0 R (table.4) 1204 0 R] +/Names [(table.2) 1176 0 R (table.20) 1469 0 R (table.21) 2001 0 R (table.22) 2147 0 R (table.3) 1193 0 R (table.4) 1205 0 R] /Limits [(table.2) (table.4)] >> -% 2451 0 obj +% 2453 0 obj << -/Names [(table.5) 1218 0 R (table.6) 1226 0 R (table.7) 1239 0 R (table.8) 1252 0 R (table.9) 1270 0 R (title.0) 3 0 R] +/Names [(table.5) 1219 0 R (table.6) 1227 0 R (table.7) 1240 0 R (table.8) 1253 0 R (table.9) 1271 0 R (title.0) 3 0 R] /Limits [(table.5) (title.0)] >> -% 2452 0 obj +% 2454 0 obj << -/Names [(vbasedata) 1061 0 R (vdata) 1116 0 R] +/Names [(vbasedata) 1062 0 R (vdata) 1117 0 R] /Limits [(vbasedata) (vdata)] >> -% 2453 0 obj +% 2455 0 obj << -/Kids [2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R 2351 0 R] +/Kids [2348 0 R 2349 0 R 2350 0 R 2351 0 R 2352 0 R 2353 0 R] /Limits [(Doc-Start) (Item.125)] >> -% 2454 0 obj +% 2456 0 obj << -/Kids [2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R] +/Kids [2354 0 R 2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R] /Limits [(Item.126) (Item.21)] >> -% 2455 0 obj +% 2457 0 obj << -/Kids [2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R] +/Kids [2360 0 R 2361 0 R 2362 0 R 2363 0 R 2364 0 R 2365 0 R] /Limits [(Item.22) (Item.54)] >> -% 2456 0 obj +% 2458 0 obj << -/Kids [2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R] +/Kids [2366 0 R 2367 0 R 2368 0 R 2369 0 R 2370 0 R 2371 0 R] /Limits [(Item.55) (Item.87)] >> -% 2457 0 obj +% 2459 0 obj << -/Kids [2370 0 R 2371 0 R 2372 0 R 2373 0 R 2375 0 R 2376 0 R] +/Kids [2372 0 R 2373 0 R 2374 0 R 2376 0 R 2377 0 R 2378 0 R] /Limits [(Item.88) (cite.RouXiaXu:11)] >> -% 2458 0 obj +% 2460 0 obj << -/Kids [2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R 2382 0 R] +/Kids [2379 0 R 2380 0 R 2381 0 R 2382 0 R 2383 0 R 2384 0 R] /Limits [(cite.Sparse03) (lstlisting.-7)] >> -% 2459 0 obj +% 2461 0 obj << -/Kids [2383 0 R 2384 0 R 2385 0 R 2386 0 R 2387 0 R 2388 0 R] +/Kids [2385 0 R 2386 0 R 2387 0 R 2388 0 R 2389 0 R 2390 0 R] /Limits [(lstlisting.-8) (page.106)] >> -% 2460 0 obj +% 2462 0 obj << -/Kids [2389 0 R 2390 0 R 2391 0 R 2392 0 R 2393 0 R 2394 0 R] +/Kids [2391 0 R 2392 0 R 2393 0 R 2394 0 R 2395 0 R 2396 0 R] /Limits [(page.107) (page.139)] >> -% 2461 0 obj +% 2463 0 obj << -/Kids [2395 0 R 2396 0 R 2397 0 R 2398 0 R 2399 0 R 2400 0 R] +/Kids [2397 0 R 2398 0 R 2399 0 R 2400 0 R 2401 0 R 2402 0 R] /Limits [(page.14) (page.171)] >> -% 2462 0 obj +% 2464 0 obj << -/Kids [2401 0 R 2402 0 R 2403 0 R 2404 0 R 2405 0 R 2406 0 R] +/Kids [2403 0 R 2404 0 R 2405 0 R 2406 0 R 2407 0 R 2408 0 R] /Limits [(page.172) (page.38)] >> -% 2463 0 obj +% 2465 0 obj << -/Kids [2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2412 0 R] +/Kids [2409 0 R 2410 0 R 2411 0 R 2412 0 R 2413 0 R 2414 0 R] /Limits [(page.39) (page.70)] >> -% 2464 0 obj +% 2466 0 obj << -/Kids [2413 0 R 2414 0 R 2415 0 R 2416 0 R 2417 0 R 2418 0 R] +/Kids [2415 0 R 2416 0 R 2417 0 R 2418 0 R 2419 0 R 2420 0 R] /Limits [(page.71) (precdata)] >> -% 2465 0 obj +% 2467 0 obj << -/Kids [2419 0 R 2420 0 R 2421 0 R 2422 0 R 2423 0 R 2424 0 R] +/Kids [2421 0 R 2422 0 R 2423 0 R 2424 0 R 2425 0 R 2426 0 R] /Limits [(section*.1) (spdata)] >> -% 2466 0 obj +% 2468 0 obj << -/Kids [2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R 2430 0 R] +/Kids [2427 0 R 2428 0 R 2429 0 R 2430 0 R 2431 0 R 2432 0 R] /Limits [(subsection.10.1) (subsection.4.5)] >> -% 2467 0 obj +% 2469 0 obj << -/Kids [2431 0 R 2432 0 R 2433 0 R 2434 0 R 2435 0 R 2436 0 R] +/Kids [2433 0 R 2434 0 R 2435 0 R 2436 0 R 2437 0 R 2438 0 R] /Limits [(subsection.4.6) (subsection.7.1)] >> -% 2468 0 obj +% 2470 0 obj << -/Kids [2437 0 R 2438 0 R 2439 0 R 2440 0 R 2441 0 R 2442 0 R] +/Kids [2439 0 R 2440 0 R 2441 0 R 2442 0 R 2443 0 R 2444 0 R] /Limits [(subsection.7.10) (subsubsection.3.1.3)] >> -% 2469 0 obj +% 2471 0 obj << -/Kids [2443 0 R 2444 0 R 2445 0 R 2446 0 R 2447 0 R 2448 0 R] +/Kids [2445 0 R 2446 0 R 2447 0 R 2448 0 R 2449 0 R 2450 0 R] /Limits [(subsubsection.3.1.4) (table.13)] >> -% 2470 0 obj +% 2472 0 obj << -/Kids [2449 0 R 2450 0 R 2451 0 R 2452 0 R] +/Kids [2451 0 R 2452 0 R 2453 0 R 2454 0 R] /Limits [(table.14) (vdata)] >> -% 2471 0 obj +% 2473 0 obj << -/Kids [2453 0 R 2454 0 R 2455 0 R 2456 0 R 2457 0 R 2458 0 R] +/Kids [2455 0 R 2456 0 R 2457 0 R 2458 0 R 2459 0 R 2460 0 R] /Limits [(Doc-Start) (lstlisting.-7)] >> -% 2472 0 obj +% 2474 0 obj << -/Kids [2459 0 R 2460 0 R 2461 0 R 2462 0 R 2463 0 R 2464 0 R] +/Kids [2461 0 R 2462 0 R 2463 0 R 2464 0 R 2465 0 R 2466 0 R] /Limits [(lstlisting.-8) (precdata)] >> -% 2473 0 obj -<< -/Kids [2465 0 R 2466 0 R 2467 0 R 2468 0 R 2469 0 R 2470 0 R] -/Limits [(section*.1) (vdata)] ->> endstream endobj -2478 0 obj +2480 0 obj << /Title (Parallel Sparse BLAS V. 3.9.0) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id$) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() -/CreationDate (D:20251117160928+01'00') -/ModDate (D:20251117160928+01'00') +/CreationDate (D:20251223150647+01'00') +/ModDate (D:20251223150647+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> endobj -2475 0 obj +2476 0 obj << /Type /ObjStm -/N 3 -/First 24 -/Length 356 +/N 4 +/First 34 +/Length 478 >> stream -2474 0 2476 84 2477 119 -% 2474 0 obj +2475 0 2477 112 2478 196 2479 231 +% 2475 0 obj +<< +/Kids [2467 0 R 2468 0 R 2469 0 R 2470 0 R 2471 0 R 2472 0 R] +/Limits [(section*.1) (vdata)] +>> +% 2477 0 obj << -/Kids [2471 0 R 2472 0 R 2473 0 R] +/Kids [2473 0 R 2474 0 R 2475 0 R] /Limits [(Doc-Start) (vdata)] >> -% 2476 0 obj +% 2478 0 obj << -/Dests 2474 0 R +/Dests 2477 0 R >> -% 2477 0 obj +% 2479 0 obj << /Type /Catalog -/Pages 2342 0 R -/Outlines 2344 0 R -/Names 2476 0 R +/Pages 2344 0 R +/Outlines 2346 0 R +/Names 2478 0 R /URI (http://ce.uniroma2.it/psblas) /PageMode/UseOutlines/PageLabels<>2<>6<>]>> /OpenAction 677 0 R >> endstream endobj -2479 0 obj +2481 0 obj << /Type /XRef -/Index [0 2480] -/Size 2480 +/Index [0 2482] +/Size 2482 /W [1 3 1] -/Root 2477 0 R -/Info 2478 0 R -/ID [ ] -/Length 12400 ->> -stream -˙]) )Hz& )Gz3 )Fz> )EzF )D  -zR )C  z[ )B Ó )AÓ )@Ó$ )?Ó% )>ÓE )=ÓF )<ÓG );ÓH ):ÓL )9 ÓM )8!"ÓN )7#$ÓR )6%&ÓS )5'(ÓU )4)*ÓV )3+,ÓZ )2-.Ó[ )1/0Ó\ )012Óc )/344 ).564 )-784 ),9:4  )+;<4  )*=>4 ))?@4 )(AB4 )'CD4 )&EF4 )%GH4 )$IJ4 )#KL4 )"MN4% )!OP4& ) QR4' )ST4+ )UV41 )WX42 )YZ43 )[\44 )]^4: )_`4; )ab4< )cË>\4B )ËË4G )ËË4H )ËË4I )ËË4P )Ë Ë -4T )Ë Ë 4^ )Ë ËŤ - )ËËŤ )ËËŤ% ) ËËŤ1 ) ËËŤ9 ) ËËŤE ) -ËËŤP ) ËËŤa )ËËţ )ËË ţ  )Ë!Ë"ţ )Ë#Ë$ţ( )Ë%Ë&ţC )Ë'Ë(ţP )Ë)Ë*ţ_ )Ë+Ë,g )Ë-Ë.g 'cË/Ë0g 'bË1Ë2g= 'aË3Ë4gF '`Ë5Ë6gQ '_Ë7Ë8gR '^Ë9Ë:Ţ ']Ë;Ë<Ţ '\Ë=Ë>Ţ '[Ë?Ë@Ţ 'ZËAËBŢ$ 'YËCËDŢ/ 'XËEËFŢ: 'WËGËHŢU 'VËIËJL 'UËKËLL 'TËMËNL 'SËOËPL 'RËQËRL$ 'QËSËTL, 'PËUËVL0 'OËWËXL5 'NËYËZL? 'MË[Ë\LD 'LË]Ë^LJ 'KË_Ë`LP 'JËaËbLV 'IËc”|YL\ 'H””Lc 'G””· 'F””· 'E””· 'D” ” -·) 'C” ” ·- 'B” ”·3 'A””·9 '@””·@ '?””·D '>””·H '=””·L '<””·P ';””·T ':””·^ '9”” # '8”!”"# '7”#”$# '6”%”&#" '5”'”(#, '4”)”*#8 '3”+”,#= '2”-”.#D '1”/”0#M '0”1”2#S '/”3”4#Y '.”5”6#_ '-”7”8“ ',”9”:“ '+”;”<“  '*”=”>“ ')”?”@“ '(”A”B“" ''”C”D“) '&”E”F“2 '%”G”H“9 '$”I”J“B '#”K”L“O '"”M”N“[ '!”O”P“` ' ”Q”Rţ '”S”Tţ '”U”Vţ '”W”Xţ '”Y”Zţ '”[”\ţ '”]”^ţ5 '”_”`ţL '”a”bţM '”c]ý{ţT ']]ţU ']]€@ ']]€D ']]€E '] ] -€G '] ] €K '] ]€L ']]€M ']]€N ' ]]€O ' ]]€P ' ]]€Q ' -]]€R ' ]]€V ']]€W ']] €X ']!]"€Y ']#]$]%Áć]&]*ľ«]'](ä>ä@ä?äAŇ’]-]+0],]/]0]1]2]3]4]5]6]7]8]9]:];]<]=]>]?]@]A]B]D]F]G]H]I]J]K]L]M]N]P]R]S]T]U]V]W]X]Y]Z][]`]^].ş]\]]]C]E]O]Q]a]b]c  -    !"#$%&'()*.,]_żL+¶Ń/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTVWY[`^-4]UXZ\bzzzzzzzzz z -z z z zzzzzzzzzzzzzzzzzzz z!z"z$_}!z#aczÎJz'z%÷TäBz)z*z+z,z-z.z/z0z1z2z4z(Ĺääääääääääz:z;z<BÍzBz@z5+Łz=z?z6z7z8z9GäzCzDzIzAS&zEä9ä8ä7zGzHä zNzOŚŻzSzJwúzPzQzKzLzMä€czUzVzXzT“YzWÓÓzY¨^zZz\z]z^z_z`zazbzcäCŹÓÓÓ4ÓÓÓÓÓÓÓ Ó -Ó Ó Ó ÓÓÓÓÓä:ÓÓ Ó&ŹÓÓÓÓÓÓÓÓ"Ó'Ó!EoÓ#Ó&Ó)Ó*Ó+Ó2Ó(gęÓ,Ó-Ó.Ó/Ó0Ó1Ó4Ó5Ó@Ó3:Ó6Ó7Ó8Ó9Ó:Ó;Ó<Ó=Ó>ä;Ó?ÓBÓCÓIÓAťďÓDäDÓOÓJ˛IÓKÓWÓPÄÓQÓTÓ]ÓX×çÓYÓ_Ó`Óa4Ó^îćÓb4ä 4^ŕ4 444444 -T54 4äE44d444v44"4Ž44 4!4(4#˘4$4,4)´°4*4.4/464-Ît4045äF494=47í˘484?4@4C4>4A4_4E4M4K4Dí4F4J4O4Q4L$ç4N4U4R6)4S4W4X4Y4Z4[4\4b4`4V74]ä=äG4cŤŤ4aU!Ť°±ŤŤŤŤŤŤ Ť…FŤ Ť ŤŤŤ ¤ŤŤŤŤŤŤŤŤŤŤµ»ŤŤŤŤŘĽŤŤ!Ť"Ť#Ť'Ť Ű>Ť$Ť&äHŤ+Ť(úxŤ)Ť*Ť-Ť.Ť/Ť3Ť,ńŤ0Ť2Ť5Ť6Ť7Ť;Ť4 †Ť8Ť:Ť?Ť<>XŤ=Ť>ŤAŤBŤCŤGŤ@J׍DŤFŤJŤHhĎŤIäIŤLŤMŤNŤRŤKkRŤOŤQŤ[ŤS…ňŤTŤUŤVŤWŤXŤYŤZŤ]Ť^Ť_ŤcŤ\—ÍŤ`ŤbţţţţŢNţţ÷eţţ ţ ţóźţ -ä<ţ ţţţţţţţţţţţţţäJţţţţţ ţ!ţ"ţ$ţ(żţ#ţ&ţ,ţ*ţ%C1ţ'ţ)ţ-ţ.ţ/ţ0ţ1ţ2ţ4ţ+c5ţ3ţ6ţ7ţ9ţ5€›ţ8ţ;ţ<ţ=ţ>ţ?ţ@ţAţEţ:’řţBţDţHţF±^ţGäKţJţKţLţMţNţTţUţRţI˛ÓţOţQţWţSŃ$ţVţYţZţ[ţ\ţ]ţaţXÖ ţ^ţ`ţcgţbô™gHggggg -g*¤gg R[ggg E“ggäLg g gggg`¶”%ggÁ˝ggggg!gÍăgg g#Ęg$g%g*g"ěĹg&g'g(g)g6g-g+0g,g7g.Lg5g/g0g1g2g3g4"hU×g9g:g;g?g8og<g>äMgBg@ĄNgAgDgJgHgC«gEgGgKgLgNgIÉgMgSgOŮDgPgUgXgTóŻgVgWgZg]gYŽg[ä6g\äNŢg^<-g_g`gagbgcކfŢŢŢwîŢŢŢ Ţ”@Ţ Ţ -Ţ Ţ ŢŢŢŢ ŢŢŢŢŢ޸ďŢŢŢŢĹžŢäOŢ!Ţ"Ţ%Ţ ÎTŢ#Ţ*Ţ&ĺ×Ţ'Ţ(Ţ)Ţ,Ţ-Ţ1Ţ+ěčŢ.Ţ0Ţ7Ţ2dŢ3Ţ4Ţ5Ţ6Ţ=Ţ;Ţ8 şŢ9Ţ>Ţ?ŢFŢ<iŢ@ŢAŢBŢCŢDŢEäPŢOŢGLBLFLA_ëLCLELHLLLGmLILKLNLRLM+LOLQäSLTLXLSŽ3LULWLZL_LY˘OL[L]L^La·L`±GLb··!+†···é -·· ·ţŕ· · -· · ····· ę·äT·· ę··&· <»······· ·!·"·#·$·%·*·' jA·(·0·+ k*·,·.·/·6·1 †·2·4·5·=·7 Ű·8·:·;·<äU·A·> Şł·?·E·B µ·C·I·F “·G·M·J Çc·K·Q·N ÍZ·O·U·R Ňž·SäV·[·V ꌷW·X·Y·Zä5·_·\ ˙7·]#·`!¨·a·b·c#"Ę##!Px## #!ha### # -## !|÷# äW##!•4######!©s###!Áí####### !Őţ#!#)#$!îy#%#&#'#(#-#*"Ę#+äX#5#."č#/#0#1ä4#2#3#4#:#6"4Ô#7#9#?#;"K#<#>#A#B#E#@"a>#C#H#I#J#F"|Q#G#P#K"Ą)#L#N#OäY#V#Q"łT#R#T#U#\#W"¸ô#X#Z#[#b#]"ż`#^#`#a“#c"Çż“$!­““ “"“““ ““ -#W“ ““äZ“““#µ““““““#%V““““ “%“#6ś“!“#“$“'“,“&#TQ“(“*“+“/“-#qq“.“3“0#t>“1ä[“5“6“7“;“4#yň“8“:“G“=“>“?“@“E“C“<#Ťě“A“H“D#ź0“F€b“J“K“L“M“P“I#ÔŔ“N“S“Q#ňé“R“U“V“W“X“Y“\“T#÷““Zä\“^“a“]$Ä“_ţ“b$Ł“c%–>ţţţţ$L»ţţ ţ -ţ ţ ţţ$W“ţ ţţţţţ$o«ţţţ$|bţä]ţţţ&ţ$ţ$~ţţţ ţ!ţ"ţ#ţ'ţ(ţ)ţ+ţ%$ Mţ*ţ-ţ/ţ,$ĽŹţ.ţ1ţ2ţ3ţ;ţ9ţ0$ΰţ4ţ6ţ7ţ8ţ<ţ=ţ?ţ:$ń$ţ>ţBţ@% ÷ţAä^ţDţFţGţHţIţJţNţC%vţKţEääţPţQ%gďţR%ĹŘ€ţ\ţXţO%0źţSţVţWäţ^€ţbţY%TÍţ]ţ_ţ`ţaţZţ[%w €€ţc%x†€€ € -€ € € €€€€€€%Đ'€€'ĺ€%Ń/€%Ň%%Ó/%ň &8€€€€!€%ű;€€€ €€€€€&)Ľ€&*Ý&+Ó&9Ź€+€-&x§€)€/€"&Xe€*€,€.ä_€#€$€%€&€'&°€(&„¬&…Ľ&źY&Đ“€7€:€0&ŞŚ€8€9€1€2&Ý΀3€4€5&ß?€6&ŕ;&á[&ţf€=€;' §€<€A€>'-€?€H€B'/+€C€F€S€I'F<€J€Z€T'[±€Uä`€]€['f“€\ä €^'g!€_€`€aää*ž’ää -'łä ääääääääää ä!ä"ä3ä#ä$ä%'ËWä&'č6ä'( &ä((*3ä)(I`ä*(qXä+(Ă*ä,(Óűä-)ä.).·ä/)>sä0)ť)ä1*@ä2*Q—*UĂ*\)*be*i^*qť*wá*~ *„_*‡ń*ڇ*’‰*‹äaäbäc ' ' ' '*ç '+ ˛ )I )J )K )L )M )N )O )P )Q )R )S )T )U )V )W )X )Y )Z )[ )\ )] )^ )_ )` )a )b )c F+<ĺ F F F F F F F F F  F - F  F  F  F F F F F F F F F F F F F F F F F F F  F! F" F# F$ F% F& F' F( F) F* F+ F, F- F. F/ F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F: F; F< F= F> F? F@ FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ F[ F\ F] F^ F_ F` Fa Fb Fc «+ŠË « «+Ş+ډ +/Root 2479 0 R +/Info 2480 0 R +/ID [<4D9BB99220F5A2ADD1D1D9EC33113CB4> <4D9BB99220F5A2ADD1D1D9EC33113CB4>] +/Length 12410 +>> +stream +˙]) +Iz& +Hz3 +Gz> +FzF +E  +zR +D  z[ +C Ô +BÔ +AÔ$ +@Ô% +?ÔE +>ÔF +=ÔG +<ÔH +;ÔL +: ÔM +9!"ÔN +8#$ÔR +7%&ÔS +6'(ÔU +5)*ÔV +4+,ÔZ +3-.Ô[ +2/0Ô\ +112Ôc +0345 +/565 +.785 +-9:5  +,;<5  ++=>5 +*?@5 +)AB5 +(CD5 +'EF5 +&GH5 +%IJ5 +$KL5 +#MN5% +"OP5& +!QR5' + ST5+ +UV51 +WX52 +YZ53 +[\54 +]^5: +_`5; +ab5< +cË>\5B +ËË5G +ËË5H +ËË5I +ËË5P +Ë Ë +5T +Ë Ë 5^ +Ë ËŽ + +ËËŽ +ËËŽ% +ËËŽ1 + ËËŽ9 + ËËŽE + ËËŽP + +ËËŽa + ËË˙ +ËË ˙  +Ë!Ë"˙ +Ë#Ë$˙( +Ë%Ë&˙C +Ë'Ë(˙P +Ë)Ë*˙_ +Ë+Ë,h +Ë-Ë.h +Ë/Ë0h )cË1Ë2h= )bË3Ë4hF )aË5Ë6hQ )`Ë7Ë8hR )_Ë9Ë:ß )^Ë;Ë<ß )]Ë=Ë>ß )\Ë?Ë@ß )[ËAËBß$ )ZËCËDß/ )YËEËFß: )XËGËHßU )WËIËJM )VËKËLM )UËMËNM )TËOËPM )SËQËRM$ )RËSËTM, )QËUËVM0 )PËWËXM5 )OËYËZM? )NË[Ë\MD )MË]Ë^MJ )LË_Ë`MP )KËaËbMV )JËc”|YM\ )I””Mc )H””¸ )G””¸ )F””¸ )E” ” +¸) )D” ” ¸- )C” ”¸3 )B””¸9 )A””¸@ )@””¸D )?””¸H )>””¸L )=””¸P )<””¸T );””¸^ ):”” $ )9”!”"$ )8”#”$$ )7”%”&$" )6”'”($, )5”)”*$8 )4”+”,$= )3”-”.$D )2”/”0$M )1”1”2$S )0”3”4$Y )/”5”6$_ ).”7”8” )-”9”:” ),”;”<”  )+”=”>” )*”?”@” ))”A”B”" )(”C”D”) )'”E”F”2 )&”G”H”9 )%”I”J”B )$”K”L”O )#”M”N”[ )"”O”P”` )!”Q”R˙ ) ”S”T˙ )”U”V˙ )”W”X˙ )”Y”Z˙ )”[”\˙ )”]”^˙6 )”_”`˙M )”a”b˙N )”c]ý…˙U )]]˙V )]]}A )]]}E )]]}F )] ] +}H )] ] }L )] ]}M )]]}N )]]}O )]]}P ) ]]}Q ) ]]}R ) ]]}S ) +]]}W ) ]]}X )]] }Y )]!]"}Z )]#]$]%Áđ]&]*ľ«]'](ć?ćAć@ćBŇś]-]+:],]/]0]1]2]3]4]5]6]7]8]9]:];]<]=]>]?]@]A]B]D]F]G]H]I]J]K]L]M]N]P]R]S]T]U]V]W]X]Y]Z][]`]^].Ä]\]]]C]E]O]Q]a]b]c  +    !"#$%&'()*.,]_żV+¶Ű/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTVWY[`^-4]UXZ\bzzzzzzzzz z +z z z zzzzzzzzzzzzzzzzzzz z!z"z$_}+z#aczĐ„z'z%÷^ćCz)z*z+z,z-z.z/z0z1z2z4z(Őććććććććććz:z;z<CVzBz@z5,,z=z?z6z7z8z9GňIrćzCzDzIzAT zEć:ć9ć8zGzHćzNzOŽÉzSzJz zPzQzKzLzMććzUzVzXzT•szWÔÔzYŞxzZz\z]z^z_z`zazbzcćD®ÔÔÔ>ÔÔÔÔÔÔÔ Ô +Ô Ô Ô ÔÔÔÔÔć;ÔÔ Ô(™ÔÔÔÔÔÔÔÔ"Ô'Ô!GuÔ#Ô&Ô)Ô*Ô+Ô2Ô(j Ô,Ô-Ô.Ô/Ô0Ô1Ô4Ô5Ô@Ô3YÔ6Ô7Ô8Ô9Ô:Ô;Ô<Ô=Ô>ć<Ô?ÔBÔCÔIÔA ÔDćEÔOÔJ´hÔKÔWÔPĆ.ÔQÔTÔ]ÔXÚÔYÔ_Ô`Ôa5Ô^ńÔb5ć 5a5 56&5555 +VV5 5ćF55f?555x@55"5'55 5!5(5#¤75$5,5)¶Ń5*5.5/565-Đ•5055ćG595=57ďĂ585?5@5C5>45A5_5E5M5K5D5F5J5O5Q5L'5N5U5R8J5S5W5X5Y5Z5[5\5b5`5V9&5]ć>ćH5cŽŽ5aWBŽ˛ŇŽŽŽŽŽŽ Ž‡gŽ Ž ŽŽŽ ¦?ŽŽŽŽŽŽŽŽŽŽ·ÜŽŽŽŽÚÝŽŽ!Ž"Ž#Ž'Ž Ý_Ž$Ž&ćIŽ+Ž(ü™Ž)Ž*Ž-Ž.Ž/Ž3Ž, Ž0Ž2Ž5Ž6Ž7Ž;Ž4"§Ž8Ž:Ž?Ž<@yŽ=Ž>ŽAŽBŽCŽGŽ@LřŽDŽFŽJŽHjđŽIćJŽLŽMŽNŽRŽKmsŽOŽQŽ[ŽSŽTŽUŽVŽWŽXŽYŽZŽ]Ž^Ž_ŽcŽ\™îŽ`Žb˙˙˙˙ŕo˙˙ú˘˙˙ ˙ ˙őŔ˙ +ć=˙ ˙˙˙˙˙˙˙ ˙˙˙˙˙ćK˙˙˙˙˙ ˙!˙"˙$˙*ŕ˙#˙&˙,˙*˙%ER˙'˙)˙-˙.˙/˙0˙1˙2˙4˙+eV˙3˙6˙7˙9˙5‚Ľ˙8˙;˙<˙=˙>˙?˙@˙A˙E˙:•˙B˙D˙H˙Fłŕ˙GćL˙J˙K˙L˙M˙N˙T˙U˙R˙IµU˙O˙Q˙W˙SÔ˙V˙Y˙Z˙[˙\˙]˙a˙XŮ˙^˙`˙ch˙b÷ÖhKMhhhhh +h-áhh Uhhh HĐhhćMh h hhhhcó—bhhÄúhhhhh!hŃ hh h#h$h%h*h"đh&h'h(h)h6h-h+mh,h7h.‰h5h/h0h1h2h3h4%ĄYh9h:h;h?h8†¬h<h>ćNhBh@¨‹hAhDhJhHhC®QhEhGhKhLhNhIĚ[hMhShOÜhPhUhXhTöěhVhWhZh]hYËh[ć7h\ćOßh^?jh_h`hahbhc߉–ßßß{+ßßß ß—}ß ß +ß ß ßßßߣĹßßßßß߼,ßßßßČŰßćPß!ß"ß%ß Ń‘ß#ß*ß&éß'ß(ß)ß,ß-ß1ß+đ%ß.ß0ß7ß2ˇß3ß4ß5ß6ß=ß;ß8 Ĺß9ß>ß?ßFß<"tß@ßAßBßCßDßEćQßOßG?„ßHßIßJßKßLßMßNßQßRßSßVßPTžßTß`ßWoČßXßYßZß[ß\ß]ß^ß_ßbßcMßa}­MĆ;MMM M˛RMMM M MM +ÁëM ćRMMŰMMMMMMß´MMMůťMMMM M!M"M'MüM#M%M&M)M*M-M( M+M1M.!˙M/ćSM3M6M2.ÄM4M;M7JnM8M9M:M=M@M<MŢM>MBMFMAf™MCMEMHMLMGsµMIMKMNMRMM‡ŮMOMQćTMTMXMS”áMUMWMZM_MY¨ýM[M]M^Ma¸M`·őMb¸¸!2¸¸¸ďŸ¸ ¸ ›¸ ¸ +¸ ¸ ¸¸¸¸¸ Ą¸ćU¸¸ $ť¸¸&¸ Cn¸¸¸¸¸¸¸ ¸!¸"¸#¸$¸%¸*¸' pţ¸(¸0¸+ qç¸,¸.¸/¸6¸1 ŚŮ¸2¸4¸5¸=¸7 ź’¸8¸:¸;¸<ćV¸A¸> ±H¸?¸E¸B »´¸C¸I¸F É(¸G¸M¸J Íř¸K¸Q¸N Óď¸O¸U¸R Ů3¸SćW¸[¸V ń!¸W¸X¸Y¸Zć6¸_¸\!̸]$¸`!=¸a¸b¸c$"и$$!W $$ $!nö$$$ $ +$$ !Ś$ ćX$$!›É$$$$$$!°$$$!Č‚$$$$$#$ !Ü“$!$)$$!ő$%$&$'$($-$*" _$+ćY$5$."!}$/$0$1ć5$2$3$4$:$6";i$7$9$?$;"Q$<$>$A$B$E$@"gÓ$C$H$I$J$F"‚ú$G$P$K"«Î$L$N$OćZ$V$Q"ąů$R$T$U$\$W"ż™$X$Z$[$b$]"Ć$^$`$a”$c"Îd”$(R”” ”"ö/”””” ”” +#ü” ””ć[”””#Z””””””#+ű”””” ”%”#=A”!”#”$”'”,”&#Zö”(”*”+”/”-#x”.”3”0#ză”1ć\”5”6”7”;”4#€—”8”:”G”=”>”?”@”E”C”<#”‘”A”H”D#ĄŐ”F}c”J”K”L”M”P”I#Űe”N”S”Q#ůŽ”R”U”V”W”X”Y”\”T#ţ8”Zć]”^”a”]$i”_˙”b$$H”c%>˙˙˙˙$S`˙˙ ˙ +˙ ˙ ˙˙$^8˙ ˙˙˙˙˙$vP˙˙˙$˙ć^˙˙˙&˙$˙$…Ł˙˙ ˙!˙"˙#˙'˙(˙)˙+˙%$¦ň˙*˙-˙/˙,$Ă4˙.˙1˙2˙3˙4˙<˙:˙0$ŐU˙5˙7˙8˙9˙=˙>˙@˙;$÷Ü˙?˙C˙A%Ż˙Bć_˙E˙G˙H˙I˙J˙K˙O˙D%.˙L˙Fćć˙Q˙R%n§˙S%̢}˙]˙Y˙P%7W˙T˙W˙Xć˙_} ˙c˙Z%[…˙^˙`˙a˙b˙[˙\%}Á}}}%®ę}} +} } } }}}}}'ŠŻ}}%Öń}}}%×ů}%Řď%Ůů%řÓ&$}}}}"}&}} }!}}}}}&0†}&1§&2ť&@Y},}.&q}*}0}#&_/}+}-}/ć`}$}%}&}'}(&Šz})&‹v&چ&¦#&×]}8};}1&±V}9}:}2}3&ä}4}5}6&ć }7&ç&č%'0}>}<'q}=}B}?'÷}@}I}C'5ő}D}G}T}J'M}K}[}U'b{}Vća}^}\'m]}]ć +}_'më}`}a}bćć *ĄŻćć 'ş#ć ććććććććć ć!ć"ć#ć4ć$ć%ć&'Ňtć''ďSć((Cć)(1Pć*(P}ć+(xuć,(ĘGć-(Űć.)$0ć/)5Ôć0)Eć1)¤Fć2* +]ć3*X´*\ŕ*cF*i‚*p{*xş*~ţ*…=*‹|*Ź*“¤*™¦*ź¨ćbćc ) ) ) ) )*íö )+˝ +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z +[ +\ +] +^ +_ +` +a +b +c G+C{ G G G G G G G G G  G + G  G  G  G G G G G G G G G G G G G G G G G G G  G! G" G# G$ G% G& G' G( G) G* G+ G, G- G. G/ G0 G1 G2 G3 G4 G5 G6 G7 G8 G9 G: G; G< G= G> G? G@ GA GB GC GD GE GF GG GH GI GJ GK GL GM GN GO GP GQ GR GS GT GU GV GW GX GY GZ G[ G\ G] G^ G_ G` Ga Gb Gc ¬+‘­ ¬ ¬ ¬+ŹŚ+“ĺ endstream endobj startxref -2854025 +2855909 %%EOF diff --git a/docs/src/datastruct.tex b/docs/src/datastruct.tex index 654819121..936ac43d9 100644 --- a/docs/src/datastruct.tex +++ b/docs/src/datastruct.tex @@ -26,7 +26,7 @@ defined in the library as follows: \item[psb\_mpk\_] Kind parameter for 4-bytes integer data, as is always used by MPI; \item[psb\_epk\_] Kind parameter for 8-bytes integer data, as is - always used by the \fortinline|sizeof| methods; + always returned by the \fortinline|sizeof| methods; \item[psb\_ipk\_] Kind parameter for ``local'' integer indices and data; with default build options this is a 4 bytes integer; \item[psb\_lpk\_] Kind parameter for ``global'' integer indices and data; @@ -47,9 +47,9 @@ developer's documentation. \subsection{Descriptor data structure} \label{sec:desc} -All the general matrix informations and elements to be -exchanged among processes are stored within a data structure of the -type \hypertarget{descdata}{{\tt psb\_desc\_type}}. +All the general matrix information and the identification of elements +to be exchanged among processes are stored within a data structure of +the type \hypertarget{descdata}{{\tt psb\_desc\_type}}. Every structure of this type is associated with a discretization pattern and enables data communications and other operations that are necessary for implementing the various algorithms of interest to us. diff --git a/docs/src/error.tex b/docs/src/error.tex index 07d009d8c..68f16fe40 100644 --- a/docs/src/error.tex +++ b/docs/src/error.tex @@ -2,11 +2,11 @@ \section{Error handling\label{sec:errors}} -The PSBLAS library error handling policy has been completely rewritten -in version 2.0. The idea behind the design of this new error handling -strategy is to keep error messages on a stack allowing the user to -trace back up to the point where the first error message has been -generated. Every routine in the PSBLAS-2.0 library has, as last +The PSBLAS library error handling policy has been defined at the time +version 2.0 was written. The idea behind the design of error +handling strategy is to keep error messages on a stack allowing the +user to trace back up to the point where the first error message has +been generated. Every routine in the PSBLAS library has, as last non-optional argument, an integer \verb|info| variable; whenever, inside the routine, an error is detected, this variable is set to a value corresponding to a specific error code. Then this error code is @@ -21,7 +21,7 @@ levels of nested calls until the level where the user decides to abort the program execution. Figure~\ref{fig:routerr} shows the layout of a generic \verb|psb_foo| -routine with respect to the PSBLAS-2.0 error handling policy. It is +routine with respect to the PSBLAS error handling policy. It is possible to see how, whenever an error condition is detected, the \verb|info| variable is set to the corresponding error code which is, then, pushed on top of the stack by means of the @@ -110,7 +110,7 @@ end subroutine psb_foo Figure~\ref{fig:errormsg} reports a sample error message generated by -the PSBLAS-2.0 library. This error has been generated by the fact that +the PSBLAS library. This error has been generated by the fact that the user has chosen the invalid ``FOO'' storage format to represent the sparse matrix. From this error message it is possible to see that the error has been detected inside the \verb|psb_cest| subroutine @@ -161,7 +161,7 @@ Aborting... \fbox{\TheSbox} \end{center} \fi - \caption{\label{fig:errormsg}A sample PSBLAS-3.0 error + \caption{\label{fig:errormsg}A sample PSBLAS error message. Process 0 detected an error condition inside the {\textrm psb\_cest} subroutine} \end{listing} diff --git a/docs/src/figures/psblas.eps b/docs/src/figures/psblas.eps index 2690fc0bf..9ed97fcae 100644 --- a/docs/src/figures/psblas.eps +++ b/docs/src/figures/psblas.eps @@ -1,10 +1,9 @@ %!PS-Adobe-3.0 EPSF-3.0 %%Title: psblas.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5d -%%CreationDate: Thu Dec 15 14:55:15 2011 -%%For: sfilippo@donald (Salvatore Filippone) -%%BoundingBox: 0 0 197 215 -%Magnification: 0.5000 +%%Creator: fig2dev Version 3.2.9a +%%CreationDate: 2025-12-23 13:28:52 +%%BoundingBox: 0 0 194 215 +%%Magnification: 0.5000 %%EndComments %%BeginProlog /$F2psDict 200 dict def @@ -12,37 +11,7 @@ $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def end @@ -53,6 +22,7 @@ end /sa {save} bind def /rs {restore} bind def /l {lineto} bind def +/rl {rlineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def @@ -77,14 +47,15 @@ end bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def +/xfig_image {image Data flushfile} def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def /pageheader { -save -newpath 0 215 moveto 0 0 lineto 197 0 lineto 197 215 lineto closepath clip newpath --5.3 221.5 translate -1 -1 scale +sa +n 0 215 m 0 0 l 194 0 l 194 215 l cp clip +-5.3 221.5 tr +1 -1 sc $F2psBegin 10 setmiterlimit 0 slj 0 slc @@ -99,7 +70,7 @@ pageheader % % Fig objects follow % -% +%% % here starts figure with depth 50 /Times-Roman ff 396.88 scf sf 540 6210 m @@ -115,15 +86,13 @@ n 2025 225 m 1800 225 1800 1350 225 arcto 4 {pop} repeat 1800 1575 4275 1575 225 arcto 4 {pop} repeat 4500 1575 4500 450 225 arcto 4 {pop} repeat 4500 225 2025 225 225 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline + cp gs col0 s gr % Polyline gs clippath -3180 1765 m 3180 1560 l 3120 1560 l 3120 1765 l 3120 1765 l 3150 1615 l 3180 1765 l cp +3143 1568 m 3157 1568 l 3180 1765 l 3150 1735 l 3120 1765 l cp eoclip n 3150 2970 m 3150 1575 l gs col0 s gr gr - -% arrowhead +%% arrowhead 15.000 slw n 3180 1765 m 3150 1615 l 3120 1765 l 3150 1735 l 3180 1765 l cp gs 0.00 setgray ef gr col0 s @@ -133,24 +102,20 @@ n 2100 2925 m 1845 2925 1845 4020 255 arcto 4 {pop} repeat 1845 4275 4425 4275 255 arcto 4 {pop} repeat 4680 4275 4680 3180 255 arcto 4 {pop} repeat 4680 2925 2100 2925 255 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline + cp gs col0 s gr % Polyline n 405 5670 m 180 5670 180 6750 225 arcto 4 {pop} repeat 180 6975 2655 6975 225 arcto 4 {pop} repeat 2880 6975 2880 5895 225 arcto 4 {pop} repeat 2880 5670 405 5670 225 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline + cp gs col0 s gr % Polyline n 2880 6300 m - 3420 6300 l gs col0 s gr -% Polyline + 3420 6300 l gs col0 s gr % Polyline gs clippath -3180 4456 m 3180 4305 l 3120 4305 l 3120 4456 l 3120 4456 l 3150 4336 l 3180 4456 l cp +3143 4313 m 3157 4313 l 3180 4456 l 3120 4456 l cp eoclip n 3150 6300 m 3150 4320 l gs col0 s gr gr - -% arrowhead +%% arrowhead n 3180 4456 m 3150 4336 l 3120 4456 l 3180 4456 l cp gs 0.00 setgray ef gr col0 s % Polyline 15.000 slw @@ -167,8 +132,7 @@ n 3645 5625 m 3420 5625 3420 6795 225 arcto 4 {pop} repeat 3420 7020 5895 7020 225 arcto 4 {pop} repeat 6120 7020 6120 5850 225 arcto 4 {pop} repeat 6120 5625 3645 5625 225 arcto 4 {pop} repeat - cp gs col0 s gr -/Times-Roman ff 396.88 scf sf + cp gs col0 s gr /Times-Roman ff 396.88 scf sf 2295 990 m gs 1 -1 sc (Application) col0 sh gr /Times-Roman ff 396.88 scf sf @@ -191,8 +155,8 @@ gs 1 -1 sc (Message Passing) col0 sh gr gs 1 -1 sc (MPI) col0 sh gr /Times-Roman ff 396.88 scf sf 4050 2160 m -gs 1 -1 sc (Fortran 2003) col0 sh gr -% here ends figure; +gs 1 -1 sc (Fortran 2008) col0 sh gr +%% here ends figure; pagefooter showpage %%Trailer diff --git a/docs/src/figures/psblas.fig b/docs/src/figures/psblas.fig index 10f2b0efe..56970afb9 100644 --- a/docs/src/figures/psblas.fig +++ b/docs/src/figures/psblas.fig @@ -1,15 +1,16 @@ -#FIG 3.2 Produced by xfig version 3.2.5b +#FIG 3.2 Produced by xfig version 3.2.9 +#encoding: UTF-8 Landscape Center Metric -Letter +Letter 50.00 Single -2 1200 2 6 540 5940 2430 6660 -4 0 0 50 -1 0 25 0.0000 4 375 2250 540 6210 Serial Sparse\001 -4 0 0 50 -1 0 25 0.0000 4 285 1080 1080 6660 BLAS\001 +4 0 0 50 -1 0 25 0.0000 4 376 2163 540 6210 Serial Sparse\001 +4 0 0 50 -1 0 25 0.0000 4 288 1032 1080 6660 BLAS\001 -6 2 4 0 1 0 7 50 -1 -1 0.000 0 0 15 0 0 5 4500 1575 1800 1575 1800 225 4500 225 4500 1575 @@ -31,11 +32,11 @@ Single 945 4995 5490 4995 2 4 0 1 0 7 50 -1 -1 0.000 0 0 15 0 0 5 6120 7020 3420 7020 3420 5625 6120 5625 6120 7020 -4 0 0 50 -1 0 25 0.0000 4 375 2010 2295 990 Application\001 -4 0 0 50 -1 0 25 0.0000 4 285 1665 2250 3735 PSBLAS \001 -4 0 0 50 -1 0 25 0.0000 4 285 1515 4050 2565 Interface\001 -4 0 0 50 -1 0 25 0.0000 4 285 885 4140 4860 Inner\001 -4 0 0 50 -1 0 25 0.0000 4 285 1515 4140 5310 Interface\001 -4 0 0 50 -1 0 25 0.0000 4 375 2910 3420 6120 Message Passing\001 -4 0 0 50 -1 0 25 0.0000 4 285 750 4275 6660 MPI\001 -4 0 0 50 -1 0 25 0.0000 4 285 2190 4050 2160 Fortran 2003\001 +4 0 0 50 -1 0 25 0.0000 4 376 1956 2295 990 Application\001 +4 0 0 50 -1 0 25 0.0000 4 288 1524 2250 3735 PSBLAS \001 +4 0 0 50 -1 0 25 0.0000 4 288 1466 4050 2565 Interface\001 +4 0 0 50 -1 0 25 0.0000 4 280 873 4140 4860 Inner\001 +4 0 0 50 -1 0 25 0.0000 4 288 1466 4140 5310 Interface\001 +4 0 0 50 -1 0 25 0.0000 4 376 2818 3420 6120 Message Passing\001 +4 0 0 50 -1 0 25 0.0000 4 276 730 4275 6660 MPI\001 +4 0 0 50 -1 0 25 0.0000 4 288 2137 4050 2160 Fortran 2008\001 diff --git a/docs/src/figures/psblas.pdf b/docs/src/figures/psblas.pdf index 0657a7a5518c70fecac8dbff4d5947d26339200e..a296c8503962f575e6bb46ee8626df34559b0caf 100644 GIT binary patch delta 5513 zcmai22T)Vpx}`}8#ZU!72uPQhLP8({(t8ak(rf6Q(8Yw_5v2F3^eUZ8N01I8C?H5v zx*{kF2t2&^{&)VF``)~B=FHxEoxRpR`mudmUdV#DTtPvD;5OyQc!%T zDz7NzZe#1~>43XJY~xth3bBB3Cc2meW(z*H_h2){}y`d(vRt zJ+WS1p!-)hIEhXUe=vt2uqE;Q@X#PMQznvhIFU**NwG41RfhTa>|Zqy&AbQ~7nk2)o)7{INWiT+|`j=O_fnV@5oYKx8Iy%S(%JLYTznB^;$%I8q zlHU1TMU&kb_;UGHezRy*e#_9zm!a|e1cm@}c$G@xv%b$S1Mx?zGiTmGKW7G)+I@Ym zacU*N6dwMn3~W1l<-jtg8mvkt)N>J&nHysTfU`b7)rc!>w96-H=-Uu3N}=Yj-eoD_ zydCVIQxqo=iiJr^tT8|%ddCvvEHoUTOhpBB!^Fm2!`^*+W1(ASnv=(tY_!^6rmL4? zk9tZt%c3G@5Al8<+87uD%55{I?A~|qgcVsrU*35JOCw=wD%cze!&K|Uv0qm5NW6IEFYEjX!59(|n~x&7gS7466h-d5k?9?JNm{`Q$=| zk*r}-zlBOhqUNN|B&tmdr+mbQ8hRn7*10MA0RW|PWFTLSQv~eQX3Sqxq~fOI*C!nV zs>$(7S&wfe_iV%sw;@X{g;;~=p^9qi=0+oQ0_mPTJyrvIa8Wh=+YJDWko=_kC`zLL zv%R$F68w3CUj_lf5Q-p6TkGjw2c>(Hv3)++YA|3U~M$fKgm34Hyu}u zw5>tzws>wrg;c(E9KK`Wbh5rMz&QQ9=RR0)K;idG@@Ch5XbJRGUmK~UG!k0QZbcs_ zB*#?IRIl*-QBz#zjq?|h3ptOch4~l~TTSQRjp6rRJ1Iayx6_4Z{kcQAJ31G!2?DubZahi=Nxy&6s>fYcx_ZwT#k!xoX)q8h`6YScEa`vLgwk zBocmG=Nqd^deX}I(a~>&i+O$*$Br^yQ7{G3FRYxB;m1bhI_E7&xLH8Y7#3y72mUI} zi8u2dI@@m?V~mp!RD3kMG&^HYAGzd_DR!FpZQFD9y6daB`m~i8=G4aOQ*U3i3zv`k zOR3yEy6dq40~q!|to0~^?~w;AZwlfS3_OuTeL z^Tb-Z0Iqs&R*nD!2nzbsN=icXlaEQ+h!M#^GFdv<6^sEul-yi#AQ(K^oGgI>`AT+NZ4@CL;}tn`BiV2N|rozfo%o)N_OV#G@dM-p*OYXe~ZsHjCgld8~!%zD&5Ii z8BJ+XZm{d3iCw&99{Fk4j-Kmr(zm>i5wUyH_$+(3tg}qX8*O*x)4a<*t_2XzJZuD- zej5Xp&IkM-JJVW_lGW`R*AW}V2GdTF#|MhZblANcil7Cu#|P5_y}fwFWO(B##AGDx z$D9cnNER^}k-bwoXM)zymXVmuyN2CzOVY$A=|*Bi^NvI01zNZ3iB*OQ2FMFazV(oU zG;(9$>;#-JgBVftU=pp&?GEW++CV&A&`<>*84f?HgVFELxEotaJIG4A$Tq|me>2JTVUW| zJD89-nFcXmy{$H(rWqA`qr<<-?B(3PO4=fqfNNJsW0-j1A_iqH+rH8&D4_~s`l_yi z=27*^?sx~50SZWP=AL#3;vb&jFL$h22bXw02&-u=_YXHd@KXR_1%o02lUO!XaxHnv7PFQm~ zfOb{^7KnCu@6sS{qCu^Ad+DxNZEDINUrY@B=wB--J4GEZgv)x-7l^EFmKA~{6V!k1 ztw`}4dUIz|#Uwh{qzKNYJKf=~ORB~GS za$U&G(SIP^v}`e$KjpW%5x^3x@f~Hwk$}wk(rBnjdO)(5e$3&7*K|}B+pD=%M;3S& z(sHQ#RO%VS!r)r6_rjBE>P@88j$34aNLaR9ak>*xwlKy>@H%zz4`u!H+l<@g{k;4C zu$34uzR~%MOoF>K9p8Oh+SB7Q^Md-mvVvBENa>9kzYVRg#r2=_a9#E~Vt{Va?wk&Z zL2Erl9D^FhNa)zRlpa4b{rft)~+%7dqYPF{Bq=A?}gD>nQKSt&s^_RHF@IfLSs z7mptsTId_;FyV6qr*5e{ouqo^iB)Jj=B*+Wywqpw&5stasKd)`n-htX+B45;HPg;d zEOl=w-a8O4Y&30c(N-W-#}6q@7DO*tSV`vCq>0F!Ab)A)RvAf=B!<-;n>OT#7zo|* zN6wQ!U?%&Vg;rN?7veVJ{YJHZ8LG2Q!sl_=BT^GrHka;13(OHtSN!H6RY)f!c%Vll z=6x+|>W7*B@;Lt2JEmkcc{l?$mg*IM`3F7Pt*5%eH7+x|U?T#{DrK4Gq0x1B07Q{XlfonYD$VZ8qi@99u98tGN$VGZeYj`08M7E7Q3Z|WCb5=+!*u0lswp- zT>+dkcXi?S4_?1=J+h#HlwzLo+~W@Z@P04N_%ZG?5~e)Sm>V4&Rc?4>3SY}Z`!}6R z7yPDL3Ki~Wl!CrVhewy<+xzbr)OS(V3E@9A5iCbu?IFIC1)YY9+7T9fBU47a9?S!y zjw;Vi1j7iS6?4un2YlXdUGE(MuRgJ|j+p;o;V6QiOR-lw+40n56S)SS8_bIZ_mTc1 zh^*7od@j15L^VQ^n4d(e%pCtV{$e?zmt9ipfxBvuQmvDKGZg1dswKF85f-K@tQg>0 zAt?d572>D6Y4`+I*tz^Mo+E%bTke47#|Wa58uuiCP1W~&xaEG~@o>@^Q;0@IY%8I; z0rL$X#TTh(-vHbjKzs#h3ys|T#OSzOETh39+gk|hh}2KPD44$H>(u9 z;s-vj?UDa*BbGY~uz+?$wzj`d3QEN3%4{~eGtpAvMuH=q?5K9uY~r7%Lx%N0S(ErwqQsx=QA^>8 z$Jvb|qs%$uKvhqbwF{VSJ}GQ&vmcNnVk_oCTFlI?6sK7R-I6tM$pHRsU-};9IG3gP z2Wpm5wPLRdszQ5A%s<-1I$pei@JhhL^BFR4l%A0IaRzF9d^NkQ7XH=wwZSYfFF=v+ zG0~Li0ROU4XCZ|tdfX2gZWGm8mFt7&|GJr)Kjj*NZ-#NF|zr)ejV(+UwLm5h^$ zr3W|Ly#aiALiJFQVimDvD@#mt3bntjXcFD0(>RQ3rn*{q8Sk}_2gZ+=&a7KpX*@Cw?+@BR8_<3L4J}upF*QQcgdRh2IeyR^k>s|8pk*smW&dc z8c9@zzeuP_gBvI5R)>~aYHJ3nM?QZ+Z5C2p!QaL_bs|bVJn=g^WEA-OeG+5K$6dkk zLrVL7H{sgtwjPKqZX z>Z&#+q#%FQJo|k(Unj3nnCEld3d@K!3Y{pZCYT(VytifC0Slzuiy_(+YREU!(R>c z6#$cAyl?lBjakd`^f%r5^~W@4kl!ldEPrgpU)F^3U)}_UOwMAwOM*bW9AQKelko5) z^E0bZUH#BOk#}JNkmO31TYtc2W=RG(5)6Zb;iCF5Q8Ziv4TTydQ?c+q`fpeg;^*Ry zmcOzNt0Yg)1ni!kY33CrXt78yDo9+01lv#S^S zN=Q>Pxrdok&cy{Ha0Ols(F$(X-Y!^IoT`G9fVa1U4O$$IfJsPL!oV&48w)FCn60pJAT6#O<{!cF3-?$I4 zo?chXKOgnCNM_$CO3r6pC4oV&tQ{v_-`^bz(YA8b!?^$;S|HSwA9V2a!huA^|1y0@ z81iqXF9@^f$PNPry)zgq){It8?_{w);PcVjvvNiWg-Hr_92(W7jj1`jc@i{Tb4$-Y zM#gS(Yvd3}<2>XH(!Ir4x$9TZj)V)h72XqPpJ)Y%}-nvmQ72 zI3h+cS`qReHh3uj+0$iMA=O%Ep4=?sb&rM&ZC~^I``>ljvg4)HLb;{&YV5xcFOoO7 z1ALD=ro+L^b!F6H$FgefHSC+E6!V0Y)|5@RL59au&+oS?_gMojO?h7scbqp|*vcw$ zf8uzC=j{|+D^cWDh^4Yl#QGb2%jsC@ZpTCwx##Y33VR3nXZ146i@Zp`q!CW~#Qjs@ zV2-Kz?TbDNm%+hp->xA4;mi--f_3q)~Q+w9r=%Bz7_kKfiLmtrZ0ON#{ zp#(5zeCVFZ8sJ^4V)Qj(=hW6A0CLWLYK@8=x24sfvo+mq z^t<}zqMMuOyC#O7fgi9McH=Ilif!&z)?_fq!=6~ zi-ajc#S{=I1PY~yl9iQ~{C{Vd0wAicHdsH9G4x6nbTu>p8N)zu5d5mE(%?WXIuE?2;Pq2NZP+bqH{v{GqC)5qX%RCRAVCOemrbznlKzQLSJ#l`XS6dfD O!QofsRz+^W4jGKlk>W`=;Y!Wn+jo!Xb2OhIZv5 z@Bj+n2CYY!n1Bup4pSHk7(**=pbd*HWbgsdhD{SPtQd4|FvHXoArSHzv~Yy@@HsEX zUFrn+%P+hK+i_cb(>|N(n)}bPi*sZHNx9PW-iQkeSE@(HeH~9<>M9a-ufA0+-4eZ& z;`Zg%tD=Z4?R96qIZMB7tznNc&lZ2^J2U>cjIdVW{L`-l&7m#@5LA)Pz0M|#o~S!& zy)|{Gfwi7adbdVn(fg5i#aY9jH$;n)P6+e<`F%zU8v_w ztcvJCq4Lc=)WXH{6he##Db(f!>JiBsOGxX^)*yDcL=I4eYdxJ?a#WO^2b|9iu!$kL zeJ*x4eDem1lAg3R>WAs=UQu+y=bC-L)Sl#sDAzp1&BqG4FE7=7T=9@DlGT%Y-MD+< zw|Dm!*Q}~nwpbu7EVAJ>6^KNe8#+|IzP6=hAhz;b)5bb<%>xn7zG0RuU(}Wvkd``H zshLeXO>8DeX*e9Oet%?Pjr{U8w0Avu>sIE7p33z}@-7z!(G)4(zGwfmTW>^6K8JA= z>PUXNwhox(MzQW*EQiaD#;xVO^=Y$-6h?3NZwfJbt5GW@s@hhc7S-JNm#xgh{A=P3 zTWUXN#-)6Yr%UXgsju(8>IL&=js+j@k}PGg*w*TttHL(v{mPF%R4%q2eLw&F&MS`x1fTZLsYKOY9)BcbkBGf+SV?PGOQWr& zuQ@dTs!Q@){bc*(84c_Di8mqzy|E4wd6oM-Ny+;#Z*w1I)HueSwn;-=d)xM~^sC|Z zx(IZfT*9*mr5kUzBQ~A*u;GPILyT8Y8FhcFv1`J1-yEW1o8mSdMAyKcos`5U4c4Vp z{Bp$brnf9FlYkL^pH=tK-gd=D1o81%o(Q#~nJt%*2{ngmYCh5Kn^Iy(^`RveGG8JF zE*)Do(%{h0v*E(N+t=$Q=gd8Vm*@x!e0X`K>9Esi7we#(%=TRYUizdgt7E5#BTfwt zt+oe8J1SyP`c;zY89m#Pxqp-le-4i{<&Lh5zCbymwR6lmYkYqNE${m6(vgwwUZQ&g zu3D$9CU0%k;cTa_rOxx4ca=O#_#_>-;L9xrCwM9rp%EOvaMZ$YB8iBYTEhJZZI37( z19YJ=8K5I0m_@VTiUEHV1V)nx00xa;gMfg121f{B;owJrZVUl8f=_1%ptRt^=hEF7 zLVplS902IS5DOu6Yq8MQT?nNH01fkjNNl(eIT}4NfieYX3C$sn0szi1ZU|^;N-TJb z$&3SWgX97x1QP(@YF4lS@JGO6yCK#95QhkuD+#>nKu9VhHGb7Ej3K10(t_8u<2O3LyO>K&pTa#|N|uxi*bw$6zr-p(()_0m4RvVK6BIw1+&BMW=F@ zYzCw*&|Sy~_X5xu5(0E&2?Wr2Caec*0|EL>vB4Qb6WG*Hoaup7&;qmp?Li075p)6F zK^jO08DI#=1X&;(Y zYhTgk<$Kr9RcW`Uf}Vur64})jGWLK0m1wZUKvrU2`&LIu$#{>v6?*5}T~Erjs~oQ3 zkh4}XN&7Fw97qvm#~uJjFO6nDiF!2p&FsqPEmV@u!W}jOdFA7;T05ju+=HxB9=(uJ zR4WORElHnafBTEsKqSg5C~n8QC%4k(XliD95iwb}?-td*!K@I^KGqt_-*o7TPx@Y6 zJG;hLF{3=*$LO$*(_?R2bhWg!TKasyslS%*$(NgFm0eVzx@fK5zT>Z~7j>D87u>VR z>DkJRN3BjjFtSKpwPu%pfQpKKKQekmMP~NAWS@agr@uvKKMV{!)b75kNqW}un!IP( zElWpDfDfHy6y7zlHv|jWTE)L%)e?z zZkMvW_YbYPL*1MeTmM)&Y15o5m@f-;b(>R}fqz|)U;@6MpWm6eTG5blS>B*k37Iv} zmowX1eje8+^ervqLkZu}u~)M+_2Nio-LgIv{)e<8LFuuS?tZ=cR9mK6__jCXth8tq zLk2Kkz&l0FbxvGCIB=p?QD1`ZkqG|js-XV3cH0aVov4J&N#kA= zP39dx8FpK}o{{hN>pcOUR!T0pR`VCT=HSd%n&-c2vCUMV%sm{YJn|$xMnkGlIW1*R zuY)+lsAfisL`LGb>WZOgk3TyvB)y#h>ZR1r>)#eqL2BY|4T;i1cOeNYm;R-3r+L#> zo~oDI^)G714a;hnW!nM<(S8z^?rPvI^uaIGa%;0mQ?-44OO%AukN`W=B}|G z#N<(LA4qh=b#HC;d|H9E`&^rtcS_f*v}pDFVzqepjZI1;7TR;J3j_%WiLi5$tPSlY zHZjbCa+O%wTe_8m0#EEL3BM2X`R3eX-Xcoi{OZ*!8~YyC$TiGqnAetrAe4n5E8dol z4`m5f+L_-uCi<);dp?qX_}0=@eY*_HqOn5CUXx4g2N`qG~eQw{Vw_gk{O z*Hw>Z=sWNW_rnQCkbCI#@yP?~#lT()ChqW%24R6YUO zD;H|BC*jZXBW~|r3XD!#X=^ghreS8b+}oG;KuY41@hbX#;a;yfe%GwzJ5RDZXWc)5 zynQHjw)&okwL2dz#})P%6&K4T`3u@smSuQGH-1Da7m~&5fYL_w%`)m4+jec4|M&!} zxn!=o!Sj%(avi%{3{~67?^J~eYqol!_y=#^jGC>ZV}0w?-1YVRh%Id{I(xm2Z)7X( ze5Lrz6s_KrW%s;^ZI@(02rMO90660YQtA0hmG{J2-OH&Cn;fkdd1`vC!=KdW2v4y&F|Bb479r|5I+rp1Fh(wj{J>3><7gu9#h@zG1Y5N|S^;KtD zds;0#6d}M%HfE;3v2daW(gNeQX{pW6S~JV%?4{X>v;88)rDYc@7Z!73se!?qXQ`L? zr>{huOgeUYZ{Bj8+n~ysve-K7{0;3x*n!;CfhcLL!efE(`Ha?1UOt)GU|;C*wCSRA zlt}Z7)ZDuTpH4Ir-6b0Pqe!M>y#^#DYUb-6+3Is`pWciPb|)E~RO-Fj!A@LZTeKB8 zc9e4*ni{-}=&*RQjMD-l@6dn-F zKoW+$`)gk19b6&dAbIkStF(vxuhzA8E=yv_ci`)#C{EXOExBfRE6$f}g~a7bKIsrG`U4p_G^8{>jS}f2gL;>s5I}*Z){3pQjC#oniX3j$p>`?!6qK zJv+%gA_5Ab_{*C=>&h^n^%(8F<1FVx<>#t?)A)o|X{~ZZkwe2rpWRr|e{<);iiFo4HY&QtgM4|HJ;kMxe?tXGOzl&Zf5Q- z`MZ(#NbO!{&%H(PKDWFv%Q&hqe}~}RC&gs{p+vj-a?C0NR z;z8(Phc$Xj&n9D}7U?i!^YH`bX2r!)N!)^df4PDPQp!H>va8H3Vrg4txnrs1fuMPW zv_I7!i_}Wygfnbk{-HFSa1C|B5|`b!_LjSe?5${3+(K1czL;}d)9HE&p6Pc+)P;Q9!Lw@v zpApet;=(D3sZzQ{ad!w;Y-Wxh5ztmwh1gz8>E(dlMwwYU%Yx^4U4FRT>ej)Xv|AJ%T7DsUcT8iY)+|(J9vt}_pY6=U@rUB z`%y&Mn=4Me^=C^LB;H?^MxGyHac~I}g#`lAXZ2A#aWCt-pMA(dJ8ky1Bn%~W?3Dks zZ_m)Gj^fg?^*-1FEMLBjhg(?y!7%iTn;bw*Ay7+q*(LFT3?XC=tot$U7Masw-?4n8 zFu9W^Rtivie#IEG%z5yMP^TlWUD|cHH|lfQTIS$D6uBbZ*MGg2;kV7hW$pR3A2W8o^H`sQ@=`h? z*4ygbyE_13@27Z4h&#S3a>*viz%5L*q0964e^%NON-{4A98|cID8THcU@b6qrgcxF zI1d}g2-_`_m;UiJ^!5E2FO>`00-Z00=P32qBV##TO0 z<(Tz664AP?UfdoX(l5@th<};+PKbJ-aDLY20sXqW7yc5ssVQ%qohZy(wNGrb@x|AK z57%5r2G@=w!M5wOQMuWJ$SC?U=d{CD?bGz!^Q0ZEPbWM| zeHSBp?Y&aqx_HbI!ySjxwY^5{rJW9{Xg9`N7&bOD&VmtMByzJc*{G)Yo1|l1p&eYb z{93?I)T%$%FVj`*kI!-+M~CTeax@N$|Nc#GVkU-4fiQ*;2x2f<918Mf#T6vL3Z@{v z@s21*o+TrcWw(*faNp?ULEjigCj}$TOc5q#G^lgHFci~xh9MK(J^=t#G8An~HwPPS z7(q-Hhx5XrVj2*KvpE8?n1Y-jAwy$$8AJjTD8eub(#O#S5OTTfFqRO&7?F(7hG?t- z5Wcjtf2mk zDF%gxY=JRE<2}$gG9FLHVD(XGG74n^{)Pz|93r)ZI=oQF_y0ip6Xs8(T)qe72Bsk_ zCMK960=yV}0jz(l5e9If3F)D1hKRui@WGSYPwic60OhYEUoD+)3qf)z~uKRArpzi8xO`gc)z5q$PUNCZPI05$`bN&wjz4apiz zCx>wP;WWshX*?d(a-azzJ%f-tB27&oppYeGGfXD}j>;BJ4%jR>fXHkbhe<(-4TBjW zvv1tM$$Yzr^V6#jo2NRUw4{p$i4*Lg}KgrOYv0<9CsQ^kMEFO<*9?a#? z*uj9FJB=-ZQ5gW#Yk(mf#`53zPte2szjOTuADCEzk_O}s;P;ediU9tl=ig)WBM(E_ zoq~*nv+UpU{7)^I>9nEuPg!F*)DePJ4H*>?TZ_iw@e@IeM4^xn8WimR z1;YdO1-&0up61Qv>;2a_g>b16!cYkHcLN9flZ6A8FaO>|74sP(P%{vXL%{iU@&SzT zcq|?W0jAcV13?;rAAmExW{k%`O~PN-&}cl=jQnj4h58#U3WbIm&cEWJNW{O>VhB*X z^H)4H7H&@dwnq4eeX&rF@OL~c?r&=t6x;^=l^-63hMKF>YeGH^YSi(e|GojBJ8L7< zO~(PC80>#3h+0vrW#X?ZJ^s9MWCXn#+HyrSff!?D=G$U hX>CO`HvR7yYv7K$KuF^YCkzDjFtG@zc6PQw{13_b_X+?2 diff --git a/docs/src/figures/psblas.png b/docs/src/figures/psblas.png index c904340d8ba923dde6ace3f3930af97886e8abac..33a35ba0126d3bd49413ffcd3037271d5e24de16 100644 GIT binary patch literal 1125 zcmV-r1e*JaP)*ImL7V2A zMO$TiX75_R&BA!iT}Qx7j1jBfhGRCv#t)ya=Rb&TO z!!waYH6I(VMFp^53F8)POs)Ik0H$xgNn7prw_iINNx-%&{)t9!z;js^523H?tbP~J zS;VmNc{HlSV-|1iM|&7^3C3*KdNgiplH4?#=vSePs6V@T9mv<+ybhU88LB?6@ts~j z@An3-k?Zed|=Ew;KRmd);4JXUq=fi5Cb727E< zE>5ycZbLEs#CC zHER*JBD)1LXo@^m^i2v_Zhoxbk6D~;_c@+BZNYz1YAiDXW(V?%P8;&int}4w!W>a} r#slT6fjK)+TM}0yy2d1~jN^X+%j|me&zW~<00000NkvXXu0mjfXS*LC literal 4604 zcmZ`-cQhPYw?~jWqlD2S6MaM(5~B_>%48UWh%!1+M;8$_gb|`fMi(S{XY>+Rk3k3` zB1i}sJ$f$@01^Urxt#cIl3>yRbe;?4^IbrNEpmAIEc2s)ee_SE8V7*VwH_<#_sGw| zVIWNkPPPQzgqa!`@{Y|lrTzb7Dh4_00CKYH;fZcO>es5s z9BlEjSPfw)04D&2P4C^vrA~~Z@dRP``9e@2O@3Mke=;iAtdPee`3mFees284}9kG#vvi|=o5d`@l; zE<8VQK6tvq7XhG=7SPKTbd4?!=&NJC=UgP4MQNgL>TGumfYtK9(l>OpU^xj%OB|FF zsd#2$Enm?_F2Pbn{rS~UZA7kz5Njmmk%$nE6^YA5z zbWHZ;@T2ADH+z`u9=dghxb>MDFHb{Z-3!#M+-2h=?uj%P!y@Y#9;6Lsg zQu%v|F=8E7JpyZuYWQq=mfJ@lv^^jjQPTU3gIgyzUfzjFxhm@(NXl(72EwdFM?aj+ zi$uCpJhBXdc)z$|XZc4)9amq2TjipkE$l_%_Z%DC;J{3kqO-RMCz#WF?__~1`6hh8 zX*a4Lm&9*hLGy9_(zV()sEXGoo3ocf#Z>TNr`_s)K?;z*6XV>qFncl1bqhlYdZ24o zZ5T)^gxS18SUN=oBuT{%3Vr5tq^F5AwOS^2>w?~Ayyuq{a>DvR7TBn*bJOiX224MM zKIXM0mK-()T3-%IRh`avpdD@BJk+Fue{0ODHT(vi1RGA4&!0f{OlBEwy0MMbs&h1q zD6(dRqNr8MdWHNK3)Q4?W9C z)rK}NRdp$k4@C7790tv@531J>-Nn)~!|;M2+mKaN-Aej<1|Abz4@B=4S*9 z-5zmKEH(O~*ukBwuoHk^M%_ag?H6JiK8r93)eyUVA^IJ?Ak9xc=VLy=@ueo90e)(< z5g70Zf_=*@f_k#4k)ypqPnZv zTh^;eeNb>%!tid)NM53bd*)Lb#In`OxQNN*Qd5~x9sPTb+qm*=mcOBL5bOVcywblG zLH$G%e1j&!d%I9$A>A~pD9>8C&$4Y9Xng2Bc0 z8cR(LVZ-Gjb3;h0!Vmk^5fOOSRx4+vpoeLmI$D{5?AD^qV zM`;_xO55*yDbt_k^7H1A^Othuc`z7z8kJnS`+biQ)p%>w>!$N*oKGO>1iB+8EN)|VRc zwnTG+2haZ4##xSdrl?`WQe&eysIC_sZom0V-)*~QMbC$i6X3mkf&R6dOTpD6U2*;E zI%fIg$&{{ezh==R?E4T%PIsvkI|R6R^mQWdHSdEmQ!jD)B6KR*kb=%g$m|v{*l|3a{%qJJ*!pcsiRHV}eq?=QWFa!RSMId`b3@Y# z3u3z(@e7je$@6#e+tsAQ11B+xAWqM$G~f^}d@RmjBLA(IpKjs3N7c(kRA1<@O@V9! zn(MMAvxpaty;$??587lEz-1~nS!4I@w-?h%A_sAC!8u(UW3m=DVB&UgS}8mNOv7{g z%AScQy&O=zJ4KPbp~Kh#UQ0Ja z7vSBklu+#R`@nY>K!pPO)yA3^3-3?s+`pMUxWuaai^JpBYGSN|LvS|hqE1Zc?}ax) z`u0KtO+GPDYLR=l-8#^cP)4ob?3FH-IJOLy#PyDGQcM8|^lcbE8(m6{w?C}j%Zo?u z1%}T&ejplxFm*!-M^nGhW^dI0YGnryq>P3TKUeo)Aee?@SFctUg8}29U4bgRTPG7(*&fXSIbTKO?GowXZDu^Eik`c%p7V zBhmx~trb_-qbpdq89e zuTUZz(=PbGB*aW)Gw?1$mVfjzIIGF*uS_QlaE2a4! zXuB@3+7aS9R#MypyCRUR_cLufGF-2U8Z zZ@KMUS1-MDDQRPD03y3e*8+DR&&?jjBCElA18**oTslZ!@x1iqrE3A>d&G$5;jrJ^ zYgbP!XiK8bz#FvLy$lW0S3os~$|uq6$&PO1j=(DGh2s9J{;537tyT>Wu|&WhSFaJP1YIpXj9QU@fAAIL(^$c_D?>88e^R4Q<^;jzKI9*8J^b| zjXeL@;yCf!08{q1e2f?I+6rlk5eAz^udKX&&_=BxR=K50o^~ssPTW^`8luh7{4t#U z$vt5Y+es-{cM5+UyO>}?H38E)G$vBYaI1NU=1w8w6Uf=8TX}gbxo<{I==iONw#sgN zah5@`f|n^8c6)IM9jCPt^VwDwi^dc z_j%NS^U>r|H$UMfc*)jkn5?Uml%&@eBSRza8|YvXoeN2pVK&OK|2kyYwwt+~_gLuVSLgx0 z2Hx)~F#nnYJ)Wv$ads!qp@r>+Fy$-XQo=YM+U7!v33*oV6DN#MqI+j9hc1>L0DGiu zW)kQWXsLOOS5qfW<{15gsDI5DUK!heczG=DV_;Lw;j5$E( z&x7V-V{6LVgt5%q#hGGf*7@zSNDpQFD6^%&aI4>CnHd;%)Q)tR!W_UO)3t@YiWyQt zN&>39f9$cWSmA|QMB2HQoj1c0N$w*%r)rmE$Hs-d}vYia}U6Q}$em5bUkI}2v3U3CoQvkb-O z>Lb%ZpJp7066o@D-;y7gKm@XbkVG~UrNS(vL~TX>7H3W`N^^JWs;nOuqIZL=JyEB7{so$7VY20GNxPYq4}a=J|zRXvduL)-RL{(=F_!wq7=-nwS1bg7x~ zug7|Ir@u@zz4rt-mC~`JSpN7$u)~u|>-3~)A4nQS;n0)9?3YnuGNalP#ArCA;(+QB zSVv&K*(aQ&K?P6Ei0&Dmh=}iCiu}8_7eP`r>Cfkeo%np6NPuRr+Ci0{>?Dt2#^V?D zN5N|`J8^V^bw{0I6^K|<+C>H>@|5~NCBWtIcb2j_}NE*d6l#n>t`(Y0%M$pj}SuFi?7bd&Ks6EEfy(3N(Y+Lm!#a9+fz&6%>B3yNA8A!{h(op`2n` z_`-qbuLuvl6f~Umab8Fdp9l8N4;+ym{uD5IIe$r*3{(Ot(fiEb>>sAuIA5F_1)r{g kxT?K}ElynOrUb8=u7Ubr%E=vS^o1z}MokA*iL?&=4?Q$~ga7~l diff --git a/docs/src/intro.tex b/docs/src/intro.tex index a7bef845e..073a428e7 100644 --- a/docs/src/intro.tex +++ b/docs/src/intro.tex @@ -21,12 +21,13 @@ The software architecture allows us to offer support for many alternatives in the implementation, including usage of heterogeneous platforms, and computations performed on GPUs throuh CUDA. -There is support for GPU computations through OpenACC, but it is at -this time a highly experimental version; we plan to also look at using -accelerators through OpenMP as support from compilers improves. +There is also support for GPU computations through OpenACC, but it is +at this time a highly experimental version; we plan to also look at +using accelerators through OpenMP as support from compilers improves. -The project is lead by Salvatore Filippone; a number of people have been contributing to this package over the -years; contributors in roughly reverse chronological order: +The project is lead by Salvatore Filippone; a number of people have +been contributing to this package over the years; contributors in +roughly reverse chronological order: \begin{obeylines} Luca Pepè Sciarria Theophane Loloum @@ -81,18 +82,19 @@ works discussing advanced programming in Fortran~2008 include~\cite{DesPat:11,RouXiaXu:11}; sufficient support for Fortran~2008 is now available from many compilers, including recent versions of the GNU Fortran compiler from the Free Software -Foundation, and the FLANG compiler from the LLVM project. +Foundation, the FLANG compiler from the LLVM project, and the Intel +OneAPI compiler. +The README file contains a list of compilers against which we have +successfully tested the current release. Previous approaches have been based on mixing Fortran~95, with its support for object-based design, with other languages; these have been advocated by a number of authors, -e.g.~\cite{machiels}. Moreover, the Fortran~95 facilities for dynamic -memory management and interface overloading greatly enhance the -usability of the PSBLAS -subroutines. In this way, the library can take care of runtime memory -requirements that are quite difficult or even impossible to predict at -implementation or compilation time. +e.g.~\cite{machiels}. The Fortran~95 facilities for dynamic +memory management and interface overloading ensure that the library +can take care of runtime memory requirements that are quite difficult +or even impossible to predict at implementation or compilation time. The presentation of the PSBLAS library follows the general structure of the proposal for @@ -101,13 +103,13 @@ proposal for BLAS on dense matrices~\cite{BLAS1,BLAS2,BLAS3}. The applicability of sparse iterative solvers to many different areas causes some terminology problems because the same concept may be -denoted through different names depending on the application area. The -PSBLAS features presented in this document will be discussed referring -to a finite difference discretization of a Partial Differential -Equation (PDE). However, the scope of the library is wider than -that: for example, it can be applied to finite element discretizations -of PDEs, and even to different classes of problems such as nonlinear -optimization, for example in optimal control problems. +denoted by different names depending on the application area. The +PSBLAS features presented in this document will be discussed taking as +a reference a finite difference discretization of a Partial +Differential Equation (PDE). However, the scope of the library is +wider than that: it can be applied to finite element and other +discretizations of PDEs, and even to different classes of problems +such as nonlinear optimization, for example in optimal control problems. The design of a solver for sparse linear systems is driven by many conflicting objectives, such as limiting occupation of storage @@ -145,7 +147,7 @@ application layer. The serial parts of the computation on each process are executed through calls to the serial sparse BLAS subroutines. In a similar way, the inter-process message exchanges are encapsulated -in an applicaiton layer that has been strongly inspired by the Basic +in an application layer that has been strongly inspired by the Basic Linear Algebra Communication Subroutines (BLACS) library~\cite{BLACS}. Usually there is no need to deal directly with MPI; however, in some cases, MPI routines are used directly to improve efficiency. For @@ -184,10 +186,9 @@ the variable associated to each mesh point is assigned to a process that will own the corresponding row in the coefficient matrix and will carry out all related computations. This allocation strategy is equivalent to a partition of the discretization mesh into {\em -sub-domains}. -Our library supports any distribution that keeps together -the coefficients of each matrix row; there are no other constraints on -the variable assignment. +sub-domains}; our library supports any distribution that keeps +together the coefficients of each matrix row; there are no other +constraints on the variable assignment. This choice is consistent with simple data distributions %commonly used in ScaLAPACK such as \verb|CYCLIC(N)| and \verb|BLOCK|, @@ -201,8 +202,8 @@ matrices, that is, the entries of a vector follow the same distribution of the matrix rows. We assume that the sparse matrix is built in parallel, where each -process generates its own portion. We never require that the entire -matrix be available on a single node. However, it is possible +process generates its own portion: we never \emph{require} that the +entire matrix be available on a single node. However, it is possible to hold the entire matrix in one process and distribute it explicitly\footnote{In our prototype implementation we provide sample scatter/gather routines.}, even though the resulting memory @@ -227,33 +228,31 @@ assigned to the parallel processes, we classify the points of a given sub-domain as following. \begin{description} \item[Internal.] An internal point of - a given domain {\em depends} only on points of the -same domain. -If all points of a domain are assigned to one -process, then a computational step (e.g., a -matrix-vector product) of the -equations associated with the internal points requires no data -items from other domains and no communications. - -\item[Boundary.] A point of -a given domain is a boundary point if it {\em depends} on points -belonging to other domains. - -\item[Halo.] A halo point for a given domain is a point belonging to -another domain such that there is a boundary point which {\em depends\/} + a given sub-domain {\em depends} only on points of the +same sub-domain. +If all points of a sub-domain are assigned to one +process, then a computational step (e.g., a matrix-vector product) of +the equations associated with the internal points requires no data +items from other sub-domains and no communications. + +\item[Boundary.] A point of a given sub-domain is a boundary point if + it {\em depends} on points belonging to other sub-domains. + +\item[Halo.] A halo point for a given sub-domain is a point belonging to +another sub-domain such that there is a boundary point which {\em depends\/} on it. Whenever performing a computational step, such as a matrix-vector product, the values associated with halo points are -requested from other domains. A boundary point of a given -domain is usually a halo point for some other domain\footnote{This is +requested from other sub-domains. A boundary point of a given +sub-domain is usually a halo point for some other sub-domain\footnote{This is the normal situation when the pattern of the sparse matrix is symmetric, which is equivalent to say that the interaction between two variables is reciprocal. If the matrix pattern is non-symmetric we may have one-way interactions, and these could cause a situation in which a boundary point is not a halo point for its neighbour.}; therefore the cardinality of the boundary points set determines the amount of data - sent to other domains. + sent to other sub-domains. \item[Overlap.] An overlap point is a boundary point assigned to -multiple domains. Any operation that involves an overlap point +multiple sub-domains. Any operation that involves an overlap point has to be replicated for each assignment. \end{description} Overlap points do not usually exist in the basic data @@ -378,7 +377,7 @@ $1\dots n_{\hbox{row}_i}$, each element of which corresponds to a certain element of $1\dots n$. The user does not set explicitly this mapping; when the application needs to indicate to which element of the index space a certain item is related, such as the row and column index of a -matrix coefficient, it does so in the ``global'' numbering, and the +matrix coefficient, it usually does so in the ``global'' numbering, and the library will translate into the appropriate ``local'' numbering. For a given index space $1\dots n$ there are many possible associated @@ -390,7 +389,7 @@ with a call to \verb|psb_cdasb| and a sparse matrix with a call to \verb|psb_spasb|. After \verb|psb_cdasb| each process $i$ will have defined a set of ``halo'' (or ``ghost'') indices $n_{\hbox{row}_i}+1\dots n_{\hbox{col}_i}$, denoting elements of the index -space that are \emph{not} assigned to process $i$; however the +space that are \emph{not} assigned to process $i$; the variables associated with them are needed to complete computations associated with the sparse matrix $A$, and thus they have to be fetched from (neighbouring) processes. The descriptor of the index @@ -521,7 +520,7 @@ computation. This is certainly true for the data allocation and assembly routines, for all the computational routines and for some of the tools routines. -However there are many cases where no synchronization, and indeed no +However there are cases where no synchronization, and indeed no communication among processes, is implied; for instance, all the routines in sec.~\ref{sec:datastruct} are only acting on the local data structures, and thus may be called independently. The most important case is that diff --git a/docs/src/methods.tex b/docs/src/methods.tex index 55b7b4e03..8acac9100 100644 --- a/docs/src/methods.tex +++ b/docs/src/methods.tex @@ -156,8 +156,8 @@ An integer value; 0 means no error has been detected. Richardson Iteration Driver Routine} This subroutine is a driver implementig a Richardson iteration -\[ x_{k+1} = M^-1 (b-Ax_k) +x_k,\] -with the preconditioner operator $M$ defined in the previous section. +\[ x_{k+1} = M^{-1} (b-Ax_k) +x_k,\] +with the preconditioner operator $M$ defined in section~\ref{sec:precs}. The stopping criterion can take the following values: \begin{description} diff --git a/docs/src/penv.tex b/docs/src/penv.tex index 31c2fc2ed..018a748b4 100644 --- a/docs/src/penv.tex +++ b/docs/src/penv.tex @@ -94,12 +94,12 @@ Specified as: an integer variable. Scope: {\bf local}.\\ Type: {\bf required}.\\ Intent: {\bf out}.\\ -Specified as: an integer value. $-1 \le iam \le np-1$\ +Returned as: an integer value. $-1 \le iam \le np-1$\ \item[np] Number of processes in the PSBLAS virtual parallel machine.\\ Scope: {\bf global}.\\ Type: {\bf required}.\\ Intent: {\bf out}.\\ -Specified as: an integer variable. \ +Returned as: an integer variable. \ \end{description} @@ -153,8 +153,9 @@ Specified as: a logical variable, default value: true. same program, or to enter and exit multiple times into the parallel environment, this routine may be called to selectively close the contexts with \verb|close=.false.|, while on - the last call it should be called with \verb|close=.true.| to - shutdown in a clean way the entire parallel environment. + the last instance it should close in a clean way the entire + parallel environment with \verb|close=.true.| + \end{enumerate} diff --git a/docs/src/psbrout.tex b/docs/src/psbrout.tex index 7877f6890..51675938d 100644 --- a/docs/src/psbrout.tex +++ b/docs/src/psbrout.tex @@ -1246,7 +1246,7 @@ An integer value; 0 means no error has been detected. This function computes the entrywise product between two vectors $x$ and $y$ -\[dot \leftarrow x(i) y(i).\] +\[y(i) \leftarrow x(i) y(i).\] \fortinline|psb_gemlt(x, y, desc_a, info)| @@ -1313,7 +1313,7 @@ $y$ This function computes the entrywise division between two vectors $x$ and $y$ -\[/ \leftarrow x(i)/y(i).\] +\[y(i) \leftarrow x(i)/y(i).\] \fortinline|psb_gediv(x, y, desc_a, info, [flag)| @@ -1385,7 +1385,7 @@ $y$ This function computes the entrywise inverse of a vector $x$ and puts it into $y$ -\[/ \leftarrow 1/x(i).\] +\[y(i) \leftarrow 1/x(i).\] \fortinline|psb_geinv(x, y, desc_a, info, [flag)| diff --git a/docs/src/toolsrout.tex b/docs/src/toolsrout.tex index d43af7268..739142495 100644 --- a/docs/src/toolsrout.tex +++ b/docs/src/toolsrout.tex @@ -598,7 +598,7 @@ An integer value; 0 means no error has been detected. state. \item The descriptor may be in either the build or assembled state. \item Providing a good estimate for the number of nonzeroes $nnz$ in - the assembled matrix may substantially improve performance in the + the assembled matrix may improve performance in the matrix build phase, as it will reduce or eliminate the need for (potentially multiple) data reallocations; \item Using \verb|psb_matbld_remote_| is likely to cause a runtime overhead at @@ -722,7 +722,7 @@ An integer value; 0 means no error has been detected. entirety to a single call to this routine: the buildup of a row may be split into as many calls as desired (even in the CSR format); \item Coefficients from different rows may also be mixed up freely - in a single call, according to the application needs; + in a single call (in COO format), according to the application needs; \item Coefficients from matrix rows not owned by the calling process are treated according to the value of \verb|bldmode| specified at allocation time; if @@ -1246,7 +1246,7 @@ An integer value; 0 means no error has been detected. %% psb_glob_to_loc %% % \clearpage\subsection{psb\_glob\_to\_loc --- Global to local indices - convertion} + conversion} %\addcontentsline{toc}{subsection}{psb\_glob\_to\_loc} \begin{verbatim} @@ -1261,7 +1261,7 @@ call psb_glob_to_loc(x, desc_a, info, iact,owned) Scope: {\bf local} \\ Type: {\bf required}\\ Intent: {\bf in, inout}.\\ -Specified as: a rank one integer array.\\ +Specified as: a rank one integer array of global indices, i.e. \verb|psb_lpk_|.\\ \item[desc\_a] the communication descriptor.\\ Scope:{\bf local}.\\ Type:{\bf required}.\\ @@ -1292,7 +1292,7 @@ Intent: {\bf inout}.\\ Specified as: a rank one integer array. \item[y] If $y$ is present, then $y$ is overwritten with the translated integer indices, and $x$ - is left unchanged. + is left unchanged; since $y$ contains local indices it should use \verb|psb_ipk_|. Scope: {\bf global} \\ Type: {\bf optional}\\ Intent: {\bf out}.\\ @@ -1325,7 +1325,8 @@ call psb_loc_to_glob(x, desc_a, info, iact) \begin{description} \item[Type:] Asynchronous. \item[\bf On Entry] -\item[x] An integer vector of indices to be converted.\\ +\item[x] An integer vector of indices to be converted; if $y$ is present, + they are local indices, i.e. \verb|psb_ipk_| \\ Scope: {\bf local} \\ Type: {\bf required}\\ Intent: {\bf in, inout}.\\ @@ -1346,14 +1347,14 @@ Specified as: a character variable \verb|I|gnore, \verb|W|arning or \begin{description} \item[\bf On Return] \item[x] If $y$ is not present, - then $x$ is overwritten with the translated integer indices. + then $x$ is overwritten with the translated integer global indices, i.e. \verb|psb_lpk_| Scope: {\bf global} \\ Type: {\bf required}\\ Intent: {\bf inout}.\\ Specified as: a rank one integer array. -\item[y] If $y$ is not present, - then $y$ is overwritten with the translated integer indices, and $x$ - is left unchanged. +\item[y] If $y$ not present, + then $y$ is overwritten with the translated global + indices i.e. \verb|psb_lpk_|, and $x$ is left unchanged. Scope: {\bf global} \\ Type: {\bf optional}\\ Intent: {\bf out}.\\ @@ -1773,7 +1774,7 @@ Specified as: a preconditioner data structure \precdata. \item[Function value] The memory occupation of the object specified in the calling sequence, in bytes.\\ Scope: {\bf local} \\ -Returned as: an \verb|integer(psb_long_int_k_)| number. +Returned as: an \verb|integer(psb_lpk_)| number. \end{description} @@ -1873,9 +1874,10 @@ the (sorted) value of $x$ in the original sequence. $O(n^2)$; of the other three, in the average case quicksort will be the fastest and merge-sort the slowest. However note that: \begin{enumerate} - \item The the best case running time for insertion sort is $\Omega(n)$ while the average - and worst case are $O(n^2)$; however for very short input sequences this is - likely to be the fastest method; + \item The best case running time for insertion sort is $\Omega(n)$ + while the average and worst case are $O(n^2)$; moreover, for + very short input sequences this is likely to be the fastest + method; \item The worst case running time for quicksort is $O(n^2)$; the algorithm implemented here follows the well-known median-of-three heuristics, but the worst case may still apply; @@ -1885,8 +1887,8 @@ the (sorted) value of $x$ in the original sequence. subsequences that may be already in the desired ordering prior to the subroutine call; this situation is relatively common when dealing with groups of indices of sparse matrix entries, thus - merge-sort is the preferred choice when a sorting is needed - by other routines in the library. + merge-sort is the preferred choice when a sorting routine is needed + for preprocessing matrix data. \end{enumerate} \end{enumerate} diff --git a/docs/src/userguide.tex b/docs/src/userguide.tex index 2b1e89f3c..d41864b8f 100644 --- a/docs/src/userguide.tex +++ b/docs/src/userguide.tex @@ -136,7 +136,7 @@ by Salvatore Filippone\\ Alfredo Buttari \\ Fabio Durastante}\\ -June 9th, 2025 +December 23rd, 2025 \end{minipage}} } %\addtolength{\textwidth}{\centeroffset} diff --git a/docs/src/userhtml.tex b/docs/src/userhtml.tex index 2ac85f59d..e51acae6a 100644 --- a/docs/src/userhtml.tex +++ b/docs/src/userhtml.tex @@ -106,7 +106,7 @@ Fabio Durastante } \\ %\today Software version: 3.9.0\\ %\today -June 9th, 2025 +December 23rd, 2025 \cleardoublepage \begingroup \renewcommand*{\thepage}{toc} From b4ad5a4288ad068376ba15876671e22144908841 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 8 Jan 2026 13:27:16 +0100 Subject: [PATCH 080/175] Fix build process --- Makefile | 46 ++++++++++++++++++++++++++++++++++++---------- configure | 23 +++++++++++++++++++++++ configure.ac | 16 ++++++++++++++++ cuda/Makefile | 7 ++++--- 4 files changed, 79 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index fd18a38c9..d210accb0 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Make.inc -all: dirs based precd linslvd utild cbindd extd $(CUDAD) $(OACCD) libd +all: dirs mods objs libd @echo "=====================================" @echo "PSBLAS libraries Compilation Successful." @@ -9,13 +9,39 @@ dirs: (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) (if test ! -d modules ; then mkdir modules; fi;) -precd: based -utild: based -linslvd: precd -extd: based -cudad: extd -oaccd: extd -cbindd: based precd linslvd utild +mods: basemods precmods linslvmods utilmods cbindmods extmods $(CUDAMODS) $(OACCMODS) +precmods utilmods extmods: basemods +linslvmods: precmods +cbindmods: basemods precmods linslvmods utilmods +oaccmods: extmods +cudamods: extmods +basemods: + $(MAKE) -C base mods +precmods: + $(MAKE) -C prec mods +linslvmods: + $(MAKE) -C linsolve mods +utilmods: + $(MAKE) -C util mods +cbindmods: + $(MAKE) -C cbind objs +extmods: + $(MAKE) -C ext mods +cudamods: + $(MAKE) -C cuda mods +oaccmods: + $(MAKE) -C openacc mods + + +objs: mods based precd linslvd utild cbindd extd $(CUDAD) $(OACCD) +based: basemods +precd: precmods +utild: utilmods +linslvd: linslvmods +extd: extmods +cudad: cudamods +oaccd: oaccmods +cbindd: cbindmods libd: based precd linslvd utild cbindd extd $(CUDALD) $(OACCLD) $(MAKE) -C base lib @@ -42,9 +68,9 @@ cbindd: $(MAKE) -C cbind objs extd: $(MAKE) -C ext objs -cudad: +cudad: cudamods $(MAKE) -C cuda objs -oaccd: +oaccd: oaccmods $(MAKE) -C openacc objs diff --git a/configure b/configure index eac4ccfd4..4c48e95f2 100755 --- a/configure +++ b/configure @@ -691,6 +691,13 @@ CINTMETIS CHAVEMETIS CHAVE_OPENMP CSERIALMPI +PSBLASBLDRMT +PSBLASBLDNOR +PSBLASDUPDEF +PSBLASDUPERR +PSBLASDUPOVW +PSBLASDUPADD +PSBLASDUPNUL PSBLASSTRING PSBLASPATCH PSBLASMINOR @@ -8814,6 +8821,14 @@ PSBLASMAJOR=`cat $CFILE| grep version_major | $AWK '{print $6;}'`; PSBLASMINOR=`cat $CFILE| grep version_minor| $AWK '{print $6;}'`; PSBLASPATCH=`cat $CFILE| grep patchlevel| $AWK '{print $6;}'`; PSBLASSTRING=`cat $CFILE | grep version_string | $AWK '{print $6;}'`; +PSBLASDUPNUL=`cat $CFILE| grep dupl_null | $AWK '{print $6;}'`; +PSBLASDUPADD=`cat $CFILE| grep "psb_dupl_add_ =" | $AWK '{print $6;}'`; +PSBLASDUPOVW=`cat $CFILE| grep dupl_ovwrt| $AWK '{print $6;}'`; +PSBLASDUPERR=`cat $CFILE| grep dupl_err| $AWK '{print $6;}'`; +PSBLASDUPDEF=`cat $CFILE| grep dupl_def| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$//`; +PSBLASBLDNOR=`cat $CFILE| grep matbld_noremote| $AWK '{print $6;}'`; +PSBLASBLDRMT=`cat $CFILE| grep matbld_remote| $AWK '{print $6;}'`; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: version $PSBLASSTRING" >&5 printf "%s\n" " version $PSBLASSTRING" >&6; } @@ -11765,6 +11780,14 @@ FDEFINES=$(PSBFDEFINES) + + + + + + + + diff --git a/configure.ac b/configure.ac index a4001041b..4513bb4a7 100644 --- a/configure.ac +++ b/configure.ac @@ -695,6 +695,14 @@ PSBLASMAJOR=`cat $CFILE| grep version_major | $AWK '{print $6;}'`; PSBLASMINOR=`cat $CFILE| grep version_minor| $AWK '{print $6;}'`; PSBLASPATCH=`cat $CFILE| grep patchlevel| $AWK '{print $6;}'`; PSBLASSTRING=`cat $CFILE | grep version_string | $AWK '{print $6;}'`; +PSBLASDUPNUL=`cat $CFILE| grep dupl_null | $AWK '{print $6;}'`; +PSBLASDUPADD=`cat $CFILE| grep "psb_dupl_add_ =" | $AWK '{print $6;}'`; +PSBLASDUPOVW=`cat $CFILE| grep dupl_ovwrt| $AWK '{print $6;}'`; +PSBLASDUPERR=`cat $CFILE| grep dupl_err| $AWK '{print $6;}'`; +PSBLASDUPDEF=`cat $CFILE| grep dupl_def| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$//`; +PSBLASBLDNOR=`cat $CFILE| grep matbld_noremote| $AWK '{print $6;}'`; +PSBLASBLDRMT=`cat $CFILE| grep matbld_remote| $AWK '{print $6;}'`; + AC_MSG_RESULT([ version $PSBLASSTRING]) ############################################################################### @@ -1071,6 +1079,14 @@ AC_SUBST(PSBLASMAJOR) AC_SUBST(PSBLASMINOR) AC_SUBST(PSBLASPATCH) AC_SUBST(PSBLASSTRING) +AC_SUBST(PSBLASDUPNUL) +AC_SUBST(PSBLASDUPADD) +AC_SUBST(PSBLASDUPOVW) +AC_SUBST(PSBLASDUPERR) +AC_SUBST(PSBLASDUPDEF) +AC_SUBST(PSBLASBLDNOR) +AC_SUBST(PSBLASBLDRMT) + AC_SUBST(CSERIALMPI) AC_SUBST(CHAVE_OPENMP) AC_SUBST(CHAVEMETIS) diff --git a/cuda/Makefile b/cuda/Makefile index 1e62895b4..5c9754bc7 100755 --- a/cuda/Makefile +++ b/cuda/Makefile @@ -52,12 +52,13 @@ lib: mods objs ilib cudalib spgpulib /bin/cp -p $(LIBNAME) $(LIBDIR) -mods: $(FOBJS) +mods: $(FOBJS) includes $(INSTALL) -p *$(.mod) $(MODDIR) + +includes: spgpuinc $(INSTALL) -p *.h $(INCDIR) -objs: $(OBJS) iobjs cudaobjs spgpuobjs -$(OBJS) iobjs cudaobjs spgpuobjs: spgpuinc +objs: mods $(OBJS) iobjs cudaobjs spgpuobjs spgpuinc: $(MAKE) -C spgpu incl From 807afa248f7cd9ea8462d73c69a12888b76f2efa Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 8 Jan 2026 14:09:47 +0100 Subject: [PATCH 081/175] Fix cuda makefile --- cuda/spgpu/kernels/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cuda/spgpu/kernels/Makefile b/cuda/spgpu/kernels/Makefile index a45bb8c0c..8bebf1ba6 100644 --- a/cuda/spgpu/kernels/Makefile +++ b/cuda/spgpu/kernels/Makefile @@ -6,7 +6,7 @@ include $(TOP)/Make.inc LIBDIR=$(TOP)/lib INCDIR=$(TOP)/include MODDIR=$(TOP)/modules -UP=.. +UP=../.. LIBNAME=$(UP)/libpsb_cuda.a CINCLUDES=-I$(INCDIR) CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) @@ -24,7 +24,7 @@ OBJS=cabs.o camax.o casum.o caxpby.o caxy.o cdot.o cgath.o \ objs: $(OBJS) lib: objs - $(AR) $(UP)/$(LIBNAME) $(OBJS) + $(AR) $(LIBNAME) $(OBJS) clean: From 24aa5a0bc589b122a91400181858e5e5c1080899 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 8 Jan 2026 14:24:02 +0100 Subject: [PATCH 082/175] Fix cuda build --- cuda/spgpu/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuda/spgpu/Makefile b/cuda/spgpu/Makefile index c87b133b6..f713d02c7 100644 --- a/cuda/spgpu/Makefile +++ b/cuda/spgpu/Makefile @@ -23,7 +23,7 @@ lib: objs iobjs ilib iobjs: $(MAKE) -C kernels objs ilib: - $(MAKE) -C kernels lib LIBNAME=$(LIBNAME) + $(MAKE) -C kernels lib incl: /bin/cp -p *.h $(INCDIR) From f79ab74649cb9043fd030f964fea279e290fb800 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 9 Jan 2026 09:10:23 +0100 Subject: [PATCH 083/175] Fix CUDA makefiles --- cuda/CUDA/Makefile | 2 +- cuda/Makefile | 6 +++--- cuda/impl/Makefile | 2 +- cuda/spgpu/Makefile | 4 ++-- cuda/spgpu/kernels/Makefile | 5 ++--- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/cuda/CUDA/Makefile b/cuda/CUDA/Makefile index 010d591d5..3918e2988 100644 --- a/cuda/CUDA/Makefile +++ b/cuda/CUDA/Makefile @@ -16,7 +16,7 @@ LDLIBS=$(PSBLDLIBS) #CCOPT= -g FINCLUDES=$(FMFLAG). $(FMFLAG)$(INCDIR) $(FMFLAG)$(PSBINCDIR) $(FIFLAG). CINCLUDES=$(SPGPU_INCLUDES) $(CUDA_INCLUDES) -I.. -I$(INCDIR) -LIBNAME=libpsb_gpu.a +LIBNAME=libpsb_cuda.a CUDAOBJS=psi_cuda_c_CopyCooToElg.o psi_cuda_c_CopyCooToHlg.o \ diff --git a/cuda/Makefile b/cuda/Makefile index 5c9754bc7..795c17f7d 100755 --- a/cuda/Makefile +++ b/cuda/Makefile @@ -128,9 +128,9 @@ cudaobjs: $(FOBJS) $(MAKE) -C CUDA objs ilib: objs - $(MAKE) -C impl lib LIBNAME=$(LIBNAME) -cudalib: objs ilib - $(MAKE) -C CUDA lib LIBNAME=$(LIBNAME) + $(MAKE) -C impl lib +cudalib: objs + $(MAKE) -C CUDA lib clean: cclean iclean cudaclean spgpuclean /bin/rm -f $(FOBJS) *$(.mod) *.a diff --git a/cuda/impl/Makefile b/cuda/impl/Makefile index 2d9a774d8..63f416606 100755 --- a/cuda/impl/Makefile +++ b/cuda/impl/Makefile @@ -11,7 +11,7 @@ LDLIBS=$(PSBLDLIBS) #CCOPT= -g FINCLUDES=$(FMFLAG).. $(FMFLAG)$(MODDIR) $(FMFLAG)$(INCDIR) $(FIFLAG).. CINCLUDES=-I$(GPU_INCDIR) -I$(CUDA_INCDIR) -LIBNAME=libpsb_gpu.a +LIBNAME=libpsb_cuda.a CXXDEFINES=$(PSBCXXDEFINES) $(SPGPU_DEFINES) $(CUDA_DEFINES) CDEFINES=$(PSBCDEFINES) $(SPGPU_DEFINES) $(CUDA_DEFINES) FDEFINES=$(PSBFDEFINES) $(SPGPU_DEFINES) $(CUDA_DEFINES) diff --git a/cuda/spgpu/Makefile b/cuda/spgpu/Makefile index f713d02c7..fbe99fb42 100644 --- a/cuda/spgpu/Makefile +++ b/cuda/spgpu/Makefile @@ -7,7 +7,7 @@ UP=.. LIBDIR=$(TOP)/lib INCDIR=$(TOP)/include MODDIR=$(TOP)/modules -LIBNAME=$(UP)/libpsb_cuda.a +LIBNAME=libpsb_cuda.a OBJS=coo.o core.o dia.o ell.o hdia.o hell.o CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) @@ -17,7 +17,7 @@ all: incl objs objs: incl $(OBJS) iobjs lib: objs iobjs ilib - $(AR) $(LIBNAME) $(OBJS) + $(AR) ../$(LIBNAME) $(OBJS) # /bin/cp -p $(LIBNAME) $(LIBDIR) iobjs: diff --git a/cuda/spgpu/kernels/Makefile b/cuda/spgpu/kernels/Makefile index 8bebf1ba6..f73e74a71 100644 --- a/cuda/spgpu/kernels/Makefile +++ b/cuda/spgpu/kernels/Makefile @@ -6,8 +6,7 @@ include $(TOP)/Make.inc LIBDIR=$(TOP)/lib INCDIR=$(TOP)/include MODDIR=$(TOP)/modules -UP=../.. -LIBNAME=$(UP)/libpsb_cuda.a +LIBNAME=libpsb_cuda.a CINCLUDES=-I$(INCDIR) CU_INCLUDES=-I$(INCDIR) $(CUDA_INCLUDES) OBJS=cabs.o camax.o casum.o caxpby.o caxy.o cdot.o cgath.o \ @@ -24,7 +23,7 @@ OBJS=cabs.o camax.o casum.o caxpby.o caxy.o cdot.o cgath.o \ objs: $(OBJS) lib: objs - $(AR) $(LIBNAME) $(OBJS) + $(AR) ../../$(LIBNAME) $(OBJS) clean: From 3983255f9f99ad010506248ac7eb6a92fa5bd37d Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 9 Jan 2026 09:30:59 +0100 Subject: [PATCH 084/175] Further cuda makefile fix --- cuda/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cuda/Makefile b/cuda/Makefile index 795c17f7d..ee4757ce0 100755 --- a/cuda/Makefile +++ b/cuda/Makefile @@ -127,9 +127,9 @@ iobjs: $(FOBJS) cudaobjs: $(FOBJS) $(MAKE) -C CUDA objs -ilib: objs +ilib: objs spgpulib $(MAKE) -C impl lib -cudalib: objs +cudalib: objs ilib $(MAKE) -C CUDA lib clean: cclean iclean cudaclean spgpuclean From 82d7f0fe7ed82e3c93ca23f715d989e5eda007b5 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 9 Jan 2026 13:26:43 +0100 Subject: [PATCH 085/175] Bump patchlevel --- base/modules/psb_const_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index 5f229ac8f..ee11beafb 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -136,10 +136,10 @@ module psb_const_mod ! ! Version ! - character(len=*), parameter :: psb_version_string_ = "3.9.0" + character(len=*), parameter :: psb_version_string_ = "3.9.1" integer(psb_ipk_), parameter :: psb_version_major_ = 3 integer(psb_ipk_), parameter :: psb_version_minor_ = 9 - integer(psb_ipk_), parameter :: psb_patchlevel_ = 0 + integer(psb_ipk_), parameter :: psb_patchlevel_ = 1 ! ! Handy & miscellaneous constants From 3337a12e593ba0184969321bc9cefa866c223d68 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 13 Jan 2026 15:26:11 +0100 Subject: [PATCH 086/175] Fix multivect handling --- base/modules/serial/psb_c_base_vect_mod.F90 | 413 +++++++++++++++++--- base/modules/serial/psb_c_vect_mod.F90 | 6 +- base/modules/serial/psb_d_base_vect_mod.F90 | 411 ++++++++++++++++--- base/modules/serial/psb_d_vect_mod.F90 | 6 +- base/modules/serial/psb_i_base_vect_mod.F90 | 411 ++++++++++++++++--- base/modules/serial/psb_i_vect_mod.F90 | 6 +- base/modules/serial/psb_l_base_vect_mod.F90 | 413 +++++++++++++++++--- base/modules/serial/psb_l_vect_mod.F90 | 6 +- base/modules/serial/psb_s_base_vect_mod.F90 | 413 +++++++++++++++++--- base/modules/serial/psb_s_vect_mod.F90 | 6 +- base/modules/serial/psb_z_base_vect_mod.F90 | 413 +++++++++++++++++--- base/modules/serial/psb_z_vect_mod.F90 | 6 +- base/modules/tools/psb_c_tools_mod.F90 | 3 +- base/modules/tools/psb_d_tools_mod.F90 | 3 +- base/modules/tools/psb_i_tools_mod.F90 | 3 +- base/modules/tools/psb_l_tools_mod.F90 | 3 +- base/modules/tools/psb_s_tools_mod.F90 | 3 +- base/modules/tools/psb_z_tools_mod.F90 | 3 +- base/tools/psb_callc.f90 | 42 +- base/tools/psb_casb.f90 | 38 +- base/tools/psb_cins.f90 | 2 +- base/tools/psb_dallc.f90 | 42 +- base/tools/psb_dasb.f90 | 38 +- base/tools/psb_dins.f90 | 2 +- base/tools/psb_iallc.f90 | 42 +- base/tools/psb_iasb.f90 | 38 +- base/tools/psb_iins.f90 | 2 +- base/tools/psb_lallc.f90 | 42 +- base/tools/psb_lasb.f90 | 38 +- base/tools/psb_lins.f90 | 2 +- base/tools/psb_sallc.f90 | 42 +- base/tools/psb_sasb.f90 | 38 +- base/tools/psb_sins.f90 | 2 +- base/tools/psb_zallc.f90 | 42 +- base/tools/psb_zasb.f90 | 38 +- base/tools/psb_zins.f90 | 2 +- 36 files changed, 2206 insertions(+), 814 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index ed1b45974..20ee1ef06 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -397,22 +397,6 @@ contains end subroutine c_base_all - subroutine c_base_reinit(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_c_base_vect_type), intent(out) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) then - call x%sync() - x%v(:) = czero - call x%set_host() - call x%set_upd() - end if - - end subroutine c_base_reinit - !> Function base_mold: !! \memberof psb_c_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -431,6 +415,22 @@ contains end subroutine c_base_mold + subroutine c_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_c_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = czero + call x%set_host() + call x%set_upd() + end if + + end subroutine c_base_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -491,7 +491,9 @@ contains end if enddo call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() if (.not.allocated(x%v)) then info = psb_err_invalid_vect_state_ @@ -662,7 +664,7 @@ contains ncfs = x%get_ncfs() xvsz = psb_size(x%v) call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = czero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,ncfs @@ -674,7 +676,7 @@ contains end do case(psb_dupl_err_) do i=1,ncfs - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. czero) then call psb_errpush(psb_err_duplicate_coo,'vect-asb') return else @@ -745,7 +747,7 @@ contains & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') if (x%is_bld()) then call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = czero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,x%get_ncfs() @@ -757,7 +759,7 @@ contains end do case(psb_dupl_err_) do i=1,x%get_ncfs() - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. czero) then call psb_errpush(psb_err_duplicate_coo,'vect_asb') return else @@ -815,8 +817,6 @@ contains call x%set_null() end subroutine c_base_free - - ! !> Function base_free_buffer: !! \memberof psb_c_base_vect_type @@ -2440,6 +2440,18 @@ module psb_c_base_multivect_mod complex(psb_spk_), allocatable :: v(:,:) complex(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -2458,6 +2470,22 @@ module psb_c_base_multivect_mod procedure, pass(x) :: zero => c_base_mlv_zero procedure, pass(x) :: asb => c_base_mlv_asb procedure, pass(x) :: free => c_base_mlv_free + procedure, pass(x) :: reinit => c_base_mlv_reinit + procedure, pass(x) :: set_ncfs => c_base_mlv_set_ncfs + procedure, pass(x) :: get_ncfs => c_base_mlv_get_ncfs + procedure, pass(x) :: set_dupl => c_base_mlv_set_dupl + procedure, pass(x) :: get_dupl => c_base_mlv_get_dupl + procedure, pass(x) :: set_state => c_base_mlv_set_state + procedure, pass(x) :: set_null => c_base_mlv_set_null + procedure, pass(x) :: set_bld => c_base_mlv_set_bld + procedure, pass(x) :: set_upd => c_base_mlv_set_upd + procedure, pass(x) :: set_asb => c_base_mlv_set_asb + procedure, pass(x) :: get_state => c_base_mlv_get_state + procedure, pass(x) :: is_null => c_base_mlv_is_null + procedure, pass(x) :: is_bld => c_base_mlv_is_bld + procedure, pass(x) :: is_upd => c_base_mlv_is_upd + procedure, pass(x) :: is_asb => c_base_mlv_is_asb + procedure, pass(x) :: base_cpy => c_base_mlv_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -2571,7 +2599,8 @@ contains integer(psb_ipk_) :: info this%v = x - call this%asb(size(x,dim=1,kind=psb_ipk_),size(x,dim=2,kind=psb_ipk_),info) + call this%asb(size(x,dim=1,kind=psb_ipk_),& + & size(x,dim=2,kind=psb_ipk_),info) end function constructor @@ -2621,12 +2650,21 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine c_base_mlv_bld_n(x,m,n) + subroutine c_base_mlv_bld_n(x,m,n,scratch) use psb_realloc_mod integer(psb_ipk_), intent(in) :: m,n class(psb_c_base_multivect_type), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(m,n,x%v,info) call x%asb(m,n,info) @@ -2648,6 +2686,10 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(m,n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine c_base_mlv_all @@ -2669,6 +2711,22 @@ contains end subroutine c_base_mlv_mold + subroutine c_base_mlv_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_c_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:,:) = czero + call x%set_host() + call x%set_upd() + end if + + end subroutine c_base_mlv_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -2696,57 +2754,123 @@ contains !! \param info return code !! ! - subroutine c_base_mlv_ins(n,irl,val,dupl,x,info) + subroutine c_base_mlv_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_c_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_spk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, nc, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v,1) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + nc = size(x%v,2) + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_realloc(isz,nc,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows - ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i),:) = val(i,:) + x%v(k,:) = val(i,:) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) - case(psb_dupl_add_) + else if (x%is_upd()) then - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) - end if - enddo + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if + call x%set_host() if (info /= 0) then call psb_errpush(info,'base_mlv_vect_ins') return @@ -2766,6 +2890,7 @@ contains class(psb_c_base_multivect_type), intent(inout) :: x if (allocated(x%v)) x%v=czero + call x%set_host() end subroutine c_base_mlv_zero @@ -2784,19 +2909,73 @@ contains !! ! - subroutine c_base_mlv_asb(m,n, x, info) + subroutine c_base_mlv_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: m,n class(psb_c_base_multivect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch - if ((x%get_nrows() < m).or.(x%get_ncols() Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine c_base_mlv_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_c_base_multivect_type), intent(in) :: x + class(psb_c_base_multivect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine c_base_mlv_cpy + ! ! Size info. @@ -2960,7 +3255,7 @@ contains integer(psb_epk_) :: res ! Force 8-byte integers. - res = (1_psb_epk_ * psb_sizeof_ip) * x%get_nrows() * x%get_ncols() + res = (1_psb_epk_ * (2*psb_sizeof_sp)) * x%get_nrows() * x%get_ncols() end function c_base_mlv_sizeof diff --git a/base/modules/serial/psb_c_vect_mod.F90 b/base/modules/serial/psb_c_vect_mod.F90 index 274bd5712..4053492f0 100644 --- a/base/modules/serial/psb_c_vect_mod.F90 +++ b/base/modules/serial/psb_c_vect_mod.F90 @@ -1887,11 +1887,11 @@ contains end subroutine c_mvect_free - subroutine c_mvect_ins(n,irl,val,x,info) + subroutine c_mvect_ins(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_c_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n,maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_spk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -1904,7 +1904,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine c_mvect_ins diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 71b921cdd..907d10347 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -404,22 +404,6 @@ contains end subroutine d_base_all - subroutine d_base_reinit(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_d_base_vect_type), intent(out) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) then - call x%sync() - x%v(:) = dzero - call x%set_host() - call x%set_upd() - end if - - end subroutine d_base_reinit - !> Function base_mold: !! \memberof psb_d_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -438,6 +422,22 @@ contains end subroutine d_base_mold + subroutine d_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_d_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = dzero + call x%set_host() + call x%set_upd() + end if + + end subroutine d_base_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -498,7 +498,9 @@ contains end if enddo call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() if (.not.allocated(x%v)) then info = psb_err_invalid_vect_state_ @@ -681,7 +683,7 @@ contains end do case(psb_dupl_err_) do i=1,ncfs - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. dzero) then call psb_errpush(psb_err_duplicate_coo,'vect-asb') return else @@ -752,7 +754,7 @@ contains & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') if (x%is_bld()) then call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = dzero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,x%get_ncfs() @@ -764,7 +766,7 @@ contains end do case(psb_dupl_err_) do i=1,x%get_ncfs() - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. dzero) then call psb_errpush(psb_err_duplicate_coo,'vect_asb') return else @@ -822,8 +824,6 @@ contains call x%set_null() end subroutine d_base_free - - ! !> Function base_free_buffer: !! \memberof psb_d_base_vect_type @@ -2619,6 +2619,18 @@ module psb_d_base_multivect_mod real(psb_dpk_), allocatable :: v(:,:) real(psb_dpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -2637,6 +2649,22 @@ module psb_d_base_multivect_mod procedure, pass(x) :: zero => d_base_mlv_zero procedure, pass(x) :: asb => d_base_mlv_asb procedure, pass(x) :: free => d_base_mlv_free + procedure, pass(x) :: reinit => d_base_mlv_reinit + procedure, pass(x) :: set_ncfs => d_base_mlv_set_ncfs + procedure, pass(x) :: get_ncfs => d_base_mlv_get_ncfs + procedure, pass(x) :: set_dupl => d_base_mlv_set_dupl + procedure, pass(x) :: get_dupl => d_base_mlv_get_dupl + procedure, pass(x) :: set_state => d_base_mlv_set_state + procedure, pass(x) :: set_null => d_base_mlv_set_null + procedure, pass(x) :: set_bld => d_base_mlv_set_bld + procedure, pass(x) :: set_upd => d_base_mlv_set_upd + procedure, pass(x) :: set_asb => d_base_mlv_set_asb + procedure, pass(x) :: get_state => d_base_mlv_get_state + procedure, pass(x) :: is_null => d_base_mlv_is_null + procedure, pass(x) :: is_bld => d_base_mlv_is_bld + procedure, pass(x) :: is_upd => d_base_mlv_is_upd + procedure, pass(x) :: is_asb => d_base_mlv_is_asb + procedure, pass(x) :: base_cpy => d_base_mlv_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -2750,7 +2778,8 @@ contains integer(psb_ipk_) :: info this%v = x - call this%asb(size(x,dim=1,kind=psb_ipk_),size(x,dim=2,kind=psb_ipk_),info) + call this%asb(size(x,dim=1,kind=psb_ipk_),& + & size(x,dim=2,kind=psb_ipk_),info) end function constructor @@ -2800,12 +2829,21 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine d_base_mlv_bld_n(x,m,n) + subroutine d_base_mlv_bld_n(x,m,n,scratch) use psb_realloc_mod integer(psb_ipk_), intent(in) :: m,n class(psb_d_base_multivect_type), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(m,n,x%v,info) call x%asb(m,n,info) @@ -2827,6 +2865,10 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(m,n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine d_base_mlv_all @@ -2848,6 +2890,22 @@ contains end subroutine d_base_mlv_mold + subroutine d_base_mlv_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_d_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:,:) = dzero + call x%set_host() + call x%set_upd() + end if + + end subroutine d_base_mlv_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -2875,57 +2933,123 @@ contains !! \param info return code !! ! - subroutine d_base_mlv_ins(n,irl,val,dupl,x,info) + subroutine d_base_mlv_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_d_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, nc, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v,1) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + nc = size(x%v,2) + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_realloc(isz,nc,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows - ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i),:) = val(i,:) + x%v(k,:) = val(i,:) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) - case(psb_dupl_add_) + else if (x%is_upd()) then - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) - end if - enddo + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if + call x%set_host() if (info /= 0) then call psb_errpush(info,'base_mlv_vect_ins') return @@ -2945,6 +3069,7 @@ contains class(psb_d_base_multivect_type), intent(inout) :: x if (allocated(x%v)) x%v=dzero + call x%set_host() end subroutine d_base_mlv_zero @@ -2963,19 +3088,73 @@ contains !! ! - subroutine d_base_mlv_asb(m,n, x, info) + subroutine d_base_mlv_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: m,n class(psb_d_base_multivect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch - if ((x%get_nrows() < m).or.(x%get_ncols() Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine d_base_mlv_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_d_base_multivect_type), intent(in) :: x + class(psb_d_base_multivect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine d_base_mlv_cpy + ! ! Size info. @@ -3139,7 +3434,7 @@ contains integer(psb_epk_) :: res ! Force 8-byte integers. - res = (1_psb_epk_ * psb_sizeof_ip) * x%get_nrows() * x%get_ncols() + res = (1_psb_epk_ * psb_sizeof_dp) * x%get_nrows() * x%get_ncols() end function d_base_mlv_sizeof diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index 4e0226533..d2df69ffb 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -1966,11 +1966,11 @@ contains end subroutine d_mvect_free - subroutine d_mvect_ins(n,irl,val,x,info) + subroutine d_mvect_ins(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_d_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -1983,7 +1983,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine d_mvect_ins diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index f55815cfc..3a096eb34 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -330,22 +330,6 @@ contains end subroutine i_base_all - subroutine i_base_reinit(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_i_base_vect_type), intent(out) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) then - call x%sync() - x%v(:) = izero - call x%set_host() - call x%set_upd() - end if - - end subroutine i_base_reinit - !> Function base_mold: !! \memberof psb_i_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -364,6 +348,22 @@ contains end subroutine i_base_mold + subroutine i_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = izero + call x%set_host() + call x%set_upd() + end if + + end subroutine i_base_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -424,7 +424,9 @@ contains end if enddo call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() if (.not.allocated(x%v)) then info = psb_err_invalid_vect_state_ @@ -595,7 +597,7 @@ contains ncfs = x%get_ncfs() xvsz = psb_size(x%v) call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = izero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,ncfs @@ -607,7 +609,7 @@ contains end do case(psb_dupl_err_) do i=1,ncfs - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. izero) then call psb_errpush(psb_err_duplicate_coo,'vect-asb') return else @@ -678,7 +680,7 @@ contains & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') if (x%is_bld()) then call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = izero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,x%get_ncfs() @@ -690,7 +692,7 @@ contains end do case(psb_dupl_err_) do i=1,x%get_ncfs() - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. izero) then call psb_errpush(psb_err_duplicate_coo,'vect_asb') return else @@ -748,8 +750,6 @@ contains call x%set_null() end subroutine i_base_free - - ! !> Function base_free_buffer: !! \memberof psb_i_base_vect_type @@ -1398,6 +1398,18 @@ module psb_i_base_multivect_mod integer(psb_ipk_), allocatable :: v(:,:) integer(psb_ipk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -1416,6 +1428,22 @@ module psb_i_base_multivect_mod procedure, pass(x) :: zero => i_base_mlv_zero procedure, pass(x) :: asb => i_base_mlv_asb procedure, pass(x) :: free => i_base_mlv_free + procedure, pass(x) :: reinit => i_base_mlv_reinit + procedure, pass(x) :: set_ncfs => i_base_mlv_set_ncfs + procedure, pass(x) :: get_ncfs => i_base_mlv_get_ncfs + procedure, pass(x) :: set_dupl => i_base_mlv_set_dupl + procedure, pass(x) :: get_dupl => i_base_mlv_get_dupl + procedure, pass(x) :: set_state => i_base_mlv_set_state + procedure, pass(x) :: set_null => i_base_mlv_set_null + procedure, pass(x) :: set_bld => i_base_mlv_set_bld + procedure, pass(x) :: set_upd => i_base_mlv_set_upd + procedure, pass(x) :: set_asb => i_base_mlv_set_asb + procedure, pass(x) :: get_state => i_base_mlv_get_state + procedure, pass(x) :: is_null => i_base_mlv_is_null + procedure, pass(x) :: is_bld => i_base_mlv_is_bld + procedure, pass(x) :: is_upd => i_base_mlv_is_upd + procedure, pass(x) :: is_asb => i_base_mlv_is_asb + procedure, pass(x) :: base_cpy => i_base_mlv_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -1496,7 +1524,8 @@ contains integer(psb_ipk_) :: info this%v = x - call this%asb(size(x,dim=1,kind=psb_ipk_),size(x,dim=2,kind=psb_ipk_),info) + call this%asb(size(x,dim=1,kind=psb_ipk_),& + & size(x,dim=2,kind=psb_ipk_),info) end function constructor @@ -1546,12 +1575,21 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine i_base_mlv_bld_n(x,m,n) + subroutine i_base_mlv_bld_n(x,m,n,scratch) use psb_realloc_mod integer(psb_ipk_), intent(in) :: m,n class(psb_i_base_multivect_type), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(m,n,x%v,info) call x%asb(m,n,info) @@ -1573,6 +1611,10 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(m,n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine i_base_mlv_all @@ -1594,6 +1636,22 @@ contains end subroutine i_base_mlv_mold + subroutine i_base_mlv_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:,:) = izero + call x%set_host() + call x%set_upd() + end if + + end subroutine i_base_mlv_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -1621,57 +1679,123 @@ contains !! \param info return code !! ! - subroutine i_base_mlv_ins(n,irl,val,dupl,x,info) + subroutine i_base_mlv_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_i_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_ipk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, nc, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v,1) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + nc = size(x%v,2) + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_realloc(isz,nc,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows - ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i),:) = val(i,:) + x%v(k,:) = val(i,:) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) - case(psb_dupl_add_) + else if (x%is_upd()) then - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) - end if - enddo + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if + call x%set_host() if (info /= 0) then call psb_errpush(info,'base_mlv_vect_ins') return @@ -1691,6 +1815,7 @@ contains class(psb_i_base_multivect_type), intent(inout) :: x if (allocated(x%v)) x%v=izero + call x%set_host() end subroutine i_base_mlv_zero @@ -1709,19 +1834,73 @@ contains !! ! - subroutine i_base_mlv_asb(m,n, x, info) + subroutine i_base_mlv_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: m,n class(psb_i_base_multivect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch - if ((x%get_nrows() < m).or.(x%get_ncols() Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine i_base_mlv_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i_base_multivect_type), intent(in) :: x + class(psb_i_base_multivect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine i_base_mlv_cpy + ! ! Size info. diff --git a/base/modules/serial/psb_i_vect_mod.F90 b/base/modules/serial/psb_i_vect_mod.F90 index 91230644e..adbcaa6a9 100644 --- a/base/modules/serial/psb_i_vect_mod.F90 +++ b/base/modules/serial/psb_i_vect_mod.F90 @@ -1210,11 +1210,11 @@ contains end subroutine i_mvect_free - subroutine i_mvect_ins(n,irl,val,x,info) + subroutine i_mvect_ins(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_i_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n,maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_ipk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -1227,7 +1227,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine i_mvect_ins diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index 6059ff36d..4030b0a73 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -331,22 +331,6 @@ contains end subroutine l_base_all - subroutine l_base_reinit(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_l_base_vect_type), intent(out) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) then - call x%sync() - x%v(:) = lzero - call x%set_host() - call x%set_upd() - end if - - end subroutine l_base_reinit - !> Function base_mold: !! \memberof psb_l_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -365,6 +349,22 @@ contains end subroutine l_base_mold + subroutine l_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_l_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = lzero + call x%set_host() + call x%set_upd() + end if + + end subroutine l_base_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -425,7 +425,9 @@ contains end if enddo call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() if (.not.allocated(x%v)) then info = psb_err_invalid_vect_state_ @@ -596,7 +598,7 @@ contains ncfs = x%get_ncfs() xvsz = psb_size(x%v) call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = lzero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,ncfs @@ -608,7 +610,7 @@ contains end do case(psb_dupl_err_) do i=1,ncfs - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. lzero) then call psb_errpush(psb_err_duplicate_coo,'vect-asb') return else @@ -679,7 +681,7 @@ contains & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') if (x%is_bld()) then call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = lzero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,x%get_ncfs() @@ -691,7 +693,7 @@ contains end do case(psb_dupl_err_) do i=1,x%get_ncfs() - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. lzero) then call psb_errpush(psb_err_duplicate_coo,'vect_asb') return else @@ -749,8 +751,6 @@ contains call x%set_null() end subroutine l_base_free - - ! !> Function base_free_buffer: !! \memberof psb_l_base_vect_type @@ -1399,6 +1399,18 @@ module psb_l_base_multivect_mod integer(psb_lpk_), allocatable :: v(:,:) integer(psb_lpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -1417,6 +1429,22 @@ module psb_l_base_multivect_mod procedure, pass(x) :: zero => l_base_mlv_zero procedure, pass(x) :: asb => l_base_mlv_asb procedure, pass(x) :: free => l_base_mlv_free + procedure, pass(x) :: reinit => l_base_mlv_reinit + procedure, pass(x) :: set_ncfs => l_base_mlv_set_ncfs + procedure, pass(x) :: get_ncfs => l_base_mlv_get_ncfs + procedure, pass(x) :: set_dupl => l_base_mlv_set_dupl + procedure, pass(x) :: get_dupl => l_base_mlv_get_dupl + procedure, pass(x) :: set_state => l_base_mlv_set_state + procedure, pass(x) :: set_null => l_base_mlv_set_null + procedure, pass(x) :: set_bld => l_base_mlv_set_bld + procedure, pass(x) :: set_upd => l_base_mlv_set_upd + procedure, pass(x) :: set_asb => l_base_mlv_set_asb + procedure, pass(x) :: get_state => l_base_mlv_get_state + procedure, pass(x) :: is_null => l_base_mlv_is_null + procedure, pass(x) :: is_bld => l_base_mlv_is_bld + procedure, pass(x) :: is_upd => l_base_mlv_is_upd + procedure, pass(x) :: is_asb => l_base_mlv_is_asb + procedure, pass(x) :: base_cpy => l_base_mlv_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -1497,7 +1525,8 @@ contains integer(psb_ipk_) :: info this%v = x - call this%asb(size(x,dim=1,kind=psb_ipk_),size(x,dim=2,kind=psb_ipk_),info) + call this%asb(size(x,dim=1,kind=psb_ipk_),& + & size(x,dim=2,kind=psb_ipk_),info) end function constructor @@ -1547,12 +1576,21 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine l_base_mlv_bld_n(x,m,n) + subroutine l_base_mlv_bld_n(x,m,n,scratch) use psb_realloc_mod integer(psb_ipk_), intent(in) :: m,n class(psb_l_base_multivect_type), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(m,n,x%v,info) call x%asb(m,n,info) @@ -1574,6 +1612,10 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(m,n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine l_base_mlv_all @@ -1595,6 +1637,22 @@ contains end subroutine l_base_mlv_mold + subroutine l_base_mlv_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_l_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:,:) = lzero + call x%set_host() + call x%set_upd() + end if + + end subroutine l_base_mlv_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -1622,57 +1680,123 @@ contains !! \param info return code !! ! - subroutine l_base_mlv_ins(n,irl,val,dupl,x,info) + subroutine l_base_mlv_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_l_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_lpk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, nc, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v,1) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + nc = size(x%v,2) + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_realloc(isz,nc,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows - ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i),:) = val(i,:) + x%v(k,:) = val(i,:) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) - case(psb_dupl_add_) + else if (x%is_upd()) then - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) - end if - enddo + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if + call x%set_host() if (info /= 0) then call psb_errpush(info,'base_mlv_vect_ins') return @@ -1692,6 +1816,7 @@ contains class(psb_l_base_multivect_type), intent(inout) :: x if (allocated(x%v)) x%v=lzero + call x%set_host() end subroutine l_base_mlv_zero @@ -1710,19 +1835,73 @@ contains !! ! - subroutine l_base_mlv_asb(m,n, x, info) + subroutine l_base_mlv_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: m,n class(psb_l_base_multivect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch - if ((x%get_nrows() < m).or.(x%get_ncols() Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine l_base_mlv_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_l_base_multivect_type), intent(in) :: x + class(psb_l_base_multivect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine l_base_mlv_cpy + ! ! Size info. @@ -1886,7 +2181,7 @@ contains integer(psb_epk_) :: res ! Force 8-byte integers. - res = (1_psb_epk_ * psb_sizeof_ip) * x%get_nrows() * x%get_ncols() + res = (1_psb_epk_ * psb_sizeof_lp) * x%get_nrows() * x%get_ncols() end function l_base_mlv_sizeof diff --git a/base/modules/serial/psb_l_vect_mod.F90 b/base/modules/serial/psb_l_vect_mod.F90 index c1f6ca8f5..d29d0c7b6 100644 --- a/base/modules/serial/psb_l_vect_mod.F90 +++ b/base/modules/serial/psb_l_vect_mod.F90 @@ -1211,11 +1211,11 @@ contains end subroutine l_mvect_free - subroutine l_mvect_ins(n,irl,val,x,info) + subroutine l_mvect_ins(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_l_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n,maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_lpk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -1228,7 +1228,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine l_mvect_ins diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index 7bb3f5fec..d5628e31e 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -404,22 +404,6 @@ contains end subroutine s_base_all - subroutine s_base_reinit(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_s_base_vect_type), intent(out) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) then - call x%sync() - x%v(:) = szero - call x%set_host() - call x%set_upd() - end if - - end subroutine s_base_reinit - !> Function base_mold: !! \memberof psb_s_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -438,6 +422,22 @@ contains end subroutine s_base_mold + subroutine s_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_s_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = szero + call x%set_host() + call x%set_upd() + end if + + end subroutine s_base_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -498,7 +498,9 @@ contains end if enddo call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() if (.not.allocated(x%v)) then info = psb_err_invalid_vect_state_ @@ -669,7 +671,7 @@ contains ncfs = x%get_ncfs() xvsz = psb_size(x%v) call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = szero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,ncfs @@ -681,7 +683,7 @@ contains end do case(psb_dupl_err_) do i=1,ncfs - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. szero) then call psb_errpush(psb_err_duplicate_coo,'vect-asb') return else @@ -752,7 +754,7 @@ contains & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') if (x%is_bld()) then call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = szero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,x%get_ncfs() @@ -764,7 +766,7 @@ contains end do case(psb_dupl_err_) do i=1,x%get_ncfs() - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. szero) then call psb_errpush(psb_err_duplicate_coo,'vect_asb') return else @@ -822,8 +824,6 @@ contains call x%set_null() end subroutine s_base_free - - ! !> Function base_free_buffer: !! \memberof psb_s_base_vect_type @@ -2619,6 +2619,18 @@ module psb_s_base_multivect_mod real(psb_spk_), allocatable :: v(:,:) real(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -2637,6 +2649,22 @@ module psb_s_base_multivect_mod procedure, pass(x) :: zero => s_base_mlv_zero procedure, pass(x) :: asb => s_base_mlv_asb procedure, pass(x) :: free => s_base_mlv_free + procedure, pass(x) :: reinit => s_base_mlv_reinit + procedure, pass(x) :: set_ncfs => s_base_mlv_set_ncfs + procedure, pass(x) :: get_ncfs => s_base_mlv_get_ncfs + procedure, pass(x) :: set_dupl => s_base_mlv_set_dupl + procedure, pass(x) :: get_dupl => s_base_mlv_get_dupl + procedure, pass(x) :: set_state => s_base_mlv_set_state + procedure, pass(x) :: set_null => s_base_mlv_set_null + procedure, pass(x) :: set_bld => s_base_mlv_set_bld + procedure, pass(x) :: set_upd => s_base_mlv_set_upd + procedure, pass(x) :: set_asb => s_base_mlv_set_asb + procedure, pass(x) :: get_state => s_base_mlv_get_state + procedure, pass(x) :: is_null => s_base_mlv_is_null + procedure, pass(x) :: is_bld => s_base_mlv_is_bld + procedure, pass(x) :: is_upd => s_base_mlv_is_upd + procedure, pass(x) :: is_asb => s_base_mlv_is_asb + procedure, pass(x) :: base_cpy => s_base_mlv_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -2750,7 +2778,8 @@ contains integer(psb_ipk_) :: info this%v = x - call this%asb(size(x,dim=1,kind=psb_ipk_),size(x,dim=2,kind=psb_ipk_),info) + call this%asb(size(x,dim=1,kind=psb_ipk_),& + & size(x,dim=2,kind=psb_ipk_),info) end function constructor @@ -2800,12 +2829,21 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine s_base_mlv_bld_n(x,m,n) + subroutine s_base_mlv_bld_n(x,m,n,scratch) use psb_realloc_mod integer(psb_ipk_), intent(in) :: m,n class(psb_s_base_multivect_type), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(m,n,x%v,info) call x%asb(m,n,info) @@ -2827,6 +2865,10 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(m,n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine s_base_mlv_all @@ -2848,6 +2890,22 @@ contains end subroutine s_base_mlv_mold + subroutine s_base_mlv_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_s_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:,:) = szero + call x%set_host() + call x%set_upd() + end if + + end subroutine s_base_mlv_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -2875,57 +2933,123 @@ contains !! \param info return code !! ! - subroutine s_base_mlv_ins(n,irl,val,dupl,x,info) + subroutine s_base_mlv_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_s_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_spk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, nc, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v,1) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + nc = size(x%v,2) + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_realloc(isz,nc,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows - ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i),:) = val(i,:) + x%v(k,:) = val(i,:) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) - case(psb_dupl_add_) + else if (x%is_upd()) then - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) - end if - enddo + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if + call x%set_host() if (info /= 0) then call psb_errpush(info,'base_mlv_vect_ins') return @@ -2945,6 +3069,7 @@ contains class(psb_s_base_multivect_type), intent(inout) :: x if (allocated(x%v)) x%v=szero + call x%set_host() end subroutine s_base_mlv_zero @@ -2963,19 +3088,73 @@ contains !! ! - subroutine s_base_mlv_asb(m,n, x, info) + subroutine s_base_mlv_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: m,n class(psb_s_base_multivect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch - if ((x%get_nrows() < m).or.(x%get_ncols() Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine s_base_mlv_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_s_base_multivect_type), intent(in) :: x + class(psb_s_base_multivect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine s_base_mlv_cpy + ! ! Size info. @@ -3139,7 +3434,7 @@ contains integer(psb_epk_) :: res ! Force 8-byte integers. - res = (1_psb_epk_ * psb_sizeof_ip) * x%get_nrows() * x%get_ncols() + res = (1_psb_epk_ * psb_sizeof_sp) * x%get_nrows() * x%get_ncols() end function s_base_mlv_sizeof diff --git a/base/modules/serial/psb_s_vect_mod.F90 b/base/modules/serial/psb_s_vect_mod.F90 index fab3fdb22..bb6a298fd 100644 --- a/base/modules/serial/psb_s_vect_mod.F90 +++ b/base/modules/serial/psb_s_vect_mod.F90 @@ -1966,11 +1966,11 @@ contains end subroutine s_mvect_free - subroutine s_mvect_ins(n,irl,val,x,info) + subroutine s_mvect_ins(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_s_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_spk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -1983,7 +1983,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine s_mvect_ins diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 3c7383e66..cc437d4d8 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -397,22 +397,6 @@ contains end subroutine z_base_all - subroutine z_base_reinit(x, info) - use psi_serial_mod - use psb_realloc_mod - implicit none - class(psb_z_base_vect_type), intent(out) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%v)) then - call x%sync() - x%v(:) = zzero - call x%set_host() - call x%set_upd() - end if - - end subroutine z_base_reinit - !> Function base_mold: !! \memberof psb_z_base_vect_type !! \brief Mold method: return a variable with the same dynamic type @@ -431,6 +415,22 @@ contains end subroutine z_base_mold + subroutine z_base_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_z_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:) = zzero + call x%set_host() + call x%set_upd() + end if + + end subroutine z_base_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -491,7 +491,9 @@ contains end if enddo call x%set_ncfs(k) + else if (x%is_upd()) then + dupl_ = x%get_dupl() if (.not.allocated(x%v)) then info = psb_err_invalid_vect_state_ @@ -662,7 +664,7 @@ contains ncfs = x%get_ncfs() xvsz = psb_size(x%v) call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = zzero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,ncfs @@ -674,7 +676,7 @@ contains end do case(psb_dupl_err_) do i=1,ncfs - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. zzero) then call psb_errpush(psb_err_duplicate_coo,'vect-asb') return else @@ -745,7 +747,7 @@ contains & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') if (x%is_bld()) then call psb_realloc(n,vv,info) - vv(:) = dzero + vv(:) = zzero select case(x%get_dupl()) case(psb_dupl_add_) do i=1,x%get_ncfs() @@ -757,7 +759,7 @@ contains end do case(psb_dupl_err_) do i=1,x%get_ncfs() - if (vv(x%iv(i)).ne.dzero) then + if (vv(x%iv(i)).ne. zzero) then call psb_errpush(psb_err_duplicate_coo,'vect_asb') return else @@ -815,8 +817,6 @@ contains call x%set_null() end subroutine z_base_free - - ! !> Function base_free_buffer: !! \memberof psb_z_base_vect_type @@ -2440,6 +2440,18 @@ module psb_z_base_multivect_mod complex(psb_dpk_), allocatable :: v(:,:) complex(psb_dpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -2458,6 +2470,22 @@ module psb_z_base_multivect_mod procedure, pass(x) :: zero => z_base_mlv_zero procedure, pass(x) :: asb => z_base_mlv_asb procedure, pass(x) :: free => z_base_mlv_free + procedure, pass(x) :: reinit => z_base_mlv_reinit + procedure, pass(x) :: set_ncfs => z_base_mlv_set_ncfs + procedure, pass(x) :: get_ncfs => z_base_mlv_get_ncfs + procedure, pass(x) :: set_dupl => z_base_mlv_set_dupl + procedure, pass(x) :: get_dupl => z_base_mlv_get_dupl + procedure, pass(x) :: set_state => z_base_mlv_set_state + procedure, pass(x) :: set_null => z_base_mlv_set_null + procedure, pass(x) :: set_bld => z_base_mlv_set_bld + procedure, pass(x) :: set_upd => z_base_mlv_set_upd + procedure, pass(x) :: set_asb => z_base_mlv_set_asb + procedure, pass(x) :: get_state => z_base_mlv_get_state + procedure, pass(x) :: is_null => z_base_mlv_is_null + procedure, pass(x) :: is_bld => z_base_mlv_is_bld + procedure, pass(x) :: is_upd => z_base_mlv_is_upd + procedure, pass(x) :: is_asb => z_base_mlv_is_asb + procedure, pass(x) :: base_cpy => z_base_mlv_cpy ! ! Sync: centerpiece of handling of external storage. ! Any derived class having extra storage upon sync @@ -2571,7 +2599,8 @@ contains integer(psb_ipk_) :: info this%v = x - call this%asb(size(x,dim=1,kind=psb_ipk_),size(x,dim=2,kind=psb_ipk_),info) + call this%asb(size(x,dim=1,kind=psb_ipk_),& + & size(x,dim=2,kind=psb_ipk_),info) end function constructor @@ -2621,12 +2650,21 @@ contains !! \brief Build method with size (uninitialized data) !! \param n size to be allocated. !! - subroutine z_base_mlv_bld_n(x,m,n) + subroutine z_base_mlv_bld_n(x,m,n,scratch) use psb_realloc_mod integer(psb_ipk_), intent(in) :: m,n class(psb_z_base_multivect_type), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if call psb_realloc(m,n,x%v,info) call x%asb(m,n,info) @@ -2648,6 +2686,10 @@ contains integer(psb_ipk_), intent(out) :: info call psb_realloc(m,n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if end subroutine z_base_mlv_all @@ -2669,6 +2711,22 @@ contains end subroutine z_base_mlv_mold + subroutine z_base_mlv_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_z_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) then + call x%sync() + x%v(:,:) = zzero + call x%set_host() + call x%set_upd() + end if + + end subroutine z_base_mlv_reinit + ! ! Insert a bunch of values at specified positions. ! @@ -2696,57 +2754,123 @@ contains !! \param info return code !! ! - subroutine z_base_mlv_ins(n,irl,val,dupl,x,info) + subroutine z_base_mlv_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_z_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_dpk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: i, isz + integer(psb_ipk_) :: i, isz, nc, dupl_, ncfs_, k info = 0 if (psb_errstatus_fatal()) return - if (.not.allocated(x%v)) then - info = psb_err_invalid_vect_state_ - else if (n > min(size(irl),size(val))) then - info = psb_err_invalid_input_ - - else - isz = size(x%v,1) - select case(dupl) - case(psb_dupl_ovwrt_) + if (try_newins) then + if (x%is_bld()) then + nc = size(x%v,2) + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_realloc(isz,nc,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ do i = 1, n !loop over all val's rows - ! row actual block row - if ((1 <= irl(i)).and.(irl(i) <= isz)) then + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 ! this row belongs to me ! copy i-th row of block val in x - x%v(irl(i),:) = val(i,:) + x%v(k,:) = val(i,:) + x%iv(k) = irl(i) end if enddo + call x%set_ncfs(k) - case(psb_dupl_add_) + else if (x%is_upd()) then - do i = 1, n - !loop over all val's rows - if ((1 <= irl(i)).and.(irl(i) <= isz)) then - ! this row belongs to me - ! copy i-th row of block val in x - x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) - end if - enddo + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) - case default - info = 321 - ! !$ call psb_errpush(info,name) - ! !$ goto 9999 - end select + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if end if + call x%set_host() if (info /= 0) then call psb_errpush(info,'base_mlv_vect_ins') return @@ -2766,6 +2890,7 @@ contains class(psb_z_base_multivect_type), intent(inout) :: x if (allocated(x%v)) x%v=zzero + call x%set_host() end subroutine z_base_mlv_zero @@ -2784,19 +2909,73 @@ contains !! ! - subroutine z_base_mlv_asb(m,n, x, info) + subroutine z_base_mlv_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none integer(psb_ipk_), intent(in) :: m,n class(psb_z_base_multivect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch - if ((x%get_nrows() < m).or.(x%get_ncols() Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine z_base_mlv_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_z_base_multivect_type), intent(in) :: x + class(psb_z_base_multivect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine z_base_mlv_cpy + ! ! Size info. @@ -2960,7 +3255,7 @@ contains integer(psb_epk_) :: res ! Force 8-byte integers. - res = (1_psb_epk_ * psb_sizeof_ip) * x%get_nrows() * x%get_ncols() + res = (1_psb_epk_ * (2*psb_sizeof_dp)) * x%get_nrows() * x%get_ncols() end function z_base_mlv_sizeof diff --git a/base/modules/serial/psb_z_vect_mod.F90 b/base/modules/serial/psb_z_vect_mod.F90 index 9d1d49d59..fbed40cab 100644 --- a/base/modules/serial/psb_z_vect_mod.F90 +++ b/base/modules/serial/psb_z_vect_mod.F90 @@ -1887,11 +1887,11 @@ contains end subroutine z_mvect_free - subroutine z_mvect_ins(n,irl,val,x,info) + subroutine z_mvect_ins(n,irl,val,x,maxr,info) use psi_serial_mod implicit none class(psb_z_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: n,maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_dpk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -1904,7 +1904,7 @@ contains return end if dupl = x%get_dupl() - call x%v%ins(n,irl,val,dupl,info) + call x%v%ins(n,irl,val,dupl,maxr,info) end subroutine z_mvect_ins diff --git a/base/modules/tools/psb_c_tools_mod.F90 b/base/modules/tools/psb_c_tools_mod.F90 index cb39593f3..813ef370a 100644 --- a/base/modules/tools/psb_c_tools_mod.F90 +++ b/base/modules/tools/psb_c_tools_mod.F90 @@ -80,7 +80,7 @@ Module psb_c_tools_mod logical, intent(in), optional :: scratch integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_casb_vect - subroutine psb_casb_vect_r2(x, desc_a, info,mold, scratch) + subroutine psb_casb_vect_r2(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -88,6 +88,7 @@ Module psb_c_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_casb_vect_r2 subroutine psb_casb_multivect(x, desc_a, info,mold, scratch, n) import diff --git a/base/modules/tools/psb_d_tools_mod.F90 b/base/modules/tools/psb_d_tools_mod.F90 index da3051640..6ea554cd1 100644 --- a/base/modules/tools/psb_d_tools_mod.F90 +++ b/base/modules/tools/psb_d_tools_mod.F90 @@ -80,7 +80,7 @@ Module psb_d_tools_mod logical, intent(in), optional :: scratch integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_dasb_vect - subroutine psb_dasb_vect_r2(x, desc_a, info,mold, scratch) + subroutine psb_dasb_vect_r2(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -88,6 +88,7 @@ Module psb_d_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_d_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_dasb_vect_r2 subroutine psb_dasb_multivect(x, desc_a, info,mold, scratch, n) import diff --git a/base/modules/tools/psb_i_tools_mod.F90 b/base/modules/tools/psb_i_tools_mod.F90 index f0ccfb72c..767dc8e56 100644 --- a/base/modules/tools/psb_i_tools_mod.F90 +++ b/base/modules/tools/psb_i_tools_mod.F90 @@ -79,7 +79,7 @@ Module psb_i_tools_mod logical, intent(in), optional :: scratch integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_iasb_vect - subroutine psb_iasb_vect_r2(x, desc_a, info,mold, scratch) + subroutine psb_iasb_vect_r2(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -87,6 +87,7 @@ Module psb_i_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_iasb_vect_r2 subroutine psb_iasb_multivect(x, desc_a, info,mold, scratch, n) import diff --git a/base/modules/tools/psb_l_tools_mod.F90 b/base/modules/tools/psb_l_tools_mod.F90 index 56cdddcb1..92fe875bd 100644 --- a/base/modules/tools/psb_l_tools_mod.F90 +++ b/base/modules/tools/psb_l_tools_mod.F90 @@ -79,7 +79,7 @@ Module psb_l_tools_mod logical, intent(in), optional :: scratch integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_lasb_vect - subroutine psb_lasb_vect_r2(x, desc_a, info,mold, scratch) + subroutine psb_lasb_vect_r2(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -87,6 +87,7 @@ Module psb_l_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_lasb_vect_r2 subroutine psb_lasb_multivect(x, desc_a, info,mold, scratch, n) import diff --git a/base/modules/tools/psb_s_tools_mod.F90 b/base/modules/tools/psb_s_tools_mod.F90 index f6e97208a..d4fa78924 100644 --- a/base/modules/tools/psb_s_tools_mod.F90 +++ b/base/modules/tools/psb_s_tools_mod.F90 @@ -80,7 +80,7 @@ Module psb_s_tools_mod logical, intent(in), optional :: scratch integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_sasb_vect - subroutine psb_sasb_vect_r2(x, desc_a, info,mold, scratch) + subroutine psb_sasb_vect_r2(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -88,6 +88,7 @@ Module psb_s_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_sasb_vect_r2 subroutine psb_sasb_multivect(x, desc_a, info,mold, scratch, n) import diff --git a/base/modules/tools/psb_z_tools_mod.F90 b/base/modules/tools/psb_z_tools_mod.F90 index f0e42c75a..2c105b2bb 100644 --- a/base/modules/tools/psb_z_tools_mod.F90 +++ b/base/modules/tools/psb_z_tools_mod.F90 @@ -80,7 +80,7 @@ Module psb_z_tools_mod logical, intent(in), optional :: scratch integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_zasb_vect - subroutine psb_zasb_vect_r2(x, desc_a, info,mold, scratch) + subroutine psb_zasb_vect_r2(x, desc_a, info,mold, scratch,dupl) import implicit none type(psb_desc_type), intent(in) :: desc_a @@ -88,6 +88,7 @@ Module psb_z_tools_mod integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl end subroutine psb_zasb_vect_r2 subroutine psb_zasb_multivect(x, desc_a, info,mold, scratch, n) import diff --git a/base/tools/psb_callc.f90 b/base/tools/psb_callc.f90 index 85ccbf6a9..39925b40f 100644 --- a/base/tools/psb_callc.f90 +++ b/base/tools/psb_callc.f90 @@ -207,48 +207,11 @@ subroutine psb_calloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) goto 9999 endif endif - ! As this is a rank-1 array, optional parameter N is actually ignored. - - !....allocate x ..... - if (desc_a%is_asb().or.desc_a%is_upd()) then - nr = max(1,desc_a%get_local_cols()) - else if (desc_a%is_bld()) then - nr = max(1,desc_a%get_local_rows()) - else - info = psb_err_internal_error_ - call psb_errpush(info,name,a_err='Invalid desc_a') - goto 9999 - endif - allocate(x(lb_:lb_+n_-1), stat=info) - if (info == 0) then - do i=lb_, lb_+n_-1 - allocate(psb_c_base_vect_type :: x(i)%v, stat=info) - if (info == 0) call x(i)%all(nr,info) - if (info == 0) call x(i)%zero() - if (info /= 0) exit - end do - end if - - if (present(bldmode)) then - bldmode_ = bldmode - else - bldmode_ = psb_matbld_noremote_ - end if - if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - do i=lb_, lb_+n_-1 - call x(i)%set_dupl(dupl_) - call x(i)%set_remote_build(bldmode_) - if (x(i)%is_remote_build()) then - nrmt_ = max(100,(desc_a%get_local_cols()-desc_a%get_local_rows())) - allocate(x(i)%rmtv(nrmt_)) - end if + call psb_geall(x(i),desc_a,info,dupl, bldmode) end do + if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') @@ -261,7 +224,6 @@ subroutine psb_calloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psb_calloc_vect_r2 diff --git a/base/tools/psb_casb.f90 b/base/tools/psb_casb.f90 index ad6e69d38..c8d2834c6 100644 --- a/base/tools/psb_casb.f90 +++ b/base/tools/psb_casb.f90 @@ -188,7 +188,7 @@ subroutine psb_casb_vect(x, desc_a, info, mold, scratch, dupl) end subroutine psb_casb_vect -subroutine psb_casb_vect_r2(x, desc_a, info, mold, scratch) +subroutine psb_casb_vect_r2(x, desc_a, info, mold, scratch,dupl) use psb_base_mod, psb_protect_name => psb_casb_vect_r2 implicit none @@ -197,12 +197,12 @@ subroutine psb_casb_vect_r2(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, i, n - integer(psb_ipk_) :: i1sz,nrow,ncol, err_act, dupl_ - logical :: scratch_ + integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name,ch_err @@ -217,8 +217,6 @@ subroutine psb_casb_vect_r2(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. - if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) ! ....verify blacs grid correctness.. if (np == -1) then @@ -230,35 +228,11 @@ subroutine psb_casb_vect_r2(x, desc_a, info, mold, scratch) call psb_errpush(info,name) goto 9999 end if - - nrow = desc_a%get_local_rows() - ncol = desc_a%get_local_cols() n = size(x) - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol + do i=1, n + call psb_geasb(x(i),desc_a,info, mold, scratch, dupl) + end do - if (scratch_) then - do i=1,n - call x(i)%free(info) - call x(i)%bld(ncol,mold=mold) - end do - - else - do i=1, n - dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info,scratch=scratch) - if (info /= 0) exit - ! ..update halo elements.. - call psb_halo(x(i),desc_a,info) - if (info /= 0) exit - call x(i)%cnv(mold) - end do - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 - end if - end if if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': end' diff --git a/base/tools/psb_cins.f90 b/base/tools/psb_cins.f90 index ee0391a19..1c14b7b27 100644 --- a/base/tools/psb_cins.f90 +++ b/base/tools/psb_cins.f90 @@ -475,7 +475,7 @@ subroutine psb_cins_multivect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 diff --git a/base/tools/psb_dallc.f90 b/base/tools/psb_dallc.f90 index a8ef4672d..942ccb74d 100644 --- a/base/tools/psb_dallc.f90 +++ b/base/tools/psb_dallc.f90 @@ -207,48 +207,11 @@ subroutine psb_dalloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) goto 9999 endif endif - ! As this is a rank-1 array, optional parameter N is actually ignored. - - !....allocate x ..... - if (desc_a%is_asb().or.desc_a%is_upd()) then - nr = max(1,desc_a%get_local_cols()) - else if (desc_a%is_bld()) then - nr = max(1,desc_a%get_local_rows()) - else - info = psb_err_internal_error_ - call psb_errpush(info,name,a_err='Invalid desc_a') - goto 9999 - endif - allocate(x(lb_:lb_+n_-1), stat=info) - if (info == 0) then - do i=lb_, lb_+n_-1 - allocate(psb_d_base_vect_type :: x(i)%v, stat=info) - if (info == 0) call x(i)%all(nr,info) - if (info == 0) call x(i)%zero() - if (info /= 0) exit - end do - end if - - if (present(bldmode)) then - bldmode_ = bldmode - else - bldmode_ = psb_matbld_noremote_ - end if - if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - do i=lb_, lb_+n_-1 - call x(i)%set_dupl(dupl_) - call x(i)%set_remote_build(bldmode_) - if (x(i)%is_remote_build()) then - nrmt_ = max(100,(desc_a%get_local_cols()-desc_a%get_local_rows())) - allocate(x(i)%rmtv(nrmt_)) - end if + call psb_geall(x(i),desc_a,info,dupl, bldmode) end do + if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') @@ -261,7 +224,6 @@ subroutine psb_dalloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psb_dalloc_vect_r2 diff --git a/base/tools/psb_dasb.f90 b/base/tools/psb_dasb.f90 index eb15dc1ad..74970cc76 100644 --- a/base/tools/psb_dasb.f90 +++ b/base/tools/psb_dasb.f90 @@ -188,7 +188,7 @@ subroutine psb_dasb_vect(x, desc_a, info, mold, scratch, dupl) end subroutine psb_dasb_vect -subroutine psb_dasb_vect_r2(x, desc_a, info, mold, scratch) +subroutine psb_dasb_vect_r2(x, desc_a, info, mold, scratch,dupl) use psb_base_mod, psb_protect_name => psb_dasb_vect_r2 implicit none @@ -197,12 +197,12 @@ subroutine psb_dasb_vect_r2(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_d_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, i, n - integer(psb_ipk_) :: i1sz,nrow,ncol, err_act, dupl_ - logical :: scratch_ + integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name,ch_err @@ -217,8 +217,6 @@ subroutine psb_dasb_vect_r2(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. - if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) ! ....verify blacs grid correctness.. if (np == -1) then @@ -230,35 +228,11 @@ subroutine psb_dasb_vect_r2(x, desc_a, info, mold, scratch) call psb_errpush(info,name) goto 9999 end if - - nrow = desc_a%get_local_rows() - ncol = desc_a%get_local_cols() n = size(x) - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol + do i=1, n + call psb_geasb(x(i),desc_a,info, mold, scratch, dupl) + end do - if (scratch_) then - do i=1,n - call x(i)%free(info) - call x(i)%bld(ncol,mold=mold) - end do - - else - do i=1, n - dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info,scratch=scratch) - if (info /= 0) exit - ! ..update halo elements.. - call psb_halo(x(i),desc_a,info) - if (info /= 0) exit - call x(i)%cnv(mold) - end do - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 - end if - end if if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': end' diff --git a/base/tools/psb_dins.f90 b/base/tools/psb_dins.f90 index daac97676..eca13da7c 100644 --- a/base/tools/psb_dins.f90 +++ b/base/tools/psb_dins.f90 @@ -475,7 +475,7 @@ subroutine psb_dins_multivect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 diff --git a/base/tools/psb_iallc.f90 b/base/tools/psb_iallc.f90 index 95558fe21..75b560e64 100644 --- a/base/tools/psb_iallc.f90 +++ b/base/tools/psb_iallc.f90 @@ -207,48 +207,11 @@ subroutine psb_ialloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) goto 9999 endif endif - ! As this is a rank-1 array, optional parameter N is actually ignored. - - !....allocate x ..... - if (desc_a%is_asb().or.desc_a%is_upd()) then - nr = max(1,desc_a%get_local_cols()) - else if (desc_a%is_bld()) then - nr = max(1,desc_a%get_local_rows()) - else - info = psb_err_internal_error_ - call psb_errpush(info,name,a_err='Invalid desc_a') - goto 9999 - endif - allocate(x(lb_:lb_+n_-1), stat=info) - if (info == 0) then - do i=lb_, lb_+n_-1 - allocate(psb_i_base_vect_type :: x(i)%v, stat=info) - if (info == 0) call x(i)%all(nr,info) - if (info == 0) call x(i)%zero() - if (info /= 0) exit - end do - end if - - if (present(bldmode)) then - bldmode_ = bldmode - else - bldmode_ = psb_matbld_noremote_ - end if - if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - do i=lb_, lb_+n_-1 - call x(i)%set_dupl(dupl_) - call x(i)%set_remote_build(bldmode_) - if (x(i)%is_remote_build()) then - nrmt_ = max(100,(desc_a%get_local_cols()-desc_a%get_local_rows())) - allocate(x(i)%rmtv(nrmt_)) - end if + call psb_geall(x(i),desc_a,info,dupl, bldmode) end do + if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') @@ -261,7 +224,6 @@ subroutine psb_ialloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psb_ialloc_vect_r2 diff --git a/base/tools/psb_iasb.f90 b/base/tools/psb_iasb.f90 index ec8536b9c..474b8934c 100644 --- a/base/tools/psb_iasb.f90 +++ b/base/tools/psb_iasb.f90 @@ -188,7 +188,7 @@ subroutine psb_iasb_vect(x, desc_a, info, mold, scratch, dupl) end subroutine psb_iasb_vect -subroutine psb_iasb_vect_r2(x, desc_a, info, mold, scratch) +subroutine psb_iasb_vect_r2(x, desc_a, info, mold, scratch,dupl) use psb_base_mod, psb_protect_name => psb_iasb_vect_r2 implicit none @@ -197,12 +197,12 @@ subroutine psb_iasb_vect_r2(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, i, n - integer(psb_ipk_) :: i1sz,nrow,ncol, err_act, dupl_ - logical :: scratch_ + integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name,ch_err @@ -217,8 +217,6 @@ subroutine psb_iasb_vect_r2(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. - if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) ! ....verify blacs grid correctness.. if (np == -1) then @@ -230,35 +228,11 @@ subroutine psb_iasb_vect_r2(x, desc_a, info, mold, scratch) call psb_errpush(info,name) goto 9999 end if - - nrow = desc_a%get_local_rows() - ncol = desc_a%get_local_cols() n = size(x) - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol + do i=1, n + call psb_geasb(x(i),desc_a,info, mold, scratch, dupl) + end do - if (scratch_) then - do i=1,n - call x(i)%free(info) - call x(i)%bld(ncol,mold=mold) - end do - - else - do i=1, n - dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info,scratch=scratch) - if (info /= 0) exit - ! ..update halo elements.. - call psb_halo(x(i),desc_a,info) - if (info /= 0) exit - call x(i)%cnv(mold) - end do - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 - end if - end if if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': end' diff --git a/base/tools/psb_iins.f90 b/base/tools/psb_iins.f90 index 598af33ff..bf02deb19 100644 --- a/base/tools/psb_iins.f90 +++ b/base/tools/psb_iins.f90 @@ -475,7 +475,7 @@ subroutine psb_iins_multivect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 diff --git a/base/tools/psb_lallc.f90 b/base/tools/psb_lallc.f90 index 8bb369c36..7d47b7cb3 100644 --- a/base/tools/psb_lallc.f90 +++ b/base/tools/psb_lallc.f90 @@ -207,48 +207,11 @@ subroutine psb_lalloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) goto 9999 endif endif - ! As this is a rank-1 array, optional parameter N is actually ignored. - - !....allocate x ..... - if (desc_a%is_asb().or.desc_a%is_upd()) then - nr = max(1,desc_a%get_local_cols()) - else if (desc_a%is_bld()) then - nr = max(1,desc_a%get_local_rows()) - else - info = psb_err_internal_error_ - call psb_errpush(info,name,a_err='Invalid desc_a') - goto 9999 - endif - allocate(x(lb_:lb_+n_-1), stat=info) - if (info == 0) then - do i=lb_, lb_+n_-1 - allocate(psb_l_base_vect_type :: x(i)%v, stat=info) - if (info == 0) call x(i)%all(nr,info) - if (info == 0) call x(i)%zero() - if (info /= 0) exit - end do - end if - - if (present(bldmode)) then - bldmode_ = bldmode - else - bldmode_ = psb_matbld_noremote_ - end if - if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - do i=lb_, lb_+n_-1 - call x(i)%set_dupl(dupl_) - call x(i)%set_remote_build(bldmode_) - if (x(i)%is_remote_build()) then - nrmt_ = max(100,(desc_a%get_local_cols()-desc_a%get_local_rows())) - allocate(x(i)%rmtv(nrmt_)) - end if + call psb_geall(x(i),desc_a,info,dupl, bldmode) end do + if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') @@ -261,7 +224,6 @@ subroutine psb_lalloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psb_lalloc_vect_r2 diff --git a/base/tools/psb_lasb.f90 b/base/tools/psb_lasb.f90 index 61e3de946..3f0ba4670 100644 --- a/base/tools/psb_lasb.f90 +++ b/base/tools/psb_lasb.f90 @@ -188,7 +188,7 @@ subroutine psb_lasb_vect(x, desc_a, info, mold, scratch, dupl) end subroutine psb_lasb_vect -subroutine psb_lasb_vect_r2(x, desc_a, info, mold, scratch) +subroutine psb_lasb_vect_r2(x, desc_a, info, mold, scratch,dupl) use psb_base_mod, psb_protect_name => psb_lasb_vect_r2 implicit none @@ -197,12 +197,12 @@ subroutine psb_lasb_vect_r2(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, i, n - integer(psb_ipk_) :: i1sz,nrow,ncol, err_act, dupl_ - logical :: scratch_ + integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name,ch_err @@ -217,8 +217,6 @@ subroutine psb_lasb_vect_r2(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. - if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) ! ....verify blacs grid correctness.. if (np == -1) then @@ -230,35 +228,11 @@ subroutine psb_lasb_vect_r2(x, desc_a, info, mold, scratch) call psb_errpush(info,name) goto 9999 end if - - nrow = desc_a%get_local_rows() - ncol = desc_a%get_local_cols() n = size(x) - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol + do i=1, n + call psb_geasb(x(i),desc_a,info, mold, scratch, dupl) + end do - if (scratch_) then - do i=1,n - call x(i)%free(info) - call x(i)%bld(ncol,mold=mold) - end do - - else - do i=1, n - dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info,scratch=scratch) - if (info /= 0) exit - ! ..update halo elements.. - call psb_halo(x(i),desc_a,info) - if (info /= 0) exit - call x(i)%cnv(mold) - end do - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 - end if - end if if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': end' diff --git a/base/tools/psb_lins.f90 b/base/tools/psb_lins.f90 index dc41d022c..a3548571e 100644 --- a/base/tools/psb_lins.f90 +++ b/base/tools/psb_lins.f90 @@ -475,7 +475,7 @@ subroutine psb_lins_multivect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 diff --git a/base/tools/psb_sallc.f90 b/base/tools/psb_sallc.f90 index 7e6649ddd..00ab38126 100644 --- a/base/tools/psb_sallc.f90 +++ b/base/tools/psb_sallc.f90 @@ -207,48 +207,11 @@ subroutine psb_salloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) goto 9999 endif endif - ! As this is a rank-1 array, optional parameter N is actually ignored. - - !....allocate x ..... - if (desc_a%is_asb().or.desc_a%is_upd()) then - nr = max(1,desc_a%get_local_cols()) - else if (desc_a%is_bld()) then - nr = max(1,desc_a%get_local_rows()) - else - info = psb_err_internal_error_ - call psb_errpush(info,name,a_err='Invalid desc_a') - goto 9999 - endif - allocate(x(lb_:lb_+n_-1), stat=info) - if (info == 0) then - do i=lb_, lb_+n_-1 - allocate(psb_s_base_vect_type :: x(i)%v, stat=info) - if (info == 0) call x(i)%all(nr,info) - if (info == 0) call x(i)%zero() - if (info /= 0) exit - end do - end if - - if (present(bldmode)) then - bldmode_ = bldmode - else - bldmode_ = psb_matbld_noremote_ - end if - if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - do i=lb_, lb_+n_-1 - call x(i)%set_dupl(dupl_) - call x(i)%set_remote_build(bldmode_) - if (x(i)%is_remote_build()) then - nrmt_ = max(100,(desc_a%get_local_cols()-desc_a%get_local_rows())) - allocate(x(i)%rmtv(nrmt_)) - end if + call psb_geall(x(i),desc_a,info,dupl, bldmode) end do + if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') @@ -261,7 +224,6 @@ subroutine psb_salloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psb_salloc_vect_r2 diff --git a/base/tools/psb_sasb.f90 b/base/tools/psb_sasb.f90 index 0fe6f5451..6d667dc96 100644 --- a/base/tools/psb_sasb.f90 +++ b/base/tools/psb_sasb.f90 @@ -188,7 +188,7 @@ subroutine psb_sasb_vect(x, desc_a, info, mold, scratch, dupl) end subroutine psb_sasb_vect -subroutine psb_sasb_vect_r2(x, desc_a, info, mold, scratch) +subroutine psb_sasb_vect_r2(x, desc_a, info, mold, scratch,dupl) use psb_base_mod, psb_protect_name => psb_sasb_vect_r2 implicit none @@ -197,12 +197,12 @@ subroutine psb_sasb_vect_r2(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, i, n - integer(psb_ipk_) :: i1sz,nrow,ncol, err_act, dupl_ - logical :: scratch_ + integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name,ch_err @@ -217,8 +217,6 @@ subroutine psb_sasb_vect_r2(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. - if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) ! ....verify blacs grid correctness.. if (np == -1) then @@ -230,35 +228,11 @@ subroutine psb_sasb_vect_r2(x, desc_a, info, mold, scratch) call psb_errpush(info,name) goto 9999 end if - - nrow = desc_a%get_local_rows() - ncol = desc_a%get_local_cols() n = size(x) - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol + do i=1, n + call psb_geasb(x(i),desc_a,info, mold, scratch, dupl) + end do - if (scratch_) then - do i=1,n - call x(i)%free(info) - call x(i)%bld(ncol,mold=mold) - end do - - else - do i=1, n - dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info,scratch=scratch) - if (info /= 0) exit - ! ..update halo elements.. - call psb_halo(x(i),desc_a,info) - if (info /= 0) exit - call x(i)%cnv(mold) - end do - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 - end if - end if if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': end' diff --git a/base/tools/psb_sins.f90 b/base/tools/psb_sins.f90 index 25c7248a6..ec9988f8b 100644 --- a/base/tools/psb_sins.f90 +++ b/base/tools/psb_sins.f90 @@ -475,7 +475,7 @@ subroutine psb_sins_multivect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 diff --git a/base/tools/psb_zallc.f90 b/base/tools/psb_zallc.f90 index 96d567fce..de6e91b08 100644 --- a/base/tools/psb_zallc.f90 +++ b/base/tools/psb_zallc.f90 @@ -207,48 +207,11 @@ subroutine psb_zalloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) goto 9999 endif endif - ! As this is a rank-1 array, optional parameter N is actually ignored. - - !....allocate x ..... - if (desc_a%is_asb().or.desc_a%is_upd()) then - nr = max(1,desc_a%get_local_cols()) - else if (desc_a%is_bld()) then - nr = max(1,desc_a%get_local_rows()) - else - info = psb_err_internal_error_ - call psb_errpush(info,name,a_err='Invalid desc_a') - goto 9999 - endif - allocate(x(lb_:lb_+n_-1), stat=info) - if (info == 0) then - do i=lb_, lb_+n_-1 - allocate(psb_z_base_vect_type :: x(i)%v, stat=info) - if (info == 0) call x(i)%all(nr,info) - if (info == 0) call x(i)%zero() - if (info /= 0) exit - end do - end if - - if (present(bldmode)) then - bldmode_ = bldmode - else - bldmode_ = psb_matbld_noremote_ - end if - if (present(dupl)) then - dupl_ = dupl - else - dupl_ = psb_dupl_def_ - end if - do i=lb_, lb_+n_-1 - call x(i)%set_dupl(dupl_) - call x(i)%set_remote_build(bldmode_) - if (x(i)%is_remote_build()) then - nrmt_ = max(100,(desc_a%get_local_cols()-desc_a%get_local_rows())) - allocate(x(i)%rmtv(nrmt_)) - end if + call psb_geall(x(i),desc_a,info,dupl, bldmode) end do + if (psb_errstatus_fatal()) then info=psb_err_alloc_request_ call psb_errpush(info,name,i_err=(/nr/),a_err='real(psb_spk_)') @@ -261,7 +224,6 @@ subroutine psb_zalloc_vect_r2(x, desc_a,info,n,lb, dupl, bldmode) 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psb_zalloc_vect_r2 diff --git a/base/tools/psb_zasb.f90 b/base/tools/psb_zasb.f90 index e21eaf7fe..b8d797ecc 100644 --- a/base/tools/psb_zasb.f90 +++ b/base/tools/psb_zasb.f90 @@ -188,7 +188,7 @@ subroutine psb_zasb_vect(x, desc_a, info, mold, scratch, dupl) end subroutine psb_zasb_vect -subroutine psb_zasb_vect_r2(x, desc_a, info, mold, scratch) +subroutine psb_zasb_vect_r2(x, desc_a, info, mold, scratch,dupl) use psb_base_mod, psb_protect_name => psb_zasb_vect_r2 implicit none @@ -197,12 +197,12 @@ subroutine psb_zasb_vect_r2(x, desc_a, info, mold, scratch) integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type), intent(in), optional :: mold logical, intent(in), optional :: scratch + integer(psb_ipk_), optional, intent(in) :: dupl ! local variables type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me, i, n - integer(psb_ipk_) :: i1sz,nrow,ncol, err_act, dupl_ - logical :: scratch_ + integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name,ch_err @@ -217,8 +217,6 @@ subroutine psb_zasb_vect_r2(x, desc_a, info, mold, scratch) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - scratch_ = .false. - if (present(scratch)) scratch_ = scratch call psb_info(ctxt, me, np) ! ....verify blacs grid correctness.. if (np == -1) then @@ -230,35 +228,11 @@ subroutine psb_zasb_vect_r2(x, desc_a, info, mold, scratch) call psb_errpush(info,name) goto 9999 end if - - nrow = desc_a%get_local_rows() - ncol = desc_a%get_local_cols() n = size(x) - if (debug_level >= psb_debug_ext_) & - & write(debug_unit,*) me,' ',trim(name),': sizes: ',nrow,ncol + do i=1, n + call psb_geasb(x(i),desc_a,info, mold, scratch, dupl) + end do - if (scratch_) then - do i=1,n - call x(i)%free(info) - call x(i)%bld(ncol,mold=mold) - end do - - else - do i=1, n - dupl_ = x(i)%get_dupl() - call x(i)%asb(ncol,info,scratch=scratch) - if (info /= 0) exit - ! ..update halo elements.. - call psb_halo(x(i),desc_a,info) - if (info /= 0) exit - call x(i)%cnv(mold) - end do - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='psb_halo') - goto 9999 - end if - end if if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),': end' diff --git a/base/tools/psb_zins.f90 b/base/tools/psb_zins.f90 index 1c16eb961..8e8b2afd0 100644 --- a/base/tools/psb_zins.f90 +++ b/base/tools/psb_zins.f90 @@ -475,7 +475,7 @@ subroutine psb_zins_multivect(m, irw, val, x, desc_a, info, local) else call desc_a%indxmap%g2l(irw(1:m),irl(1:m),info,owned=.true.) end if - call x%ins(m,irl,val,info) + call x%ins(m,irl,val,loc_rows,info) if (info /= 0) then call psb_errpush(info,name) goto 9999 From ac5512974ba6d8dac5c9a719a275c864ae9c46ae Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 13 Jan 2026 16:57:06 +0100 Subject: [PATCH 087/175] Fix vector allocation etc. --- base/modules/serial/psb_c_base_vect_mod.F90 | 10 +--------- base/modules/serial/psb_d_base_vect_mod.F90 | 10 +--------- base/modules/serial/psb_i_base_vect_mod.F90 | 10 +--------- base/modules/serial/psb_l_base_vect_mod.F90 | 10 +--------- base/modules/serial/psb_s_base_vect_mod.F90 | 10 +--------- base/modules/serial/psb_z_base_vect_mod.F90 | 10 +--------- base/tools/psb_callc.f90 | 4 +++- base/tools/psb_dallc.f90 | 4 +++- base/tools/psb_iallc.f90 | 4 +++- base/tools/psb_lallc.f90 | 4 +++- base/tools/psb_sallc.f90 | 4 +++- base/tools/psb_zallc.f90 | 4 +++- cuda/psb_c_cuda_vect_mod.F90 | 16 ++++++++++------ cuda/psb_d_cuda_vect_mod.F90 | 16 ++++++++++------ cuda/psb_i_cuda_vect_mod.F90 | 16 ++++++++++------ cuda/psb_s_cuda_vect_mod.F90 | 16 ++++++++++------ cuda/psb_z_cuda_vect_mod.F90 | 16 ++++++++++------ 17 files changed, 74 insertions(+), 90 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index 20ee1ef06..d0ec0a5d2 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -2657,16 +2657,8 @@ contains integer(psb_ipk_) :: info logical, intent(in), optional :: scratch - logical :: scratch_ - - - if (present(scratch)) then - scratch_ = scratch - else - scratch_ = .false. - end if call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info) + call x%asb(m,n,info,scratch) end subroutine c_base_mlv_bld_n diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 907d10347..6845e1505 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -2836,16 +2836,8 @@ contains integer(psb_ipk_) :: info logical, intent(in), optional :: scratch - logical :: scratch_ - - - if (present(scratch)) then - scratch_ = scratch - else - scratch_ = .false. - end if call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info) + call x%asb(m,n,info,scratch) end subroutine d_base_mlv_bld_n diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 3a096eb34..1c7c00c37 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -1582,16 +1582,8 @@ contains integer(psb_ipk_) :: info logical, intent(in), optional :: scratch - logical :: scratch_ - - - if (present(scratch)) then - scratch_ = scratch - else - scratch_ = .false. - end if call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info) + call x%asb(m,n,info,scratch) end subroutine i_base_mlv_bld_n diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index 4030b0a73..7e8e0528c 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -1583,16 +1583,8 @@ contains integer(psb_ipk_) :: info logical, intent(in), optional :: scratch - logical :: scratch_ - - - if (present(scratch)) then - scratch_ = scratch - else - scratch_ = .false. - end if call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info) + call x%asb(m,n,info,scratch) end subroutine l_base_mlv_bld_n diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index d5628e31e..f425aedb2 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -2836,16 +2836,8 @@ contains integer(psb_ipk_) :: info logical, intent(in), optional :: scratch - logical :: scratch_ - - - if (present(scratch)) then - scratch_ = scratch - else - scratch_ = .false. - end if call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info) + call x%asb(m,n,info,scratch) end subroutine s_base_mlv_bld_n diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index cc437d4d8..eb92a9384 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -2657,16 +2657,8 @@ contains integer(psb_ipk_) :: info logical, intent(in), optional :: scratch - logical :: scratch_ - - - if (present(scratch)) then - scratch_ = scratch - else - scratch_ = .false. - end if call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info) + call x%asb(m,n,info,scratch) end subroutine z_base_mlv_bld_n diff --git a/base/tools/psb_callc.f90 b/base/tools/psb_callc.f90 index 39925b40f..d42118720 100644 --- a/base/tools/psb_callc.f90 +++ b/base/tools/psb_callc.f90 @@ -53,7 +53,7 @@ subroutine psb_calloc_vect(x, desc_a,info, dupl, bldmode) !locals integer(psb_ipk_) :: np,me,nr,i,err_act - integer(psb_ipk_) :: dupl_, bldmode_, nrmt_ + integer(psb_ipk_) :: bldmode_, nrmt_ type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name @@ -111,6 +111,8 @@ subroutine psb_calloc_vect(x, desc_a,info, dupl, bldmode) call x%set_bld() if (present(dupl)) then call x%set_dupl(dupl) + else + call x%set_dupl(psb_dupl_def_) end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) diff --git a/base/tools/psb_dallc.f90 b/base/tools/psb_dallc.f90 index 942ccb74d..8a02d3ad5 100644 --- a/base/tools/psb_dallc.f90 +++ b/base/tools/psb_dallc.f90 @@ -53,7 +53,7 @@ subroutine psb_dalloc_vect(x, desc_a,info, dupl, bldmode) !locals integer(psb_ipk_) :: np,me,nr,i,err_act - integer(psb_ipk_) :: dupl_, bldmode_, nrmt_ + integer(psb_ipk_) :: bldmode_, nrmt_ type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name @@ -111,6 +111,8 @@ subroutine psb_dalloc_vect(x, desc_a,info, dupl, bldmode) call x%set_bld() if (present(dupl)) then call x%set_dupl(dupl) + else + call x%set_dupl(psb_dupl_def_) end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) diff --git a/base/tools/psb_iallc.f90 b/base/tools/psb_iallc.f90 index 75b560e64..68b94e59e 100644 --- a/base/tools/psb_iallc.f90 +++ b/base/tools/psb_iallc.f90 @@ -53,7 +53,7 @@ subroutine psb_ialloc_vect(x, desc_a,info, dupl, bldmode) !locals integer(psb_ipk_) :: np,me,nr,i,err_act - integer(psb_ipk_) :: dupl_, bldmode_, nrmt_ + integer(psb_ipk_) :: bldmode_, nrmt_ type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name @@ -111,6 +111,8 @@ subroutine psb_ialloc_vect(x, desc_a,info, dupl, bldmode) call x%set_bld() if (present(dupl)) then call x%set_dupl(dupl) + else + call x%set_dupl(psb_dupl_def_) end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) diff --git a/base/tools/psb_lallc.f90 b/base/tools/psb_lallc.f90 index 7d47b7cb3..ba8cc415e 100644 --- a/base/tools/psb_lallc.f90 +++ b/base/tools/psb_lallc.f90 @@ -53,7 +53,7 @@ subroutine psb_lalloc_vect(x, desc_a,info, dupl, bldmode) !locals integer(psb_ipk_) :: np,me,nr,i,err_act - integer(psb_ipk_) :: dupl_, bldmode_, nrmt_ + integer(psb_ipk_) :: bldmode_, nrmt_ type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name @@ -111,6 +111,8 @@ subroutine psb_lalloc_vect(x, desc_a,info, dupl, bldmode) call x%set_bld() if (present(dupl)) then call x%set_dupl(dupl) + else + call x%set_dupl(psb_dupl_def_) end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) diff --git a/base/tools/psb_sallc.f90 b/base/tools/psb_sallc.f90 index 00ab38126..3c4f9a993 100644 --- a/base/tools/psb_sallc.f90 +++ b/base/tools/psb_sallc.f90 @@ -53,7 +53,7 @@ subroutine psb_salloc_vect(x, desc_a,info, dupl, bldmode) !locals integer(psb_ipk_) :: np,me,nr,i,err_act - integer(psb_ipk_) :: dupl_, bldmode_, nrmt_ + integer(psb_ipk_) :: bldmode_, nrmt_ type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name @@ -111,6 +111,8 @@ subroutine psb_salloc_vect(x, desc_a,info, dupl, bldmode) call x%set_bld() if (present(dupl)) then call x%set_dupl(dupl) + else + call x%set_dupl(psb_dupl_def_) end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) diff --git a/base/tools/psb_zallc.f90 b/base/tools/psb_zallc.f90 index de6e91b08..bfc3d6780 100644 --- a/base/tools/psb_zallc.f90 +++ b/base/tools/psb_zallc.f90 @@ -53,7 +53,7 @@ subroutine psb_zalloc_vect(x, desc_a,info, dupl, bldmode) !locals integer(psb_ipk_) :: np,me,nr,i,err_act - integer(psb_ipk_) :: dupl_, bldmode_, nrmt_ + integer(psb_ipk_) :: bldmode_, nrmt_ type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: debug_level, debug_unit character(len=20) :: name @@ -111,6 +111,8 @@ subroutine psb_zalloc_vect(x, desc_a,info, dupl, bldmode) call x%set_bld() if (present(dupl)) then call x%set_dupl(dupl) + else + call x%set_dupl(psb_dupl_def_) end if call x%set_remote_build(bldmode_) call x%set_nrmv(izero) diff --git a/cuda/psb_c_cuda_vect_mod.F90 b/cuda/psb_c_cuda_vect_mod.F90 index 96c8ec1ff..711ec885c 100644 --- a/cuda/psb_c_cuda_vect_mod.F90 +++ b/cuda/psb_c_cuda_vect_mod.F90 @@ -1537,12 +1537,14 @@ contains end subroutine c_cuda_multi_bld_x - subroutine c_cuda_multi_bld_n(x,m,n) + subroutine c_cuda_multi_bld_n(x,m,n,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_c_multivect_cuda), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch call x%all(m,n,info) + call x%asb(m,n,info,scratch=scratch) if (info /= 0) then call psb_errpush(info,'c_cuda_multi_bld_n',i_err=(/m,n,n,n,n/)) end if @@ -1938,7 +1940,7 @@ contains call x%set_host() end subroutine c_cuda_multi_zero - subroutine c_cuda_multi_asb(m,n, x, info) + subroutine c_cuda_multi_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none @@ -1946,12 +1948,14 @@ contains class(psb_c_multivect_cuda), intent(inout) :: x integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: nd, nc + logical, intent(in), optional :: scratch + info = 0 x%m_nrows = m x%m_ncols = n if (x%is_host()) then - call x%psb_c_base_multivect_type%asb(m,n,info) + call x%psb_c_base_multivect_type%asb(m,n,info,scratch) if (info == psb_success_) call x%sync_space(info) else if (x%is_dev()) then nd = getMultiVecDevicePitch(x%deviceVect) @@ -2088,11 +2092,11 @@ contains call x%set_sync() end subroutine c_cuda_multi_vect_finalize - subroutine c_cuda_multi_ins(n,irl,val,dupl,x,info) + subroutine c_cuda_multi_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_c_multivect_cuda), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_spk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -2101,7 +2105,7 @@ contains info = 0 if (x%is_dev()) call x%sync() - call x%psb_c_base_multivect_type%ins(n,irl,val,dupl,info) + call x%psb_c_base_multivect_type%ins(n,irl,val,dupl,maxr,info) call x%set_host() end subroutine c_cuda_multi_ins diff --git a/cuda/psb_d_cuda_vect_mod.F90 b/cuda/psb_d_cuda_vect_mod.F90 index 7618c61dc..036d2f01b 100644 --- a/cuda/psb_d_cuda_vect_mod.F90 +++ b/cuda/psb_d_cuda_vect_mod.F90 @@ -1537,12 +1537,14 @@ contains end subroutine d_cuda_multi_bld_x - subroutine d_cuda_multi_bld_n(x,m,n) + subroutine d_cuda_multi_bld_n(x,m,n,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_d_multivect_cuda), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch call x%all(m,n,info) + call x%asb(m,n,info,scratch=scratch) if (info /= 0) then call psb_errpush(info,'d_cuda_multi_bld_n',i_err=(/m,n,n,n,n/)) end if @@ -1938,7 +1940,7 @@ contains call x%set_host() end subroutine d_cuda_multi_zero - subroutine d_cuda_multi_asb(m,n, x, info) + subroutine d_cuda_multi_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none @@ -1946,12 +1948,14 @@ contains class(psb_d_multivect_cuda), intent(inout) :: x integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: nd, nc + logical, intent(in), optional :: scratch + info = 0 x%m_nrows = m x%m_ncols = n if (x%is_host()) then - call x%psb_d_base_multivect_type%asb(m,n,info) + call x%psb_d_base_multivect_type%asb(m,n,info,scratch) if (info == psb_success_) call x%sync_space(info) else if (x%is_dev()) then nd = getMultiVecDevicePitch(x%deviceVect) @@ -2088,11 +2092,11 @@ contains call x%set_sync() end subroutine d_cuda_multi_vect_finalize - subroutine d_cuda_multi_ins(n,irl,val,dupl,x,info) + subroutine d_cuda_multi_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_d_multivect_cuda), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_dpk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -2101,7 +2105,7 @@ contains info = 0 if (x%is_dev()) call x%sync() - call x%psb_d_base_multivect_type%ins(n,irl,val,dupl,info) + call x%psb_d_base_multivect_type%ins(n,irl,val,dupl,maxr,info) call x%set_host() end subroutine d_cuda_multi_ins diff --git a/cuda/psb_i_cuda_vect_mod.F90 b/cuda/psb_i_cuda_vect_mod.F90 index ae63d3a98..7020d0a5e 100644 --- a/cuda/psb_i_cuda_vect_mod.F90 +++ b/cuda/psb_i_cuda_vect_mod.F90 @@ -1097,12 +1097,14 @@ contains end subroutine i_cuda_multi_bld_x - subroutine i_cuda_multi_bld_n(x,m,n) + subroutine i_cuda_multi_bld_n(x,m,n,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_i_multivect_cuda), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch call x%all(m,n,info) + call x%asb(m,n,info,scratch=scratch) if (info /= 0) then call psb_errpush(info,'i_cuda_multi_bld_n',i_err=(/m,n,n,n,n/)) end if @@ -1498,7 +1500,7 @@ contains call x%set_host() end subroutine i_cuda_multi_zero - subroutine i_cuda_multi_asb(m,n, x, info) + subroutine i_cuda_multi_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none @@ -1506,12 +1508,14 @@ contains class(psb_i_multivect_cuda), intent(inout) :: x integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: nd, nc + logical, intent(in), optional :: scratch + info = 0 x%m_nrows = m x%m_ncols = n if (x%is_host()) then - call x%psb_i_base_multivect_type%asb(m,n,info) + call x%psb_i_base_multivect_type%asb(m,n,info,scratch) if (info == psb_success_) call x%sync_space(info) else if (x%is_dev()) then nd = getMultiVecDevicePitch(x%deviceVect) @@ -1648,11 +1652,11 @@ contains call x%set_sync() end subroutine i_cuda_multi_vect_finalize - subroutine i_cuda_multi_ins(n,irl,val,dupl,x,info) + subroutine i_cuda_multi_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_i_multivect_cuda), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) integer(psb_ipk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -1661,7 +1665,7 @@ contains info = 0 if (x%is_dev()) call x%sync() - call x%psb_i_base_multivect_type%ins(n,irl,val,dupl,info) + call x%psb_i_base_multivect_type%ins(n,irl,val,dupl,maxr,info) call x%set_host() end subroutine i_cuda_multi_ins diff --git a/cuda/psb_s_cuda_vect_mod.F90 b/cuda/psb_s_cuda_vect_mod.F90 index ac83caf87..973ac78cf 100644 --- a/cuda/psb_s_cuda_vect_mod.F90 +++ b/cuda/psb_s_cuda_vect_mod.F90 @@ -1537,12 +1537,14 @@ contains end subroutine s_cuda_multi_bld_x - subroutine s_cuda_multi_bld_n(x,m,n) + subroutine s_cuda_multi_bld_n(x,m,n,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_s_multivect_cuda), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch call x%all(m,n,info) + call x%asb(m,n,info,scratch=scratch) if (info /= 0) then call psb_errpush(info,'s_cuda_multi_bld_n',i_err=(/m,n,n,n,n/)) end if @@ -1938,7 +1940,7 @@ contains call x%set_host() end subroutine s_cuda_multi_zero - subroutine s_cuda_multi_asb(m,n, x, info) + subroutine s_cuda_multi_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none @@ -1946,12 +1948,14 @@ contains class(psb_s_multivect_cuda), intent(inout) :: x integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: nd, nc + logical, intent(in), optional :: scratch + info = 0 x%m_nrows = m x%m_ncols = n if (x%is_host()) then - call x%psb_s_base_multivect_type%asb(m,n,info) + call x%psb_s_base_multivect_type%asb(m,n,info,scratch) if (info == psb_success_) call x%sync_space(info) else if (x%is_dev()) then nd = getMultiVecDevicePitch(x%deviceVect) @@ -2088,11 +2092,11 @@ contains call x%set_sync() end subroutine s_cuda_multi_vect_finalize - subroutine s_cuda_multi_ins(n,irl,val,dupl,x,info) + subroutine s_cuda_multi_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_s_multivect_cuda), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) real(psb_spk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -2101,7 +2105,7 @@ contains info = 0 if (x%is_dev()) call x%sync() - call x%psb_s_base_multivect_type%ins(n,irl,val,dupl,info) + call x%psb_s_base_multivect_type%ins(n,irl,val,dupl,maxr,info) call x%set_host() end subroutine s_cuda_multi_ins diff --git a/cuda/psb_z_cuda_vect_mod.F90 b/cuda/psb_z_cuda_vect_mod.F90 index 3a3ccf8a9..88c749360 100644 --- a/cuda/psb_z_cuda_vect_mod.F90 +++ b/cuda/psb_z_cuda_vect_mod.F90 @@ -1537,12 +1537,14 @@ contains end subroutine z_cuda_multi_bld_x - subroutine z_cuda_multi_bld_n(x,m,n) + subroutine z_cuda_multi_bld_n(x,m,n,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_z_multivect_cuda), intent(inout) :: x integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch call x%all(m,n,info) + call x%asb(m,n,info,scratch=scratch) if (info /= 0) then call psb_errpush(info,'z_cuda_multi_bld_n',i_err=(/m,n,n,n,n/)) end if @@ -1938,7 +1940,7 @@ contains call x%set_host() end subroutine z_cuda_multi_zero - subroutine z_cuda_multi_asb(m,n, x, info) + subroutine z_cuda_multi_asb(m,n, x, info, scratch) use psi_serial_mod use psb_realloc_mod implicit none @@ -1946,12 +1948,14 @@ contains class(psb_z_multivect_cuda), intent(inout) :: x integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: nd, nc + logical, intent(in), optional :: scratch + info = 0 x%m_nrows = m x%m_ncols = n if (x%is_host()) then - call x%psb_z_base_multivect_type%asb(m,n,info) + call x%psb_z_base_multivect_type%asb(m,n,info,scratch) if (info == psb_success_) call x%sync_space(info) else if (x%is_dev()) then nd = getMultiVecDevicePitch(x%deviceVect) @@ -2088,11 +2092,11 @@ contains call x%set_sync() end subroutine z_cuda_multi_vect_finalize - subroutine z_cuda_multi_ins(n,irl,val,dupl,x,info) + subroutine z_cuda_multi_ins(n,irl,val,dupl,x,maxr,info) use psi_serial_mod implicit none class(psb_z_multivect_cuda), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n, dupl + integer(psb_ipk_), intent(in) :: n, dupl,maxr integer(psb_ipk_), intent(in) :: irl(:) complex(psb_dpk_), intent(in) :: val(:,:) integer(psb_ipk_), intent(out) :: info @@ -2101,7 +2105,7 @@ contains info = 0 if (x%is_dev()) call x%sync() - call x%psb_z_base_multivect_type%ins(n,irl,val,dupl,info) + call x%psb_z_base_multivect_type%ins(n,irl,val,dupl,maxr,info) call x%set_host() end subroutine z_cuda_multi_ins From c586e5379915f082247a5853e6b081f749167471 Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Wed, 14 Jan 2026 15:41:23 +0100 Subject: [PATCH 088/175] Added C functions for making available GPU support from the C interface --- cbind/base/Makefile | 5 + cbind/base/psb_base_tools_cbind_mod.F90 | 48 +- cbind/base/psb_c_base.h | 9 + cbind/base/psb_c_cbase.h | 6 +- cbind/base/psb_c_dbase.h | 6 +- cbind/base/psb_c_sbase.h | 8 +- cbind/base/psb_c_serial_cbind_mod.F90 | 2 +- cbind/base/psb_c_tools_cbind_mod.F90 | 169 +++++- cbind/base/psb_c_zbase.h | 6 +- .../{psb_cpenv_mod.f90 => psb_cpenv_mod.F90} | 61 +++ cbind/base/psb_d_serial_cbind_mod.F90 | 2 +- cbind/base/psb_d_tools_cbind_mod.F90 | 179 ++++++- cbind/base/psb_s_serial_cbind_mod.F90 | 2 +- cbind/base/psb_s_tools_cbind_mod.F90 | 179 ++++++- cbind/base/psb_z_serial_cbind_mod.F90 | 2 +- cbind/base/psb_z_tools_cbind_mod.F90 | 169 +++++- cbind/psb_c_base.h | 9 + cbind/psb_c_cbase.h | 6 +- cbind/psb_c_dbase.h | 6 +- cbind/psb_c_sbase.h | 8 +- cbind/psb_c_zbase.h | 6 +- cbind/test/gpu/Makefile | 50 ++ cbind/test/gpu/gputest.c | 64 +++ cbind/test/gpu/pdegen3dc.c | 496 ++++++++++++++++++ cbind/test/gpu/runs/pdegen3d.inp | 12 + 25 files changed, 1430 insertions(+), 80 deletions(-) rename cbind/base/{psb_cpenv_mod.f90 => psb_cpenv_mod.F90} (87%) create mode 100644 cbind/test/gpu/Makefile create mode 100644 cbind/test/gpu/gputest.c create mode 100644 cbind/test/gpu/pdegen3dc.c create mode 100644 cbind/test/gpu/runs/pdegen3d.inp diff --git a/cbind/base/Makefile b/cbind/base/Makefile index 2b7448293..3ddc2eb29 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -26,6 +26,10 @@ OBJS=$(FOBJS) $(COBJS) LIBNAME=$(CBINDLIBNAME) +# Ensure C-interoperable modules are built with CUDA definitions where available. +.F90.o: + $(FC) $(FCOPT) $(FINCLUDES) $(FDEFINES) $(FCUDEFINES) -c $< -o $@ + objs: $(OBJS) $(CMOD) /bin/cp -p *$(.mod) $(CMOD) $(HERE) @@ -58,6 +62,7 @@ psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o: psb_base_tools_cbind_mod.o psb_ob psb_base_psblas_cbind_mod.o: psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o psb_cpenv_mod.o: psb_base_string_cbind_mod.o psb_objhandle_mod.o + $(FC) $(FCOPT) $(FINCLUDES) $(FCUDEFINES) -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o veryclean: clean /bin/rm -f $(HERE)/$(LIBNAME) diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 index 4029bfd2e..70d4c7426 100644 --- a/cbind/base/psb_base_tools_cbind_mod.F90 +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -3,8 +3,9 @@ module psb_base_tools_cbind_mod use psb_base_mod use psb_objhandle_mod use psb_cpenv_mod - use psb_base_string_cbind_mod - +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif contains ! Aggiungere funzione per estrarre comunicatore @@ -270,6 +271,49 @@ contains end function psb_c_cdasb + function psb_c_cdasb_format(cdh,format) bind(c,name='psb_c_cdasb_format') result(res) + use psb_base_string_cbind_mod, only: stringc2f + implicit none + ! Takes as input the desired format bewten CPU or GPU, and assembles accordingly + ! via the mold parameter of psb_cdasb + + integer(psb_c_ipk_) :: res + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info + character(c_char), dimension(*) :: format + + ! Local variables + character(len=6) :: fformat + ! mold variables +#ifdef PSB_HAVE_CUDA + type(psb_i_vect_cuda), target :: ivgpu +#endif + type(psb_i_base_vect_type), target :: ivect + class(psb_i_base_vect_type), pointer :: imold + + call stringc2f(format,fformat) + + res = -1 + select case (psb_toupper(fformat)) +#ifdef PSB_HAVE_CUDA + case('GPU','DEVICE') + imold => ivgpu +#endif + case('CPU','HOST') + imold => ivect + case default + write(psb_out_unit,*) 'psb_c_cdasb_format: Unknown format ',fformat + imold => ivect + end select + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call psb_cdasb(descp,info,mold=imold) + res = info + end if + + end function psb_c_cdasb_format function psb_c_cdfree(cdh) bind(c,name='psb_c_cdfree') result(res) diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index ec130a9fc..3f04fca3d 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -57,6 +57,13 @@ extern "C" { psb_i_t psb_c_get_index_base(); void psb_c_set_index_base(psb_i_t base); + /* GPU environment routines */ + #ifdef PSB_HAVE_CUDA + void psb_c_cuda_init(psb_c_ctxt *cctxt); + void psb_c_cuda_init_opt(psb_c_ctxt *cctxt, psb_m_t ngpu); + void psb_c_cuda_exit(); + psb_m_t psb_c_cuda_getDeviceCount(); + #endif void psb_c_mbcast(psb_c_ctxt cctxt, psb_i_t n, psb_m_t *v, psb_i_t root); void psb_c_ibcast(psb_c_ctxt cctxt, psb_i_t n, psb_i_t *v, psb_i_t root); @@ -79,12 +86,14 @@ extern "C" { psb_i_t psb_c_cdall_nl(psb_i_t nl, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_repl(psb_l_t n, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdasb(psb_c_descriptor *cd); + psb_i_t psb_c_cdasb_format(psb_c_descriptor *cd, const char *afmt); psb_i_t psb_c_cdfree(psb_c_descriptor *cd); psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd); psb_i_t psb_c_cdins_lidx(psb_i_t nz, const psb_l_t *ja, const psb_i_t *lidx, psb_c_descriptor *cd); bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); bool psb_c_cd_is_asb(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index d33307afe..dcf379656 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -34,6 +34,8 @@ psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeasb_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); +psb_i_t psb_c_cgeasb_options_format(psb_c_cvector *xh, psb_c_descriptor *cdh, + const char *fmt, psb_i_t dupl); psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); @@ -56,8 +58,8 @@ psb_i_t psb_c_cset_matasb(psb_c_cspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_cset_matbld(psb_c_cspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_ccopy_mat(psb_c_cspmat *ah,psb_c_cspmat *bh,psb_c_descriptor *cdh); -/* psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, + const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_csprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_cmat_name_print(psb_c_cspmat *mh, char *name); psb_i_t psb_c_cvect_set_scal(psb_c_cvector *xh, psb_c_t val); diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index c615eba14..8c2a64d31 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -34,6 +34,8 @@ psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeasb_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); +psb_i_t psb_c_dgeasb_options_format(psb_c_dvector *xh, psb_c_descriptor *cdh, + const char *fmt, psb_i_t dupl); psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); @@ -56,8 +58,8 @@ psb_i_t psb_c_dset_matasb(psb_c_dspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_dset_matbld(psb_c_dspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_dcopy_mat(psb_c_dspmat *ah,psb_c_dspmat *bh,psb_c_descriptor *cdh); -/* psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, + const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_dmat_name_print(psb_c_dspmat *mh, char *name); psb_i_t psb_c_dvect_set_scal(psb_c_dvector *xh, psb_d_t val); diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index 875caccae..f132e707e 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -34,6 +34,8 @@ psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeasb_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t dupl); +psb_i_t psb_c_sgeasb_options_format(psb_c_svector *xh, psb_c_descriptor *cdh, + const char *fmt, psb_i_t dupl); psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); @@ -55,9 +57,9 @@ psb_i_t psb_c_sset_matupd(psb_c_sspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_sset_matasb(psb_c_sspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_sset_matbld(psb_c_sspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_scopy_mat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_c_descriptor *cdh); - -/* psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ + + psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, + const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_ssprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_smat_name_print(psb_c_sspmat *mh, char *name); psb_i_t psb_c_svect_set_scal(psb_c_svector *xh, psb_s_t val); diff --git a/cbind/base/psb_c_serial_cbind_mod.F90 b/cbind/base/psb_c_serial_cbind_mod.F90 index c0feeebd6..04e21d333 100644 --- a/cbind/base/psb_c_serial_cbind_mod.F90 +++ b/cbind/base/psb_c_serial_cbind_mod.F90 @@ -2,7 +2,7 @@ module psb_c_serial_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod +! use psb_base_string_cbind_mod use psb_base_tools_cbind_mod contains diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index b3270c582..b8aedc49c 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -3,8 +3,10 @@ module psb_c_tools_cbind_mod use psb_base_mod use psb_cpenv_mod use psb_objhandle_mod - use psb_base_string_cbind_mod use psb_base_tools_cbind_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif contains @@ -160,6 +162,63 @@ contains return end function psb_c_cgeasb_options + + function psb_c_cgeasb_options_format(xh,cdh,dupl,format) bind(c) result(res) + ! Takes into account format argument as a c string, and uses it to call the appropriate psb_geasb + ! with mold argument + use psb_base_string_cbind_mod, only: stringc2f + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + character(kind=c_char), dimension(*) :: format + integer(psb_c_ipk_), value :: dupl + + ! Local variables + character(len=6) :: fformat + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + ! mold variables +#ifdef PSB_HAVE_CUDA + type(psb_c_vect_cuda), target :: vgpu +#endif + type(psb_c_base_vect_type), target :: vect + class(psb_c_base_vect_type), pointer :: vmold + + ! Select mold based on format + call stringc2f(format,fformat) + + select case (psb_toupper(fformat)) +#ifdef PSB_HAVE_CUDA + case('GPU','DEVICE') + vmold => vgpu +#endif + case('CPU','HOST') + vmold => vect + case default + write(psb_out_unit,*) 'psb_c_cgeasb_options_format: Unknown format ',fformat + vmold => vect + end select + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info,dupl=dupl,mold=vmold) + res = min(0,info) + + return + end function psb_c_cgeasb_options_format + function psb_c_cgefree(xh,cdh) bind(c) result(res) @@ -352,48 +411,130 @@ contains end function psb_c_cspfree -#if 0 - function psb_c_cspasb_opt(mh,cdh,afmt,upd) bind(c) result(res) -#ifdef PSB_HAVE_LIBRSB + function psb_c_cspasb_opt(mh,cdh,afmt,upd,dupl) bind(c) result(res) + +#if 0 +#ifdef PSB_HAVE_LIBRSB use psb_c_rsb_mat_mod #endif +#endif +#if defined(PSB_HAVE_CUDA) + use psb_cuda_mod +#endif + use psb_ext_mod implicit none integer(psb_c_ipk_) :: res - integer(psb_c_ipk_), value :: cdh, mh,upd,dupl + type(psb_c_cspmat) :: mh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: upd,dupl character(c_char) :: afmt(*) integer(psb_c_ipk_) :: info,n character(len=5) :: fafmt + integer(psb_ipk_), parameter :: hksz = 32 + ! mold variables +#if 0 #ifdef PSB_HAVE_LIBRSB type(psb_c_rsb_sparse_mat) :: arsb #endif +#endif + type(psb_c_ell_sparse_mat), target :: aell + type(psb_c_csr_sparse_mat), target :: acsr + type(psb_c_coo_sparse_mat), target :: acoo + type(psb_c_hll_sparse_mat), target :: ahll + type(psb_c_hdia_sparse_mat), target :: ahdia + type(psb_c_dns_sparse_mat), target :: adns +#if defined(PSB_HAVE_CUDA) + type(psb_c_cuda_hlg_sparse_mat), target :: ahlg + type(psb_c_cuda_csrg_sparse_mat), target :: acsrg + type(psb_c_cuda_elg_sparse_mat), target :: aelg +#endif + class(psb_c_base_sparse_mat), pointer :: amold + !Local variables + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap res = -1 - call psb_check_descriptor_handle(cdh,info) - if (info < 0) return - call psb_check_double_spmat_handle(mh,info) - if (info < 0) return - + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if call stringc2f(afmt,fafmt) + + ! Set the mold variable based on afmt + select case (psb_toupper(fafmt)) +#if defined(PSB_HAVE_CUDA) + case('ELG') + amold => aelg + case('HLG') + call psi_set_hksz(hksz) + amold => ahlg + case('CSRG') + amold => acsrg + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to HLG' + amold => ahlg + end select +#else + select case(psb_toupper(fafmt)) + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to CSR' + amold => acsr + end select +#endif + select case(fafmt) +#if 0 #ifdef PSB_HAVE_LIBRSB case('RSB') call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& & upd=upd,mold=arsb) #endif +#endif + case('ELL','HLL','CSR','DNS') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) +#if defined(PSB_HAVE_CUDA) + case('ELG','HLG','CSRG') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) +#endif case default - call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& - & afmt=fafmt,upd=upd) + write(psb_out_unit,*) 'psb_c_cspasb_opt: Unknown format ',fafmt + call psb_spasb(ap,descp,info,afmt=fafmt,upd=upd,dupl=dupl) end select res = min(0,info) return end function psb_c_cspasb_opt -#endif - function psb_c_cspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) + + function psb_c_cspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index 4d67b703d..40bff4853 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -34,6 +34,8 @@ psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeasb_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); +psb_i_t psb_c_zgeasb_options_format(psb_c_zvector *xh, psb_c_descriptor *cdh, + const char *fmt, psb_i_t dupl); psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); @@ -57,8 +59,8 @@ psb_i_t psb_c_zset_matbld(psb_c_zspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_zcopy_mat(psb_c_zspmat *ah,psb_c_zspmat *bh,psb_c_descriptor *cdh); -/* psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, + const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_zsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_zmat_name_print(psb_c_zspmat *mh, char *name); psb_i_t psb_c_zvect_set_scal(psb_c_zvector *xh, psb_z_t val); diff --git a/cbind/base/psb_cpenv_mod.f90 b/cbind/base/psb_cpenv_mod.F90 similarity index 87% rename from cbind/base/psb_cpenv_mod.f90 rename to cbind/base/psb_cpenv_mod.F90 index 6bc67bfb9..394b8157c 100644 --- a/cbind/base/psb_cpenv_mod.f90 +++ b/cbind/base/psb_cpenv_mod.F90 @@ -50,6 +50,67 @@ contains end subroutine psb_c_init +#ifdef PSB_HAVE_CUDA + subroutine psb_c_cuda_init(cctxt) bind(c, name="psb_c_cuda_init") + use psb_base_mod, only : psb_ctxt_type + use psb_cuda_mod, only : psb_cuda_init + implicit none + + type(psb_c_object_type) :: cctxt + type(psb_ctxt_type), pointer :: ctxt + integer :: info + + if (c_associated(cctxt%item)) then + call c_f_pointer(cctxt%item,ctxt) + end if + call psb_cuda_init(ctxt) + cctxt%item = c_loc(ctxt) + end subroutine psb_c_cuda_init + + subroutine psb_c_cuda_init_opt(cctxt,cdevice) bind(c, name="psb_c_cuda_init_opt") + use psb_base_mod, only : psb_ctxt_type + use psb_cuda_mod, only : psb_cuda_init + implicit none + + type(psb_c_object_type) :: cctxt + type(psb_ctxt_type), pointer :: ctxt + integer(psb_c_mpk_), value :: cdevice + integer :: info + ! Local variables + integer(psb_mpk_) :: cdevice_f + + cdevice_f = cdevice + + if (c_associated(cctxt%item)) then + call c_f_pointer(cctxt%item,ctxt) + end if + call psb_cuda_init(ctxt,cdevice_f) + cctxt%item = c_loc(ctxt) + + end subroutine psb_c_cuda_init_opt + + subroutine psb_c_cuda_exit() bind(c, name="psb_c_cuda_exit") + use psb_cuda_mod, only : psb_cuda_exit + implicit none + + call psb_cuda_exit() + return + end subroutine psb_c_cuda_exit + + function psb_c_cuda_getDeviceCount() bind(c, name="psb_c_cuda_getDeviceCount") result(res) + use psb_cuda_mod, only : psb_cuda_getDeviceCount + implicit none + integer(psb_c_ipk_) :: res + ! Local variables + integer(psb_ipk_) :: fres + + fres = psb_cuda_getDeviceCount() + res = fres + + return + end function psb_c_cuda_getDeviceCount +#endif + ! Get MPI_Fint from C, psb_c_object_type and start a psb_ctxt_type ! context from it. subroutine psb_c_init_from_fint(cctxt,fint) bind(c) diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index 96a5b32cf..0e71e9ee2 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -2,7 +2,7 @@ module psb_d_serial_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod +! use psb_base_string_cbind_mod use psb_base_tools_cbind_mod contains diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index ea11b922b..c70d018a8 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -3,8 +3,10 @@ module psb_d_tools_cbind_mod use psb_base_mod use psb_cpenv_mod use psb_objhandle_mod - use psb_base_string_cbind_mod use psb_base_tools_cbind_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif contains @@ -160,6 +162,63 @@ contains return end function psb_c_dgeasb_options + + function psb_c_dgeasb_options_format(xh,cdh,dupl,format) bind(c) result(res) + ! Takes into account format argument as a c string, and uses it to call the appropriate psb_geasb + ! with mold argument + use psb_base_string_cbind_mod, only: stringc2f + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + character(kind=c_char), dimension(*) :: format + integer(psb_c_ipk_), value :: dupl + + ! Local variables + character(len=6) :: fformat + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + ! mold variables +#ifdef PSB_HAVE_CUDA + type(psb_d_vect_cuda), target :: vgpu +#endif + type(psb_d_base_vect_type), target :: vect + class(psb_d_base_vect_type), pointer :: vmold + + ! Select mold based on format + call stringc2f(format,fformat) + + select case (psb_toupper(fformat)) +#ifdef PSB_HAVE_CUDA + case('GPU','DEVICE') + vmold => vgpu +#endif + case('CPU','HOST') + vmold => vect + case default + write(psb_out_unit,*) 'psb_c_dgeasb_options_format: Unknown format ',fformat + vmold => vect + end select + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info,dupl=dupl,mold=vmold) + res = min(0,info) + + return + end function psb_c_dgeasb_options_format + function psb_c_dgefree(xh,cdh) bind(c) result(res) @@ -352,48 +411,140 @@ contains end function psb_c_dspfree -#if 0 - function psb_c_dspasb_opt(mh,cdh,afmt,upd) bind(c) result(res) -#ifdef PSB_HAVE_LIBRSB + function psb_c_dspasb_opt(mh,cdh,afmt,upd,dupl) bind(c) result(res) + +#if 0 +#ifdef PSB_HAVE_LIBRSB use psb_d_rsb_mat_mod #endif +#endif +#if defined(PSB_HAVE_CUDA) + use psb_cuda_mod +#endif + use psb_ext_mod implicit none integer(psb_c_ipk_) :: res - integer(psb_c_ipk_), value :: cdh, mh,upd,dupl + type(psb_c_dspmat) :: mh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: upd,dupl character(c_char) :: afmt(*) integer(psb_c_ipk_) :: info,n character(len=5) :: fafmt + integer(psb_ipk_), parameter :: hksz = 32 + ! mold variables +#if 0 #ifdef PSB_HAVE_LIBRSB type(psb_d_rsb_sparse_mat) :: arsb #endif +#endif + type(psb_d_ell_sparse_mat), target :: aell + type(psb_d_csr_sparse_mat), target :: acsr + type(psb_d_coo_sparse_mat), target :: acoo + type(psb_d_hll_sparse_mat), target :: ahll + type(psb_d_hdia_sparse_mat), target :: ahdia + type(psb_d_dns_sparse_mat), target :: adns +#if defined(PSB_HAVE_CUDA) + type(psb_d_cuda_hlg_sparse_mat), target :: ahlg + type(psb_d_cuda_hdiag_sparse_mat), target :: ahdiag + type(psb_d_cuda_csrg_sparse_mat), target :: acsrg + type(psb_d_cuda_elg_sparse_mat), target :: aelg +#endif + class(psb_d_base_sparse_mat), pointer :: amold + !Local variables + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap res = -1 - call psb_check_descriptor_handle(cdh,info) - if (info < 0) return - call psb_check_double_spmat_handle(mh,info) - if (info < 0) return - + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if call stringc2f(afmt,fafmt) + + ! Set the mold variable based on afmt + select case (psb_toupper(fafmt)) +#if defined(PSB_HAVE_CUDA) + case('ELG') + amold => aelg + case('HLG') + call psi_set_hksz(hksz) + amold => ahlg + case('HDIAG') + amold => ahdiag + case('CSRG') + amold => acsrg + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('HDIA') + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to HLG' + amold => ahlg + end select +#else + select case(psb_toupper(fafmt)) + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('HDIA') + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to CSR' + amold => acsr + end select +#endif + select case(fafmt) +#if 0 #ifdef PSB_HAVE_LIBRSB case('RSB') call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& & upd=upd,mold=arsb) #endif +#endif + case('ELL','HLL','CSR','DNS') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) + case('HDIA') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) +#if defined(PSB_HAVE_CUDA) + case('ELG','HLG','CSRG') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) + case('HDIAG') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) +#endif case default - call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& - & afmt=fafmt,upd=upd) + write(psb_out_unit,*) 'psb_c_dspasb_opt: Unknown format ',fafmt + call psb_spasb(ap,descp,info,afmt=fafmt,upd=upd,dupl=dupl) end select res = min(0,info) return end function psb_c_dspasb_opt -#endif - function psb_c_dspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) + + function psb_c_dspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/base/psb_s_serial_cbind_mod.F90 b/cbind/base/psb_s_serial_cbind_mod.F90 index 0f1e6dce4..2610e8833 100644 --- a/cbind/base/psb_s_serial_cbind_mod.F90 +++ b/cbind/base/psb_s_serial_cbind_mod.F90 @@ -2,7 +2,7 @@ module psb_s_serial_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod +! use psb_base_string_cbind_mod use psb_base_tools_cbind_mod contains diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 0b25a8404..e93bb35fe 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -3,8 +3,10 @@ module psb_s_tools_cbind_mod use psb_base_mod use psb_cpenv_mod use psb_objhandle_mod - use psb_base_string_cbind_mod use psb_base_tools_cbind_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif contains @@ -160,6 +162,63 @@ contains return end function psb_c_sgeasb_options + + function psb_c_sgeasb_options_format(xh,cdh,dupl,format) bind(c) result(res) + ! Takes into account format argument as a c string, and uses it to call the appropriate psb_geasb + ! with mold argument + use psb_base_string_cbind_mod, only: stringc2f + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + character(kind=c_char), dimension(*) :: format + integer(psb_c_ipk_), value :: dupl + + ! Local variables + character(len=6) :: fformat + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + ! mold variables +#ifdef PSB_HAVE_CUDA + type(psb_s_vect_cuda), target :: vgpu +#endif + type(psb_s_base_vect_type), target :: vect + class(psb_s_base_vect_type), pointer :: vmold + + ! Select mold based on format + call stringc2f(format,fformat) + + select case (psb_toupper(fformat)) +#ifdef PSB_HAVE_CUDA + case('GPU','DEVICE') + vmold => vgpu +#endif + case('CPU','HOST') + vmold => vect + case default + write(psb_out_unit,*) 'psb_c_sgeasb_options_format: Unknown format ',fformat + vmold => vect + end select + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info,dupl=dupl,mold=vmold) + res = min(0,info) + + return + end function psb_c_sgeasb_options_format + function psb_c_sgefree(xh,cdh) bind(c) result(res) @@ -352,48 +411,140 @@ contains end function psb_c_sspfree -#if 0 - function psb_c_sspasb_opt(mh,cdh,afmt,upd) bind(c) result(res) -#ifdef PSB_HAVE_LIBRSB + function psb_c_sspasb_opt(mh,cdh,afmt,upd,dupl) bind(c) result(res) + +#if 0 +#ifdef PSB_HAVE_LIBRSB use psb_s_rsb_mat_mod #endif +#endif +#if defined(PSB_HAVE_CUDA) + use psb_cuda_mod +#endif + use psb_ext_mod implicit none integer(psb_c_ipk_) :: res - integer(psb_c_ipk_), value :: cdh, mh,upd,dupl + type(psb_c_sspmat) :: mh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: upd,dupl character(c_char) :: afmt(*) integer(psb_c_ipk_) :: info,n character(len=5) :: fafmt + integer(psb_ipk_), parameter :: hksz = 32 + ! mold variables +#if 0 #ifdef PSB_HAVE_LIBRSB type(psb_s_rsb_sparse_mat) :: arsb #endif +#endif + type(psb_s_ell_sparse_mat), target :: aell + type(psb_s_csr_sparse_mat), target :: acsr + type(psb_s_coo_sparse_mat), target :: acoo + type(psb_s_hll_sparse_mat), target :: ahll + type(psb_s_hdia_sparse_mat), target :: ahdia + type(psb_s_dns_sparse_mat), target :: adns +#if defined(PSB_HAVE_CUDA) + type(psb_s_cuda_hlg_sparse_mat), target :: ahlg + type(psb_s_cuda_hdiag_sparse_mat), target :: ahdiag + type(psb_s_cuda_csrg_sparse_mat), target :: acsrg + type(psb_s_cuda_elg_sparse_mat), target :: aelg +#endif + class(psb_s_base_sparse_mat), pointer :: amold + !Local variables + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap res = -1 - call psb_check_descriptor_handle(cdh,info) - if (info < 0) return - call psb_check_double_spmat_handle(mh,info) - if (info < 0) return - + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if call stringc2f(afmt,fafmt) + + ! Set the mold variable based on afmt + select case (psb_toupper(fafmt)) +#if defined(PSB_HAVE_CUDA) + case('ELG') + amold => aelg + case('HLG') + call psi_set_hksz(hksz) + amold => ahlg + case('HDIAG') + amold => ahdiag + case('CSRG') + amold => acsrg + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('HDIA') + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to HLG' + amold => ahlg + end select +#else + select case(psb_toupper(fafmt)) + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('HDIA') + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to CSR' + amold => acsr + end select +#endif + select case(fafmt) +#if 0 #ifdef PSB_HAVE_LIBRSB case('RSB') call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& & upd=upd,mold=arsb) #endif +#endif + case('ELL','HLL','CSR','DNS') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) + case('HDIA') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) +#if defined(PSB_HAVE_CUDA) + case('ELG','HLG','CSRG') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) + case('HDIAG') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) +#endif case default - call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& - & afmt=fafmt,upd=upd) + write(psb_out_unit,*) 'psb_c_sspasb_opt: Unknown format ',fafmt + call psb_spasb(ap,descp,info,afmt=fafmt,upd=upd,dupl=dupl) end select res = min(0,info) return end function psb_c_sspasb_opt -#endif - function psb_c_sspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) + + function psb_c_sspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/base/psb_z_serial_cbind_mod.F90 b/cbind/base/psb_z_serial_cbind_mod.F90 index 742f7d93f..aad867466 100644 --- a/cbind/base/psb_z_serial_cbind_mod.F90 +++ b/cbind/base/psb_z_serial_cbind_mod.F90 @@ -2,7 +2,7 @@ module psb_z_serial_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod +! use psb_base_string_cbind_mod use psb_base_tools_cbind_mod contains diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 41c170eb0..47aae5207 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -3,8 +3,10 @@ module psb_z_tools_cbind_mod use psb_base_mod use psb_cpenv_mod use psb_objhandle_mod - use psb_base_string_cbind_mod use psb_base_tools_cbind_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif contains @@ -160,6 +162,63 @@ contains return end function psb_c_zgeasb_options + + function psb_c_zgeasb_options_format(xh,cdh,dupl,format) bind(c) result(res) + ! Takes into account format argument as a c string, and uses it to call the appropriate psb_geasb + ! with mold argument + use psb_base_string_cbind_mod, only: stringc2f + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + character(kind=c_char), dimension(*) :: format + integer(psb_c_ipk_), value :: dupl + + ! Local variables + character(len=6) :: fformat + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + ! mold variables +#ifdef PSB_HAVE_CUDA + type(psb_z_vect_cuda), target :: vgpu +#endif + type(psb_z_base_vect_type), target :: vect + class(psb_z_base_vect_type), pointer :: vmold + + ! Select mold based on format + call stringc2f(format,fformat) + + select case (psb_toupper(fformat)) +#ifdef PSB_HAVE_CUDA + case('GPU','DEVICE') + vmold => vgpu +#endif + case('CPU','HOST') + vmold => vect + case default + write(psb_out_unit,*) 'psb_c_zgeasb_options_format: Unknown format ',fformat + vmold => vect + end select + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info,dupl=dupl,mold=vmold) + res = min(0,info) + + return + end function psb_c_zgeasb_options_format + function psb_c_zgefree(xh,cdh) bind(c) result(res) @@ -352,48 +411,130 @@ contains end function psb_c_zspfree -#if 0 - function psb_c_zspasb_opt(mh,cdh,afmt,upd) bind(c) result(res) -#ifdef PSB_HAVE_LIBRSB + function psb_c_zspasb_opt(mh,cdh,afmt,upd,dupl) bind(c) result(res) + +#if 0 +#ifdef PSB_HAVE_LIBRSB use psb_z_rsb_mat_mod #endif +#endif +#if defined(PSB_HAVE_CUDA) + use psb_cuda_mod +#endif + use psb_ext_mod implicit none integer(psb_c_ipk_) :: res - integer(psb_c_ipk_), value :: cdh, mh,upd,dupl + type(psb_c_zspmat) :: mh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: upd,dupl character(c_char) :: afmt(*) integer(psb_c_ipk_) :: info,n character(len=5) :: fafmt + integer(psb_ipk_), parameter :: hksz = 32 + ! mold variables +#if 0 #ifdef PSB_HAVE_LIBRSB type(psb_z_rsb_sparse_mat) :: arsb #endif +#endif + type(psb_z_ell_sparse_mat), target :: aell + type(psb_z_csr_sparse_mat), target :: acsr + type(psb_z_coo_sparse_mat), target :: acoo + type(psb_z_hll_sparse_mat), target :: ahll + type(psb_z_hdia_sparse_mat), target :: ahdia + type(psb_z_dns_sparse_mat), target :: adns +#if defined(PSB_HAVE_CUDA) + type(psb_z_cuda_hlg_sparse_mat), target :: ahlg + type(psb_z_cuda_csrg_sparse_mat), target :: acsrg + type(psb_z_cuda_elg_sparse_mat), target :: aelg +#endif + class(psb_z_base_sparse_mat), pointer :: amold + !Local variables + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap res = -1 - call psb_check_descriptor_handle(cdh,info) - if (info < 0) return - call psb_check_double_spmat_handle(mh,info) - if (info < 0) return - + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if call stringc2f(afmt,fafmt) + + ! Set the mold variable based on afmt + select case (psb_toupper(fafmt)) +#if defined(PSB_HAVE_CUDA) + case('ELG') + amold => aelg + case('HLG') + call psi_set_hksz(hksz) + amold => ahlg + case('CSRG') + amold => acsrg + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to HLG' + amold => ahlg + end select +#else + select case(psb_toupper(fafmt)) + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to CSR' + amold => acsr + end select +#endif + select case(fafmt) +#if 0 #ifdef PSB_HAVE_LIBRSB case('RSB') call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& & upd=upd,mold=arsb) #endif +#endif + case('ELL','HLL','CSR','DNS') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) +#if defined(PSB_HAVE_CUDA) + case('ELG','HLG','CSRG') + call psb_spasb(ap,descp,info,upd=upd,mold=amold) +#endif case default - call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& - & afmt=fafmt,upd=upd) + write(psb_out_unit,*) 'psb_c_zspasb_opt: Unknown format ',fafmt + call psb_spasb(ap,descp,info,afmt=fafmt,upd=upd,dupl=dupl) end select res = min(0,info) return end function psb_c_zspasb_opt -#endif - function psb_c_zspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) + + function psb_c_zspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/psb_c_base.h b/cbind/psb_c_base.h index ec130a9fc..3f04fca3d 100644 --- a/cbind/psb_c_base.h +++ b/cbind/psb_c_base.h @@ -57,6 +57,13 @@ extern "C" { psb_i_t psb_c_get_index_base(); void psb_c_set_index_base(psb_i_t base); + /* GPU environment routines */ + #ifdef PSB_HAVE_CUDA + void psb_c_cuda_init(psb_c_ctxt *cctxt); + void psb_c_cuda_init_opt(psb_c_ctxt *cctxt, psb_m_t ngpu); + void psb_c_cuda_exit(); + psb_m_t psb_c_cuda_getDeviceCount(); + #endif void psb_c_mbcast(psb_c_ctxt cctxt, psb_i_t n, psb_m_t *v, psb_i_t root); void psb_c_ibcast(psb_c_ctxt cctxt, psb_i_t n, psb_i_t *v, psb_i_t root); @@ -79,12 +86,14 @@ extern "C" { psb_i_t psb_c_cdall_nl(psb_i_t nl, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdall_repl(psb_l_t n, psb_c_ctxt cctxt, psb_c_descriptor *cd); psb_i_t psb_c_cdasb(psb_c_descriptor *cd); + psb_i_t psb_c_cdasb_format(psb_c_descriptor *cd, const char *afmt); psb_i_t psb_c_cdfree(psb_c_descriptor *cd); psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd); psb_i_t psb_c_cdins_lidx(psb_i_t nz, const psb_l_t *ja, const psb_i_t *lidx, psb_c_descriptor *cd); bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); bool psb_c_cd_is_asb(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); diff --git a/cbind/psb_c_cbase.h b/cbind/psb_c_cbase.h index d33307afe..dcf379656 100644 --- a/cbind/psb_c_cbase.h +++ b/cbind/psb_c_cbase.h @@ -34,6 +34,8 @@ psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgeasb_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); +psb_i_t psb_c_cgeasb_options_format(psb_c_cvector *xh, psb_c_descriptor *cdh, + const char *fmt, psb_i_t dupl); psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); @@ -56,8 +58,8 @@ psb_i_t psb_c_cset_matasb(psb_c_cspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_cset_matbld(psb_c_cspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_ccopy_mat(psb_c_cspmat *ah,psb_c_cspmat *bh,psb_c_descriptor *cdh); -/* psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, + const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_csprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_cmat_name_print(psb_c_cspmat *mh, char *name); psb_i_t psb_c_cvect_set_scal(psb_c_cvector *xh, psb_c_t val); diff --git a/cbind/psb_c_dbase.h b/cbind/psb_c_dbase.h index c615eba14..8c2a64d31 100644 --- a/cbind/psb_c_dbase.h +++ b/cbind/psb_c_dbase.h @@ -34,6 +34,8 @@ psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeasb_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); +psb_i_t psb_c_dgeasb_options_format(psb_c_dvector *xh, psb_c_descriptor *cdh, + const char *fmt, psb_i_t dupl); psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); @@ -56,8 +58,8 @@ psb_i_t psb_c_dset_matasb(psb_c_dspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_dset_matbld(psb_c_dspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_dcopy_mat(psb_c_dspmat *ah,psb_c_dspmat *bh,psb_c_descriptor *cdh); -/* psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, + const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_dmat_name_print(psb_c_dspmat *mh, char *name); psb_i_t psb_c_dvect_set_scal(psb_c_dvector *xh, psb_d_t val); diff --git a/cbind/psb_c_sbase.h b/cbind/psb_c_sbase.h index 875caccae..f132e707e 100644 --- a/cbind/psb_c_sbase.h +++ b/cbind/psb_c_sbase.h @@ -34,6 +34,8 @@ psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgeasb_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t dupl); +psb_i_t psb_c_sgeasb_options_format(psb_c_svector *xh, psb_c_descriptor *cdh, + const char *fmt, psb_i_t dupl); psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); @@ -55,9 +57,9 @@ psb_i_t psb_c_sset_matupd(psb_c_sspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_sset_matasb(psb_c_sspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_sset_matbld(psb_c_sspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_scopy_mat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_c_descriptor *cdh); - -/* psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ + + psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, + const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_ssprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_smat_name_print(psb_c_sspmat *mh, char *name); psb_i_t psb_c_svect_set_scal(psb_c_svector *xh, psb_s_t val); diff --git a/cbind/psb_c_zbase.h b/cbind/psb_c_zbase.h index 4d67b703d..40bff4853 100644 --- a/cbind/psb_c_zbase.h +++ b/cbind/psb_c_zbase.h @@ -34,6 +34,8 @@ psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgeasb_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); +psb_i_t psb_c_zgeasb_options_format(psb_c_zvector *xh, psb_c_descriptor *cdh, + const char *fmt, psb_i_t dupl); psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); @@ -57,8 +59,8 @@ psb_i_t psb_c_zset_matbld(psb_c_zspmat *mh,psb_c_descriptor *cdh); psb_i_t psb_c_zcopy_mat(psb_c_zspmat *ah,psb_c_zspmat *bh,psb_c_descriptor *cdh); -/* psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, + const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_zsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_zmat_name_print(psb_c_zspmat *mh, char *name); psb_i_t psb_c_zvect_set_scal(psb_c_zvector *xh, psb_z_t val); diff --git a/cbind/test/gpu/Makefile b/cbind/test/gpu/Makefile new file mode 100644 index 000000000..7c0ae80e8 --- /dev/null +++ b/cbind/test/gpu/Makefile @@ -0,0 +1,50 @@ +TOP=../../.. +include $(TOP)/Make.inc +LIBDIR=$(TOP)/lib +INCLUDEDIR=$(TOP)/include +MODDIR=$(TOP)/modules/ +HERE=../.. + +FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) $(CUDA_INCLUDES) +CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) $(CUDA_INCLUDES) + +PSBC_LIBS= -L$(LIBDIR) -lpsb_cbind +# PSB_LIBS=-lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base -L$(LIBDIR) $(PSBGPULDLIBS) +PSB_LIBS=-lpsb_ext -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base -L$(LIBDIR) $(PSBGPULDLIBS) + + +# +# Compilers and such +# + +EXEDIR=./runs + +all: gputest pdedgen3dc + +gputest: gputest.o + $(FLINK) gputest.o -o gputest $(PSBC_LIBS) \ + $(PSB_LIBS) \ + -lm + /bin/mv gputest $(EXEDIR) + +pdedgen3dc: pdegen3dc.o + $(FLINK) pdegen3dc.o -o pdedgen3dc $(PSBC_LIBS) $(PSB_LIBS) -lstdc++ -lm + /bin/mv pdedgen3dc $(EXEDIR) + +.f90.o: + $(MPFC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c $< +.c.o: + $(MPCC) $(CCOPT) $(CINCLUDES) $(CDEFINES) -c $< + + +clean: + /bin/rm -f gputest.o $(EXEDIR)/gputest + /bin/rm -f pdedgen3dc.o $(EXEDIR)/pdedgen3dc +verycleanlib: + (cd ../..; make veryclean) +lib: + (cd ../../; make library) + +tests: all + cd runs ; ./gputest + cd runs ; ./pdedgen3dc < runs/pdegen3d.inp > pdegen3d.out \ No newline at end of file diff --git a/cbind/test/gpu/gputest.c b/cbind/test/gpu/gputest.c new file mode 100644 index 000000000..5c1e5a0ac --- /dev/null +++ b/cbind/test/gpu/gputest.c @@ -0,0 +1,64 @@ +/*----------------------------------------------------------------------------------*/ +/* Parallel Sparse BLAS v 3.9.0 */ +/* (C) Copyright 2017 Salvatore Filippone */ +/* */ +/* Redistribution and use in source and binary forms, with or without */ +/* modification, are permitted provided that the following conditions */ +/* are met: */ +/* 1. Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* 2. Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions, and the following disclaimer in the */ +/* documentation and/or other materials provided with the distribution. */ +/* 3. The name of the PSBLAS group or the names of its contributors may */ +/* not be used to endorse or promote products derived from this */ +/* software without specific written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ +/* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ +/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS */ +/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ +/* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ +/* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ +/* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ +/* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ +/* POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* File: gputest.c */ + +#include +#include +#include +#include + +#include "psb_base_cbind.h" + +int main(int argc, char **argv) +{ + psb_c_ctxt *cctxt; + psb_i_t iam, np; + + // Initialize PSBLAS context + cctxt = psb_c_new_ctxt(); + psb_c_init(cctxt); + // Initialze GPU support +#ifdef PSB_HAVE_CUDA + psb_c_cuda_init(cctxt); +#endif + + psb_c_info(*cctxt, &iam, &np); + printf("Hello from process %d of %d\n", iam, np); +#ifdef PSB_HAVE_CUDA + printf("Number of available GPU devices: %d seen by process %d\n", psb_c_cuda_getDeviceCount(), iam); +#endif + + // Exit from GPU support +#ifdef PSB_HAVE_CUDA + psb_c_cuda_exit(); +#endif + // Finalize PSBLAS context + psb_c_exit(*cctxt); + free(cctxt); +} \ No newline at end of file diff --git a/cbind/test/gpu/pdegen3dc.c b/cbind/test/gpu/pdegen3dc.c new file mode 100644 index 000000000..3096b2b7b --- /dev/null +++ b/cbind/test/gpu/pdegen3dc.c @@ -0,0 +1,496 @@ +/*----------------------------------------------------------------------------------*/ +/* Parallel Sparse BLAS v 3.5.0 */ +/* (C) Copyright 2017 Salvatore Filippone */ +/* */ +/* Redistribution and use in source and binary forms, with or without */ +/* modification, are permitted provided that the following conditions */ +/* are met: */ +/* 1. Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* 2. Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions, and the following disclaimer in the */ +/* documentation and/or other materials provided with the distribution. */ +/* 3. The name of the PSBLAS group or the names of its contributors may */ +/* not be used to endorse or promote products derived from this */ +/* software without specific written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ +/* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ +/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS */ +/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ +/* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ +/* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ +/* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ +/* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ +/* POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* */ +/* File: pdegen3dc.c */ +/* */ +/* Program: pdegen3dc */ +/* This sample program shows how to build and solve a sparse linear */ +/* */ +/* The program solves a linear system based on the partial differential */ +/* equation */ +/* */ +/* */ +/* */ +/* The equation generated is */ +/* */ +/* b1 d d (u) b2 d d (u) a1 d (u)) a2 d (u))) */ +/* - ------ - ------ + ----- + ------ + a3 u = 0 */ +/* dx dx dy dy dx dy */ +/* */ +/* */ +/* with Dirichlet boundary conditions on the unit cube */ +/* */ +/* 0<=x,y,z<=1 */ +/* */ +/* The equation is discretized with finite differences and uniform stepsize; */ +/* the resulting discrete equation is */ +/* */ +/* ( u(x,y,z)(2b1+2b2+a1+a2)+u(x-1,y)(-b1-a1)+u(x,y-1)(-b2-a2)+ */ +/* -u(x+1,y)b1-u(x,y+1)b2)*(1/h**2) */ +/* */ +/* Example adapted from: C.T.Kelley */ +/* Iterative Methods for Linear and Nonlinear Equations */ +/* SIAM 1995 */ +/* */ +/* */ +/* In this sample program the index space of the discretized */ +/* computational domain is first numbered sequentially in a standard way, */ +/* then the corresponding vector is distributed according to an HPF BLOCK */ +/* distribution directive. The discretization ensures there are IDIM */ +/* *internal* points in each direction. */ +/* */ +/*----------------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include "psb_base_cbind.h" +#include "psb_prec_cbind.h" +#include "psb_linsolve_cbind.h" + +#define LINEBUFSIZE 1024 +#define NBMAX 20 +#define DUMPMATRIX 0 + +double a1(double x, double y, double z) +{ + return (1.0 / 80.0); +} +double a2(double x, double y, double z) +{ + return (1.0 / 80.0); +} +double a3(double x, double y, double z) +{ + return (1.0 / 80.0); +} +double c(double x, double y, double z) +{ + return (0.0); +} +double b1(double x, double y, double z) +{ + return (0.0 / sqrt(3.0)); +} +double b2(double x, double y, double z) +{ + return (0.0 / sqrt(3.0)); +} +double b3(double x, double y, double z) +{ + return (0.0 / sqrt(3.0)); +} + +double g(double x, double y, double z) +{ + if (x == 1.0) + { + return (1.0); + } + else if (x == 0.0) + { + return (exp(-y * y - z * z)); + } + else + { + return (0.0); + } +} + +psb_i_t matgen(psb_c_ctxt cctxt, psb_i_t nl, psb_i_t idim, psb_l_t vl[], + psb_c_dspmat *ah, const char *afmt, + psb_c_descriptor *cdh, const char *cdfmt, + psb_c_dvector *xh, psb_c_dvector *bh, psb_c_dvector *rh) +{ + psb_i_t iam, np; + psb_l_t ix, iy, iz, el, glob_row; + psb_i_t i, k, info, ret; + double x, y, z, deltah, sqdeltah, deltah2; + double val[10 * NBMAX], zt[NBMAX]; + psb_l_t irow[10 * NBMAX], icol[10 * NBMAX]; + + info = 0; + psb_c_info(cctxt, &iam, &np); + deltah = (double)1.0 / (idim + 1); + sqdeltah = deltah * deltah; + deltah2 = 2.0 * deltah; + psb_c_set_index_base(0); + for (i = 0; i < nl; i++) + { + glob_row = vl[i]; + // if ((i%100000 == 0)||(i<10)) fprintf(stderr,"%d: generation loop at %d %ld \n",iam,i,glob_row); + el = 0; + ix = glob_row / (idim * idim); + iy = (glob_row - ix * idim * idim) / idim; + iz = glob_row - ix * idim * idim - iy * idim; + x = (ix + 1) * deltah; + y = (iy + 1) * deltah; + z = (iz + 1) * deltah; + zt[0] = 0.0; + /* internal point: build discretization */ + /* term depending on (x-1,y,z) */ + val[el] = -a1(x, y, z) / sqdeltah - b1(x, y, z) / deltah2; + if (ix == 0) + { + zt[0] += g(0.0, y, z) * (-val[el]); + } + else + { + icol[el] = (ix - 1) * idim * idim + (iy)*idim + (iz); + el = el + 1; + } + /* term depending on (x,y-1,z) */ + val[el] = -a2(x, y, z) / sqdeltah - b2(x, y, z) / deltah2; + if (iy == 0) + { + zt[0] += g(x, 0.0, z) * (-val[el]); + } + else + { + icol[el] = (ix)*idim * idim + (iy - 1) * idim + (iz); + el = el + 1; + } + /* term depending on (x,y,z-1)*/ + val[el] = -a3(x, y, z) / sqdeltah - b3(x, y, z) / deltah2; + if (iz == 0) + { + zt[0] += g(x, y, 0.0) * (-val[el]); + } + else + { + icol[el] = (ix)*idim * idim + (iy)*idim + (iz - 1); + el = el + 1; + } + /* term depending on (x,y,z)*/ + val[el] = 2.0 * (a1(x, y, z) + a2(x, y, z) + a3(x, y, z)) / sqdeltah + c(x, y, z); + icol[el] = (ix)*idim * idim + (iy)*idim + (iz); + el = el + 1; + /* term depending on (x,y,z+1) */ + val[el] = -a3(x, y, z) / sqdeltah + b3(x, y, z) / deltah2; + if (iz == idim - 1) + { + zt[0] += g(x, y, 1.0) * (-val[el]); + } + else + { + icol[el] = (ix)*idim * idim + (iy)*idim + (iz + 1); + el = el + 1; + } + /* term depending on (x,y+1,z) */ + val[el] = -a2(x, y, z) / sqdeltah + b2(x, y, z) / deltah2; + if (iy == idim - 1) + { + zt[0] += g(x, 1.0, z) * (-val[el]); + } + else + { + icol[el] = (ix)*idim * idim + (iy + 1) * idim + (iz); + el = el + 1; + } + /* term depending on (x+1,y,z) */ + val[el] = -a1(x, y, z) / sqdeltah + b1(x, y, z) / deltah2; + if (ix == idim - 1) + { + zt[0] += g(1.0, y, z) * (-val[el]); + } + else + { + icol[el] = (ix + 1) * idim * idim + (iy)*idim + (iz); + el = el + 1; + } + for (k = 0; k < el; k++) + irow[k] = glob_row; + if ((ret = psb_c_dspins(el, irow, icol, val, ah, cdh)) != 0) + fprintf(stderr, "From psb_c_dspins: %d\n", ret); + irow[0] = glob_row; + psb_c_dgeins(1, irow, zt, bh, cdh); + zt[0] = 0.0; + psb_c_dgeins(1, irow, zt, xh, cdh); + } + +#ifdef PSB_HAVE_CUDA + info = psb_c_cdasb_format(cdh, cdfmt); + if (info != 0) + return (info); + info = psb_c_dspasb_opt(ah, cdh, afmt, psb_upd_def_, psb_dupl_def_); + if (info != 0) + return (info); + info = psb_c_dgeasb_options_format(xh, cdh, psb_dupl_add_, cdfmt); + if (info != 0) + return (info); + info = psb_c_dgeasb_options_format(bh, cdh, psb_dupl_add_, cdfmt); + if (info != 0) + return (info); + info = psb_c_dgeasb_options_format(rh, cdh, psb_dupl_add_, cdfmt); + if (info != 0) + return (info); +#else + if ((info = psb_c_cdasb(cdh)) != 0) + return (info); + + if ((info = psb_c_dspasb(ah, cdh)) != 0) + return (info); + + if ((info = psb_c_dgeasb(xh, cdh)) != 0) + return (info); + if ((info = psb_c_dgeasb(bh, cdh)) != 0) + return (info); + if ((info = psb_c_dgeasb(rh, cdh)) != 0) + return (info); +#endif + return (info); +} + +int main(int argc, char *argv[]) +{ + psb_c_ctxt *cctxt; + psb_i_t iam, np; + char methd[40], ptype[20], afmt[8], cdfmt[8], buffer[LINEBUFSIZE + 1]; + psb_i_t nparms; + psb_i_t idim, info, istop, itmax, itrace, irst, iter, ret; + psb_c_dprec *ph; + psb_c_dspmat *ah; + psb_c_dvector *bh, *xh, *rh; + psb_i_t nb, nlr, nl; + psb_l_t i, ng, *vl, k; + double t1, t2, eps, err; + double *xv, *bv, *rv; + double one = 1.0, zero = 0.0, res2; + psb_c_SolverOptions options; + psb_c_descriptor *cdh; + FILE *vectfile; + + cctxt = psb_c_new_ctxt(); + psb_c_init(cctxt); +#ifdef PSB_HAVE_CUDA + psb_c_cuda_init(cctxt); +#endif + psb_c_info(*cctxt, &iam, &np); +#ifdef PSB_HAVE_CUDA + if (iam == 0) + printf("Example compiled with GPU support.\n"); +#endif + psb_c_barrier(*cctxt); + if (iam == 0) + { + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%d ", &nparms); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%s", methd); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%s", ptype); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%s", afmt); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%s", cdfmt); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%d", &idim); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%d", &istop); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%d", &itmax); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%d", &itrace); + fgets(buffer, LINEBUFSIZE, stdin); + sscanf(buffer, "%d", &irst); + } + /* Now broadcast the values, and check they're OK */ + psb_c_ibcast(*cctxt, 1, &nparms, 0); + psb_c_hbcast(*cctxt, methd, 0); + psb_c_hbcast(*cctxt, ptype, 0); + psb_c_hbcast(*cctxt, afmt, 0); + psb_c_hbcast(*cctxt, cdfmt, 0); + psb_c_ibcast(*cctxt, 1, &idim, 0); + psb_c_ibcast(*cctxt, 1, &istop, 0); + psb_c_ibcast(*cctxt, 1, &itmax, 0); + psb_c_ibcast(*cctxt, 1, &itrace, 0); + psb_c_ibcast(*cctxt, 1, &irst, 0); + + fflush(stderr); + psb_c_barrier(*cctxt); + + cdh = psb_c_new_descriptor(); + psb_c_set_index_base(0); + + /* Simple minded BLOCK data distribution */ + ng = ((psb_l_t)idim) * idim * idim; + nb = (ng + np - 1) / np; + nl = nb; + if ((ng - iam * nb) < nl) + nl = ng - iam * nb; + if ((vl = malloc(nb * sizeof(psb_l_t))) == NULL) + { + fprintf(stderr, "On %d: malloc failure\n", iam); + psb_c_abort(*cctxt); + } + i = ((psb_l_t)iam) * nb; + for (k = 0; k < nl; k++) + vl[k] = i + k; + + if ((info = psb_c_cdall_vl(nl, vl, *cctxt, cdh)) != 0) + { + fprintf(stderr, "From cdall: %d\nBailing out\n", info); + psb_c_abort(*cctxt); + } + + bh = psb_c_new_dvector(); + xh = psb_c_new_dvector(); + rh = psb_c_new_dvector(); + ah = psb_c_new_dspmat(); + // fprintf(stderr,"From psb_c_new_dspmat: %p\n",ah); + + /* Allocate mem space for sparse matrix and vectors */ + ret = psb_c_dspall(ah, cdh); + // fprintf(stderr,"From psb_c_dspall: %d\n",ret); + psb_c_dgeall(bh, cdh); + psb_c_dgeall(xh, cdh); + psb_c_dgeall(rh, cdh); + + /* Matrix generation */ + if (matgen(*cctxt, nl, idim, vl, ah, afmt, cdh, cdfmt, xh, bh, rh) != 0) + { + fprintf(stderr, "Error during matrix build loop\n"); + psb_c_abort(*cctxt); + } + psb_c_barrier(*cctxt); + /* Set up the preconditioner */ + ph = psb_c_new_dprec(); + psb_c_dprecinit(*cctxt, ph, ptype); + ret = psb_c_dprecbld(ah, cdh, ph); + // fprintf(stderr,"From psb_c_dprecbld: %d\n",ret); + + /* Set up the solver options */ + psb_c_DefaultSolverOptions(&options); + options.eps = 1.e-9; + options.itmax = itmax; + options.irst = irst; + options.itrace = 1; + options.istop = istop; + psb_c_seterraction_ret(); + t1 = psb_c_wtime(); + ret = psb_c_dkrylov(methd, ah, ph, bh, xh, cdh, &options); + t2 = psb_c_wtime(); + iter = options.iter; + err = options.err; + // fprintf(stderr,"From krylov: %d %lf, %d %d\n",iter,err,ret,psb_c_get_errstatus()); + if (psb_c_get_errstatus() != 0) + { + psb_c_print_errmsg(); + } + // fprintf(stderr,"After cleanup %d\n",psb_c_get_errstatus()); + /* Check 2-norm of residual on exit */ + psb_c_dgeaxpby(one, bh, zero, rh, cdh); + psb_c_dspmm(-one, ah, xh, one, rh, cdh); + res2 = psb_c_dgenrm2(rh, cdh); + + if (iam == 0) + { + fprintf(stdout, "Time: %lf\n", (t2 - t1)); + fprintf(stdout, "Iter: %d\n", iter); + fprintf(stdout, "Err: %lg\n", err); + fprintf(stdout, "||r||_2: %lg\n", res2); + } + +#if DUMPATRIX + psb_c_dmat_name_print(ah, "cbindmat.mtx"); + nlr = psb_c_cd_get_local_rows(cdh); + bv = psb_c_dvect_get_cpy(bh); + vectfile = fopen("cbindb.mtx", "w"); + for (i = 0; i < nlr; i++) + fprintf(vectfile, "%lf\n", bv[i]); + fclose(vectfile); + + xv = psb_c_dvect_get_cpy(xh); + nlr = psb_c_cd_get_local_rows(cdh); + for (i = 0; i < nlr; i++) + fprintf(stdout, "SOL: %d %d %lf\n", iam, i, xv[i]); + + rv = psb_c_dvect_get_cpy(rh); + nlr = psb_c_cd_get_local_rows(cdh); + for (i = 0; i < nlr; i++) + fprintf(stdout, "RES: %d %d %lf\n", iam, i, rv[i]); + +#endif + + /* Clean up memory */ + if ((info = psb_c_dprecfree(ph)) != 0) + { + fprintf(stderr, "From dprecfree: %d\nBailing out\n", info); + psb_c_abort(*cctxt); + } + if ((info = psb_c_dgefree(xh, cdh)) != 0) + { + fprintf(stderr, "From dgefree: %d\nBailing out\n", info); + psb_c_abort(*cctxt); + } + if ((info = psb_c_dgefree(bh, cdh)) != 0) + { + fprintf(stderr, "From dgefree: %d\nBailing out\n", info); + psb_c_abort(*cctxt); + } + if ((info = psb_c_dgefree(rh, cdh)) != 0) + { + fprintf(stderr, "From dgefree: %d\nBailing out\n", info); + psb_c_abort(*cctxt); + } + if ((info = psb_c_dspfree(ah, cdh)) != 0) + { + fprintf(stderr, "From dspfree: %d\nBailing out\n", info); + psb_c_abort(*cctxt); + } + + if ((info = psb_c_cdfree(cdh)) != 0) + { + fprintf(stderr, "From cdfree: %d\nBailing out\n", info); + psb_c_abort(*cctxt); + } + // fprintf(stderr,"pointer from cdfree: %p\n",cdh->descriptor); + + /* Clean up object handles */ + free(ph); + free(xh); + free(bh); + free(rh); + free(ah); + free(cdh); + + /* further cleanup */ + free(vl); + // if (iam == 0) fprintf(stderr,"program completed successfully\n"); + + psb_c_barrier(*cctxt); +#ifdef PSB_HAVE_CUDA + psb_c_cuda_exit(); +#endif + /* Finalize PSBLAS context */ + psb_c_exit(*cctxt); + free(cctxt); +} diff --git a/cbind/test/gpu/runs/pdegen3d.inp b/cbind/test/gpu/runs/pdegen3d.inp new file mode 100644 index 000000000..c2bb30719 --- /dev/null +++ b/cbind/test/gpu/runs/pdegen3d.inp @@ -0,0 +1,12 @@ +7 Number of entries below this +BICGSTAB Iterative method BICGSTAB CGS BICG BICGSTABL RGMRES +BJAC ls Preconditioner NONE DIAG BJAC +CSRG A Storage format CSR COO (for CPU) CSRG HLG (for GPU) +DEVICE A Descriptor Storage format HOST/CPU or DEVICE/GPU +080 Domain size (acutal system is this**3) +1 Stopping criterion +80 MAXIT +01 ITRACE +20 IRST restart for RGMRES and BiCGSTABL + + From d7b22f0538164780c2f8ef430c9bfdb9332d8309 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 15 Jan 2026 11:35:05 +0100 Subject: [PATCH 089/175] Fix string_c2f --- Makefile | 2 +- base/modules/auxil/psb_string_mod.f90 | 34 +++++++++++++++++++ cbind/base/Makefile | 3 +- cbind/base/psb_base_string_cbind_mod.f90 | 38 ---------------------- cbind/base/psb_c_serial_cbind_mod.F90 | 6 +--- cbind/base/psb_c_tools_cbind_mod.F90 | 5 ++- cbind/base/psb_d_serial_cbind_mod.F90 | 6 +--- cbind/base/psb_d_tools_cbind_mod.F90 | 5 ++- cbind/base/psb_s_serial_cbind_mod.F90 | 6 +--- cbind/base/psb_s_tools_cbind_mod.F90 | 5 ++- cbind/base/psb_z_serial_cbind_mod.F90 | 6 +--- cbind/base/psb_z_tools_cbind_mod.F90 | 5 ++- cbind/linsolve/psb_clinsolve_cbind_mod.f90 | 2 +- cbind/linsolve/psb_dlinsolve_cbind_mod.f90 | 2 +- cbind/linsolve/psb_slinsolve_cbind_mod.f90 | 2 +- cbind/linsolve/psb_zlinsolve_cbind_mod.f90 | 2 +- cbind/prec/psb_cprec_cbind_mod.f90 | 2 +- cbind/prec/psb_dprec_cbind_mod.f90 | 2 +- cbind/prec/psb_sprec_cbind_mod.f90 | 2 +- cbind/prec/psb_zprec_cbind_mod.f90 | 2 +- cbind/util/psb_c_util_cbind_mod.f90 | 4 +-- cbind/util/psb_d_util_cbind_mod.f90 | 4 +-- cbind/util/psb_s_util_cbind_mod.f90 | 4 +-- cbind/util/psb_z_util_cbind_mod.f90 | 4 +-- cuda/psb_cuda_env_mod.F90 | 23 +------------ 25 files changed, 65 insertions(+), 111 deletions(-) delete mode 100644 cbind/base/psb_base_string_cbind_mod.f90 diff --git a/Makefile b/Makefile index d210accb0..9a302655d 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ dirs: mods: basemods precmods linslvmods utilmods cbindmods extmods $(CUDAMODS) $(OACCMODS) precmods utilmods extmods: basemods linslvmods: precmods -cbindmods: basemods precmods linslvmods utilmods +cbindmods: basemods precmods linslvmods utilmods $(CUDAMODS) oaccmods: extmods cudamods: extmods basemods: diff --git a/base/modules/auxil/psb_string_mod.f90 b/base/modules/auxil/psb_string_mod.f90 index a94576397..254d5e6bb 100644 --- a/base/modules/auxil/psb_string_mod.f90 +++ b/base/modules/auxil/psb_string_mod.f90 @@ -31,7 +31,11 @@ ! module psb_string_mod use psb_const_mod, only : psb_ipk_ + use iso_c_binding + public psb_tolower, psb_toupper, psb_touppers + public psb_stringf2c, psb_stringc2f + interface psb_tolower module procedure psb_tolowerc end interface @@ -127,6 +131,36 @@ contains end subroutine psb_sub_toupperc + subroutine psb_stringc2f(cstring,fstring) + character(c_char) :: cstring(*) + character(len=*) :: fstring + integer :: i + + i = 1 + do + if (cstring(i) == c_null_char) exit + if (i > len(fstring)) exit + fstring(i:i) = cstring(i) + i = i + 1 + end do + do + if (i > len(fstring)) exit + fstring(i:i) = " " + i = i + 1 + end do + return + end subroutine psb_stringc2f + subroutine psb_stringf2c(fstring,cstring) + character(c_char) :: cstring(*) + character(len=*) :: fstring + integer :: i + + do i=1, len(fstring) + cstring(i) = fstring(i:i) + end do + cstring(len(fstring)+1) = c_null_char + return + end subroutine psb_stringf2c end module psb_string_mod diff --git a/cbind/base/Makefile b/cbind/base/Makefile index 3ddc2eb29..ce0493d26 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -9,8 +9,7 @@ FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ - psb_base_tools_cbind_mod.o psb_base_string_cbind_mod.o \ - psb_base_psblas_cbind_mod.o \ + psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o \ psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o \ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ diff --git a/cbind/base/psb_base_string_cbind_mod.f90 b/cbind/base/psb_base_string_cbind_mod.f90 deleted file mode 100644 index 05cd9d7d5..000000000 --- a/cbind/base/psb_base_string_cbind_mod.f90 +++ /dev/null @@ -1,38 +0,0 @@ -module psb_base_string_cbind_mod - use iso_c_binding - -contains - - subroutine stringc2f(cstring,fstring) - character(c_char) :: cstring(*) - character(len=*) :: fstring - integer :: i - - i = 1 - do - if (cstring(i) == c_null_char) exit - if (i > len(fstring)) exit - fstring(i:i) = cstring(i) - i = i + 1 - end do - do - if (i > len(fstring)) exit - fstring(i:i) = " " - i = i + 1 - end do - return - end subroutine stringc2f - - subroutine stringf2c(fstring,cstring) - character(c_char) :: cstring(*) - character(len=*) :: fstring - integer :: i - - do i=1, len(fstring) - cstring(i) = fstring(i:i) - end do - cstring(len(fstring)+1) = c_null_char - return - end subroutine stringf2c - -end module psb_base_string_cbind_mod diff --git a/cbind/base/psb_c_serial_cbind_mod.F90 b/cbind/base/psb_c_serial_cbind_mod.F90 index 04e21d333..805f4965a 100644 --- a/cbind/base/psb_c_serial_cbind_mod.F90 +++ b/cbind/base/psb_c_serial_cbind_mod.F90 @@ -2,7 +2,6 @@ module psb_c_serial_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod -! use psb_base_string_cbind_mod use psb_base_tools_cbind_mod contains @@ -89,7 +88,6 @@ contains function psb_c_cmat_get_nrows(mh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -112,7 +110,6 @@ contains function psb_c_cmat_get_ncols(mh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -135,7 +132,6 @@ contains function psb_c_cmat_name_print(mh,name) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -151,7 +147,7 @@ contains else return end if - call stringc2f(name,fname) + call psb_stringc2f(name,fname) call ap%print(fname,head='PSBLAS Cbinding Interface') diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index b8aedc49c..33e259e63 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -166,7 +166,6 @@ contains function psb_c_cgeasb_options_format(xh,cdh,dupl,format) bind(c) result(res) ! Takes into account format argument as a c string, and uses it to call the appropriate psb_geasb ! with mold argument - use psb_base_string_cbind_mod, only: stringc2f implicit none integer(psb_c_ipk_) :: res type(psb_c_cvector) :: xh @@ -187,7 +186,7 @@ contains class(psb_c_base_vect_type), pointer :: vmold ! Select mold based on format - call stringc2f(format,fformat) + call psb_stringc2f(format,fformat) select case (psb_toupper(fformat)) #ifdef PSB_HAVE_CUDA @@ -466,7 +465,7 @@ contains else return end if - call stringc2f(afmt,fafmt) + call psb_stringc2f(afmt,fafmt) ! Set the mold variable based on afmt select case (psb_toupper(fafmt)) diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index 0e71e9ee2..04d840bd7 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -2,7 +2,6 @@ module psb_d_serial_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod -! use psb_base_string_cbind_mod use psb_base_tools_cbind_mod contains @@ -89,7 +88,6 @@ contains function psb_c_dmat_get_nrows(mh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -112,7 +110,6 @@ contains function psb_c_dmat_get_ncols(mh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -135,7 +132,6 @@ contains function psb_c_dmat_name_print(mh,name) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -151,7 +147,7 @@ contains else return end if - call stringc2f(name,fname) + call psb_stringc2f(name,fname) call ap%print(fname,head='PSBLAS Cbinding Interface') diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index c70d018a8..95ed9e9ed 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -166,7 +166,6 @@ contains function psb_c_dgeasb_options_format(xh,cdh,dupl,format) bind(c) result(res) ! Takes into account format argument as a c string, and uses it to call the appropriate psb_geasb ! with mold argument - use psb_base_string_cbind_mod, only: stringc2f implicit none integer(psb_c_ipk_) :: res type(psb_c_dvector) :: xh @@ -187,7 +186,7 @@ contains class(psb_d_base_vect_type), pointer :: vmold ! Select mold based on format - call stringc2f(format,fformat) + call psb_stringc2f(format,fformat) select case (psb_toupper(fformat)) #ifdef PSB_HAVE_CUDA @@ -467,7 +466,7 @@ contains else return end if - call stringc2f(afmt,fafmt) + call psb_stringc2f(afmt,fafmt) ! Set the mold variable based on afmt select case (psb_toupper(fafmt)) diff --git a/cbind/base/psb_s_serial_cbind_mod.F90 b/cbind/base/psb_s_serial_cbind_mod.F90 index 2610e8833..e9f65bab7 100644 --- a/cbind/base/psb_s_serial_cbind_mod.F90 +++ b/cbind/base/psb_s_serial_cbind_mod.F90 @@ -2,7 +2,6 @@ module psb_s_serial_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod -! use psb_base_string_cbind_mod use psb_base_tools_cbind_mod contains @@ -89,7 +88,6 @@ contains function psb_c_smat_get_nrows(mh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -112,7 +110,6 @@ contains function psb_c_smat_get_ncols(mh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -135,7 +132,6 @@ contains function psb_c_smat_name_print(mh,name) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -151,7 +147,7 @@ contains else return end if - call stringc2f(name,fname) + call psb_stringc2f(name,fname) call ap%print(fname,head='PSBLAS Cbinding Interface') diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index e93bb35fe..0ad7e60d1 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -166,7 +166,6 @@ contains function psb_c_sgeasb_options_format(xh,cdh,dupl,format) bind(c) result(res) ! Takes into account format argument as a c string, and uses it to call the appropriate psb_geasb ! with mold argument - use psb_base_string_cbind_mod, only: stringc2f implicit none integer(psb_c_ipk_) :: res type(psb_c_svector) :: xh @@ -187,7 +186,7 @@ contains class(psb_s_base_vect_type), pointer :: vmold ! Select mold based on format - call stringc2f(format,fformat) + call psb_stringc2f(format,fformat) select case (psb_toupper(fformat)) #ifdef PSB_HAVE_CUDA @@ -467,7 +466,7 @@ contains else return end if - call stringc2f(afmt,fafmt) + call psb_stringc2f(afmt,fafmt) ! Set the mold variable based on afmt select case (psb_toupper(fafmt)) diff --git a/cbind/base/psb_z_serial_cbind_mod.F90 b/cbind/base/psb_z_serial_cbind_mod.F90 index aad867466..fa3d7e12c 100644 --- a/cbind/base/psb_z_serial_cbind_mod.F90 +++ b/cbind/base/psb_z_serial_cbind_mod.F90 @@ -2,7 +2,6 @@ module psb_z_serial_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod -! use psb_base_string_cbind_mod use psb_base_tools_cbind_mod contains @@ -89,7 +88,6 @@ contains function psb_c_zmat_get_nrows(mh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -112,7 +110,6 @@ contains function psb_c_zmat_get_ncols(mh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -135,7 +132,6 @@ contains function psb_c_zmat_name_print(mh,name) bind(c) result(res) use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -151,7 +147,7 @@ contains else return end if - call stringc2f(name,fname) + call psb_stringc2f(name,fname) call ap%print(fname,head='PSBLAS Cbinding Interface') diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 47aae5207..6c530889d 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -166,7 +166,6 @@ contains function psb_c_zgeasb_options_format(xh,cdh,dupl,format) bind(c) result(res) ! Takes into account format argument as a c string, and uses it to call the appropriate psb_geasb ! with mold argument - use psb_base_string_cbind_mod, only: stringc2f implicit none integer(psb_c_ipk_) :: res type(psb_c_zvector) :: xh @@ -187,7 +186,7 @@ contains class(psb_z_base_vect_type), pointer :: vmold ! Select mold based on format - call stringc2f(format,fformat) + call psb_stringc2f(format,fformat) select case (psb_toupper(fformat)) #ifdef PSB_HAVE_CUDA @@ -466,7 +465,7 @@ contains else return end if - call stringc2f(afmt,fafmt) + call psb_stringc2f(afmt,fafmt) ! Set the mold variable based on afmt select case (psb_toupper(fafmt)) diff --git a/cbind/linsolve/psb_clinsolve_cbind_mod.f90 b/cbind/linsolve/psb_clinsolve_cbind_mod.f90 index 29a0b2fc1..da75fa3ce 100644 --- a/cbind/linsolve/psb_clinsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_clinsolve_cbind_mod.f90 @@ -85,7 +85,7 @@ contains end if - call stringc2f(methd,fmethd) + call psb_stringc2f(methd,fmethd) feps = eps fitmax = itmax fitrace = itrace diff --git a/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 b/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 index 35612ec35..542a97e1e 100644 --- a/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 @@ -85,7 +85,7 @@ contains end if - call stringc2f(methd,fmethd) + call psb_stringc2f(methd,fmethd) feps = eps fitmax = itmax fitrace = itrace diff --git a/cbind/linsolve/psb_slinsolve_cbind_mod.f90 b/cbind/linsolve/psb_slinsolve_cbind_mod.f90 index e1823bd87..2efa3afe5 100644 --- a/cbind/linsolve/psb_slinsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_slinsolve_cbind_mod.f90 @@ -85,7 +85,7 @@ contains end if - call stringc2f(methd,fmethd) + call psb_stringc2f(methd,fmethd) feps = eps fitmax = itmax fitrace = itrace diff --git a/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 b/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 index 3234c72ca..fbf1be459 100644 --- a/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 @@ -85,7 +85,7 @@ contains end if - call stringc2f(methd,fmethd) + call psb_stringc2f(methd,fmethd) feps = eps fitmax = itmax fitrace = itrace diff --git a/cbind/prec/psb_cprec_cbind_mod.f90 b/cbind/prec/psb_cprec_cbind_mod.f90 index 6d4de2205..c7f1ec6f0 100644 --- a/cbind/prec/psb_cprec_cbind_mod.f90 +++ b/cbind/prec/psb_cprec_cbind_mod.f90 @@ -39,7 +39,7 @@ contains if (info /= 0) return ph%item = c_loc(precp) - call stringc2f(ptype,fptype) + call psb_stringc2f(ptype,fptype) call psb_precinit(ctxt,precp,fptype,info) diff --git a/cbind/prec/psb_dprec_cbind_mod.f90 b/cbind/prec/psb_dprec_cbind_mod.f90 index edbc427d8..5e598a175 100644 --- a/cbind/prec/psb_dprec_cbind_mod.f90 +++ b/cbind/prec/psb_dprec_cbind_mod.f90 @@ -39,7 +39,7 @@ contains if (info /= 0) return ph%item = c_loc(precp) - call stringc2f(ptype,fptype) + call psb_stringc2f(ptype,fptype) call psb_precinit(ctxt,precp,fptype,info) diff --git a/cbind/prec/psb_sprec_cbind_mod.f90 b/cbind/prec/psb_sprec_cbind_mod.f90 index e450d7d85..6bdade314 100644 --- a/cbind/prec/psb_sprec_cbind_mod.f90 +++ b/cbind/prec/psb_sprec_cbind_mod.f90 @@ -39,7 +39,7 @@ contains if (info /= 0) return ph%item = c_loc(precp) - call stringc2f(ptype,fptype) + call psb_stringc2f(ptype,fptype) call psb_precinit(ctxt,precp,fptype,info) diff --git a/cbind/prec/psb_zprec_cbind_mod.f90 b/cbind/prec/psb_zprec_cbind_mod.f90 index 64b7cddb4..86b66eadf 100644 --- a/cbind/prec/psb_zprec_cbind_mod.f90 +++ b/cbind/prec/psb_zprec_cbind_mod.f90 @@ -39,7 +39,7 @@ contains if (info /= 0) return ph%item = c_loc(precp) - call stringc2f(ptype,fptype) + call psb_stringc2f(ptype,fptype) call psb_precinit(ctxt,precp,fptype,info) diff --git a/cbind/util/psb_c_util_cbind_mod.f90 b/cbind/util/psb_c_util_cbind_mod.f90 index ae3f6cf8d..1f8fc5be2 100644 --- a/cbind/util/psb_c_util_cbind_mod.f90 +++ b/cbind/util/psb_c_util_cbind_mod.f90 @@ -32,8 +32,8 @@ contains return end if - call stringc2f(matrixtitle,mtitle) - call stringc2f(filename,fname) + call psb_stringc2f(matrixtitle,mtitle) + call psb_stringc2f(filename,fname) call mm_mat_write(ap,mtitle,info,filename=fname) diff --git a/cbind/util/psb_d_util_cbind_mod.f90 b/cbind/util/psb_d_util_cbind_mod.f90 index 29fec75b4..45eb87142 100644 --- a/cbind/util/psb_d_util_cbind_mod.f90 +++ b/cbind/util/psb_d_util_cbind_mod.f90 @@ -32,8 +32,8 @@ contains return end if - call stringc2f(matrixtitle,mtitle) - call stringc2f(filename,fname) + call psb_stringc2f(matrixtitle,mtitle) + call psb_stringc2f(filename,fname) call mm_mat_write(ap,mtitle,info,filename=fname) diff --git a/cbind/util/psb_s_util_cbind_mod.f90 b/cbind/util/psb_s_util_cbind_mod.f90 index 0dfe3ddc4..ab1fcabef 100644 --- a/cbind/util/psb_s_util_cbind_mod.f90 +++ b/cbind/util/psb_s_util_cbind_mod.f90 @@ -32,8 +32,8 @@ contains return end if - call stringc2f(matrixtitle,mtitle) - call stringc2f(filename,fname) + call psb_stringc2f(matrixtitle,mtitle) + call psb_stringc2f(filename,fname) call mm_mat_write(ap,mtitle,info,filename=fname) diff --git a/cbind/util/psb_z_util_cbind_mod.f90 b/cbind/util/psb_z_util_cbind_mod.f90 index 792f836f6..2f60e9286 100644 --- a/cbind/util/psb_z_util_cbind_mod.f90 +++ b/cbind/util/psb_z_util_cbind_mod.f90 @@ -32,8 +32,8 @@ contains return end if - call stringc2f(matrixtitle,mtitle) - call stringc2f(filename,fname) + call psb_stringc2f(matrixtitle,mtitle) + call psb_stringc2f(filename,fname) call mm_mat_write(ap,mtitle,info,filename=fname) diff --git a/cuda/psb_cuda_env_mod.F90 b/cuda/psb_cuda_env_mod.F90 index 58250dbc0..21078461f 100644 --- a/cuda/psb_cuda_env_mod.F90 +++ b/cuda/psb_cuda_env_mod.F90 @@ -323,28 +323,7 @@ Contains character(len=256) :: res character :: cstring(256) call psb_C_cpy_NameString(cstring) - call stringc2f(cstring,res) + call psb_stringc2f(cstring,res) end function psb_cuda_DeviceName - - subroutine stringc2f(cstring,fstring) - character(c_char) :: cstring(*) - character(len=*) :: fstring - integer :: i - - i = 1 - do - if (cstring(i) == c_null_char) exit - if (i > len(fstring)) exit - fstring(i:i) = cstring(i) - i = i + 1 - end do - do - if (i > len(fstring)) exit - fstring(i:i) = " " - i = i + 1 - end do - return - end subroutine stringc2f - end module psb_cuda_env_mod From 48070b2cea224f04ffd4edde633a461d6df98e67 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 15 Jan 2026 12:08:24 +0100 Subject: [PATCH 090/175] Further fixes for string_c2f --- cbind/base/psb_base_tools_cbind_mod.F90 | 3 +-- cbind/base/psb_c_comm_cbind_mod.f90 | 1 - cbind/base/psb_c_psblas_cbind_mod.f90 | 1 - cbind/base/psb_cpenv_mod.F90 | 6 +++--- cbind/base/psb_d_comm_cbind_mod.f90 | 1 - cbind/base/psb_d_psblas_cbind_mod.f90 | 1 - cbind/base/psb_s_comm_cbind_mod.f90 | 1 - cbind/base/psb_s_psblas_cbind_mod.f90 | 1 - cbind/base/psb_z_comm_cbind_mod.f90 | 1 - cbind/base/psb_z_psblas_cbind_mod.f90 | 1 - cbind/linsolve/psb_clinsolve_cbind_mod.f90 | 5 ----- cbind/linsolve/psb_dlinsolve_cbind_mod.f90 | 5 ----- cbind/linsolve/psb_slinsolve_cbind_mod.f90 | 5 ----- cbind/linsolve/psb_zlinsolve_cbind_mod.f90 | 5 ----- cbind/prec/psb_cprec_cbind_mod.f90 | 4 ---- cbind/prec/psb_dprec_cbind_mod.f90 | 4 ---- cbind/prec/psb_sprec_cbind_mod.f90 | 4 ---- cbind/prec/psb_zprec_cbind_mod.f90 | 4 ---- cbind/util/psb_c_util_cbind_mod.f90 | 4 ---- cbind/util/psb_d_util_cbind_mod.f90 | 4 ---- cbind/util/psb_s_util_cbind_mod.f90 | 4 ---- cbind/util/psb_z_util_cbind_mod.f90 | 4 ---- 22 files changed, 4 insertions(+), 65 deletions(-) diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 index 70d4c7426..8cb6b65ce 100644 --- a/cbind/base/psb_base_tools_cbind_mod.F90 +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -272,7 +272,6 @@ contains end function psb_c_cdasb function psb_c_cdasb_format(cdh,format) bind(c,name='psb_c_cdasb_format') result(res) - use psb_base_string_cbind_mod, only: stringc2f implicit none ! Takes as input the desired format bewten CPU or GPU, and assembles accordingly ! via the mold parameter of psb_cdasb @@ -292,7 +291,7 @@ contains type(psb_i_base_vect_type), target :: ivect class(psb_i_base_vect_type), pointer :: imold - call stringc2f(format,fformat) + call psb_stringc2f(format,fformat) res = -1 select case (psb_toupper(fformat)) diff --git a/cbind/base/psb_c_comm_cbind_mod.f90 b/cbind/base/psb_c_comm_cbind_mod.f90 index 2e1d305b2..9d5b9ef48 100644 --- a/cbind/base/psb_c_comm_cbind_mod.f90 +++ b/cbind/base/psb_c_comm_cbind_mod.f90 @@ -2,7 +2,6 @@ module psb_c_comm_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains diff --git a/cbind/base/psb_c_psblas_cbind_mod.f90 b/cbind/base/psb_c_psblas_cbind_mod.f90 index aea9bad2b..cad716578 100644 --- a/cbind/base/psb_c_psblas_cbind_mod.f90 +++ b/cbind/base/psb_c_psblas_cbind_mod.f90 @@ -2,7 +2,6 @@ module psb_c_psblas_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains diff --git a/cbind/base/psb_cpenv_mod.F90 b/cbind/base/psb_cpenv_mod.F90 index 394b8157c..ccc59789a 100644 --- a/cbind/base/psb_cpenv_mod.F90 +++ b/cbind/base/psb_cpenv_mod.F90 @@ -444,8 +444,8 @@ contains end subroutine psb_c_hbcast function psb_c_f2c_errmsg(cmesg,len) bind(c) result(res) - use psb_base_mod, only : psb_errpop,psb_max_errmsg_len_, psb_ctxt_type - use psb_base_string_cbind_mod + use psb_base_mod, only : psb_errpop,psb_max_errmsg_len_, & + & psb_ctxt_type, psb_stringc2f implicit none character(c_char), intent(inout) :: cmesg(*) integer(psb_c_ipk_), intent(in), value :: len @@ -464,7 +464,7 @@ contains il = len_trim(tmp) il = min(il,len-ll) !write(0,*) 'loop f2c_errmsg: ', ll,il - call stringf2c(tmp(1:il),cmesg(ll:ll+il)) + call psb_stringf2c(tmp(1:il),cmesg(ll:ll+il)) cmesg(ll+il)=c_new_line ll = ll+il+1 end do diff --git a/cbind/base/psb_d_comm_cbind_mod.f90 b/cbind/base/psb_d_comm_cbind_mod.f90 index 653a24849..49371e3aa 100644 --- a/cbind/base/psb_d_comm_cbind_mod.f90 +++ b/cbind/base/psb_d_comm_cbind_mod.f90 @@ -2,7 +2,6 @@ module psb_d_comm_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains diff --git a/cbind/base/psb_d_psblas_cbind_mod.f90 b/cbind/base/psb_d_psblas_cbind_mod.f90 index da5aa2e21..1a8874c53 100644 --- a/cbind/base/psb_d_psblas_cbind_mod.f90 +++ b/cbind/base/psb_d_psblas_cbind_mod.f90 @@ -2,7 +2,6 @@ module psb_d_psblas_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains diff --git a/cbind/base/psb_s_comm_cbind_mod.f90 b/cbind/base/psb_s_comm_cbind_mod.f90 index 8ad27124e..c63d3ffb9 100644 --- a/cbind/base/psb_s_comm_cbind_mod.f90 +++ b/cbind/base/psb_s_comm_cbind_mod.f90 @@ -2,7 +2,6 @@ module psb_s_comm_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains diff --git a/cbind/base/psb_s_psblas_cbind_mod.f90 b/cbind/base/psb_s_psblas_cbind_mod.f90 index 97cc5284e..eeabfdbcf 100644 --- a/cbind/base/psb_s_psblas_cbind_mod.f90 +++ b/cbind/base/psb_s_psblas_cbind_mod.f90 @@ -2,7 +2,6 @@ module psb_s_psblas_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains diff --git a/cbind/base/psb_z_comm_cbind_mod.f90 b/cbind/base/psb_z_comm_cbind_mod.f90 index 44ee96c3e..4e4369513 100644 --- a/cbind/base/psb_z_comm_cbind_mod.f90 +++ b/cbind/base/psb_z_comm_cbind_mod.f90 @@ -2,7 +2,6 @@ module psb_z_comm_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains diff --git a/cbind/base/psb_z_psblas_cbind_mod.f90 b/cbind/base/psb_z_psblas_cbind_mod.f90 index 0254860ba..511b390f1 100644 --- a/cbind/base/psb_z_psblas_cbind_mod.f90 +++ b/cbind/base/psb_z_psblas_cbind_mod.f90 @@ -2,7 +2,6 @@ module psb_z_psblas_cbind_mod use iso_c_binding use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains diff --git a/cbind/linsolve/psb_clinsolve_cbind_mod.f90 b/cbind/linsolve/psb_clinsolve_cbind_mod.f90 index da75fa3ce..1480f0234 100644 --- a/cbind/linsolve/psb_clinsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_clinsolve_cbind_mod.f90 @@ -11,7 +11,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_cspmat) :: ah @@ -36,7 +35,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_cspmat) :: ah @@ -108,7 +106,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_cspmat) :: ah @@ -124,7 +121,6 @@ contains end function psb_c_crichardson - function psb_c_crichardson_opt(ah,ph,bh,xh,eps,cdh,& & itmax,iter,err,itrace,irst,istop) bind(c) result(res) use psb_base_mod @@ -132,7 +128,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_cspmat) :: ah diff --git a/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 b/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 index 542a97e1e..92cb02fa9 100644 --- a/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_dlinsolve_cbind_mod.f90 @@ -11,7 +11,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_dspmat) :: ah @@ -36,7 +35,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_dspmat) :: ah @@ -108,7 +106,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_dspmat) :: ah @@ -124,7 +121,6 @@ contains end function psb_c_drichardson - function psb_c_drichardson_opt(ah,ph,bh,xh,eps,cdh,& & itmax,iter,err,itrace,irst,istop) bind(c) result(res) use psb_base_mod @@ -132,7 +128,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_dspmat) :: ah diff --git a/cbind/linsolve/psb_slinsolve_cbind_mod.f90 b/cbind/linsolve/psb_slinsolve_cbind_mod.f90 index 2efa3afe5..ed7c13e52 100644 --- a/cbind/linsolve/psb_slinsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_slinsolve_cbind_mod.f90 @@ -11,7 +11,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_sspmat) :: ah @@ -36,7 +35,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_sspmat) :: ah @@ -108,7 +106,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_sspmat) :: ah @@ -124,7 +121,6 @@ contains end function psb_c_srichardson - function psb_c_srichardson_opt(ah,ph,bh,xh,eps,cdh,& & itmax,iter,err,itrace,irst,istop) bind(c) result(res) use psb_base_mod @@ -132,7 +128,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_sspmat) :: ah diff --git a/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 b/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 index fbf1be459..8a3312c18 100644 --- a/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_zlinsolve_cbind_mod.f90 @@ -11,7 +11,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_zspmat) :: ah @@ -36,7 +35,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_zspmat) :: ah @@ -108,7 +106,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_zspmat) :: ah @@ -124,7 +121,6 @@ contains end function psb_c_zrichardson - function psb_c_zrichardson_opt(ah,ph,bh,xh,eps,cdh,& & itmax,iter,err,itrace,irst,istop) bind(c) result(res) use psb_base_mod @@ -132,7 +128,6 @@ contains use psb_linsolve_mod use psb_objhandle_mod use psb_prec_cbind_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_zspmat) :: ah diff --git a/cbind/prec/psb_cprec_cbind_mod.f90 b/cbind/prec/psb_cprec_cbind_mod.f90 index c7f1ec6f0..6c9504338 100644 --- a/cbind/prec/psb_cprec_cbind_mod.f90 +++ b/cbind/prec/psb_cprec_cbind_mod.f90 @@ -3,7 +3,6 @@ module psb_cprec_cbind_mod use iso_c_binding use psb_prec_mod, only : psb_cprec_type use psb_objhandle_mod - use psb_base_string_cbind_mod type, bind(c) :: psb_c_cprec type(c_ptr) :: item = c_null_ptr @@ -16,7 +15,6 @@ contains use psb_base_mod use psb_prec_mod use psb_cpenv_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_object_type), value :: cctxt @@ -53,7 +51,6 @@ contains use psb_base_mod use psb_prec_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -95,7 +92,6 @@ contains use psb_base_mod use psb_prec_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/prec/psb_dprec_cbind_mod.f90 b/cbind/prec/psb_dprec_cbind_mod.f90 index 5e598a175..9aa1c7bc8 100644 --- a/cbind/prec/psb_dprec_cbind_mod.f90 +++ b/cbind/prec/psb_dprec_cbind_mod.f90 @@ -3,7 +3,6 @@ module psb_dprec_cbind_mod use iso_c_binding use psb_prec_mod, only : psb_dprec_type use psb_objhandle_mod - use psb_base_string_cbind_mod type, bind(c) :: psb_c_dprec type(c_ptr) :: item = c_null_ptr @@ -16,7 +15,6 @@ contains use psb_base_mod use psb_prec_mod use psb_cpenv_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_object_type), value :: cctxt @@ -53,7 +51,6 @@ contains use psb_base_mod use psb_prec_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -95,7 +92,6 @@ contains use psb_base_mod use psb_prec_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/prec/psb_sprec_cbind_mod.f90 b/cbind/prec/psb_sprec_cbind_mod.f90 index 6bdade314..dc404cd70 100644 --- a/cbind/prec/psb_sprec_cbind_mod.f90 +++ b/cbind/prec/psb_sprec_cbind_mod.f90 @@ -3,7 +3,6 @@ module psb_sprec_cbind_mod use iso_c_binding use psb_prec_mod, only : psb_sprec_type use psb_objhandle_mod - use psb_base_string_cbind_mod type, bind(c) :: psb_c_sprec type(c_ptr) :: item = c_null_ptr @@ -16,7 +15,6 @@ contains use psb_base_mod use psb_prec_mod use psb_cpenv_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_object_type), value :: cctxt @@ -53,7 +51,6 @@ contains use psb_base_mod use psb_prec_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -95,7 +92,6 @@ contains use psb_base_mod use psb_prec_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/prec/psb_zprec_cbind_mod.f90 b/cbind/prec/psb_zprec_cbind_mod.f90 index 86b66eadf..42a87a1ab 100644 --- a/cbind/prec/psb_zprec_cbind_mod.f90 +++ b/cbind/prec/psb_zprec_cbind_mod.f90 @@ -3,7 +3,6 @@ module psb_zprec_cbind_mod use iso_c_binding use psb_prec_mod, only : psb_zprec_type use psb_objhandle_mod - use psb_base_string_cbind_mod type, bind(c) :: psb_c_zprec type(c_ptr) :: item = c_null_ptr @@ -16,7 +15,6 @@ contains use psb_base_mod use psb_prec_mod use psb_cpenv_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res type(psb_c_object_type), value :: cctxt @@ -53,7 +51,6 @@ contains use psb_base_mod use psb_prec_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -95,7 +92,6 @@ contains use psb_base_mod use psb_prec_mod use psb_objhandle_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/util/psb_c_util_cbind_mod.f90 b/cbind/util/psb_c_util_cbind_mod.f90 index 1f8fc5be2..712b92824 100644 --- a/cbind/util/psb_c_util_cbind_mod.f90 +++ b/cbind/util/psb_c_util_cbind_mod.f90 @@ -4,14 +4,12 @@ module psb_cutil_cbind_mod use psb_util_mod use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains function psb_c_cmm_mat_write(ah,matrixtitle,filename) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -44,7 +42,6 @@ contains function psb_c_cglobal_mat_write(ah,cdh) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -87,7 +84,6 @@ contains function psb_c_cglobal_vec_write(vh,cdh) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/util/psb_d_util_cbind_mod.f90 b/cbind/util/psb_d_util_cbind_mod.f90 index 45eb87142..66b50b3c8 100644 --- a/cbind/util/psb_d_util_cbind_mod.f90 +++ b/cbind/util/psb_d_util_cbind_mod.f90 @@ -4,14 +4,12 @@ module psb_dutil_cbind_mod use psb_util_mod use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains function psb_c_dmm_mat_write(ah,matrixtitle,filename) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -44,7 +42,6 @@ contains function psb_c_dglobal_mat_write(ah,cdh) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -87,7 +84,6 @@ contains function psb_c_dglobal_vec_write(vh,cdh) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/util/psb_s_util_cbind_mod.f90 b/cbind/util/psb_s_util_cbind_mod.f90 index ab1fcabef..2fe32cb4a 100644 --- a/cbind/util/psb_s_util_cbind_mod.f90 +++ b/cbind/util/psb_s_util_cbind_mod.f90 @@ -4,14 +4,12 @@ module psb_sutil_cbind_mod use psb_util_mod use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains function psb_c_smm_mat_write(ah,matrixtitle,filename) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -44,7 +42,6 @@ contains function psb_c_sglobal_mat_write(ah,cdh) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -87,7 +84,6 @@ contains function psb_c_sglobal_vec_write(vh,cdh) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res diff --git a/cbind/util/psb_z_util_cbind_mod.f90 b/cbind/util/psb_z_util_cbind_mod.f90 index 2f60e9286..9d627d1eb 100644 --- a/cbind/util/psb_z_util_cbind_mod.f90 +++ b/cbind/util/psb_z_util_cbind_mod.f90 @@ -4,14 +4,12 @@ module psb_zutil_cbind_mod use psb_util_mod use psb_base_mod use psb_objhandle_mod - use psb_base_string_cbind_mod contains function psb_c_zmm_mat_write(ah,matrixtitle,filename) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -44,7 +42,6 @@ contains function psb_c_zglobal_mat_write(ah,cdh) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res @@ -87,7 +84,6 @@ contains function psb_c_zglobal_vec_write(vh,cdh) bind(c) result(res) use psb_base_mod use psb_util_mod - use psb_base_string_cbind_mod implicit none integer(psb_c_ipk_) :: res From 3b2630911b7ed78f53ae800cc04830cfdea1493c Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 15 Jan 2026 14:42:34 +0100 Subject: [PATCH 091/175] Fix dependency on CBIND penv --- cbind/base/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cbind/base/Makefile b/cbind/base/Makefile index ce0493d26..9dc9286fb 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -60,7 +60,7 @@ psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o: psb_base_tools_cbind_mod.o psb_ob psb_base_psblas_cbind_mod.o: psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o -psb_cpenv_mod.o: psb_base_string_cbind_mod.o psb_objhandle_mod.o +psb_cpenv_mod.o: psb_objhandle_mod.o $(FC) $(FCOPT) $(FINCLUDES) $(FCUDEFINES) -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o veryclean: clean From 78c33d3631ea0b0a5cf29bd6171f9379a1270259 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 15 Jan 2026 14:50:35 +0100 Subject: [PATCH 092/175] Fix tools_cbind --- cbind/base/Makefile | 6 +-- cbind/base/psb_c_tools_cbind_mod.F90 | 68 ++++++++++++------------ cbind/base/psb_d_tools_cbind_mod.F90 | 78 ++++++++++++++-------------- cbind/base/psb_s_tools_cbind_mod.F90 | 78 ++++++++++++++-------------- cbind/base/psb_z_tools_cbind_mod.F90 | 68 ++++++++++++------------ 5 files changed, 145 insertions(+), 153 deletions(-) diff --git a/cbind/base/Makefile b/cbind/base/Makefile index 9dc9286fb..9d4d734c6 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -39,7 +39,7 @@ lib: objs $(COBJS): $(CMOD) psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_mod.o \ - psb_base_string_cbind_mod.o psb_base_psblas_cbind_mod.o \ + psb_base_psblas_cbind_mod.o \ psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o \ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ @@ -47,7 +47,7 @@ psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_m psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o \ psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o -psb_base_tools_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_string_cbind_mod.o +psb_base_tools_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o \ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o \ @@ -56,7 +56,7 @@ psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o \ psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o \ psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o \ psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o \ -psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o: psb_base_tools_cbind_mod.o psb_objhandle_mod.o psb_base_string_cbind_mod.o +psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o: psb_base_tools_cbind_mod.o psb_objhandle_mod.o psb_base_psblas_cbind_mod.o: psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index 33e259e63..a3fa17721 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -470,43 +470,41 @@ contains ! Set the mold variable based on afmt select case (psb_toupper(fafmt)) #if defined(PSB_HAVE_CUDA) - case('ELG') - amold => aelg - case('HLG') - call psi_set_hksz(hksz) - amold => ahlg - case('CSRG') - amold => acsrg - case('ELL') - amold => aell - case('HLL') - call psi_set_hksz(hksz) - amold => ahll - case('CSR') - amold => acsr - case('DNS') - amold => adns - case default - write(*,*) 'Unknown format defaulting to HLG' - amold => ahlg - end select + case('ELG') + amold => aelg + case('HLG') + call psi_set_hksz(hksz) + amold => ahlg + case('CSRG') + amold => acsrg + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to HLG' + amold => ahlg #else - select case(psb_toupper(fafmt)) - case('ELL') - amold => aell - case('HLL') - call psi_set_hksz(hksz) - amold => ahll - amold => ahdia - case('CSR') - amold => acsr - case('DNS') - amold => adns - case default - write(*,*) 'Unknown format defaulting to CSR' - amold => acsr - end select + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to CSR' + amold => acsr #endif + end select select case(fafmt) #if 0 diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 95ed9e9ed..935b6cc6f 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -471,48 +471,46 @@ contains ! Set the mold variable based on afmt select case (psb_toupper(fafmt)) #if defined(PSB_HAVE_CUDA) - case('ELG') - amold => aelg - case('HLG') - call psi_set_hksz(hksz) - amold => ahlg - case('HDIAG') - amold => ahdiag - case('CSRG') - amold => acsrg - case('ELL') - amold => aell - case('HLL') - call psi_set_hksz(hksz) - amold => ahll - case('HDIA') - amold => ahdia - case('CSR') - amold => acsr - case('DNS') - amold => adns - case default - write(*,*) 'Unknown format defaulting to HLG' - amold => ahlg - end select + case('ELG') + amold => aelg + case('HLG') + call psi_set_hksz(hksz) + amold => ahlg + case('HDIAG') + amold => ahdiag + case('CSRG') + amold => acsrg + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('HDIA') + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to HLG' + amold => ahlg #else - select case(psb_toupper(fafmt)) - case('ELL') - amold => aell - case('HLL') - call psi_set_hksz(hksz) - amold => ahll - case('HDIA') - amold => ahdia - case('CSR') - amold => acsr - case('DNS') - amold => adns - case default - write(*,*) 'Unknown format defaulting to CSR' - amold => acsr - end select + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('HDIA') + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to CSR' + amold => acsr #endif + end select select case(fafmt) #if 0 diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 0ad7e60d1..7633564f6 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -471,48 +471,46 @@ contains ! Set the mold variable based on afmt select case (psb_toupper(fafmt)) #if defined(PSB_HAVE_CUDA) - case('ELG') - amold => aelg - case('HLG') - call psi_set_hksz(hksz) - amold => ahlg - case('HDIAG') - amold => ahdiag - case('CSRG') - amold => acsrg - case('ELL') - amold => aell - case('HLL') - call psi_set_hksz(hksz) - amold => ahll - case('HDIA') - amold => ahdia - case('CSR') - amold => acsr - case('DNS') - amold => adns - case default - write(*,*) 'Unknown format defaulting to HLG' - amold => ahlg - end select + case('ELG') + amold => aelg + case('HLG') + call psi_set_hksz(hksz) + amold => ahlg + case('HDIAG') + amold => ahdiag + case('CSRG') + amold => acsrg + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('HDIA') + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to HLG' + amold => ahlg #else - select case(psb_toupper(fafmt)) - case('ELL') - amold => aell - case('HLL') - call psi_set_hksz(hksz) - amold => ahll - case('HDIA') - amold => ahdia - case('CSR') - amold => acsr - case('DNS') - amold => adns - case default - write(*,*) 'Unknown format defaulting to CSR' - amold => acsr - end select + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('HDIA') + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to CSR' + amold => acsr #endif + end select select case(fafmt) #if 0 diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 6c530889d..0ca9424df 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -470,43 +470,41 @@ contains ! Set the mold variable based on afmt select case (psb_toupper(fafmt)) #if defined(PSB_HAVE_CUDA) - case('ELG') - amold => aelg - case('HLG') - call psi_set_hksz(hksz) - amold => ahlg - case('CSRG') - amold => acsrg - case('ELL') - amold => aell - case('HLL') - call psi_set_hksz(hksz) - amold => ahll - case('CSR') - amold => acsr - case('DNS') - amold => adns - case default - write(*,*) 'Unknown format defaulting to HLG' - amold => ahlg - end select + case('ELG') + amold => aelg + case('HLG') + call psi_set_hksz(hksz) + amold => ahlg + case('CSRG') + amold => acsrg + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to HLG' + amold => ahlg #else - select case(psb_toupper(fafmt)) - case('ELL') - amold => aell - case('HLL') - call psi_set_hksz(hksz) - amold => ahll - amold => ahdia - case('CSR') - amold => acsr - case('DNS') - amold => adns - case default - write(*,*) 'Unknown format defaulting to CSR' - amold => acsr - end select + case('ELL') + amold => aell + case('HLL') + call psi_set_hksz(hksz) + amold => ahll + amold => ahdia + case('CSR') + amold => acsr + case('DNS') + amold => adns + case default + write(*,*) 'Unknown format defaulting to CSR' + amold => acsr #endif + end select select case(fafmt) #if 0 From aa9bae36bce7a3967f74f32b70e1298107bccd7e Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 15 Jan 2026 14:56:06 +0100 Subject: [PATCH 093/175] Fix cbind build with CMake --- cbind/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/cbind/CMakeLists.txt b/cbind/CMakeLists.txt index 1f7bb259e..18bd3ad72 100644 --- a/cbind/CMakeLists.txt +++ b/cbind/CMakeLists.txt @@ -10,7 +10,6 @@ set(PSB_cbind_source_files base/psb_d_serial_cbind_mod.F90 base/psb_c_tools_cbind_mod.F90 base/psb_c_serial_cbind_mod.F90 - base/psb_base_string_cbind_mod.f90 base/psb_base_tools_cbind_mod.F90 base/psb_z_comm_cbind_mod.f90 base/psb_s_serial_cbind_mod.F90 From fe7a4174e061b800c9564d27e81ec517956e8a5d Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 16 Jan 2026 10:29:16 +0100 Subject: [PATCH 094/175] Fix build for CBIND --- base/modules/auxil/psb_string_mod.f90 | 4 ++-- cbind/base/psb_cpenv_mod.F90 | 28 ++------------------------- cuda/psb_cuda_env_mod.F90 | 2 +- 3 files changed, 5 insertions(+), 29 deletions(-) diff --git a/base/modules/auxil/psb_string_mod.f90 b/base/modules/auxil/psb_string_mod.f90 index 254d5e6bb..72f5d870c 100644 --- a/base/modules/auxil/psb_string_mod.f90 +++ b/base/modules/auxil/psb_string_mod.f90 @@ -33,8 +33,8 @@ module psb_string_mod use psb_const_mod, only : psb_ipk_ use iso_c_binding - public psb_tolower, psb_toupper, psb_touppers - public psb_stringf2c, psb_stringc2f + public psb_tolower, psb_toupper, psb_touppers,& + & psb_stringf2c, psb_stringc2f interface psb_tolower module procedure psb_tolowerc diff --git a/cbind/base/psb_cpenv_mod.F90 b/cbind/base/psb_cpenv_mod.F90 index ccc59789a..c6b3d9aa7 100644 --- a/cbind/base/psb_cpenv_mod.F90 +++ b/cbind/base/psb_cpenv_mod.F90 @@ -1,5 +1,6 @@ module psb_cpenv_mod use iso_c_binding + use psb_base_mod use psb_objhandle_mod integer, private :: psb_c_index_base=0 @@ -22,7 +23,6 @@ contains end subroutine psb_c_set_index_base function psb_c_get_errstatus() bind(c) result(res) - use psb_base_mod, only : psb_get_errstatus, psb_ctxt_type implicit none integer(psb_c_ipk_) :: res @@ -31,7 +31,6 @@ contains end function psb_c_get_errstatus subroutine psb_c_init(cctxt) bind(c) - use psb_base_mod, only : psb_init, psb_ctxt_type implicit none type(psb_c_object_type) :: cctxt @@ -52,7 +51,6 @@ contains #ifdef PSB_HAVE_CUDA subroutine psb_c_cuda_init(cctxt) bind(c, name="psb_c_cuda_init") - use psb_base_mod, only : psb_ctxt_type use psb_cuda_mod, only : psb_cuda_init implicit none @@ -68,7 +66,6 @@ contains end subroutine psb_c_cuda_init subroutine psb_c_cuda_init_opt(cctxt,cdevice) bind(c, name="psb_c_cuda_init_opt") - use psb_base_mod, only : psb_ctxt_type use psb_cuda_mod, only : psb_cuda_init implicit none @@ -114,7 +111,6 @@ contains ! Get MPI_Fint from C, psb_c_object_type and start a psb_ctxt_type ! context from it. subroutine psb_c_init_from_fint(cctxt,fint) bind(c) - use psb_base_mod, only : psb_init, psb_ctxt_type implicit none type(psb_c_object_type) :: cctxt @@ -180,7 +176,6 @@ contains end function subroutine psb_c_exit_ctxt(cctxt) bind(c) - use psb_base_mod, only : psb_exit, psb_ctxt_type type(psb_c_object_type), value :: cctxt type(psb_ctxt_type), pointer :: ctxt @@ -193,7 +188,6 @@ contains end subroutine psb_c_exit_ctxt subroutine psb_c_exit(cctxt) bind(c) - use psb_base_mod, only : psb_exit, psb_ctxt_type type(psb_c_object_type), value :: cctxt type(psb_ctxt_type), pointer :: ctxt @@ -207,7 +201,6 @@ contains end subroutine psb_c_exit subroutine psb_c_abort(cctxt) bind(c) - use psb_base_mod, only : psb_abort, psb_ctxt_type type(psb_c_object_type), value :: cctxt type(psb_ctxt_type), pointer :: ctxt @@ -217,7 +210,6 @@ contains end subroutine psb_c_abort subroutine psb_c_check_error(cctxt) bind(c) - use psb_base_mod, only : psb_init, psb_ctxt_type, psb_check_error implicit none type(psb_c_object_type), value :: cctxt @@ -230,7 +222,6 @@ contains end subroutine psb_c_check_error subroutine psb_c_info(cctxt,iam,np) bind(c) - use psb_base_mod, only : psb_info, psb_ctxt_type type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_) :: iam,np @@ -241,7 +232,6 @@ contains end subroutine psb_c_info subroutine psb_c_barrier(cctxt) bind(c) - use psb_base_mod, only : psb_barrier, psb_ctxt_type type(psb_c_object_type), value :: cctxt type(psb_ctxt_type), pointer :: ctxt @@ -250,13 +240,11 @@ contains end subroutine psb_c_barrier real(c_double) function psb_c_wtime() bind(c) - use psb_base_mod, only : psb_wtime, psb_ctxt_type psb_c_wtime = psb_wtime() end function psb_c_wtime subroutine psb_c_mbcast(cctxt,n,v,root) bind(c) - use psb_base_mod, only : psb_bcast, psb_ctxt_type implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: n, root @@ -277,7 +265,6 @@ contains end subroutine psb_c_mbcast subroutine psb_c_ibcast(cctxt,n,v,root) bind(c) - use psb_base_mod, only : psb_bcast, psb_ctxt_type implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: n, root @@ -298,7 +285,6 @@ contains end subroutine psb_c_ibcast subroutine psb_c_lbcast(cctxt,n,v,root) bind(c) - use psb_base_mod, only : psb_bcast, psb_ctxt_type implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: n, root @@ -318,7 +304,6 @@ contains end subroutine psb_c_lbcast subroutine psb_c_ebcast(cctxt,n,v,root) bind(c) - use psb_base_mod, only : psb_bcast, psb_ctxt_type implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: n, root @@ -338,7 +323,6 @@ contains end subroutine psb_c_ebcast subroutine psb_c_sbcast(cctxt,n,v,root) bind(c) - use psb_base_mod implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: n, root @@ -358,7 +342,6 @@ contains end subroutine psb_c_sbcast subroutine psb_c_dbcast(cctxt,n,v,root) bind(c) - use psb_base_mod, only : psb_bcast, psb_ctxt_type implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: n, root @@ -379,7 +362,6 @@ contains subroutine psb_c_cbcast(cctxt,n,v,root) bind(c) - use psb_base_mod, only : psb_bcast, psb_ctxt_type implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: n, root @@ -399,7 +381,6 @@ contains end subroutine psb_c_cbcast subroutine psb_c_zbcast(cctxt,n,v,root) bind(c) - use psb_base_mod implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: n, root @@ -419,7 +400,6 @@ contains end subroutine psb_c_zbcast subroutine psb_c_hbcast(cctxt,v,root) bind(c) - use psb_base_mod, only : psb_bcast, psb_info, psb_ipk_, psb_ctxt_type implicit none type(psb_c_object_type), value :: cctxt integer(psb_c_ipk_), value :: root @@ -444,8 +424,7 @@ contains end subroutine psb_c_hbcast function psb_c_f2c_errmsg(cmesg,len) bind(c) result(res) - use psb_base_mod, only : psb_errpop,psb_max_errmsg_len_, & - & psb_ctxt_type, psb_stringc2f + use psb_string_mod implicit none character(c_char), intent(inout) :: cmesg(*) integer(psb_c_ipk_), intent(in), value :: len @@ -474,17 +453,14 @@ contains end function psb_c_f2c_errmsg subroutine psb_c_seterraction_ret() bind(c) - use psb_base_mod, only : psb_set_erraction, psb_act_ret_, psb_ctxt_type call psb_set_erraction(psb_act_ret_) end subroutine psb_c_seterraction_ret subroutine psb_c_seterraction_print() bind(c) - use psb_base_mod, only : psb_set_erraction, psb_act_print_, psb_ctxt_type call psb_set_erraction(psb_act_print_) end subroutine psb_c_seterraction_print subroutine psb_c_seterraction_abort() bind(c) - use psb_base_mod, only : psb_set_erraction, psb_act_abort_, psb_ctxt_type call psb_set_erraction(psb_act_abort_) end subroutine psb_c_seterraction_abort diff --git a/cuda/psb_cuda_env_mod.F90 b/cuda/psb_cuda_env_mod.F90 index 21078461f..b397cbd08 100644 --- a/cuda/psb_cuda_env_mod.F90 +++ b/cuda/psb_cuda_env_mod.F90 @@ -31,7 +31,7 @@ module psb_cuda_env_mod - use psb_const_mod + use psb_base_mod use iso_c_binding use base_cusparse_mod ! interface psb_cuda_init From af0e907bb6f3e7936a1b8f4d8fb963e6e643dfba Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 16 Jan 2026 15:17:24 +0100 Subject: [PATCH 095/175] Make sure to link psb_ext together with psb_cuda --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 4c48e95f2..0f1df90e7 100755 --- a/configure +++ b/configure @@ -11205,7 +11205,7 @@ printf "%s\n" "$as_me: CUDA version ${PSB_CUDA_VERSION}" >&6;} CUDAD=cudad; CUDAMODS=cudamods; CUDALD=cudald; - LPSB_CUDA="-lpsb_cuda"; + LPSB_CUDA="-lpsb_cuda -lpsb_ext"; EXTRALDLIBS="-lstdc++"; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: At this point GPUTARGET is $CUDAD $CUDALD" >&5 printf "%s\n" "$as_me: At this point GPUTARGET is $CUDAD $CUDALD" >&6;} diff --git a/configure.ac b/configure.ac index 4513bb4a7..481ddc2b3 100644 --- a/configure.ac +++ b/configure.ac @@ -902,7 +902,7 @@ else CUDAD=cudad; CUDAMODS=cudamods; CUDALD=cudald; - LPSB_CUDA="-lpsb_cuda"; + LPSB_CUDA="-lpsb_cuda -lpsb_ext"; EXTRALDLIBS="-lstdc++"; AC_MSG_NOTICE([At this point GPUTARGET is $CUDAD $CUDALD]) From fd58bb581e216b6c2add83763bee8a08bbd26eb8 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 19 Jan 2026 09:50:44 +0100 Subject: [PATCH 096/175] Improve dependencies in main makefile --- Makefile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 9a302655d..485d22d68 100644 --- a/Makefile +++ b/Makefile @@ -9,27 +9,27 @@ dirs: (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) (if test ! -d modules ; then mkdir modules; fi;) -mods: basemods precmods linslvmods utilmods cbindmods extmods $(CUDAMODS) $(OACCMODS) +mods: basemods utilmods precmods linslvmods cbindmods extmods $(CUDAMODS) $(OACCMODS) precmods utilmods extmods: basemods linslvmods: precmods -cbindmods: basemods precmods linslvmods utilmods $(CUDAMODS) +cbindmods: basemods precmods linslvmods utilmods extmods $(CUDAMODS) oaccmods: extmods cudamods: extmods basemods: $(MAKE) -C base mods -precmods: +precmods: basemods $(MAKE) -C prec mods -linslvmods: +linslvmods: precmods $(MAKE) -C linsolve mods -utilmods: +utilmods: basemods $(MAKE) -C util mods -cbindmods: +cbindmods: basemods precmods linslvmods utilmods $(CUDAMODS) $(MAKE) -C cbind objs -extmods: +extmods: basemods $(MAKE) -C ext mods -cudamods: +cudamods: extmods $(MAKE) -C cuda mods -oaccmods: +oaccmods: extmods $(MAKE) -C openacc mods From 3965c3a526a388dde36e000837ec6bcd9b31797c Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 22 Jan 2026 13:44:28 +0100 Subject: [PATCH 097/175] Modified psb_config and machinery for better C interfacing --- Makefile | 8 +--- base/modules/desc/psb_desc_const_mod.f90 | 30 +++++++++----- base/modules/psb_config.h.in | 21 ++++++++++ cbind/base/psb_c_base.h | 24 ++++++----- cbind/psb_c_base.h | 24 ++++++----- configure | 52 +++++++++++++++++++++++- configure.ac | 37 ++++++++++++++++- 7 files changed, 155 insertions(+), 41 deletions(-) diff --git a/Makefile b/Makefile index 485d22d68..d3c36e25c 100644 --- a/Makefile +++ b/Makefile @@ -10,11 +10,7 @@ dirs: (if test ! -d modules ; then mkdir modules; fi;) mods: basemods utilmods precmods linslvmods cbindmods extmods $(CUDAMODS) $(OACCMODS) -precmods utilmods extmods: basemods -linslvmods: precmods -cbindmods: basemods precmods linslvmods utilmods extmods $(CUDAMODS) -oaccmods: extmods -cudamods: extmods + basemods: $(MAKE) -C base mods precmods: basemods @@ -23,7 +19,7 @@ linslvmods: precmods $(MAKE) -C linsolve mods utilmods: basemods $(MAKE) -C util mods -cbindmods: basemods precmods linslvmods utilmods $(CUDAMODS) +cbindmods: basemods precmods linslvmods utilmods extmods $(CUDAMODS) $(MAKE) -C cbind objs extmods: basemods $(MAKE) -C ext mods diff --git a/base/modules/desc/psb_desc_const_mod.f90 b/base/modules/desc/psb_desc_const_mod.f90 index 173031e96..280d1f2ab 100644 --- a/base/modules/desc/psb_desc_const_mod.f90 +++ b/base/modules/desc/psb_desc_const_mod.f90 @@ -39,22 +39,30 @@ module psb_desc_const_mod ! ! Communication, prolongation & restriction ! - integer(psb_ipk_), parameter :: psb_nohalo_=0, psb_halo_=1 + integer(psb_ipk_), parameter :: psb_nohalo_ = 0 + integer(psb_ipk_), parameter :: psb_halo_ = 1 ! For overlap update. - integer(psb_ipk_), parameter :: psb_none_=0, psb_sum_=1 - integer(psb_ipk_), parameter :: psb_avg_=2, psb_square_root_=3 - integer(psb_ipk_), parameter :: psb_setzero_=4 + integer(psb_ipk_), parameter :: psb_none_ = 0 + integer(psb_ipk_), parameter :: psb_sum_ = 1 + integer(psb_ipk_), parameter :: psb_avg_ = 2 + integer(psb_ipk_), parameter :: psb_square_root_ = 3 + integer(psb_ipk_), parameter :: psb_setzero_ = 4 ! The following are bit fields. - integer(psb_ipk_), parameter :: psb_swap_send_=1, psb_swap_recv_=2 - integer(psb_ipk_), parameter :: psb_swap_sync_=4, psb_swap_mpi_=8 - integer(psb_ipk_), parameter :: psb_collective_start_=1, psb_collective_end_=2 - integer(psb_ipk_), parameter :: psb_collective_sync_=4 + integer(psb_ipk_), parameter :: psb_swap_send_ = 1 + integer(psb_ipk_), parameter :: psb_swap_recv_ = 2 + integer(psb_ipk_), parameter :: psb_swap_sync_ = 4 + integer(psb_ipk_), parameter :: psb_swap_mpi_ = 8 + integer(psb_ipk_), parameter :: psb_collective_start_ = 1 + integer(psb_ipk_), parameter :: psb_collective_end_ = 2 + integer(psb_ipk_), parameter :: psb_collective_sync_ = 4 ! Choice among lists on which to base data exchange - integer(psb_ipk_), parameter :: psb_no_comm_=-1 - integer(psb_ipk_), parameter :: psb_comm_halo_=1, psb_comm_ovr_=2 - integer(psb_ipk_), parameter :: psb_comm_ext_=3, psb_comm_mov_=4 + integer(psb_ipk_), parameter :: psb_no_comm_ = -1 + integer(psb_ipk_), parameter :: psb_comm_halo_ = 1 + integer(psb_ipk_), parameter :: psb_comm_ovr_ = 2 + integer(psb_ipk_), parameter :: psb_comm_ext_ = 3 + integer(psb_ipk_), parameter :: psb_comm_mov_ = 4 ! Types of mapping between descriptors. integer(psb_ipk_), parameter :: psb_map_xhal_ = 123 integer(psb_ipk_), parameter :: psb_map_asov_ = psb_map_xhal_+1 diff --git a/base/modules/psb_config.h.in b/base/modules/psb_config.h.in index 7bb4dd48c..8195027fc 100644 --- a/base/modules/psb_config.h.in +++ b/base/modules/psb_config.h.in @@ -14,6 +14,27 @@ #define PSB_DUPL_OVWRT @PSBLASDUPOVW@ #define PSB_DUPL_ERR @PSBLASDUPERR@ #define PSB_DUPL_DEF @PSBLASDUPDEF@ + +#define PSB_UPD_SRCH @PSBLASUPDSRC@ +#define PSB_UPD_PERM @PSBLASUPDPRM@ +#define PSB_UPD_DFLT @PSBLASUPDDEF@ + +#define PSB_SWAP_SEND @PSBSWPSND@ +#define PSB_SWAP_RECV @PSBSWPRCV@ +#define PSB_SWAP_SYNC @PSBSWPSYN@ +#define PSB_SWAP_MPI @PSBSWPMPI@ + +#define PSB_COLLECTIVE_START @PSBCLCSTR@ +#define PSB_COLLECTIVE_END @PSBCLCEND@ +#define PSB_COLLECTIVE_SYNC @PSBCLCSYN@ + + +#define PSB_NONE @PSBNONE@ +#define PSB_SUM @PSBSUM@ +#define PSB_AVG @PSBAVG@ +#define PSB_SQUARE_ROOT @PSBSQRT@ +#define PSB_SETZERO @PSBSETZ@ + #define PSB_MATBLD_NOREMOTE @PSBLASBLDNOR@ #define PSB_MATBLD_REMOTE @PSBLASBLDRMT@ diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 3f04fca3d..c36a4a0e2 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -102,16 +102,7 @@ extern "C" { psb_i_t psb_c_g2l(psb_c_descriptor *cdh,psb_l_t gindex,bool cowned); - /* legal values for upd argument */ -#define psb_upd_srch_ 98764 -#define psb_upd_perm_ 98765 -#define psb_upd_def_ psb_upd_srch_ - /* legal values for dupl argument */ -#define psb_dupl_ovwrt_ 0 -#define psb_dupl_add_ 1 -#define psb_dupl_err_ 2 -#define psb_dupl_def_ psb_dupl_ovwrt_ - + /* legal values for afmt */ #define PSB_AFMT_CSR "CSR" #define PSB_AFMT_CSC "CSC" @@ -123,6 +114,17 @@ extern "C" { #define psb_Trans_ "T" #define psb_ConjTrans_ "C" +#if 0 + /* legal values for upd argument */ +#define psb_upd_srch_ 98764 +#define psb_upd_perm_ 98765 +#define psb_upd_def_ psb_upd_srch_ + /* legal values for dupl argument */ +#define psb_dupl_ovwrt_ 0 +#define psb_dupl_add_ 1 +#define psb_dupl_err_ 2 +#define psb_dupl_def_ psb_dupl_ovwrt_ + /* legal values for halo swap modes argument */ #define psb_swap_send_ 1 #define psb_swap_recv_ 2 @@ -135,7 +137,7 @@ extern "C" { #define psb_avg_ 2 #define psb_square_root_ 3 #define psb_setzero_ 4 - +#endif #ifdef __cplusplus } diff --git a/cbind/psb_c_base.h b/cbind/psb_c_base.h index 3f04fca3d..c36a4a0e2 100644 --- a/cbind/psb_c_base.h +++ b/cbind/psb_c_base.h @@ -102,16 +102,7 @@ extern "C" { psb_i_t psb_c_g2l(psb_c_descriptor *cdh,psb_l_t gindex,bool cowned); - /* legal values for upd argument */ -#define psb_upd_srch_ 98764 -#define psb_upd_perm_ 98765 -#define psb_upd_def_ psb_upd_srch_ - /* legal values for dupl argument */ -#define psb_dupl_ovwrt_ 0 -#define psb_dupl_add_ 1 -#define psb_dupl_err_ 2 -#define psb_dupl_def_ psb_dupl_ovwrt_ - + /* legal values for afmt */ #define PSB_AFMT_CSR "CSR" #define PSB_AFMT_CSC "CSC" @@ -123,6 +114,17 @@ extern "C" { #define psb_Trans_ "T" #define psb_ConjTrans_ "C" +#if 0 + /* legal values for upd argument */ +#define psb_upd_srch_ 98764 +#define psb_upd_perm_ 98765 +#define psb_upd_def_ psb_upd_srch_ + /* legal values for dupl argument */ +#define psb_dupl_ovwrt_ 0 +#define psb_dupl_add_ 1 +#define psb_dupl_err_ 2 +#define psb_dupl_def_ psb_dupl_ovwrt_ + /* legal values for halo swap modes argument */ #define psb_swap_send_ 1 #define psb_swap_recv_ 2 @@ -135,7 +137,7 @@ extern "C" { #define psb_avg_ 2 #define psb_square_root_ 3 #define psb_setzero_ 4 - +#endif #ifdef __cplusplus } diff --git a/configure b/configure index 0f1df90e7..390b6555a 100755 --- a/configure +++ b/configure @@ -691,8 +691,23 @@ CINTMETIS CHAVEMETIS CHAVE_OPENMP CSERIALMPI +PSBCLCSYN +PSBCLCEND +PSBCLCSTR +PSBSETZ +PSBSQRT +PSBAVG +PSBSUM +PSBNONE +PSBSWPMPI +PSBSWPSYN +PSBSWPRCV +PSBSWPSND PSBLASBLDRMT PSBLASBLDNOR +PSBLASUPDDEF +PSBLASUPDPRM +PSBLASUPDSRC PSBLASDUPDEF PSBLASDUPERR PSBLASDUPOVW @@ -8825,10 +8840,27 @@ PSBLASDUPNUL=`cat $CFILE| grep dupl_null | $AWK '{print $6;}'`; PSBLASDUPADD=`cat $CFILE| grep "psb_dupl_add_ =" | $AWK '{print $6;}'`; PSBLASDUPOVW=`cat $CFILE| grep dupl_ovwrt| $AWK '{print $6;}'`; PSBLASDUPERR=`cat $CFILE| grep dupl_err| $AWK '{print $6;}'`; -PSBLASDUPDEF=`cat $CFILE| grep dupl_def| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$//`; +PSBLASDUPDEF=`cat $CFILE| grep dupl_def| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$// `; +PSBLASUPDSRC=`cat $CFILE| grep "psb_upd_srch_ ="| $AWK '{print $6;}' `; +PSBLASUPDPRM=`cat $CFILE| grep "psb_upd_perm_ ="| $AWK '{print $6;}' `; +PSBLASUPDDEF=`cat $CFILE| grep "psb_upd_dflt_ ="| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$//`; PSBLASBLDNOR=`cat $CFILE| grep matbld_noremote| $AWK '{print $6;}'`; PSBLASBLDRMT=`cat $CFILE| grep matbld_remote| $AWK '{print $6;}'`; +CFILE="base/modules/desc/psb_desc_const_mod.f90"; +PSBSWPSND=`cat $CFILE| grep swap_send| $AWK '{print $6;}'`; +PSBSWPRCV=`cat $CFILE| grep swap_recv| $AWK '{print $6;}'`; +PSBSWPSYN=`cat $CFILE| grep swap_sync| $AWK '{print $6;}'`; +PSBSWPMPI=`cat $CFILE| grep swap_mpi| $AWK '{print $6;}'`; +PSBNONE=`cat $CFILE| grep psb_none| $AWK '{print $6;}'`; +PSBSUM=`cat $CFILE| grep psb_sum| $AWK '{print $6;}'`; +PSBAVG=`cat $CFILE| grep psb_avg| $AWK '{print $6;}'`; +PSBSQRT=`cat $CFILE| grep square_root| $AWK '{print $6;}'`; +PSBSETZ=`cat $CFILE| grep psb_setzero| $AWK '{print $6;}'`; +PSBCLCSTR=`cat $CFILE| grep collective_start| $AWK '{print $6;}'`; +PSBCLCEND=`cat $CFILE| grep collective_end| $AWK '{print $6;}'`; +PSBCLCSYN=`cat $CFILE| grep collective_sync| $AWK '{print $6;}'`; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: version $PSBLASSTRING" >&5 printf "%s\n" " version $PSBLASSTRING" >&6; } @@ -11778,6 +11810,24 @@ FDEFINES=$(PSBFDEFINES) + + + + + + + + + + + + + + + + + + diff --git a/configure.ac b/configure.ac index 481ddc2b3..5155bcf06 100644 --- a/configure.ac +++ b/configure.ac @@ -699,10 +699,27 @@ PSBLASDUPNUL=`cat $CFILE| grep dupl_null | $AWK '{print $6;}'`; PSBLASDUPADD=`cat $CFILE| grep "psb_dupl_add_ =" | $AWK '{print $6;}'`; PSBLASDUPOVW=`cat $CFILE| grep dupl_ovwrt| $AWK '{print $6;}'`; PSBLASDUPERR=`cat $CFILE| grep dupl_err| $AWK '{print $6;}'`; -PSBLASDUPDEF=`cat $CFILE| grep dupl_def| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$//`; +PSBLASDUPDEF=`cat $CFILE| grep dupl_def| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$// `; +PSBLASUPDSRC=`cat $CFILE| grep "psb_upd_srch_ ="| $AWK '{print $6;}' `; +PSBLASUPDPRM=`cat $CFILE| grep "psb_upd_perm_ ="| $AWK '{print $6;}' `; +PSBLASUPDDEF=`cat $CFILE| grep "psb_upd_dflt_ ="| $AWK '{print $6;}' | tr a-z A-Z | sed s/\_$//`; PSBLASBLDNOR=`cat $CFILE| grep matbld_noremote| $AWK '{print $6;}'`; PSBLASBLDRMT=`cat $CFILE| grep matbld_remote| $AWK '{print $6;}'`; +CFILE="base/modules/desc/psb_desc_const_mod.f90"; +PSBSWPSND=`cat $CFILE| grep swap_send| $AWK '{print $6;}'`; +PSBSWPRCV=`cat $CFILE| grep swap_recv| $AWK '{print $6;}'`; +PSBSWPSYN=`cat $CFILE| grep swap_sync| $AWK '{print $6;}'`; +PSBSWPMPI=`cat $CFILE| grep swap_mpi| $AWK '{print $6;}'`; +PSBNONE=`cat $CFILE| grep psb_none| $AWK '{print $6;}'`; +PSBSUM=`cat $CFILE| grep psb_sum| $AWK '{print $6;}'`; +PSBAVG=`cat $CFILE| grep psb_avg| $AWK '{print $6;}'`; +PSBSQRT=`cat $CFILE| grep square_root| $AWK '{print $6;}'`; +PSBSETZ=`cat $CFILE| grep psb_setzero| $AWK '{print $6;}'`; +PSBCLCSTR=`cat $CFILE| grep collective_start| $AWK '{print $6;}'`; +PSBCLCEND=`cat $CFILE| grep collective_end| $AWK '{print $6;}'`; +PSBCLCSYN=`cat $CFILE| grep collective_sync| $AWK '{print $6;}'`; + AC_MSG_RESULT([ version $PSBLASSTRING]) ############################################################################### @@ -1084,9 +1101,27 @@ AC_SUBST(PSBLASDUPADD) AC_SUBST(PSBLASDUPOVW) AC_SUBST(PSBLASDUPERR) AC_SUBST(PSBLASDUPDEF) +AC_SUBST(PSBLASDUPDEF) +AC_SUBST(PSBLASUPDSRC) +AC_SUBST(PSBLASUPDPRM) +AC_SUBST(PSBLASUPDDEF) AC_SUBST(PSBLASBLDNOR) AC_SUBST(PSBLASBLDRMT) +AC_SUBST(PSBSWPSND) +AC_SUBST(PSBSWPRCV) +AC_SUBST(PSBSWPSYN) +AC_SUBST(PSBSWPMPI) +AC_SUBST(PSBNONE) +AC_SUBST(PSBSUM) +AC_SUBST(PSBAVG) +AC_SUBST(PSBSQRT) +AC_SUBST(PSBSETZ) +AC_SUBST(PSBCLCSTR) +AC_SUBST(PSBCLCEND) +AC_SUBST(PSBCLCSYN) + + AC_SUBST(CSERIALMPI) AC_SUBST(CHAVE_OPENMP) AC_SUBST(CHAVEMETIS) From 42925ae5aedf004bb412539f28048b17bc34ba86 Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Thu, 22 Jan 2026 14:10:25 +0100 Subject: [PATCH 098/175] Fixed names of constant and order of arguments in asb routines --- cbind/base/psb_c_dbase.h | 2 +- cbind/psb_c_dbase.h | 2 +- cbind/test/gpu/pdegen3dc.c | 21 +++++++++++++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index 8c2a64d31..6a82fe77f 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -35,7 +35,7 @@ psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeasb_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_dgeasb_options_format(psb_c_dvector *xh, psb_c_descriptor *cdh, - const char *fmt, psb_i_t dupl); + psb_i_t dupl, const char *fmt); psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/psb_c_dbase.h b/cbind/psb_c_dbase.h index 8c2a64d31..6a82fe77f 100644 --- a/cbind/psb_c_dbase.h +++ b/cbind/psb_c_dbase.h @@ -35,7 +35,7 @@ psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgeasb_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); psb_i_t psb_c_dgeasb_options_format(psb_c_dvector *xh, psb_c_descriptor *cdh, - const char *fmt, psb_i_t dupl); + psb_i_t dupl, const char *fmt); psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); diff --git a/cbind/test/gpu/pdegen3dc.c b/cbind/test/gpu/pdegen3dc.c index 3096b2b7b..2a65898a5 100644 --- a/cbind/test/gpu/pdegen3dc.c +++ b/cbind/test/gpu/pdegen3dc.c @@ -240,16 +240,16 @@ psb_i_t matgen(psb_c_ctxt cctxt, psb_i_t nl, psb_i_t idim, psb_l_t vl[], info = psb_c_cdasb_format(cdh, cdfmt); if (info != 0) return (info); - info = psb_c_dspasb_opt(ah, cdh, afmt, psb_upd_def_, psb_dupl_def_); + info = psb_c_dspasb_opt(ah, cdh, afmt, PSB_UPD_DFLT, PSB_DUPL_DEF); if (info != 0) return (info); - info = psb_c_dgeasb_options_format(xh, cdh, psb_dupl_add_, cdfmt); + info = psb_c_dgeasb_options_format(xh, cdh, PSB_DUPL_ADD, cdfmt); if (info != 0) return (info); - info = psb_c_dgeasb_options_format(bh, cdh, psb_dupl_add_, cdfmt); + info = psb_c_dgeasb_options_format(bh, cdh, PSB_DUPL_ADD, cdfmt); if (info != 0) return (info); - info = psb_c_dgeasb_options_format(rh, cdh, psb_dupl_add_, cdfmt); + info = psb_c_dgeasb_options_format(rh, cdh, PSB_DUPL_ADD, cdfmt); if (info != 0) return (info); #else @@ -321,6 +321,19 @@ int main(int argc, char *argv[]) sscanf(buffer, "%d", &itrace); fgets(buffer, LINEBUFSIZE, stdin); sscanf(buffer, "%d", &irst); + + /* Echo input parameters */ + printf("Number of processes: %d\n", np); + printf("Number of parameters read: %d\n", nparms); + printf("Krylov method: %s\n", methd); + printf("Preconditioner type: %s\n", ptype); + printf("Sparse matrix format: %s\n", afmt); + printf("Descriptor format: %s\n", cdfmt); + printf("Problem dimension (internal points per direction): %d\n", idim); + printf("Stopping criterion (1:backward error 2: ||r||_2/||b||_2): %d\n", istop); + printf("Maximum number of iterations: %d\n", itmax); + printf("Info message frequency (every itrace iterations): %d\n", itrace); + printf("Restart depth for RGMRES or BiCGSTAB(L): %d\n", irst); } /* Now broadcast the values, and check they're OK */ psb_c_ibcast(*cctxt, 1, &nparms, 0); From 897d4660135def3f22ca4be76466089741baa2f9 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 26 Jan 2026 11:26:30 +0100 Subject: [PATCH 099/175] Define DESC%check_addr for debugging --- base/modules/desc/psb_desc_mod.F90 | 55 + base/modules/serial/psb_i_base_vect_mod.F90 | 10 +- base/modules/serial/psb_i_vect_mod.F90 | 8 + cbind/base/psb_base_tools_cbind_mod.F90 | 17 + cbind/base/psb_c_base.h | 3 +- cbind/psb_c_base.h | 3 +- cuda/ivectordev.c | 8 + cuda/ivectordev.h | 1 + cuda/psb_i_cuda_vect_mod.F90 | 15 +- cuda/psb_i_vectordev_mod.F90 | 9 + .../geaxpby/psblas_geaxpby_test.log | 1158 ++++++++--------- 11 files changed, 703 insertions(+), 584 deletions(-) diff --git a/base/modules/desc/psb_desc_mod.F90 b/base/modules/desc/psb_desc_mod.F90 index 716e222c9..07a7f755d 100644 --- a/base/modules/desc/psb_desc_mod.F90 +++ b/base/modules/desc/psb_desc_mod.F90 @@ -245,6 +245,7 @@ module psb_desc_mod procedure, pass(desc) :: free => psb_cdfree procedure, pass(desc) :: destroy => psb_cd_destroy procedure, pass(desc) :: nullify => nullify_desc + procedure, pass(desc) :: check_addr => psb_cd_check_addr procedure, pass(desc) :: get_fmt => cd_get_fmt procedure, pass(desc) :: fnd_owner => cd_fnd_owner @@ -1162,6 +1163,60 @@ contains end subroutine psb_cd_clone + subroutine psb_cd_check_addr(desc, info) + + use psb_error_mod + use psb_penv_mod + use psb_realloc_mod + implicit none + !....parameters... + + class(psb_desc_type), intent(inout), target :: desc + integer(psb_ipk_), intent(out) :: info + !locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_ipk_) :: debug_level, debug_unit + character(len=20) :: name + + debug_unit = psb_get_debug_unit() + debug_level = psb_get_debug_level() + + if (psb_get_errstatus() /= 0) return + info = psb_success_ + call psb_erractionsave(err_act) + name = 'psb_cdcpy' + + if (desc%is_asb()) then + write(0,*) 'DESC%CHECK_ADDR: v_halo, v_ext_idx, v_ovrlap_idx,v_ovr_mst' + if (info == psb_success_) & + & call desc%v_halo_index%check_addr() + if (info == psb_success_) & + & call desc%v_ext_index%check_addr() + if (info == psb_success_) & + & call desc%v_ovrlap_index%check_addr() + if (info == psb_success_) & + & call desc%v_ovr_mst_idx%check_addr() + write(0,*) 'DESC%CHECK_ADDR: done' + end if + + if (info /= psb_success_) then + info = psb_err_from_subroutine_ + call psb_errpush(info,name) + goto 9999 + endif + if (debug_level >= psb_debug_ext_) & + & write(debug_unit,*) me,' ',trim(name),': Done' + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + + end subroutine psb_cd_check_addr + Subroutine psb_cd_get_recv_idx(tmp,desc,data,info) use psb_error_mod diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 1c7c00c37..fd262626f 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -168,8 +168,7 @@ module psb_i_base_vect_mod procedure, pass(y) :: sctb_buf => i_base_sctb_buf generic, public :: sct => sctb, sctb_x, sctb_buf - - + procedure, pass(x) :: check_addr => i_base_check_addr end type psb_i_base_vect_type @@ -1178,6 +1177,13 @@ contains end subroutine i_base_set_vect + subroutine i_base_check_addr(x) + class(psb_i_base_vect_type), intent(inout) :: x + + write(0,*) 'Check addr: base version, do nothing' + + end subroutine i_base_check_addr + ! ! Gather: Y = beta * Y + alpha * X(IDX(:)) diff --git a/base/modules/serial/psb_i_vect_mod.F90 b/base/modules/serial/psb_i_vect_mod.F90 index adbcaa6a9..65544f79b 100644 --- a/base/modules/serial/psb_i_vect_mod.F90 +++ b/base/modules/serial/psb_i_vect_mod.F90 @@ -105,6 +105,7 @@ module psb_i_vect_mod procedure, pass(x) :: set_dev => i_vect_set_dev procedure, pass(x) :: set_sync => i_vect_set_sync + procedure, pass(x) :: check_addr => i_vect_check_addr end type psb_i_vect_type @@ -474,6 +475,13 @@ contains end subroutine i_vect_set_vect + subroutine i_vect_check_addr(x) + class(psb_i_vect_type), intent(inout) :: x + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%check_addr() + + end subroutine i_vect_check_addr function constructor(x) result(this) integer(psb_ipk_) :: x(:) diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 index 8cb6b65ce..d4af3ec19 100644 --- a/cbind/base/psb_base_tools_cbind_mod.F90 +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -414,6 +414,23 @@ contains end function psb_c_cd_is_asb + function psb_c_cd_check_addr(cdh) & + & bind(c,name='psb_c_cd_check_addr') result(res) + implicit none + + integer(psb_c_ipk_) :: res + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer :: info + + res = 0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call descp%check_addr(info) + res = info + end if + end function psb_c_cd_check_addr function psb_c_cd_get_local_rows(cdh) bind(c,name='psb_c_cd_get_local_rows') result(res) implicit none diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index c36a4a0e2..1242fd818 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -92,7 +92,8 @@ extern "C" { psb_i_t psb_c_cdins_lidx(psb_i_t nz, const psb_l_t *ja, const psb_i_t *lidx, psb_c_descriptor *cd); bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); bool psb_c_cd_is_asb(psb_c_descriptor *cd); - + psb_i_t psb_c_cd_check_addr(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); diff --git a/cbind/psb_c_base.h b/cbind/psb_c_base.h index c36a4a0e2..1242fd818 100644 --- a/cbind/psb_c_base.h +++ b/cbind/psb_c_base.h @@ -92,7 +92,8 @@ extern "C" { psb_i_t psb_c_cdins_lidx(psb_i_t nz, const psb_l_t *ja, const psb_i_t *lidx, psb_c_descriptor *cd); bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); bool psb_c_cd_is_asb(psb_c_descriptor *cd); - + psb_i_t psb_c_cd_check_addr(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); diff --git a/cuda/ivectordev.c b/cuda/ivectordev.c index f908e3917..db466a6b6 100644 --- a/cuda/ivectordev.c +++ b/cuda/ivectordev.c @@ -42,6 +42,14 @@ int registerMappedInt(void *buff, void **d_p, int n, int dummy) return registerMappedMemory(buff,d_p,((size_t) n)*sizeof(int)); } +int checkMultiVecDeviceInt(void* deviceMultiVec) +{ + struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceMultiVec; + fprintf(stderr,"checkMultiVecDeviceInt Size: %d Pointer %p\n", + devVec->size_,devVec->v_); + return(0); +} + int writeMultiVecDeviceInt(void* deviceVec, int* hostVec) { int i; struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceVec; diff --git a/cuda/ivectordev.h b/cuda/ivectordev.h index 6f3a32a08..307235433 100644 --- a/cuda/ivectordev.h +++ b/cuda/ivectordev.h @@ -38,6 +38,7 @@ #include "vector.h" int registerMappedInt(void *, void **, int, int); +int checkMultiVecDeviceInt(void* deviceMultiVec); int writeMultiVecDeviceInt(void* deviceMultiVec, int* hostMultiVec); int writeMultiVecDeviceIntR2(void* deviceMultiVec, int* hostMultiVec, int ld); int readMultiVecDeviceInt(void* deviceMultiVec, int* hostMultiVec); diff --git a/cuda/psb_i_cuda_vect_mod.F90 b/cuda/psb_i_cuda_vect_mod.F90 index 7020d0a5e..aba8fd526 100644 --- a/cuda/psb_i_cuda_vect_mod.F90 +++ b/cuda/psb_i_cuda_vect_mod.F90 @@ -84,6 +84,7 @@ module psb_i_cuda_vect_mod procedure, pass(x) :: free_buffer => i_cuda_free_buffer procedure, pass(x) :: maybe_free_buffer => i_cuda_maybe_free_buffer + procedure, pass(x) :: check_addr => i_cuda_check_addr final :: i_cuda_vect_finalize end type psb_i_vect_cuda @@ -201,6 +202,18 @@ contains end subroutine i_cuda_free_buffer + subroutine i_cuda_check_addr(x) + class(psb_i_vect_cuda), intent(inout) :: x + integer(psb_ipk_) info; + select type(ii=> x) + class is (psb_i_vect_cuda) + info = checkMultiVecDeviceInt(x%deviceVect) + class default + write(0,*) 'Check addr: cuda version, why am I here? ' + end select + end subroutine i_cuda_check_addr + + subroutine i_cuda_gthzv_x(i,n,idx,x,y) use psb_cuda_env_mod use psi_serial_mod @@ -798,12 +811,12 @@ contains integer(psb_ipk_), intent(out) :: info info = 0 - if (allocated(x%v)) deallocate(x%v, stat=info) if (c_associated(x%deviceVect)) then !!$ write(0,*)'d_cuda_free Calling freeMultiVecDevice' call freeMultiVecDevice(x%deviceVect) x%deviceVect=c_null_ptr end if + if (allocated(x%v)) deallocate(x%v, stat=info) call x%free_buffer(info) call x%set_sync() end subroutine i_cuda_free diff --git a/cuda/psb_i_vectordev_mod.F90 b/cuda/psb_i_vectordev_mod.F90 index ce3dc5e18..0134ffc35 100644 --- a/cuda/psb_i_vectordev_mod.F90 +++ b/cuda/psb_i_vectordev_mod.F90 @@ -122,6 +122,15 @@ module psb_i_vectordev_mod integer(c_int) :: hidx(m,*) integer(c_int),value :: m,n end function writeMultiInt + end interface writeInt + + interface + function checkMultiVecDeviceInt(deviceVec) & + & result(res) bind(c,name='checkMultiVecDeviceInt') + use iso_c_binding + integer(c_int) :: res + type(c_ptr), value :: deviceVec + end function checkMultiVecDeviceInt end interface interface readInt diff --git a/test/computational_routines/geaxpby/psblas_geaxpby_test.log b/test/computational_routines/geaxpby/psblas_geaxpby_test.log index c029e1db5..deefe624e 100644 --- a/test/computational_routines/geaxpby/psblas_geaxpby_test.log +++ b/test/computational_routines/geaxpby/psblas_geaxpby_test.log @@ -1,589 +1,589 @@ -Welcome to PSBLAS version: 3.9.0 +Welcome to PSBLAS version: 3.9.1 This is the psb_geaxpby_test sample program Number of processes used in this computation: 1 -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2025-06-12 13:37:32] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2025-06-12 13:37:33] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2025-06-12 13:37:34] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2025-06-12 13:37:35] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2025-06-12 13:37:36] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2025-06-12 13:37:36] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2025-06-12 13:37:36] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2025-06-12 13:37:36] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2025-06-12 13:37:36] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2025-06-12 13:37:36] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2025-06-12 13:37:37] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2025-06-12 13:37:38] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -Welcome to PSBLAS version: 3.9.0 +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +Welcome to PSBLAS version: 3.9.1 This is the psb_geaxpby_test sample program -Number of processes used in this computation: 40 +Number of processes used in this computation: 20 -[2025-06-12 13:37:39] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2025-06-12 13:37:39] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2025-06-12 13:37:39] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2025-06-12 13:37:39] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2025-06-12 13:37:39] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2025-06-12 13:37:39] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2025-06-12 13:37:39] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2025-06-12 13:37:39] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2025-06-12 13:37:40] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2025-06-12 13:37:41] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2025-06-12 13:37:42] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2025-06-12 13:37:43] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2025-06-12 13:37:44] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2025-06-12 13:37:45] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2025-06-12 13:37:46] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2025-06-12 13:37:47] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2025-06-12 13:37:48] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] -[2025-06-12 13:37:48] Double precision check on file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2025-06-12 13:37:48] Double precision check on file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2025-06-12 13:37:48] Double precision check on file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2025-06-12 13:37:49] Double precision check on file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2025-06-12 13:37:50] Double precision check on file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2025-06-12 13:37:51] Double precision check on file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2025-06-12 13:37:52] Double precision check on file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2025-06-12 13:37:53] Double precision check on file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2025-06-12 13:37:54] Double precision check on file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2025-06-12 13:37:55] Double precision check on file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-01-19 14:36:29] Double precision check on file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] Comparison between serial/sol_x1_y1_a1_b1.mtx and parallel/sol_x1_y1_a1_b1.mtx: 0 differences Comparison between serial/sol_x1_y1_a1_b2.mtx and parallel/sol_x1_y1_a1_b2.mtx: 0 differences From 96ab382ce81ff903cc4a3d7d9910857ca9c6a75a Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 27 Jan 2026 12:17:39 +0100 Subject: [PATCH 100/175] Fix vect_clone and define check_addr --- base/modules/serial/psb_c_base_vect_mod.F90 | 10 ++++++++++ base/modules/serial/psb_c_vect_mod.F90 | 16 +++++++++++++++- base/modules/serial/psb_d_base_vect_mod.F90 | 10 ++++++++++ base/modules/serial/psb_d_vect_mod.F90 | 16 +++++++++++++++- base/modules/serial/psb_i_base_vect_mod.F90 | 6 +++++- base/modules/serial/psb_i_vect_mod.F90 | 10 ++++++++-- base/modules/serial/psb_l_base_vect_mod.F90 | 10 ++++++++++ base/modules/serial/psb_l_vect_mod.F90 | 16 +++++++++++++++- base/modules/serial/psb_s_base_vect_mod.F90 | 10 ++++++++++ base/modules/serial/psb_s_vect_mod.F90 | 16 +++++++++++++++- base/modules/serial/psb_z_base_vect_mod.F90 | 10 ++++++++++ base/modules/serial/psb_z_vect_mod.F90 | 16 +++++++++++++++- 12 files changed, 138 insertions(+), 8 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index d0ec0a5d2..b3c82989c 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -171,6 +171,9 @@ module psb_c_base_vect_mod procedure, pass(y) :: sctb_buf => c_base_sctb_buf generic, public :: sct => sctb, sctb_x, sctb_buf + procedure, pass(x) :: check_addr => c_base_check_addr + + ! ! Dot product and AXPBY @@ -1244,6 +1247,13 @@ contains end subroutine c_base_set_vect + subroutine c_base_check_addr(x) + class(psb_c_base_vect_type), intent(inout) :: x + + write(0,*) 'Check addr: base version, do nothing' + + end subroutine c_base_check_addr + ! ! Get entry. diff --git a/base/modules/serial/psb_c_vect_mod.F90 b/base/modules/serial/psb_c_vect_mod.F90 index 4053492f0..8391232f5 100644 --- a/base/modules/serial/psb_c_vect_mod.F90 +++ b/base/modules/serial/psb_c_vect_mod.F90 @@ -105,6 +105,7 @@ module psb_c_vect_mod procedure, pass(x) :: set_host => c_vect_set_host procedure, pass(x) :: set_dev => c_vect_set_dev procedure, pass(x) :: set_sync => c_vect_set_sync + procedure, pass(x) :: check_addr => c_vect_check_addr procedure, pass(x) :: get_entry => c_vect_get_entry @@ -408,7 +409,13 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - allocate(y%v,source=x%v, stat=info) + ! + ! Using sourced allocation here creates + ! problems with handling of memory allocated + ! elsewhere (e.g. accelerators), hence delegation + ! to %bld method + ! + call y%bld(x%get_vect(),mold=x%v) end if end subroutine c_vect_clone @@ -529,6 +536,13 @@ contains end subroutine c_vect_set_vect + subroutine c_vect_check_addr(x) + class(psb_c_vect_type), intent(inout) :: x + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%check_addr() + + end subroutine c_vect_check_addr function constructor(x) result(this) complex(psb_spk_) :: x(:) diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 6845e1505..27b8fe4bd 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -171,6 +171,9 @@ module psb_d_base_vect_mod procedure, pass(y) :: sctb_buf => d_base_sctb_buf generic, public :: sct => sctb, sctb_x, sctb_buf + procedure, pass(x) :: check_addr => d_base_check_addr + + ! ! Dot product and AXPBY @@ -1251,6 +1254,13 @@ contains end subroutine d_base_set_vect + subroutine d_base_check_addr(x) + class(psb_d_base_vect_type), intent(inout) :: x + + write(0,*) 'Check addr: base version, do nothing' + + end subroutine d_base_check_addr + ! ! Get entry. diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index d2df69ffb..f13bd5177 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -105,6 +105,7 @@ module psb_d_vect_mod procedure, pass(x) :: set_host => d_vect_set_host procedure, pass(x) :: set_dev => d_vect_set_dev procedure, pass(x) :: set_sync => d_vect_set_sync + procedure, pass(x) :: check_addr => d_vect_check_addr procedure, pass(x) :: get_entry => d_vect_get_entry @@ -415,7 +416,13 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - allocate(y%v,source=x%v, stat=info) + ! + ! Using sourced allocation here creates + ! problems with handling of memory allocated + ! elsewhere (e.g. accelerators), hence delegation + ! to %bld method + ! + call y%bld(x%get_vect(),mold=x%v) end if end subroutine d_vect_clone @@ -536,6 +543,13 @@ contains end subroutine d_vect_set_vect + subroutine d_vect_check_addr(x) + class(psb_d_vect_type), intent(inout) :: x + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%check_addr() + + end subroutine d_vect_check_addr function constructor(x) result(this) real(psb_dpk_) :: x(:) diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index fd262626f..78672b58a 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -171,6 +171,10 @@ module psb_i_base_vect_mod procedure, pass(x) :: check_addr => i_base_check_addr + + + + end type psb_i_base_vect_type public :: psb_i_base_vect @@ -1176,7 +1180,6 @@ contains end subroutine i_base_set_vect - subroutine i_base_check_addr(x) class(psb_i_base_vect_type), intent(inout) :: x @@ -1185,6 +1188,7 @@ contains end subroutine i_base_check_addr + ! ! Gather: Y = beta * Y + alpha * X(IDX(:)) ! diff --git a/base/modules/serial/psb_i_vect_mod.F90 b/base/modules/serial/psb_i_vect_mod.F90 index 65544f79b..53227a6af 100644 --- a/base/modules/serial/psb_i_vect_mod.F90 +++ b/base/modules/serial/psb_i_vect_mod.F90 @@ -104,10 +104,10 @@ module psb_i_vect_mod procedure, pass(x) :: set_host => i_vect_set_host procedure, pass(x) :: set_dev => i_vect_set_dev procedure, pass(x) :: set_sync => i_vect_set_sync - procedure, pass(x) :: check_addr => i_vect_check_addr + end type psb_i_vect_type public :: psb_i_vect @@ -354,7 +354,13 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - allocate(y%v,source=x%v, stat=info) + ! + ! Using sourced allocation here creates + ! problems with handling of memory allocated + ! elsewhere (e.g. accelerators), hence delegation + ! to %bld method + ! + call y%bld(x%get_vect(),mold=x%v) end if end subroutine i_vect_clone diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index 7e8e0528c..c2edc5055 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -169,6 +169,9 @@ module psb_l_base_vect_mod procedure, pass(y) :: sctb_buf => l_base_sctb_buf generic, public :: sct => sctb, sctb_x, sctb_buf + procedure, pass(x) :: check_addr => l_base_check_addr + + @@ -1178,6 +1181,13 @@ contains end subroutine l_base_set_vect + subroutine l_base_check_addr(x) + class(psb_l_base_vect_type), intent(inout) :: x + + write(0,*) 'Check addr: base version, do nothing' + + end subroutine l_base_check_addr + ! diff --git a/base/modules/serial/psb_l_vect_mod.F90 b/base/modules/serial/psb_l_vect_mod.F90 index d29d0c7b6..34809264b 100644 --- a/base/modules/serial/psb_l_vect_mod.F90 +++ b/base/modules/serial/psb_l_vect_mod.F90 @@ -105,6 +105,7 @@ module psb_l_vect_mod procedure, pass(x) :: set_host => l_vect_set_host procedure, pass(x) :: set_dev => l_vect_set_dev procedure, pass(x) :: set_sync => l_vect_set_sync + procedure, pass(x) :: check_addr => l_vect_check_addr @@ -354,7 +355,13 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - allocate(y%v,source=x%v, stat=info) + ! + ! Using sourced allocation here creates + ! problems with handling of memory allocated + ! elsewhere (e.g. accelerators), hence delegation + ! to %bld method + ! + call y%bld(x%get_vect(),mold=x%v) end if end subroutine l_vect_clone @@ -475,6 +482,13 @@ contains end subroutine l_vect_set_vect + subroutine l_vect_check_addr(x) + class(psb_l_vect_type), intent(inout) :: x + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%check_addr() + + end subroutine l_vect_check_addr function constructor(x) result(this) integer(psb_lpk_) :: x(:) diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index f425aedb2..5202a3813 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -171,6 +171,9 @@ module psb_s_base_vect_mod procedure, pass(y) :: sctb_buf => s_base_sctb_buf generic, public :: sct => sctb, sctb_x, sctb_buf + procedure, pass(x) :: check_addr => s_base_check_addr + + ! ! Dot product and AXPBY @@ -1251,6 +1254,13 @@ contains end subroutine s_base_set_vect + subroutine s_base_check_addr(x) + class(psb_s_base_vect_type), intent(inout) :: x + + write(0,*) 'Check addr: base version, do nothing' + + end subroutine s_base_check_addr + ! ! Get entry. diff --git a/base/modules/serial/psb_s_vect_mod.F90 b/base/modules/serial/psb_s_vect_mod.F90 index bb6a298fd..95516eb21 100644 --- a/base/modules/serial/psb_s_vect_mod.F90 +++ b/base/modules/serial/psb_s_vect_mod.F90 @@ -105,6 +105,7 @@ module psb_s_vect_mod procedure, pass(x) :: set_host => s_vect_set_host procedure, pass(x) :: set_dev => s_vect_set_dev procedure, pass(x) :: set_sync => s_vect_set_sync + procedure, pass(x) :: check_addr => s_vect_check_addr procedure, pass(x) :: get_entry => s_vect_get_entry @@ -415,7 +416,13 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - allocate(y%v,source=x%v, stat=info) + ! + ! Using sourced allocation here creates + ! problems with handling of memory allocated + ! elsewhere (e.g. accelerators), hence delegation + ! to %bld method + ! + call y%bld(x%get_vect(),mold=x%v) end if end subroutine s_vect_clone @@ -536,6 +543,13 @@ contains end subroutine s_vect_set_vect + subroutine s_vect_check_addr(x) + class(psb_s_vect_type), intent(inout) :: x + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%check_addr() + + end subroutine s_vect_check_addr function constructor(x) result(this) real(psb_spk_) :: x(:) diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index eb92a9384..7e11d7e53 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -171,6 +171,9 @@ module psb_z_base_vect_mod procedure, pass(y) :: sctb_buf => z_base_sctb_buf generic, public :: sct => sctb, sctb_x, sctb_buf + procedure, pass(x) :: check_addr => z_base_check_addr + + ! ! Dot product and AXPBY @@ -1244,6 +1247,13 @@ contains end subroutine z_base_set_vect + subroutine z_base_check_addr(x) + class(psb_z_base_vect_type), intent(inout) :: x + + write(0,*) 'Check addr: base version, do nothing' + + end subroutine z_base_check_addr + ! ! Get entry. diff --git a/base/modules/serial/psb_z_vect_mod.F90 b/base/modules/serial/psb_z_vect_mod.F90 index fbed40cab..4eef627be 100644 --- a/base/modules/serial/psb_z_vect_mod.F90 +++ b/base/modules/serial/psb_z_vect_mod.F90 @@ -105,6 +105,7 @@ module psb_z_vect_mod procedure, pass(x) :: set_host => z_vect_set_host procedure, pass(x) :: set_dev => z_vect_set_dev procedure, pass(x) :: set_sync => z_vect_set_sync + procedure, pass(x) :: check_addr => z_vect_check_addr procedure, pass(x) :: get_entry => z_vect_get_entry @@ -408,7 +409,13 @@ contains info = psb_success_ call y%free(info) if ((info==0).and.allocated(x%v)) then - allocate(y%v,source=x%v, stat=info) + ! + ! Using sourced allocation here creates + ! problems with handling of memory allocated + ! elsewhere (e.g. accelerators), hence delegation + ! to %bld method + ! + call y%bld(x%get_vect(),mold=x%v) end if end subroutine z_vect_clone @@ -529,6 +536,13 @@ contains end subroutine z_vect_set_vect + subroutine z_vect_check_addr(x) + class(psb_z_vect_type), intent(inout) :: x + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%check_addr() + + end subroutine z_vect_check_addr function constructor(x) result(this) complex(psb_dpk_) :: x(:) From 67721b8914c83e6f5f0714d0a29f7403a07c1d2d Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 27 Jan 2026 12:18:05 +0100 Subject: [PATCH 101/175] Define check_addr --- cuda/cvectordev.c | 8 ++++++++ cuda/cvectordev.h | 1 + cuda/dvectordev.c | 8 ++++++++ cuda/dvectordev.h | 1 + cuda/psb_c_cuda_vect_mod.F90 | 12 ++++++++++++ cuda/psb_c_vectordev_mod.F90 | 9 +++++++++ cuda/psb_d_cuda_vect_mod.F90 | 12 ++++++++++++ cuda/psb_d_vectordev_mod.F90 | 9 +++++++++ cuda/psb_i_cuda_vect_mod.F90 | 5 ++--- cuda/psb_i_vectordev_mod.F90 | 18 +++++++++--------- cuda/psb_s_cuda_vect_mod.F90 | 12 ++++++++++++ cuda/psb_s_vectordev_mod.F90 | 9 +++++++++ cuda/psb_z_cuda_vect_mod.F90 | 12 ++++++++++++ cuda/psb_z_vectordev_mod.F90 | 9 +++++++++ cuda/svectordev.c | 8 ++++++++ cuda/svectordev.h | 1 + cuda/zvectordev.c | 8 ++++++++ cuda/zvectordev.h | 1 + 18 files changed, 131 insertions(+), 12 deletions(-) diff --git a/cuda/cvectordev.c b/cuda/cvectordev.c index 0eaacbdbd..ea09f80e4 100644 --- a/cuda/cvectordev.c +++ b/cuda/cvectordev.c @@ -42,6 +42,14 @@ int registerMappedFloatComplex(void *buff, void **d_p, int n, cuFloatComplex du return registerMappedMemory(buff,d_p,((size_t) n)*sizeof(cuFloatComplex)); } +int checkMultiVecDeviceFloatComplex(void* deviceMultiVec) +{ + struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceMultiVec; + fprintf(stderr,"checkMultiVecDeviceInt Size: %d Pointer %p\n", + devVec->size_,devVec->v_); + return(0); +} + int writeMultiVecDeviceFloatComplex(void* deviceVec, cuFloatComplex* hostVec) { int i; struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceVec; diff --git a/cuda/cvectordev.h b/cuda/cvectordev.h index 423da33e9..be095ff58 100644 --- a/cuda/cvectordev.h +++ b/cuda/cvectordev.h @@ -40,6 +40,7 @@ #include "vector.h" int registerMappedFloatComplex(void *, void **, int, cuFloatComplex); +int checkMultiVecDeviceFloatComplex(void* deviceMultiVec); int writeMultiVecDeviceFloatComplex(void* deviceMultiVec, cuFloatComplex* hostMultiVec); int writeMultiVecDeviceFloatComplexR2(void* deviceMultiVec, cuFloatComplex* hostMultiVec, int ld); int readMultiVecDeviceFloatComplex(void* deviceMultiVec, cuFloatComplex* hostMultiVec); diff --git a/cuda/dvectordev.c b/cuda/dvectordev.c index 10bbc3267..336aee522 100644 --- a/cuda/dvectordev.c +++ b/cuda/dvectordev.c @@ -42,6 +42,14 @@ int registerMappedDouble(void *buff, void **d_p, int n, double dummy) return registerMappedMemory(buff,d_p,((size_t) n)*sizeof(double)); } +int checkMultiVecDeviceDouble(void* deviceMultiVec) +{ + struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceMultiVec; + fprintf(stderr,"checkMultiVecDeviceInt Size: %d Pointer %p\n", + devVec->size_,devVec->v_); + return(0); +} + int writeMultiVecDeviceDouble(void* deviceVec, double* hostVec) { int i; struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceVec; diff --git a/cuda/dvectordev.h b/cuda/dvectordev.h index 0d2d2ab36..85699ffd1 100644 --- a/cuda/dvectordev.h +++ b/cuda/dvectordev.h @@ -38,6 +38,7 @@ #include "vector.h" int registerMappedDouble(void *, void **, int, double); +int checkMultiVecDeviceDouble(void* deviceMultiVec); int writeMultiVecDeviceDouble(void* deviceMultiVec, double* hostMultiVec); int writeMultiVecDeviceDoubleR2(void* deviceMultiVec, double* hostMultiVec, int ld); int readMultiVecDeviceDouble(void* deviceMultiVec, double* hostMultiVec); diff --git a/cuda/psb_c_cuda_vect_mod.F90 b/cuda/psb_c_cuda_vect_mod.F90 index 711ec885c..4513b2f5f 100644 --- a/cuda/psb_c_cuda_vect_mod.F90 +++ b/cuda/psb_c_cuda_vect_mod.F90 @@ -86,6 +86,7 @@ module psb_c_cuda_vect_mod procedure, nopass :: device_wait => c_cuda_device_wait procedure, pass(x) :: free_buffer => c_cuda_free_buffer procedure, pass(x) :: maybe_free_buffer => c_cuda_maybe_free_buffer + procedure, pass(x) :: check_addr => c_cuda_check_addr procedure, pass(x) :: dot_v => c_cuda_dot_v procedure, pass(x) :: dot_a => c_cuda_dot_a procedure, pass(y) :: axpby_v => c_cuda_axpby_v @@ -219,6 +220,17 @@ contains end subroutine c_cuda_free_buffer + subroutine c_cuda_check_addr(x) + class(psb_c_vect_cuda), intent(inout) :: x + integer(psb_ipk_) info; + select type(ii=> x) + class is (psb_c_vect_cuda) + info = checkMultiVecDeviceFloatComplex(x%deviceVect) + class default + write(0,*) 'Check addr: cuda version, why am I here? ' + end select + end subroutine c_cuda_check_addr + subroutine c_cuda_gthzv_x(i,n,idx,x,y) use psb_cuda_env_mod use psi_serial_mod diff --git a/cuda/psb_c_vectordev_mod.F90 b/cuda/psb_c_vectordev_mod.F90 index 56531c4d0..ea94f435e 100644 --- a/cuda/psb_c_vectordev_mod.F90 +++ b/cuda/psb_c_vectordev_mod.F90 @@ -44,6 +44,15 @@ module psb_c_vectordev_mod end function registerMappedFloatComplex end interface + interface + function checkMultiVecDeviceFloatComplex(deviceVec) & + & result(res) bind(c,name='checkMultiVecDeviceFloatComplex') + use iso_c_binding + integer(c_int) :: res + type(c_ptr), value :: deviceVec + end function checkMultiVecDeviceFloatComplex + end interface + interface writeMultiVecDevice function writeMultiVecDeviceFloatComplex(deviceVec,hostVec) & & result(res) bind(c,name='writeMultiVecDeviceFloatComplex') diff --git a/cuda/psb_d_cuda_vect_mod.F90 b/cuda/psb_d_cuda_vect_mod.F90 index 036d2f01b..b6e38ed6d 100644 --- a/cuda/psb_d_cuda_vect_mod.F90 +++ b/cuda/psb_d_cuda_vect_mod.F90 @@ -86,6 +86,7 @@ module psb_d_cuda_vect_mod procedure, nopass :: device_wait => d_cuda_device_wait procedure, pass(x) :: free_buffer => d_cuda_free_buffer procedure, pass(x) :: maybe_free_buffer => d_cuda_maybe_free_buffer + procedure, pass(x) :: check_addr => d_cuda_check_addr procedure, pass(x) :: dot_v => d_cuda_dot_v procedure, pass(x) :: dot_a => d_cuda_dot_a procedure, pass(y) :: axpby_v => d_cuda_axpby_v @@ -219,6 +220,17 @@ contains end subroutine d_cuda_free_buffer + subroutine d_cuda_check_addr(x) + class(psb_d_vect_cuda), intent(inout) :: x + integer(psb_ipk_) info; + select type(ii=> x) + class is (psb_d_vect_cuda) + info = checkMultiVecDeviceDouble(x%deviceVect) + class default + write(0,*) 'Check addr: cuda version, why am I here? ' + end select + end subroutine d_cuda_check_addr + subroutine d_cuda_gthzv_x(i,n,idx,x,y) use psb_cuda_env_mod use psi_serial_mod diff --git a/cuda/psb_d_vectordev_mod.F90 b/cuda/psb_d_vectordev_mod.F90 index f5ec640e6..368eda346 100644 --- a/cuda/psb_d_vectordev_mod.F90 +++ b/cuda/psb_d_vectordev_mod.F90 @@ -44,6 +44,15 @@ module psb_d_vectordev_mod end function registerMappedDouble end interface + interface + function checkMultiVecDeviceDouble(deviceVec) & + & result(res) bind(c,name='checkMultiVecDeviceDouble') + use iso_c_binding + integer(c_int) :: res + type(c_ptr), value :: deviceVec + end function checkMultiVecDeviceDouble + end interface + interface writeMultiVecDevice function writeMultiVecDeviceDouble(deviceVec,hostVec) & & result(res) bind(c,name='writeMultiVecDeviceDouble') diff --git a/cuda/psb_i_cuda_vect_mod.F90 b/cuda/psb_i_cuda_vect_mod.F90 index aba8fd526..3274a85ef 100644 --- a/cuda/psb_i_cuda_vect_mod.F90 +++ b/cuda/psb_i_cuda_vect_mod.F90 @@ -83,8 +83,8 @@ module psb_i_cuda_vect_mod procedure, nopass :: device_wait => i_cuda_device_wait procedure, pass(x) :: free_buffer => i_cuda_free_buffer procedure, pass(x) :: maybe_free_buffer => i_cuda_maybe_free_buffer - procedure, pass(x) :: check_addr => i_cuda_check_addr + final :: i_cuda_vect_finalize end type psb_i_vect_cuda @@ -213,7 +213,6 @@ contains end select end subroutine i_cuda_check_addr - subroutine i_cuda_gthzv_x(i,n,idx,x,y) use psb_cuda_env_mod use psi_serial_mod @@ -811,12 +810,12 @@ contains integer(psb_ipk_), intent(out) :: info info = 0 + if (allocated(x%v)) deallocate(x%v, stat=info) if (c_associated(x%deviceVect)) then !!$ write(0,*)'d_cuda_free Calling freeMultiVecDevice' call freeMultiVecDevice(x%deviceVect) x%deviceVect=c_null_ptr end if - if (allocated(x%v)) deallocate(x%v, stat=info) call x%free_buffer(info) call x%set_sync() end subroutine i_cuda_free diff --git a/cuda/psb_i_vectordev_mod.F90 b/cuda/psb_i_vectordev_mod.F90 index 0134ffc35..ad9d6cefd 100644 --- a/cuda/psb_i_vectordev_mod.F90 +++ b/cuda/psb_i_vectordev_mod.F90 @@ -44,6 +44,15 @@ module psb_i_vectordev_mod end function registerMappedInt end interface + interface + function checkMultiVecDeviceInt(deviceVec) & + & result(res) bind(c,name='checkMultiVecDeviceInt') + use iso_c_binding + integer(c_int) :: res + type(c_ptr), value :: deviceVec + end function checkMultiVecDeviceInt + end interface + interface writeMultiVecDevice function writeMultiVecDeviceInt(deviceVec,hostVec) & & result(res) bind(c,name='writeMultiVecDeviceInt') @@ -122,15 +131,6 @@ module psb_i_vectordev_mod integer(c_int) :: hidx(m,*) integer(c_int),value :: m,n end function writeMultiInt - end interface writeInt - - interface - function checkMultiVecDeviceInt(deviceVec) & - & result(res) bind(c,name='checkMultiVecDeviceInt') - use iso_c_binding - integer(c_int) :: res - type(c_ptr), value :: deviceVec - end function checkMultiVecDeviceInt end interface interface readInt diff --git a/cuda/psb_s_cuda_vect_mod.F90 b/cuda/psb_s_cuda_vect_mod.F90 index 973ac78cf..87fd12542 100644 --- a/cuda/psb_s_cuda_vect_mod.F90 +++ b/cuda/psb_s_cuda_vect_mod.F90 @@ -86,6 +86,7 @@ module psb_s_cuda_vect_mod procedure, nopass :: device_wait => s_cuda_device_wait procedure, pass(x) :: free_buffer => s_cuda_free_buffer procedure, pass(x) :: maybe_free_buffer => s_cuda_maybe_free_buffer + procedure, pass(x) :: check_addr => s_cuda_check_addr procedure, pass(x) :: dot_v => s_cuda_dot_v procedure, pass(x) :: dot_a => s_cuda_dot_a procedure, pass(y) :: axpby_v => s_cuda_axpby_v @@ -219,6 +220,17 @@ contains end subroutine s_cuda_free_buffer + subroutine s_cuda_check_addr(x) + class(psb_s_vect_cuda), intent(inout) :: x + integer(psb_ipk_) info; + select type(ii=> x) + class is (psb_s_vect_cuda) + info = checkMultiVecDeviceFloat(x%deviceVect) + class default + write(0,*) 'Check addr: cuda version, why am I here? ' + end select + end subroutine s_cuda_check_addr + subroutine s_cuda_gthzv_x(i,n,idx,x,y) use psb_cuda_env_mod use psi_serial_mod diff --git a/cuda/psb_s_vectordev_mod.F90 b/cuda/psb_s_vectordev_mod.F90 index 38052ca5b..28dd14606 100644 --- a/cuda/psb_s_vectordev_mod.F90 +++ b/cuda/psb_s_vectordev_mod.F90 @@ -44,6 +44,15 @@ module psb_s_vectordev_mod end function registerMappedFloat end interface + interface + function checkMultiVecDeviceFloat(deviceVec) & + & result(res) bind(c,name='checkMultiVecDeviceFloat') + use iso_c_binding + integer(c_int) :: res + type(c_ptr), value :: deviceVec + end function checkMultiVecDeviceFloat + end interface + interface writeMultiVecDevice function writeMultiVecDeviceFloat(deviceVec,hostVec) & & result(res) bind(c,name='writeMultiVecDeviceFloat') diff --git a/cuda/psb_z_cuda_vect_mod.F90 b/cuda/psb_z_cuda_vect_mod.F90 index 88c749360..b30488e6f 100644 --- a/cuda/psb_z_cuda_vect_mod.F90 +++ b/cuda/psb_z_cuda_vect_mod.F90 @@ -86,6 +86,7 @@ module psb_z_cuda_vect_mod procedure, nopass :: device_wait => z_cuda_device_wait procedure, pass(x) :: free_buffer => z_cuda_free_buffer procedure, pass(x) :: maybe_free_buffer => z_cuda_maybe_free_buffer + procedure, pass(x) :: check_addr => z_cuda_check_addr procedure, pass(x) :: dot_v => z_cuda_dot_v procedure, pass(x) :: dot_a => z_cuda_dot_a procedure, pass(y) :: axpby_v => z_cuda_axpby_v @@ -219,6 +220,17 @@ contains end subroutine z_cuda_free_buffer + subroutine z_cuda_check_addr(x) + class(psb_z_vect_cuda), intent(inout) :: x + integer(psb_ipk_) info; + select type(ii=> x) + class is (psb_z_vect_cuda) + info = checkMultiVecDeviceDoubleComplex(x%deviceVect) + class default + write(0,*) 'Check addr: cuda version, why am I here? ' + end select + end subroutine z_cuda_check_addr + subroutine z_cuda_gthzv_x(i,n,idx,x,y) use psb_cuda_env_mod use psi_serial_mod diff --git a/cuda/psb_z_vectordev_mod.F90 b/cuda/psb_z_vectordev_mod.F90 index b893fbdc1..90f30ce68 100644 --- a/cuda/psb_z_vectordev_mod.F90 +++ b/cuda/psb_z_vectordev_mod.F90 @@ -44,6 +44,15 @@ module psb_z_vectordev_mod end function registerMappedDoubleComplex end interface + interface + function checkMultiVecDeviceDoubleComplex(deviceVec) & + & result(res) bind(c,name='checkMultiVecDeviceDoubleComplex') + use iso_c_binding + integer(c_int) :: res + type(c_ptr), value :: deviceVec + end function checkMultiVecDeviceDoubleComplex + end interface + interface writeMultiVecDevice function writeMultiVecDeviceDoubleComplex(deviceVec,hostVec) & & result(res) bind(c,name='writeMultiVecDeviceDoubleComplex') diff --git a/cuda/svectordev.c b/cuda/svectordev.c index e1c43b5e9..3bf326654 100644 --- a/cuda/svectordev.c +++ b/cuda/svectordev.c @@ -42,6 +42,14 @@ int registerMappedFloat(void *buff, void **d_p, int n, float dummy) return registerMappedMemory(buff,d_p,((size_t) n)*sizeof(float)); } +int checkMultiVecDeviceFloat(void* deviceMultiVec) +{ + struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceMultiVec; + fprintf(stderr,"checkMultiVecDeviceInt Size: %d Pointer %p\n", + devVec->size_,devVec->v_); + return(0); +} + int writeMultiVecDeviceFloat(void* deviceVec, float* hostVec) { int i; struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceVec; diff --git a/cuda/svectordev.h b/cuda/svectordev.h index 887a7755a..2077c1d3f 100644 --- a/cuda/svectordev.h +++ b/cuda/svectordev.h @@ -38,6 +38,7 @@ #include "vector.h" int registerMappedFloat(void *, void **, int, float); +int checkMultiVecDeviceFloat(void* deviceMultiVec); int writeMultiVecDeviceFloat(void* deviceMultiVec, float* hostMultiVec); int writeMultiVecDeviceFloatR2(void* deviceMultiVec, float* hostMultiVec, int ld); int readMultiVecDeviceFloat(void* deviceMultiVec, float* hostMultiVec); diff --git a/cuda/zvectordev.c b/cuda/zvectordev.c index 102ba0d2c..ce0458730 100644 --- a/cuda/zvectordev.c +++ b/cuda/zvectordev.c @@ -42,6 +42,14 @@ int registerMappedDoubleComplex(void *buff, void **d_p, int n, cuDoubleComplex return registerMappedMemory(buff,d_p,((size_t) n)*sizeof(cuDoubleComplex)); } +int checkMultiVecDeviceDoubleComplex(void* deviceMultiVec) +{ + struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceMultiVec; + fprintf(stderr,"checkMultiVecDeviceInt Size: %d Pointer %p\n", + devVec->size_,devVec->v_); + return(0); +} + int writeMultiVecDeviceDoubleComplex(void* deviceVec, cuDoubleComplex* hostVec) { int i; struct MultiVectDevice *devVec = (struct MultiVectDevice *) deviceVec; diff --git a/cuda/zvectordev.h b/cuda/zvectordev.h index 023c7f130..3f08da83e 100644 --- a/cuda/zvectordev.h +++ b/cuda/zvectordev.h @@ -40,6 +40,7 @@ #include "vector.h" int registerMappedDoubleComplex(void *, void **, int, cuDoubleComplex); +int checkMultiVecDeviceDoubleComplex(void* deviceMultiVec); int writeMultiVecDeviceDoubleComplex(void* deviceMultiVec, cuDoubleComplex* hostMultiVec); int writeMultiVecDeviceDoubleComplexR2(void* deviceMultiVec, cuDoubleComplex* hostMultiVec, int ld); From 174a8fc54206b2fb291ba52d3eb6c77425fd5c70 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 12 Feb 2026 12:52:03 +0100 Subject: [PATCH 102/175] Fix use of psb_ext_mod from cbind --- cbind/base/psb_base_cbind_mod.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/cbind/base/psb_base_cbind_mod.f90 b/cbind/base/psb_base_cbind_mod.f90 index f7d74e743..036e662ab 100644 --- a/cbind/base/psb_base_cbind_mod.f90 +++ b/cbind/base/psb_base_cbind_mod.f90 @@ -11,4 +11,5 @@ module psb_base_cbind_mod use psb_c_comm_cbind_mod use psb_z_comm_cbind_mod use psb_base_psblas_cbind_mod + use psb_ext_mod end module psb_base_cbind_mod From 3d92668973181c381dbe3bf7af5bac2c5efce8f1 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 12 Feb 2026 12:54:50 +0100 Subject: [PATCH 103/175] Change name of desc%get_list into desc%get_list_p --- base/comm/internals/psi_cswapdata.F90 | 4 +- base/comm/internals/psi_cswapdata_a.F90 | 4 +- base/comm/internals/psi_cswaptran.F90 | 4 +- base/comm/internals/psi_cswaptran_a.F90 | 4 +- base/comm/internals/psi_dswapdata.F90 | 4 +- base/comm/internals/psi_dswapdata_a.F90 | 4 +- base/comm/internals/psi_dswaptran.F90 | 4 +- base/comm/internals/psi_dswaptran_a.F90 | 4 +- base/comm/internals/psi_eswapdata_a.F90 | 4 +- base/comm/internals/psi_eswaptran_a.F90 | 4 +- base/comm/internals/psi_i2swapdata_a.F90 | 4 +- base/comm/internals/psi_i2swaptran_a.F90 | 4 +- base/comm/internals/psi_iswapdata.F90 | 4 +- base/comm/internals/psi_iswaptran.F90 | 4 +- base/comm/internals/psi_lswapdata.F90 | 4 +- base/comm/internals/psi_lswaptran.F90 | 4 +- base/comm/internals/psi_mswapdata_a.F90 | 4 +- base/comm/internals/psi_mswaptran_a.F90 | 4 +- base/comm/internals/psi_sswapdata.F90 | 4 +- base/comm/internals/psi_sswapdata_a.F90 | 4 +- base/comm/internals/psi_sswaptran.F90 | 4 +- base/comm/internals/psi_sswaptran_a.F90 | 4 +- base/comm/internals/psi_zswapdata.F90 | 4 +- base/comm/internals/psi_zswapdata_a.F90 | 4 +- base/comm/internals/psi_zswaptran.F90 | 4 +- base/comm/internals/psi_zswaptran_a.F90 | 4 +- base/modules/desc/psb_desc_mod.F90 | 91 +++++++++++++++--------- base/tools/psb_cdprt.f90 | 4 +- base/tools/psb_csphalo.F90 | 8 +-- base/tools/psb_dsphalo.F90 | 8 +-- base/tools/psb_ssphalo.F90 | 8 +-- base/tools/psb_zsphalo.F90 | 8 +-- 32 files changed, 128 insertions(+), 103 deletions(-) diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index db76d16e7..613770341 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -144,7 +144,7 @@ subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -482,7 +482,7 @@ subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_cswapdata_a.F90 b/base/comm/internals/psi_cswapdata_a.F90 index 844daa00a..307842b46 100644 --- a/base/comm/internals/psi_cswapdata_a.F90 +++ b/base/comm/internals/psi_cswapdata_a.F90 @@ -139,7 +139,7 @@ subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -617,7 +617,7 @@ subroutine psi_cswapdatav(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index 28b356c8d..27dd40859 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -146,7 +146,7 @@ subroutine psi_cswaptran_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -492,7 +492,7 @@ subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_cswaptran_a.F90 b/base/comm/internals/psi_cswaptran_a.F90 index e46a556d3..b3b78c9ba 100644 --- a/base/comm/internals/psi_cswaptran_a.F90 +++ b/base/comm/internals/psi_cswaptran_a.F90 @@ -144,7 +144,7 @@ subroutine psi_cswaptranm(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -628,7 +628,7 @@ subroutine psi_cswaptranv(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index fb1924be5..28b5a6d40 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -144,7 +144,7 @@ subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -482,7 +482,7 @@ subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_dswapdata_a.F90 b/base/comm/internals/psi_dswapdata_a.F90 index d86025cff..6c370b82c 100644 --- a/base/comm/internals/psi_dswapdata_a.F90 +++ b/base/comm/internals/psi_dswapdata_a.F90 @@ -139,7 +139,7 @@ subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -617,7 +617,7 @@ subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index 25cd82767..3d66fb41e 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -146,7 +146,7 @@ subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -492,7 +492,7 @@ subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_dswaptran_a.F90 b/base/comm/internals/psi_dswaptran_a.F90 index e5966c2e0..51ae5867a 100644 --- a/base/comm/internals/psi_dswaptran_a.F90 +++ b/base/comm/internals/psi_dswaptran_a.F90 @@ -144,7 +144,7 @@ subroutine psi_dswaptranm(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -628,7 +628,7 @@ subroutine psi_dswaptranv(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_eswapdata_a.F90 b/base/comm/internals/psi_eswapdata_a.F90 index d917b64cd..104aee387 100644 --- a/base/comm/internals/psi_eswapdata_a.F90 +++ b/base/comm/internals/psi_eswapdata_a.F90 @@ -139,7 +139,7 @@ subroutine psi_eswapdatam(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -617,7 +617,7 @@ subroutine psi_eswapdatav(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_eswaptran_a.F90 b/base/comm/internals/psi_eswaptran_a.F90 index 67a925699..a93dd6b7d 100644 --- a/base/comm/internals/psi_eswaptran_a.F90 +++ b/base/comm/internals/psi_eswaptran_a.F90 @@ -144,7 +144,7 @@ subroutine psi_eswaptranm(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -628,7 +628,7 @@ subroutine psi_eswaptranv(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_i2swapdata_a.F90 b/base/comm/internals/psi_i2swapdata_a.F90 index 3d82d5b11..58dbb517b 100644 --- a/base/comm/internals/psi_i2swapdata_a.F90 +++ b/base/comm/internals/psi_i2swapdata_a.F90 @@ -139,7 +139,7 @@ subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -617,7 +617,7 @@ subroutine psi_i2swapdatav(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_i2swaptran_a.F90 b/base/comm/internals/psi_i2swaptran_a.F90 index 925e8a0cb..7d3887404 100644 --- a/base/comm/internals/psi_i2swaptran_a.F90 +++ b/base/comm/internals/psi_i2swaptran_a.F90 @@ -144,7 +144,7 @@ subroutine psi_i2swaptranm(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -628,7 +628,7 @@ subroutine psi_i2swaptranv(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index d73277efe..c57af1d0c 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -144,7 +144,7 @@ subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -482,7 +482,7 @@ subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index 9f58455a8..601ded781 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -146,7 +146,7 @@ subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -492,7 +492,7 @@ subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index 2d819ae9e..566db1e9a 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -144,7 +144,7 @@ subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -482,7 +482,7 @@ subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index 3bf0eacd1..4c33fde05 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -146,7 +146,7 @@ subroutine psi_lswaptran_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -492,7 +492,7 @@ subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_mswapdata_a.F90 b/base/comm/internals/psi_mswapdata_a.F90 index bda186b8e..774c53e41 100644 --- a/base/comm/internals/psi_mswapdata_a.F90 +++ b/base/comm/internals/psi_mswapdata_a.F90 @@ -139,7 +139,7 @@ subroutine psi_mswapdatam(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -617,7 +617,7 @@ subroutine psi_mswapdatav(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_mswaptran_a.F90 b/base/comm/internals/psi_mswaptran_a.F90 index 65e3e6c7d..fca78eb7d 100644 --- a/base/comm/internals/psi_mswaptran_a.F90 +++ b/base/comm/internals/psi_mswaptran_a.F90 @@ -144,7 +144,7 @@ subroutine psi_mswaptranm(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -628,7 +628,7 @@ subroutine psi_mswaptranv(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index e3b49e348..3d594e76b 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -144,7 +144,7 @@ subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -482,7 +482,7 @@ subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_sswapdata_a.F90 b/base/comm/internals/psi_sswapdata_a.F90 index ae4561621..601ca35be 100644 --- a/base/comm/internals/psi_sswapdata_a.F90 +++ b/base/comm/internals/psi_sswapdata_a.F90 @@ -139,7 +139,7 @@ subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -617,7 +617,7 @@ subroutine psi_sswapdatav(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index abb0ebed7..03b25a871 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -146,7 +146,7 @@ subroutine psi_sswaptran_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -492,7 +492,7 @@ subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_sswaptran_a.F90 b/base/comm/internals/psi_sswaptran_a.F90 index f4f9513ed..5a1f80c0f 100644 --- a/base/comm/internals/psi_sswaptran_a.F90 +++ b/base/comm/internals/psi_sswaptran_a.F90 @@ -144,7 +144,7 @@ subroutine psi_sswaptranm(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -628,7 +628,7 @@ subroutine psi_sswaptranv(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index 53147c846..f6fa7ebf7 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -144,7 +144,7 @@ subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -482,7 +482,7 @@ subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_zswapdata_a.F90 b/base/comm/internals/psi_zswapdata_a.F90 index c0ac76f53..52160b611 100644 --- a/base/comm/internals/psi_zswapdata_a.F90 +++ b/base/comm/internals/psi_zswapdata_a.F90 @@ -139,7 +139,7 @@ subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -617,7 +617,7 @@ subroutine psi_zswapdatav(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_zswaptran.F90 b/base/comm/internals/psi_zswaptran.F90 index 367dbd33d..33334a283 100644 --- a/base/comm/internals/psi_zswaptran.F90 +++ b/base/comm/internals/psi_zswaptran.F90 @@ -146,7 +146,7 @@ subroutine psi_zswaptran_vect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -492,7 +492,7 @@ subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/comm/internals/psi_zswaptran_a.F90 b/base/comm/internals/psi_zswaptran_a.F90 index 804acb6bd..64ca18f1f 100644 --- a/base/comm/internals/psi_zswaptran_a.F90 +++ b/base/comm/internals/psi_zswaptran_a.F90 @@ -144,7 +144,7 @@ subroutine psi_zswaptranm(flag,n,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 @@ -628,7 +628,7 @@ subroutine psi_zswaptranv(flag,beta,y,desc_a,work,info,data) data_ = psb_comm_halo_ end if - call desc_a%get_list(data_,d_idx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 diff --git a/base/modules/desc/psb_desc_mod.F90 b/base/modules/desc/psb_desc_mod.F90 index 07a7f755d..b83542a4a 100644 --- a/base/modules/desc/psb_desc_mod.F90 +++ b/base/modules/desc/psb_desc_mod.F90 @@ -236,9 +236,9 @@ module psb_desc_mod procedure, pass(desc) :: get_p_adjcncy => cd_get_p_adjcncy procedure, pass(desc) :: set_p_adjcncy => cd_set_p_adjcncy procedure, pass(desc) :: xtnd_p_adjcncy => cd_xtnd_p_adjcncy - procedure, pass(desc) :: a_get_list => psb_cd_get_list - procedure, pass(desc) :: v_get_list => psb_cd_v_get_list - generic, public :: get_list => a_get_list, v_get_list + procedure, pass(desc) :: a_get_list_p => psb_cd_get_list_p + procedure, pass(desc) :: v_get_list_p => psb_cd_v_get_list_p + generic, public :: get_list_p => a_get_list_p, v_get_list_p procedure, pass(desc) :: sizeof => psb_cd_sizeof procedure, pass(desc) :: clone => psb_cd_clone procedure, pass(desc) :: cnv => psb_cd_cnv @@ -742,7 +742,7 @@ contains - subroutine psb_cd_get_list(data,desc,ipnt,totxch,idxr,idxs,info) + subroutine psb_cd_get_list_p(data,desc,ipnt,totxch,idxr,idxs,info) use psb_const_mod use psb_error_mod use psb_penv_mod @@ -757,7 +757,7 @@ contains type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, debug_level, debug_unit logical, parameter :: debug=.false., debugprt=.false. - character(len=20), parameter :: name='psb_cd_get_list' + character(len=20), parameter :: name='psb_cd_get_list_p' info = psb_success_ call psb_erractionsave(err_act) @@ -769,12 +769,25 @@ contains call psb_info(ctxt, me, np) select case(data) - case(psb_comm_halo_) - ipnt => desc%halo_index + case(psb_comm_halo_) + if (allocated(desc%halo_index)) then + ipnt => desc%halo_index + else + info = psb_err_invalid_cd_state_ + end if case(psb_comm_ovr_) - ipnt => desc%ovrlap_index + if (allocated(desc%ovrlap_index)) then + ipnt => desc%ovrlap_index + else + info = psb_err_invalid_cd_state_ + end if + case(psb_comm_ext_) - ipnt => desc%ext_index + if (allocated(desc%ext_index)) then + ipnt => desc%ext_index + else + info = psb_err_invalid_cd_state_ + end if if (debug_level >= psb_debug_ext_) then if (.not.associated(desc%base_desc)) then write(debug_unit,*) trim(name),& @@ -788,12 +801,17 @@ contains end if end if case(psb_comm_mov_) - ipnt => desc%ovr_mst_idx + if (allocated(desc%ovr_mst_idx)) then + ipnt => desc%ovr_mst_idx + else + info = psb_err_invalid_cd_state_ + end if case default info=psb_err_from_subroutine_ call psb_errpush(info,name,a_err='wrong Data selector') - goto 9999 end select + if (info /= 0) goto 9999 + call psb_get_xch_idx(ipnt,totxch,idxs,idxr) @@ -805,10 +823,10 @@ contains return - end subroutine psb_cd_get_list + end subroutine psb_cd_get_list_p - subroutine psb_cd_v_get_list(data,desc,ipnt,totxch,idxr,idxs,info) + subroutine psb_cd_v_get_list_p(data,desc,ipnt,totxch,idxr,idxs,info) use psb_const_mod use psb_error_mod use psb_penv_mod @@ -822,7 +840,7 @@ contains type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, debug_level, debug_unit logical, parameter :: debug=.false., debugprt=.false. - character(len=20), parameter :: name='psb_cd_v_get_list' + character(len=20), parameter :: name='psb_cd_v_get_list_p' info = psb_success_ call psb_erractionsave(err_act) @@ -834,18 +852,25 @@ contains call psb_info(ctxt, me, np) select case(data) - case(psb_comm_halo_) - ipnt => desc%v_halo_index%v - if (.not.allocated(desc%v_halo_index%v)) & - & info = psb_err_inconsistent_index_lists_ + case(psb_comm_halo_) + if (allocated(desc%v_halo_index%v)) then + ipnt => desc%v_halo_index%v + else + info = psb_err_inconsistent_index_lists_ + end if case(psb_comm_ovr_) - ipnt => desc%v_ovrlap_index%v - if (.not.allocated(desc%v_ovrlap_index%v)) & - & info = psb_err_inconsistent_index_lists_ + if (allocated(desc%v_ovrlap_index%v)) then + ipnt => desc%v_ovrlap_index%v + else + info = psb_err_inconsistent_index_lists_ + end if + case(psb_comm_ext_) - ipnt => desc%v_ext_index%v - if (.not.allocated(desc%v_ext_index%v)) & - & info = psb_err_inconsistent_index_lists_ + if (allocated(desc%v_ext_index%v)) then + ipnt => desc%v_ext_index%v + else + info = psb_err_inconsistent_index_lists_ + end if if (debug_level >= psb_debug_ext_) then if (.not.associated(desc%base_desc)) then write(debug_unit,*) trim(name),& @@ -859,17 +884,17 @@ contains end if end if case(psb_comm_mov_) - ipnt => desc%v_ovr_mst_idx%v - if (.not.allocated(desc%v_ovr_mst_idx%v)) & - & info = psb_err_inconsistent_index_lists_ - + if (allocated(desc%v_ovr_mst_idx%v)) then + ipnt => desc%v_ovr_mst_idx%v + else + info = psb_err_inconsistent_index_lists_ + end if case default info=psb_err_from_subroutine_ - end select - if (info /= psb_success_) then call psb_errpush(info,name,a_err='wrong Data selector') - goto 9999 - end if + end select + if (info /= 0) goto 9999 + call psb_get_v_xch_idx(ipnt,totxch,idxs,idxr) @@ -881,7 +906,7 @@ contains return - end subroutine psb_cd_v_get_list + end subroutine psb_cd_v_get_list_p ! ! Subroutine: psb_cdfree diff --git a/base/tools/psb_cdprt.f90 b/base/tools/psb_cdprt.f90 index 1e14ed640..473995df0 100644 --- a/base/tools/psb_cdprt.f90 +++ b/base/tools/psb_cdprt.f90 @@ -169,7 +169,7 @@ contains else data_ = psb_comm_halo_ end if - call psb_cd_v_get_list(data_,desc_p,vpnt,totxch,idxr,idxs,info) + call desc_p%get_list_p(data_,vpnt,totxch,idxr,idxs,info) res = totxch end function get_nxchg @@ -201,7 +201,7 @@ contains verb_ = 1 end if - call psb_cd_v_get_list(data_,desc_p,vpnt,totxch,idxr,idxs,info) + call desc_p%get_list_p(data_,vpnt,totxch,idxr,idxs,info) if (glob) & & call psb_realloc(max(idxr,idxs,1),gidx,info) diff --git a/base/tools/psb_csphalo.F90 b/base/tools/psb_csphalo.F90 index 4c56cc5ef..dc2014adc 100644 --- a/base/tools/psb_csphalo.F90 +++ b/base/tools/psb_csphalo.F90 @@ -198,7 +198,7 @@ Subroutine psb_csphalo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 @@ -658,7 +658,7 @@ Subroutine psb_lcsphalo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract and send/receive. lnr = 0 @@ -1004,7 +1004,7 @@ Subroutine psb_lc_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 @@ -1366,7 +1366,7 @@ Subroutine psb_c_lc_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 diff --git a/base/tools/psb_dsphalo.F90 b/base/tools/psb_dsphalo.F90 index c793eb2a1..9ae0677f0 100644 --- a/base/tools/psb_dsphalo.F90 +++ b/base/tools/psb_dsphalo.F90 @@ -198,7 +198,7 @@ Subroutine psb_dsphalo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 @@ -658,7 +658,7 @@ Subroutine psb_ldsphalo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract and send/receive. lnr = 0 @@ -1004,7 +1004,7 @@ Subroutine psb_ld_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 @@ -1366,7 +1366,7 @@ Subroutine psb_d_ld_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 diff --git a/base/tools/psb_ssphalo.F90 b/base/tools/psb_ssphalo.F90 index 81e9616f9..a1ba28ef7 100644 --- a/base/tools/psb_ssphalo.F90 +++ b/base/tools/psb_ssphalo.F90 @@ -198,7 +198,7 @@ Subroutine psb_ssphalo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 @@ -658,7 +658,7 @@ Subroutine psb_lssphalo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract and send/receive. lnr = 0 @@ -1004,7 +1004,7 @@ Subroutine psb_ls_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 @@ -1366,7 +1366,7 @@ Subroutine psb_s_ls_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 diff --git a/base/tools/psb_zsphalo.F90 b/base/tools/psb_zsphalo.F90 index 6d814b39e..89dbc4dd3 100644 --- a/base/tools/psb_zsphalo.F90 +++ b/base/tools/psb_zsphalo.F90 @@ -198,7 +198,7 @@ Subroutine psb_zsphalo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 @@ -658,7 +658,7 @@ Subroutine psb_lzsphalo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract and send/receive. lnr = 0 @@ -1004,7 +1004,7 @@ Subroutine psb_lz_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 @@ -1366,7 +1366,7 @@ Subroutine psb_z_lz_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& idxs = 0 idxr = 0 - call desc_a%get_list(data_,pdxv,totxch,nxr,nxs,info) + call desc_a%get_list_p(data_,pdxv,totxch,nxr,nxs,info) ipdxv = pdxv%get_vect() ! For all rows in the halo descriptor, extract the row size lnr = 0 From ac7b8c2f613f402b724eb7a5419ab5408d764d1f Mon Sep 17 00:00:00 2001 From: Marco Feder Date: Sun, 8 Mar 2026 01:28:44 +0100 Subject: [PATCH 104/175] Fix undefined references to extended sparse matrix format with C interface --- cbind/test/pdegen/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cbind/test/pdegen/Makefile b/cbind/test/pdegen/Makefile index cd7c8d680..a3e0a38f6 100644 --- a/cbind/test/pdegen/Makefile +++ b/cbind/test/pdegen/Makefile @@ -9,7 +9,7 @@ FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) PSBC_LIBS= -L$(LIBDIR) -lpsb_cbind -PSB_LIBS=-lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base -L$(LIBDIR) +PSB_LIBS=-lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_ext -lpsb_base -L$(LIBDIR) # # Compilers and such From 1f8235b7d035c3722f97da2dfbe88b4878e9c6ec Mon Sep 17 00:00:00 2001 From: Matthias Maier Date: Sun, 8 Mar 2026 00:23:53 -0600 Subject: [PATCH 105/175] fix file name in cbind/CMakeLists.txt --- cbind/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cbind/CMakeLists.txt b/cbind/CMakeLists.txt index 18bd3ad72..c700b5a88 100644 --- a/cbind/CMakeLists.txt +++ b/cbind/CMakeLists.txt @@ -19,7 +19,7 @@ set(PSB_cbind_source_files base/psb_c_psblas_cbind_mod.f90 base/psb_d_comm_cbind_mod.f90 base/psb_z_tools_cbind_mod.F90 - base/psb_cpenv_mod.f90 + base/psb_cpenv_mod.F90 util/psb_c_util_cbind_mod.f90 util/psb_s_util_cbind_mod.f90 util/psb_util_cbind_mod.f90 From 9c3084985a6a05678f9c19d27d8b974adcdf9376 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 10 Mar 2026 10:14:08 +0100 Subject: [PATCH 106/175] Cosmetic change in desc_const_mod --- base/modules/desc/psb_desc_const_mod.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/modules/desc/psb_desc_const_mod.f90 b/base/modules/desc/psb_desc_const_mod.f90 index 280d1f2ab..8cfbc208f 100644 --- a/base/modules/desc/psb_desc_const_mod.f90 +++ b/base/modules/desc/psb_desc_const_mod.f90 @@ -69,7 +69,8 @@ module psb_desc_const_mod integer(psb_ipk_), parameter :: psb_map_aggr_ = psb_map_asov_+1 integer(psb_ipk_), parameter :: psb_map_gen_linear_ = psb_map_aggr_+1 - integer(psb_ipk_), parameter :: psb_ovt_xhal_ = psb_map_xhal_, psb_ovt_asov_=psb_map_asov_ + integer(psb_ipk_), parameter :: psb_ovt_xhal_ = psb_map_xhal_ + integer(psb_ipk_), parameter :: psb_ovt_asov_ = psb_map_asov_ ! ! Entries and values in desc%matrix_data ! From e8c5c0b8b080754327c2fbe5a96579a10266f211 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 12 Mar 2026 16:29:18 +0100 Subject: [PATCH 107/175] Add clear argument to reinit method in vectors. --- base/modules/serial/psb_c_base_vect_mod.F90 | 14 +++++++++++--- base/modules/serial/psb_c_vect_mod.F90 | 5 +++-- base/modules/serial/psb_d_base_vect_mod.F90 | 14 +++++++++++--- base/modules/serial/psb_d_vect_mod.F90 | 5 +++-- base/modules/serial/psb_i_base_vect_mod.F90 | 14 +++++++++++--- base/modules/serial/psb_i_vect_mod.F90 | 5 +++-- base/modules/serial/psb_l_base_vect_mod.F90 | 14 +++++++++++--- base/modules/serial/psb_l_vect_mod.F90 | 5 +++-- base/modules/serial/psb_s_base_vect_mod.F90 | 14 +++++++++++--- base/modules/serial/psb_s_vect_mod.F90 | 5 +++-- base/modules/serial/psb_z_base_vect_mod.F90 | 14 +++++++++++--- base/modules/serial/psb_z_vect_mod.F90 | 5 +++-- 12 files changed, 84 insertions(+), 30 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index b3c82989c..a30e25470 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -418,16 +418,24 @@ contains end subroutine c_base_mold - subroutine c_base_reinit(x, info) + subroutine c_base_reinit(x, info,clear) use psi_serial_mod use psb_realloc_mod implicit none class(psb_c_base_vect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + logical :: clear_ + + if (present(clear)) then + clear_ = clear + else + clear_ = .true. + end if if (allocated(x%v)) then - call x%sync() - x%v(:) = czero + if (x%is_dev()) call x%sync() + if (clear_) x%v(:) = czero call x%set_host() call x%set_upd() end if diff --git a/base/modules/serial/psb_c_vect_mod.F90 b/base/modules/serial/psb_c_vect_mod.F90 index 8391232f5..8932a369f 100644 --- a/base/modules/serial/psb_c_vect_mod.F90 +++ b/base/modules/serial/psb_c_vect_mod.F90 @@ -613,12 +613,13 @@ contains call x%set_bld() end subroutine c_vect_all - subroutine c_vect_reinit(x, info) + subroutine c_vect_reinit(x, info, clear) implicit none class(psb_c_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear - if (allocated(x%v)) call x%v%reinit(info) + if (allocated(x%v)) call x%v%reinit(info,clear) call x%set_upd() end subroutine c_vect_reinit diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 27b8fe4bd..1e6f45752 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -425,16 +425,24 @@ contains end subroutine d_base_mold - subroutine d_base_reinit(x, info) + subroutine d_base_reinit(x, info,clear) use psi_serial_mod use psb_realloc_mod implicit none class(psb_d_base_vect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + logical :: clear_ + + if (present(clear)) then + clear_ = clear + else + clear_ = .true. + end if if (allocated(x%v)) then - call x%sync() - x%v(:) = dzero + if (x%is_dev()) call x%sync() + if (clear_) x%v(:) = dzero call x%set_host() call x%set_upd() end if diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index f13bd5177..048703db8 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -620,12 +620,13 @@ contains call x%set_bld() end subroutine d_vect_all - subroutine d_vect_reinit(x, info) + subroutine d_vect_reinit(x, info, clear) implicit none class(psb_d_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear - if (allocated(x%v)) call x%v%reinit(info) + if (allocated(x%v)) call x%v%reinit(info,clear) call x%set_upd() end subroutine d_vect_reinit diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 78672b58a..21413168b 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -351,16 +351,24 @@ contains end subroutine i_base_mold - subroutine i_base_reinit(x, info) + subroutine i_base_reinit(x, info,clear) use psi_serial_mod use psb_realloc_mod implicit none class(psb_i_base_vect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + logical :: clear_ + + if (present(clear)) then + clear_ = clear + else + clear_ = .true. + end if if (allocated(x%v)) then - call x%sync() - x%v(:) = izero + if (x%is_dev()) call x%sync() + if (clear_) x%v(:) = izero call x%set_host() call x%set_upd() end if diff --git a/base/modules/serial/psb_i_vect_mod.F90 b/base/modules/serial/psb_i_vect_mod.F90 index 53227a6af..83ad6b799 100644 --- a/base/modules/serial/psb_i_vect_mod.F90 +++ b/base/modules/serial/psb_i_vect_mod.F90 @@ -558,12 +558,13 @@ contains call x%set_bld() end subroutine i_vect_all - subroutine i_vect_reinit(x, info) + subroutine i_vect_reinit(x, info, clear) implicit none class(psb_i_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear - if (allocated(x%v)) call x%v%reinit(info) + if (allocated(x%v)) call x%v%reinit(info,clear) call x%set_upd() end subroutine i_vect_reinit diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index c2edc5055..874c097cf 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -352,16 +352,24 @@ contains end subroutine l_base_mold - subroutine l_base_reinit(x, info) + subroutine l_base_reinit(x, info,clear) use psi_serial_mod use psb_realloc_mod implicit none class(psb_l_base_vect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + logical :: clear_ + + if (present(clear)) then + clear_ = clear + else + clear_ = .true. + end if if (allocated(x%v)) then - call x%sync() - x%v(:) = lzero + if (x%is_dev()) call x%sync() + if (clear_) x%v(:) = lzero call x%set_host() call x%set_upd() end if diff --git a/base/modules/serial/psb_l_vect_mod.F90 b/base/modules/serial/psb_l_vect_mod.F90 index 34809264b..80813a1c9 100644 --- a/base/modules/serial/psb_l_vect_mod.F90 +++ b/base/modules/serial/psb_l_vect_mod.F90 @@ -559,12 +559,13 @@ contains call x%set_bld() end subroutine l_vect_all - subroutine l_vect_reinit(x, info) + subroutine l_vect_reinit(x, info, clear) implicit none class(psb_l_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear - if (allocated(x%v)) call x%v%reinit(info) + if (allocated(x%v)) call x%v%reinit(info,clear) call x%set_upd() end subroutine l_vect_reinit diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index 5202a3813..ef35fc8a1 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -425,16 +425,24 @@ contains end subroutine s_base_mold - subroutine s_base_reinit(x, info) + subroutine s_base_reinit(x, info,clear) use psi_serial_mod use psb_realloc_mod implicit none class(psb_s_base_vect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + logical :: clear_ + + if (present(clear)) then + clear_ = clear + else + clear_ = .true. + end if if (allocated(x%v)) then - call x%sync() - x%v(:) = szero + if (x%is_dev()) call x%sync() + if (clear_) x%v(:) = szero call x%set_host() call x%set_upd() end if diff --git a/base/modules/serial/psb_s_vect_mod.F90 b/base/modules/serial/psb_s_vect_mod.F90 index 95516eb21..dda736c4b 100644 --- a/base/modules/serial/psb_s_vect_mod.F90 +++ b/base/modules/serial/psb_s_vect_mod.F90 @@ -620,12 +620,13 @@ contains call x%set_bld() end subroutine s_vect_all - subroutine s_vect_reinit(x, info) + subroutine s_vect_reinit(x, info, clear) implicit none class(psb_s_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear - if (allocated(x%v)) call x%v%reinit(info) + if (allocated(x%v)) call x%v%reinit(info,clear) call x%set_upd() end subroutine s_vect_reinit diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 7e11d7e53..141974086 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -418,16 +418,24 @@ contains end subroutine z_base_mold - subroutine z_base_reinit(x, info) + subroutine z_base_reinit(x, info,clear) use psi_serial_mod use psb_realloc_mod implicit none class(psb_z_base_vect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + logical :: clear_ + + if (present(clear)) then + clear_ = clear + else + clear_ = .true. + end if if (allocated(x%v)) then - call x%sync() - x%v(:) = zzero + if (x%is_dev()) call x%sync() + if (clear_) x%v(:) = zzero call x%set_host() call x%set_upd() end if diff --git a/base/modules/serial/psb_z_vect_mod.F90 b/base/modules/serial/psb_z_vect_mod.F90 index 4eef627be..a401d66df 100644 --- a/base/modules/serial/psb_z_vect_mod.F90 +++ b/base/modules/serial/psb_z_vect_mod.F90 @@ -613,12 +613,13 @@ contains call x%set_bld() end subroutine z_vect_all - subroutine z_vect_reinit(x, info) + subroutine z_vect_reinit(x, info, clear) implicit none class(psb_z_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear - if (allocated(x%v)) call x%v%reinit(info) + if (allocated(x%v)) call x%v%reinit(info,clear) call x%set_upd() end subroutine z_vect_reinit From bdee97e991da533899943370e06a1ccc0c5f6037 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 12 Mar 2026 17:30:21 +0100 Subject: [PATCH 108/175] Fix use of MPI communicator --- base/auxil/psi_a2a_fnd_owner.F90 | 2 +- base/auxil/psi_adjcncy_fnd_owner.F90 | 2 +- base/auxil/psi_bld_tmphalo.f90 | 2 +- base/auxil/psi_bld_tmpovrl.f90 | 2 +- base/auxil/psi_desc_index.F90 | 2 +- base/auxil/psi_fnd_owner.F90 | 2 +- base/auxil/psi_graph_fnd_owner.F90 | 2 +- base/auxil/psi_indx_map_fnd_owner.F90 | 2 +- base/comm/internals/psi_cswapdata.F90 | 4 +-- base/comm/internals/psi_cswapdata_a.F90 | 4 +-- base/comm/internals/psi_cswaptran.F90 | 4 +-- base/comm/internals/psi_cswaptran_a.F90 | 4 +-- base/comm/internals/psi_dswapdata.F90 | 4 +-- base/comm/internals/psi_dswapdata_a.F90 | 4 +-- base/comm/internals/psi_dswaptran.F90 | 4 +-- base/comm/internals/psi_dswaptran_a.F90 | 4 +-- base/comm/internals/psi_eswapdata_a.F90 | 4 +-- base/comm/internals/psi_eswaptran_a.F90 | 4 +-- base/comm/internals/psi_i2swapdata_a.F90 | 4 +-- base/comm/internals/psi_i2swaptran_a.F90 | 4 +-- base/comm/internals/psi_iswapdata.F90 | 4 +-- base/comm/internals/psi_iswaptran.F90 | 4 +-- base/comm/internals/psi_lswapdata.F90 | 4 +-- base/comm/internals/psi_lswaptran.F90 | 4 +-- base/comm/internals/psi_mswapdata_a.F90 | 4 +-- base/comm/internals/psi_mswaptran_a.F90 | 4 +-- base/comm/internals/psi_sswapdata.F90 | 4 +-- base/comm/internals/psi_sswapdata_a.F90 | 4 +-- base/comm/internals/psi_sswaptran.F90 | 4 +-- base/comm/internals/psi_sswaptran_a.F90 | 4 +-- base/comm/internals/psi_zswapdata.F90 | 4 +-- base/comm/internals/psi_zswapdata_a.F90 | 4 +-- base/comm/internals/psi_zswaptran.F90 | 4 +-- base/comm/internals/psi_zswaptran_a.F90 | 4 +-- base/comm/psb_cspgather.F90 | 6 ++-- base/comm/psb_dspgather.F90 | 6 ++-- base/comm/psb_ispgather.F90 | 6 ++-- base/comm/psb_lspgather.F90 | 6 ++-- base/comm/psb_sspgather.F90 | 6 ++-- base/comm/psb_zspgather.F90 | 6 ++-- base/modules/desc/psb_desc_mod.F90 | 18 ----------- base/modules/desc/psb_gen_block_map_mod.F90 | 1 - base/modules/desc/psb_glist_map_mod.F90 | 1 - base/modules/desc/psb_hash_map_mod.F90 | 1 - base/modules/desc/psb_indx_map_mod.F90 | 35 ++++----------------- base/modules/desc/psb_list_map_mod.F90 | 1 - base/modules/desc/psb_repl_map_mod.F90 | 1 - base/modules/psb_const_mod.F90 | 27 ++++++++++++++++ base/tools/psb_c_glob_transpose.F90 | 4 +-- base/tools/psb_c_remote_mat.F90 | 4 +-- base/tools/psb_c_remote_vect.F90 | 4 +-- base/tools/psb_ccdbldext.F90 | 2 +- base/tools/psb_cd_reinit.f90 | 2 +- base/tools/psb_csphalo.F90 | 8 ++--- base/tools/psb_d_glob_transpose.F90 | 4 +-- base/tools/psb_d_remote_mat.F90 | 4 +-- base/tools/psb_d_remote_vect.F90 | 4 +-- base/tools/psb_dcdbldext.F90 | 2 +- base/tools/psb_dsphalo.F90 | 8 ++--- base/tools/psb_e_remote_vect.F90 | 4 +-- base/tools/psb_i2_remote_vect.F90 | 4 +-- base/tools/psb_icdasb.F90 | 2 +- base/tools/psb_m_remote_vect.F90 | 4 +-- base/tools/psb_s_glob_transpose.F90 | 4 +-- base/tools/psb_s_remote_mat.F90 | 4 +-- base/tools/psb_s_remote_vect.F90 | 4 +-- base/tools/psb_scdbldext.F90 | 2 +- base/tools/psb_ssphalo.F90 | 8 ++--- base/tools/psb_z_glob_transpose.F90 | 4 +-- base/tools/psb_z_remote_mat.F90 | 4 +-- base/tools/psb_z_remote_vect.F90 | 4 +-- base/tools/psb_zcdbldext.F90 | 2 +- base/tools/psb_zsphalo.F90 | 8 ++--- 73 files changed, 163 insertions(+), 182 deletions(-) diff --git a/base/auxil/psi_a2a_fnd_owner.F90 b/base/auxil/psi_a2a_fnd_owner.F90 index 9c7a2e650..3fca7f4a9 100644 --- a/base/auxil/psi_a2a_fnd_owner.F90 +++ b/base/auxil/psi_a2a_fnd_owner.F90 @@ -90,7 +90,7 @@ subroutine psi_a2a_fnd_owner(idx,iprc,idxmap,info,samesize) call psb_erractionsave(err_act) ctxt = idxmap%get_ctxt() - icomm = idxmap%get_mpic() + icomm = ctxt%get_mpic() mglob = idxmap%get_gr() n_row = idxmap%get_lr() n_col = idxmap%get_lc() diff --git a/base/auxil/psi_adjcncy_fnd_owner.F90 b/base/auxil/psi_adjcncy_fnd_owner.F90 index 4af374938..3ac830d75 100644 --- a/base/auxil/psi_adjcncy_fnd_owner.F90 +++ b/base/auxil/psi_adjcncy_fnd_owner.F90 @@ -100,7 +100,7 @@ subroutine psi_adjcncy_fnd_owner(idx,iprc,adj,idxmap,info) call psb_erractionsave(err_act) ctxt = idxmap%get_ctxt() - icomm = idxmap%get_mpic() + icomm = ctxt%get_mpic() mglob = idxmap%get_gr() n_row = idxmap%get_lr() n_col = idxmap%get_lc() diff --git a/base/auxil/psi_bld_tmphalo.f90 b/base/auxil/psi_bld_tmphalo.f90 index 9d3fb7aba..d1ee62c69 100644 --- a/base/auxil/psi_bld_tmphalo.f90 +++ b/base/auxil/psi_bld_tmphalo.f90 @@ -71,7 +71,7 @@ subroutine psi_bld_tmphalo(desc,info) call psb_erractionsave(err_act) ctxt = desc%get_context() - icomm = desc%get_mpic() + icomm = ctxt%get_mpic() n_row = desc%get_local_rows() n_col = desc%get_local_cols() diff --git a/base/auxil/psi_bld_tmpovrl.f90 b/base/auxil/psi_bld_tmpovrl.f90 index e34b64639..1952b9eb4 100644 --- a/base/auxil/psi_bld_tmpovrl.f90 +++ b/base/auxil/psi_bld_tmpovrl.f90 @@ -78,7 +78,7 @@ subroutine psi_i_bld_tmpovrl(iv,desc,info) debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() ctxt = desc%get_context() - icomm = desc%get_mpic() + icomm = ctxt%get_mpic() ! check on blacs grid call psb_info(ctxt, me, np) diff --git a/base/auxil/psi_desc_index.F90 b/base/auxil/psi_desc_index.F90 index ec16afbec..169b7a3e6 100644 --- a/base/auxil/psi_desc_index.F90 +++ b/base/auxil/psi_desc_index.F90 @@ -151,7 +151,7 @@ subroutine psi_i_desc_index(desc,index_in,dep_list,& debug_level = psb_get_debug_level() ctxt = desc%get_context() - icomm = desc%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info = psb_err_context_error_ diff --git a/base/auxil/psi_fnd_owner.F90 b/base/auxil/psi_fnd_owner.F90 index f19b4b1f3..2ba747886 100644 --- a/base/auxil/psi_fnd_owner.F90 +++ b/base/auxil/psi_fnd_owner.F90 @@ -85,7 +85,7 @@ subroutine psi_fnd_owner(nv,idx,iprc,desc,info) call psb_erractionsave(err_act) ctxt = desc%get_context() - icomm = desc%get_mpic() + icomm = ctxt%get_mpic() n_row = desc%get_local_rows() n_col = desc%get_local_cols() diff --git a/base/auxil/psi_graph_fnd_owner.F90 b/base/auxil/psi_graph_fnd_owner.F90 index de5d5915a..56d4f5dd2 100644 --- a/base/auxil/psi_graph_fnd_owner.F90 +++ b/base/auxil/psi_graph_fnd_owner.F90 @@ -121,7 +121,7 @@ subroutine psi_graph_fnd_owner(idx,iprc,ladj,idxmap,info) call psb_erractionsave(err_act) ctxt = idxmap%get_ctxt() - icomm = idxmap%get_mpic() + icomm = ctxt%get_mpic() mglob = idxmap%get_gr() n_row = idxmap%get_lr() n_col = idxmap%get_lc() diff --git a/base/auxil/psi_indx_map_fnd_owner.F90 b/base/auxil/psi_indx_map_fnd_owner.F90 index 30777cdf4..e45c6a761 100644 --- a/base/auxil/psi_indx_map_fnd_owner.F90 +++ b/base/auxil/psi_indx_map_fnd_owner.F90 @@ -88,7 +88,7 @@ subroutine psi_indx_map_fnd_owner(idx,iprc,idxmap,info,adj) call psb_erractionsave(err_act) ctxt = idxmap%get_ctxt() - icomm = idxmap%get_mpic() + icomm = ctxt%get_mpic() mglob = idxmap%get_gr() call psb_info(ctxt, me, np) diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index 613770341..9bfc36e93 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -124,7 +124,7 @@ subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -462,7 +462,7 @@ subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_cswapdata_a.F90 b/base/comm/internals/psi_cswapdata_a.F90 index 307842b46..19a688422 100644 --- a/base/comm/internals/psi_cswapdata_a.F90 +++ b/base/comm/internals/psi_cswapdata_a.F90 @@ -119,7 +119,7 @@ subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -597,7 +597,7 @@ subroutine psi_cswapdatav(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index 27dd40859..3cb93309e 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -126,7 +126,7 @@ subroutine psi_cswaptran_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -472,7 +472,7 @@ subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_cswaptran_a.F90 b/base/comm/internals/psi_cswaptran_a.F90 index b3b78c9ba..0065b7f25 100644 --- a/base/comm/internals/psi_cswaptran_a.F90 +++ b/base/comm/internals/psi_cswaptran_a.F90 @@ -123,7 +123,7 @@ subroutine psi_cswaptranm(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then @@ -608,7 +608,7 @@ subroutine psi_cswaptranv(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 28b5a6d40..c118206ff 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -124,7 +124,7 @@ subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -462,7 +462,7 @@ subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_dswapdata_a.F90 b/base/comm/internals/psi_dswapdata_a.F90 index 6c370b82c..9f1f9cec8 100644 --- a/base/comm/internals/psi_dswapdata_a.F90 +++ b/base/comm/internals/psi_dswapdata_a.F90 @@ -119,7 +119,7 @@ subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -597,7 +597,7 @@ subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index 3d66fb41e..0c168e184 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -126,7 +126,7 @@ subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -472,7 +472,7 @@ subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_dswaptran_a.F90 b/base/comm/internals/psi_dswaptran_a.F90 index 51ae5867a..dbeb55134 100644 --- a/base/comm/internals/psi_dswaptran_a.F90 +++ b/base/comm/internals/psi_dswaptran_a.F90 @@ -123,7 +123,7 @@ subroutine psi_dswaptranm(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then @@ -608,7 +608,7 @@ subroutine psi_dswaptranv(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_eswapdata_a.F90 b/base/comm/internals/psi_eswapdata_a.F90 index 104aee387..8a7afe67f 100644 --- a/base/comm/internals/psi_eswapdata_a.F90 +++ b/base/comm/internals/psi_eswapdata_a.F90 @@ -119,7 +119,7 @@ subroutine psi_eswapdatam(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -597,7 +597,7 @@ subroutine psi_eswapdatav(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_eswaptran_a.F90 b/base/comm/internals/psi_eswaptran_a.F90 index a93dd6b7d..f5817419d 100644 --- a/base/comm/internals/psi_eswaptran_a.F90 +++ b/base/comm/internals/psi_eswaptran_a.F90 @@ -123,7 +123,7 @@ subroutine psi_eswaptranm(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then @@ -608,7 +608,7 @@ subroutine psi_eswaptranv(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_i2swapdata_a.F90 b/base/comm/internals/psi_i2swapdata_a.F90 index 58dbb517b..b7d8b8f52 100644 --- a/base/comm/internals/psi_i2swapdata_a.F90 +++ b/base/comm/internals/psi_i2swapdata_a.F90 @@ -119,7 +119,7 @@ subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -597,7 +597,7 @@ subroutine psi_i2swapdatav(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_i2swaptran_a.F90 b/base/comm/internals/psi_i2swaptran_a.F90 index 7d3887404..d43112c48 100644 --- a/base/comm/internals/psi_i2swaptran_a.F90 +++ b/base/comm/internals/psi_i2swaptran_a.F90 @@ -123,7 +123,7 @@ subroutine psi_i2swaptranm(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then @@ -608,7 +608,7 @@ subroutine psi_i2swaptranv(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index c57af1d0c..fc4ee2628 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -124,7 +124,7 @@ subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -462,7 +462,7 @@ subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index 601ded781..9b4404246 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -126,7 +126,7 @@ subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -472,7 +472,7 @@ subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index 566db1e9a..a413cb2de 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -124,7 +124,7 @@ subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -462,7 +462,7 @@ subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index 4c33fde05..f92fc3443 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -126,7 +126,7 @@ subroutine psi_lswaptran_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -472,7 +472,7 @@ subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_mswapdata_a.F90 b/base/comm/internals/psi_mswapdata_a.F90 index 774c53e41..169dd46af 100644 --- a/base/comm/internals/psi_mswapdata_a.F90 +++ b/base/comm/internals/psi_mswapdata_a.F90 @@ -119,7 +119,7 @@ subroutine psi_mswapdatam(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -597,7 +597,7 @@ subroutine psi_mswapdatav(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_mswaptran_a.F90 b/base/comm/internals/psi_mswaptran_a.F90 index fca78eb7d..f8346fe1d 100644 --- a/base/comm/internals/psi_mswaptran_a.F90 +++ b/base/comm/internals/psi_mswaptran_a.F90 @@ -123,7 +123,7 @@ subroutine psi_mswaptranm(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then @@ -608,7 +608,7 @@ subroutine psi_mswaptranv(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index 3d594e76b..5d1180d3f 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -124,7 +124,7 @@ subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -462,7 +462,7 @@ subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_sswapdata_a.F90 b/base/comm/internals/psi_sswapdata_a.F90 index 601ca35be..c85062b7f 100644 --- a/base/comm/internals/psi_sswapdata_a.F90 +++ b/base/comm/internals/psi_sswapdata_a.F90 @@ -119,7 +119,7 @@ subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -597,7 +597,7 @@ subroutine psi_sswapdatav(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index 03b25a871..24c759786 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -126,7 +126,7 @@ subroutine psi_sswaptran_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -472,7 +472,7 @@ subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_sswaptran_a.F90 b/base/comm/internals/psi_sswaptran_a.F90 index 5a1f80c0f..749d1f012 100644 --- a/base/comm/internals/psi_sswaptran_a.F90 +++ b/base/comm/internals/psi_sswaptran_a.F90 @@ -123,7 +123,7 @@ subroutine psi_sswaptranm(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then @@ -608,7 +608,7 @@ subroutine psi_sswaptranv(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index f6fa7ebf7..3716fba6d 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -124,7 +124,7 @@ subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -462,7 +462,7 @@ subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_zswapdata_a.F90 b/base/comm/internals/psi_zswapdata_a.F90 index 52160b611..a4db9bb80 100644 --- a/base/comm/internals/psi_zswapdata_a.F90 +++ b/base/comm/internals/psi_zswapdata_a.F90 @@ -119,7 +119,7 @@ subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -597,7 +597,7 @@ subroutine psi_zswapdatav(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_zswaptran.F90 b/base/comm/internals/psi_zswaptran.F90 index 33334a283..2d0c39c49 100644 --- a/base/comm/internals/psi_zswaptran.F90 +++ b/base/comm/internals/psi_zswaptran.F90 @@ -126,7 +126,7 @@ subroutine psi_zswaptran_vect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -472,7 +472,7 @@ subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/internals/psi_zswaptran_a.F90 b/base/comm/internals/psi_zswaptran_a.F90 index 64ca18f1f..5e82f3f75 100644 --- a/base/comm/internals/psi_zswaptran_a.F90 +++ b/base/comm/internals/psi_zswaptran_a.F90 @@ -123,7 +123,7 @@ subroutine psi_zswaptranm(flag,n,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then @@ -608,7 +608,7 @@ subroutine psi_zswaptranv(flag,beta,y,desc_a,work,info,data) call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ diff --git a/base/comm/psb_cspgather.F90 b/base/comm/psb_cspgather.F90 index d1bde4877..9cfb6b596 100644 --- a/base/comm/psb_cspgather.F90 +++ b/base/comm/psb_cspgather.F90 @@ -85,7 +85,7 @@ subroutine psb_csp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keep info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -269,7 +269,7 @@ subroutine psb_lcsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,kee info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -442,7 +442,7 @@ subroutine psb_lclcsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,k info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then diff --git a/base/comm/psb_dspgather.F90 b/base/comm/psb_dspgather.F90 index 98a9bc916..c7348cd92 100644 --- a/base/comm/psb_dspgather.F90 +++ b/base/comm/psb_dspgather.F90 @@ -85,7 +85,7 @@ subroutine psb_dsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keep info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -269,7 +269,7 @@ subroutine psb_ldsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,kee info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -442,7 +442,7 @@ subroutine psb_ldldsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,k info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then diff --git a/base/comm/psb_ispgather.F90 b/base/comm/psb_ispgather.F90 index 773c5864c..50319debb 100644 --- a/base/comm/psb_ispgather.F90 +++ b/base/comm/psb_ispgather.F90 @@ -85,7 +85,7 @@ subroutine psb_isp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keep info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -269,7 +269,7 @@ subroutine psb_@LX@sp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,k info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -442,7 +442,7 @@ subroutine psb_@LX@@LX@sp_allgather(globa, loca, desc_a, info, root, dupl,keepn info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then diff --git a/base/comm/psb_lspgather.F90 b/base/comm/psb_lspgather.F90 index 8cc009bf5..5bab14448 100644 --- a/base/comm/psb_lspgather.F90 +++ b/base/comm/psb_lspgather.F90 @@ -85,7 +85,7 @@ subroutine psb_lsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keep info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -269,7 +269,7 @@ subroutine psb_@LX@sp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,k info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -442,7 +442,7 @@ subroutine psb_@LX@@LX@sp_allgather(globa, loca, desc_a, info, root, dupl,keepn info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then diff --git a/base/comm/psb_sspgather.F90 b/base/comm/psb_sspgather.F90 index 7e822c87c..d6317de22 100644 --- a/base/comm/psb_sspgather.F90 +++ b/base/comm/psb_sspgather.F90 @@ -85,7 +85,7 @@ subroutine psb_ssp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keep info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -269,7 +269,7 @@ subroutine psb_lssp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,kee info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -442,7 +442,7 @@ subroutine psb_lslssp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,k info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then diff --git a/base/comm/psb_zspgather.F90 b/base/comm/psb_zspgather.F90 index 1630f904a..5d4a809b3 100644 --- a/base/comm/psb_zspgather.F90 +++ b/base/comm/psb_zspgather.F90 @@ -85,7 +85,7 @@ subroutine psb_zsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,keep info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -269,7 +269,7 @@ subroutine psb_lzsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,kee info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then @@ -442,7 +442,7 @@ subroutine psb_lzlzsp_allgather(globa, loca, desc_a, info, root, dupl,keepnum,k info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() call psb_info(ctxt, me, np) if (present(keepnum)) then diff --git a/base/modules/desc/psb_desc_mod.F90 b/base/modules/desc/psb_desc_mod.F90 index b83542a4a..86cdf351c 100644 --- a/base/modules/desc/psb_desc_mod.F90 +++ b/base/modules/desc/psb_desc_mod.F90 @@ -224,7 +224,6 @@ module psb_desc_mod procedure, pass(desc) :: is_asb => psb_is_asb_desc procedure, pass(desc) :: is_ovl => psb_is_ovl_desc procedure, pass(desc) :: is_repl => psb_is_repl_desc - procedure, pass(desc) :: get_mpic => psb_cd_get_mpic procedure, pass(desc) :: get_dectype => psb_cd_get_dectype procedure, pass(desc) :: get_context => psb_cd_get_context procedure, pass(desc) :: get_ctxt => psb_cd_get_context @@ -638,23 +637,6 @@ contains end function psb_cd_get_dectype - function psb_cd_get_mpic(desc) result(val) - use psb_error_mod - implicit none - integer(psb_ipk_) :: val - class(psb_desc_type), intent(in) :: desc - - if (allocated(desc%indxmap)) then - val = desc%indxmap%get_mpic() - else - val = -1 -!!$ call psb_errpush(psb_err_invalid_cd_state_,'psb_cd_get_mpic') -!!$ call psb_error() - end if - - end function psb_cd_get_mpic - - function cd_get_p_adjcncy(desc) result(val) implicit none integer(psb_ipk_), allocatable :: val(:) diff --git a/base/modules/desc/psb_gen_block_map_mod.F90 b/base/modules/desc/psb_gen_block_map_mod.F90 index b52d4c599..3b5ecfd12 100644 --- a/base/modules/desc/psb_gen_block_map_mod.F90 +++ b/base/modules/desc/psb_gen_block_map_mod.F90 @@ -1157,7 +1157,6 @@ contains idxmap%local_cols = nl idxmap%ctxt = ctxt idxmap%state = psb_desc_bld_ - idxmap%mpic = psb_get_mpi_comm(ctxt) idxmap%min_glob_row = vnl(iam)+1 idxmap%max_glob_row = vnl(iam+1) call move_alloc(vnl,idxmap%vnl) diff --git a/base/modules/desc/psb_glist_map_mod.F90 b/base/modules/desc/psb_glist_map_mod.F90 index 4ddcdacae..a63210134 100644 --- a/base/modules/desc/psb_glist_map_mod.F90 +++ b/base/modules/desc/psb_glist_map_mod.F90 @@ -126,7 +126,6 @@ contains idxmap%ctxt = ctxt idxmap%state = psb_desc_bld_ - idxmap%mpic = psb_get_mpi_comm(ctxt) nl = 0 do i=1, n diff --git a/base/modules/desc/psb_hash_map_mod.F90 b/base/modules/desc/psb_hash_map_mod.F90 index b5e135fe1..7c432b524 100644 --- a/base/modules/desc/psb_hash_map_mod.F90 +++ b/base/modules/desc/psb_hash_map_mod.F90 @@ -1090,7 +1090,6 @@ contains idxmap%local_cols = nl idxmap%ctxt = ctxt idxmap%state = psb_desc_bld_ - idxmap%mpic = psb_get_mpi_comm(ctxt) lc2 = int(1.5*nl) call psb_realloc(lc2,idxmap%loc_to_glob,info) diff --git a/base/modules/desc/psb_indx_map_mod.F90 b/base/modules/desc/psb_indx_map_mod.F90 index 574aa2e32..66d9fab06 100644 --- a/base/modules/desc/psb_indx_map_mod.F90 +++ b/base/modules/desc/psb_indx_map_mod.F90 @@ -109,8 +109,6 @@ module psb_indx_map_mod integer(psb_ipk_) :: state = psb_desc_null_ !> Communication context type(psb_ctxt_type) :: ctxt - !> MPI communicator - integer(psb_mpk_) :: mpic = -1 !> Number of global rows integer(psb_lpk_) :: global_rows = -1 !> Number of global columns @@ -177,9 +175,7 @@ module psb_indx_map_mod procedure, pass(idxmap) :: xtnd_p_adjcncy => base_xtnd_p_adjcncy procedure, pass(idxmap) :: set_ctxt => base_set_ctxt - procedure, pass(idxmap) :: set_mpic => base_set_mpic procedure, pass(idxmap) :: get_ctxt => base_get_ctxt - procedure, pass(idxmap) :: get_mpic => base_get_mpic procedure, pass(idxmap) :: sizeof => base_sizeof procedure, pass(idxmap) :: set_null => base_set_null procedure, nopass :: row_extendable => base_row_extendable @@ -247,11 +243,11 @@ module psb_indx_map_mod private :: base_get_state, base_set_state, base_is_repl, base_is_bld,& & base_is_upd, base_is_asb, base_is_valid, base_is_ovl,& & base_get_gr, base_get_gc, base_get_lr, base_get_lc, base_get_ctxt,& - & base_get_mpic, base_sizeof, base_set_null, & + & base_sizeof, base_set_null, & & base_set_grl, base_set_gcl, & & base_set_lri, base_set_lci, base_set_lrl, base_set_lcl, & & base_inc_lc, base_set_ctxt,& - & base_set_mpic, base_get_fmt, base_asb, base_free,& + & base_get_fmt, base_asb, base_free,& & base_l2gs1, base_l2gs2, base_l2gv1, base_l2gv2,& & base_g2ls1, base_g2ls2, base_g2lv1, base_g2lv2,& & base_g2ls1_ins, base_g2ls2_ins, base_g2lv1_ins, base_g2lv2_ins, & @@ -263,6 +259,7 @@ module psb_indx_map_mod & base_set_halo_owner, base_get_halo_owner, & & base_qry_halo_owner_s, base_qry_halo_owner_v,& & base_get_p_adjcncy, base_set_p_adjcncy, base_xtnd_p_adjcncy + !> Function: psi_indx_map_fnd_owner !! \memberof psb_indx_map @@ -513,17 +510,6 @@ contains end function base_get_ctxt - - function base_get_mpic(idxmap) result(val) - implicit none - class(psb_indx_map), intent(in) :: idxmap - integer(psb_mpk_) :: val - - val = idxmap%mpic - - end function base_get_mpic - - subroutine base_set_state(idxmap,val) implicit none class(psb_indx_map), intent(inout) :: idxmap @@ -643,15 +629,6 @@ contains end subroutine base_xtnd_p_adjcncy - subroutine base_set_mpic(idxmap,val) - implicit none - class(psb_indx_map), intent(inout) :: idxmap - integer(psb_mpk_), intent(in) :: val - - idxmap%mpic = val - end subroutine base_set_mpic - - !> !! \memberof psb_indx_map !! \brief Is the class capable of having overlapped rows? @@ -1341,7 +1318,7 @@ contains ! almost nothing to be done here idxmap%state = -1 if (allocated(idxmap%ctxt%ctxt)) deallocate(idxmap%ctxt%ctxt) - idxmap%mpic = -1 +!!$ idxmap%mpic = -1 idxmap%global_rows = -1 idxmap%global_cols = -1 idxmap%local_rows = -1 @@ -1357,7 +1334,7 @@ contains idxmap%state = psb_desc_null_ if (allocated(idxmap%ctxt%ctxt)) deallocate(idxmap%ctxt%ctxt) - idxmap%mpic = -1 +!!$ idxmap%mpic = -1 idxmap%global_rows = -1 idxmap%global_cols = -1 idxmap%local_rows = -1 @@ -1444,7 +1421,7 @@ contains outmap%state = idxmap%state outmap%ctxt = idxmap%ctxt - outmap%mpic = idxmap%mpic +!!$ outmap%mpic = idxmap%mpic outmap%global_rows = idxmap%global_rows outmap%global_cols = idxmap%global_cols outmap%local_rows = idxmap%local_rows diff --git a/base/modules/desc/psb_list_map_mod.F90 b/base/modules/desc/psb_list_map_mod.F90 index 3d493d516..7b4778fbd 100644 --- a/base/modules/desc/psb_list_map_mod.F90 +++ b/base/modules/desc/psb_list_map_mod.F90 @@ -992,7 +992,6 @@ contains idxmap%ctxt = ctxt idxmap%state = psb_desc_bld_ - idxmap%mpic = psb_get_mpi_comm(ctxt) do i=1, n idxmap%glob_to_loc(i) = -1 end do diff --git a/base/modules/desc/psb_repl_map_mod.F90 b/base/modules/desc/psb_repl_map_mod.F90 index eef1e5d16..2a25aef9a 100644 --- a/base/modules/desc/psb_repl_map_mod.F90 +++ b/base/modules/desc/psb_repl_map_mod.F90 @@ -817,7 +817,6 @@ contains idxmap%local_cols = nl idxmap%ctxt = ctxt idxmap%state = psb_desc_bld_ - idxmap%mpic = psb_get_mpi_comm(ctxt) call idxmap%set_state(psb_desc_bld_) end subroutine repl_init diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index ee11beafb..036b90d82 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -332,8 +332,13 @@ module psb_const_mod integer(psb_mpk_), allocatable :: ctxt contains procedure, pass(ctxt) :: get_i_ctxt => psb_get_i_ctxt + procedure, pass(ctxt) :: get_mpic => get_mpic + procedure, pass(ctxt) :: set_mpic => set_mpic end type psb_ctxt_type logical, parameter :: try_newins=.true. + + private :: get_mpic, set_mpic + contains function psb_cmp_ctxt(ctxt1, ctxt2) result(res) @@ -362,5 +367,27 @@ contains end if end subroutine psb_get_i_ctxt + + function get_mpic(ctxt) result(val) + implicit none + integer(psb_mpk_) :: val + class(psb_ctxt_type), intent(in) :: ctxt + + if (allocated(ctxt%ctxt)) then + val = ctxt%ctxt + else + val = -1 + end if + + end function get_mpic + + subroutine set_mpic(ctxt,val) + implicit none + integer(psb_mpk_) :: val + class(psb_ctxt_type), intent(inout) :: ctxt + + ctxt%ctxt = val + + end subroutine set_mpic end module psb_const_mod diff --git a/base/tools/psb_c_glob_transpose.F90 b/base/tools/psb_c_glob_transpose.F90 index 37a4e1001..8c8b3fd45 100644 --- a/base/tools/psb_c_glob_transpose.F90 +++ b/base/tools/psb_c_glob_transpose.F90 @@ -139,7 +139,7 @@ subroutine psb_lc_coo_glob_transpose(ain,desc_r,info,atrans,desc_c,desc_rx) debug_level = psb_get_debug_level() ctxt = desc_r%get_context() - icomm = desc_r%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -437,7 +437,7 @@ subroutine psb_c_coo_glob_transpose(ain,desc_r,info,atrans,desc_c,desc_rx) debug_level = psb_get_debug_level() ctxt = desc_r%get_context() - icomm = desc_r%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) diff --git a/base/tools/psb_c_remote_mat.F90 b/base/tools/psb_c_remote_mat.F90 index bb40edf3e..c3ef56022 100644 --- a/base/tools/psb_c_remote_mat.F90 +++ b/base/tools/psb_c_remote_mat.F90 @@ -118,7 +118,7 @@ Subroutine psb_lc_remote_mat(a,desc_a,b,info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -150,7 +150,7 @@ Subroutine psb_lc_remote_mat(a,desc_a,b,info) call desc_a%indxmap%fnd_owner(a%ia(1:nz),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:)=0 rvsz(:)=0 sdsi(:)=0 diff --git a/base/tools/psb_c_remote_vect.F90 b/base/tools/psb_c_remote_vect.F90 index 5cacd9a39..855aea992 100644 --- a/base/tools/psb_c_remote_vect.F90 +++ b/base/tools/psb_c_remote_vect.F90 @@ -105,7 +105,7 @@ subroutine psb_c_remote_vect(n,v,iv,desc_a,x,ix, info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -123,7 +123,7 @@ subroutine psb_c_remote_vect(n,v,iv,desc_a,x,ix, info) call desc_a%indxmap%fnd_owner(iv(1:n),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:) = 0 rvsz(:) = 0 sdsi(:) = 0 diff --git a/base/tools/psb_ccdbldext.F90 b/base/tools/psb_ccdbldext.F90 index 1e7d630e5..b9064212b 100644 --- a/base/tools/psb_ccdbldext.F90 +++ b/base/tools/psb_ccdbldext.F90 @@ -117,7 +117,7 @@ Subroutine psb_ccdbldext(a,desc_a,novr,desc_ov,info, extype) goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) If (debug_level >= psb_debug_outer_) & diff --git a/base/tools/psb_cd_reinit.f90 b/base/tools/psb_cd_reinit.f90 index d294cfc0e..6752c3db7 100644 --- a/base/tools/psb_cd_reinit.f90 +++ b/base/tools/psb_cd_reinit.f90 @@ -57,7 +57,7 @@ Subroutine psb_cd_reinit(desc,info) debug_level = psb_get_debug_level() ctxt = desc%get_context() - icomm = desc%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) if (debug_level >= psb_debug_outer_) & & write(debug_unit,*) me,' ',trim(name),': start' diff --git a/base/tools/psb_csphalo.F90 b/base/tools/psb_csphalo.F90 index dc2014adc..cd053056b 100644 --- a/base/tools/psb_csphalo.F90 +++ b/base/tools/psb_csphalo.F90 @@ -127,7 +127,7 @@ Subroutine psb_csphalo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -587,7 +587,7 @@ Subroutine psb_lcsphalo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -931,7 +931,7 @@ Subroutine psb_lc_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -1293,7 +1293,7 @@ Subroutine psb_c_lc_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) diff --git a/base/tools/psb_d_glob_transpose.F90 b/base/tools/psb_d_glob_transpose.F90 index 3c323dbd2..2fc4a4580 100644 --- a/base/tools/psb_d_glob_transpose.F90 +++ b/base/tools/psb_d_glob_transpose.F90 @@ -139,7 +139,7 @@ subroutine psb_ld_coo_glob_transpose(ain,desc_r,info,atrans,desc_c,desc_rx) debug_level = psb_get_debug_level() ctxt = desc_r%get_context() - icomm = desc_r%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -437,7 +437,7 @@ subroutine psb_d_coo_glob_transpose(ain,desc_r,info,atrans,desc_c,desc_rx) debug_level = psb_get_debug_level() ctxt = desc_r%get_context() - icomm = desc_r%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) diff --git a/base/tools/psb_d_remote_mat.F90 b/base/tools/psb_d_remote_mat.F90 index bab23d592..095474699 100644 --- a/base/tools/psb_d_remote_mat.F90 +++ b/base/tools/psb_d_remote_mat.F90 @@ -118,7 +118,7 @@ Subroutine psb_ld_remote_mat(a,desc_a,b,info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -150,7 +150,7 @@ Subroutine psb_ld_remote_mat(a,desc_a,b,info) call desc_a%indxmap%fnd_owner(a%ia(1:nz),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:)=0 rvsz(:)=0 sdsi(:)=0 diff --git a/base/tools/psb_d_remote_vect.F90 b/base/tools/psb_d_remote_vect.F90 index 440c8cc56..78a089fd2 100644 --- a/base/tools/psb_d_remote_vect.F90 +++ b/base/tools/psb_d_remote_vect.F90 @@ -105,7 +105,7 @@ subroutine psb_d_remote_vect(n,v,iv,desc_a,x,ix, info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -123,7 +123,7 @@ subroutine psb_d_remote_vect(n,v,iv,desc_a,x,ix, info) call desc_a%indxmap%fnd_owner(iv(1:n),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:) = 0 rvsz(:) = 0 sdsi(:) = 0 diff --git a/base/tools/psb_dcdbldext.F90 b/base/tools/psb_dcdbldext.F90 index a5d059a32..d6721c764 100644 --- a/base/tools/psb_dcdbldext.F90 +++ b/base/tools/psb_dcdbldext.F90 @@ -117,7 +117,7 @@ Subroutine psb_dcdbldext(a,desc_a,novr,desc_ov,info, extype) goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) If (debug_level >= psb_debug_outer_) & diff --git a/base/tools/psb_dsphalo.F90 b/base/tools/psb_dsphalo.F90 index 9ae0677f0..53b671b2b 100644 --- a/base/tools/psb_dsphalo.F90 +++ b/base/tools/psb_dsphalo.F90 @@ -127,7 +127,7 @@ Subroutine psb_dsphalo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -587,7 +587,7 @@ Subroutine psb_ldsphalo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -931,7 +931,7 @@ Subroutine psb_ld_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -1293,7 +1293,7 @@ Subroutine psb_d_ld_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) diff --git a/base/tools/psb_e_remote_vect.F90 b/base/tools/psb_e_remote_vect.F90 index 9b1906671..0ca38c022 100644 --- a/base/tools/psb_e_remote_vect.F90 +++ b/base/tools/psb_e_remote_vect.F90 @@ -105,7 +105,7 @@ subroutine psb_e_remote_vect(n,v,iv,desc_a,x,ix, info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -123,7 +123,7 @@ subroutine psb_e_remote_vect(n,v,iv,desc_a,x,ix, info) call desc_a%indxmap%fnd_owner(iv(1:n),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:) = 0 rvsz(:) = 0 sdsi(:) = 0 diff --git a/base/tools/psb_i2_remote_vect.F90 b/base/tools/psb_i2_remote_vect.F90 index 11f0cb7c7..4c4ce8b54 100644 --- a/base/tools/psb_i2_remote_vect.F90 +++ b/base/tools/psb_i2_remote_vect.F90 @@ -105,7 +105,7 @@ subroutine psb_i2_remote_vect(n,v,iv,desc_a,x,ix, info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -123,7 +123,7 @@ subroutine psb_i2_remote_vect(n,v,iv,desc_a,x,ix, info) call desc_a%indxmap%fnd_owner(iv(1:n),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:) = 0 rvsz(:) = 0 sdsi(:) = 0 diff --git a/base/tools/psb_icdasb.F90 b/base/tools/psb_icdasb.F90 index c2d9c27af..4ad4ce3de 100644 --- a/base/tools/psb_icdasb.F90 +++ b/base/tools/psb_icdasb.F90 @@ -83,10 +83,10 @@ subroutine psb_icdasb(desc,info,ext_hv,mold) debug_level = psb_get_debug_level() ctxt = desc%get_context() + icomm = ctxt%get_mpic() dectype = desc%get_dectype() n_row = desc%get_local_rows() n_col = desc%get_local_cols() - icomm = desc%get_mpic() if ((do_timings).and.(idx_total==-1)) & & idx_total = psb_get_timer_idx("ICDASB: total ") if ((do_timings).and.(idx_phase1==-1)) & diff --git a/base/tools/psb_m_remote_vect.F90 b/base/tools/psb_m_remote_vect.F90 index 54f5ef9c9..2266cc800 100644 --- a/base/tools/psb_m_remote_vect.F90 +++ b/base/tools/psb_m_remote_vect.F90 @@ -105,7 +105,7 @@ subroutine psb_m_remote_vect(n,v,iv,desc_a,x,ix, info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -123,7 +123,7 @@ subroutine psb_m_remote_vect(n,v,iv,desc_a,x,ix, info) call desc_a%indxmap%fnd_owner(iv(1:n),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:) = 0 rvsz(:) = 0 sdsi(:) = 0 diff --git a/base/tools/psb_s_glob_transpose.F90 b/base/tools/psb_s_glob_transpose.F90 index 8b7bff590..d663ea3e5 100644 --- a/base/tools/psb_s_glob_transpose.F90 +++ b/base/tools/psb_s_glob_transpose.F90 @@ -139,7 +139,7 @@ subroutine psb_ls_coo_glob_transpose(ain,desc_r,info,atrans,desc_c,desc_rx) debug_level = psb_get_debug_level() ctxt = desc_r%get_context() - icomm = desc_r%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -437,7 +437,7 @@ subroutine psb_s_coo_glob_transpose(ain,desc_r,info,atrans,desc_c,desc_rx) debug_level = psb_get_debug_level() ctxt = desc_r%get_context() - icomm = desc_r%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) diff --git a/base/tools/psb_s_remote_mat.F90 b/base/tools/psb_s_remote_mat.F90 index 713f87361..631777ecf 100644 --- a/base/tools/psb_s_remote_mat.F90 +++ b/base/tools/psb_s_remote_mat.F90 @@ -118,7 +118,7 @@ Subroutine psb_ls_remote_mat(a,desc_a,b,info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -150,7 +150,7 @@ Subroutine psb_ls_remote_mat(a,desc_a,b,info) call desc_a%indxmap%fnd_owner(a%ia(1:nz),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:)=0 rvsz(:)=0 sdsi(:)=0 diff --git a/base/tools/psb_s_remote_vect.F90 b/base/tools/psb_s_remote_vect.F90 index d103b694a..260d03bd2 100644 --- a/base/tools/psb_s_remote_vect.F90 +++ b/base/tools/psb_s_remote_vect.F90 @@ -105,7 +105,7 @@ subroutine psb_s_remote_vect(n,v,iv,desc_a,x,ix, info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -123,7 +123,7 @@ subroutine psb_s_remote_vect(n,v,iv,desc_a,x,ix, info) call desc_a%indxmap%fnd_owner(iv(1:n),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:) = 0 rvsz(:) = 0 sdsi(:) = 0 diff --git a/base/tools/psb_scdbldext.F90 b/base/tools/psb_scdbldext.F90 index bdced5418..812ca8aa0 100644 --- a/base/tools/psb_scdbldext.F90 +++ b/base/tools/psb_scdbldext.F90 @@ -117,7 +117,7 @@ Subroutine psb_scdbldext(a,desc_a,novr,desc_ov,info, extype) goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) If (debug_level >= psb_debug_outer_) & diff --git a/base/tools/psb_ssphalo.F90 b/base/tools/psb_ssphalo.F90 index a1ba28ef7..9a94b4383 100644 --- a/base/tools/psb_ssphalo.F90 +++ b/base/tools/psb_ssphalo.F90 @@ -127,7 +127,7 @@ Subroutine psb_ssphalo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -587,7 +587,7 @@ Subroutine psb_lssphalo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -931,7 +931,7 @@ Subroutine psb_ls_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -1293,7 +1293,7 @@ Subroutine psb_s_ls_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) diff --git a/base/tools/psb_z_glob_transpose.F90 b/base/tools/psb_z_glob_transpose.F90 index df86635b9..de952682d 100644 --- a/base/tools/psb_z_glob_transpose.F90 +++ b/base/tools/psb_z_glob_transpose.F90 @@ -139,7 +139,7 @@ subroutine psb_lz_coo_glob_transpose(ain,desc_r,info,atrans,desc_c,desc_rx) debug_level = psb_get_debug_level() ctxt = desc_r%get_context() - icomm = desc_r%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -437,7 +437,7 @@ subroutine psb_z_coo_glob_transpose(ain,desc_r,info,atrans,desc_c,desc_rx) debug_level = psb_get_debug_level() ctxt = desc_r%get_context() - icomm = desc_r%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) diff --git a/base/tools/psb_z_remote_mat.F90 b/base/tools/psb_z_remote_mat.F90 index a9dc1721c..5542f2260 100644 --- a/base/tools/psb_z_remote_mat.F90 +++ b/base/tools/psb_z_remote_mat.F90 @@ -118,7 +118,7 @@ Subroutine psb_lz_remote_mat(a,desc_a,b,info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -150,7 +150,7 @@ Subroutine psb_lz_remote_mat(a,desc_a,b,info) call desc_a%indxmap%fnd_owner(a%ia(1:nz),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:)=0 rvsz(:)=0 sdsi(:)=0 diff --git a/base/tools/psb_z_remote_vect.F90 b/base/tools/psb_z_remote_vect.F90 index 9670598a6..319ab38fd 100644 --- a/base/tools/psb_z_remote_vect.F90 +++ b/base/tools/psb_z_remote_vect.F90 @@ -105,7 +105,7 @@ subroutine psb_z_remote_vect(n,v,iv,desc_a,x,ix, info) debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -123,7 +123,7 @@ subroutine psb_z_remote_vect(n,v,iv,desc_a,x,ix, info) call desc_a%indxmap%fnd_owner(iv(1:n),iprc,info) - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() sdsz(:) = 0 rvsz(:) = 0 sdsi(:) = 0 diff --git a/base/tools/psb_zcdbldext.F90 b/base/tools/psb_zcdbldext.F90 index 29b93c5b3..0db84d7a0 100644 --- a/base/tools/psb_zcdbldext.F90 +++ b/base/tools/psb_zcdbldext.F90 @@ -117,7 +117,7 @@ Subroutine psb_zcdbldext(a,desc_a,novr,desc_ov,info, extype) goto 9999 end if ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) If (debug_level >= psb_debug_outer_) & diff --git a/base/tools/psb_zsphalo.F90 b/base/tools/psb_zsphalo.F90 index 89dbc4dd3..3a878172d 100644 --- a/base/tools/psb_zsphalo.F90 +++ b/base/tools/psb_zsphalo.F90 @@ -127,7 +127,7 @@ Subroutine psb_zsphalo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -587,7 +587,7 @@ Subroutine psb_lzsphalo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -931,7 +931,7 @@ Subroutine psb_lz_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) @@ -1293,7 +1293,7 @@ Subroutine psb_z_lz_csr_halo(a,desc_a,blk,info,rowcnv,colcnv,& debug_level = psb_get_debug_level() ctxt = desc_a%get_context() - icomm = desc_a%get_mpic() + icomm = ctxt%get_mpic() Call psb_info(ctxt, me, np) From 724345ab279d128b74cba89ee2c1fd45bb564360 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 13 Mar 2026 11:27:32 +0100 Subject: [PATCH 109/175] Rework use of icomm in halo and friends, add submodules --- base/comm/internals/psi_covrl_restr.f90 | 142 +- base/comm/internals/psi_covrl_restr_a.f90 | 158 +- base/comm/internals/psi_covrl_save.f90 | 186 ++- base/comm/internals/psi_covrl_save_a.f90 | 194 ++- base/comm/internals/psi_covrl_upd.f90 | 314 ++-- base/comm/internals/psi_covrl_upd_a.f90 | 264 ++-- base/comm/internals/psi_cswapdata.F90 | 1201 +++++++-------- base/comm/internals/psi_cswapdata_a.F90 | 1617 ++++++++++--------- base/comm/internals/psi_cswaptran.F90 | 1217 ++++++++------- base/comm/internals/psi_cswaptran_a.F90 | 1623 ++++++++++---------- base/comm/internals/psi_dovrl_restr.f90 | 142 +- base/comm/internals/psi_dovrl_restr_a.f90 | 158 +- base/comm/internals/psi_dovrl_save.f90 | 186 ++- base/comm/internals/psi_dovrl_save_a.f90 | 194 ++- base/comm/internals/psi_dovrl_upd.f90 | 314 ++-- base/comm/internals/psi_dovrl_upd_a.f90 | 264 ++-- base/comm/internals/psi_dswapdata.F90 | 1201 +++++++-------- base/comm/internals/psi_dswapdata_a.F90 | 1617 ++++++++++--------- base/comm/internals/psi_dswaptran.F90 | 1217 ++++++++------- base/comm/internals/psi_dswaptran_a.F90 | 1623 ++++++++++---------- base/comm/internals/psi_eovrl_restr_a.f90 | 158 +- base/comm/internals/psi_eovrl_save_a.f90 | 194 ++- base/comm/internals/psi_eovrl_upd_a.f90 | 264 ++-- base/comm/internals/psi_eswapdata_a.F90 | 1617 ++++++++++--------- base/comm/internals/psi_eswaptran_a.F90 | 1623 ++++++++++---------- base/comm/internals/psi_i2ovrl_restr_a.f90 | 158 +- base/comm/internals/psi_i2ovrl_save_a.f90 | 194 ++- base/comm/internals/psi_i2ovrl_upd_a.f90 | 264 ++-- base/comm/internals/psi_i2swapdata_a.F90 | 1617 ++++++++++--------- base/comm/internals/psi_i2swaptran_a.F90 | 1623 ++++++++++---------- base/comm/internals/psi_iovrl_restr.f90 | 142 +- base/comm/internals/psi_iovrl_save.f90 | 186 ++- base/comm/internals/psi_iovrl_upd.f90 | 314 ++-- base/comm/internals/psi_iswapdata.F90 | 1201 +++++++-------- base/comm/internals/psi_iswaptran.F90 | 1217 ++++++++------- base/comm/internals/psi_lovrl_restr.f90 | 142 +- base/comm/internals/psi_lovrl_save.f90 | 186 ++- base/comm/internals/psi_lovrl_upd.f90 | 314 ++-- base/comm/internals/psi_lswapdata.F90 | 1201 +++++++-------- base/comm/internals/psi_lswaptran.F90 | 1217 ++++++++------- base/comm/internals/psi_movrl_restr_a.f90 | 158 +- base/comm/internals/psi_movrl_save_a.f90 | 194 ++- base/comm/internals/psi_movrl_upd_a.f90 | 264 ++-- base/comm/internals/psi_mswapdata_a.F90 | 1617 ++++++++++--------- base/comm/internals/psi_mswaptran_a.F90 | 1623 ++++++++++---------- base/comm/internals/psi_sovrl_restr.f90 | 142 +- base/comm/internals/psi_sovrl_restr_a.f90 | 158 +- base/comm/internals/psi_sovrl_save.f90 | 186 ++- base/comm/internals/psi_sovrl_save_a.f90 | 194 ++- base/comm/internals/psi_sovrl_upd.f90 | 314 ++-- base/comm/internals/psi_sovrl_upd_a.f90 | 264 ++-- base/comm/internals/psi_sswapdata.F90 | 1201 +++++++-------- base/comm/internals/psi_sswapdata_a.F90 | 1617 ++++++++++--------- base/comm/internals/psi_sswaptran.F90 | 1217 ++++++++------- base/comm/internals/psi_sswaptran_a.F90 | 1623 ++++++++++---------- base/comm/internals/psi_zovrl_restr.f90 | 142 +- base/comm/internals/psi_zovrl_restr_a.f90 | 158 +- base/comm/internals/psi_zovrl_save.f90 | 186 ++- base/comm/internals/psi_zovrl_save_a.f90 | 194 ++- base/comm/internals/psi_zovrl_upd.f90 | 314 ++-- base/comm/internals/psi_zovrl_upd_a.f90 | 264 ++-- base/comm/internals/psi_zswapdata.F90 | 1201 +++++++-------- base/comm/internals/psi_zswapdata_a.F90 | 1617 ++++++++++--------- base/comm/internals/psi_zswaptran.F90 | 1217 ++++++++------- base/comm/internals/psi_zswaptran_a.F90 | 1623 ++++++++++---------- base/modules/comm/psi_c_comm_a_mod.f90 | 48 +- base/modules/comm/psi_c_comm_v_mod.f90 | 46 +- base/modules/comm/psi_d_comm_a_mod.f90 | 48 +- base/modules/comm/psi_d_comm_v_mod.f90 | 46 +- base/modules/comm/psi_e_comm_a_mod.f90 | 48 +- base/modules/comm/psi_i2_comm_a_mod.f90 | 48 +- base/modules/comm/psi_i_comm_v_mod.f90 | 46 +- base/modules/comm/psi_l_comm_v_mod.f90 | 46 +- base/modules/comm/psi_m_comm_a_mod.f90 | 48 +- base/modules/comm/psi_s_comm_a_mod.f90 | 48 +- base/modules/comm/psi_s_comm_v_mod.f90 | 46 +- base/modules/comm/psi_z_comm_a_mod.f90 | 48 +- base/modules/comm/psi_z_comm_v_mod.f90 | 46 +- 78 files changed, 22647 insertions(+), 23317 deletions(-) diff --git a/base/comm/internals/psi_covrl_restr.f90 b/base/comm/internals/psi_covrl_restr.f90 index 9a0ecbed4..9e1c86358 100644 --- a/base/comm/internals/psi_covrl_restr.f90 +++ b/base/comm/internals/psi_covrl_restr.f90 @@ -35,90 +35,90 @@ ! ! ! -subroutine psi_covrl_restr_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_covrl_restr_vect - use psb_c_base_vect_mod - - implicit none - - class(psb_c_base_vect_type) :: x - complex(psb_spk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_covrl_restr_vect' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,czero) - - call psb_erractionrestore(err_act) - return +submodule (psi_c_comm_v_mod) psi_c_ovrl_restr_v_impl + use psb_base_mod +contains + module subroutine psi_covrl_restr_vect(x,xs,desc_a,info) + + implicit none + + class(psb_c_base_vect_type) :: x + complex(psb_spk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_covrl_restr_vect' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,czero) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_restr_vect + return + end subroutine psi_covrl_restr_vect -subroutine psi_covrl_restr_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_covrl_restr_multivect - use psb_c_base_vect_mod + module subroutine psi_covrl_restr_multivect(x,xs,desc_a,info) - implicit none + implicit none - class(psb_c_base_multivect_type) :: x - complex(psb_spk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type) :: x + complex(psb_spk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz,nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz,nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err - name='psi_covrl_restr_mv' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_covrl_restr_mv' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,czero) + isz = size(desc_a%ovrlap_elem,1) + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,czero) - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_restr_multivect + return + end subroutine psi_covrl_restr_multivect +end submodule psi_c_ovrl_restr_v_impl diff --git a/base/comm/internals/psi_covrl_restr_a.f90 b/base/comm/internals/psi_covrl_restr_a.f90 index 0ad657533..6d4a4cad6 100644 --- a/base/comm/internals/psi_covrl_restr_a.f90 +++ b/base/comm/internals/psi_covrl_restr_a.f90 @@ -34,98 +34,100 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_covrl_restrr1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_covrl_restrr1 - - implicit none - - complex(psb_spk_), intent(inout) :: x(:) - complex(psb_spk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_covrl_restrr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx) = xs(i) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_c_comm_a_mod) psi_c_ovrl_restr_a_impl + use psb_base_mod +contains + module subroutine psi_covrl_restrr1(x,xs,desc_a,info) + + implicit none + + complex(psb_spk_), intent(inout) :: x(:) + complex(psb_spk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_covrl_restrr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx) = xs(i) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_restrr1 + return + end subroutine psi_covrl_restrr1 -subroutine psi_covrl_restrr2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_covrl_restrr2 + module subroutine psi_covrl_restrr2(x,xs,desc_a,info) - implicit none + implicit none - complex(psb_spk_), intent(inout) :: x(:,:) - complex(psb_spk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + complex(psb_spk_), intent(inout) :: x(:,:) + complex(psb_spk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err - name='psi_covrl_restrr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_covrl_restrr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - if (size(x,2) /= size(xs,2)) then - info = psb_err_internal_error_ - call psb_errpush(info,name, a_err='Mismacth columns X vs XS') - goto 9999 - endif + if (size(x,2) /= size(xs,2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name, a_err='Mismacth columns X vs XS') + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) + isz = size(desc_a%ovrlap_elem,1) - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx,:) = xs(i,:) - end do + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx,:) = xs(i,:) + end do - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_restrr2 + return + end subroutine psi_covrl_restrr2 +end submodule psi_c_ovrl_restr_a_impl diff --git a/base/comm/internals/psi_covrl_save.f90 b/base/comm/internals/psi_covrl_save.f90 index 42f2ae3a2..5891a202b 100644 --- a/base/comm/internals/psi_covrl_save.f90 +++ b/base/comm/internals/psi_covrl_save.f90 @@ -34,103 +34,101 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_covrl_save_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_covrl_save_vect - use psb_realloc_mod - use psb_c_base_vect_mod - - implicit none - - class(psb_c_base_vect_type) :: x - complex(psb_spk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return +submodule (psi_c_comm_v_mod) psi_c_ovrl_save_v_impl + use psb_base_mod +contains + module subroutine psi_covrl_save_vect(x,xs,desc_a,info) + + implicit none + + class(psb_c_base_vect_type) :: x + complex(psb_spk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_save_vect - -subroutine psi_covrl_save_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_covrl_save_multivect - use psb_realloc_mod - use psb_c_base_vect_mod - - implicit none - - class(psb_c_base_multivect_type) :: x - complex(psb_spk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_covrl_save_vect + + module subroutine psi_covrl_save_multivect(x,xs,desc_a,info) + + implicit none + + class(psb_c_base_multivect_type) :: x + complex(psb_spk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_save_multivect + return + end subroutine psi_covrl_save_multivect +end submodule psi_c_ovrl_save_v_impl diff --git a/base/comm/internals/psi_covrl_save_a.f90 b/base/comm/internals/psi_covrl_save_a.f90 index 6910a2a46..c50676e83 100644 --- a/base/comm/internals/psi_covrl_save_a.f90 +++ b/base/comm/internals/psi_covrl_save_a.f90 @@ -34,108 +34,104 @@ ! These subroutines save the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap. ! -subroutine psi_covrl_saver1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_covrl_saver1 - - use psb_realloc_mod - - implicit none - - complex(psb_spk_), intent(inout) :: x(:) - complex(psb_spk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_covrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i) = x(idx) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_c_comm_a_mod) psi_c_ovrl_save_a_impl + use psb_base_mod +contains + module subroutine psi_covrl_saver1(x,xs,desc_a,info) + implicit none + + complex(psb_spk_), intent(inout) :: x(:) + complex(psb_spk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_covrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i) = x(idx) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_saver1 - - -subroutine psi_covrl_saver2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_covrl_saver2 - - use psb_realloc_mod - - implicit none - - complex(psb_spk_), intent(inout) :: x(:,:) - complex(psb_spk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc - character(len=20) :: name, ch_err - - name='psi_covrl_saver2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = size(x,2) - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i,:) = x(idx,:) - end do - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_covrl_saver1 + + + module subroutine psi_covrl_saver2(x,xs,desc_a,info) + implicit none + + complex(psb_spk_), intent(inout) :: x(:,:) + complex(psb_spk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc + character(len=20) :: name, ch_err + + name='psi_covrl_saver2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = size(x,2) + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i,:) = x(idx,:) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_saver2 + return + end subroutine psi_covrl_saver2 +end submodule psi_c_ovrl_save_a_impl diff --git a/base/comm/internals/psi_covrl_upd.f90 b/base/comm/internals/psi_covrl_upd.f90 index 8212895c6..28a7d1077 100644 --- a/base/comm/internals/psi_covrl_upd.f90 +++ b/base/comm/internals/psi_covrl_upd.f90 @@ -36,169 +36,167 @@ ! ! ! -subroutine psi_covrl_upd_vect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_covrl_upd_vect - use psb_realloc_mod - use psb_c_base_vect_mod - - implicit none - - class(psb_c_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - complex(psb_spk_), allocatable :: xs(:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nx, ndm - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_covrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - call psb_realloc(nx,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i) = czero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) +submodule (psi_c_comm_v_mod) psi_c_ovrl_upd_v_impl + use psb_base_mod +contains + module subroutine psi_covrl_upd_vect(x,desc_a,update,info) + + implicit none + + class(psb_c_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + complex(psb_spk_), allocatable :: xs(:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nx, ndm + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_covrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,czero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + call psb_realloc(nx,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i) = czero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,czero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_upd_vect - -subroutine psi_covrl_upd_multivect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_covrl_upd_multivect - use psb_realloc_mod - use psb_c_base_vect_mod - - implicit none - - class(psb_c_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - complex(psb_spk_), allocatable :: xs(:,:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, ndm, nx, nc - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_covrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(nx,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i,:) = czero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) + return + end subroutine psi_covrl_upd_vect + + module subroutine psi_covrl_upd_multivect(x,desc_a,update,info) + + implicit none + + class(psb_c_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + complex(psb_spk_), allocatable :: xs(:,:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, ndm, nx, nc + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_covrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,czero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(nx,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i,:) = czero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,czero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_upd_multivect + return + end subroutine psi_covrl_upd_multivect +end submodule psi_c_ovrl_upd_v_impl diff --git a/base/comm/internals/psi_covrl_upd_a.f90 b/base/comm/internals/psi_covrl_upd_a.f90 index 813cd88b7..f2f2df08e 100644 --- a/base/comm/internals/psi_covrl_upd_a.f90 +++ b/base/comm/internals/psi_covrl_upd_a.f90 @@ -32,143 +32,143 @@ ! Subroutine: psi_covrl_update ! These subroutines update the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap, -! or for the application of Additive Schwarz preconditioners. +! or for the application of Additive Schwarz preconditioners. ! ! -subroutine psi_covrl_updr1(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_covrl_updr1 - - implicit none - - complex(psb_spk_), intent(inout), target :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_covrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx) = czero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return +submodule (psi_c_comm_a_mod) psi_c_ovrl_upd_a_impl + use psb_base_mod +contains + module subroutine psi_covrl_updr1(x,desc_a,update,info) + implicit none + + complex(psb_spk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_covrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx) = czero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_updr1 - -subroutine psi_covrl_updr2(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_covrl_updr2 - - implicit none - - complex(psb_spk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_covrl_updr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx,:) = czero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_covrl_updr1 + + module subroutine psi_covrl_updr2(x,desc_a,update,info) + implicit none + + complex(psb_spk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_covrl_updr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx,:) = czero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_covrl_updr2 + return + end subroutine psi_covrl_updr2 +end submodule psi_c_ovrl_upd_a_impl diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index 9bfc36e93..4d6be4188 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -89,676 +89,659 @@ ! ! ! -subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_c_comm_v_mod) psi_c_swapdata_impl + use psb_base_mod +contains + subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_cswapdata_vect - use psb_c_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_vect_type) :: y + complex(psb_spk_) :: beta + complex(psb_spk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_cswapdata_vect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_cswapdata_vect + + + ! + ! + ! Subroutine: psi_cswap_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_cswap_vidx_vect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_cswap_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_cswap_vidx_vect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_cswap_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_c_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_vect_type) :: y + complex(psb_spk_) :: beta + complex(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti, n + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_complex_swap_tag + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + idx_pt = snd_pt + call y%gth(idx_pt,nesd,idx) + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_complex_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_cswap_vidx_vect - -! -! -! Subroutine: psi_cswapdata_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_cswapdata_multivect - use psb_c_base_multivect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_cswap_vidx_vect + + ! + ! + ! Subroutine: psi_cswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type) :: y + complex(psb_spk_) :: beta + complex(psb_spk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_cswapdata_multivect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_cswapdata_multivect + + + ! + ! + ! Subroutine: psi_cswap_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_cswap_vidx_multivect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_cswap_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_cswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_cswap_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_c_base_multivect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type) :: y + complex(psb_spk_) :: beta + complex(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_complex_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_complex_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_cswap_vidx_multivect + return + end subroutine psi_cswap_vidx_multivect +end submodule psi_c_swapdata_impl diff --git a/base/comm/internals/psi_cswapdata_a.F90 b/base/comm/internals/psi_cswapdata_a.F90 index 19a688422..709a0d629 100644 --- a/base/comm/internals/psi_cswapdata_a.F90 +++ b/base/comm/internals/psi_cswapdata_a.F90 @@ -84,912 +84,899 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_c_comm_a_mod) psi_c_swapdata_a_impl + use psb_base_mod +contains + module subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_cswapdatam - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +complex(psb_spk_) :: y(:,:), beta +complex(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_cswapdatam + end subroutine psi_cswapdatam -subroutine psi_cswapidxm(ctxt,icomm,flag,n,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + module subroutine psi_cswapidxm(ctxt,flag,n,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - use psi_mod, psb_protect_name => psi_cswapidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta - complex(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +complex(psb_spk_) :: y(:,:), beta +complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + +complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - ! prepare info for communications + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + end if - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_c_spk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_c_spk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_complex_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_c_spk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_c_spk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_complex_swap_tag + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),n*nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),n*nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_complex_swap_tag + + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*)& + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_send) then - if (proc_to_comm < me) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_snd(ctxt,& & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_rcv(ctxt,& & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - end do + end if + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then + end if - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_complex_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,iret) - end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_complex_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*)& - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_cswapidxm + end subroutine psi_cswapidxm + + ! + ! + ! Subroutine: psi_cswapdatav + ! Implements the data exchange among processes. Essentially this is doing + ! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - complex Choose overwrite or sum. + ! y(:) - complex The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - complex Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_cswapdatav(flag,beta,y,desc_a,work,info,data) -! -! -! Subroutine: psi_cswapdatav -! Implements the data exchange among processes. Essentially this is doing -! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y(:) - complex The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_cswapdatav(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_cswapdatav - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: y(:), beta + complex(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_cswapdatav + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_cswapdataidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_cswapidxv(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_cswapidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_cswapdatav + + + ! + ! + ! Subroutine: psi_cswapdataidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_cswapidxv(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + + use psb_error_mod + use psb_desc_mod + use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta - complex(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: y(:), beta + complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+nesd-1)) - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_c_spk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_c_spk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + if (do_send) then - if (proc_to_comm < me) then - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+nesd-1)) + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_c_spk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_c_spk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_complex_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_complex_swap_tag - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_complex_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,iret) + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_cswapidxv + end subroutine psi_cswapidxv +end submodule psi_c_swapdata_a_impl diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index 3cb93309e..92b9f326c 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -91,418 +91,406 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_cswaptran_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_c_comm_v_mod) psi_c_swaptran_impl + use psb_base_mod +contains + module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_cswaptran_vect - use psb_c_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_vect_type) :: y + complex(psb_spk_) :: beta + complex(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_cswaptran_vect + end subroutine psi_cswaptran_vect + + ! + ! + ! Subroutine: psi_ctran_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ctran_vidx_vect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_ctran_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_ctran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_ctran_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_c_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - call mpi_irecv(y%combuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) - - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_vect_type) :: y + complex(psb_spk_) :: beta + complex(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + call mpi_irecv(y%combuf(snd_pt),nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + idx_pt = rcv_pt + call y%gth(idx_pt,nerv,idx) + + pnti = pnti + nerv + nesd + 3 + end do - pnti = pnti + nerv + nesd + 3 - end do - end if + ! + ! Then wait + ! + call y%device_wait() - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... + if (debug) write(*,*) me,' isend' ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+nesd-1) + call y%sct(snd_pt,nesd,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return + return -end subroutine psi_ctran_vidx_vect + end subroutine psi_ctran_vidx_vect -! -! -! -! -! Subroutine: psi_cswaptran_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) + ! + ! + ! + ! + ! Subroutine: psi_cswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_cswaptran_multivect - use psb_c_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type) :: y + complex(psb_spk_) :: beta + complex(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) @@ -510,273 +498,266 @@ subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) end subroutine psi_cswaptran_multivect -! -! -! Subroutine: psi_ctran_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_ctran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_ctran_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_c_base_multivect_mod + ! + ! + ! Subroutine: psi_ctran_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ctran_vidx_multivect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type) :: y + complex(psb_spk_) :: beta + complex(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt + call mpi_irecv(y%combuf(snd_pt),n*nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call y%gth(idx_pt,rcv_pt,nerv,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt - call mpi_irecv(y%combuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_complex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if (debug) write(*,*) me,' done' - end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+n*nesd-1) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - call psb_erractionrestore(err_act) - return + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null -9999 call psb_error_handler(ctxt,err_act) + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' + end if - return -end subroutine psi_ctran_vidx_multivect + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_vidx_multivect +end submodule psi_c_swaptran_impl diff --git a/base/comm/internals/psi_cswaptran_a.F90 b/base/comm/internals/psi_cswaptran_a.F90 index 0065b7f25..285a6a162 100644 --- a/base/comm/internals/psi_cswaptran_a.F90 +++ b/base/comm/internals/psi_cswaptran_a.F90 @@ -88,922 +88,909 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_cswaptranm(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_c_comm_a_mod) psi_c_swaptran_a_impl + use psb_base_mod +contains + module subroutine psi_cswaptranm(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_cswaptranm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: y(:,:), beta + complex(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + call psb_erractionrestore(err_act) return -end subroutine psi_cswaptranm -subroutine psi_ctranidxm(ctxt,icomm,flag,n,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_ctranidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_cswaptranm + + module subroutine psi_ctranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta - complex(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: y(:,:), beta + complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if - ! prepare info for communications + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + if (do_send) then - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 end if - albf=.true. - end if - if (do_send) then - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) + ! Case SWAP_MPI + if (swap_mpi) then - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_c_spk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_c_spk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - end if + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_complex_swap_tag + call mpi_irecv(sndbuf(snd_pt),n*nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_complex_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - ! Case SWAP_MPI - if (swap_mpi) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_c_spk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_c_spk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - - else if (swap_sync) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_complex_swap_tag - if (proc_to_comm < me) then - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send',& + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag - call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_send) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_recv) then - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,iret) - end if + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + end if - end do + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send',& - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_ctranidxm -! -! -! Subroutine: psi_cswaptranv -! Implements the data exchange among processes. This is similar to Xswapdata, but -! the list is read "in reverse", i.e. indices that are normally SENT are used -! for the RECEIVE part and vice-versa. This is the basic data exchange operation -! for doing the product of a sparse matrix by a vector. -! Essentially this is doing a variable all-to-all data exchange -! (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y(:) - complex The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_cswaptranv(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_cswaptranv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + end subroutine psi_ctranidxm + ! + ! + ! Subroutine: psi_cswaptranv + ! Implements the data exchange among processes. This is similar to Xswapdata, but + ! the list is read "in reverse", i.e. indices that are normally SENT are used + ! for the RECEIVE part and vice-versa. This is the basic data exchange operation + ! for doing the product of a sparse matrix by a vector. + ! Essentially this is doing a variable all-to-all data exchange + ! (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - complex Choose overwrite or sum. + ! y(:) - complex The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - complex Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_cswaptranv(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: y(:), beta + complex(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_cswaptranv + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_ctranidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_ctranidxv(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 - use psi_mod, psb_protect_name => psi_ctranidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_cswaptranv + + + ! + ! + ! Subroutine: psi_ctranidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ctranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta - complex(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: y(:), beta + complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + + complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) - - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_c_spk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_c_spk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) + + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - else if (swap_sync) then + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_c_spk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_c_spk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_complex_swap_tag + call mpi_irecv(sndbuf(snd_pt),nesd,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_complex_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag, icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),nerv,& + & psb_mpi_c_spk_,prcid(i),& + & p2ptag, icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm < me) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_complex_swap_tag + + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_snd(ctxt,& & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_rcv(ctxt,& & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag - call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + end if - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,iret) - end if + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag - - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_ctranidxv + end subroutine psi_ctranidxv +end submodule psi_c_swaptran_a_impl diff --git a/base/comm/internals/psi_dovrl_restr.f90 b/base/comm/internals/psi_dovrl_restr.f90 index bbcab4f36..9bc9bed57 100644 --- a/base/comm/internals/psi_dovrl_restr.f90 +++ b/base/comm/internals/psi_dovrl_restr.f90 @@ -35,90 +35,90 @@ ! ! ! -subroutine psi_dovrl_restr_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_dovrl_restr_vect - use psb_d_base_vect_mod - - implicit none - - class(psb_d_base_vect_type) :: x - real(psb_dpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_restr_vect' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,dzero) - - call psb_erractionrestore(err_act) - return +submodule (psi_d_comm_v_mod) psi_d_ovrl_restr_v_impl + use psb_base_mod +contains + module subroutine psi_dovrl_restr_vect(x,xs,desc_a,info) + + implicit none + + class(psb_d_base_vect_type) :: x + real(psb_dpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_restr_vect' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,dzero) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_restr_vect + return + end subroutine psi_dovrl_restr_vect -subroutine psi_dovrl_restr_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_dovrl_restr_multivect - use psb_d_base_vect_mod + module subroutine psi_dovrl_restr_multivect(x,xs,desc_a,info) - implicit none + implicit none - class(psb_d_base_multivect_type) :: x - real(psb_dpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: x + real(psb_dpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz,nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz,nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err - name='psi_dovrl_restr_mv' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_dovrl_restr_mv' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,dzero) + isz = size(desc_a%ovrlap_elem,1) + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,dzero) - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_restr_multivect + return + end subroutine psi_dovrl_restr_multivect +end submodule psi_d_ovrl_restr_v_impl diff --git a/base/comm/internals/psi_dovrl_restr_a.f90 b/base/comm/internals/psi_dovrl_restr_a.f90 index 768f6b262..f197251ba 100644 --- a/base/comm/internals/psi_dovrl_restr_a.f90 +++ b/base/comm/internals/psi_dovrl_restr_a.f90 @@ -34,98 +34,100 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_dovrl_restrr1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_dovrl_restrr1 - - implicit none - - real(psb_dpk_), intent(inout) :: x(:) - real(psb_dpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_dovrl_restrr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx) = xs(i) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_d_comm_a_mod) psi_d_ovrl_restr_a_impl + use psb_base_mod +contains + module subroutine psi_dovrl_restrr1(x,xs,desc_a,info) + + implicit none + + real(psb_dpk_), intent(inout) :: x(:) + real(psb_dpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_dovrl_restrr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx) = xs(i) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_restrr1 + return + end subroutine psi_dovrl_restrr1 -subroutine psi_dovrl_restrr2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_dovrl_restrr2 + module subroutine psi_dovrl_restrr2(x,xs,desc_a,info) - implicit none + implicit none - real(psb_dpk_), intent(inout) :: x(:,:) - real(psb_dpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(inout) :: x(:,:) + real(psb_dpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err - name='psi_dovrl_restrr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_dovrl_restrr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - if (size(x,2) /= size(xs,2)) then - info = psb_err_internal_error_ - call psb_errpush(info,name, a_err='Mismacth columns X vs XS') - goto 9999 - endif + if (size(x,2) /= size(xs,2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name, a_err='Mismacth columns X vs XS') + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) + isz = size(desc_a%ovrlap_elem,1) - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx,:) = xs(i,:) - end do + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx,:) = xs(i,:) + end do - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_restrr2 + return + end subroutine psi_dovrl_restrr2 +end submodule psi_d_ovrl_restr_a_impl diff --git a/base/comm/internals/psi_dovrl_save.f90 b/base/comm/internals/psi_dovrl_save.f90 index f7bc3dd1a..16b376608 100644 --- a/base/comm/internals/psi_dovrl_save.f90 +++ b/base/comm/internals/psi_dovrl_save.f90 @@ -34,103 +34,101 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_dovrl_save_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_dovrl_save_vect - use psb_realloc_mod - use psb_d_base_vect_mod - - implicit none - - class(psb_d_base_vect_type) :: x - real(psb_dpk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return +submodule (psi_d_comm_v_mod) psi_d_ovrl_save_v_impl + use psb_base_mod +contains + module subroutine psi_dovrl_save_vect(x,xs,desc_a,info) + + implicit none + + class(psb_d_base_vect_type) :: x + real(psb_dpk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_save_vect - -subroutine psi_dovrl_save_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_dovrl_save_multivect - use psb_realloc_mod - use psb_d_base_vect_mod - - implicit none - - class(psb_d_base_multivect_type) :: x - real(psb_dpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_dovrl_save_vect + + module subroutine psi_dovrl_save_multivect(x,xs,desc_a,info) + + implicit none + + class(psb_d_base_multivect_type) :: x + real(psb_dpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_save_multivect + return + end subroutine psi_dovrl_save_multivect +end submodule psi_d_ovrl_save_v_impl diff --git a/base/comm/internals/psi_dovrl_save_a.f90 b/base/comm/internals/psi_dovrl_save_a.f90 index 25c821b82..25d754d09 100644 --- a/base/comm/internals/psi_dovrl_save_a.f90 +++ b/base/comm/internals/psi_dovrl_save_a.f90 @@ -34,108 +34,104 @@ ! These subroutines save the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap. ! -subroutine psi_dovrl_saver1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_dovrl_saver1 - - use psb_realloc_mod - - implicit none - - real(psb_dpk_), intent(inout) :: x(:) - real(psb_dpk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i) = x(idx) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_d_comm_a_mod) psi_d_ovrl_save_a_impl + use psb_base_mod +contains + module subroutine psi_dovrl_saver1(x,xs,desc_a,info) + implicit none + + real(psb_dpk_), intent(inout) :: x(:) + real(psb_dpk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i) = x(idx) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_saver1 - - -subroutine psi_dovrl_saver2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_dovrl_saver2 - - use psb_realloc_mod - - implicit none - - real(psb_dpk_), intent(inout) :: x(:,:) - real(psb_dpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc - character(len=20) :: name, ch_err - - name='psi_dovrl_saver2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = size(x,2) - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i,:) = x(idx,:) - end do - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_dovrl_saver1 + + + module subroutine psi_dovrl_saver2(x,xs,desc_a,info) + implicit none + + real(psb_dpk_), intent(inout) :: x(:,:) + real(psb_dpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc + character(len=20) :: name, ch_err + + name='psi_dovrl_saver2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = size(x,2) + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i,:) = x(idx,:) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_saver2 + return + end subroutine psi_dovrl_saver2 +end submodule psi_d_ovrl_save_a_impl diff --git a/base/comm/internals/psi_dovrl_upd.f90 b/base/comm/internals/psi_dovrl_upd.f90 index 4ca995d9f..147fa47a6 100644 --- a/base/comm/internals/psi_dovrl_upd.f90 +++ b/base/comm/internals/psi_dovrl_upd.f90 @@ -36,169 +36,167 @@ ! ! ! -subroutine psi_dovrl_upd_vect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_dovrl_upd_vect - use psb_realloc_mod - use psb_d_base_vect_mod - - implicit none - - class(psb_d_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - real(psb_dpk_), allocatable :: xs(:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nx, ndm - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_dovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - call psb_realloc(nx,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i) = dzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) +submodule (psi_d_comm_v_mod) psi_d_ovrl_upd_v_impl + use psb_base_mod +contains + module subroutine psi_dovrl_upd_vect(x,desc_a,update,info) + + implicit none + + class(psb_d_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + real(psb_dpk_), allocatable :: xs(:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nx, ndm + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_dovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,dzero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + call psb_realloc(nx,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i) = dzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,dzero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_upd_vect - -subroutine psi_dovrl_upd_multivect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_dovrl_upd_multivect - use psb_realloc_mod - use psb_d_base_vect_mod - - implicit none - - class(psb_d_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - real(psb_dpk_), allocatable :: xs(:,:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, ndm, nx, nc - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_dovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(nx,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i,:) = dzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) + return + end subroutine psi_dovrl_upd_vect + + module subroutine psi_dovrl_upd_multivect(x,desc_a,update,info) + + implicit none + + class(psb_d_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + real(psb_dpk_), allocatable :: xs(:,:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, ndm, nx, nc + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_dovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,dzero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(nx,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i,:) = dzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,dzero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_upd_multivect + return + end subroutine psi_dovrl_upd_multivect +end submodule psi_d_ovrl_upd_v_impl diff --git a/base/comm/internals/psi_dovrl_upd_a.f90 b/base/comm/internals/psi_dovrl_upd_a.f90 index 9678d3e30..5b81d0963 100644 --- a/base/comm/internals/psi_dovrl_upd_a.f90 +++ b/base/comm/internals/psi_dovrl_upd_a.f90 @@ -32,143 +32,143 @@ ! Subroutine: psi_dovrl_update ! These subroutines update the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap, -! or for the application of Additive Schwarz preconditioners. +! or for the application of Additive Schwarz preconditioners. ! ! -subroutine psi_dovrl_updr1(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_dovrl_updr1 - - implicit none - - real(psb_dpk_), intent(inout), target :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_dovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx) = dzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return +submodule (psi_d_comm_a_mod) psi_d_ovrl_upd_a_impl + use psb_base_mod +contains + module subroutine psi_dovrl_updr1(x,desc_a,update,info) + implicit none + + real(psb_dpk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_dovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx) = dzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_updr1 - -subroutine psi_dovrl_updr2(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_dovrl_updr2 - - implicit none - - real(psb_dpk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_dovrl_updr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx,:) = dzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_dovrl_updr1 + + module subroutine psi_dovrl_updr2(x,desc_a,update,info) + implicit none + + real(psb_dpk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_dovrl_updr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx,:) = dzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dovrl_updr2 + return + end subroutine psi_dovrl_updr2 +end submodule psi_d_ovrl_upd_a_impl diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index c118206ff..890cfc30d 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -89,676 +89,659 @@ ! ! ! -subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_d_comm_v_mod) psi_d_swapdata_impl + use psb_base_mod +contains + subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_dswapdata_vect - use psb_d_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_dswapdata_vect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_dswapdata_vect + + + ! + ! + ! Subroutine: psi_dswap_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_dswap_vidx_vect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_dswap_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_dswap_vidx_vect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_dswap_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_d_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti, n + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + idx_pt = snd_pt + call y%gth(idx_pt,nesd,idx) + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_double_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dswap_vidx_vect - -! -! -! Subroutine: psi_dswapdata_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_dswapdata_multivect - use psb_d_base_multivect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_dswap_vidx_vect + + ! + ! + ! Subroutine: psi_dswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_dswapdata_multivect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_dswapdata_multivect + + + ! + ! + ! Subroutine: psi_dswap_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_dswap_vidx_multivect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_dswap_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_dswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_dswap_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_d_base_multivect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_double_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dswap_vidx_multivect + return + end subroutine psi_dswap_vidx_multivect +end submodule psi_d_swapdata_impl diff --git a/base/comm/internals/psi_dswapdata_a.F90 b/base/comm/internals/psi_dswapdata_a.F90 index 9f1f9cec8..2b10ea2dd 100644 --- a/base/comm/internals/psi_dswapdata_a.F90 +++ b/base/comm/internals/psi_dswapdata_a.F90 @@ -84,912 +84,899 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_d_comm_a_mod) psi_d_swapdata_a_impl + use psb_base_mod +contains + module subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_dswapdatam - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +real(psb_dpk_) :: y(:,:), beta +real(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_dswapdatam + end subroutine psi_dswapdatam -subroutine psi_dswapidxm(ctxt,icomm,flag,n,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + module subroutine psi_dswapidxm(ctxt,flag,n,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - use psi_mod, psb_protect_name => psi_dswapidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +real(psb_dpk_) :: y(:,:), beta +real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + +real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - ! prepare info for communications + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + end if - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_r_dpk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_r_dpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_double_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_r_dpk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_r_dpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_double_swap_tag + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_double_swap_tag + + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*)& + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_send) then - if (proc_to_comm < me) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_snd(ctxt,& & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_rcv(ctxt,& & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - end do + end if + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then + end if - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_double_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_double_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,iret) - end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_double_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*)& - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_dswapidxm + end subroutine psi_dswapidxm + + ! + ! + ! Subroutine: psi_dswapdatav + ! Implements the data exchange among processes. Essentially this is doing + ! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - real Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data) -! -! -! Subroutine: psi_dswapdatav -! Implements the data exchange among processes. Essentially this is doing -! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - real Choose overwrite or sum. -! y(:) - real The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - real Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_dswapdatav - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: y(:), beta + real(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_dswapdatav + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_dswapdataidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_dswapidxv(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_dswapidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_dswapdatav + + + ! + ! + ! Subroutine: psi_dswapdataidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_dswapidxv(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + + use psb_error_mod + use psb_desc_mod + use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: y(:), beta + real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+nesd-1)) - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_r_dpk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_r_dpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + if (do_send) then - if (proc_to_comm < me) then - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+nesd-1)) + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_r_dpk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_r_dpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_double_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_double_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_double_swap_tag - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_double_swap_tag + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_double_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,iret) + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_double_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_dswapidxv + end subroutine psi_dswapidxv +end submodule psi_d_swapdata_a_impl diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index 0c168e184..ee4a1a735 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -91,418 +91,406 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_d_comm_v_mod) psi_d_swaptran_impl + use psb_base_mod +contains + module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_dswaptran_vect - use psb_d_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_dswaptran_vect + end subroutine psi_dswaptran_vect + + ! + ! + ! Subroutine: psi_dtran_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_dtran_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_dtran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_dtran_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_d_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - call mpi_irecv(y%combuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) - - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + call mpi_irecv(y%combuf(snd_pt),nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + idx_pt = rcv_pt + call y%gth(idx_pt,nerv,idx) + + pnti = pnti + nerv + nesd + 3 + end do - pnti = pnti + nerv + nesd + 3 - end do - end if + ! + ! Then wait + ! + call y%device_wait() - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... + if (debug) write(*,*) me,' isend' ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+nesd-1) + call y%sct(snd_pt,nesd,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return + return -end subroutine psi_dtran_vidx_vect + end subroutine psi_dtran_vidx_vect -! -! -! -! -! Subroutine: psi_dswaptran_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) + ! + ! + ! + ! + ! Subroutine: psi_dswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_dswaptran_multivect - use psb_d_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) @@ -510,273 +498,266 @@ subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) end subroutine psi_dswaptran_multivect -! -! -! Subroutine: psi_dtran_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_dtran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_dtran_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_d_base_multivect_mod + ! + ! + ! Subroutine: psi_dtran_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_dtran_vidx_multivect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt + call mpi_irecv(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call y%gth(idx_pt,rcv_pt,nerv,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt - call mpi_irecv(y%combuf(snd_pt),n*nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if (debug) write(*,*) me,' done' - end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+n*nesd-1) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - call psb_erractionrestore(err_act) - return + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null -9999 call psb_error_handler(ctxt,err_act) + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' + end if - return -end subroutine psi_dtran_vidx_multivect + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dtran_vidx_multivect +end submodule psi_d_swaptran_impl diff --git a/base/comm/internals/psi_dswaptran_a.F90 b/base/comm/internals/psi_dswaptran_a.F90 index dbeb55134..bd89d814c 100644 --- a/base/comm/internals/psi_dswaptran_a.F90 +++ b/base/comm/internals/psi_dswaptran_a.F90 @@ -88,922 +88,909 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_dswaptranm(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_d_comm_a_mod) psi_d_swaptran_a_impl + use psb_base_mod +contains + module subroutine psi_dswaptranm(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_dswaptranm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: y(:,:), beta + real(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + call psb_erractionrestore(err_act) return -end subroutine psi_dswaptranm -subroutine psi_dtranidxm(ctxt,icomm,flag,n,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_dtranidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_dswaptranm + + module subroutine psi_dtranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: y(:,:), beta + real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if - ! prepare info for communications + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + if (do_send) then - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 end if - albf=.true. - end if - if (do_send) then - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) + ! Case SWAP_MPI + if (swap_mpi) then - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_r_dpk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_r_dpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - end if + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_double_swap_tag + call mpi_irecv(sndbuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_double_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - ! Case SWAP_MPI - if (swap_mpi) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_r_dpk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_r_dpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - - else if (swap_sync) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_double_swap_tag - if (proc_to_comm < me) then - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send',& + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_double_swap_tag - call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_send) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_recv) then - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_double_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,iret) - end if + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + end if - end do + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_double_swap_tag + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send',& - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_dtranidxm -! -! -! Subroutine: psi_dswaptranv -! Implements the data exchange among processes. This is similar to Xswapdata, but -! the list is read "in reverse", i.e. indices that are normally SENT are used -! for the RECEIVE part and vice-versa. This is the basic data exchange operation -! for doing the product of a sparse matrix by a vector. -! Essentially this is doing a variable all-to-all data exchange -! (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - real Choose overwrite or sum. -! y(:) - real The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - real Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_dswaptranv(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_dswaptranv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + end subroutine psi_dtranidxm + ! + ! + ! Subroutine: psi_dswaptranv + ! Implements the data exchange among processes. This is similar to Xswapdata, but + ! the list is read "in reverse", i.e. indices that are normally SENT are used + ! for the RECEIVE part and vice-versa. This is the basic data exchange operation + ! for doing the product of a sparse matrix by a vector. + ! Essentially this is doing a variable all-to-all data exchange + ! (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - real Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_dswaptranv(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: y(:), beta + real(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_dswaptranv + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_dtranidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_dtranidxv(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 - use psi_mod, psb_protect_name => psi_dtranidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_dswaptranv + + + ! + ! + ! Subroutine: psi_dtranidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_dtranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: y(:), beta + real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + + real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) - - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_r_dpk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_r_dpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) + + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - else if (swap_sync) then + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_r_dpk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_r_dpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_double_swap_tag + call mpi_irecv(sndbuf(snd_pt),nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_double_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm < me) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_double_swap_tag + + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_snd(ctxt,& & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_rcv(ctxt,& & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_double_swap_tag - call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + end if - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_double_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,iret) - end if + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_double_swap_tag - - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_dtranidxv + end subroutine psi_dtranidxv +end submodule psi_d_swaptran_a_impl diff --git a/base/comm/internals/psi_eovrl_restr_a.f90 b/base/comm/internals/psi_eovrl_restr_a.f90 index cfd089363..2fe2b7881 100644 --- a/base/comm/internals/psi_eovrl_restr_a.f90 +++ b/base/comm/internals/psi_eovrl_restr_a.f90 @@ -34,98 +34,100 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_eovrl_restrr1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_eovrl_restrr1 - - implicit none - - integer(psb_epk_), intent(inout) :: x(:) - integer(psb_epk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_eovrl_restrr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx) = xs(i) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_e_comm_a_mod) psi_e_ovrl_restr_a_impl + use psb_base_mod +contains + module subroutine psi_eovrl_restrr1(x,xs,desc_a,info) + + implicit none + + integer(psb_epk_), intent(inout) :: x(:) + integer(psb_epk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_eovrl_restrr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx) = xs(i) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_eovrl_restrr1 + return + end subroutine psi_eovrl_restrr1 -subroutine psi_eovrl_restrr2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_eovrl_restrr2 + module subroutine psi_eovrl_restrr2(x,xs,desc_a,info) - implicit none + implicit none - integer(psb_epk_), intent(inout) :: x(:,:) - integer(psb_epk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_epk_), intent(inout) :: x(:,:) + integer(psb_epk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err - name='psi_eovrl_restrr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_eovrl_restrr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - if (size(x,2) /= size(xs,2)) then - info = psb_err_internal_error_ - call psb_errpush(info,name, a_err='Mismacth columns X vs XS') - goto 9999 - endif + if (size(x,2) /= size(xs,2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name, a_err='Mismacth columns X vs XS') + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) + isz = size(desc_a%ovrlap_elem,1) - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx,:) = xs(i,:) - end do + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx,:) = xs(i,:) + end do - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_eovrl_restrr2 + return + end subroutine psi_eovrl_restrr2 +end submodule psi_e_ovrl_restr_a_impl diff --git a/base/comm/internals/psi_eovrl_save_a.f90 b/base/comm/internals/psi_eovrl_save_a.f90 index adcb981ad..41e9e5198 100644 --- a/base/comm/internals/psi_eovrl_save_a.f90 +++ b/base/comm/internals/psi_eovrl_save_a.f90 @@ -34,108 +34,104 @@ ! These subroutines save the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap. ! -subroutine psi_eovrl_saver1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_eovrl_saver1 - - use psb_realloc_mod - - implicit none - - integer(psb_epk_), intent(inout) :: x(:) - integer(psb_epk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_eovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i) = x(idx) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_e_comm_a_mod) psi_e_ovrl_save_a_impl + use psb_base_mod +contains + module subroutine psi_eovrl_saver1(x,xs,desc_a,info) + implicit none + + integer(psb_epk_), intent(inout) :: x(:) + integer(psb_epk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_eovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i) = x(idx) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_eovrl_saver1 - - -subroutine psi_eovrl_saver2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_eovrl_saver2 - - use psb_realloc_mod - - implicit none - - integer(psb_epk_), intent(inout) :: x(:,:) - integer(psb_epk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc - character(len=20) :: name, ch_err - - name='psi_eovrl_saver2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = size(x,2) - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i,:) = x(idx,:) - end do - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_eovrl_saver1 + + + module subroutine psi_eovrl_saver2(x,xs,desc_a,info) + implicit none + + integer(psb_epk_), intent(inout) :: x(:,:) + integer(psb_epk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc + character(len=20) :: name, ch_err + + name='psi_eovrl_saver2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = size(x,2) + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i,:) = x(idx,:) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_eovrl_saver2 + return + end subroutine psi_eovrl_saver2 +end submodule psi_e_ovrl_save_a_impl diff --git a/base/comm/internals/psi_eovrl_upd_a.f90 b/base/comm/internals/psi_eovrl_upd_a.f90 index c14275476..0b6e6f9db 100644 --- a/base/comm/internals/psi_eovrl_upd_a.f90 +++ b/base/comm/internals/psi_eovrl_upd_a.f90 @@ -32,143 +32,143 @@ ! Subroutine: psi_eovrl_update ! These subroutines update the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap, -! or for the application of Additive Schwarz preconditioners. +! or for the application of Additive Schwarz preconditioners. ! ! -subroutine psi_eovrl_updr1(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_eovrl_updr1 - - implicit none - - integer(psb_epk_), intent(inout), target :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_eovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx) = ezero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return +submodule (psi_e_comm_a_mod) psi_e_ovrl_upd_a_impl + use psb_base_mod +contains + module subroutine psi_eovrl_updr1(x,desc_a,update,info) + implicit none + + integer(psb_epk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_eovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx) = ezero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_eovrl_updr1 - -subroutine psi_eovrl_updr2(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_eovrl_updr2 - - implicit none - - integer(psb_epk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_eovrl_updr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx,:) = ezero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_eovrl_updr1 + + module subroutine psi_eovrl_updr2(x,desc_a,update,info) + implicit none + + integer(psb_epk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_eovrl_updr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx,:) = ezero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_eovrl_updr2 + return + end subroutine psi_eovrl_updr2 +end submodule psi_e_ovrl_upd_a_impl diff --git a/base/comm/internals/psi_eswapdata_a.F90 b/base/comm/internals/psi_eswapdata_a.F90 index 8a7afe67f..5285b4640 100644 --- a/base/comm/internals/psi_eswapdata_a.F90 +++ b/base/comm/internals/psi_eswapdata_a.F90 @@ -84,912 +84,899 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_eswapdatam(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_e_comm_a_mod) psi_e_swapdata_a_impl + use psb_base_mod +contains + module subroutine psi_eswapdatam(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_eswapdatam - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta - integer(psb_epk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +integer(psb_epk_) :: y(:,:), beta +integer(psb_epk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_eswapdatam + end subroutine psi_eswapdatam -subroutine psi_eswapidxm(ctxt,icomm,flag,n,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + module subroutine psi_eswapidxm(ctxt,flag,n,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - use psi_mod, psb_protect_name => psi_eswapidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta - integer(psb_epk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +integer(psb_epk_) :: y(:,:), beta +integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + +integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - ! prepare info for communications + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + end if - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_epk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_epk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int8_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_epk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_epk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_epk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_int8_swap_tag + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),n*nesd,& + & psb_mpi_epk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),n*nesd,& + & psb_mpi_epk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_int8_swap_tag + + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*)& + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_send) then - if (proc_to_comm < me) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_snd(ctxt,& & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_rcv(ctxt,& & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - end do + end if + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then + end if - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_epk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_int8_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_epk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_epk_,prcid(i),& - & p2ptag,icomm,iret) - end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_int8_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*)& - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_eswapidxm + end subroutine psi_eswapidxm + + ! + ! + ! Subroutine: psi_eswapdatav + ! Implements the data exchange among processes. Essentially this is doing + ! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - integer Choose overwrite or sum. + ! y(:) - integer The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - integer Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_eswapdatav(flag,beta,y,desc_a,work,info,data) -! -! -! Subroutine: psi_eswapdatav -! Implements the data exchange among processes. Essentially this is doing -! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:) - integer The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_eswapdatav(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_eswapdatav - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta - integer(psb_epk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_epk_) :: y(:), beta + integer(psb_epk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_eswapdatav + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_eswapdataidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_eswapidxv(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_eswapidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_eswapdatav + + + ! + ! + ! Subroutine: psi_eswapdataidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_eswapidxv(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + + use psb_error_mod + use psb_desc_mod + use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta - integer(psb_epk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_epk_) :: y(:), beta + integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+nesd-1)) - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_epk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_epk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + if (do_send) then - if (proc_to_comm < me) then - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+nesd-1)) + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_epk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_epk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int8_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),nerv,& + & psb_mpi_epk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_epk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int8_swap_tag - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),nesd,& + & psb_mpi_epk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),nesd,& + & psb_mpi_epk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int8_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_epk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_epk_,prcid(i),& - & p2ptag,icomm,iret) + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_eswapidxv + end subroutine psi_eswapidxv +end submodule psi_e_swapdata_a_impl diff --git a/base/comm/internals/psi_eswaptran_a.F90 b/base/comm/internals/psi_eswaptran_a.F90 index f5817419d..b5f375ff1 100644 --- a/base/comm/internals/psi_eswaptran_a.F90 +++ b/base/comm/internals/psi_eswaptran_a.F90 @@ -88,922 +88,909 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_eswaptranm(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_e_comm_a_mod) psi_e_swaptran_a_impl + use psb_base_mod +contains + module subroutine psi_eswaptranm(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_eswaptranm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta - integer(psb_epk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_epk_) :: y(:,:), beta + integer(psb_epk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + call psb_erractionrestore(err_act) return -end subroutine psi_eswaptranm -subroutine psi_etranidxm(ctxt,icomm,flag,n,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_etranidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_eswaptranm + + module subroutine psi_etranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta - integer(psb_epk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_epk_) :: y(:,:), beta + integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if - ! prepare info for communications + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + if (do_send) then - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 end if - albf=.true. - end if - if (do_send) then - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) + ! Case SWAP_MPI + if (swap_mpi) then - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_epk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_epk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - end if + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int8_swap_tag + call mpi_irecv(sndbuf(snd_pt),n*nesd,& + & psb_mpi_epk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int8_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_epk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_epk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - ! Case SWAP_MPI - if (swap_mpi) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_epk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_epk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - - else if (swap_sync) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int8_swap_tag - if (proc_to_comm < me) then - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send',& + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag - call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_epk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_send) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_recv) then - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_epk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_epk_,prcid(i),& - & p2ptag,icomm,iret) - end if + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + end if - end do + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send',& - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_etranidxm -! -! -! Subroutine: psi_eswaptranv -! Implements the data exchange among processes. This is similar to Xswapdata, but -! the list is read "in reverse", i.e. indices that are normally SENT are used -! for the RECEIVE part and vice-versa. This is the basic data exchange operation -! for doing the product of a sparse matrix by a vector. -! Essentially this is doing a variable all-to-all data exchange -! (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:) - integer The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_eswaptranv(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_eswaptranv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + end subroutine psi_etranidxm + ! + ! + ! Subroutine: psi_eswaptranv + ! Implements the data exchange among processes. This is similar to Xswapdata, but + ! the list is read "in reverse", i.e. indices that are normally SENT are used + ! for the RECEIVE part and vice-versa. This is the basic data exchange operation + ! for doing the product of a sparse matrix by a vector. + ! Essentially this is doing a variable all-to-all data exchange + ! (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - integer Choose overwrite or sum. + ! y(:) - integer The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - integer Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_eswaptranv(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta - integer(psb_epk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_epk_) :: y(:), beta + integer(psb_epk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_eswaptranv + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_etranidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_etranidxv(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 - use psi_mod, psb_protect_name => psi_etranidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_eswaptranv + + + ! + ! + ! Subroutine: psi_etranidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_etranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta - integer(psb_epk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_epk_) :: y(:), beta + integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + + integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) - - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_epk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_epk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) + + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - else if (swap_sync) then + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_epk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_epk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int8_swap_tag + call mpi_irecv(sndbuf(snd_pt),nesd,& + & psb_mpi_epk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int8_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),nerv,& + & psb_mpi_epk_,prcid(i),& + & p2ptag, icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),nerv,& + & psb_mpi_epk_,prcid(i),& + & p2ptag, icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm < me) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int8_swap_tag + + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_snd(ctxt,& & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_rcv(ctxt,& & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag - call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_epk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + end if - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_epk_,prcid(i),& - & p2ptag, icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_epk_,prcid(i),& - & p2ptag, icomm,iret) - end if + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag - - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_etranidxv + end subroutine psi_etranidxv +end submodule psi_e_swaptran_a_impl diff --git a/base/comm/internals/psi_i2ovrl_restr_a.f90 b/base/comm/internals/psi_i2ovrl_restr_a.f90 index acb6b25d3..49cf864d1 100644 --- a/base/comm/internals/psi_i2ovrl_restr_a.f90 +++ b/base/comm/internals/psi_i2ovrl_restr_a.f90 @@ -34,98 +34,100 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_i2ovrl_restrr1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_i2ovrl_restrr1 - - implicit none - - integer(psb_i2pk_), intent(inout) :: x(:) - integer(psb_i2pk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_i2ovrl_restrr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx) = xs(i) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_i2_comm_a_mod) psi_i2_ovrl_restr_a_impl + use psb_base_mod +contains + module subroutine psi_i2ovrl_restrr1(x,xs,desc_a,info) + + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_i2pk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_i2ovrl_restrr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx) = xs(i) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_i2ovrl_restrr1 + return + end subroutine psi_i2ovrl_restrr1 -subroutine psi_i2ovrl_restrr2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_i2ovrl_restrr2 + module subroutine psi_i2ovrl_restrr2(x,xs,desc_a,info) - implicit none + implicit none - integer(psb_i2pk_), intent(inout) :: x(:,:) - integer(psb_i2pk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_), intent(inout) :: x(:,:) + integer(psb_i2pk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err - name='psi_i2ovrl_restrr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_i2ovrl_restrr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - if (size(x,2) /= size(xs,2)) then - info = psb_err_internal_error_ - call psb_errpush(info,name, a_err='Mismacth columns X vs XS') - goto 9999 - endif + if (size(x,2) /= size(xs,2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name, a_err='Mismacth columns X vs XS') + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) + isz = size(desc_a%ovrlap_elem,1) - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx,:) = xs(i,:) - end do + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx,:) = xs(i,:) + end do - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_i2ovrl_restrr2 + return + end subroutine psi_i2ovrl_restrr2 +end submodule psi_i2_ovrl_restr_a_impl diff --git a/base/comm/internals/psi_i2ovrl_save_a.f90 b/base/comm/internals/psi_i2ovrl_save_a.f90 index dc0b3f547..09c0cd19e 100644 --- a/base/comm/internals/psi_i2ovrl_save_a.f90 +++ b/base/comm/internals/psi_i2ovrl_save_a.f90 @@ -34,108 +34,104 @@ ! These subroutines save the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap. ! -subroutine psi_i2ovrl_saver1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_i2ovrl_saver1 - - use psb_realloc_mod - - implicit none - - integer(psb_i2pk_), intent(inout) :: x(:) - integer(psb_i2pk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_i2ovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i) = x(idx) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_i2_comm_a_mod) psi_i2_ovrl_save_a_impl + use psb_base_mod +contains + module subroutine psi_i2ovrl_saver1(x,xs,desc_a,info) + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_i2pk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_i2ovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i) = x(idx) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_i2ovrl_saver1 - - -subroutine psi_i2ovrl_saver2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_i2ovrl_saver2 - - use psb_realloc_mod - - implicit none - - integer(psb_i2pk_), intent(inout) :: x(:,:) - integer(psb_i2pk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc - character(len=20) :: name, ch_err - - name='psi_i2ovrl_saver2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = size(x,2) - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i,:) = x(idx,:) - end do - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_i2ovrl_saver1 + + + module subroutine psi_i2ovrl_saver2(x,xs,desc_a,info) + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:,:) + integer(psb_i2pk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc + character(len=20) :: name, ch_err + + name='psi_i2ovrl_saver2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = size(x,2) + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i,:) = x(idx,:) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_i2ovrl_saver2 + return + end subroutine psi_i2ovrl_saver2 +end submodule psi_i2_ovrl_save_a_impl diff --git a/base/comm/internals/psi_i2ovrl_upd_a.f90 b/base/comm/internals/psi_i2ovrl_upd_a.f90 index 973ffa8e4..82d52fdf5 100644 --- a/base/comm/internals/psi_i2ovrl_upd_a.f90 +++ b/base/comm/internals/psi_i2ovrl_upd_a.f90 @@ -32,143 +32,143 @@ ! Subroutine: psi_i2ovrl_update ! These subroutines update the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap, -! or for the application of Additive Schwarz preconditioners. +! or for the application of Additive Schwarz preconditioners. ! ! -subroutine psi_i2ovrl_updr1(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_i2ovrl_updr1 - - implicit none - - integer(psb_i2pk_), intent(inout), target :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_i2ovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx) = i2zero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return +submodule (psi_i2_comm_a_mod) psi_i2_ovrl_upd_a_impl + use psb_base_mod +contains + module subroutine psi_i2ovrl_updr1(x,desc_a,update,info) + implicit none + + integer(psb_i2pk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_i2ovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx) = i2zero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_i2ovrl_updr1 - -subroutine psi_i2ovrl_updr2(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_i2ovrl_updr2 - - implicit none - - integer(psb_i2pk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_i2ovrl_updr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx,:) = i2zero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_i2ovrl_updr1 + + module subroutine psi_i2ovrl_updr2(x,desc_a,update,info) + implicit none + + integer(psb_i2pk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_i2ovrl_updr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx,:) = i2zero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_i2ovrl_updr2 + return + end subroutine psi_i2ovrl_updr2 +end submodule psi_i2_ovrl_upd_a_impl diff --git a/base/comm/internals/psi_i2swapdata_a.F90 b/base/comm/internals/psi_i2swapdata_a.F90 index b7d8b8f52..cb368d540 100644 --- a/base/comm/internals/psi_i2swapdata_a.F90 +++ b/base/comm/internals/psi_i2swapdata_a.F90 @@ -84,912 +84,899 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_i2_comm_a_mod) psi_i2_swapdata_a_impl + use psb_base_mod +contains + module subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_i2swapdatam - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta - integer(psb_i2pk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +integer(psb_i2pk_) :: y(:,:), beta +integer(psb_i2pk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_i2swapdatam + end subroutine psi_i2swapdatam -subroutine psi_i2swapidxm(ctxt,icomm,flag,n,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + module subroutine psi_i2swapidxm(ctxt,flag,n,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - use psi_mod, psb_protect_name => psi_i2swapidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta - integer(psb_i2pk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +integer(psb_i2pk_) :: y(:,:), beta +integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + +integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - ! prepare info for communications + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + end if - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_i2pk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_i2pk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int2_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_i2pk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_i2pk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_int2_swap_tag + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),n*nesd,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),n*nesd,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_int2_swap_tag + + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*)& + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_send) then - if (proc_to_comm < me) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_snd(ctxt,& & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_rcv(ctxt,& & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - end do + end if + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then + end if - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_int2_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag,icomm,iret) - end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_int2_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*)& - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_i2swapidxm + end subroutine psi_i2swapidxm + + ! + ! + ! Subroutine: psi_i2swapdatav + ! Implements the data exchange among processes. Essentially this is doing + ! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - integer Choose overwrite or sum. + ! y(:) - integer The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - integer Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_i2swapdatav(flag,beta,y,desc_a,work,info,data) -! -! -! Subroutine: psi_i2swapdatav -! Implements the data exchange among processes. Essentially this is doing -! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:) - integer The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_i2swapdatav(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_i2swapdatav - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta - integer(psb_i2pk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_i2swapdatav + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_i2swapdataidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_i2swapidxv(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_i2swapidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_i2swapdatav + + + ! + ! + ! Subroutine: psi_i2swapdataidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_i2swapidxv(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + + use psb_error_mod + use psb_desc_mod + use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta - integer(psb_i2pk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+nesd-1)) - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_i2pk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_i2pk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + if (do_send) then - if (proc_to_comm < me) then - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+nesd-1)) + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_i2pk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_i2pk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int2_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),nerv,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int2_swap_tag - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),nesd,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),nesd,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int2_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag,icomm,iret) + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_i2swapidxv + end subroutine psi_i2swapidxv +end submodule psi_i2_swapdata_a_impl diff --git a/base/comm/internals/psi_i2swaptran_a.F90 b/base/comm/internals/psi_i2swaptran_a.F90 index d43112c48..3244dd66b 100644 --- a/base/comm/internals/psi_i2swaptran_a.F90 +++ b/base/comm/internals/psi_i2swaptran_a.F90 @@ -88,922 +88,909 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_i2swaptranm(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_i2_comm_a_mod) psi_i2_swaptran_a_impl + use psb_base_mod +contains + module subroutine psi_i2swaptranm(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_i2swaptranm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta - integer(psb_i2pk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_) :: y(:,:), beta + integer(psb_i2pk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + call psb_erractionrestore(err_act) return -end subroutine psi_i2swaptranm -subroutine psi_i2tranidxm(ctxt,icomm,flag,n,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_i2tranidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_i2swaptranm + + module subroutine psi_i2tranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta - integer(psb_i2pk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_) :: y(:,:), beta + integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if - ! prepare info for communications + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + if (do_send) then - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 end if - albf=.true. - end if - if (do_send) then - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) + ! Case SWAP_MPI + if (swap_mpi) then - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_i2pk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_i2pk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - end if + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int2_swap_tag + call mpi_irecv(sndbuf(snd_pt),n*nesd,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int2_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - ! Case SWAP_MPI - if (swap_mpi) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_i2pk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_i2pk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - - else if (swap_sync) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int2_swap_tag - if (proc_to_comm < me) then - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send',& + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag - call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_send) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_recv) then - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag,icomm,iret) - end if + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + end if - end do + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send',& - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_i2tranidxm -! -! -! Subroutine: psi_i2swaptranv -! Implements the data exchange among processes. This is similar to Xswapdata, but -! the list is read "in reverse", i.e. indices that are normally SENT are used -! for the RECEIVE part and vice-versa. This is the basic data exchange operation -! for doing the product of a sparse matrix by a vector. -! Essentially this is doing a variable all-to-all data exchange -! (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:) - integer The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_i2swaptranv(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_i2swaptranv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + end subroutine psi_i2tranidxm + ! + ! + ! Subroutine: psi_i2swaptranv + ! Implements the data exchange among processes. This is similar to Xswapdata, but + ! the list is read "in reverse", i.e. indices that are normally SENT are used + ! for the RECEIVE part and vice-versa. This is the basic data exchange operation + ! for doing the product of a sparse matrix by a vector. + ! Essentially this is doing a variable all-to-all data exchange + ! (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - integer Choose overwrite or sum. + ! y(:) - integer The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - integer Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_i2swaptranv(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta - integer(psb_i2pk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_i2swaptranv + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_i2tranidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_i2tranidxv(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 - use psi_mod, psb_protect_name => psi_i2tranidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_i2swaptranv + + + ! + ! + ! Subroutine: psi_i2tranidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_i2tranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta - integer(psb_i2pk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + + integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) - - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_i2pk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_i2pk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) + + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - else if (swap_sync) then + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_i2pk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_i2pk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int2_swap_tag + call mpi_irecv(sndbuf(snd_pt),nesd,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int2_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),nerv,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag, icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),nerv,& + & psb_mpi_i2pk_,prcid(i),& + & p2ptag, icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm < me) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int2_swap_tag + + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_snd(ctxt,& & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_rcv(ctxt,& & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag - call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + end if - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag, icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_i2pk_,prcid(i),& - & p2ptag, icomm,iret) - end if + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag - - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_i2tranidxv + end subroutine psi_i2tranidxv +end submodule psi_i2_swaptran_a_impl diff --git a/base/comm/internals/psi_iovrl_restr.f90 b/base/comm/internals/psi_iovrl_restr.f90 index 599a986e4..838b7e50b 100644 --- a/base/comm/internals/psi_iovrl_restr.f90 +++ b/base/comm/internals/psi_iovrl_restr.f90 @@ -35,90 +35,90 @@ ! ! ! -subroutine psi_iovrl_restr_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_iovrl_restr_vect - use psb_i_base_vect_mod - - implicit none - - class(psb_i_base_vect_type) :: x - integer(psb_ipk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_iovrl_restr_vect' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,izero) - - call psb_erractionrestore(err_act) - return +submodule (psi_i_comm_v_mod) psi_i_ovrl_restr_v_impl + use psb_base_mod +contains + module subroutine psi_iovrl_restr_vect(x,xs,desc_a,info) + + implicit none + + class(psb_i_base_vect_type) :: x + integer(psb_ipk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_iovrl_restr_vect' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,izero) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_iovrl_restr_vect + return + end subroutine psi_iovrl_restr_vect -subroutine psi_iovrl_restr_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_iovrl_restr_multivect - use psb_i_base_vect_mod + module subroutine psi_iovrl_restr_multivect(x,xs,desc_a,info) - implicit none + implicit none - class(psb_i_base_multivect_type) :: x - integer(psb_ipk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type) :: x + integer(psb_ipk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz,nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz,nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err - name='psi_iovrl_restr_mv' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_iovrl_restr_mv' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,izero) + isz = size(desc_a%ovrlap_elem,1) + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,izero) - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_iovrl_restr_multivect + return + end subroutine psi_iovrl_restr_multivect +end submodule psi_i_ovrl_restr_v_impl diff --git a/base/comm/internals/psi_iovrl_save.f90 b/base/comm/internals/psi_iovrl_save.f90 index eb7a7ffb6..ed84f7b1b 100644 --- a/base/comm/internals/psi_iovrl_save.f90 +++ b/base/comm/internals/psi_iovrl_save.f90 @@ -34,103 +34,101 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_iovrl_save_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_iovrl_save_vect - use psb_realloc_mod - use psb_i_base_vect_mod - - implicit none - - class(psb_i_base_vect_type) :: x - integer(psb_ipk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return +submodule (psi_i_comm_v_mod) psi_i_ovrl_save_v_impl + use psb_base_mod +contains + module subroutine psi_iovrl_save_vect(x,xs,desc_a,info) + + implicit none + + class(psb_i_base_vect_type) :: x + integer(psb_ipk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_iovrl_save_vect - -subroutine psi_iovrl_save_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_iovrl_save_multivect - use psb_realloc_mod - use psb_i_base_vect_mod - - implicit none - - class(psb_i_base_multivect_type) :: x - integer(psb_ipk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_iovrl_save_vect + + module subroutine psi_iovrl_save_multivect(x,xs,desc_a,info) + + implicit none + + class(psb_i_base_multivect_type) :: x + integer(psb_ipk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_iovrl_save_multivect + return + end subroutine psi_iovrl_save_multivect +end submodule psi_i_ovrl_save_v_impl diff --git a/base/comm/internals/psi_iovrl_upd.f90 b/base/comm/internals/psi_iovrl_upd.f90 index cf3c201b5..6873e3d34 100644 --- a/base/comm/internals/psi_iovrl_upd.f90 +++ b/base/comm/internals/psi_iovrl_upd.f90 @@ -36,169 +36,167 @@ ! ! ! -subroutine psi_iovrl_upd_vect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_iovrl_upd_vect - use psb_realloc_mod - use psb_i_base_vect_mod - - implicit none - - class(psb_i_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - integer(psb_ipk_), allocatable :: xs(:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nx, ndm - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_iovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - call psb_realloc(nx,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i) = izero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) +submodule (psi_i_comm_v_mod) psi_i_ovrl_upd_v_impl + use psb_base_mod +contains + module subroutine psi_iovrl_upd_vect(x,desc_a,update,info) + + implicit none + + class(psb_i_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_ipk_), allocatable :: xs(:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nx, ndm + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_iovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,izero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + call psb_realloc(nx,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i) = izero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,izero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_iovrl_upd_vect - -subroutine psi_iovrl_upd_multivect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_iovrl_upd_multivect - use psb_realloc_mod - use psb_i_base_vect_mod - - implicit none - - class(psb_i_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - integer(psb_ipk_), allocatable :: xs(:,:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, ndm, nx, nc - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_iovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(nx,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i,:) = izero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) + return + end subroutine psi_iovrl_upd_vect + + module subroutine psi_iovrl_upd_multivect(x,desc_a,update,info) + + implicit none + + class(psb_i_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_ipk_), allocatable :: xs(:,:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, ndm, nx, nc + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_iovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,izero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(nx,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i,:) = izero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,izero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_iovrl_upd_multivect + return + end subroutine psi_iovrl_upd_multivect +end submodule psi_i_ovrl_upd_v_impl diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index fc4ee2628..23c6d1da6 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -89,676 +89,659 @@ ! ! ! -subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_i_comm_v_mod) psi_i_swapdata_impl + use psb_base_mod +contains + subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_iswapdata_vect - use psb_i_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type) :: y + integer(psb_ipk_) :: beta + integer(psb_ipk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_iswapdata_vect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_iswapdata_vect + + + ! + ! + ! Subroutine: psi_iswap_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_iswap_vidx_vect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_iswap_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_iswap_vidx_vect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_iswap_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_i_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type) :: y + integer(psb_ipk_) :: beta + integer(psb_ipk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti, n + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_int_swap_tag + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_ipk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + idx_pt = snd_pt + call y%gth(idx_pt,nesd,idx) + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_ipk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_int_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_iswap_vidx_vect - -! -! -! Subroutine: psi_iswapdata_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_iswapdata_multivect - use psb_i_base_multivect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_iswap_vidx_vect + + ! + ! + ! Subroutine: psi_iswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type) :: y + integer(psb_ipk_) :: beta + integer(psb_ipk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_iswapdata_multivect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_iswapdata_multivect + + + ! + ! + ! Subroutine: psi_iswap_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_iswap_vidx_multivect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_iswap_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_iswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_iswap_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_i_base_multivect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type) :: y + integer(psb_ipk_) :: beta + integer(psb_ipk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_int_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_ipk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_ipk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_int_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_iswap_vidx_multivect + return + end subroutine psi_iswap_vidx_multivect +end submodule psi_i_swapdata_impl diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index 9b4404246..ce4e64e75 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -91,418 +91,406 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_i_comm_v_mod) psi_i_swaptran_impl + use psb_base_mod +contains + module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_iswaptran_vect - use psb_i_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type) :: y + integer(psb_ipk_) :: beta + integer(psb_ipk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_iswaptran_vect + end subroutine psi_iswaptran_vect + + ! + ! + ! Subroutine: psi_itran_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_itran_vidx_vect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_itran_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_itran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_itran_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_i_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - call mpi_irecv(y%combuf(snd_pt),nesd,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) - - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),nerv,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type) :: y + integer(psb_ipk_) :: beta + integer(psb_ipk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + call mpi_irecv(y%combuf(snd_pt),nesd,& + & psb_mpi_ipk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + idx_pt = rcv_pt + call y%gth(idx_pt,nerv,idx) + + pnti = pnti + nerv + nesd + 3 + end do - pnti = pnti + nerv + nesd + 3 - end do - end if + ! + ! Then wait + ! + call y%device_wait() - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... + if (debug) write(*,*) me,' isend' ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),nerv,& + & psb_mpi_ipk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+nesd-1) + call y%sct(snd_pt,nesd,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return + return -end subroutine psi_itran_vidx_vect + end subroutine psi_itran_vidx_vect -! -! -! -! -! Subroutine: psi_iswaptran_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) + ! + ! + ! + ! + ! Subroutine: psi_iswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_iswaptran_multivect - use psb_i_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type) :: y + integer(psb_ipk_) :: beta + integer(psb_ipk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) @@ -510,273 +498,266 @@ subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) end subroutine psi_iswaptran_multivect -! -! -! Subroutine: psi_itran_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_itran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_itran_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_i_base_multivect_mod + ! + ! + ! Subroutine: psi_itran_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_itran_vidx_multivect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type) :: y + integer(psb_ipk_) :: beta + integer(psb_ipk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt + call mpi_irecv(y%combuf(snd_pt),n*nesd,& + & psb_mpi_ipk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call y%gth(idx_pt,rcv_pt,nerv,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_ipk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt - call mpi_irecv(y%combuf(snd_pt),n*nesd,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_int_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if (debug) write(*,*) me,' done' - end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+n*nesd-1) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - call psb_erractionrestore(err_act) - return + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null -9999 call psb_error_handler(ctxt,err_act) + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' + end if - return -end subroutine psi_itran_vidx_multivect + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_itran_vidx_multivect +end submodule psi_i_swaptran_impl diff --git a/base/comm/internals/psi_lovrl_restr.f90 b/base/comm/internals/psi_lovrl_restr.f90 index d3f6c9137..ebc7a8d1a 100644 --- a/base/comm/internals/psi_lovrl_restr.f90 +++ b/base/comm/internals/psi_lovrl_restr.f90 @@ -35,90 +35,90 @@ ! ! ! -subroutine psi_lovrl_restr_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_lovrl_restr_vect - use psb_l_base_vect_mod - - implicit none - - class(psb_l_base_vect_type) :: x - integer(psb_lpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_lovrl_restr_vect' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,lzero) - - call psb_erractionrestore(err_act) - return +submodule (psi_l_comm_v_mod) psi_l_ovrl_restr_v_impl + use psb_base_mod +contains + module subroutine psi_lovrl_restr_vect(x,xs,desc_a,info) + + implicit none + + class(psb_l_base_vect_type) :: x + integer(psb_lpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_lovrl_restr_vect' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,lzero) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_lovrl_restr_vect + return + end subroutine psi_lovrl_restr_vect -subroutine psi_lovrl_restr_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_lovrl_restr_multivect - use psb_l_base_vect_mod + module subroutine psi_lovrl_restr_multivect(x,xs,desc_a,info) - implicit none + implicit none - class(psb_l_base_multivect_type) :: x - integer(psb_lpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: x + integer(psb_lpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz,nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz,nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err - name='psi_lovrl_restr_mv' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_lovrl_restr_mv' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,lzero) + isz = size(desc_a%ovrlap_elem,1) + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,lzero) - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_lovrl_restr_multivect + return + end subroutine psi_lovrl_restr_multivect +end submodule psi_l_ovrl_restr_v_impl diff --git a/base/comm/internals/psi_lovrl_save.f90 b/base/comm/internals/psi_lovrl_save.f90 index 0eb623dac..4e3b26a9f 100644 --- a/base/comm/internals/psi_lovrl_save.f90 +++ b/base/comm/internals/psi_lovrl_save.f90 @@ -34,103 +34,101 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_lovrl_save_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_lovrl_save_vect - use psb_realloc_mod - use psb_l_base_vect_mod - - implicit none - - class(psb_l_base_vect_type) :: x - integer(psb_lpk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return +submodule (psi_l_comm_v_mod) psi_l_ovrl_save_v_impl + use psb_base_mod +contains + module subroutine psi_lovrl_save_vect(x,xs,desc_a,info) + + implicit none + + class(psb_l_base_vect_type) :: x + integer(psb_lpk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_lovrl_save_vect - -subroutine psi_lovrl_save_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_lovrl_save_multivect - use psb_realloc_mod - use psb_l_base_vect_mod - - implicit none - - class(psb_l_base_multivect_type) :: x - integer(psb_lpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_lovrl_save_vect + + module subroutine psi_lovrl_save_multivect(x,xs,desc_a,info) + + implicit none + + class(psb_l_base_multivect_type) :: x + integer(psb_lpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_lovrl_save_multivect + return + end subroutine psi_lovrl_save_multivect +end submodule psi_l_ovrl_save_v_impl diff --git a/base/comm/internals/psi_lovrl_upd.f90 b/base/comm/internals/psi_lovrl_upd.f90 index 1371e02b2..0d1701e2b 100644 --- a/base/comm/internals/psi_lovrl_upd.f90 +++ b/base/comm/internals/psi_lovrl_upd.f90 @@ -36,169 +36,167 @@ ! ! ! -subroutine psi_lovrl_upd_vect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_lovrl_upd_vect - use psb_realloc_mod - use psb_l_base_vect_mod - - implicit none - - class(psb_l_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - integer(psb_lpk_), allocatable :: xs(:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nx, ndm - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_lovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - call psb_realloc(nx,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i) = lzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) +submodule (psi_l_comm_v_mod) psi_l_ovrl_upd_v_impl + use psb_base_mod +contains + module subroutine psi_lovrl_upd_vect(x,desc_a,update,info) + + implicit none + + class(psb_l_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_lpk_), allocatable :: xs(:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nx, ndm + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_lovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,lzero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + call psb_realloc(nx,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i) = lzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,lzero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_lovrl_upd_vect - -subroutine psi_lovrl_upd_multivect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_lovrl_upd_multivect - use psb_realloc_mod - use psb_l_base_vect_mod - - implicit none - - class(psb_l_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - integer(psb_lpk_), allocatable :: xs(:,:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, ndm, nx, nc - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_lovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(nx,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i,:) = lzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) + return + end subroutine psi_lovrl_upd_vect + + module subroutine psi_lovrl_upd_multivect(x,desc_a,update,info) + + implicit none + + class(psb_l_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_lpk_), allocatable :: xs(:,:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, ndm, nx, nc + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_lovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,lzero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(nx,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i,:) = lzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,lzero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_lovrl_upd_multivect + return + end subroutine psi_lovrl_upd_multivect +end submodule psi_l_ovrl_upd_v_impl diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index a413cb2de..7d9e13a44 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -89,676 +89,659 @@ ! ! ! -subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_l_comm_v_mod) psi_l_swapdata_impl + use psb_base_mod +contains + subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_lswapdata_vect - use psb_l_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type) :: y + integer(psb_lpk_) :: beta + integer(psb_lpk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_lswapdata_vect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_lswapdata_vect + + + ! + ! + ! Subroutine: psi_lswap_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_lswap_vidx_vect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_lswap_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_lswap_vidx_vect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_lswap_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_l_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type) :: y + integer(psb_lpk_) :: beta + integer(psb_lpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti, n + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_long_swap_tag + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_lpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + idx_pt = snd_pt + call y%gth(idx_pt,nesd,idx) + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_lpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_long_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_lswap_vidx_vect - -! -! -! Subroutine: psi_lswapdata_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_lswapdata_multivect - use psb_l_base_multivect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_lswap_vidx_vect + + ! + ! + ! Subroutine: psi_lswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: y + integer(psb_lpk_) :: beta + integer(psb_lpk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_lswapdata_multivect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_lswapdata_multivect + + + ! + ! + ! Subroutine: psi_lswap_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_lswap_vidx_multivect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_lswap_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_lswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_lswap_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_l_base_multivect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: y + integer(psb_lpk_) :: beta + integer(psb_lpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_long_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_lpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_lpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_long_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_lswap_vidx_multivect + return + end subroutine psi_lswap_vidx_multivect +end submodule psi_l_swapdata_impl diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index f92fc3443..094fc5745 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -91,418 +91,406 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_lswaptran_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_l_comm_v_mod) psi_l_swaptran_impl + use psb_base_mod +contains + module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_lswaptran_vect - use psb_l_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type) :: y + integer(psb_lpk_) :: beta + integer(psb_lpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_lswaptran_vect + end subroutine psi_lswaptran_vect + + ! + ! + ! Subroutine: psi_ltran_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ltran_vidx_vect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_ltran_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_ltran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_ltran_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_l_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - call mpi_irecv(y%combuf(snd_pt),nesd,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) - - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),nerv,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type) :: y + integer(psb_lpk_) :: beta + integer(psb_lpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + call mpi_irecv(y%combuf(snd_pt),nesd,& + & psb_mpi_lpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + idx_pt = rcv_pt + call y%gth(idx_pt,nerv,idx) + + pnti = pnti + nerv + nesd + 3 + end do - pnti = pnti + nerv + nesd + 3 - end do - end if + ! + ! Then wait + ! + call y%device_wait() - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... + if (debug) write(*,*) me,' isend' ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),nerv,& + & psb_mpi_lpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+nesd-1) + call y%sct(snd_pt,nesd,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return + return -end subroutine psi_ltran_vidx_vect + end subroutine psi_ltran_vidx_vect -! -! -! -! -! Subroutine: psi_lswaptran_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) + ! + ! + ! + ! + ! Subroutine: psi_lswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_lswaptran_multivect - use psb_l_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: y + integer(psb_lpk_) :: beta + integer(psb_lpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) @@ -510,273 +498,266 @@ subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) end subroutine psi_lswaptran_multivect -! -! -! Subroutine: psi_ltran_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_ltran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_ltran_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_l_base_multivect_mod + ! + ! + ! Subroutine: psi_ltran_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ltran_vidx_multivect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: y + integer(psb_lpk_) :: beta + integer(psb_lpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt + call mpi_irecv(y%combuf(snd_pt),n*nesd,& + & psb_mpi_lpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call y%gth(idx_pt,rcv_pt,nerv,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_lpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt - call mpi_irecv(y%combuf(snd_pt),n*nesd,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_long_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if (debug) write(*,*) me,' done' - end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+n*nesd-1) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - call psb_erractionrestore(err_act) - return + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null -9999 call psb_error_handler(ctxt,err_act) + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' + end if - return -end subroutine psi_ltran_vidx_multivect + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ltran_vidx_multivect +end submodule psi_l_swaptran_impl diff --git a/base/comm/internals/psi_movrl_restr_a.f90 b/base/comm/internals/psi_movrl_restr_a.f90 index d884ad632..a660e2fde 100644 --- a/base/comm/internals/psi_movrl_restr_a.f90 +++ b/base/comm/internals/psi_movrl_restr_a.f90 @@ -34,98 +34,100 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_movrl_restrr1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_movrl_restrr1 - - implicit none - - integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_mpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_movrl_restrr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx) = xs(i) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_m_comm_a_mod) psi_m_ovrl_restr_a_impl + use psb_base_mod +contains + module subroutine psi_movrl_restrr1(x,xs,desc_a,info) + + implicit none + + integer(psb_mpk_), intent(inout) :: x(:) + integer(psb_mpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_movrl_restrr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx) = xs(i) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_movrl_restrr1 + return + end subroutine psi_movrl_restrr1 -subroutine psi_movrl_restrr2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_movrl_restrr2 + module subroutine psi_movrl_restrr2(x,xs,desc_a,info) - implicit none + implicit none - integer(psb_mpk_), intent(inout) :: x(:,:) - integer(psb_mpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_), intent(inout) :: x(:,:) + integer(psb_mpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err - name='psi_movrl_restrr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_movrl_restrr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - if (size(x,2) /= size(xs,2)) then - info = psb_err_internal_error_ - call psb_errpush(info,name, a_err='Mismacth columns X vs XS') - goto 9999 - endif + if (size(x,2) /= size(xs,2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name, a_err='Mismacth columns X vs XS') + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) + isz = size(desc_a%ovrlap_elem,1) - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx,:) = xs(i,:) - end do + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx,:) = xs(i,:) + end do - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_movrl_restrr2 + return + end subroutine psi_movrl_restrr2 +end submodule psi_m_ovrl_restr_a_impl diff --git a/base/comm/internals/psi_movrl_save_a.f90 b/base/comm/internals/psi_movrl_save_a.f90 index 398ea24aa..d9d0e603b 100644 --- a/base/comm/internals/psi_movrl_save_a.f90 +++ b/base/comm/internals/psi_movrl_save_a.f90 @@ -34,108 +34,104 @@ ! These subroutines save the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap. ! -subroutine psi_movrl_saver1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_movrl_saver1 - - use psb_realloc_mod - - implicit none - - integer(psb_mpk_), intent(inout) :: x(:) - integer(psb_mpk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_movrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i) = x(idx) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_m_comm_a_mod) psi_m_ovrl_save_a_impl + use psb_base_mod +contains + module subroutine psi_movrl_saver1(x,xs,desc_a,info) + implicit none + + integer(psb_mpk_), intent(inout) :: x(:) + integer(psb_mpk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_movrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i) = x(idx) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_movrl_saver1 - - -subroutine psi_movrl_saver2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_movrl_saver2 - - use psb_realloc_mod - - implicit none - - integer(psb_mpk_), intent(inout) :: x(:,:) - integer(psb_mpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc - character(len=20) :: name, ch_err - - name='psi_movrl_saver2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = size(x,2) - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i,:) = x(idx,:) - end do - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_movrl_saver1 + + + module subroutine psi_movrl_saver2(x,xs,desc_a,info) + implicit none + + integer(psb_mpk_), intent(inout) :: x(:,:) + integer(psb_mpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc + character(len=20) :: name, ch_err + + name='psi_movrl_saver2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = size(x,2) + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i,:) = x(idx,:) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_movrl_saver2 + return + end subroutine psi_movrl_saver2 +end submodule psi_m_ovrl_save_a_impl diff --git a/base/comm/internals/psi_movrl_upd_a.f90 b/base/comm/internals/psi_movrl_upd_a.f90 index c4ffa64f0..f31d4cfa1 100644 --- a/base/comm/internals/psi_movrl_upd_a.f90 +++ b/base/comm/internals/psi_movrl_upd_a.f90 @@ -32,143 +32,143 @@ ! Subroutine: psi_movrl_update ! These subroutines update the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap, -! or for the application of Additive Schwarz preconditioners. +! or for the application of Additive Schwarz preconditioners. ! ! -subroutine psi_movrl_updr1(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_movrl_updr1 - - implicit none - - integer(psb_mpk_), intent(inout), target :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_movrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx) = mzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return +submodule (psi_m_comm_a_mod) psi_m_ovrl_upd_a_impl + use psb_base_mod +contains + module subroutine psi_movrl_updr1(x,desc_a,update,info) + implicit none + + integer(psb_mpk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_movrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx) = mzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_movrl_updr1 - -subroutine psi_movrl_updr2(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_movrl_updr2 - - implicit none - - integer(psb_mpk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_movrl_updr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx,:) = mzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_movrl_updr1 + + module subroutine psi_movrl_updr2(x,desc_a,update,info) + implicit none + + integer(psb_mpk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_movrl_updr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx,:) = mzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_movrl_updr2 + return + end subroutine psi_movrl_updr2 +end submodule psi_m_ovrl_upd_a_impl diff --git a/base/comm/internals/psi_mswapdata_a.F90 b/base/comm/internals/psi_mswapdata_a.F90 index 169dd46af..7a00f36c1 100644 --- a/base/comm/internals/psi_mswapdata_a.F90 +++ b/base/comm/internals/psi_mswapdata_a.F90 @@ -84,912 +84,899 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_mswapdatam(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_m_comm_a_mod) psi_m_swapdata_a_impl + use psb_base_mod +contains + module subroutine psi_mswapdatam(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_mswapdatam - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta - integer(psb_mpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +integer(psb_mpk_) :: y(:,:), beta +integer(psb_mpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_mswapdatam + end subroutine psi_mswapdatam -subroutine psi_mswapidxm(ctxt,icomm,flag,n,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + module subroutine psi_mswapidxm(ctxt,flag,n,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - use psi_mod, psb_protect_name => psi_mswapidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta - integer(psb_mpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +integer(psb_mpk_) :: y(:,:), beta +integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + +integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - ! prepare info for communications + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + end if - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_mpk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_mpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int4_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_mpk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_mpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_int4_swap_tag + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),n*nesd,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),n*nesd,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_int4_swap_tag + + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*)& + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_send) then - if (proc_to_comm < me) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_snd(ctxt,& & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_rcv(ctxt,& & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - end do + end if + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then + end if - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_int4_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag,icomm,iret) - end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_int4_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*)& - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_mswapidxm + end subroutine psi_mswapidxm + + ! + ! + ! Subroutine: psi_mswapdatav + ! Implements the data exchange among processes. Essentially this is doing + ! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - integer Choose overwrite or sum. + ! y(:) - integer The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - integer Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_mswapdatav(flag,beta,y,desc_a,work,info,data) -! -! -! Subroutine: psi_mswapdatav -! Implements the data exchange among processes. Essentially this is doing -! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:) - integer The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_mswapdatav(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_mswapdatav - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta - integer(psb_mpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_mswapdatav + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_mswapdataidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_mswapidxv(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_mswapidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_mswapdatav + + + ! + ! + ! Subroutine: psi_mswapdataidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_mswapidxv(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + + use psb_error_mod + use psb_desc_mod + use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta - integer(psb_mpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+nesd-1)) - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_mpk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_mpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + if (do_send) then - if (proc_to_comm < me) then - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+nesd-1)) + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_mpk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_mpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int4_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),nerv,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int4_swap_tag - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),nesd,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),nesd,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int4_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag,icomm,iret) + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_mswapidxv + end subroutine psi_mswapidxv +end submodule psi_m_swapdata_a_impl diff --git a/base/comm/internals/psi_mswaptran_a.F90 b/base/comm/internals/psi_mswaptran_a.F90 index f8346fe1d..07672d390 100644 --- a/base/comm/internals/psi_mswaptran_a.F90 +++ b/base/comm/internals/psi_mswaptran_a.F90 @@ -88,922 +88,909 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_mswaptranm(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_m_comm_a_mod) psi_m_swaptran_a_impl + use psb_base_mod +contains + module subroutine psi_mswaptranm(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_mswaptranm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta - integer(psb_mpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: y(:,:), beta + integer(psb_mpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + call psb_erractionrestore(err_act) return -end subroutine psi_mswaptranm -subroutine psi_mtranidxm(ctxt,icomm,flag,n,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_mtranidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_mswaptranm + + module subroutine psi_mtranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta - integer(psb_mpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: y(:,:), beta + integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if - ! prepare info for communications + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + if (do_send) then - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 end if - albf=.true. - end if - if (do_send) then - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) + ! Case SWAP_MPI + if (swap_mpi) then - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_mpk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_mpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - end if + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int4_swap_tag + call mpi_irecv(sndbuf(snd_pt),n*nesd,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int4_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - ! Case SWAP_MPI - if (swap_mpi) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_mpk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_mpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - - else if (swap_sync) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int4_swap_tag - if (proc_to_comm < me) then - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send',& + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag - call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_send) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_recv) then - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag,icomm,iret) - end if + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + end if - end do + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send',& - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_mtranidxm -! -! -! Subroutine: psi_mswaptranv -! Implements the data exchange among processes. This is similar to Xswapdata, but -! the list is read "in reverse", i.e. indices that are normally SENT are used -! for the RECEIVE part and vice-versa. This is the basic data exchange operation -! for doing the product of a sparse matrix by a vector. -! Essentially this is doing a variable all-to-all data exchange -! (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:) - integer The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_mswaptranv(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_mswaptranv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + end subroutine psi_mtranidxm + ! + ! + ! Subroutine: psi_mswaptranv + ! Implements the data exchange among processes. This is similar to Xswapdata, but + ! the list is read "in reverse", i.e. indices that are normally SENT are used + ! for the RECEIVE part and vice-versa. This is the basic data exchange operation + ! for doing the product of a sparse matrix by a vector. + ! Essentially this is doing a variable all-to-all data exchange + ! (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - integer Choose overwrite or sum. + ! y(:) - integer The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - integer Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_mswaptranv(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta - integer(psb_mpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_mswaptranv + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_mtranidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_mtranidxv(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 - use psi_mod, psb_protect_name => psi_mtranidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_mswaptranv + + + ! + ! + ! Subroutine: psi_mtranidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_mtranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta - integer(psb_mpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + + integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) - - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_mpk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_mpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) + + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - else if (swap_sync) then + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_mpk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_mpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int4_swap_tag + call mpi_irecv(sndbuf(snd_pt),nesd,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_int4_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),nerv,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag, icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),nerv,& + & psb_mpi_mpk_,prcid(i),& + & p2ptag, icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm < me) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_int4_swap_tag + + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_snd(ctxt,& & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_rcv(ctxt,& & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag - call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + end if - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag, icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_mpk_,prcid(i),& - & p2ptag, icomm,iret) - end if + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag - - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_mtranidxv + end subroutine psi_mtranidxv +end submodule psi_m_swaptran_a_impl diff --git a/base/comm/internals/psi_sovrl_restr.f90 b/base/comm/internals/psi_sovrl_restr.f90 index 86361fba3..1ce96355b 100644 --- a/base/comm/internals/psi_sovrl_restr.f90 +++ b/base/comm/internals/psi_sovrl_restr.f90 @@ -35,90 +35,90 @@ ! ! ! -subroutine psi_sovrl_restr_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_sovrl_restr_vect - use psb_s_base_vect_mod - - implicit none - - class(psb_s_base_vect_type) :: x - real(psb_spk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_sovrl_restr_vect' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,szero) - - call psb_erractionrestore(err_act) - return +submodule (psi_s_comm_v_mod) psi_s_ovrl_restr_v_impl + use psb_base_mod +contains + module subroutine psi_sovrl_restr_vect(x,xs,desc_a,info) + + implicit none + + class(psb_s_base_vect_type) :: x + real(psb_spk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_sovrl_restr_vect' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,szero) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_restr_vect + return + end subroutine psi_sovrl_restr_vect -subroutine psi_sovrl_restr_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_sovrl_restr_multivect - use psb_s_base_vect_mod + module subroutine psi_sovrl_restr_multivect(x,xs,desc_a,info) - implicit none + implicit none - class(psb_s_base_multivect_type) :: x - real(psb_spk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: x + real(psb_spk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz,nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz,nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err - name='psi_sovrl_restr_mv' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_sovrl_restr_mv' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,szero) + isz = size(desc_a%ovrlap_elem,1) + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,szero) - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_restr_multivect + return + end subroutine psi_sovrl_restr_multivect +end submodule psi_s_ovrl_restr_v_impl diff --git a/base/comm/internals/psi_sovrl_restr_a.f90 b/base/comm/internals/psi_sovrl_restr_a.f90 index c12951871..2e1d53ae7 100644 --- a/base/comm/internals/psi_sovrl_restr_a.f90 +++ b/base/comm/internals/psi_sovrl_restr_a.f90 @@ -34,98 +34,100 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_sovrl_restrr1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_sovrl_restrr1 - - implicit none - - real(psb_spk_), intent(inout) :: x(:) - real(psb_spk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_sovrl_restrr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx) = xs(i) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_s_comm_a_mod) psi_s_ovrl_restr_a_impl + use psb_base_mod +contains + module subroutine psi_sovrl_restrr1(x,xs,desc_a,info) + + implicit none + + real(psb_spk_), intent(inout) :: x(:) + real(psb_spk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_sovrl_restrr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx) = xs(i) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_restrr1 + return + end subroutine psi_sovrl_restrr1 -subroutine psi_sovrl_restrr2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_sovrl_restrr2 + module subroutine psi_sovrl_restrr2(x,xs,desc_a,info) - implicit none + implicit none - real(psb_spk_), intent(inout) :: x(:,:) - real(psb_spk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_spk_), intent(inout) :: x(:,:) + real(psb_spk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err - name='psi_sovrl_restrr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_sovrl_restrr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - if (size(x,2) /= size(xs,2)) then - info = psb_err_internal_error_ - call psb_errpush(info,name, a_err='Mismacth columns X vs XS') - goto 9999 - endif + if (size(x,2) /= size(xs,2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name, a_err='Mismacth columns X vs XS') + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) + isz = size(desc_a%ovrlap_elem,1) - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx,:) = xs(i,:) - end do + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx,:) = xs(i,:) + end do - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_restrr2 + return + end subroutine psi_sovrl_restrr2 +end submodule psi_s_ovrl_restr_a_impl diff --git a/base/comm/internals/psi_sovrl_save.f90 b/base/comm/internals/psi_sovrl_save.f90 index cb058fe4b..cd259f721 100644 --- a/base/comm/internals/psi_sovrl_save.f90 +++ b/base/comm/internals/psi_sovrl_save.f90 @@ -34,103 +34,101 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_sovrl_save_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_sovrl_save_vect - use psb_realloc_mod - use psb_s_base_vect_mod - - implicit none - - class(psb_s_base_vect_type) :: x - real(psb_spk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return +submodule (psi_s_comm_v_mod) psi_s_ovrl_save_v_impl + use psb_base_mod +contains + module subroutine psi_sovrl_save_vect(x,xs,desc_a,info) + + implicit none + + class(psb_s_base_vect_type) :: x + real(psb_spk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_save_vect - -subroutine psi_sovrl_save_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_sovrl_save_multivect - use psb_realloc_mod - use psb_s_base_vect_mod - - implicit none - - class(psb_s_base_multivect_type) :: x - real(psb_spk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_sovrl_save_vect + + module subroutine psi_sovrl_save_multivect(x,xs,desc_a,info) + + implicit none + + class(psb_s_base_multivect_type) :: x + real(psb_spk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_save_multivect + return + end subroutine psi_sovrl_save_multivect +end submodule psi_s_ovrl_save_v_impl diff --git a/base/comm/internals/psi_sovrl_save_a.f90 b/base/comm/internals/psi_sovrl_save_a.f90 index e2b575413..aa3468e02 100644 --- a/base/comm/internals/psi_sovrl_save_a.f90 +++ b/base/comm/internals/psi_sovrl_save_a.f90 @@ -34,108 +34,104 @@ ! These subroutines save the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap. ! -subroutine psi_sovrl_saver1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_sovrl_saver1 - - use psb_realloc_mod - - implicit none - - real(psb_spk_), intent(inout) :: x(:) - real(psb_spk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_sovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i) = x(idx) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_s_comm_a_mod) psi_s_ovrl_save_a_impl + use psb_base_mod +contains + module subroutine psi_sovrl_saver1(x,xs,desc_a,info) + implicit none + + real(psb_spk_), intent(inout) :: x(:) + real(psb_spk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_sovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i) = x(idx) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_saver1 - - -subroutine psi_sovrl_saver2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_sovrl_saver2 - - use psb_realloc_mod - - implicit none - - real(psb_spk_), intent(inout) :: x(:,:) - real(psb_spk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc - character(len=20) :: name, ch_err - - name='psi_sovrl_saver2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = size(x,2) - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i,:) = x(idx,:) - end do - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_sovrl_saver1 + + + module subroutine psi_sovrl_saver2(x,xs,desc_a,info) + implicit none + + real(psb_spk_), intent(inout) :: x(:,:) + real(psb_spk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc + character(len=20) :: name, ch_err + + name='psi_sovrl_saver2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = size(x,2) + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i,:) = x(idx,:) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_saver2 + return + end subroutine psi_sovrl_saver2 +end submodule psi_s_ovrl_save_a_impl diff --git a/base/comm/internals/psi_sovrl_upd.f90 b/base/comm/internals/psi_sovrl_upd.f90 index ba3a9f41a..2ee13aa68 100644 --- a/base/comm/internals/psi_sovrl_upd.f90 +++ b/base/comm/internals/psi_sovrl_upd.f90 @@ -36,169 +36,167 @@ ! ! ! -subroutine psi_sovrl_upd_vect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_sovrl_upd_vect - use psb_realloc_mod - use psb_s_base_vect_mod - - implicit none - - class(psb_s_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - real(psb_spk_), allocatable :: xs(:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nx, ndm - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_sovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - call psb_realloc(nx,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i) = szero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) +submodule (psi_s_comm_v_mod) psi_s_ovrl_upd_v_impl + use psb_base_mod +contains + module subroutine psi_sovrl_upd_vect(x,desc_a,update,info) + + implicit none + + class(psb_s_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + real(psb_spk_), allocatable :: xs(:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nx, ndm + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_sovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,szero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + call psb_realloc(nx,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i) = szero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,szero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_upd_vect - -subroutine psi_sovrl_upd_multivect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_sovrl_upd_multivect - use psb_realloc_mod - use psb_s_base_vect_mod - - implicit none - - class(psb_s_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - real(psb_spk_), allocatable :: xs(:,:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, ndm, nx, nc - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_sovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(nx,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i,:) = szero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) + return + end subroutine psi_sovrl_upd_vect + + module subroutine psi_sovrl_upd_multivect(x,desc_a,update,info) + + implicit none + + class(psb_s_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + real(psb_spk_), allocatable :: xs(:,:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, ndm, nx, nc + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_sovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,szero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(nx,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i,:) = szero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,szero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_upd_multivect + return + end subroutine psi_sovrl_upd_multivect +end submodule psi_s_ovrl_upd_v_impl diff --git a/base/comm/internals/psi_sovrl_upd_a.f90 b/base/comm/internals/psi_sovrl_upd_a.f90 index 4387492d7..64d856318 100644 --- a/base/comm/internals/psi_sovrl_upd_a.f90 +++ b/base/comm/internals/psi_sovrl_upd_a.f90 @@ -32,143 +32,143 @@ ! Subroutine: psi_sovrl_update ! These subroutines update the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap, -! or for the application of Additive Schwarz preconditioners. +! or for the application of Additive Schwarz preconditioners. ! ! -subroutine psi_sovrl_updr1(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_sovrl_updr1 - - implicit none - - real(psb_spk_), intent(inout), target :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_sovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx) = szero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return +submodule (psi_s_comm_a_mod) psi_s_ovrl_upd_a_impl + use psb_base_mod +contains + module subroutine psi_sovrl_updr1(x,desc_a,update,info) + implicit none + + real(psb_spk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_sovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx) = szero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_updr1 - -subroutine psi_sovrl_updr2(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_sovrl_updr2 - - implicit none - - real(psb_spk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_sovrl_updr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx,:) = szero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_sovrl_updr1 + + module subroutine psi_sovrl_updr2(x,desc_a,update,info) + implicit none + + real(psb_spk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_sovrl_updr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx,:) = szero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sovrl_updr2 + return + end subroutine psi_sovrl_updr2 +end submodule psi_s_ovrl_upd_a_impl diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index 5d1180d3f..bd3e6992c 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -89,676 +89,659 @@ ! ! ! -subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_s_comm_v_mod) psi_s_swapdata_impl + use psb_base_mod +contains + subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_sswapdata_vect - use psb_s_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta - real(psb_spk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type) :: y + real(psb_spk_) :: beta + real(psb_spk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_sswapdata_vect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_sswapdata_vect + + + ! + ! + ! Subroutine: psi_sswap_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_sswap_vidx_vect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_sswap_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_sswap_vidx_vect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_sswap_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_s_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta - real(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type) :: y + real(psb_spk_) :: beta + real(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti, n + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_real_swap_tag + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + idx_pt = snd_pt + call y%gth(idx_pt,nesd,idx) + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_real_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sswap_vidx_vect - -! -! -! Subroutine: psi_sswapdata_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_sswapdata_multivect - use psb_s_base_multivect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_sswap_vidx_vect + + ! + ! + ! Subroutine: psi_sswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta - real(psb_spk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: y + real(psb_spk_) :: beta + real(psb_spk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_sswapdata_multivect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_sswapdata_multivect + + + ! + ! + ! Subroutine: psi_sswap_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_sswap_vidx_multivect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_sswap_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_sswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_sswap_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_s_base_multivect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta - real(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: y + real(psb_spk_) :: beta + real(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_real_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_real_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sswap_vidx_multivect + return + end subroutine psi_sswap_vidx_multivect +end submodule psi_s_swapdata_impl diff --git a/base/comm/internals/psi_sswapdata_a.F90 b/base/comm/internals/psi_sswapdata_a.F90 index c85062b7f..23da82246 100644 --- a/base/comm/internals/psi_sswapdata_a.F90 +++ b/base/comm/internals/psi_sswapdata_a.F90 @@ -84,912 +84,899 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_s_comm_a_mod) psi_s_swapdata_a_impl + use psb_base_mod +contains + module subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_sswapdatam - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +real(psb_spk_) :: y(:,:), beta +real(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_sswapdatam + end subroutine psi_sswapdatam -subroutine psi_sswapidxm(ctxt,icomm,flag,n,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + module subroutine psi_sswapidxm(ctxt,flag,n,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - use psi_mod, psb_protect_name => psi_sswapidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta - real(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +real(psb_spk_) :: y(:,:), beta +real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + +real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - ! prepare info for communications + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + end if - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_r_spk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_r_spk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_real_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_r_spk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_r_spk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_real_swap_tag + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),n*nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),n*nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_real_swap_tag + + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*)& + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_send) then - if (proc_to_comm < me) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_snd(ctxt,& & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_rcv(ctxt,& & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - end do + end if + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then + end if - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_real_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,iret) - end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_real_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*)& - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_sswapidxm + end subroutine psi_sswapidxm + + ! + ! + ! Subroutine: psi_sswapdatav + ! Implements the data exchange among processes. Essentially this is doing + ! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - real Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_sswapdatav(flag,beta,y,desc_a,work,info,data) -! -! -! Subroutine: psi_sswapdatav -! Implements the data exchange among processes. Essentially this is doing -! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - real Choose overwrite or sum. -! y(:) - real The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - real Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_sswapdatav(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_sswapdatav - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: y(:), beta + real(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_sswapdatav + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_sswapdataidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_sswapidxv(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_sswapidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_sswapdatav + + + ! + ! + ! Subroutine: psi_sswapdataidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_sswapidxv(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + + use psb_error_mod + use psb_desc_mod + use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta - real(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: y(:), beta + real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+nesd-1)) - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_r_spk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_r_spk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + if (do_send) then - if (proc_to_comm < me) then - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+nesd-1)) + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_r_spk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_r_spk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_real_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_real_swap_tag - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_real_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,iret) + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_sswapidxv + end subroutine psi_sswapidxv +end submodule psi_s_swapdata_a_impl diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index 24c759786..afb208e89 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -91,418 +91,406 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_sswaptran_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_s_comm_v_mod) psi_s_swaptran_impl + use psb_base_mod +contains + module subroutine psi_sswaptran_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_sswaptran_vect - use psb_s_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type) :: y + real(psb_spk_) :: beta + real(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_sswaptran_vect + end subroutine psi_sswaptran_vect + + ! + ! + ! Subroutine: psi_stran_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_stran_vidx_vect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_stran_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_stran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_stran_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_s_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta - real(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - call mpi_irecv(y%combuf(snd_pt),nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) - - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type) :: y + real(psb_spk_) :: beta + real(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + call mpi_irecv(y%combuf(snd_pt),nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + idx_pt = rcv_pt + call y%gth(idx_pt,nerv,idx) + + pnti = pnti + nerv + nesd + 3 + end do - pnti = pnti + nerv + nesd + 3 - end do - end if + ! + ! Then wait + ! + call y%device_wait() - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... + if (debug) write(*,*) me,' isend' ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+nesd-1) + call y%sct(snd_pt,nesd,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return + return -end subroutine psi_stran_vidx_vect + end subroutine psi_stran_vidx_vect -! -! -! -! -! Subroutine: psi_sswaptran_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,work,info,data) + ! + ! + ! + ! + ! Subroutine: psi_sswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_sswaptran_multivect - use psb_s_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: y + real(psb_spk_) :: beta + real(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) @@ -510,273 +498,266 @@ subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,work,info,data) end subroutine psi_sswaptran_multivect -! -! -! Subroutine: psi_stran_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_stran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_stran_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_s_base_multivect_mod + ! + ! + ! Subroutine: psi_stran_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_stran_vidx_multivect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta - real(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: y + real(psb_spk_) :: beta + real(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt + call mpi_irecv(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call y%gth(idx_pt,rcv_pt,nerv,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt - call mpi_irecv(y%combuf(snd_pt),n*nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_real_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if (debug) write(*,*) me,' done' - end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+n*nesd-1) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - call psb_erractionrestore(err_act) - return + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null -9999 call psb_error_handler(ctxt,err_act) + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' + end if - return -end subroutine psi_stran_vidx_multivect + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_stran_vidx_multivect +end submodule psi_s_swaptran_impl diff --git a/base/comm/internals/psi_sswaptran_a.F90 b/base/comm/internals/psi_sswaptran_a.F90 index 749d1f012..4987450e9 100644 --- a/base/comm/internals/psi_sswaptran_a.F90 +++ b/base/comm/internals/psi_sswaptran_a.F90 @@ -88,922 +88,909 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_sswaptranm(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_s_comm_a_mod) psi_s_swaptran_a_impl + use psb_base_mod +contains + module subroutine psi_sswaptranm(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_sswaptranm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: y(:,:), beta + real(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + call psb_erractionrestore(err_act) return -end subroutine psi_sswaptranm -subroutine psi_stranidxm(ctxt,icomm,flag,n,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_stranidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_sswaptranm + + module subroutine psi_stranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta - real(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: y(:,:), beta + real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if - ! prepare info for communications + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + if (do_send) then - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 end if - albf=.true. - end if - if (do_send) then - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) + ! Case SWAP_MPI + if (swap_mpi) then - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_r_spk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_r_spk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - end if + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_real_swap_tag + call mpi_irecv(sndbuf(snd_pt),n*nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_real_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - ! Case SWAP_MPI - if (swap_mpi) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_r_spk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_r_spk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - - else if (swap_sync) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_real_swap_tag - if (proc_to_comm < me) then - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send',& + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag - call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_send) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_recv) then - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,iret) - end if + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + end if - end do + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send',& - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_stranidxm -! -! -! Subroutine: psi_sswaptranv -! Implements the data exchange among processes. This is similar to Xswapdata, but -! the list is read "in reverse", i.e. indices that are normally SENT are used -! for the RECEIVE part and vice-versa. This is the basic data exchange operation -! for doing the product of a sparse matrix by a vector. -! Essentially this is doing a variable all-to-all data exchange -! (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - real Choose overwrite or sum. -! y(:) - real The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - real Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_sswaptranv(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_sswaptranv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + end subroutine psi_stranidxm + ! + ! + ! Subroutine: psi_sswaptranv + ! Implements the data exchange among processes. This is similar to Xswapdata, but + ! the list is read "in reverse", i.e. indices that are normally SENT are used + ! for the RECEIVE part and vice-versa. This is the basic data exchange operation + ! for doing the product of a sparse matrix by a vector. + ! Essentially this is doing a variable all-to-all data exchange + ! (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - real Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_sswaptranv(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: y(:), beta + real(psb_spk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_sswaptranv + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_stranidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_stranidxv(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 - use psi_mod, psb_protect_name => psi_stranidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_sswaptranv + + + ! + ! + ! Subroutine: psi_stranidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_stranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta - real(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: y(:), beta + real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + + real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) - - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_r_spk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_r_spk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) + + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - else if (swap_sync) then + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_r_spk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_r_spk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_real_swap_tag + call mpi_irecv(sndbuf(snd_pt),nesd,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_real_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag, icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),nerv,& + & psb_mpi_r_spk_,prcid(i),& + & p2ptag, icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm < me) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_real_swap_tag + + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_snd(ctxt,& & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_rcv(ctxt,& & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag - call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + end if - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,iret) - end if + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag - - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_stranidxv + end subroutine psi_stranidxv +end submodule psi_s_swaptran_a_impl diff --git a/base/comm/internals/psi_zovrl_restr.f90 b/base/comm/internals/psi_zovrl_restr.f90 index 7fe94aa63..668d1d495 100644 --- a/base/comm/internals/psi_zovrl_restr.f90 +++ b/base/comm/internals/psi_zovrl_restr.f90 @@ -35,90 +35,90 @@ ! ! ! -subroutine psi_zovrl_restr_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_zovrl_restr_vect - use psb_z_base_vect_mod - - implicit none - - class(psb_z_base_vect_type) :: x - complex(psb_dpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_zovrl_restr_vect' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,zzero) - - call psb_erractionrestore(err_act) - return +submodule (psi_z_comm_v_mod) psi_z_ovrl_restr_v_impl + use psb_base_mod +contains + module subroutine psi_zovrl_restr_vect(x,xs,desc_a,info) + + implicit none + + class(psb_z_base_vect_type) :: x + complex(psb_dpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_zovrl_restr_vect' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,zzero) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_restr_vect + return + end subroutine psi_zovrl_restr_vect -subroutine psi_zovrl_restr_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_zovrl_restr_multivect - use psb_z_base_vect_mod + module subroutine psi_zovrl_restr_multivect(x,xs,desc_a,info) - implicit none + implicit none - class(psb_z_base_multivect_type) :: x - complex(psb_dpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type) :: x + complex(psb_dpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz,nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz,nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err - name='psi_zovrl_restr_mv' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_zovrl_restr_mv' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) - call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,zzero) + isz = size(desc_a%ovrlap_elem,1) + call x%sct(isz,desc_a%ovrlap_elem(:,1),xs,zzero) - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_restr_multivect + return + end subroutine psi_zovrl_restr_multivect +end submodule psi_z_ovrl_restr_v_impl diff --git a/base/comm/internals/psi_zovrl_restr_a.f90 b/base/comm/internals/psi_zovrl_restr_a.f90 index a823b73d4..a83470083 100644 --- a/base/comm/internals/psi_zovrl_restr_a.f90 +++ b/base/comm/internals/psi_zovrl_restr_a.f90 @@ -34,98 +34,100 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_zovrl_restrr1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_zovrl_restrr1 - - implicit none - - complex(psb_dpk_), intent(inout) :: x(:) - complex(psb_dpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_zovrl_restrr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx) = xs(i) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_z_comm_a_mod) psi_z_ovrl_restr_a_impl + use psb_base_mod +contains + module subroutine psi_zovrl_restrr1(x,xs,desc_a,info) + + implicit none + + complex(psb_dpk_), intent(inout) :: x(:) + complex(psb_dpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_zovrl_restrr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx) = xs(i) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_restrr1 + return + end subroutine psi_zovrl_restrr1 -subroutine psi_zovrl_restrr2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_zovrl_restrr2 + module subroutine psi_zovrl_restrr2(x,xs,desc_a,info) - implicit none + implicit none - complex(psb_dpk_), intent(inout) :: x(:,:) - complex(psb_dpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_), intent(inout) :: x(:,:) + complex(psb_dpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err - name='psi_zovrl_restrr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + name='psi_zovrl_restrr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - if (size(x,2) /= size(xs,2)) then - info = psb_err_internal_error_ - call psb_errpush(info,name, a_err='Mismacth columns X vs XS') - goto 9999 - endif + if (size(x,2) /= size(xs,2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name, a_err='Mismacth columns X vs XS') + goto 9999 + endif - isz = size(desc_a%ovrlap_elem,1) + isz = size(desc_a%ovrlap_elem,1) - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - x(idx,:) = xs(i,:) - end do + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + x(idx,:) = xs(i,:) + end do - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_restrr2 + return + end subroutine psi_zovrl_restrr2 +end submodule psi_z_ovrl_restr_a_impl diff --git a/base/comm/internals/psi_zovrl_save.f90 b/base/comm/internals/psi_zovrl_save.f90 index 841dec1d3..24f4011a0 100644 --- a/base/comm/internals/psi_zovrl_save.f90 +++ b/base/comm/internals/psi_zovrl_save.f90 @@ -34,103 +34,101 @@ ! for the transpose matrix-vector product when there is a nonempty overlap. ! ! -subroutine psi_zovrl_save_vect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_zovrl_save_vect - use psb_realloc_mod - use psb_z_base_vect_mod - - implicit none - - class(psb_z_base_vect_type) :: x - complex(psb_dpk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return +submodule (psi_z_comm_v_mod) psi_z_ovrl_save_v_impl + use psb_base_mod +contains + module subroutine psi_zovrl_save_vect(x,xs,desc_a,info) + + implicit none + + class(psb_z_base_vect_type) :: x + complex(psb_dpk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_save_vect - -subroutine psi_zovrl_save_multivect(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_zovrl_save_multivect - use psb_realloc_mod - use psb_z_base_vect_mod - - implicit none - - class(psb_z_base_multivect_type) :: x - complex(psb_dpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nc - integer(psb_ipk_) :: err_act, i, idx - character(len=20) :: name, ch_err - - name='psi_dovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_zovrl_save_vect + + module subroutine psi_zovrl_save_multivect(x,xs,desc_a,info) + + implicit none + + class(psb_z_base_multivect_type) :: x + complex(psb_dpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nc + integer(psb_ipk_) :: err_act, i, idx + character(len=20) :: name, ch_err + + name='psi_dovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + call x%gth(isz,desc_a%ovrlap_elem(:,1),xs) + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_save_multivect + return + end subroutine psi_zovrl_save_multivect +end submodule psi_z_ovrl_save_v_impl diff --git a/base/comm/internals/psi_zovrl_save_a.f90 b/base/comm/internals/psi_zovrl_save_a.f90 index f2c09ee81..c5cb81f75 100644 --- a/base/comm/internals/psi_zovrl_save_a.f90 +++ b/base/comm/internals/psi_zovrl_save_a.f90 @@ -34,108 +34,104 @@ ! These subroutines save the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap. ! -subroutine psi_zovrl_saver1(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_zovrl_saver1 - - use psb_realloc_mod - - implicit none - - complex(psb_dpk_), intent(inout) :: x(:) - complex(psb_dpk_), allocatable :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz - character(len=20) :: name, ch_err - - name='psi_zovrl_saver1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - call psb_realloc(isz,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i) = x(idx) - end do - - call psb_erractionrestore(err_act) - return +submodule (psi_z_comm_a_mod) psi_z_ovrl_save_a_impl + use psb_base_mod +contains + module subroutine psi_zovrl_saver1(x,xs,desc_a,info) + implicit none + + complex(psb_dpk_), intent(inout) :: x(:) + complex(psb_dpk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz + character(len=20) :: name, ch_err + + name='psi_zovrl_saver1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + call psb_realloc(isz,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i) = x(idx) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_saver1 - - -subroutine psi_zovrl_saver2(x,xs,desc_a,info) - use psi_mod, psi_protect_name => psi_zovrl_saver2 - - use psb_realloc_mod - - implicit none - - complex(psb_dpk_), intent(inout) :: x(:,:) - complex(psb_dpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc - character(len=20) :: name, ch_err - - name='psi_zovrl_saver2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - isz = size(desc_a%ovrlap_elem,1) - nc = size(x,2) - call psb_realloc(isz,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - do i=1, isz - idx = desc_a%ovrlap_elem(i,1) - xs(i,:) = x(idx,:) - end do - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_zovrl_saver1 + + + module subroutine psi_zovrl_saver2(x,xs,desc_a,info) + implicit none + + complex(psb_dpk_), intent(inout) :: x(:,:) + complex(psb_dpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, isz, nc + character(len=20) :: name, ch_err + + name='psi_zovrl_saver2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + isz = size(desc_a%ovrlap_elem,1) + nc = size(x,2) + call psb_realloc(isz,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + do i=1, isz + idx = desc_a%ovrlap_elem(i,1) + xs(i,:) = x(idx,:) + end do + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_saver2 + return + end subroutine psi_zovrl_saver2 +end submodule psi_z_ovrl_save_a_impl diff --git a/base/comm/internals/psi_zovrl_upd.f90 b/base/comm/internals/psi_zovrl_upd.f90 index 7a3bccf2f..b6a23f09e 100644 --- a/base/comm/internals/psi_zovrl_upd.f90 +++ b/base/comm/internals/psi_zovrl_upd.f90 @@ -36,169 +36,167 @@ ! ! ! -subroutine psi_zovrl_upd_vect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_zovrl_upd_vect - use psb_realloc_mod - use psb_z_base_vect_mod - - implicit none - - class(psb_z_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - complex(psb_dpk_), allocatable :: xs(:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, nx, ndm - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_zovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - call psb_realloc(nx,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i) = xs(i)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i) = zzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) +submodule (psi_z_comm_v_mod) psi_z_ovrl_upd_v_impl + use psb_base_mod +contains + module subroutine psi_zovrl_upd_vect(x,desc_a,update,info) + + implicit none + + class(psb_z_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + complex(psb_dpk_), allocatable :: xs(:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, nx, ndm + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_zovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,zzero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + call psb_realloc(nx,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i) = xs(i)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i) = zzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,zzero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_upd_vect - -subroutine psi_zovrl_upd_multivect(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_zovrl_upd_multivect - use psb_realloc_mod - use psb_z_base_vect_mod - - implicit none - - class(psb_z_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - complex(psb_dpk_), allocatable :: xs(:,:) - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: np, me, isz, ndm, nx, nc - integer(psb_ipk_) :: err_act, i, idx - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - - name='psi_zovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - nx = size(desc_a%ovrlap_elem,1) - nc = x%get_ncols() - call psb_realloc(nx,nc,xs,info) - if (info /= psb_success_) then - info = psb_err_alloc_Dealloc_ - call psb_errpush(info,name) - goto 9999 - end if - - if (update /= psb_sum_) then - call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) - ! switch on update type - - select case (update) - case(psb_square_root_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,nx - ndm = desc_a%ovrlap_elem(i,2) - xs(i,:) = xs(i,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,nx - if (me /= desc_a%ovrlap_elem(i,3))& - & xs(i,:) = zzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) + return + end subroutine psi_zovrl_upd_vect + + module subroutine psi_zovrl_upd_multivect(x,desc_a,update,info) + + implicit none + + class(psb_z_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + complex(psb_dpk_), allocatable :: xs(:,:) + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me, isz, ndm, nx, nc + integer(psb_ipk_) :: err_act, i, idx + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + + name='psi_zovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end select - call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,zzero) - end if - - call psb_erractionrestore(err_act) - return + endif + nx = size(desc_a%ovrlap_elem,1) + nc = x%get_ncols() + call psb_realloc(nx,nc,xs,info) + if (info /= psb_success_) then + info = psb_err_alloc_Dealloc_ + call psb_errpush(info,name) + goto 9999 + end if + + if (update /= psb_sum_) then + call x%gth(nx,desc_a%ovrlap_elem(:,1),xs) + ! switch on update type + + select case (update) + case(psb_square_root_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,nx + ndm = desc_a%ovrlap_elem(i,2) + xs(i,:) = xs(i,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,nx + if (me /= desc_a%ovrlap_elem(i,3))& + & xs(i,:) = zzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + call x%sct(nx,desc_a%ovrlap_elem(:,1),xs,zzero) + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_upd_multivect + return + end subroutine psi_zovrl_upd_multivect +end submodule psi_z_ovrl_upd_v_impl diff --git a/base/comm/internals/psi_zovrl_upd_a.f90 b/base/comm/internals/psi_zovrl_upd_a.f90 index 658bd3172..7bfd56b16 100644 --- a/base/comm/internals/psi_zovrl_upd_a.f90 +++ b/base/comm/internals/psi_zovrl_upd_a.f90 @@ -32,143 +32,143 @@ ! Subroutine: psi_zovrl_update ! These subroutines update the overlap region of a vector; they are used ! for the transpose matrix-vector product when there is a nonempty overlap, -! or for the application of Additive Schwarz preconditioners. +! or for the application of Additive Schwarz preconditioners. ! ! -subroutine psi_zovrl_updr1(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_zovrl_updr1 - - implicit none - - complex(psb_dpk_), intent(inout), target :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_zovrl_updr1' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx) = x(idx)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx) = zzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return +submodule (psi_z_comm_a_mod) psi_z_ovrl_upd_a_impl + use psb_base_mod +contains + module subroutine psi_zovrl_updr1(x,desc_a,update,info) + implicit none + + complex(psb_dpk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_zovrl_updr1' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx) = x(idx)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx) = zzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_updr1 - -subroutine psi_zovrl_updr2(x,desc_a,update,info) - use psi_mod, psi_protect_name => psi_zovrl_updr2 - - implicit none - - complex(psb_dpk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, i, idx, ndm - integer(psb_ipk_) :: ierr(5) - character(len=20) :: name, ch_err - - name='psi_zovrl_updr2' - info = psb_success_ - call psb_erractionsave(err_act) - if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 - end if - ctxt = desc_a%get_context() - call psb_info(ctxt, me, np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - ! switch on update type - select case (update) - case(psb_square_root_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/sqrt(real(ndm)) - end do - case(psb_avg_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - ndm = desc_a%ovrlap_elem(i,2) - x(idx,:) = x(idx,:)/real(ndm) - end do - case(psb_setzero_) - do i=1,size(desc_a%ovrlap_elem,1) - idx = desc_a%ovrlap_elem(i,1) - if (me /= desc_a%ovrlap_elem(i,3))& - & x(idx,:) = zzero - end do - case(psb_sum_) - ! do nothing - - case default - ! wrong value for choice argument - info = psb_err_iarg_invalid_value_ - ierr(1) = 3; ierr(2)=update; - call psb_errpush(info,name,i_err=ierr) - goto 9999 - end select - - call psb_erractionrestore(err_act) - return + return + end subroutine psi_zovrl_updr1 + + module subroutine psi_zovrl_updr2(x,desc_a,update,info) + implicit none + + complex(psb_dpk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, i, idx, ndm + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name, ch_err + + name='psi_zovrl_updr2' + info = psb_success_ + call psb_erractionsave(err_act) + if (psb_errstatus_fatal()) then + info = psb_err_internal_error_ ; goto 9999 + end if + ctxt = desc_a%get_context() + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + ! switch on update type + select case (update) + case(psb_square_root_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/sqrt(real(ndm)) + end do + case(psb_avg_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + ndm = desc_a%ovrlap_elem(i,2) + x(idx,:) = x(idx,:)/real(ndm) + end do + case(psb_setzero_) + do i=1,size(desc_a%ovrlap_elem,1) + idx = desc_a%ovrlap_elem(i,1) + if (me /= desc_a%ovrlap_elem(i,3))& + & x(idx,:) = zzero + end do + case(psb_sum_) + ! do nothing + + case default + ! wrong value for choice argument + info = psb_err_iarg_invalid_value_ + ierr(1) = 3; ierr(2)=update; + call psb_errpush(info,name,i_err=ierr) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zovrl_updr2 + return + end subroutine psi_zovrl_updr2 +end submodule psi_z_ovrl_upd_a_impl diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index 3716fba6d..93fc1edfb 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -89,676 +89,659 @@ ! ! ! -subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_z_comm_v_mod) psi_z_swapdata_impl + use psb_base_mod +contains + subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_zswapdata_vect - use psb_z_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type) :: y + complex(psb_dpk_) :: beta + complex(psb_dpk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_zswapdata_vect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_zswapdata_vect + + + ! + ! + ! Subroutine: psi_zswap_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_zswap_vidx_vect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_zswap_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_zswap_vidx_vect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_zswap_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_z_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type) :: y + complex(psb_dpk_) :: beta + complex(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti, n + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_dcomplex_swap_tag + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + idx_pt = snd_pt + call y%gth(idx_pt,nesd,idx) + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_dcomplex_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zswap_vidx_vect - -! -! -! Subroutine: psi_zswapdata_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_zswapdata_multivect - use psb_z_base_multivect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_zswap_vidx_vect + + ! + ! + ! Subroutine: psi_zswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type) :: y + complex(psb_dpk_) :: beta + complex(psb_dpk_), target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) return -end subroutine psi_zswapdata_multivect +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_zswapdata_multivect + + + ! + ! + ! Subroutine: psi_zswap_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_zswap_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_zswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_zswap_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_z_base_multivect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type) :: y + complex(psb_dpk_) :: beta + complex(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_dcomplex_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_dcomplex_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_zswap_vidx_multivect + return + end subroutine psi_zswap_vidx_multivect +end submodule psi_z_swapdata_impl diff --git a/base/comm/internals/psi_zswapdata_a.F90 b/base/comm/internals/psi_zswapdata_a.F90 index a4db9bb80..471eecd55 100644 --- a/base/comm/internals/psi_zswapdata_a.F90 +++ b/base/comm/internals/psi_zswapdata_a.F90 @@ -84,912 +84,899 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_z_comm_a_mod) psi_z_swapdata_a_impl + use psb_base_mod +contains + module subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_zswapdatam - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +complex(psb_dpk_) :: y(:,:), beta +complex(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swapdata(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_zswapdatam + end subroutine psi_zswapdatam -subroutine psi_zswapidxm(ctxt,icomm,flag,n,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + module subroutine psi_zswapidxm(ctxt,flag,n,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - use psi_mod, psb_protect_name => psi_zswapidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta - complex(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info +complex(psb_dpk_) :: y(:,:), beta +complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + +complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_data' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_data' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - ! prepare info for communications + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + end if - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_c_dpk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_c_dpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_dcomplex_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+n*nesd-1)) - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_c_dpk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_c_dpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_dcomplex_swap_tag + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),n*nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),n*nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + p2ptag = psb_dcomplex_swap_tag + + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*)& + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) + end if + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_send) then - if (proc_to_comm < me) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_snd(ctxt,& & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_rcv(ctxt,& & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - end do + end if + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then + end if - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_dcomplex_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,iret) - end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - - p2ptag = psb_dcomplex_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*)& - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+n*nerv-1) = sndbuf(snd_pt:snd_pt+n*nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_zswapidxm + end subroutine psi_zswapidxm + + ! + ! + ! Subroutine: psi_zswapdatav + ! Implements the data exchange among processes. Essentially this is doing + ! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - complex Choose overwrite or sum. + ! y(:) - complex The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - complex Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_zswapdatav(flag,beta,y,desc_a,work,info,data) -! -! -! Subroutine: psi_zswapdatav -! Implements the data exchange among processes. Essentially this is doing -! a variable all-to-all data exchange (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y(:) - complex The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_zswapdatav(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_zswapdatav - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swapdata(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, totxch, data_, err_act + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_zswapdatav + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_zswapdataidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_zswapidxv(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_zswapidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_zswapdatav + + + ! + ! + ! Subroutine: psi_zswapdataidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_zswapidxv(ctxt,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + + use psb_error_mod + use psb_desc_mod + use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta - complex(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_datav' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& - & y,sndbuf(snd_pt:snd_pt+nesd-1)) - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_c_dpk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_c_dpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - else if (swap_sync) then - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + if (do_send) then - if (proc_to_comm < me) then - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + ! Pack send buffers + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_gth(nesd,idx(idx_pt:idx_pt+nesd-1),& + & y,sndbuf(snd_pt:snd_pt+nesd-1)) + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(sndbuf,sdsz,bsdidx,& + & psb_mpi_c_dpk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_c_dpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_dcomplex_swap_tag + call mpi_irecv(rcvbuf(rcv_pt),nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag, icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag - call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_dcomplex_swap_tag - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (usersend) then + call mpi_rsend(sndbuf(snd_pt),nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(sndbuf(snd_pt),nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_dcomplex_swap_tag - if ((nesd>0).and.(proc_to_comm /= me)) then - if (usersend) then - call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,iret) + if ((proc_to_comm /= me).and.(nerv>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send', & + & nerv,nesd + end if + rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag - - if ((proc_to_comm /= me).and.(nerv>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send', & - & nerv,nesd - end if - rcvbuf(rcv_pt:rcv_pt+nerv-1) = sndbuf(snd_pt:snd_pt+nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_snd(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_rcv(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& - & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_snd(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_rcv(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call psi_sct(nerv,idx(idx_pt:idx_pt+nerv-1),& + & rcvbuf(rcv_pt:rcv_pt+nerv-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + end if + + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_zswapidxv + end subroutine psi_zswapidxv +end submodule psi_z_swapdata_a_impl diff --git a/base/comm/internals/psi_zswaptran.F90 b/base/comm/internals/psi_zswaptran.F90 index 2d0c39c49..465337a51 100644 --- a/base/comm/internals/psi_zswaptran.F90 +++ b/base/comm/internals/psi_zswaptran.F90 @@ -91,418 +91,406 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_zswaptran_vect(flag,beta,y,desc_a,work,info,data) +submodule (psi_z_comm_v_mod) psi_z_swaptran_impl + use psb_base_mod +contains + module subroutine psi_zswaptran_vect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_zswaptran_vect - use psb_z_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type) :: y + complex(psb_dpk_) :: beta + complex(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_zswaptran_vect + end subroutine psi_zswaptran_vect + + ! + ! + ! Subroutine: psi_ztran_vidx_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ztran_vidx_vect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) -! -! -! Subroutine: psi_ztran_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_ztran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_ztran_vidx_vect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_z_base_vect_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - call mpi_irecv(y%combuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) - - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type) :: y + complex(psb_dpk_) :: beta + complex(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + call mpi_irecv(y%combuf(snd_pt),nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + idx_pt = rcv_pt + call y%gth(idx_pt,nerv,idx) + + pnti = pnti + nerv + nesd + 3 + end do - pnti = pnti + nerv + nesd + 3 - end do - end if + ! + ! Then wait + ! + call y%device_wait() - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... + if (debug) write(*,*) me,' isend' ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+nesd-1) = y%combuf(rcv_pt:rcv_pt+nerv-1) + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+nesd-1) + call y%sct(snd_pt,nesd,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return + return -end subroutine psi_ztran_vidx_vect + end subroutine psi_ztran_vidx_vect -! -! -! -! -! Subroutine: psi_zswaptran_multivect -! Data exchange among processes. -! -! Takes care of Y an encaspulated multivector. -! -! -subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data) + ! + ! + ! + ! + ! Subroutine: psi_zswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_zswaptran_multivect - use psb_z_base_vect_mod - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type) :: y + complex(psb_dpk_) :: beta + complex(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + class(psb_i_base_vect_type), pointer :: d_vidx + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) @@ -510,273 +498,266 @@ subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data) end subroutine psi_zswaptran_multivect -! -! -! Subroutine: psi_ztran_vidx_multivect -! Data exchange among processes. -! -! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods -! of multivectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_ztran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - - use psi_mod, psb_protect_name => psi_ztran_vidx_multivect - use psb_error_mod - use psb_realloc_mod - use psb_desc_mod - use psb_penv_mod - use psb_z_base_multivect_mod + ! + ! + ! Subroutine: psi_ztran_vidx_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods + ! of multivectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ztran_vidx_multivect(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type) :: y + complex(psb_dpk_) :: beta + complex(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_) :: icomm + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt + call mpi_irecv(y%combuf(snd_pt),n*nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + call y%gth(idx_pt,rcv_pt,nerv,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if ((nerv>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt - call mpi_irecv(y%combuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if ((nerv>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_dcomplex_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nerv>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nesd>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(snd_pt:snd_pt+n*nesd-1) = y%combuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null - - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if (debug) write(*,*) me,' done' - end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(snd_pt:snd_pt+n*nesd-1) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - call psb_erractionrestore(err_act) - return + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null -9999 call psb_error_handler(ctxt,err_act) + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' + end if - return -end subroutine psi_ztran_vidx_multivect + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ztran_vidx_multivect +end submodule psi_z_swaptran_impl diff --git a/base/comm/internals/psi_zswaptran_a.F90 b/base/comm/internals/psi_zswaptran_a.F90 index 5e82f3f75..2ea4d2b86 100644 --- a/base/comm/internals/psi_zswaptran_a.F90 +++ b/base/comm/internals/psi_zswaptran_a.F90 @@ -88,922 +88,909 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psi_zswaptranm(flag,n,beta,y,desc_a,work,info,data) +submodule (psi_z_comm_a_mod) psi_z_swaptran_a_impl + use psb_base_mod +contains + module subroutine psi_zswaptranm(flag,n,beta,y,desc_a,work,info,data) - use psi_mod, psb_protect_name => psi_zswaptranm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: y(:,:), beta + complex(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_ipk_) :: idxs, idxr, err_act, totxch, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 + call psb_erractionrestore(err_act) return -end subroutine psi_zswaptranm -subroutine psi_ztranidxm(ctxt,icomm,flag,n,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) +9999 call psb_error_handler(ctxt,err_act) - use psi_mod, psb_protect_name => psi_ztranidxm - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + return + end subroutine psi_zswaptranm + + module subroutine psi_ztranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta - complex(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: y(:,:), beta + complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + integer(psb_mpk_) :: icomm + logical, parameter :: usersend=.false. + + complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 + + ! prepare info for communications + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = n*nerv + + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = n*nesd + + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if - ! prepare info for communications + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. + end if - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + if (do_send) then - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = n*nerv + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = n*nesd + call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - end if - - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 end if - albf=.true. - end if - if (do_send) then - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - call psi_gth(nerv,n,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+n*nerv-1)) + ! Case SWAP_MPI + if (swap_mpi) then - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_c_dpk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_c_dpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - end if + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_dcomplex_swap_tag + call mpi_irecv(sndbuf(snd_pt),n*nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_dcomplex_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),n*nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - ! Case SWAP_MPI - if (swap_mpi) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_c_dpk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_c_dpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - - else if (swap_sync) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_dcomplex_swap_tag - if (proc_to_comm < me) then - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send',& + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do + pnti = pnti + nerv + nesd + 3 + end do - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag - call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + else if (swap_send) then + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + else if (swap_recv) then - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,iret) - end if + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 + end if - end do + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send',& - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+n*nesd-1) = rcvbuf(rcv_pt:rcv_pt+n*nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+n*nerv-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+n*nesd-1), proc_to_comm) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,n,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+n*nesd-1),beta,y) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_ztranidxm -! -! -! Subroutine: psi_zswaptranv -! Implements the data exchange among processes. This is similar to Xswapdata, but -! the list is read "in reverse", i.e. indices that are normally SENT are used -! for the RECEIVE part and vice-versa. This is the basic data exchange operation -! for doing the product of a sparse matrix by a vector. -! Essentially this is doing a variable all-to-all data exchange -! (ALLTOALLV in MPI parlance), but -! it is capable of pruning empty exchanges, which are very likely in out -! application environment. All the variants have the same structure -! In all these subroutines X may be: I Integer -! S real(psb_spk_) -! D real(psb_dpk_) -! C complex(psb_spk_) -! Z complex(psb_dpk_) -! Basically the operation is as follows: on each process, we identify -! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); -! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y -! but only on the elements involved in the UNPACK operation. -! Thus: for halo data exchange, the receive section is confined in the -! halo indices, and BETA=0, whereas for overlap exchange the receive section -! is scattered in the owned indices, and BETA=1. -! The first routine picks the desired exchange index list and passes it to the second. -! -! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) -! -! -! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y(:) - complex The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do -! our own internal allocation. -! info - integer. return code. -! data - integer which list is to be used to exchange data -! default psb_comm_halo_ -! psb_comm_halo_ use halo_index -! psb_comm_ext_ use ext_index -! psb_comm_ovrl_ use ovrl_index -! psb_comm_mov_ use ovr_mst_idx -! -! -subroutine psi_zswaptranv(flag,beta,y,desc_a,work,info,data) - - use psi_mod, psb_protect_name => psi_zswaptranv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + end subroutine psi_ztranidxm + ! + ! + ! Subroutine: psi_zswaptranv + ! Implements the data exchange among processes. This is similar to Xswapdata, but + ! the list is read "in reverse", i.e. indices that are normally SENT are used + ! for the RECEIVE part and vice-versa. This is the basic data exchange operation + ! for doing the product of a sparse matrix by a vector. + ! Essentially this is doing a variable all-to-all data exchange + ! (ALLTOALLV in MPI parlance), but + ! it is capable of pruning empty exchanges, which are very likely in out + ! application environment. All the variants have the same structure + ! In all these subroutines X may be: I Integer + ! S real(psb_spk_) + ! D real(psb_dpk_) + ! C complex(psb_spk_) + ! Z complex(psb_dpk_) + ! Basically the operation is as follows: on each process, we identify + ! sections SND(Y) and RCV(Y); then we do a SEND(PACK(SND(Y))); + ! then we receive, and we do an update with Y = UNPACK(RCV(Y)) + BETA * Y + ! but only on the elements involved in the UNPACK operation. + ! Thus: for halo data exchange, the receive section is confined in the + ! halo indices, and BETA=0, whereas for overlap exchange the receive section + ! is scattered in the owned indices, and BETA=1. + ! The first routine picks the desired exchange index list and passes it to the second. + ! + ! Arguments: + ! flag - integer Choose the algorithm for data exchange: + ! this is chosen through bit fields. + ! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + ! swap_sync = iand(flag,psb_swap_sync_) /= 0 + ! swap_send = iand(flag,psb_swap_send_) /= 0 + ! swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! if (swap_mpi): use underlying MPI_ALLTOALLV. + ! if (swap_sync): use PSB_SND and PSB_RCV in + ! synchronized pairs + ! if (swap_send .and. swap_recv): use mpi_irecv + ! and mpi_send + ! if (swap_send): use psb_snd (but need another + ! call with swap_recv to complete) + ! if (swap_recv): use psb_rcv (completing a + ! previous call with swap_send) + ! + ! + ! n - integer Number of columns in Y + ! beta - complex Choose overwrite or sum. + ! y(:) - complex The data area + ! desc_a - type(psb_desc_type). The communication descriptor. + ! work(:) - complex Buffer space. If not sufficient, will do + ! our own internal allocation. + ! info - integer. return code. + ! data - integer which list is to be used to exchange data + ! default psb_comm_halo_ + ! psb_comm_halo_ use halo_index + ! psb_comm_ext_ use ext_index + ! psb_comm_ovrl_ use ovrl_index + ! psb_comm_mov_ use ovr_mst_idx + ! + ! + module subroutine psi_zswaptranv(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data - - ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - integer(psb_ipk_), pointer :: d_idx(:) - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' - call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if (present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if - - call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') - goto 9999 - end if - - call psi_swaptran(ctxt,icomm,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), target :: work(:) + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), optional :: data + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ + integer(psb_ipk_), pointer :: d_idx(:) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tranv' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif -9999 call psb_error_handler(ctxt,err_act) + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - return -end subroutine psi_zswaptranv + if (present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + call desc_a%get_list_p(data_,d_idx,totxch,idxr,idxs,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if -! -! -! Subroutine: psi_ztranidxv -! Does the data exchange among processes. -! -! The real workhorse: the outer routines will only choose the index list -! this one takes the index list and does the actual exchange. -! -! -! -subroutine psi_ztranidxv(ctxt,icomm,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_idx,totxch,idxs,idxr,work,info) + if (info /= psb_success_) goto 9999 - use psi_mod, psb_protect_name => psi_ztranidxv - use psb_error_mod - use psb_desc_mod - use psb_penv_mod + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_zswaptranv + + + ! + ! + ! Subroutine: psi_ztranidxv + ! Does the data exchange among processes. + ! + ! The real workhorse: the outer routines will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ztranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta - complex(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& - & sdsz, rvsz, prcid, rvhd, sdhd - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false. - - complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable, dimension(:) :: bsdidx, brvidx,& + & sdsz, rvsz, prcid, rvhd, sdhd + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + integer(psb_mpk_) :: icomm + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false. + + complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf #if !defined(PSB_CMP_FLANG) - volatile :: sndbuf, rcvbuf + volatile :: sndbuf, rcvbuf #endif - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tran' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - if (swap_mpi) then - allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& - & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& - & stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) + character(len=20) :: name + + info=psb_success_ + name='psi_swap_tran' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if + endif + icomm = ctxt%get_mpic() + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + if (swap_mpi) then + allocate(sdsz(0:np-1), rvsz(0:np-1), bsdidx(0:np-1),& + & brvidx(0:np-1), rvhd(0:np-1), sdhd(0:np-1), prcid(0:np-1),& + & stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - rvhd(:) = mpi_request_null - sdsz(:) = 0 - rvsz(:) = 0 + rvhd(:) = mpi_request_null + sdsz(:) = 0 + rvsz(:) = 0 - ! prepare info for communications + ! prepare info for communications - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(proc_to_comm) = psb_get_mpi_rank(ctxt,proc_to_comm) - brvidx(proc_to_comm) = rcv_pt - rvsz(proc_to_comm) = nerv + brvidx(proc_to_comm) = rcv_pt + rvsz(proc_to_comm) = nerv - bsdidx(proc_to_comm) = snd_pt - sdsz(proc_to_comm) = nesd + bsdidx(proc_to_comm) = snd_pt + sdsz(proc_to_comm) = nesd - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 - end do + end do - else - allocate(rvhd(totxch),prcid(totxch),stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + else + allocate(rvhd(totxch),prcid(totxch),stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - end if - totrcv_ = max(totrcv_,1) - totsnd_ = max(totsnd_,1) - if((totrcv_+totsnd_) < size(work)) then - sndbuf => work(1:totsnd_) - rcvbuf => work(totsnd_+1:totsnd_+totrcv_) - albf=.false. - else - allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + totrcv_ = max(totrcv_,1) + totsnd_ = max(totsnd_,1) + if((totrcv_+totsnd_) < size(work)) then + sndbuf => work(1:totsnd_) + rcvbuf => work(totsnd_+1:totsnd_+totrcv_) + albf=.false. + else + allocate(sndbuf(totsnd_),rcvbuf(totrcv_), stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + albf=.true. end if - albf=.true. - end if - - - if (do_send) then - - ! Pack send buffers - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& - & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) - - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - ! Case SWAP_MPI - if (swap_mpi) then - - ! swap elements using mpi_alltoallv - call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_c_dpk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_c_dpk_,icomm,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + + + if (do_send) then + + ! Pack send buffers + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + call psi_gth(nerv,idx(idx_pt:idx_pt+nerv-1),& + & y,rcvbuf(rcv_pt:rcv_pt+nerv-1)) + + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - else if (swap_sync) then + ! Case SWAP_MPI + if (swap_mpi) then + + ! swap elements using mpi_alltoallv + call mpi_alltoallv(rcvbuf,rvsz,brvidx,& + & psb_mpi_c_dpk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_c_dpk_,icomm,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + else if (swap_sync) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if (proc_to_comm < me) then + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + else if (proc_to_comm > me) then + if (nesd>0) call psb_rcv(ctxt,& + & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) + if (nerv>0) call psb_snd(ctxt,& + & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send .and. swap_recv) then + + ! First I post all the non blocking receives + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nesd>0).and.(proc_to_comm /= me)) then + p2ptag = psb_dcomplex_swap_tag + call mpi_irecv(sndbuf(snd_pt),nesd,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag,icomm,rvhd(i),iret) + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + + ! Then I post all the blocking sends + if (usersend) call mpi_barrier(icomm,iret) + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + + if ((nerv>0).and.(proc_to_comm /= me)) then + p2ptag = psb_dcomplex_swap_tag + if (usersend) then + call mpi_rsend(rcvbuf(rcv_pt),nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag, icomm,iret) + else + call mpi_send(rcvbuf(rcv_pt),nerv,& + & psb_mpi_c_dpk_,prcid(i),& + & p2ptag, icomm,iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm < me) then + pnti = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_dcomplex_swap_tag + + if ((proc_to_comm /= me).and.(nesd>0)) then + call mpi_wait(rvhd(i),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swaptran: mismatch on self send', & + & nerv,nesd + end if + sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) + end if + pnti = pnti + nerv + nesd + 3 + end do + + + else if (swap_send) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nerv>0) call psb_snd(ctxt,& & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + + else if (swap_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) if (nesd>0) call psb_rcv(ctxt,& & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - else if (proc_to_comm > me) then - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send .and. swap_recv) then - - ! First I post all the non blocking receives - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag - call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,rvhd(i),iret) - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do + end if - ! Then I post all the blocking sends - if (usersend) call mpi_barrier(icomm,iret) + if (do_recv) then + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx(pnti+psb_proc_id_) + nerv = idx(pnti+psb_n_elem_recv_) + nesd = idx(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& + & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) + rcv_pt = rcv_pt + nerv + snd_pt = snd_pt + nesd + pnti = pnti + nerv + nesd + 3 + end do - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) + end if - if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag - if (usersend) then - call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,iret) - else - call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,iret) - end if + if (swap_mpi) then + deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& + & stat=info) + else + deallocate(rvhd,prcid,stat=info) + end if + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if(albf) deallocate(sndbuf,rcvbuf,stat=info) + if(info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - - pnti = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag - - if ((proc_to_comm /= me).and.(nesd>0)) then - call mpi_wait(rvhd(i),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swaptran: mismatch on self send', & - & nerv,nesd - end if - sndbuf(snd_pt:snd_pt+nesd-1) = rcvbuf(rcv_pt:rcv_pt+nerv-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - - else if (swap_send) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nerv>0) call psb_snd(ctxt,& - & rcvbuf(rcv_pt:rcv_pt+nerv-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - else if (swap_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - if (nesd>0) call psb_rcv(ctxt,& - & sndbuf(snd_pt:snd_pt+nesd-1), proc_to_comm) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (do_recv) then - - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx(pnti+psb_proc_id_) - nerv = idx(pnti+psb_n_elem_recv_) - nesd = idx(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call psi_sct(nesd,idx(idx_pt:idx_pt+nesd-1),& - & sndbuf(snd_pt:snd_pt+nesd-1),beta,y) - rcv_pt = rcv_pt + nerv - snd_pt = snd_pt + nesd - pnti = pnti + nerv + nesd + 3 - end do - - end if - - if (swap_mpi) then - deallocate(sdsz,rvsz,bsdidx,brvidx,rvhd,prcid,sdhd,& - & stat=info) - else - deallocate(rvhd,prcid,stat=info) - end if - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - if(albf) deallocate(sndbuf,rcvbuf,stat=info) - if(info /= psb_success_) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_ztranidxv + end subroutine psi_ztranidxv +end submodule psi_z_swaptran_a_impl diff --git a/base/modules/comm/psi_c_comm_a_mod.f90 b/base/modules/comm/psi_c_comm_a_mod.f90 index ce2da78d7..97b5f9588 100644 --- a/base/modules/comm/psi_c_comm_a_mod.f90 +++ b/base/modules/comm/psi_c_comm_a_mod.f90 @@ -34,8 +34,7 @@ module psi_c_comm_a_mod use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_spk_, psb_i_base_vect_type interface psi_swapdata - subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -44,8 +43,7 @@ module psi_c_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswapdatam - subroutine psi_cswapdatav(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_cswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info complex(psb_spk_) :: y(:), beta @@ -53,11 +51,9 @@ module psi_c_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswapdatav - subroutine psi_cswapidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_cswapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -65,11 +61,9 @@ module psi_c_comm_a_mod complex(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_cswapidxm - subroutine psi_cswapidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_cswapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_Mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info complex(psb_spk_) :: y(:), beta @@ -80,8 +74,7 @@ module psi_c_comm_a_mod interface psi_swaptran - subroutine psi_cswaptranm(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_cswaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info @@ -90,8 +83,7 @@ module psi_c_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswaptranm - subroutine psi_cswaptranv(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_cswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info complex(psb_spk_) :: y(:), beta @@ -99,11 +91,9 @@ module psi_c_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswaptranv - subroutine psi_ctranidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_ctranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -111,11 +101,9 @@ module psi_c_comm_a_mod complex(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_ctranidxm - subroutine psi_ctranidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_ctranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info complex(psb_spk_) :: y(:), beta @@ -123,17 +111,15 @@ module psi_c_comm_a_mod integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_ctranidxv end interface psi_swaptran - + interface psi_ovrl_upd - subroutine psi_covrl_updr1(x,desc_a,update,info) - import + module subroutine psi_covrl_updr1(x,desc_a,update,info) complex(psb_spk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_updr1 - subroutine psi_covrl_updr2(x,desc_a,update,info) - import + module subroutine psi_covrl_updr2(x,desc_a,update,info) complex(psb_spk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -142,15 +128,13 @@ module psi_c_comm_a_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_covrl_saver1(x,xs,desc_a,info) - import + module subroutine psi_covrl_saver1(x,xs,desc_a,info) complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_saver1 - subroutine psi_covrl_saver2(x,xs,desc_a,info) - import + module subroutine psi_covrl_saver2(x,xs,desc_a,info) complex(psb_spk_), intent(inout) :: x(:,:) complex(psb_spk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -159,15 +143,13 @@ module psi_c_comm_a_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_covrl_restrr1(x,xs,desc_a,info) - import + module subroutine psi_covrl_restrr1(x,xs,desc_a,info) complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_restrr1 - subroutine psi_covrl_restrr2(x,xs,desc_a,info) - import + module subroutine psi_covrl_restrr2(x,xs,desc_a,info) complex(psb_spk_), intent(inout) :: x(:,:) complex(psb_spk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_c_comm_v_mod.f90 b/base/modules/comm/psi_c_comm_v_mod.f90 index 7d10a0287..9f7c87581 100644 --- a/base/modules/comm/psi_c_comm_v_mod.f90 +++ b/base/modules/comm/psi_c_comm_v_mod.f90 @@ -36,8 +36,7 @@ module psi_c_comm_v_mod use psb_c_base_multivect_mod, only : psb_c_base_multivect_type interface psi_swapdata - subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y @@ -46,8 +45,7 @@ module psi_c_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_vect - subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y @@ -56,11 +54,9 @@ module psi_c_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_multivect - subroutine psi_cswap_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_cswap_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y @@ -69,11 +65,9 @@ module psi_c_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_cswap_vidx_vect - subroutine psi_cswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_cswap_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y @@ -86,8 +80,7 @@ module psi_c_comm_v_mod interface psi_swaptran - subroutine psi_cswaptran_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y @@ -96,8 +89,7 @@ module psi_c_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_vect - subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y @@ -106,11 +98,9 @@ module psi_c_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_multivect - subroutine psi_ctran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_ctran_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y @@ -119,11 +109,9 @@ module psi_c_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ctran_vidx_vect - subroutine psi_ctran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_ctran_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y @@ -135,15 +123,13 @@ module psi_c_comm_v_mod end interface psi_swaptran interface psi_ovrl_upd - subroutine psi_covrl_upd_vect(x,desc_a,update,info) - import + module subroutine psi_covrl_upd_vect(x,desc_a,update,info) class(psb_c_base_vect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_upd_vect - subroutine psi_covrl_upd_multivect(x,desc_a,update,info) - import + module subroutine psi_covrl_upd_multivect(x,desc_a,update,info) class(psb_c_base_multivect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -152,15 +138,13 @@ module psi_c_comm_v_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_covrl_save_vect(x,xs,desc_a,info) - import + module subroutine psi_covrl_save_vect(x,xs,desc_a,info) class(psb_c_base_vect_type) :: x complex(psb_spk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_save_vect - subroutine psi_covrl_save_multivect(x,xs,desc_a,info) - import + module subroutine psi_covrl_save_multivect(x,xs,desc_a,info) class(psb_c_base_multivect_type) :: x complex(psb_spk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -169,15 +153,13 @@ module psi_c_comm_v_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_covrl_restr_vect(x,xs,desc_a,info) - import + module subroutine psi_covrl_restr_vect(x,xs,desc_a,info) class(psb_c_base_vect_type) :: x complex(psb_spk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_restr_vect - subroutine psi_covrl_restr_multivect(x,xs,desc_a,info) - import + module subroutine psi_covrl_restr_multivect(x,xs,desc_a,info) class(psb_c_base_multivect_type) :: x complex(psb_spk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_d_comm_a_mod.f90 b/base/modules/comm/psi_d_comm_a_mod.f90 index b1dda3f81..46f021427 100644 --- a/base/modules/comm/psi_d_comm_a_mod.f90 +++ b/base/modules/comm/psi_d_comm_a_mod.f90 @@ -34,8 +34,7 @@ module psi_d_comm_a_mod use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_dpk_, psb_i_base_vect_type interface psi_swapdata - subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -44,8 +43,7 @@ module psi_d_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdatam - subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info real(psb_dpk_) :: y(:), beta @@ -53,11 +51,9 @@ module psi_d_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdatav - subroutine psi_dswapidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_dswapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -65,11 +61,9 @@ module psi_d_comm_a_mod real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dswapidxm - subroutine psi_dswapidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_dswapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_Mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info real(psb_dpk_) :: y(:), beta @@ -80,8 +74,7 @@ module psi_d_comm_a_mod interface psi_swaptran - subroutine psi_dswaptranm(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_dswaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info @@ -90,8 +83,7 @@ module psi_d_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswaptranm - subroutine psi_dswaptranv(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_dswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info real(psb_dpk_) :: y(:), beta @@ -99,11 +91,9 @@ module psi_d_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswaptranv - subroutine psi_dtranidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_dtranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -111,11 +101,9 @@ module psi_d_comm_a_mod real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dtranidxm - subroutine psi_dtranidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_dtranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info real(psb_dpk_) :: y(:), beta @@ -123,17 +111,15 @@ module psi_d_comm_a_mod integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dtranidxv end interface psi_swaptran - + interface psi_ovrl_upd - subroutine psi_dovrl_updr1(x,desc_a,update,info) - import + module subroutine psi_dovrl_updr1(x,desc_a,update,info) real(psb_dpk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_updr1 - subroutine psi_dovrl_updr2(x,desc_a,update,info) - import + module subroutine psi_dovrl_updr2(x,desc_a,update,info) real(psb_dpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -142,15 +128,13 @@ module psi_d_comm_a_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_dovrl_saver1(x,xs,desc_a,info) - import + module subroutine psi_dovrl_saver1(x,xs,desc_a,info) real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_saver1 - subroutine psi_dovrl_saver2(x,xs,desc_a,info) - import + module subroutine psi_dovrl_saver2(x,xs,desc_a,info) real(psb_dpk_), intent(inout) :: x(:,:) real(psb_dpk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -159,15 +143,13 @@ module psi_d_comm_a_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_dovrl_restrr1(x,xs,desc_a,info) - import + module subroutine psi_dovrl_restrr1(x,xs,desc_a,info) real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_restrr1 - subroutine psi_dovrl_restrr2(x,xs,desc_a,info) - import + module subroutine psi_dovrl_restrr2(x,xs,desc_a,info) real(psb_dpk_), intent(inout) :: x(:,:) real(psb_dpk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index b7a902da8..5893d76bb 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -36,8 +36,7 @@ module psi_d_comm_v_mod use psb_d_base_multivect_mod, only : psb_d_base_multivect_type interface psi_swapdata - subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_vect_type) :: y @@ -46,8 +45,7 @@ module psi_d_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_vect - subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_multivect_type) :: y @@ -56,11 +54,9 @@ module psi_d_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_multivect - subroutine psi_dswap_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_dswap_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_vect_type) :: y @@ -69,11 +65,9 @@ module psi_d_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_dswap_vidx_vect - subroutine psi_dswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_dswap_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_multivect_type) :: y @@ -86,8 +80,7 @@ module psi_d_comm_v_mod interface psi_swaptran - subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_vect_type) :: y @@ -96,8 +89,7 @@ module psi_d_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_vect - subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_multivect_type) :: y @@ -106,11 +98,9 @@ module psi_d_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_multivect - subroutine psi_dtran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_vect_type) :: y @@ -119,11 +109,9 @@ module psi_d_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_dtran_vidx_vect - subroutine psi_dtran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_dtran_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_multivect_type) :: y @@ -135,15 +123,13 @@ module psi_d_comm_v_mod end interface psi_swaptran interface psi_ovrl_upd - subroutine psi_dovrl_upd_vect(x,desc_a,update,info) - import + module subroutine psi_dovrl_upd_vect(x,desc_a,update,info) class(psb_d_base_vect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_upd_vect - subroutine psi_dovrl_upd_multivect(x,desc_a,update,info) - import + module subroutine psi_dovrl_upd_multivect(x,desc_a,update,info) class(psb_d_base_multivect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -152,15 +138,13 @@ module psi_d_comm_v_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_dovrl_save_vect(x,xs,desc_a,info) - import + module subroutine psi_dovrl_save_vect(x,xs,desc_a,info) class(psb_d_base_vect_type) :: x real(psb_dpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_save_vect - subroutine psi_dovrl_save_multivect(x,xs,desc_a,info) - import + module subroutine psi_dovrl_save_multivect(x,xs,desc_a,info) class(psb_d_base_multivect_type) :: x real(psb_dpk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -169,15 +153,13 @@ module psi_d_comm_v_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_dovrl_restr_vect(x,xs,desc_a,info) - import + module subroutine psi_dovrl_restr_vect(x,xs,desc_a,info) class(psb_d_base_vect_type) :: x real(psb_dpk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_restr_vect - subroutine psi_dovrl_restr_multivect(x,xs,desc_a,info) - import + module subroutine psi_dovrl_restr_multivect(x,xs,desc_a,info) class(psb_d_base_multivect_type) :: x real(psb_dpk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_e_comm_a_mod.f90 b/base/modules/comm/psi_e_comm_a_mod.f90 index 4b6c5104d..9e215e7cc 100644 --- a/base/modules/comm/psi_e_comm_a_mod.f90 +++ b/base/modules/comm/psi_e_comm_a_mod.f90 @@ -34,8 +34,7 @@ module psi_e_comm_a_mod use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ interface psi_swapdata - subroutine psi_eswapdatam(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_eswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -44,8 +43,7 @@ module psi_e_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_eswapdatam - subroutine psi_eswapdatav(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_eswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_epk_) :: y(:), beta @@ -53,11 +51,9 @@ module psi_e_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_eswapdatav - subroutine psi_eswapidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_eswapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -65,11 +61,9 @@ module psi_e_comm_a_mod integer(psb_epk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_eswapidxm - subroutine psi_eswapidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_eswapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_Mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_epk_) :: y(:), beta @@ -80,8 +74,7 @@ module psi_e_comm_a_mod interface psi_swaptran - subroutine psi_eswaptranm(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_eswaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info @@ -90,8 +83,7 @@ module psi_e_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_eswaptranm - subroutine psi_eswaptranv(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_eswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_epk_) :: y(:), beta @@ -99,11 +91,9 @@ module psi_e_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_eswaptranv - subroutine psi_etranidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_etranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -111,11 +101,9 @@ module psi_e_comm_a_mod integer(psb_epk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_etranidxm - subroutine psi_etranidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_etranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_epk_) :: y(:), beta @@ -123,17 +111,15 @@ module psi_e_comm_a_mod integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_etranidxv end interface psi_swaptran - + interface psi_ovrl_upd - subroutine psi_eovrl_updr1(x,desc_a,update,info) - import + module subroutine psi_eovrl_updr1(x,desc_a,update,info) integer(psb_epk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_eovrl_updr1 - subroutine psi_eovrl_updr2(x,desc_a,update,info) - import + module subroutine psi_eovrl_updr2(x,desc_a,update,info) integer(psb_epk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -142,15 +128,13 @@ module psi_e_comm_a_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_eovrl_saver1(x,xs,desc_a,info) - import + module subroutine psi_eovrl_saver1(x,xs,desc_a,info) integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_eovrl_saver1 - subroutine psi_eovrl_saver2(x,xs,desc_a,info) - import + module subroutine psi_eovrl_saver2(x,xs,desc_a,info) integer(psb_epk_), intent(inout) :: x(:,:) integer(psb_epk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -159,15 +143,13 @@ module psi_e_comm_a_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_eovrl_restrr1(x,xs,desc_a,info) - import + module subroutine psi_eovrl_restrr1(x,xs,desc_a,info) integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_eovrl_restrr1 - subroutine psi_eovrl_restrr2(x,xs,desc_a,info) - import + module subroutine psi_eovrl_restrr2(x,xs,desc_a,info) integer(psb_epk_), intent(inout) :: x(:,:) integer(psb_epk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_i2_comm_a_mod.f90 b/base/modules/comm/psi_i2_comm_a_mod.f90 index 484c98245..d6c282f96 100644 --- a/base/modules/comm/psi_i2_comm_a_mod.f90 +++ b/base/modules/comm/psi_i2_comm_a_mod.f90 @@ -34,8 +34,7 @@ module psi_i2_comm_a_mod use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ interface psi_swapdata - subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -44,8 +43,7 @@ module psi_i2_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_i2swapdatam - subroutine psi_i2swapdatav(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_i2swapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_i2pk_) :: y(:), beta @@ -53,11 +51,9 @@ module psi_i2_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_i2swapdatav - subroutine psi_i2swapidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_i2swapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -65,11 +61,9 @@ module psi_i2_comm_a_mod integer(psb_i2pk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_i2swapidxm - subroutine psi_i2swapidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_i2swapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_Mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_i2pk_) :: y(:), beta @@ -80,8 +74,7 @@ module psi_i2_comm_a_mod interface psi_swaptran - subroutine psi_i2swaptranm(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_i2swaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info @@ -90,8 +83,7 @@ module psi_i2_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_i2swaptranm - subroutine psi_i2swaptranv(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_i2swaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_i2pk_) :: y(:), beta @@ -99,11 +91,9 @@ module psi_i2_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_i2swaptranv - subroutine psi_i2tranidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_i2tranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -111,11 +101,9 @@ module psi_i2_comm_a_mod integer(psb_i2pk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_i2tranidxm - subroutine psi_i2tranidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_i2tranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_i2pk_) :: y(:), beta @@ -123,17 +111,15 @@ module psi_i2_comm_a_mod integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_i2tranidxv end interface psi_swaptran - + interface psi_ovrl_upd - subroutine psi_i2ovrl_updr1(x,desc_a,update,info) - import + module subroutine psi_i2ovrl_updr1(x,desc_a,update,info) integer(psb_i2pk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_i2ovrl_updr1 - subroutine psi_i2ovrl_updr2(x,desc_a,update,info) - import + module subroutine psi_i2ovrl_updr2(x,desc_a,update,info) integer(psb_i2pk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -142,15 +128,13 @@ module psi_i2_comm_a_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_i2ovrl_saver1(x,xs,desc_a,info) - import + module subroutine psi_i2ovrl_saver1(x,xs,desc_a,info) integer(psb_i2pk_), intent(inout) :: x(:) integer(psb_i2pk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_i2ovrl_saver1 - subroutine psi_i2ovrl_saver2(x,xs,desc_a,info) - import + module subroutine psi_i2ovrl_saver2(x,xs,desc_a,info) integer(psb_i2pk_), intent(inout) :: x(:,:) integer(psb_i2pk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -159,15 +143,13 @@ module psi_i2_comm_a_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_i2ovrl_restrr1(x,xs,desc_a,info) - import + module subroutine psi_i2ovrl_restrr1(x,xs,desc_a,info) integer(psb_i2pk_), intent(inout) :: x(:) integer(psb_i2pk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_i2ovrl_restrr1 - subroutine psi_i2ovrl_restrr2(x,xs,desc_a,info) - import + module subroutine psi_i2ovrl_restrr2(x,xs,desc_a,info) integer(psb_i2pk_), intent(inout) :: x(:,:) integer(psb_i2pk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_i_comm_v_mod.f90 b/base/modules/comm/psi_i_comm_v_mod.f90 index 2fe3948c5..2bc8a0e96 100644 --- a/base/modules/comm/psi_i_comm_v_mod.f90 +++ b/base/modules/comm/psi_i_comm_v_mod.f90 @@ -37,8 +37,7 @@ module psi_i_comm_v_mod use psb_i_base_multivect_mod, only : psb_i_base_multivect_type interface psi_swapdata - subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y @@ -47,8 +46,7 @@ module psi_i_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_vect - subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y @@ -57,11 +55,9 @@ module psi_i_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_multivect - subroutine psi_iswap_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_iswap_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y @@ -70,11 +66,9 @@ module psi_i_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_iswap_vidx_vect - subroutine psi_iswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_iswap_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y @@ -87,8 +81,7 @@ module psi_i_comm_v_mod interface psi_swaptran - subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y @@ -97,8 +90,7 @@ module psi_i_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_vect - subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y @@ -107,11 +99,9 @@ module psi_i_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_multivect - subroutine psi_itran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_itran_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y @@ -120,11 +110,9 @@ module psi_i_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_itran_vidx_vect - subroutine psi_itran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_itran_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y @@ -136,15 +124,13 @@ module psi_i_comm_v_mod end interface psi_swaptran interface psi_ovrl_upd - subroutine psi_iovrl_upd_vect(x,desc_a,update,info) - import + module subroutine psi_iovrl_upd_vect(x,desc_a,update,info) class(psb_i_base_vect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_upd_vect - subroutine psi_iovrl_upd_multivect(x,desc_a,update,info) - import + module subroutine psi_iovrl_upd_multivect(x,desc_a,update,info) class(psb_i_base_multivect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -153,15 +139,13 @@ module psi_i_comm_v_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_iovrl_save_vect(x,xs,desc_a,info) - import + module subroutine psi_iovrl_save_vect(x,xs,desc_a,info) class(psb_i_base_vect_type) :: x integer(psb_ipk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_save_vect - subroutine psi_iovrl_save_multivect(x,xs,desc_a,info) - import + module subroutine psi_iovrl_save_multivect(x,xs,desc_a,info) class(psb_i_base_multivect_type) :: x integer(psb_ipk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -170,15 +154,13 @@ module psi_i_comm_v_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_iovrl_restr_vect(x,xs,desc_a,info) - import + module subroutine psi_iovrl_restr_vect(x,xs,desc_a,info) class(psb_i_base_vect_type) :: x integer(psb_ipk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_restr_vect - subroutine psi_iovrl_restr_multivect(x,xs,desc_a,info) - import + module subroutine psi_iovrl_restr_multivect(x,xs,desc_a,info) class(psb_i_base_multivect_type) :: x integer(psb_ipk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_l_comm_v_mod.f90 b/base/modules/comm/psi_l_comm_v_mod.f90 index b61a17b73..92768d863 100644 --- a/base/modules/comm/psi_l_comm_v_mod.f90 +++ b/base/modules/comm/psi_l_comm_v_mod.f90 @@ -38,8 +38,7 @@ module psi_l_comm_v_mod use psb_l_base_multivect_mod, only : psb_l_base_multivect_type interface psi_swapdata - subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y @@ -48,8 +47,7 @@ module psi_l_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_vect - subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y @@ -58,11 +56,9 @@ module psi_l_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_multivect - subroutine psi_lswap_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_lswap_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y @@ -71,11 +67,9 @@ module psi_l_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_lswap_vidx_vect - subroutine psi_lswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_lswap_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y @@ -88,8 +82,7 @@ module psi_l_comm_v_mod interface psi_swaptran - subroutine psi_lswaptran_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y @@ -98,8 +91,7 @@ module psi_l_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_vect - subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y @@ -108,11 +100,9 @@ module psi_l_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_multivect - subroutine psi_ltran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_ltran_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y @@ -121,11 +111,9 @@ module psi_l_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ltran_vidx_vect - subroutine psi_ltran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_ltran_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y @@ -137,15 +125,13 @@ module psi_l_comm_v_mod end interface psi_swaptran interface psi_ovrl_upd - subroutine psi_lovrl_upd_vect(x,desc_a,update,info) - import + module subroutine psi_lovrl_upd_vect(x,desc_a,update,info) class(psb_l_base_vect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_upd_vect - subroutine psi_lovrl_upd_multivect(x,desc_a,update,info) - import + module subroutine psi_lovrl_upd_multivect(x,desc_a,update,info) class(psb_l_base_multivect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -154,15 +140,13 @@ module psi_l_comm_v_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_lovrl_save_vect(x,xs,desc_a,info) - import + module subroutine psi_lovrl_save_vect(x,xs,desc_a,info) class(psb_l_base_vect_type) :: x integer(psb_lpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_save_vect - subroutine psi_lovrl_save_multivect(x,xs,desc_a,info) - import + module subroutine psi_lovrl_save_multivect(x,xs,desc_a,info) class(psb_l_base_multivect_type) :: x integer(psb_lpk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -171,15 +155,13 @@ module psi_l_comm_v_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_lovrl_restr_vect(x,xs,desc_a,info) - import + module subroutine psi_lovrl_restr_vect(x,xs,desc_a,info) class(psb_l_base_vect_type) :: x integer(psb_lpk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_restr_vect - subroutine psi_lovrl_restr_multivect(x,xs,desc_a,info) - import + module subroutine psi_lovrl_restr_multivect(x,xs,desc_a,info) class(psb_l_base_multivect_type) :: x integer(psb_lpk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_m_comm_a_mod.f90 b/base/modules/comm/psi_m_comm_a_mod.f90 index 825e1579f..ac134e655 100644 --- a/base/modules/comm/psi_m_comm_a_mod.f90 +++ b/base/modules/comm/psi_m_comm_a_mod.f90 @@ -34,8 +34,7 @@ module psi_m_comm_a_mod use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ interface psi_swapdata - subroutine psi_mswapdatam(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_mswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -44,8 +43,7 @@ module psi_m_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_mswapdatam - subroutine psi_mswapdatav(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_mswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_mpk_) :: y(:), beta @@ -53,11 +51,9 @@ module psi_m_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_mswapdatav - subroutine psi_mswapidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_mswapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -65,11 +61,9 @@ module psi_m_comm_a_mod integer(psb_mpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_mswapidxm - subroutine psi_mswapidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_mswapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_Mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_mpk_) :: y(:), beta @@ -80,8 +74,7 @@ module psi_m_comm_a_mod interface psi_swaptran - subroutine psi_mswaptranm(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_mswaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info @@ -90,8 +83,7 @@ module psi_m_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_mswaptranm - subroutine psi_mswaptranv(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_mswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_mpk_) :: y(:), beta @@ -99,11 +91,9 @@ module psi_m_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_mswaptranv - subroutine psi_mtranidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_mtranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -111,11 +101,9 @@ module psi_m_comm_a_mod integer(psb_mpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_mtranidxm - subroutine psi_mtranidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_mtranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info integer(psb_mpk_) :: y(:), beta @@ -123,17 +111,15 @@ module psi_m_comm_a_mod integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_mtranidxv end interface psi_swaptran - + interface psi_ovrl_upd - subroutine psi_movrl_updr1(x,desc_a,update,info) - import + module subroutine psi_movrl_updr1(x,desc_a,update,info) integer(psb_mpk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_movrl_updr1 - subroutine psi_movrl_updr2(x,desc_a,update,info) - import + module subroutine psi_movrl_updr2(x,desc_a,update,info) integer(psb_mpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -142,15 +128,13 @@ module psi_m_comm_a_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_movrl_saver1(x,xs,desc_a,info) - import + module subroutine psi_movrl_saver1(x,xs,desc_a,info) integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_movrl_saver1 - subroutine psi_movrl_saver2(x,xs,desc_a,info) - import + module subroutine psi_movrl_saver2(x,xs,desc_a,info) integer(psb_mpk_), intent(inout) :: x(:,:) integer(psb_mpk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -159,15 +143,13 @@ module psi_m_comm_a_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_movrl_restrr1(x,xs,desc_a,info) - import + module subroutine psi_movrl_restrr1(x,xs,desc_a,info) integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_movrl_restrr1 - subroutine psi_movrl_restrr2(x,xs,desc_a,info) - import + module subroutine psi_movrl_restrr2(x,xs,desc_a,info) integer(psb_mpk_), intent(inout) :: x(:,:) integer(psb_mpk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_s_comm_a_mod.f90 b/base/modules/comm/psi_s_comm_a_mod.f90 index 10369b51e..3615bb6c0 100644 --- a/base/modules/comm/psi_s_comm_a_mod.f90 +++ b/base/modules/comm/psi_s_comm_a_mod.f90 @@ -34,8 +34,7 @@ module psi_s_comm_a_mod use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_spk_, psb_i_base_vect_type interface psi_swapdata - subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -44,8 +43,7 @@ module psi_s_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_sswapdatam - subroutine psi_sswapdatav(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_sswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info real(psb_spk_) :: y(:), beta @@ -53,11 +51,9 @@ module psi_s_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_sswapdatav - subroutine psi_sswapidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_sswapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -65,11 +61,9 @@ module psi_s_comm_a_mod real(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_sswapidxm - subroutine psi_sswapidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_sswapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_Mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info real(psb_spk_) :: y(:), beta @@ -80,8 +74,7 @@ module psi_s_comm_a_mod interface psi_swaptran - subroutine psi_sswaptranm(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_sswaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info @@ -90,8 +83,7 @@ module psi_s_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_sswaptranm - subroutine psi_sswaptranv(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_sswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info real(psb_spk_) :: y(:), beta @@ -99,11 +91,9 @@ module psi_s_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_sswaptranv - subroutine psi_stranidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_stranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -111,11 +101,9 @@ module psi_s_comm_a_mod real(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_stranidxm - subroutine psi_stranidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_stranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info real(psb_spk_) :: y(:), beta @@ -123,17 +111,15 @@ module psi_s_comm_a_mod integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_stranidxv end interface psi_swaptran - + interface psi_ovrl_upd - subroutine psi_sovrl_updr1(x,desc_a,update,info) - import + module subroutine psi_sovrl_updr1(x,desc_a,update,info) real(psb_spk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_updr1 - subroutine psi_sovrl_updr2(x,desc_a,update,info) - import + module subroutine psi_sovrl_updr2(x,desc_a,update,info) real(psb_spk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -142,15 +128,13 @@ module psi_s_comm_a_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_sovrl_saver1(x,xs,desc_a,info) - import + module subroutine psi_sovrl_saver1(x,xs,desc_a,info) real(psb_spk_), intent(inout) :: x(:) real(psb_spk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_saver1 - subroutine psi_sovrl_saver2(x,xs,desc_a,info) - import + module subroutine psi_sovrl_saver2(x,xs,desc_a,info) real(psb_spk_), intent(inout) :: x(:,:) real(psb_spk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -159,15 +143,13 @@ module psi_s_comm_a_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_sovrl_restrr1(x,xs,desc_a,info) - import + module subroutine psi_sovrl_restrr1(x,xs,desc_a,info) real(psb_spk_), intent(inout) :: x(:) real(psb_spk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_restrr1 - subroutine psi_sovrl_restrr2(x,xs,desc_a,info) - import + module subroutine psi_sovrl_restrr2(x,xs,desc_a,info) real(psb_spk_), intent(inout) :: x(:,:) real(psb_spk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_s_comm_v_mod.f90 b/base/modules/comm/psi_s_comm_v_mod.f90 index 1cf4d53ec..f210542a0 100644 --- a/base/modules/comm/psi_s_comm_v_mod.f90 +++ b/base/modules/comm/psi_s_comm_v_mod.f90 @@ -36,8 +36,7 @@ module psi_s_comm_v_mod use psb_s_base_multivect_mod, only : psb_s_base_multivect_type interface psi_swapdata - subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y @@ -46,8 +45,7 @@ module psi_s_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_sswapdata_vect - subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y @@ -56,11 +54,9 @@ module psi_s_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_sswapdata_multivect - subroutine psi_sswap_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_sswap_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y @@ -69,11 +65,9 @@ module psi_s_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_sswap_vidx_vect - subroutine psi_sswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_sswap_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y @@ -86,8 +80,7 @@ module psi_s_comm_v_mod interface psi_swaptran - subroutine psi_sswaptran_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_sswaptran_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y @@ -96,8 +89,7 @@ module psi_s_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_sswaptran_vect - subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y @@ -106,11 +98,9 @@ module psi_s_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_sswaptran_multivect - subroutine psi_stran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_stran_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y @@ -119,11 +109,9 @@ module psi_s_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_stran_vidx_vect - subroutine psi_stran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_stran_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y @@ -135,15 +123,13 @@ module psi_s_comm_v_mod end interface psi_swaptran interface psi_ovrl_upd - subroutine psi_sovrl_upd_vect(x,desc_a,update,info) - import + module subroutine psi_sovrl_upd_vect(x,desc_a,update,info) class(psb_s_base_vect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_upd_vect - subroutine psi_sovrl_upd_multivect(x,desc_a,update,info) - import + module subroutine psi_sovrl_upd_multivect(x,desc_a,update,info) class(psb_s_base_multivect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -152,15 +138,13 @@ module psi_s_comm_v_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_sovrl_save_vect(x,xs,desc_a,info) - import + module subroutine psi_sovrl_save_vect(x,xs,desc_a,info) class(psb_s_base_vect_type) :: x real(psb_spk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_save_vect - subroutine psi_sovrl_save_multivect(x,xs,desc_a,info) - import + module subroutine psi_sovrl_save_multivect(x,xs,desc_a,info) class(psb_s_base_multivect_type) :: x real(psb_spk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -169,15 +153,13 @@ module psi_s_comm_v_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_sovrl_restr_vect(x,xs,desc_a,info) - import + module subroutine psi_sovrl_restr_vect(x,xs,desc_a,info) class(psb_s_base_vect_type) :: x real(psb_spk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_restr_vect - subroutine psi_sovrl_restr_multivect(x,xs,desc_a,info) - import + module subroutine psi_sovrl_restr_multivect(x,xs,desc_a,info) class(psb_s_base_multivect_type) :: x real(psb_spk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_z_comm_a_mod.f90 b/base/modules/comm/psi_z_comm_a_mod.f90 index 9f7477a16..28393467b 100644 --- a/base/modules/comm/psi_z_comm_a_mod.f90 +++ b/base/modules/comm/psi_z_comm_a_mod.f90 @@ -34,8 +34,7 @@ module psi_z_comm_a_mod use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_dpk_, psb_i_base_vect_type interface psi_swapdata - subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -44,8 +43,7 @@ module psi_z_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswapdatam - subroutine psi_zswapdatav(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_zswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info complex(psb_dpk_) :: y(:), beta @@ -53,11 +51,9 @@ module psi_z_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswapdatav - subroutine psi_zswapidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_zswapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -65,11 +61,9 @@ module psi_z_comm_a_mod complex(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_zswapidxm - subroutine psi_zswapidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_zswapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_Mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info complex(psb_dpk_) :: y(:), beta @@ -80,8 +74,7 @@ module psi_z_comm_a_mod interface psi_swaptran - subroutine psi_zswaptranm(flag,n,beta,y,desc_a,work,info,data) - import + module subroutine psi_zswaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info @@ -90,8 +83,7 @@ module psi_z_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswaptranm - subroutine psi_zswaptranv(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_zswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info complex(psb_dpk_) :: y(:), beta @@ -99,11 +91,9 @@ module psi_z_comm_a_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswaptranv - subroutine psi_ztranidxm(ctxt,icomm,flag,n,beta,y,idx,& + module subroutine psi_ztranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -111,11 +101,9 @@ module psi_z_comm_a_mod complex(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_ztranidxm - subroutine psi_ztranidxv(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_ztranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info complex(psb_dpk_) :: y(:), beta @@ -123,17 +111,15 @@ module psi_z_comm_a_mod integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_ztranidxv end interface psi_swaptran - + interface psi_ovrl_upd - subroutine psi_zovrl_updr1(x,desc_a,update,info) - import + module subroutine psi_zovrl_updr1(x,desc_a,update,info) complex(psb_dpk_), intent(inout), target :: x(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_updr1 - subroutine psi_zovrl_updr2(x,desc_a,update,info) - import + module subroutine psi_zovrl_updr2(x,desc_a,update,info) complex(psb_dpk_), intent(inout), target :: x(:,:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -142,15 +128,13 @@ module psi_z_comm_a_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_zovrl_saver1(x,xs,desc_a,info) - import + module subroutine psi_zovrl_saver1(x,xs,desc_a,info) complex(psb_dpk_), intent(inout) :: x(:) complex(psb_dpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_saver1 - subroutine psi_zovrl_saver2(x,xs,desc_a,info) - import + module subroutine psi_zovrl_saver2(x,xs,desc_a,info) complex(psb_dpk_), intent(inout) :: x(:,:) complex(psb_dpk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -159,15 +143,13 @@ module psi_z_comm_a_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_zovrl_restrr1(x,xs,desc_a,info) - import + module subroutine psi_zovrl_restrr1(x,xs,desc_a,info) complex(psb_dpk_), intent(inout) :: x(:) complex(psb_dpk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_restrr1 - subroutine psi_zovrl_restrr2(x,xs,desc_a,info) - import + module subroutine psi_zovrl_restrr2(x,xs,desc_a,info) complex(psb_dpk_), intent(inout) :: x(:,:) complex(psb_dpk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a diff --git a/base/modules/comm/psi_z_comm_v_mod.f90 b/base/modules/comm/psi_z_comm_v_mod.f90 index de8e11176..8c749f605 100644 --- a/base/modules/comm/psi_z_comm_v_mod.f90 +++ b/base/modules/comm/psi_z_comm_v_mod.f90 @@ -36,8 +36,7 @@ module psi_z_comm_v_mod use psb_z_base_multivect_mod, only : psb_z_base_multivect_type interface psi_swapdata - subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type) :: y @@ -46,8 +45,7 @@ module psi_z_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_vect - subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_multivect_type) :: y @@ -56,11 +54,9 @@ module psi_z_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_multivect - subroutine psi_zswap_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_zswap_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type) :: y @@ -69,11 +65,9 @@ module psi_z_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_zswap_vidx_vect - subroutine psi_zswap_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_multivect_type) :: y @@ -86,8 +80,7 @@ module psi_z_comm_v_mod interface psi_swaptran - subroutine psi_zswaptran_vect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_zswaptran_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type) :: y @@ -96,8 +89,7 @@ module psi_z_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_vect - subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data) - import + module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_multivect_type) :: y @@ -106,11 +98,9 @@ module psi_z_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_multivect - subroutine psi_ztran_vidx_vect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_ztran_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type) :: y @@ -119,11 +109,9 @@ module psi_z_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ztran_vidx_vect - subroutine psi_ztran_vidx_multivect(ctxt,icomm,flag,beta,y,idx,& + module subroutine psi_ztran_vidx_multivect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) - import type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_multivect_type) :: y @@ -135,15 +123,13 @@ module psi_z_comm_v_mod end interface psi_swaptran interface psi_ovrl_upd - subroutine psi_zovrl_upd_vect(x,desc_a,update,info) - import + module subroutine psi_zovrl_upd_vect(x,desc_a,update,info) class(psb_z_base_vect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_upd_vect - subroutine psi_zovrl_upd_multivect(x,desc_a,update,info) - import + module subroutine psi_zovrl_upd_multivect(x,desc_a,update,info) class(psb_z_base_multivect_type) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(in) :: update @@ -152,15 +138,13 @@ module psi_z_comm_v_mod end interface psi_ovrl_upd interface psi_ovrl_save - subroutine psi_zovrl_save_vect(x,xs,desc_a,info) - import + module subroutine psi_zovrl_save_vect(x,xs,desc_a,info) class(psb_z_base_vect_type) :: x complex(psb_dpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_save_vect - subroutine psi_zovrl_save_multivect(x,xs,desc_a,info) - import + module subroutine psi_zovrl_save_multivect(x,xs,desc_a,info) class(psb_z_base_multivect_type) :: x complex(psb_dpk_), allocatable :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a @@ -169,15 +153,13 @@ module psi_z_comm_v_mod end interface psi_ovrl_save interface psi_ovrl_restore - subroutine psi_zovrl_restr_vect(x,xs,desc_a,info) - import + module subroutine psi_zovrl_restr_vect(x,xs,desc_a,info) class(psb_z_base_vect_type) :: x complex(psb_dpk_) :: xs(:) type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_restr_vect - subroutine psi_zovrl_restr_multivect(x,xs,desc_a,info) - import + module subroutine psi_zovrl_restr_multivect(x,xs,desc_a,info) class(psb_z_base_multivect_type) :: x complex(psb_dpk_) :: xs(:,:) type(psb_desc_type), intent(in) :: desc_a From 7151c728dba84e0e877271386b3716cc0bab67c8 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 13 Mar 2026 12:17:50 +0100 Subject: [PATCH 110/175] Final fixes --- base/comm/internals/Makefile | 2 +- base/modules/desc/psb_indx_map_mod.F90 | 3 - cbind/psb_c_base.h | 147 ------------------------- cbind/psb_c_cbase.h | 109 ------------------ cbind/psb_c_dbase.h | 113 ------------------- cbind/psb_c_sbase.h | 110 ------------------ cbind/psb_c_zbase.h | 110 ------------------ 7 files changed, 1 insertion(+), 593 deletions(-) delete mode 100644 cbind/psb_c_base.h delete mode 100644 cbind/psb_c_cbase.h delete mode 100644 cbind/psb_c_dbase.h delete mode 100644 cbind/psb_c_sbase.h delete mode 100644 cbind/psb_c_zbase.h diff --git a/base/comm/internals/Makefile b/base/comm/internals/Makefile index 695f20650..f80555446 100644 --- a/base/comm/internals/Makefile +++ b/base/comm/internals/Makefile @@ -41,6 +41,6 @@ mpfobjs: (make $(MPFOBJS) FC="$(MPFC)" ) clean: - /bin/rm -f $(MPFOBJS) $(FOBJS) $(COBJS) $(FOBJS2) $(MPFOBJS2) *$(.mod) + /bin/rm -f $(MPFOBJS) $(FOBJS) $(COBJS) $(FOBJS2) $(MPFOBJS2) *$(.mod) *.smod veryclean: clean diff --git a/base/modules/desc/psb_indx_map_mod.F90 b/base/modules/desc/psb_indx_map_mod.F90 index 66d9fab06..7d7b9a075 100644 --- a/base/modules/desc/psb_indx_map_mod.F90 +++ b/base/modules/desc/psb_indx_map_mod.F90 @@ -1318,7 +1318,6 @@ contains ! almost nothing to be done here idxmap%state = -1 if (allocated(idxmap%ctxt%ctxt)) deallocate(idxmap%ctxt%ctxt) -!!$ idxmap%mpic = -1 idxmap%global_rows = -1 idxmap%global_cols = -1 idxmap%local_rows = -1 @@ -1334,7 +1333,6 @@ contains idxmap%state = psb_desc_null_ if (allocated(idxmap%ctxt%ctxt)) deallocate(idxmap%ctxt%ctxt) -!!$ idxmap%mpic = -1 idxmap%global_rows = -1 idxmap%global_cols = -1 idxmap%local_rows = -1 @@ -1421,7 +1419,6 @@ contains outmap%state = idxmap%state outmap%ctxt = idxmap%ctxt -!!$ outmap%mpic = idxmap%mpic outmap%global_rows = idxmap%global_rows outmap%global_cols = idxmap%global_cols outmap%local_rows = idxmap%local_rows diff --git a/cbind/psb_c_base.h b/cbind/psb_c_base.h deleted file mode 100644 index 1242fd818..000000000 --- a/cbind/psb_c_base.h +++ /dev/null @@ -1,147 +0,0 @@ -#ifndef PSB_C_BASE__ -#define PSB_C_BASE__ -#ifdef __cplusplus -extern "C" { - /*typedef char _Bool;*/ -#endif - -#include -#ifdef __cplusplus -#include -#else -#include -#endif -#include -#include -#include -#include -#include - -#include "psb_config.h" -#include "psb_types.h" - - - typedef struct PSB_C_DESCRIPTOR { - void *descriptor; - } psb_c_descriptor; - - - typedef struct PSB_C_CTXT { - psb_i_t *ctxt; - } psb_c_ctxt; - - - - void psb_c_check_error(psb_c_ctxt cctxt); - psb_i_t psb_c_error(); - psb_i_t psb_c_clean_errstack(); - void psb_c_print_errmsg(); - char *psb_c_pop_errmsg(); - psb_i_t psb_c_f2c_errmsg(char *, psb_i_t); - void psb_c_seterraction_ret(); - void psb_c_seterraction_print(); - void psb_c_seterraction_abort(); - - /* Environment routines */ - void psb_c_init(psb_c_ctxt *cctxt); - void psb_c_init_from_fint(psb_c_ctxt *cctxt, psb_i_t f_comm); - void psb_c_exit(psb_c_ctxt cctxt); - void psb_c_exit_ctxt(psb_c_ctxt cctxt); - void psb_c_abort(psb_c_ctxt cctxt); - void psb_c_barrier(psb_c_ctxt cctxt); - void psb_c_info(psb_c_ctxt cctxt, psb_i_t *iam, psb_i_t *np); - void psb_c_get_i_ctxt(psb_c_ctxt cctxt, psb_i_t *ictxt, psb_i_t *info); - bool psb_c_cmp_ctxt(psb_c_ctxt cctxt1, psb_c_ctxt cctxt2); - psb_d_t psb_c_wtime(); - psb_i_t psb_c_get_errstatus(); - - psb_i_t psb_c_get_index_base(); - void psb_c_set_index_base(psb_i_t base); - /* GPU environment routines */ - #ifdef PSB_HAVE_CUDA - void psb_c_cuda_init(psb_c_ctxt *cctxt); - void psb_c_cuda_init_opt(psb_c_ctxt *cctxt, psb_m_t ngpu); - void psb_c_cuda_exit(); - psb_m_t psb_c_cuda_getDeviceCount(); - #endif - - void psb_c_mbcast(psb_c_ctxt cctxt, psb_i_t n, psb_m_t *v, psb_i_t root); - void psb_c_ibcast(psb_c_ctxt cctxt, psb_i_t n, psb_i_t *v, psb_i_t root); - void psb_c_lbcast(psb_c_ctxt cctxt, psb_i_t n, psb_l_t *v, psb_i_t root); - void psb_c_ebcast(psb_c_ctxt cctxt, psb_i_t n, psb_e_t *v, psb_i_t root); - void psb_c_sbcast(psb_c_ctxt cctxt, psb_i_t n, psb_s_t *v, psb_i_t root); - void psb_c_dbcast(psb_c_ctxt cctxt, psb_i_t n, psb_d_t *v, psb_i_t root); - void psb_c_cbcast(psb_c_ctxt cctxt, psb_i_t n, psb_c_t *v, psb_i_t root); - void psb_c_zbcast(psb_c_ctxt cctxt, psb_i_t n, psb_z_t *v, psb_i_t root); - void psb_c_hbcast(psb_c_ctxt cctxt, const char *v, psb_i_t root); - - /* Descriptor/integer routines */ - psb_c_descriptor* psb_c_new_descriptor(); - void psb_c_delete_descriptor(psb_c_descriptor *); - psb_c_ctxt* psb_c_new_ctxt(); - void psb_c_delete_ctxt(psb_c_ctxt *); - psb_i_t psb_c_cdall_vg(psb_l_t ng, psb_i_t *vg, psb_c_ctxt cctxt, psb_c_descriptor *cd); - psb_i_t psb_c_cdall_vl(psb_i_t nl, psb_l_t *vl, psb_c_ctxt cctxt, psb_c_descriptor *cd); - psb_i_t psb_c_cdall_vl_lidx(psb_i_t nl, psb_l_t *vl, psb_i_t *lidx, psb_c_ctxt cctxt, psb_c_descriptor *cd); - psb_i_t psb_c_cdall_nl(psb_i_t nl, psb_c_ctxt cctxt, psb_c_descriptor *cd); - psb_i_t psb_c_cdall_repl(psb_l_t n, psb_c_ctxt cctxt, psb_c_descriptor *cd); - psb_i_t psb_c_cdasb(psb_c_descriptor *cd); - psb_i_t psb_c_cdasb_format(psb_c_descriptor *cd, const char *afmt); - psb_i_t psb_c_cdfree(psb_c_descriptor *cd); - psb_i_t psb_c_cdins(psb_i_t nz, const psb_l_t *ia, const psb_l_t *ja, psb_c_descriptor *cd); - psb_i_t psb_c_cdins_lidx(psb_i_t nz, const psb_l_t *ja, const psb_i_t *lidx, psb_c_descriptor *cd); - bool psb_c_is_owned(psb_l_t gindex, psb_c_descriptor *cd); - bool psb_c_cd_is_asb(psb_c_descriptor *cd); - psb_i_t psb_c_cd_check_addr(psb_c_descriptor *cd); - - - psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); - psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); - psb_l_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); - psb_l_t psb_c_cd_get_global_cols(psb_c_descriptor *cd); - psb_i_t psb_c_cd_get_global_indices(psb_l_t idx[], psb_i_t nidx, bool owned, psb_c_descriptor *cd); - psb_i_t psb_c_g2l(psb_c_descriptor *cdh,psb_l_t gindex,bool cowned); - - - - /* legal values for afmt */ -#define PSB_AFMT_CSR "CSR" -#define PSB_AFMT_CSC "CSC" -#define PSB_AFMT_COO "COO" -#define PSB_AFMT_RSB "RSB" - - /* Transpose argument */ -#define psb_NoTrans_ "N" -#define psb_Trans_ "T" -#define psb_ConjTrans_ "C" - -#if 0 - /* legal values for upd argument */ -#define psb_upd_srch_ 98764 -#define psb_upd_perm_ 98765 -#define psb_upd_def_ psb_upd_srch_ - /* legal values for dupl argument */ -#define psb_dupl_ovwrt_ 0 -#define psb_dupl_add_ 1 -#define psb_dupl_err_ 2 -#define psb_dupl_def_ psb_dupl_ovwrt_ - - /* legal values for halo swap modes argument */ -#define psb_swap_send_ 1 -#define psb_swap_recv_ 2 -#define psb_swap_sync_ 4 -#define psb_swap_mpi_ 8 - - /* legal values for ovrl update argument */ -#define psb_none_ 0 -#define psb_sum_ 1 -#define psb_avg_ 2 -#define psb_square_root_ 3 -#define psb_setzero_ 4 -#endif - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cbind/psb_c_cbase.h b/cbind/psb_c_cbase.h deleted file mode 100644 index dcf379656..000000000 --- a/cbind/psb_c_cbase.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef PSB_C_CBASE_ -#define PSB_C_CBASE_ -#include "psb_c_base.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PSB_C_CVECTOR { - void *cvector; -} psb_c_cvector; - -typedef struct PSB_C_CSPMAT { - void *cspmat; -} psb_c_cspmat; - - -/* dense vectors */ -psb_c_cvector* psb_c_new_cvector(); -psb_i_t psb_c_cvect_get_nrows(psb_c_cvector *xh); -psb_c_t *psb_c_cvect_get_cpy( psb_c_cvector *xh); -psb_i_t psb_c_cvect_f_get_cpy(psb_c_t *v, psb_c_cvector *xh); -psb_i_t psb_c_cvect_zero(psb_c_cvector *xh); -psb_i_t *psb_c_cvect_f_get_pnt(psb_c_cvector *xh); -psb_i_t psb_c_cvect_clone(psb_c_cvector *xh,psb_c_cvector *yh); - -psb_i_t psb_c_cgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_cgeall_remote(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_cgeall_remote_options(psb_c_cvector *xh, psb_c_descriptor *cdh, - psb_i_t bldmode, psb_i_t duple); -psb_i_t psb_c_cgeins(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, - psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, - psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_cgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_cgeasb_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); -psb_i_t psb_c_cgeasb_options_format(psb_c_cvector *xh, psb_c_descriptor *cdh, - const char *fmt, psb_i_t dupl); -psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); - -/* sparse matrices*/ -psb_c_cspmat* psb_c_new_cspmat(); -psb_i_t psb_c_cspall(psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_cspall_remote(psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_cspasb(psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_cspfree(psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_cspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, - const psb_c_t *val, psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_cmat_get_nrows(psb_c_cspmat *mh); -psb_i_t psb_c_cmat_get_ncols(psb_c_cspmat *mh); -psb_l_t psb_c_cnnz(psb_c_cspmat *mh,psb_c_descriptor *cdh); -bool psb_c_cis_matupd(psb_c_cspmat *mh,psb_c_descriptor *cdh); -bool psb_c_cis_matasb(psb_c_cspmat *mh,psb_c_descriptor *cdh); -bool psb_c_cis_matbld(psb_c_cspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_cset_matupd(psb_c_cspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_cset_matasb(psb_c_cspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_cset_matbld(psb_c_cspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_ccopy_mat(psb_c_cspmat *ah,psb_c_cspmat *bh,psb_c_descriptor *cdh); - -psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, - const char *afmt, psb_i_t upd, psb_i_t dupl); -psb_i_t psb_c_csprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); -psb_i_t psb_c_cmat_name_print(psb_c_cspmat *mh, char *name); -psb_i_t psb_c_cvect_set_scal(psb_c_cvector *xh, psb_c_t val); -psb_i_t psb_c_cvect_set_vect(psb_c_cvector *xh, psb_c_t *val, psb_i_t n); - -/* psblas computational routines */ -psb_c_t psb_c_cgedot(psb_c_cvector *xh, psb_c_cvector *yh, psb_c_descriptor *cdh); -psb_s_t psb_c_cgenrm2(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_cgeamax(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_cgeasum(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_cgenrmi(psb_c_cspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_cgeaxpby(psb_c_t alpha, psb_c_cvector *xh, - psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_cgeaxpbyz(psb_c_t alpha, psb_c_cvector *xh, - psb_c_t beta, psb_c_cvector *yh, psb_c_cvector *zh, psb_c_descriptor *cdh); -psb_i_t psb_c_cspmm(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, - psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_cspmm_opt(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, - psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh, - char *trans, bool doswap); -psb_i_t psb_c_cspsm(psb_c_t alpha, psb_c_cspmat *th, psb_c_cvector *xh, - psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); -/* Additional computational routines */ -psb_i_t psb_c_cgemlt(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_cgemlt2(psb_c_t alpha, psb_c_cvector *xh, psb_c_cvector *yh, psb_c_t beta, psb_c_cvector *zh, psb_c_descriptor *cdh); -psb_i_t psb_c_cgediv(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_cgediv_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_cgediv2(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *zh,psb_c_descriptor *cdh); -psb_i_t psb_c_cgediv2_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *zh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_cgeinv(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_cgeinv_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_cgeabs(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *cdh); -psb_i_t psb_c_cgecmp(psb_c_cvector *xh,psb_s_t ch,psb_c_cvector *zh,psb_c_descriptor *cdh); -bool psb_c_cgecmpmat(psb_c_cspmat *ah,psb_c_cspmat *bh,psb_s_t tol,psb_c_descriptor *cdh); -bool psb_c_cgecmpmat_val(psb_c_cspmat *ah,psb_c_t val,psb_s_t tol,psb_c_descriptor *cdh); -psb_i_t psb_c_cgeaddconst(psb_c_cvector *xh,psb_c_t bh,psb_c_cvector *zh,psb_c_descriptor *cdh); -psb_s_t psb_c_cgenrm2_weight(psb_c_cvector *xh,psb_c_cvector *wh,psb_c_descriptor *cdh); -psb_s_t psb_c_cgenrm2_weightmask(psb_c_cvector *xh,psb_c_cvector *wh,psb_c_cvector *idvh,psb_c_descriptor *cdh); -psb_i_t psb_c_cspscal(psb_c_t alpha, psb_c_cspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_cspscalpid(psb_c_t alpha, psb_c_cspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_cspaxpby(psb_c_t alpha, psb_c_cspmat *ah, psb_c_t beta, psb_c_cspmat *bh, psb_c_descriptor *cdh); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cbind/psb_c_dbase.h b/cbind/psb_c_dbase.h deleted file mode 100644 index 6a82fe77f..000000000 --- a/cbind/psb_c_dbase.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef PSB_C_DBASE_ -#define PSB_C_DBASE_ -#include "psb_c_base.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PSB_C_DVECTOR { - void *dvector; -} psb_c_dvector; - -typedef struct PSB_C_DSPMAT { - void *dspmat; -} psb_c_dspmat; - - -/* dense vectors */ -psb_c_dvector* psb_c_new_dvector(); -psb_i_t psb_c_dvect_get_nrows(psb_c_dvector *xh); -psb_d_t *psb_c_dvect_get_cpy( psb_c_dvector *xh); -psb_i_t psb_c_dvect_f_get_cpy(psb_d_t *v, psb_c_dvector *xh); -psb_i_t psb_c_dvect_zero(psb_c_dvector *xh); -psb_d_t *psb_c_dvect_f_get_pnt( psb_c_dvector *xh); -psb_i_t psb_c_dvect_clone(psb_c_dvector *xh,psb_c_dvector *yh); - -psb_i_t psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeall_remote(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeall_remote_options(psb_c_dvector *xh, psb_c_descriptor *cdh, - psb_i_t bldmode, psb_i_t duple); -psb_i_t psb_c_dgeins(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, - psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, - psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeasb_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); -psb_i_t psb_c_dgeasb_options_format(psb_c_dvector *xh, psb_c_descriptor *cdh, - psb_i_t dupl, const char *fmt); -psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); - -/* sparse matrices*/ -psb_c_dspmat* psb_c_new_dspmat(); -psb_i_t psb_c_dspall(psb_c_dspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspall_remote(psb_c_dspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspasb(psb_c_dspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspfree(psb_c_dspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, - const psb_d_t *val, psb_c_dspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dmat_get_nrows(psb_c_dspmat *mh); -psb_i_t psb_c_dmat_get_ncols(psb_c_dspmat *mh); -psb_l_t psb_c_dnnz(psb_c_dspmat *mh,psb_c_descriptor *cdh); -bool psb_c_dis_matupd(psb_c_dspmat *mh,psb_c_descriptor *cdh); -bool psb_c_dis_matasb(psb_c_dspmat *mh,psb_c_descriptor *cdh); -bool psb_c_dis_matbld(psb_c_dspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_dset_matupd(psb_c_dspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_dset_matasb(psb_c_dspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_dset_matbld(psb_c_dspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_dcopy_mat(psb_c_dspmat *ah,psb_c_dspmat *bh,psb_c_descriptor *cdh); - -psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, - const char *afmt, psb_i_t upd, psb_i_t dupl); -psb_i_t psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); -psb_i_t psb_c_dmat_name_print(psb_c_dspmat *mh, char *name); -psb_i_t psb_c_dvect_set_scal(psb_c_dvector *xh, psb_d_t val); -psb_i_t psb_c_dvect_set_vect(psb_c_dvector *xh, psb_d_t *val, psb_i_t n); - -/* psblas computational routines */ -psb_d_t psb_c_dgedot(psb_c_dvector *xh, psb_c_dvector *yh, psb_c_descriptor *cdh); -psb_d_t psb_c_dgenrm2(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_dgeamax(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_dgeasum(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_dgenrmi(psb_c_dvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeaxpby(psb_d_t alpha, psb_c_dvector *xh, - psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeaxpbyz(psb_d_t alpha, psb_c_dvector *xh, - psb_d_t beta, psb_c_dvector *yh, psb_c_dvector *zh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspmm(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, - psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspmm_opt(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, - psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh, - char *trans, bool doswap); -psb_i_t psb_c_dspsm(psb_d_t alpha, psb_c_dspmat *th, psb_c_dvector *xh, - psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); -/* Additional computational routines */ -psb_i_t psb_c_dgemlt(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_dgemlt2(psb_d_t alpha, psb_c_dvector *xh, psb_c_dvector *yh, psb_d_t beta, psb_c_dvector *zh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgediv(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_dgediv_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_dgediv2(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_dvector *zh,psb_c_descriptor *cdh); -psb_i_t psb_c_dgediv2_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_dvector *zh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_dgeinv(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_dgeinv_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_dgeabs(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_dgecmp(psb_c_dvector *xh,psb_d_t ch,psb_c_dvector *zh,psb_c_descriptor *cdh); -bool psb_c_dgecmpmat(psb_c_dspmat *ah,psb_c_dspmat *bh,psb_d_t tol,psb_c_descriptor *cdh); -bool psb_c_dgecmpmat_val(psb_c_dspmat *ah,psb_d_t val,psb_d_t tol,psb_c_descriptor *cdh); -psb_i_t psb_c_dgeaddconst(psb_c_dvector *xh,psb_d_t bh,psb_c_dvector *zh,psb_c_descriptor *cdh); -psb_d_t psb_c_dgenrm2_weight(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_descriptor *cdh); -psb_d_t psb_c_dgenrm2_weightmask(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_dvector *idvh,psb_c_descriptor *cdh); -psb_i_t psb_c_dmask(psb_c_dvector *ch,psb_c_dvector *xh,psb_c_dvector *mh, bool *t, psb_c_descriptor *cdh); -psb_d_t psb_c_dgemin(psb_c_dvector *xh,psb_c_descriptor *cdh); -psb_d_t psb_c_dminquotient(psb_c_dvector *xh,psb_c_dvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspscal(psb_d_t alpha, psb_c_dspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_dspscalpid(psb_d_t alpha, psb_c_dspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_dspaxpby(psb_d_t alpha, psb_c_dspmat *ah, psb_d_t beta, psb_c_dspmat *bh, psb_c_descriptor *cdh); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cbind/psb_c_sbase.h b/cbind/psb_c_sbase.h deleted file mode 100644 index f132e707e..000000000 --- a/cbind/psb_c_sbase.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef PSB_C_SBASE_ -#define PSB_C_SBASE_ -#include "psb_c_base.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PSB_C_SVECTOR { - void *svector; -} psb_c_svector; - -typedef struct PSB_C_SSPMAT { - void *sspmat; -} psb_c_sspmat; - - -/* dense vectors */ -psb_c_svector* psb_c_new_svector(); -psb_i_t psb_c_svect_get_nrows(psb_c_svector *xh); -psb_s_t *psb_c_svect_get_cpy( psb_c_svector *xh); -psb_i_t psb_c_svect_f_get_cpy(psb_s_t *v, psb_c_svector *xh); -psb_i_t psb_c_svect_zero(psb_c_svector *xh); -psb_s_t *psb_c_svect_f_get_pnt( psb_c_svector *xh); -psb_i_t psb_c_svect_clone(psb_c_svector *xh,psb_c_svector *yh); - -psb_i_t psb_c_sgeall(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_sgeall_remote(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_sgeall_remote_options(psb_c_svector *xh, psb_c_descriptor *cdh, - psb_i_t bldmode, psb_i_t duple); -psb_i_t psb_c_sgeins(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, - psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, - psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_sgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_sgeasb_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t dupl); -psb_i_t psb_c_sgeasb_options_format(psb_c_svector *xh, psb_c_descriptor *cdh, - const char *fmt, psb_i_t dupl); -psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); - -/* sparse matrices*/ -psb_c_sspmat* psb_c_new_sspmat(); -psb_i_t psb_c_sspall(psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_sspall_remote(psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_sspasb(psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_sspfree(psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_sspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, - const psb_s_t *val, psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_smat_get_nrows(psb_c_sspmat *mh); -psb_i_t psb_c_smat_get_ncols(psb_c_sspmat *mh); -psb_l_t psb_c_snnz(psb_c_sspmat *mh,psb_c_descriptor *cdh); -bool psb_c_sis_matupd(psb_c_sspmat *mh,psb_c_descriptor *cdh); -bool psb_c_sis_matasb(psb_c_sspmat *mh,psb_c_descriptor *cdh); -bool psb_c_sis_matbld(psb_c_sspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_sset_matupd(psb_c_sspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_sset_matasb(psb_c_sspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_sset_matbld(psb_c_sspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_scopy_mat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_c_descriptor *cdh); - - psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, - const char *afmt, psb_i_t upd, psb_i_t dupl); -psb_i_t psb_c_ssprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); -psb_i_t psb_c_smat_name_print(psb_c_sspmat *mh, char *name); -psb_i_t psb_c_svect_set_scal(psb_c_svector *xh, psb_s_t val); -psb_i_t psb_c_svect_set_vect(psb_c_svector *xh, psb_s_t *val, psb_i_t n); - -/* psblas computational routines */ -psb_s_t psb_c_sgedot(psb_c_svector *xh, psb_c_svector *yh, psb_c_descriptor *cdh); -psb_s_t psb_c_sgenrm2(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_sgeamax(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_sgeasum(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_sgenrmi(psb_c_sspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_sgeaxpby(psb_s_t alpha, psb_c_svector *xh, - psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_sgeaxpbyz(psb_s_t alpha, psb_c_svector *xh, - psb_s_t beta, psb_c_svector *yh, psb_c_svector *zh, psb_c_descriptor *cdh); -psb_i_t psb_c_sspmm(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, - psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_sspmm_opt(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, - psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh, - char *trans, bool doswap); -psb_i_t psb_c_sspsm(psb_s_t alpha, psb_c_sspmat *th, psb_c_svector *xh, - psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); -/* Additional computational routines */ -psb_i_t psb_c_sgemlt(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_sgemlt2(psb_s_t alpha, psb_c_svector *xh, psb_c_svector *yh, psb_s_t beta, psb_c_svector *zh, psb_c_descriptor *cdh); -psb_i_t psb_c_sgediv(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_sgediv_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_sgediv2(psb_c_svector *xh,psb_c_svector *yh,psb_c_svector *zh,psb_c_descriptor *cdh); -psb_i_t psb_c_sgediv2_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_svector *zh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_sgeinv(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_sgeinv_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_sgeabs(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_sgecmp(psb_c_svector *xh,psb_s_t ch,psb_c_svector *zh,psb_c_descriptor *cdh); -bool psb_c_sgecmpmat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_s_t tol,psb_c_descriptor *cdh); -bool psb_c_sgecmpmat_val(psb_c_sspmat *ah,psb_s_t val,psb_s_t tol,psb_c_descriptor *cdh); -psb_i_t psb_c_sgeaddconst(psb_c_svector *xh,psb_s_t bh,psb_c_svector *zh,psb_c_descriptor *cdh); -psb_s_t psb_c_sgenrm2_weight(psb_c_svector *xh,psb_c_svector *wh,psb_c_descriptor *cdh); -psb_s_t psb_c_sgenrm2_weightmask(psb_c_svector *xh,psb_c_svector *wh,psb_c_svector *idvh,psb_c_descriptor *cdh); -psb_i_t psb_c_smask(psb_c_svector *ch,psb_c_svector *xh,psb_c_svector *mh, bool *t, psb_c_descriptor *cdh); -psb_s_t psb_c_sgemin(psb_c_svector *xh,psb_c_descriptor *cdh); -psb_i_t psb_c_sspscal(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_sspscalpid(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_sspaxpby(psb_s_t alpha, psb_c_sspmat *ah, psb_s_t beta, psb_c_sspmat *bh, psb_c_descriptor *cdh); -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cbind/psb_c_zbase.h b/cbind/psb_c_zbase.h deleted file mode 100644 index 40bff4853..000000000 --- a/cbind/psb_c_zbase.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef PSB_C_ZBASE_ -#define PSB_C_ZBASE_ -#include "psb_c_base.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PSB_C_ZVECTOR { - void *zvector; -} psb_c_zvector; - -typedef struct PSB_C_ZSPMAT { - void *zspmat; -} psb_c_zspmat; - - -/* dense vectors */ -psb_c_zvector* psb_c_new_zvector(); -psb_i_t psb_c_zvect_get_nrows(psb_c_zvector *xh); -psb_z_t *psb_c_zvect_get_cpy( psb_c_zvector *xh); -psb_i_t psb_c_zvect_f_get_cpy(psb_z_t *v, psb_c_zvector *xh); -psb_i_t psb_c_zvect_zero(psb_c_zvector *xh); -psb_z_t *psb_c_zvect_f_get_pnt( psb_c_zvector *xh); -psb_i_t psb_c_zvect_clone(psb_c_zvector *xh,psb_c_zvector *yh); - -psb_i_t psb_c_zgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_zgeall_remote(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_zgeall_remote_options(psb_c_zvector *xh, psb_c_descriptor *cdh, - psb_i_t bldmode, psb_i_t duple); -psb_i_t psb_c_zgeins(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, - psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, - psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_zgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_zgeasb_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t dupl); -psb_i_t psb_c_zgeasb_options_format(psb_c_zvector *xh, psb_c_descriptor *cdh, - const char *fmt, psb_i_t dupl); -psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); - -/* sparse matrices*/ -psb_c_zspmat* psb_c_new_zspmat(); -psb_i_t psb_c_zspall(psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_zspall_remote(psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_zspasb(psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_zspfree(psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_zspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, - const psb_z_t *val, psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_zmat_get_nrows(psb_c_zspmat *mh); -psb_i_t psb_c_zmat_get_ncols(psb_c_zspmat *mh); -psb_l_t psb_c_znnz(psb_c_zspmat *mh,psb_c_descriptor *cdh); -bool psb_c_zis_matupd(psb_c_zspmat *mh,psb_c_descriptor *cdh); -bool psb_c_zis_matasb(psb_c_zspmat *mh,psb_c_descriptor *cdh); -bool psb_c_zis_matbld(psb_c_zspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_zset_matupd(psb_c_zspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_zset_matasb(psb_c_zspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_zset_matbld(psb_c_zspmat *mh,psb_c_descriptor *cdh); -psb_i_t psb_c_zcopy_mat(psb_c_zspmat *ah,psb_c_zspmat *bh,psb_c_descriptor *cdh); - - -psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, - const char *afmt, psb_i_t upd, psb_i_t dupl); -psb_i_t psb_c_zsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); -psb_i_t psb_c_zmat_name_print(psb_c_zspmat *mh, char *name); -psb_i_t psb_c_zvect_set_scal(psb_c_zvector *xh, psb_z_t val); -psb_i_t psb_c_zvect_set_vect(psb_c_zvector *xh, psb_z_t *val, psb_i_t n); - -/* psblas computational routines */ -psb_z_t psb_c_zgedot(psb_c_zvector *xh, psb_c_zvector *yh, psb_c_descriptor *cdh); -psb_d_t psb_c_zgenrm2(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_zgeamax(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_zgeasum(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_zgenrmi(psb_c_zspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_zgeaxpby(psb_z_t alpha, psb_c_zvector *xh, - psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_zgeaxpbyz(psb_z_t alpha, psb_c_zvector *xh, - psb_z_t beta, psb_c_zvector *yh, psb_c_zvector *zh, psb_c_descriptor *cdh); -psb_i_t psb_c_zspmm(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, - psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_zspmm_opt(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, - psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh, - char *trans, bool doswap); -psb_i_t psb_c_zspsm(psb_z_t alpha, psb_c_zspmat *th, psb_c_zvector *xh, - psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); -/* Additional computational routines */ -psb_i_t psb_c_zgemlt(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_zgemlt2(psb_z_t alpha, psb_c_zvector *xh, psb_c_zvector *yh, psb_z_t beta, psb_c_zvector *zh, psb_c_descriptor *cdh); -psb_i_t psb_c_zgediv(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_zgediv_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_zgediv2(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_zvector *zh,psb_c_descriptor *cdh); -psb_i_t psb_c_zgediv2_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_zvector *zh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_zgeinv(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_zgeinv_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh, bool flag); -psb_i_t psb_c_zgeabs(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); -psb_i_t psb_c_zgecmp(psb_c_zvector *xh,psb_d_t ch,psb_c_zvector *zh,psb_c_descriptor *cdh); -bool psb_c_zgecmpmat(psb_c_zspmat *ah,psb_c_zspmat *bh,psb_d_t tol,psb_c_descriptor *cdh); -bool psb_c_zgecmpmat_val(psb_c_zspmat *ah,psb_z_t val,psb_d_t tol,psb_c_descriptor *cdh); -psb_i_t psb_c_zgeaddconst(psb_c_zvector *xh,psb_z_t bh,psb_c_zvector *zh,psb_c_descriptor *cdh); -psb_d_t psb_c_zgenrm2_weight(psb_c_zvector *xh,psb_c_zvector *wh,psb_c_descriptor *cdh); -psb_d_t psb_c_zgenrm2_weightmask(psb_c_zvector *xh,psb_c_zvector *wh,psb_c_zvector *idvh,psb_c_descriptor *cdh); -psb_i_t psb_c_zspscal(psb_z_t alpha, psb_c_zspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_zspscalpid(psb_z_t alpha, psb_c_zspmat *ah, psb_c_descriptor *cdh); -psb_i_t psb_c_zspaxpby(psb_z_t alpha, psb_c_zspmat *ah, psb_z_t beta, psb_c_zspmat *bh, psb_c_descriptor *cdh); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif From 356bdba5c7b46119bfb956e6f5b3ebfe314c4394 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 13 Mar 2026 14:07:57 +0100 Subject: [PATCH 111/175] Fix intent on base_vect%reinit --- base/modules/serial/psb_c_base_vect_mod.F90 | 2 +- base/modules/serial/psb_d_base_vect_mod.F90 | 2 +- base/modules/serial/psb_i_base_vect_mod.F90 | 2 +- base/modules/serial/psb_l_base_vect_mod.F90 | 2 +- base/modules/serial/psb_s_base_vect_mod.F90 | 2 +- base/modules/serial/psb_z_base_vect_mod.F90 | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index a30e25470..3fc0b87bf 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -422,7 +422,7 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_c_base_vect_type), intent(out) :: x + class(psb_c_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 1e6f45752..22e57cd83 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -429,7 +429,7 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_d_base_vect_type), intent(out) :: x + class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 21413168b..e4e19a9d9 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -355,7 +355,7 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_i_base_vect_type), intent(out) :: x + class(psb_i_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index 874c097cf..91ed2968d 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -356,7 +356,7 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_l_base_vect_type), intent(out) :: x + class(psb_l_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index ef35fc8a1..b448d54ed 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -429,7 +429,7 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_s_base_vect_type), intent(out) :: x + class(psb_s_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 141974086..79d45a9ce 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -422,7 +422,7 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_z_base_vect_type), intent(out) :: x + class(psb_z_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ From ab2c5edcd5b93811cf39bc92848c7b69fd5c6c15 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 16 Mar 2026 12:31:29 +0100 Subject: [PATCH 112/175] Fix module subroutine declaration in swapdata. --- base/comm/internals/psi_cswapdata.F90 | 2 +- base/comm/internals/psi_dswapdata.F90 | 2 +- base/comm/internals/psi_iswapdata.F90 | 2 +- base/comm/internals/psi_lswapdata.F90 | 2 +- base/comm/internals/psi_sswapdata.F90 | 2 +- base/comm/internals/psi_zswapdata.F90 | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index 4d6be4188..54de16ae7 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -92,7 +92,7 @@ submodule (psi_c_comm_v_mod) psi_c_swapdata_impl use psb_base_mod contains - subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD use mpi diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 890cfc30d..2ee44807f 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -92,7 +92,7 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_base_mod contains - subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD use mpi diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index 23c6d1da6..38ceee873 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -92,7 +92,7 @@ submodule (psi_i_comm_v_mod) psi_i_swapdata_impl use psb_base_mod contains - subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD use mpi diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index 7d9e13a44..017590bb2 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -92,7 +92,7 @@ submodule (psi_l_comm_v_mod) psi_l_swapdata_impl use psb_base_mod contains - subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD use mpi diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index bd3e6992c..6c947fd70 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -92,7 +92,7 @@ submodule (psi_s_comm_v_mod) psi_s_swapdata_impl use psb_base_mod contains - subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD use mpi diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index 93fc1edfb..2f9b89c39 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -92,7 +92,7 @@ submodule (psi_z_comm_v_mod) psi_z_swapdata_impl use psb_base_mod contains - subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD use mpi From 5c87c78e693b6c247d248759941645f38c848740 Mon Sep 17 00:00:00 2001 From: federicamontes Date: Mon, 16 Mar 2026 16:01:51 +0100 Subject: [PATCH 113/175] feature(communication neigbor a2av) refactored psi_d_comm_v_mod: - added comments --- base/modules/comm/psi_d_comm_v_mod.f90 | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index 5893d76bb..ca5023b37 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -36,6 +36,9 @@ module psi_d_comm_v_mod use psb_d_base_multivect_mod, only : psb_d_base_multivect_type interface psi_swapdata + ! --------------------------------------------------------------- + ! Upper call in order to populate idx using desc_a%get_list_p + ! --------------------------------------------------------------- module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -54,6 +57,11 @@ module psi_d_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_multivect + + ! --------------------------------------------------------------- + ! Wrapper that calls different communications schemes depending on + ! flag variable + ! --------------------------------------------------------------- module subroutine psi_dswap_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt @@ -80,6 +88,9 @@ module psi_d_comm_v_mod interface psi_swaptran + ! --------------------------------------------------------------- + ! Upper call in order to populate idx using desc_a%get_list_p + ! --------------------------------------------------------------- module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info @@ -98,6 +109,13 @@ module psi_d_comm_v_mod type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_multivect + + ! --------------------------------------------------------------- + + ! --------------------------------------------------------------- + ! Wrapper that calls different communications schemes depending on + ! flag variable + ! --------------------------------------------------------------- module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt @@ -120,6 +138,7 @@ module psi_d_comm_v_mod class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_dtran_vidx_multivect + ! --------------------------------------------------------------- end interface psi_swaptran interface psi_ovrl_upd From 6c4f3e9f29c2e58a7efd0824f84a297e59d08250 Mon Sep 17 00:00:00 2001 From: federicamontes Date: Mon, 16 Mar 2026 16:05:16 +0100 Subject: [PATCH 114/175] feature(communication neighbor a2av) refactored psi_dswapdata: - added module support for psi_dswapdata_vect - added communicator get in psi_dswapdata_vect - refactored psi_dswapdata_vect as a wrapper that calls either baseline comm (Isend/Irecv) or neighbor a2av - added private routines (without keyworkd module) for baseline communication and neighbor a2av communication - added same support for multivectors TODO: delete work as parameter from psi_dswapdata_vect (?) --- base/comm/internals/psi_dswapdata.F90 | 1363 +++++++++++++++++-------- 1 file changed, 941 insertions(+), 422 deletions(-) diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 890cfc30d..dd208d57a 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -92,7 +92,7 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_base_mod contains - subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD use mpi @@ -122,6 +122,8 @@ contains call psb_erractionsave(err_act) ctxt = desc_a%get_context() + + ! get communication from context -- this can be eliminated since it is not passed to psi_swapdata icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then @@ -160,19 +162,21 @@ contains end subroutine psi_dswapdata_vect - ! - ! - ! Subroutine: psi_dswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! +! +! +! Subroutine: psi_dswap_vidx_vect +! Data exchange among processes. +! +! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods +! of vectors. +! +! The real workhorse: the outer routine will only choose the index list +! this one takes the index list and does the actual exchange. +! +! This is a wrapper function that calls different communication schemes depending +! on the flag variable. +! +! module subroutine psi_dswap_vidx_vect(ctxt,flag,beta,y,idx, & & totxch,totsnd,totrcv,work,info) @@ -184,233 +188,492 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_) :: icomm - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) + type(psb_ctxt_type), intent(in) :: ctxt + !integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + ! local variable used for get the communicator + integer(psb_mpk_) :: icomm + + ! error handling variables + integer(psb_ipk_) :: err_act + integer(psb_mpk_) :: me, np + character(len=30) :: name + + + info=psb_success_ + name='psi_dswap_vidx_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + icomm = ctxt%get_mpic() + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + + if (baseline) then + call psi_dswap_baseline_vect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') goto 9999 - endif - icomm = ctxt%get_mpic() + end if + else if (neighbor_a2av) then + call psi_dswap_neighbor_topology_vect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if + + call psb_erractionrestore(err_act) + return - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_double_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) - pnti = pnti + nerv + nesd + 3 - end do +9999 call psb_error_handler(ctxt,err_act) - ! - ! Then wait - ! - call y%device_wait() + return + end subroutine psi_dswap_vidx_vect - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if +! +! subroutine psi_dswap_baseline_vect +! This performs Isend/Irecv as a baseline communication mode +! +subroutine psi_dswap_baseline_vect(ctxt,icomm,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - pnti = pnti + nerv + nesd + 3 - end do - end if +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti, n + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info = psb_success_ + name = 'psi_dswap_baseline_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then ! - ! No matching send? Something is wrong.... + ! Unfinished communication? Something is wrong.... ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + call psb_errpush(info,name,a_err='Unfinished communication? Something is wrong....') goto 9999 end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + idx_pt = snd_pt + call y%gth(idx_pt,nesd,idx) + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + pnti = pnti + nerv + nesd + 3 + end do + end if + + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + end if + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) + end if + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,idx,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' + end if - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_dswap_baseline_vect + + + +subroutine psi_dswap_neighbor_topology_vect(ctxt,icomm,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_dswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, totxch, totsnd, totrcv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') goto 9999 end if - if (debug) write(*,*) me,' done' end if + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv - call psb_erractionrestore(err_act) - return + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return - end subroutine psi_dswap_vidx_vect + return +end subroutine psi_dswap_neighbor_topology_vect + + ! ! @@ -511,237 +774,493 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + !integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: y + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + ! local variable used to get communicator + integer(psb_mpk_) :: icomm + + ! error handling variables + integer(psb_ipk_) :: err_act + integer(psb_mpk_) :: me, np + character(len=30) :: name + + + info=psb_success_ + name='psi_dswap_vidx_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + icomm = ctxt%get_mpic() + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + + if (baseline) then + call psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if + + call psb_erractionrestore(err_act) + return - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_) :: icomm - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name +9999 call psb_error_handler(ctxt,err_act) - info=psb_success_ - name='psi_swap_datav' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - icomm = ctxt%get_mpic() + return + end subroutine psi_dswap_vidx_multivect - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_double_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Then wait for device - ! - call y%device_wait() - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if +subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: y + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + & snd_pt, rcv_pt, pnti + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info = psb_success_ + name = 'psi_dswap_baseline_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + n = y%get_ncols() + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + totrcv_ = totrcv * n + totsnd_ = totsnd * n + + call idx%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then ! - ! No matching send? Something is wrong.... + ! Unfinished communication? Something is wrong.... ! info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if + end if + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(idx%v),info) + call y%new_comid(totxch,info) + y%comid = mpi_request_null + call psb_realloc(totxch,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,idx) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if + + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(totxch,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + end if + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = totrcv_+1 + rcv_pt = 1 + do i=1, totxch + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + y%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' + end if - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_dswap_baseline_vidx_multivect + + + +subroutine psi_dswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: y + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_dswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, totxch, totsnd, totrcv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') goto 9999 end if - if (debug) write(*,*) me,' done' end if + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv - call psb_erractionrestore(err_act) - return + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return - end subroutine psi_dswap_vidx_multivect + return +end subroutine psi_dswap_neighbor_topology_multivect + + end submodule psi_d_swapdata_impl From 4ee8b847e0258da6ee335358009c67e54e21032f Mon Sep 17 00:00:00 2001 From: federicamontes Date: Mon, 16 Mar 2026 16:09:25 +0100 Subject: [PATCH 115/175] feature(neighbor a2av communication single precision) added support for neighbor a2av in single precision for vect and multivect --- base/comm/internals/psi_sswapdata.F90 | 523 +++++++++++++++++++++++++- 1 file changed, 520 insertions(+), 3 deletions(-) diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index bd3e6992c..ea0a2c0e5 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -92,7 +92,7 @@ submodule (psi_s_comm_v_mod) psi_s_swapdata_impl use psb_base_mod contains - subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) #ifdef PSB_MPI_MOD use mpi @@ -176,6 +176,104 @@ contains module subroutine psi_sswap_vidx_vect(ctxt,flag,beta,y,idx, & & totxch,totsnd,totrcv,work,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + !integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type) :: y + real(psb_spk_), intent(in) :: beta + real(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + ! local variable used for get the communicator + integer(psb_mpk_) :: icomm + + ! error handling variables + integer(psb_ipk_) :: err_act + integer(psb_mpk_) :: me, np + character(len=30) :: name + + + info=psb_success_ + name='psi_sswap_vidx_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + icomm = ctxt%get_mpic() + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + + if (baseline) then + call psi_sswap_baseline_vect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_sswap_neighbor_topology_vect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + + end subroutine psi_sswap_vidx_vect + + + +! +! subroutine psi_sswap_baseline_vect +! This performs Isend/Irecv as a baseline communication mode +! +subroutine psi_sswap_baseline_vect(ctxt,icomm,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + #ifdef PSB_MPI_MOD use mpi #endif @@ -410,7 +508,171 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_sswap_vidx_vect + +end subroutine psi_sswap_baseline_vect + + +subroutine psi_sswap_neighbor_topology_vect(ctxt,icomm,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type) :: y + real(psb_spk_), intent(in) :: beta + real(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_sswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, totxch, totsnd, totrcv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_spk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_sswap_neighbor_topology_vect + + + ! ! @@ -502,6 +764,99 @@ contains ! module subroutine psi_sswap_vidx_multivect(ctxt,flag,beta,y,idx, & & totxch,totsnd,totrcv,work,info) + #ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + !integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: y + real(psb_spk_), intent(in) :: beta + real(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + ! local variable used to get communicator + integer(psb_mpk_) :: icomm + + ! error handling variables + integer(psb_ipk_) :: err_act + integer(psb_mpk_) :: me, np + character(len=30) :: name + + + info=psb_success_ + name='psi_sswap_vidx_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + icomm = ctxt%get_mpic() + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + + if (baseline) then + call psi_sswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_sswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + + end subroutine psi_sswap_vidx_multivect + + + + +subroutine psi_sswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) #ifdef PSB_MPI_MOD use mpi @@ -742,6 +1097,168 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_sswap_vidx_multivect +end subroutine psi_sswap_baseline_vidx_multivect + + +subroutine psi_sswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx, & + & totxch,totsnd,totrcv,work,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: y + real(psb_spk_), intent(in) :: beta + real(psb_spk_), target :: work(:) + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_sswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, totxch, totsnd, totrcv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_spk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_sswap_neighbor_topology_multivect + + end submodule psi_s_swapdata_impl From e7e8a6937376c3d93a00ffc23160d00f98500785 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Tue, 17 Mar 2026 11:02:16 +0100 Subject: [PATCH 116/175] [FIX] Fixed compilation for psi_dswapdata routine --- base/comm/internals/psi_dswapdata.F90 | 1115 +++++----- base/comm/internals/psi_sswapdata.F90 | 11 +- base/comm/internals/psi_sswaptran.F90 | 8 +- base/comm/psb_dhalo.f90 | 22 +- base/modules/Makefile | 6 +- .../comm/psb_neighbor_topology_mod.F90 | 422 ++++ base/modules/comm/psi_d_comm_v_mod.f90 | 50 +- base/modules/comm/psi_s_comm_v_mod.f90 | 16 +- base/modules/desc/psb_desc_const_mod.f90 | 10 +- base/modules/psb_const_mod.F90 | 5 +- base/modules/serial/psb_d_base_vect_mod.F90 | 97 +- base/modules/serial/psb_s_base_vect_mod.F90 | 8 + log.txt | 1832 +++++++++++++++++ 13 files changed, 2888 insertions(+), 714 deletions(-) create mode 100644 base/modules/comm/psb_neighbor_topology_mod.F90 create mode 100644 log.txt diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index dd208d57a..c5c043e65 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -74,11 +74,9 @@ ! ! ! n - integer Number of columns in Y -! beta - real Choose overwrite or sum. +! beta - real Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - real Buffer space. If not sufficient, will do -! our own internal allocation. +! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -90,6 +88,7 @@ ! ! submodule (psi_d_comm_v_mod) psi_d_swapdata_impl + use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod contains module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) @@ -104,27 +103,33 @@ contains integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type), target :: desc_a + class(psb_d_base_vect_type) :: y + real(psb_dpk_) :: beta + type(psb_desc_type), target :: desc_a + real(psb_dpk_), optional, target :: work(:) integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + ! error handling variables + integer(psb_ipk_) :: err_act + integer(psb_mpk_) :: me, np + character(len=30) :: name + + info = psb_success_ + name = 'psi_dswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - ! get communication from context -- this can be eliminated since it is not passed to psi_swapdata - icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -144,138 +149,58 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psi_dswapdata_vect - - -! -! -! Subroutine: psi_dswap_vidx_vect -! Data exchange among processes. -! -! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods -! of vectors. -! -! The real workhorse: the outer routine will only choose the index list -! this one takes the index list and does the actual exchange. -! -! This is a wrapper function that calls different communication schemes depending -! on the flag variable. -! -! - module subroutine psi_dswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - -#ifdef PSB_MPI_MOD - use mpi -#endif - implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif - - type(psb_ctxt_type), intent(in) :: ctxt - !integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_), intent(in) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait - ! local variable used for get the communicator - integer(psb_mpk_) :: icomm - - ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name - - - info=psb_success_ - name='psi_dswap_vidx_vect' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - - icomm = ctxt%get_mpic() - - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 - end if - - - if (baseline) then - call psi_dswap_baseline_vect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') goto 9999 end if - else if (neighbor_a2av) then - call psi_dswap_neighbor_topology_vect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + + if (baseline) then + call psi_dswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if - - call psb_erractionrestore(err_act) - return -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psi_dswap_vidx_vect - - -! -! subroutine psi_dswap_baseline_vect -! This performs Isend/Irecv as a baseline communication mode -! -subroutine psi_dswap_baseline_vect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dswapdata_vect + ! + ! subroutine psi_dswap_baseline_vect + ! This performs Isend/Irecv as a baseline communication mode + ! + subroutine psi_dswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -284,239 +209,238 @@ subroutine psi_dswap_baseline_vect(ctxt,icomm,flag,beta,y,idx, & include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_), intent(in) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info = psb_success_ - name = 'psi_dswap_baseline_vect' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info = psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv + integer(psb_mpk_), allocatable :: prcid(:) + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti, n + logical :: swap_mpi, swap_sync, swap_send, swap_recv,& + & albf,do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + info = psb_success_ + name = 'psi_dswap_baseline_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() + icomm = ctxt%get_mpic() - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Unfinished communication? Something is wrong....') - goto 9999 + n=1 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + + do_send = swap_mpi .or. swap_sync .or. swap_send + do_recv = swap_mpi .or. swap_sync .or. swap_recv + + total_recv_ = total_recv * n + total_send_ = total_send * n + call comm_indexes%sync() + + if (debug) write(*,*) me,'Internal buffer' + if (do_send) then + if (allocated(y%comid)) then + if (any(y%comid /= mpi_request_null)) then + ! + ! Unfinished communication? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Unfinished communication? Something is wrong....') + goto 9999 + end if end if - end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + if (debug) write(*,*) me,'do_send start' + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) + y%comid = mpi_request_null + call psb_realloc(num_neighbors,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + + rcv_pt = 1+pnti+psb_n_elem_recv_ + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= me)) then + if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,y%comid(i,2),iret) + end if + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) me,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + idx_pt = snd_pt + call y%gth(idx_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do - rcv_pt = 1+pnti+psb_n_elem_recv_ - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_double_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) - pnti = pnti + nerv + nesd + 3 - end do + ! + ! Then wait + ! + call y%device_wait() - ! - ! Then wait - ! - call y%device_wait() + if (debug) write(*,*) me,' isend' + ! + ! Then send + ! - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((nesd>0).and.(proc_to_comm /= me)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,y%comid(i,1),iret) + end if - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) - end if + pnti = pnti + nerv + nesd + 3 + end do + end if - if(iret /= mpi_success) then + if (do_recv) then + if (debug) write(*,*) me,' do_Recv' + if (.not.allocated(y%comid)) then + ! + ! No matching send? Something is wrong.... + ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 - end if - call psb_realloc(totxch,prcid,info) - - if (debug) write(*,*) me,' wait' - pnti = 1 - p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call psb_realloc(num_neighbors,prcid,info) + + if (debug) write(*,*) me,' wait' + pnti = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (proc_to_comm /= me)then + if (nesd>0) then + call mpi_wait(y%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (nerv>0) then + call mpi_wait(y%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if + else if (proc_to_comm == me) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd - end if - y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) - end if - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = 1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - snd_pt = 1+pnti+nerv+psb_n_elem_send_ - rcv_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for everybody, clean up - ! - y%comid = mpi_request_null + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) me,' scatter' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)me,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for everybody, clean up + ! + y%comid = mpi_request_null - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + ! + ! Then wait for device + ! + if (debug) write(*,*) me,' wait' + call y%device_wait() + if (debug) write(*,*) me,' free buffer' + call y%maybe_free_buffer(info) + if (info == 0) call y%free_comid(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) me,' done' end if - if (debug) write(*,*) me,' done' - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dswap_baseline_vect - + return + end subroutine psi_dswap_baseline_vect -subroutine psi_dswap_neighbor_topology_vect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + subroutine psi_dswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -525,153 +449,151 @@ subroutine psi_dswap_neighbor_topology_vect(ctxt,icomm,flag,beta,y,idx, & include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_), intent(in) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name - + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: y + real(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - info = psb_success_ - name = 'psi_dswap_nbr_vect' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 - call idx%sync() + info = psb_success_ + name = 'psi_dswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif - ! --------------------------------------------------------- - ! START phase: build topology (if needed), gather, post MPI - ! --------------------------------------------------------- - if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(idx%v, totxch, totsnd, totrcv, & - & ctxt, icomm, info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') - goto 9999 + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if end if - end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv - ! Buffer layout: - ! combuf(1 : total_send) = send area - ! combuf(total_send+1 : total_send+total_recv) = recv area - buffer_size = topology_total_send + topology_total_recv + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - y%communication_handle = mpi_request_null - - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) - - ! Wait for device (important for GPU subclasses) - call y%device_wait() - - ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if - end if ! do_start + end if ! do_start - ! --------------------------------------------------------- - ! WAIT phase: complete MPI, scatter received data - ! --------------------------------------------------------- - if (do_wait) then + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then - if (y%communication_handle == mpi_request_null) then - ! No matching start? Something is wrong - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 - end if + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv - ! Wait for the non-blocking collective to complete - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if - ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) - ! Clean up - y%communication_handle = mpi_request_null - call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - if (debug) write(*,*) me,' nbr_vect: done' + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' - end if ! do_wait + end if ! do_wait - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_dswap_neighbor_topology_vect + return + end subroutine psi_dswap_neighbor_topology_vect @@ -694,21 +616,25 @@ end subroutine psi_dswap_neighbor_topology_vect integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type), target :: desc_a + class(psb_d_base_multivect_type) :: y + real(psb_dpk_) :: beta + type(psb_desc_type), target :: desc_a + real(psb_dpk_), optional, target :: work(:) integer(psb_ipk_), optional :: data + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + ! locals type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_dswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -732,132 +658,59 @@ end subroutine psi_dswap_neighbor_topology_vect data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psi_dswapdata_multivect - - - ! - ! - ! Subroutine: psi_dswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_dswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) - -#ifdef PSB_MPI_MOD - use mpi -#endif - implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif - - type(psb_ctxt_type), intent(in) :: ctxt - !integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_), intent(in) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av - - ! local variable used to get communicator - integer(psb_mpk_) :: icomm - - ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name - - - info=psb_success_ - name='psi_dswap_vidx_multivect' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - - icomm = ctxt%get_mpic() + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 - end if + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait - - if (baseline) then - call psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') goto 9999 end if - else if (neighbor_a2av) then - call psi_dswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + + if (baseline) then + call psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return - end subroutine psi_dswap_vidx_multivect + return + end subroutine psi_dswapdata_multivect -subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) +subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD @@ -869,20 +722,19 @@ subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm + integer(psb_mpk_) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_multivect_type) :: y real(psb_dpk_), intent(in) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -908,10 +760,10 @@ subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -926,18 +778,18 @@ subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt @@ -955,13 +807,13 @@ subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -978,13 +830,13 @@ subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if ((nesd>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(snd_pt),n*nesd,& @@ -1013,17 +865,17 @@ subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nesd>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -1056,17 +908,17 @@ subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -1098,13 +950,11 @@ subroutine psi_dswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_dswap_baseline_vidx_multivect - +end subroutine psi_dswap_baseline_multivect -subroutine psi_dswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) +subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -1114,14 +964,13 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx, & #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm + integer(psb_mpk_) :: icomm integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_d_base_multivect_type) :: y real(psb_dpk_), intent(in) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv ! locals integer(psb_mpk_) :: np, me @@ -1145,7 +994,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx, & do_start = iand(flag,psb_swap_start_) /= 0 do_wait = iand(flag,psb_swap_wait_) /= 0 - call idx%sync() + call comm_indexes%sync() ! --------------------------------------------------------- ! START phase: build topology (if needed), gather, post MPI @@ -1155,7 +1004,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx, & ! Lazy initialization: build the topology on first call if (.not. y%neighbor_topology%is_initialized) then if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(idx%v, totxch, totsnd, totrcv, & + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & & ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index ea0a2c0e5..c4cfbf053 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -90,6 +90,7 @@ ! ! submodule (psi_s_comm_v_mod) psi_s_swapdata_impl + use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod contains module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) @@ -105,7 +106,7 @@ contains integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -694,7 +695,7 @@ end subroutine psi_sswap_neighbor_topology_vect integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -764,7 +765,7 @@ end subroutine psi_sswap_neighbor_topology_vect ! module subroutine psi_sswap_vidx_multivect(ctxt,flag,beta,y,idx, & & totxch,totsnd,totrcv,work,info) - #ifdef PSB_MPI_MOD +#ifdef PSB_MPI_MOD use mpi #endif implicit none @@ -1096,8 +1097,8 @@ subroutine psi_sswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx, & 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sswap_baseline_vidx_multivect + return +end subroutine psi_sswap_baseline_multivect subroutine psi_sswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx, & diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index afb208e89..e1fa3570b 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -107,7 +107,7 @@ contains integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) type(psb_desc_type),target :: desc_a integer(psb_ipk_), optional :: data @@ -189,7 +189,7 @@ contains integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -443,7 +443,7 @@ contains integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) type(psb_desc_type),target :: desc_a integer(psb_ipk_), optional :: data @@ -526,7 +526,7 @@ contains integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv diff --git a/base/comm/psb_dhalo.f90 b/base/comm/psb_dhalo.f90 index 080631e14..0b3b31ed4 100644 --- a/base/comm/psb_dhalo.f90 +++ b/base/comm/psb_dhalo.f90 @@ -52,17 +52,17 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) +subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalo_vect use psi_mod implicit none - type(psb_d_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a + type(psb_d_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), target, optional, intent(inout) :: work(:) + real(psb_dpk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt @@ -74,8 +74,8 @@ subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) character(len=20) :: name, ch_err logical :: aliw - name='psb_dhalov' - info=psb_success_ + name = 'psb_dhalo_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -118,7 +118,7 @@ subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) + imode = IOR(psb_swap_send_,psb_swap_recv_) ! default base communication scheme Isend/Irecv endif if ((info == 0).and.(lldx= 3.0). +! +! The topology is stored inside the vector type (psb_d_base_vect_type) +! and lazily created on the first psi_swapdata call with the +! neighbor-alltoallv communication mode. Once built it is reused +! for every subsequent halo exchange, avoiding the per-call overhead +! of re-scanning the index list and allocating temporary arrays. +! +! The graph communicator and per-neighbor counts/displacements +! are built once and reused. +! +! The gather/scatter index arrays (send_indexes, recv_indexes) record +! which local vector positions must be packed / unpacked. +! +module psb_neighbor_topology_mod + use psb_const_mod + use psb_desc_const_mod + use psb_error_mod + ! + ! Only import mpi_comm_null here (needed for type default initializer). + ! Full MPI access is done inside each contained subroutine so that + ! MPI symbols do NOT leak into modules that use psb_neighbor_topology_mod. + ! +#ifdef PSB_MPI_MOD + use mpi, only: mpi_comm_null +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type :: psb_neighbor_topology_type + ! + ! MPI dist-graph communicator (only communicating neighbors). + ! + integer(psb_mpk_) :: graph_comm = mpi_comm_null + ! + ! Number of neighbors (processes I exchange with, excluding self). + ! + integer(psb_ipk_) :: num_neighbors = 0 + ! + ! Per-neighbor send/recv counts and displacements (units of + ! single elements; for n-column multivectors multiply by n). + ! send_counts(i) = number of elements sent to i-th neighbor + ! recv_counts(i) = number of elements received from i-th neighbor + ! send_displs(i) = displacement into contiguous send buffer + ! recv_displs(i) = displacement into contiguous recv buffer + ! + integer(psb_mpk_), allocatable :: send_counts(:), recv_counts(:) + integer(psb_mpk_), allocatable :: send_displs(:), recv_displs(:) + ! + ! Gather indexes: the k-th element of the send buffer is + ! y%v( send_indexes(k) ) + ! Scatter indexes: the k-th element of the recv buffer goes to + ! y%v( recv_indexes(k) ) + ! + integer(psb_ipk_), allocatable :: send_indexes(:) + integer(psb_ipk_), allocatable :: recv_indexes(:) + ! + ! Total number of elements to send / receive (per single column), + ! excluding self-exchange. + ! + integer(psb_ipk_) :: total_send = 0 + integer(psb_ipk_) :: total_recv = 0 + ! + + ! Initialization flag. + ! + logical :: is_initialized = .false. + contains + procedure, pass(topology) :: init => neighbor_topology_init + procedure, pass(topology) :: free => neighbor_topology_free + procedure, pass(topology) :: sizeof => neighbor_topology_sizeof + end type psb_neighbor_topology_type + +contains + + ! --------------------------------------------------------------- + ! neighbor_topology_init + ! + ! Parse the halo index list (obtained via desc_a%get_list_p) + ! and build: + ! - MPI dist-graph communicator with only the true neighbors + ! - per-neighbor send/recv counts and displacements + ! - contiguous gather/scatter index arrays + ! + ! The topology is stored inside the vector and lazily built + ! on the first psi_swapdata call that uses the neighbor-alltoallv + ! communication mode. + ! + ! Arguments: + ! topology - the persistent state (output, intent inout) + ! halo_index - halo_index array (from get_list_p, intent in) + ! num_neighbors - number of exchanges (from get_list_p) + ! total_send_elems - total send count (from get_list_p) + ! total_recv_elems - total recv count (from get_list_p) + ! ctxt - PSBLAS context + ! icomm - MPI communicator + ! info - error code (output) + ! --------------------------------------------------------------- + subroutine neighbor_topology_init(topology, halo_index, num_neighbors, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + class(psb_neighbor_topology_type), intent(inout) :: topology + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_neighbors, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: iret + integer(psb_ipk_) :: i, k, idx_ptr, num_elem_recv, num_elem_send, partner_proc + integer(psb_ipk_) :: neighbor_count, send_offset, recv_offset + integer(psb_mpk_), allocatable :: source_ranks(:), dest_ranks(:) + integer(psb_mpk_), allocatable :: source_weights(:), dest_weights(:) + integer(psb_mpk_) :: in_degree, out_degree + character(len=40) :: name + integer(psb_ipk_) :: proc_id + integer(psb_ipk_) :: position + integer(psb_ipk_) :: err_act + + info = psb_success_ + name = 'neighbor_topology_init' + call psb_erractionsave(err_act) + + ! Clean up any previous state + call topology%free(info) + + ! ---------------------------------------------------------- + ! First pass: count neighbors (excluding self) and totals + ! ---------------------------------------------------------- + topology%num_neighbors = 0 + topology%total_send = 0 + topology%total_recv = 0 + + if(size(halo_index) < 1) then + call psb_errpush(psb_err_topology_invalid_args_,name) + goto 9999 + end if + + allocate(source_ranks(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Source ranks allocation failed') + goto 9999 + end if + + allocate(dest_ranks(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Destination ranks allocation failed') + goto 9999 + end if + + allocate(source_weights(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Source weights allocation failed') + goto 9999 + end if + + allocate(dest_weights(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Destination weights allocation failed') + goto 9999 + end if + + allocate(topology%send_counts(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Send counts allocation failed') + goto 9999 + end if + + allocate(topology%recv_counts(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Receive counts allocation failed') + goto 9999 + end if + + allocate(topology%send_displs(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Send displacements allocation failed') + goto 9999 + end if + + allocate(topology%recv_displs(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Receive displacements allocation failed') + goto 9999 + end if + + + ! ----------------------------------------------------------- + ! Allocate the gather/scatter index arrays + ! ----------------------------------------------------------- + allocate(topology%send_indexes(total_send_elems), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Send indexes allocation failed') + goto 9999 + end if + + allocate(topology%recv_indexes(total_recv_elems), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Recv indexes allocation failed') + goto 9999 + end if + + ! ----------------------------------------------------------- + ! Fill neighbor ranks, weights, counts, displacements, + ! and gather/scatter index arrays. + ! + ! The halo_index layout per neighbor (starting at position): + ! position + 0 : process id + ! position + 1 : nerv (num recv elements) + ! position + 2 .. +1+nerv : recv element indexes + ! position + 2+nerv : nesd (num send elements) + ! position + 3+nerv .. +2+nerv+nesd : send element indexes + ! Total stride per neighbor: nerv + nesd + 3 + ! ----------------------------------------------------------- + send_offset = 0 + recv_offset = 0 + position = 1 + + do i = 1, num_neighbors + proc_id = halo_index(position) + num_elem_recv = halo_index(position + 1) + num_elem_send = halo_index(position + num_elem_recv + 2) + + ! Fill source/destination ranks and weights (weights are all 1 for now) + source_ranks(i) = int(proc_id, psb_mpk_) + dest_ranks(i) = int(proc_id, psb_mpk_) + source_weights(i) = 1 + dest_weights(i) = 1 + + ! Counts and displacements (displs set BEFORE accumulating offset) + topology%send_counts(i) = int(num_elem_send, psb_mpk_) + topology%recv_counts(i) = int(num_elem_recv, psb_mpk_) + topology%send_displs(i) = int(send_offset, psb_mpk_) + topology%recv_displs(i) = int(recv_offset, psb_mpk_) + + ! Fill recv_indexes from halo_index(position+2 .. position+1+nerv) + do k = 1, num_elem_recv + topology%recv_indexes(recv_offset + k) = halo_index(position + psb_elem_recv_ + k - 1) + end do + + ! Fill send_indexes from halo_index(position+3+nerv .. position+2+nerv+nesd) + do k = 1, num_elem_send + topology%send_indexes(send_offset + k) = halo_index(position + num_elem_recv + psb_elem_send_ + k - 1) + end do + + send_offset = send_offset + num_elem_send + recv_offset = recv_offset + num_elem_recv + + topology%num_neighbors = topology%num_neighbors + 1 + topology%total_send = topology%total_send + num_elem_send + topology%total_recv = topology%total_recv + num_elem_recv + + position = position + num_elem_recv + num_elem_send + 3 + end do + + ! ---------------------------------------------------------- + ! Sanity check: the totals computed from the neighbor list + ! should match the totals returned by get_list_p. + ! ---------------------------------------------------------- + if (topology%total_send /= total_send_elems) then + info = psb_err_topology_args_mismatch_ + call psb_errpush(info, name, a_err='Send elements mismatch') + goto 9999 + end if + + if (topology%total_recv /= total_recv_elems) then + info = psb_err_topology_args_mismatch_ + call psb_errpush(info, name, a_err='Receive elements mismatch') + goto 9999 + end if + + if(topology%num_neighbors /= num_neighbors) then + info = psb_err_topology_args_mismatch_ + call psb_errpush(info, name, a_err='Number of neighbors mismatch') + goto 9999 + end if + + + ! ---------------------------------------------------------- + ! Build the dist-graph communicator + ! ---------------------------------------------------------- + in_degree = topology%num_neighbors !! Just for clarity + out_degree = topology%num_neighbors !! Just for clarity + + call mpi_dist_graph_create_adjacent(icomm, & + & in_degree, source_ranks, source_weights, & + & out_degree, dest_ranks, dest_weights, & + & mpi_info_null, .false., & ! Check this line for optimizations + & topology%graph_comm, info) + if (info /= mpi_success) then + info = psb_err_topology_error_ + call psb_errpush(info, name) + goto 9999 + end if + + topology%is_initialized = .true. + + ! TODO: Is it safe to deallocate these temporary arrays here, or do we need them for the gather/scatter indexes? + ! deallocate(source_ranks, dest_ranks, source_weights, dest_weights) + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine neighbor_topology_init + + + ! --------------------------------------------------------------- + ! neighbor_topology_free + ! Release all resources held by the persistent state. + ! --------------------------------------------------------------- + subroutine neighbor_topology_free(topology, info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + class(psb_neighbor_topology_type), intent(inout) :: topology + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: iret + + info = psb_success_ + + if (topology%graph_comm /= mpi_comm_null) then + call mpi_comm_free(topology%graph_comm, iret) + topology%graph_comm = mpi_comm_null + end if + + if (allocated(topology%send_counts)) deallocate(topology%send_counts) + if (allocated(topology%recv_counts)) deallocate(topology%recv_counts) + if (allocated(topology%send_displs)) deallocate(topology%send_displs) + if (allocated(topology%recv_displs)) deallocate(topology%recv_displs) + if (allocated(topology%send_indexes)) deallocate(topology%send_indexes) + if (allocated(topology%recv_indexes)) deallocate(topology%recv_indexes) + + topology%num_neighbors = 0 + topology%total_send = 0 + topology%total_recv = 0 + topology%is_initialized = .false. + + end subroutine neighbor_topology_free + + + ! --------------------------------------------------------------- + ! neighbor_topology_sizeof + ! Return approximate memory footprint in bytes. + ! --------------------------------------------------------------- + function neighbor_topology_sizeof(topology) result(val) + implicit none + class(psb_neighbor_topology_type), intent(in) :: topology + integer(psb_epk_) :: val + + val = 0 + val = val + psb_sizeof_ip * 6 ! scalar integers + logicals + if (allocated(topology%send_counts)) val = val + psb_sizeof_ip * size(topology%send_counts) + if (allocated(topology%recv_counts)) val = val + psb_sizeof_ip * size(topology%recv_counts) + if (allocated(topology%send_displs)) val = val + psb_sizeof_ip * size(topology%send_displs) + if (allocated(topology%recv_displs)) val = val + psb_sizeof_ip * size(topology%recv_displs) + if (allocated(topology%send_indexes)) val = val + psb_sizeof_ip * size(topology%send_indexes) + if (allocated(topology%recv_indexes)) val = val + psb_sizeof_ip * size(topology%recv_indexes) + + + end function neighbor_topology_sizeof + +end module psb_neighbor_topology_mod \ No newline at end of file diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index ca5023b37..4edcf53e8 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -37,53 +37,27 @@ module psi_d_comm_v_mod interface psi_swapdata ! --------------------------------------------------------------- - ! Upper call in order to populate idx using desc_a%get_list_p + ! Wrapper that calls different communications schemes depending on + ! flag variable using communication buff obtained from desc_a%get_list_p ! --------------------------------------------------------------- module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_),target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + class(psb_d_base_vect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), optional, target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_vect module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_),target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + class(psb_d_base_multivect_type) :: y + real(psb_dpk_) :: beta + real(psb_dpk_), optional, target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_multivect - - ! --------------------------------------------------------------- - ! Wrapper that calls different communications schemes depending on - ! flag variable - ! --------------------------------------------------------------- - module subroutine psi_dswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_dswap_vidx_vect - module subroutine psi_dswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_dswap_vidx_multivect end interface psi_swapdata diff --git a/base/modules/comm/psi_s_comm_v_mod.f90 b/base/modules/comm/psi_s_comm_v_mod.f90 index f210542a0..170e7c910 100644 --- a/base/modules/comm/psi_s_comm_v_mod.f90 +++ b/base/modules/comm/psi_s_comm_v_mod.f90 @@ -40,7 +40,7 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -49,7 +49,7 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -60,7 +60,7 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -71,7 +71,7 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -84,7 +84,7 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -93,7 +93,7 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -104,7 +104,7 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_vect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -115,7 +115,7 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv diff --git a/base/modules/desc/psb_desc_const_mod.f90 b/base/modules/desc/psb_desc_const_mod.f90 index 8cfbc208f..eea9d7c6e 100644 --- a/base/modules/desc/psb_desc_const_mod.f90 +++ b/base/modules/desc/psb_desc_const_mod.f90 @@ -49,10 +49,12 @@ module psb_desc_const_mod integer(psb_ipk_), parameter :: psb_setzero_ = 4 ! The following are bit fields. - integer(psb_ipk_), parameter :: psb_swap_send_ = 1 - integer(psb_ipk_), parameter :: psb_swap_recv_ = 2 - integer(psb_ipk_), parameter :: psb_swap_sync_ = 4 - integer(psb_ipk_), parameter :: psb_swap_mpi_ = 8 + integer(psb_ipk_), parameter :: psb_swap_send_ = 1 + integer(psb_ipk_), parameter :: psb_swap_recv_ = 2 + integer(psb_ipk_), parameter :: psb_swap_sync_ = 4 + integer(psb_ipk_), parameter :: psb_swap_mpi_ = 8 + integer(psb_ipk_), parameter :: psb_swap_start_ = 16 + integer(psb_ipk_), parameter :: psb_swap_wait_ = 32 integer(psb_ipk_), parameter :: psb_collective_start_ = 1 integer(psb_ipk_), parameter :: psb_collective_end_ = 2 integer(psb_ipk_), parameter :: psb_collective_sync_ = 4 diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index 036b90d82..2ecdb404a 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -326,7 +326,10 @@ module psb_const_mod integer(psb_ipk_), parameter, public :: psb_err_invalid_irst_ =5002 integer(psb_ipk_), parameter, public :: psb_err_invalid_preci_=5003 integer(psb_ipk_), parameter, public :: psb_err_invalid_preca_=5004 - + integer(psb_ipk_), parameter, public :: psb_err_incoherent_comm_state_ = 6000 ! Used when communication type bitmask has more then one bit flipped + integer(psb_ipk_), parameter, public :: psb_err_topology_error_ = 7000 + integer(psb_ipk_), parameter, public :: psb_err_topology_invalid_args_ = 7001 + integer(psb_ipk_), parameter, public :: psb_err_topology_args_mismatch_ = 7002 type :: psb_ctxt_type integer(psb_mpk_), allocatable :: ctxt diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 1e6f45752..9a2392205 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -49,6 +49,8 @@ module psb_d_base_vect_mod use psb_realloc_mod use psb_i_base_vect_mod use psb_l_base_vect_mod + use psb_neighbor_topology_mod + !> \namespace psb_base_mod \class psb_d_base_vect_type !! The psb_d_base_vect_type @@ -62,9 +64,11 @@ module psb_d_base_vect_mod !! type psb_d_base_vect_type !> Values. - real(psb_dpk_), allocatable :: v(:) - real(psb_dpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + real(psb_dpk_), allocatable :: v(:) + real(psb_dpk_), allocatable :: combuf(:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -77,6 +81,9 @@ module psb_d_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -249,6 +256,11 @@ module psb_d_base_vect_mod procedure, pass(x) :: minquotient_a2 => d_base_minquotient_a2 generic, public :: minquotient => minquotient_v, minquotient_a2 + + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => d_base_init_topology + procedure, pass(x) :: free_topology => d_base_free_topology + end type psb_d_base_vect_type public :: psb_d_base_vect @@ -2609,6 +2621,36 @@ contains if (x%is_dev()) call x%sync() call z%addconst(x%v,b,info) end subroutine d_base_addconst_v2 + + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine d_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine d_base_init_topology + + subroutine d_base_free_topology(x, info) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine d_base_free_topology + ! -------------------------------------------------------------------- + end module psb_d_base_vect_mod @@ -2618,6 +2660,7 @@ module psb_d_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_d_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_d_base_vect_type !! The psb_d_base_vect_type @@ -2634,9 +2677,11 @@ module psb_d_base_multivect_mod type psb_d_base_multivect_type !> Values. - real(psb_dpk_), allocatable :: v(:,:) - real(psb_dpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + real(psb_dpk_), allocatable :: v(:,:) + real(psb_dpk_), allocatable :: combuf(:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2649,6 +2694,9 @@ module psb_d_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -2774,6 +2822,12 @@ module psb_d_base_multivect_mod procedure, pass(y) :: sctb_x => d_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => d_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => d_base_mlv_init_topology + procedure, pass(x) :: free_topology => d_base_mlv_free_topology + + end type psb_d_base_multivect_type interface psb_d_base_multivect @@ -4297,4 +4351,35 @@ contains end subroutine d_base_mlv_device_wait + + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine d_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_d_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine d_base_mlv_init_topology + + subroutine d_base_mlv_free_topology(x, info) + implicit none + class(psb_d_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine d_base_mlv_free_topology + ! -------------------------------------------------------------------- + + end module psb_d_base_multivect_mod diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index ef35fc8a1..2c3406dfd 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -49,6 +49,7 @@ module psb_s_base_vect_mod use psb_realloc_mod use psb_i_base_vect_mod use psb_l_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_s_base_vect_type !! The psb_s_base_vect_type @@ -65,6 +66,7 @@ module psb_s_base_vect_mod real(psb_spk_), allocatable :: v(:) real(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -77,6 +79,8 @@ module psb_s_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -2618,6 +2622,7 @@ module psb_s_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_s_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_s_base_vect_type !! The psb_s_base_vect_type @@ -2637,6 +2642,7 @@ module psb_s_base_multivect_mod real(psb_spk_), allocatable :: v(:,:) real(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2649,6 +2655,8 @@ module psb_s_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators diff --git a/log.txt b/log.txt new file mode 100644 index 000000000..2231eb20c --- /dev/null +++ b/log.txt @@ -0,0 +1,1832 @@ +(if test ! -d lib ; then mkdir lib; fi) +make -C base mods +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C modules objs F90="" F90COPT=" " +(if test ! -d include ; then mkdir include; fi; /usr/bin/install -c -p -m 644 Make.inc include/Make.inc.psblas) +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_const_mod.F90 -o psb_const_mod.o +(if test ! -d modules ; then mkdir modules; fi;) +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cbind_const_mod.F90 -o psb_cbind_const_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_mod.F90 -o psb_error_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_string_mod.f90 -o auxil/psb_string_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_m_serial_mod.f90 -o auxil/psi_m_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_e_serial_mod.f90 -o auxil/psi_e_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_s_serial_mod.f90 -o auxil/psi_s_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_d_serial_mod.f90 -o auxil/psi_d_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_c_serial_mod.f90 -o auxil/psi_c_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_z_serial_mod.f90 -o auxil/psi_z_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_acx_mod.f90 -o auxil/psi_acx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_alcx_mod.f90 -o auxil/psi_alcx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_lcx_mod.f90 -o auxil/psi_lcx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_realloc_mod.F90 -o auxil/psb_m_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_realloc_mod.F90 -o auxil/psb_e_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_realloc_mod.F90 -o auxil/psb_s_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_realloc_mod.F90 -o auxil/psb_d_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_realloc_mod.F90 -o auxil/psb_c_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_realloc_mod.F90 -o auxil/psb_z_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_realloc_mod.F90 -o psb_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_serial_mod.f90 -o auxil/psi_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c desc/psb_desc_const_mod.f90 -o desc/psb_desc_const_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_hsort_mod.f90 -o auxil/psb_m_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_isort_mod.f90 -o auxil/psb_m_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_msort_mod.f90 -o auxil/psb_m_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_qsort_mod.f90 -o auxil/psb_m_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_hsort_mod.f90 -o auxil/psb_e_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_isort_mod.f90 -o auxil/psb_e_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_msort_mod.f90 -o auxil/psb_e_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_qsort_mod.f90 -o auxil/psb_e_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_mod.f90 -o auxil/psb_s_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_isort_mod.f90 -o auxil/psb_s_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_msort_mod.f90 -o auxil/psb_s_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_qsort_mod.f90 -o auxil/psb_s_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_mod.f90 -o auxil/psb_d_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_isort_mod.f90 -o auxil/psb_d_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_msort_mod.f90 -o auxil/psb_d_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_qsort_mod.f90 -o auxil/psb_d_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_mod.f90 -o auxil/psb_c_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_isort_mod.f90 -o auxil/psb_c_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_msort_mod.f90 -o auxil/psb_c_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_qsort_mod.f90 -o auxil/psb_c_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_mod.f90 -o auxil/psb_z_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_isort_mod.f90 -o auxil/psb_z_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_msort_mod.f90 -o auxil/psb_z_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_qsort_mod.f90 -o auxil/psb_z_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_ip_reord_mod.F90 -o auxil/psb_m_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_ip_reord_mod.F90 -o auxil/psb_e_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_ip_reord_mod.F90 -o auxil/psb_s_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_ip_reord_mod.F90 -o auxil/psb_d_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_ip_reord_mod.F90 -o auxil/psb_c_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_ip_reord_mod.F90 -o auxil/psb_z_ip_reord_mod.o +mpicc -g -O3 -I. -c desc/psb_hashval.c -o desc/psb_hashval.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/psb_neighbor_topology_mod.F90 -o comm/psb_neighbor_topology_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_mod.F90 -o desc/psb_hash_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_x_mod.f90 -o auxil/psb_c_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_x_mod.f90 -o auxil/psb_z_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_i_hsort_x_mod.f90 -o auxil/psb_i_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_l_hsort_x_mod.f90 -o auxil/psb_l_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_x_mod.f90 -o auxil/psb_d_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_x_mod.f90 -o auxil/psb_s_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_base_vect_mod.F90 -o serial/psb_i_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_base_mat_mod.F90 -o serial/psb_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_ip_reord_mod.F90 -o auxil/psb_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_sort_mod.f90 -o auxil/psb_sort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_vect_mod.F90 -o serial/psb_i_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_base_vect_mod.F90 -o serial/psb_l_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_vect_mod.F90 -o serial/psb_l_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_vect_mod.F90 -o serial/psb_d_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_vect_mod.F90 -o serial/psb_s_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_vect_mod.F90 -o serial/psb_c_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_vect_mod.F90 -o serial/psb_z_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_vect_mod.F90 -o serial/psb_z_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_mat_mod.F90 -o serial/psb_z_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_vect_mod.F90 -o serial/psb_d_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_mat_mod.F90 -o serial/psb_d_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_vect_mod.F90 -o serial/psb_s_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_mat_mod.F90 -o serial/psb_s_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csr_mat_mod.f90 -o serial/psb_z_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csc_mat_mod.f90 -o serial/psb_z_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_vect_mod.F90 -o serial/psb_c_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_mat_mod.F90 -o serial/psb_c_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csr_mat_mod.f90 -o serial/psb_d_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csc_mat_mod.f90 -o serial/psb_d_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_rb_idx_tree_mod.f90 -o auxil/psb_z_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csr_mat_mod.f90 -o serial/psb_s_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csc_mat_mod.f90 -o serial/psb_s_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_rb_idx_tree_mod.f90 -o auxil/psb_d_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csr_mat_mod.f90 -o serial/psb_c_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csc_mat_mod.f90 -o serial/psb_c_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_rb_idx_tree_mod.f90 -o auxil/psb_s_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_mat_mod.F90 -o serial/psb_z_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_rb_idx_tree_mod.f90 -o auxil/psb_c_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_rb_idx_tree_mod.f90 -o auxil/psb_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_mat_mod.F90 -o serial/psb_d_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_mat_mod.F90 -o serial/psb_s_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_vect_mod.f90 -o serial/psb_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_mat_mod.F90 -o serial/psb_c_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_mat_mod.f90 -o serial/psb_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_serial_mod.f90 -o serial/psb_s_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_serial_mod.f90 -o serial/psb_d_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_serial_mod.f90 -o serial/psb_c_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_serial_mod.f90 -o serial/psb_z_serial_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_penv_mod.F90 -o penv/psi_penv_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_p2p_mod.F90 -o penv/psi_i2_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_p2p_mod.F90 -o penv/psi_m_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_p2p_mod.F90 -o penv/psi_e_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_p2p_mod.F90 -o penv/psi_s_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_p2p_mod.F90 -o penv/psi_d_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_p2p_mod.F90 -o penv/psi_c_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_p2p_mod.F90 -o penv/psi_z_p2p_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_p2p_mod.F90 -o penv/psi_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_collective_mod.F90 -o penv/psi_i2_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_collective_mod.F90 -o penv/psi_e_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_collective_mod.F90 -o penv/psi_m_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_collective_mod.F90 -o penv/psi_s_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_collective_mod.F90 -o penv/psi_d_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_collective_mod.F90 -o penv/psi_c_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_collective_mod.F90 -o penv/psi_z_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_serial_mod.f90 -o serial/psb_serial_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_collective_mod.F90 -o penv/psi_collective_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c psb_penv_mod.F90 -o psb_penv_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_indx_map_mod.F90 -o desc/psb_indx_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_timers_mod.f90 -o psb_timers_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_impl.F90 -o psb_error_impl.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_map_mod.F90 -o desc/psb_hash_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_list_map_mod.F90 -o desc/psb_list_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_repl_map_mod.F90 -o desc/psb_repl_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_gen_block_map_mod.F90 -o desc/psb_gen_block_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_glist_map_mod.F90 -o desc/psb_glist_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_desc_mod.F90 -o desc/psb_desc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_e_comm_a_mod.f90 -o comm/psi_e_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_m_comm_a_mod.f90 -o comm/psi_m_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_a_mod.f90 -o comm/psi_s_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_a_mod.f90 -o comm/psi_d_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_a_mod.f90 -o comm/psi_c_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_a_mod.f90 -o comm/psi_z_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i_comm_mod.f90 -o comm/psb_i_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_l_comm_mod.f90 -o comm/psb_l_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_mod.f90 -o comm/psb_s_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_mod.f90 -o comm/psb_d_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_mod.f90 -o comm/psb_c_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_mod.f90 -o comm/psb_z_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_m_comm_a_mod.f90 -o comm/psb_m_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_e_comm_a_mod.f90 -o comm/psb_e_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_a_mod.f90 -o comm/psb_s_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_a_mod.f90 -o comm/psb_d_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_a_mod.f90 -o comm/psb_c_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_a_mod.f90 -o comm/psb_z_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_s_psblas_mod.F90 -o psblas/psb_s_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_c_psblas_mod.F90 -o psblas/psb_c_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_d_psblas_mod.F90 -o psblas/psb_d_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_z_psblas_mod.F90 -o psblas/psb_z_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_check_mod.f90 -o psb_check_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_v_mod.f90 -o comm/psi_c_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_v_mod.f90 -o comm/psi_d_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_v_mod.f90 -o comm/psi_z_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_i_comm_v_mod.f90 -o comm/psi_i_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_l_comm_v_mod.f90 -o comm/psi_l_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_v_mod.f90 -o comm/psi_s_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_i_mod.F90 -o psi_i_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_l_mod.F90 -o psi_l_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_mod.F90 -o psi_c_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_mod.F90 -o psi_z_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_mod.F90 -o psi_d_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psblas/psb_psblas_mod.f90 -o psblas/psb_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_mod.F90 -o psi_s_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psi_mod.f90 -o psi_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_comm_mod.f90 -o comm/psb_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_cd_tools_mod.F90 -o tools/psb_cd_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_m_tools_a_mod.f90 -o tools/psb_m_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_e_tools_a_mod.f90 -o tools/psb_e_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_s_tools_mod.F90 -o tools/psb_s_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_d_tools_mod.F90 -o tools/psb_d_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_c_tools_mod.F90 -o tools/psb_c_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_z_tools_mod.F90 -o tools/psb_z_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_s_tools_a_mod.f90 -o tools/psb_s_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_d_tools_a_mod.f90 -o tools/psb_d_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_c_tools_a_mod.f90 -o tools/psb_c_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_z_tools_a_mod.f90 -o tools/psb_z_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_i_tools_mod.F90 -o tools/psb_i_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_l_tools_mod.F90 -o tools/psb_l_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_tools_mod.f90 -o tools/psb_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_base_linmap_mod.f90 -o comm/psb_base_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_linmap_mod.f90 -o comm/psb_s_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_linmap_mod.f90 -o comm/psb_d_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_linmap_mod.f90 -o comm/psb_c_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_linmap_mod.f90 -o comm/psb_z_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_linmap_mod.f90 -o comm/psb_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c error.f90 -o error.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_base_mod.f90 -o psb_base_mod.o +mpicc -g -O3 -I. -c cutil.c -o cutil.o +/usr/bin/install -c -p -p *.mod ../../modules +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C util mods +make -C prec mods +make -C ext mods +make -C base objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_blockpart_mod.f90 -o psb_blockpart_mod.o +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +mpicc -g -O3 -I. -I../include -c psb_metis_int.c -o psb_metis_int.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_ell_mat_mod.f90 -o psb_d_ell_mat_mod.o +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_const_mod.f90 -o psb_prec_const_mod.o +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C modules objs F90="" F90COPT=" " +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_partidx_mod.F90 -o psb_partidx_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_i_ext_util_mod.f90 -o psi_i_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_tools_mod.f90 -o psb_c_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_hbio_mod.f90 -o psb_hbio_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_s_ext_util_mod.f90 -o psi_s_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mmio_mod.F90 -o psb_mmio_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_tools_mod.f90 -o psb_d_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_c_ext_util_mod.f90 -o psi_c_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_tools_mod.f90 -o psb_s_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_mod.f90 -o psb_s_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_d_ext_util_mod.f90 -o psi_d_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_tools_mod.f90 -o psb_z_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_mod.f90 -o psb_d_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_z_ext_util_mod.f90 -o psi_z_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_mod.f90 -o psb_c_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_ell_mat_mod.f90 -o psb_s_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_mod.f90 -o psb_z_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_ell_mat_mod.f90 -o psb_c_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_renum_mod.f90 -o psb_s_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_ell_mat_mod.f90 -o psb_z_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_renum_mod.f90 -o psb_d_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dns_mat_mod.f90 -o psb_s_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_renum_mod.f90 -o psb_c_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dns_mat_mod.f90 -o psb_d_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_renum_mod.f90 -o psb_z_renum_mod.o +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +/usr/bin/install -c -p -p *.mod ../../modules +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dns_mat_mod.f90 -o psb_c_dns_mat_mod.o +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make -C serial objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C impl objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_base_mat_impl.f90 -o psb_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dns_mat_mod.f90 -o psb_z_dns_mat_mod.o +make -C sort objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_hsort_impl.f90 -o psb_s_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lsame.f90 -o psb_lsame.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_m_serial_impl.F90 -o psi_m_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_e_serial_impl.F90 -o psi_e_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_serial_impl.F90 -o psi_s_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_isort_impl.f90 -o psb_s_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_serial_impl.F90 -o psi_d_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_msort_impl.f90 -o psb_s_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_serial_impl.F90 -o psi_c_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_serial_impl.F90 -o psi_z_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_srwextd.f90 -o psb_srwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_mat_dist_mod.f90 -o psb_mat_dist_mod.o +make -C comm objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C internals objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata.F90 -o psi_dswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_base_prec_mod.f90 -o psb_s_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_restr.f90 -o psi_iovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_save.f90 -o psi_iovrl_save.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_qsort_impl.f90 -o psb_s_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_hsort_impl.f90 -o psb_d_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_isort_impl.f90 -o psb_d_isort_impl.o +make -C auxil objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_desc_index.F90 -o psi_desc_index.o +make -C psblas objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddot.f90 -o psb_ddot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax.f90 -o psb_damax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_drwextd.f90 -o psb_drwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_base_prec_mod.f90 -o psb_d_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_base_prec_mod.f90 -o psb_c_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_crwextd.f90 -o psb_crwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zrwextd.f90 -o psb_zrwextd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_msort_impl.f90 -o psb_d_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_ext_util_mod.f90 -o psi_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_fnd_owner.F90 -o psi_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_qsort_impl.f90 -o psb_d_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspspmm.F90 -o psb_sspspmm.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_upd.f90 -o psi_iovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran.F90 -o psi_dswaptran.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_hsort_impl.f90 -o psb_c_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_base_prec_mod.f90 -o psb_z_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_restr.f90 -o psi_lovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hll_mat_mod.f90 -o psb_d_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hll_mat_mod.f90 -o psb_s_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_isort_impl.f90 -o psb_c_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspspmm.F90 -o psb_dspspmm.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_msort_impl.f90 -o psb_c_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_qsort_impl.f90 -o psb_c_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hll_mat_mod.f90 -o psb_c_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspspmm.F90 -o psb_cspspmm.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hll_mat_mod.f90 -o psb_z_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dia_mat_mod.f90 -o psb_d_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_hsort_impl.f90 -o psb_z_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_isort_impl.f90 -o psb_z_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hdia_mat_mod.f90 -o psb_d_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dia_mat_mod.f90 -o psb_s_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_msort_impl.f90 -o psb_z_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hdia_mat_mod.f90 -o psb_s_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ilu_fact_mod.f90 -o psb_d_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_ainv_tools_mod.f90 -o psb_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dia_mat_mod.f90 -o psb_c_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csc_impl.F90 -o psb_s_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ilu_fact_mod.f90 -o psb_s_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hdia_mat_mod.f90 -o psb_c_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_qsort_impl.f90 -o psb_z_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_fact_mod.f90 -o psb_s_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dia_mat_mod.f90 -o psb_z_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata.F90 -o psi_sswapdata.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hdia_mat_mod.f90 -o psb_z_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_bnd_elem.f90 -o psi_crea_bnd_elem.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ext_mod.F90 -o psb_ext_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_index.f90 -o psi_crea_index.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_a2a_fnd_owner.F90 -o psi_a2a_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_ovr_elem.f90 -o psi_crea_ovr_elem.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmpovrl.f90 -o psi_bld_tmpovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_hsort_impl.f90 -o psb_m_hsort_impl.o +make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter.F90 -o psb_dscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather.f90 -o psb_dgather.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_isort_impl.f90 -o psb_m_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_msort_impl.f90 -o psb_m_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmphalo.f90 -o psi_bld_tmphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_sort_dl.f90 -o psi_sort_dl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_indx_map_fnd_owner.F90 -o psi_indx_map_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_qsort_impl.f90 -o psb_m_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ilu_fact_mod.f90 -o psb_c_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save.f90 -o psi_sovrl_save.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter.F90 -o psb_zscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_desc_impl.f90 -o psi_desc_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd.f90 -o psi_sovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_hsort_impl.f90 -o psb_e_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr.f90 -o psi_dovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather.f90 -o psb_sgather.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_isort_impl.f90 -o psb_e_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran.F90 -o psi_sswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_fact_mod.f90 -o psb_c_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_iscatter.F90 -o psb_iscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_lscatter.F90 -o psb_lscatter.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_msort_impl.f90 -o psb_e_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invk_fact_mod.f90 -o psb_c_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum.f90 -o psb_dasum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_graph_fnd_owner.F90 -o psi_graph_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invt_fact_mod.f90 -o psb_c_invt_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_hash_impl.f90 -o psi_hash_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter.F90 -o psb_cscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter.F90 -o psb_sscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_srtlist.f90 -o psi_srtlist.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daxpby.f90 -o psb_daxpby.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save.f90 -o psi_dovrl_save.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd.f90 -o psi_dovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrm2.f90 -o psb_dnrm2.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr.f90 -o psi_covrl_restr.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrmi.f90 -o psb_dnrmi.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswapdata.F90 -o psi_iswapdata.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save.f90 -o psi_covrl_save.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd.f90 -o psi_covrl_upd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter_a.F90 -o psb_dscatter_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr.f90 -o psi_zovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ilu_fact_mod.f90 -o psb_z_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter_a.F90 -o psb_zscatter_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_fact_mod.f90 -o psb_z_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mscatter_a.F90 -o psb_mscatter_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_escatter_a.F90 -o psb_escatter_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter_a.F90 -o psb_cscatter_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_mat_impl.F90 -o psb_s_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_rb_idx_tree_impl.F90 -o psb_s_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter_a.F90 -o psb_sscatter_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspgather.F90 -o psb_dspgather.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csr_impl.F90 -o psb_d_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspgather.F90 -o psb_sspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspgather.F90 -o psb_zspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspgather.F90 -o psb_cspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_bld_glb_dep_list.F90 -o psi_bld_glb_dep_list.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_xtr_loc_dl.F90 -o psi_xtr_loc_dl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswaptran.F90 -o psi_iswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_coo_impl.F90 -o psb_d_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_igather.f90 -o psb_igather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ihalo.f90 -o psb_ihalo.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_biconjg_mod.F90 -o psb_c_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspnrm1.f90 -o psb_sspnrm1.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csc_impl.F90 -o psb_d_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_biconjg_mod.F90 -o psb_d_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_biconjg_mod.F90 -o psb_s_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspnrm1.f90 -o psb_dspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspnrm1.f90 -o psb_cspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspnrm1.f90 -o psb_zspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax.f90 -o psb_zamax.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_biconjg_mod.F90 -o psb_z_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum.f90 -o psb_zasum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_util_mod.f90 -o psb_util_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save.f90 -o psi_zovrl_save.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaxpby.f90 -o psb_zaxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdot.f90 -o psb_zdot.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_mat_impl.F90 -o psb_d_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_rb_idx_tree_impl.F90 -o psb_d_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csr_impl.F90 -o psb_c_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_coo_impl.F90 -o psb_c_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrm2.f90 -o psb_znrm2.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrmi.f90 -o psb_znrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lgather.f90 -o psb_lgather.o +/bin/cp -p *.mod ../modules +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspspmm.F90 -o psb_zspspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ssymbmm.f90 -o psb_ssymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dsymbmm.f90 -o psb_dsymbmm.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csc_impl.F90 -o psb_c_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_csymbmm.f90 -o psb_csymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lhalo.f90 -o psb_lhalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_mat_impl.F90 -o psb_c_mat_impl.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zsymbmm.f90 -o psb_zsymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lovrl.f90 -o psb_lovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata.F90 -o psi_cswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather.f90 -o psb_cgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o +/usr/bin/install -c -p -p *.mod ../modules +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrm2.f90 -o psb_snrm2.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd.f90 -o psi_zovrl_upd.o +make -C ext objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +/bin/cp -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_from_coo.f90 -o psb_s_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran.F90 -o psi_cswaptran.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_to_coo.f90 -o psb_s_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_coo.f90 -o psb_s_cp_ell_from_coo.o +make -C tools objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_icdasb.F90 -o psb_icdasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdall.f90 -o psb_cdall.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdals.f90 -o psb_cdals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snumbmm.f90 -o psb_snumbmm.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_restr_a.f90 -o psi_movrl_restr_a.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnumbmm.f90 -o psb_dnumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnumbmm.f90 -o psb_cnumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znumbmm.f90 -o psb_znumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_type.f90 -o psb_s_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c smmp.f90 -o smmp.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_type.f90 -o psb_d_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdalv.f90 -o psb_cdalv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_inloc.f90 -o psb_cd_inloc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdins.F90 -o psb_cdins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdprt.f90 -o psb_cdprt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_fmt.f90 -o psb_s_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_coo.f90 -o psb_s_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssphalo.F90 -o psb_ssphalo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_fmt.f90 -o psb_s_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_from_coo.f90 -o psb_s_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_to_coo.f90 -o psb_s_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_coo.f90 -o psb_s_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_save_a.f90 -o psi_movrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata.F90 -o psi_zswapdata.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_upd_a.f90 -o psi_movrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c lsmmp.f90 -o lsmmp.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgeprt.f90 -o psb_dgeprt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgeprt.f90 -o psb_cgeprt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_fmt.f90 -o psb_s_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_coo.f90 -o psb_s_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_fmt.f90 -o psb_s_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_rb_idx_tree_impl.F90 -o psb_c_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csr_impl.F90 -o psb_z_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_coo_impl.F90 -o psb_z_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdren.f90 -o psb_cdren.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_aclsum.f90 -o psb_s_dia_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo.f90 -o psb_chalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl.f90 -o psb_covrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather.f90 -o psb_zgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo.f90 -o psb_zhalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_restr_a.f90 -o psi_eovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl.f90 -o psb_zovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran.F90 -o psi_zswaptran.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_save_a.f90 -o psi_eovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_upd_a.f90 -o psi_eovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr_a.f90 -o psi_sovrl_restr_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_allocate_mnnz.f90 -o psb_s_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_arwsum.f90 -o psb_s_dia_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_colsum.f90 -o psb_s_dia_colsum.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save_a.f90 -o psi_sovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd_a.f90 -o psi_sovrl_upd_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetptn.f90 -o psb_s_dia_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetrow.f90 -o psb_s_dia_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdrep.f90 -o psb_cdrep.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather_a.f90 -o psb_dgather_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr_a.f90 -o psi_dovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_get_overlap.f90 -o psb_get_overlap.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csc_impl.F90 -o psb_z_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_mat_impl.F90 -o psb_z_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_rb_idx_tree_impl.F90 -o psb_z_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo_a.f90 -o psb_dhalo_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata_a.F90 -o psi_dswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsphalo.F90 -o psb_dsphalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save_a.f90 -o psi_dovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd_a.f90 -o psi_dovrl_upd_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmm.f90 -o psb_s_dia_csmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_type.f90 -o psb_c_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_type.f90 -o psb_z_prec_type.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmv.f90 -o psb_s_dia_csmv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_lstext.f90 -o psb_cd_lstext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spdot_srtd.f90 -o psb_spdot_srtd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl_a.f90 -o psb_dovrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather_a.f90 -o psb_sgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrmi.f90 -o psb_snrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_fact_mod.f90 -o psb_d_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr_a.f90 -o psi_covrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invk_fact_mod.f90 -o psb_d_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save_a.f90 -o psi_covrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_remap.F90 -o psb_cd_remap.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invt_fact_mod.f90 -o psb_d_invt_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd_a.f90 -o psi_covrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr_a.f90 -o psi_zovrl_restr_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_get_diag.f90 -o psb_s_dia_get_diag.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invk_fact_mod.f90 -o psb_s_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_maxval.f90 -o psb_s_dia_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspmm.f90 -o psb_sspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdcpy.F90 -o psb_cdcpy.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_reinit.f90 -o psb_cd_reinit.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_switch_ovl_indxmap.f90 -o psb_cd_switch_ovl_indxmap.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_mold.f90 -o psb_s_dia_mold.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspsm.f90 -o psb_sspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax.f90 -o psb_camax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum.f90 -o psb_casum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caxpby.f90 -o psb_caxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdot.f90 -o psb_cdot.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_print.f90 -o psb_s_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reallocate_nz.f90 -o psb_s_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrm2.f90 -o psb_cnrm2.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invt_fact_mod.f90 -o psb_s_invt_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invk_fact_mod.f90 -o psb_z_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save_a.f90 -o psi_zovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd_a.f90 -o psi_zovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_renum_block.F90 -o psb_cd_renum_block.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo_a.f90 -o psb_shalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl_a.f90 -o psb_sovrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invt_fact_mod.f90 -o psb_z_invt_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspalloc.f90 -o psb_dspalloc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspasb.f90 -o psb_dspasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remap.F90 -o psb_d_remap.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspfree.f90 -o psb_dspfree.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reinit.f90 -o psb_s_dia_reinit.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csphalo.F90 -o psb_csphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_aspxpby.f90 -o psb_aspxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spge_dot.f90 -o psb_spge_dot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dsprn.f90 -o psb_dsprn.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_biconjg_mod.F90 -o psb_biconjg_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_rowsum.f90 -o psb_s_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scal.f90 -o psb_s_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scals.f90 -o psb_s_dia_scals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saplusat.f90 -o psb_saplusat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_aclsum.f90 -o psb_s_ell_aclsum.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daplusat.f90 -o psb_daplusat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mgather_a.f90 -o psb_mgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mhalo_a.f90 -o psb_mhalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_movrl_a.f90 -o psb_movrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caplusat.f90 -o psb_caplusat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_allocate_mnnz.f90 -o psb_s_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspalloc.f90 -o psb_sspalloc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_arwsum.f90 -o psb_s_ell_arwsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_egather_a.f90 -o psb_egather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ehalo_a.f90 -o psb_ehalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrmi.f90 -o psb_cnrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspmm.f90 -o psb_cspmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_colsum.f90 -o psb_s_ell_colsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspasb.f90 -o psb_sspasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remap.F90 -o psb_s_remap.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspsm.f90 -o psb_cspsm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetblk.f90 -o psb_s_ell_csgetblk.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_eovrl_a.f90 -o psb_eovrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather_a.f90 -o psb_cgather_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetptn.f90 -o psb_s_ell_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaplusat.f90 -o psb_zaplusat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetrow.f90 -o psb_s_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmm.f90 -o psb_s_ell_csmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cmlt_vect.f90 -o psb_cmlt_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo_a.f90 -o psb_chalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dmlt_vect.f90 -o psb_dmlt_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmv.f90 -o psb_s_ell_csmv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zmlt_vect.f90 -o psb_zmlt_vect.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswaptran_a.F90 -o psi_mswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_smlt_vect.f90 -o psb_smlt_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdiv_vect.f90 -o psb_cdiv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddiv_vect.f90 -o psb_ddiv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdiv_vect.f90 -o psb_zdiv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdiv_vect.f90 -o psb_sdiv_vect.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspfree.f90 -o psb_sspfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspins.F90 -o psb_sspins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ssprn.f90 -o psb_ssprn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnm1.f90 -o psb_s_ell_csnm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl_a.f90 -o psb_covrl_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnmi.f90 -o psb_s_ell_csnmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather_a.f90 -o psb_zgather_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csput.f90 -o psb_s_ell_csput.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_glob_to_loc.f90 -o psb_glob_to_loc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_loc_to_glob.f90 -o psb_loc_to_glob.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iallc.f90 -o psb_iallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cinv_vect.f90 -o psb_cinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dinv_vect.f90 -o psb_dinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zinv_vect.f90 -o psb_zinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo_a.f90 -o psb_zhalo_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssm.f90 -o psb_s_ell_cssm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsphalo.F90 -o psb_zsphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl_a.f90 -o psb_zovrl_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssv.f90 -o psb_s_ell_cssv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iasb.f90 -o psb_iasb.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_get_diag.f90 -o psb_s_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_maxval.f90 -o psb_s_ell_maxval.o +make[4]: «psi_mswaptran_a.o» è aggiornato. +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_mold.f90 -o psb_s_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_print.f90 -o psb_s_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reallocate_nz.f90 -o psb_s_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sinv_vect.f90 -o psb_sinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax_s.f90 -o psb_samax_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax_s.f90 -o psb_damax_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax_s.f90 -o psb_camax_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ifree.f90 -o psb_ifree.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reinit.f90 -o psb_s_ell_reinit.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_type.f90 -o psb_prec_type.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_rowsum.f90 -o psb_s_ell_rowsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax_s.f90 -o psb_zamax_s.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata_a.F90 -o psi_cswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran_a.F90 -o psi_cswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata_a.F90 -o psi_zswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran_a.F90 -o psi_zswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iins.f90 -o psb_iins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lallc.f90 -o psb_lallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lasb.f90 -o psb_lasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dcmp_vect.f90 -o psb_dcmp_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_scmp_vect.f90 -o psb_scmp_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scal.f90 -o psb_s_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scals.f90 -o psb_s_ell_scals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ccmp_vect.f90 -o psb_ccmp_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_trim.f90 -o psb_s_ell_trim.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zcmp_vect.f90 -o psb_zcmp_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum_s.f90 -o psb_sasum_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lfree.f90 -o psb_lfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum_s.f90 -o psb_dasum_s.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_allocate_mnnz.f90 -o psb_s_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_csmv.f90 -o psb_s_hdia_csmv.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_mod.f90 -o psb_s_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum_s.f90 -o psb_casum_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cabs_vect.f90 -o psb_cabs_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum_s.f90 -o psb_zasum_s.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_mod.f90 -o psb_d_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dabs_vect.f90 -o psb_dabs_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sabs_vect.f90 -o psb_sabs_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_mold.f90 -o psb_s_hdia_mold.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_mod.f90 -o psb_c_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zabs_vect.f90 -o psb_zabs_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_print.f90 -o psb_s_hdia_print.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cgetmatinfo.F90 -o psb_cgetmatinfo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_aclsum.f90 -o psb_s_hll_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_mod.f90 -o psb_z_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dgetmatinfo.F90 -o psb_dgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree.f90 -o psb_sfree.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sgetmatinfo.F90 -o psb_sgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins.f90 -o psb_sins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc.f90 -o psb_dallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb.f90 -o psb_dasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zgetmatinfo.F90 -o psb_zgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree.f90 -o psb_dfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins.f90 -o psb_dins.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_mod.f90 -o psb_prec_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_allocate_mnnz.f90 -o psb_s_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_arwsum.f90 -o psb_s_hll_arwsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc.f90 -o psb_callc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_colsum.f90 -o psb_s_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetblk.f90 -o psb_s_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetptn.f90 -o psb_s_hll_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb.f90 -o psb_casb.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetrow.f90 -o psb_s_hll_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree.f90 -o psb_cfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins.f90 -o psb_cins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcdbldext.F90 -o psb_dcdbldext.o +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmm.f90 -o psb_s_hll_csmm.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_diagprec.f90 -o psb_d_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_nullprec.f90 -o psb_d_nullprec.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmv.f90 -o psb_s_hll_csmv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc.f90 -o psb_zallc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnm1.f90 -o psb_s_hll_csnm1.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_bjacprec.f90 -o psb_d_bjacprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb.f90 -o psb_zasb.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_diagprec.f90 -o psb_s_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_nullprec.f90 -o psb_s_nullprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree.f90 -o psb_zfree.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnmi.f90 -o psb_s_hll_csnmi.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_bjacprec.f90 -o psb_s_bjacprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins.f90 -o psb_zins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csput.f90 -o psb_s_hll_csput.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_diagprec.f90 -o psb_c_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_nullprec.f90 -o psb_c_nullprec.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssm.f90 -o psb_s_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssv.f90 -o psb_s_hll_cssv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mallc_a.f90 -o psb_mallc_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_get_diag.f90 -o psb_s_hll_get_diag.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_bjacprec.f90 -o psb_c_bjacprec.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_maxval.f90 -o psb_s_hll_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_diagprec.f90 -o psb_z_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_nullprec.f90 -o psb_z_nullprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_bjacprec.f90 -o psb_z_bjacprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_masb_a.f90 -o psb_masb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mfree_a.f90 -o psb_mfree_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mins_a.f90 -o psb_mins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcdbldext.F90 -o psb_zcdbldext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eallc_a.f90 -o psb_eallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_easb_a.f90 -o psb_easb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_mold.f90 -o psb_s_hll_mold.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_efree_a.f90 -o psb_efree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_print.f90 -o psb_s_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reallocate_nz.f90 -o psb_s_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reinit.f90 -o psb_s_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_rowsum.f90 -o psb_s_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scal.f90 -o psb_s_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scals.f90 -o psb_s_hll_scals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eins_a.f90 -o psb_eins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc_a.f90 -o psb_sallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb_a.f90 -o psb_sasb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_dia_from_coo.f90 -o psb_s_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree_a.f90 -o psb_sfree_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins_a.f90 -o psb_sins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc_a.f90 -o psb_dallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb_a.f90 -o psb_dasb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_coo.f90 -o psb_s_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree_a.f90 -o psb_dfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_fmt.f90 -o psb_s_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_coo.f90 -o psb_s_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_fmt.f90 -o psb_s_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_from_coo.f90 -o psb_s_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_to_coo.f90 -o psb_s_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins_a.f90 -o psb_dins_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_coo.f90 -o psb_s_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc_a.f90 -o psb_callc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scdbldext.F90 -o psb_scdbldext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb_a.f90 -o psb_casb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_fmt.f90 -o psb_s_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_coo.f90 -o psb_s_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree_a.f90 -o psb_cfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_fmt.f90 -o psb_s_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_from_coo.f90 -o psb_c_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins_a.f90 -o psb_cins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc_a.f90 -o psb_zallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb_a.f90 -o psb_zasb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree_a.f90 -o psb_zfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_to_coo.f90 -o psb_c_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_coo.f90 -o psb_c_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins_a.f90 -o psb_zins_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_fmt.f90 -o psb_c_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_coo.f90 -o psb_c_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_fmt.f90 -o psb_c_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_from_coo.f90 -o psb_c_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_to_coo.f90 -o psb_c_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_coo.f90 -o psb_c_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_fmt.f90 -o psb_c_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspalloc.f90 -o psb_zspalloc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_coo.f90 -o psb_c_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspasb.f90 -o psb_zspasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remap.F90 -o psb_z_remap.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspfree.f90 -o psb_zspfree.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_fmt.f90 -o psb_c_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspins.F90 -o psb_zspins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_aclsum.f90 -o psb_c_dia_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_allocate_mnnz.f90 -o psb_c_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_arwsum.f90 -o psb_c_dia_arwsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zsprn.f90 -o psb_zsprn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_colsum.f90 -o psb_c_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetptn.f90 -o psb_c_dia_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspalloc.f90 -o psb_cspalloc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetrow.f90 -o psb_c_dia_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspasb.f90 -o psb_cspasb.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmm.f90 -o psb_c_dia_csmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccdbldext.F90 -o psb_ccdbldext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remap.F90 -o psb_c_remap.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspfree.f90 -o psb_cspfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspins.F90 -o psb_cspins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_csprn.f90 -o psb_csprn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmv.f90 -o psb_c_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_get_diag.f90 -o psb_c_dia_get_diag.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_set_bld.f90 -o psb_cd_set_bld.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_map.f90 -o psb_s_map.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_maxval.f90 -o psb_c_dia_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_map.f90 -o psb_d_map.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_map.f90 -o psb_c_map.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_mold.f90 -o psb_c_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_print.f90 -o psb_c_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reallocate_nz.f90 -o psb_c_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reinit.f90 -o psb_c_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_rowsum.f90 -o psb_c_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scal.f90 -o psb_c_dia_scal.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_map.f90 -o psb_z_map.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scals.f90 -o psb_c_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_aclsum.f90 -o psb_c_ell_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_par_csr_spspmm.f90 -o psb_s_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_par_csr_spspmm.f90 -o psb_d_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_allocate_mnnz.f90 -o psb_c_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_par_csr_spspmm.f90 -o psb_c_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_arwsum.f90 -o psb_c_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_colsum.f90 -o psb_c_ell_colsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_par_csr_spspmm.f90 -o psb_z_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_glob_transpose.F90 -o psb_s_glob_transpose.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetblk.f90 -o psb_c_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetptn.f90 -o psb_c_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetrow.f90 -o psb_c_ell_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_glob_transpose.F90 -o psb_d_glob_transpose.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmm.f90 -o psb_c_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmv.f90 -o psb_c_ell_csmv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnm1.f90 -o psb_c_ell_csnm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_glob_transpose.F90 -o psb_c_glob_transpose.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_glob_transpose.F90 -o psb_z_glob_transpose.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cgetelem.f90 -o psb_cgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnmi.f90 -o psb_c_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csput.f90 -o psb_c_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssm.f90 -o psb_c_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssv.f90 -o psb_c_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_get_diag.f90 -o psb_c_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_maxval.f90 -o psb_c_ell_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dgetelem.f90 -o psb_dgetelem.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sgetelem.f90 -o psb_sgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_mold.f90 -o psb_c_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_print.f90 -o psb_c_ell_print.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reallocate_nz.f90 -o psb_c_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reinit.f90 -o psb_c_ell_reinit.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zgetelem.f90 -o psb_zgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_rowsum.f90 -o psb_c_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scal.f90 -o psb_c_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scals.f90 -o psb_c_ell_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_trim.f90 -o psb_c_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_allocate_mnnz.f90 -o psb_c_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_csmv.f90 -o psb_c_hdia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_mold.f90 -o psb_c_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_print.f90 -o psb_c_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_aclsum.f90 -o psb_c_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_allocate_mnnz.f90 -o psb_c_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_arwsum.f90 -o psb_c_hll_arwsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_colsum.f90 -o psb_c_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetblk.f90 -o psb_c_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetptn.f90 -o psb_c_hll_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetrow.f90 -o psb_c_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmm.f90 -o psb_c_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmv.f90 -o psb_c_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnm1.f90 -o psb_c_hll_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnmi.f90 -o psb_c_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csput.f90 -o psb_c_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssm.f90 -o psb_c_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssv.f90 -o psb_c_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_get_diag.f90 -o psb_c_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_maxval.f90 -o psb_c_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_mold.f90 -o psb_c_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_print.f90 -o psb_c_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reallocate_nz.f90 -o psb_c_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reinit.f90 -o psb_c_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_rowsum.f90 -o psb_c_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scal.f90 -o psb_c_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scals.f90 -o psb_c_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_dia_from_coo.f90 -o psb_c_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_mat.F90 -o psb_z_remote_mat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_coo.f90 -o psb_c_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_fmt.f90 -o psb_c_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_coo.f90 -o psb_c_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_fmt.f90 -o psb_c_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_from_coo.f90 -o psb_c_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_to_coo.f90 -o psb_c_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_coo.f90 -o psb_c_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_fmt.f90 -o psb_c_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_coo.f90 -o psb_c_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_fmt.f90 -o psb_c_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_from_coo.f90 -o psb_d_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_to_coo.f90 -o psb_d_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_coo.f90 -o psb_d_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_fmt.f90 -o psb_d_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_coo.f90 -o psb_d_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_fmt.f90 -o psb_d_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_vect.F90 -o psb_s_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_from_coo.f90 -o psb_d_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_to_coo.f90 -o psb_d_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_coo.f90 -o psb_d_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_fmt.f90 -o psb_d_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_coo.f90 -o psb_d_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_fmt.f90 -o psb_d_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_aclsum.f90 -o psb_d_dia_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_allocate_mnnz.f90 -o psb_d_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_arwsum.f90 -o psb_d_dia_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_colsum.f90 -o psb_d_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetptn.f90 -o psb_d_dia_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetrow.f90 -o psb_d_dia_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmm.f90 -o psb_d_dia_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmv.f90 -o psb_d_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_get_diag.f90 -o psb_d_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_maxval.f90 -o psb_d_dia_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_mold.f90 -o psb_d_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_print.f90 -o psb_d_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reallocate_nz.f90 -o psb_d_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reinit.f90 -o psb_d_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_rowsum.f90 -o psb_d_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scal.f90 -o psb_d_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scals.f90 -o psb_d_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_aclsum.f90 -o psb_d_ell_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_allocate_mnnz.f90 -o psb_d_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_arwsum.f90 -o psb_d_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_colsum.f90 -o psb_d_ell_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetblk.f90 -o psb_d_ell_csgetblk.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_vect.F90 -o psb_d_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetptn.f90 -o psb_d_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetrow.f90 -o psb_d_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmm.f90 -o psb_d_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmv.f90 -o psb_d_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnm1.f90 -o psb_d_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnmi.f90 -o psb_d_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csput.f90 -o psb_d_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssm.f90 -o psb_d_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssv.f90 -o psb_d_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_get_diag.f90 -o psb_d_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_maxval.f90 -o psb_d_ell_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_mold.f90 -o psb_d_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_print.f90 -o psb_d_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reallocate_nz.f90 -o psb_d_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reinit.f90 -o psb_d_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_rowsum.f90 -o psb_d_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scal.f90 -o psb_d_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scals.f90 -o psb_d_ell_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_trim.f90 -o psb_d_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_allocate_mnnz.f90 -o psb_d_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_csmv.f90 -o psb_d_hdia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_mold.f90 -o psb_d_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_print.f90 -o psb_d_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_aclsum.f90 -o psb_d_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_allocate_mnnz.f90 -o psb_d_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_arwsum.f90 -o psb_d_hll_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_colsum.f90 -o psb_d_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetblk.f90 -o psb_d_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetptn.f90 -o psb_d_hll_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_vect.F90 -o psb_c_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetrow.f90 -o psb_d_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmm.f90 -o psb_d_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmv.f90 -o psb_d_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnm1.f90 -o psb_d_hll_csnm1.o +/usr/bin/install -c -p -p *.mod ../modules +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnmi.f90 -o psb_d_hll_csnmi.o +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csput.f90 -o psb_d_hll_csput.o +make -C linsolve mods +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_base_linsolve_conv_mod.f90 -o psb_base_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_linsolve_mod.f90 -o psb_linsolve_mod.o +make -C prec objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +/usr/bin/install -c -p -p *.mod ../modules +make -C util objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +/usr/bin/install -c -p -p *.mod ../modules +mpicc -g -O3 -I. -I../include -c psb_amd_order.c -o psb_amd_order.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_hbio_impl.f90 -o psb_s_hbio_impl.o +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_prec_type_impl.f90 -o psb_s_prec_type_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_prec_type_impl.f90 -o psb_d_prec_type_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_hbio_impl.f90 -o psb_d_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_hbio_impl.f90 -o psb_c_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_hbio_impl.f90 -o psb_z_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mmio_impl.f90 -o psb_s_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mmio_impl.f90 -o psb_d_mmio_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_prec_type_impl.f90 -o psb_c_prec_type_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mmio_impl.f90 -o psb_c_mmio_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_prec_type_impl.f90 -o psb_z_prec_type_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_diagprec_impl.f90 -o psb_d_diagprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_vect.F90 -o psb_z_remote_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mmio_impl.f90 -o psb_z_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_i_mmio_impl.F90 -o psb_i_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_impl.f90 -o psb_s_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_impl.f90 -o psb_d_mat_dist_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_bjacprec_impl.f90 -o psb_d_bjacprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssm.f90 -o psb_d_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssv.f90 -o psb_d_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_get_diag.f90 -o psb_d_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_nullprec_impl.f90 -o psb_d_nullprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilu0_fact.f90 -o psb_d_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_iluk_fact.f90 -o psb_d_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilut_fact.f90 -o psb_d_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_maxval.f90 -o psb_d_hll_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_impl.f90 -o psb_c_mat_dist_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_mold.f90 -o psb_d_hll_mold.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_e_remote_vect.F90 -o psb_e_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecbld.f90 -o psb_dprecbld.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_impl.f90 -o psb_z_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_renum_impl.F90 -o psb_s_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_linsolve_conv_mod.f90 -o psb_s_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_renum_impl.F90 -o psb_d_renum_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecinit.f90 -o psb_dprecinit.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_m_remote_vect.F90 -o psb_m_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_print.f90 -o psb_d_hll_print.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_linsolve_conv_mod.f90 -o psb_c_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_diagprec_impl.f90 -o psb_s_diagprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_bjacprec_impl.f90 -o psb_s_bjacprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_renum_impl.F90 -o psb_c_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_linsolve_conv_mod.f90 -o psb_d_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_renum_impl.F90 -o psb_z_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_build_mtpart.F90 -o psi_build_mtpart.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reallocate_nz.f90 -o psb_d_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_linsolve_conv_mod.f90 -o psb_z_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_nullprec_impl.f90 -o psb_s_nullprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilu0_fact.f90 -o psb_s_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_iluk_fact.f90 -o psb_s_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reinit.f90 -o psb_d_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_rowsum.f90 -o psb_d_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilut_fact.f90 -o psb_s_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecbld.f90 -o psb_sprecbld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecinit.f90 -o psb_sprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scal.f90 -o psb_d_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_diagprec_impl.f90 -o psb_c_diagprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scals.f90 -o psb_d_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_dia_from_coo.f90 -o psb_d_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_bjacprec_impl.f90 -o psb_c_bjacprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_nullprec_impl.f90 -o psb_c_nullprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilu0_fact.f90 -o psb_c_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_coo.f90 -o psb_d_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_fmt.f90 -o psb_d_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_iluk_fact.f90 -o psb_c_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_coo.f90 -o psb_d_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilut_fact.f90 -o psb_c_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecbld.f90 -o psb_cprecbld.o +/usr/bin/install -c -p -p *.mod ../modules +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecinit.f90 -o psb_cprecinit.o +make -C cbind objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_objhandle_mod.F90 -o psb_objhandle_mod.o +make -C linsolve objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dkrylov.f90 -o psb_dkrylov.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_base.c -o psb_c_base.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sbase.c -o psb_c_sbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dbase.c -o psb_c_dbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cbase.c -o psb_c_cbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zbase.c -o psb_c_zbase.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_diagprec_impl.f90 -o psb_z_diagprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_fmt.f90 -o psb_d_mv_ell_to_fmt.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_scomm.c -o psb_c_scomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dcomm.c -o psb_c_dcomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_ccomm.c -o psb_c_ccomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zcomm.c -o psb_c_zcomm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_bjacprec_impl.f90 -o psb_z_bjacprec_impl.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_from_coo.f90 -o psb_d_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_nullprec_impl.f90 -o psb_z_nullprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_skrylov.f90 -o psb_skrylov.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ckrylov.f90 -o psb_ckrylov.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilu0_fact.f90 -o psb_z_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_iluk_fact.f90 -o psb_z_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilut_fact.f90 -o psb_z_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecbld.f90 -o psb_zprecbld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecinit.f90 -o psb_zprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sparsify.f90 -o psb_c_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sparsify.f90 -o psb_d_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_to_coo.f90 -o psb_d_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_base_tools_cbind_mod.F90 -o psb_base_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_coo.f90 -o psb_d_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sparsify.f90 -o psb_s_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_fmt.f90 -o psb_d_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zkrylov.f90 -o psb_zkrylov.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sparsify.f90 -o psb_z_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drichardson.f90 -o psb_drichardson.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crwclip.f90 -o psb_crwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srichardson.f90 -o psb_srichardson.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drwclip.f90 -o psb_drwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srwclip.f90 -o psb_srwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_coo.f90 -o psb_d_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crichardson.f90 -o psb_crichardson.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrwclip.f90 -o psb_zrwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrichardson.f90 -o psb_zrichardson.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sp_drop.f90 -o psb_c_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sp_drop.f90 -o psb_d_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sp_drop.f90 -o psb_s_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sp_drop.f90 -o psb_z_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstab.f90 -o psb_dcgstab.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk_noth.F90 -o psb_dsparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk.F90 -o psb_dsparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcg.F90 -o psb_dcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_fmt.f90 -o psb_d_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dfcg.F90 -o psb_dfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dgcr.f90 -o psb_dgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_mlk.F90 -o psb_dsparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_ft_llk.F90 -o psb_dsparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgs.f90 -o psb_dcgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_llk.F90 -o psb_dsparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dbicg.f90 -o psb_dbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstabl.f90 -o psb_dcgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_from_coo.f90 -o psb_z_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drgmres.f90 -o psb_drgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_to_coo.f90 -o psb_z_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk_noth.F90 -o psb_csparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_psblas_cbind_mod.f90 -o psb_s_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_psblas_cbind_mod.f90 -o psb_d_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstab.f90 -o psb_scgstab.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_psblas_cbind_mod.f90 -o psb_c_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_psblas_cbind_mod.f90 -o psb_z_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_tools_cbind_mod.F90 -o psb_s_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scg.F90 -o psb_scg.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_serial_cbind_mod.F90 -o psb_s_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sfcg.F90 -o psb_sfcg.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_tools_cbind_mod.F90 -o psb_d_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_coo.f90 -o psb_z_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_serial_cbind_mod.F90 -o psb_d_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_fmt.f90 -o psb_z_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_tools_cbind_mod.F90 -o psb_c_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_serial_cbind_mod.F90 -o psb_c_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_tools_cbind_mod.F90 -o psb_z_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk.F90 -o psb_csparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_mlk.F90 -o psb_csparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sgcr.f90 -o psb_sgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgs.f90 -o psb_scgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sbicg.f90 -o psb_sbicg.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_serial_cbind_mod.F90 -o psb_z_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_comm_cbind_mod.f90 -o psb_s_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_comm_cbind_mod.f90 -o psb_d_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_comm_cbind_mod.f90 -o psb_c_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_coo.f90 -o psb_z_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_fmt.f90 -o psb_z_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_from_coo.f90 -o psb_z_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_ft_llk.F90 -o psb_csparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_to_coo.f90 -o psb_z_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_comm_cbind_mod.f90 -o psb_z_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstabl.f90 -o psb_scgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_llk.F90 -o psb_csparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_coo.f90 -o psb_z_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_fmt.f90 -o psb_z_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_coo.f90 -o psb_z_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk_noth.F90 -o psb_zsparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srgmres.f90 -o psb_srgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk.F90 -o psb_zsparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstab.f90 -o psb_ccgstab.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_mlk.F90 -o psb_zsparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_ft_llk.F90 -o psb_zsparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_llk.F90 -o psb_zsparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_psblas_cbind_mod.f90 -o psb_base_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_fmt.f90 -o psb_z_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk_noth.F90 -o psb_ssparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk.F90 -o psb_ssparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_aclsum.f90 -o psb_z_dia_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_allocate_mnnz.f90 -o psb_z_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_arwsum.f90 -o psb_z_dia_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccg.F90 -o psb_ccg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_mlk.F90 -o psb_ssparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_ft_llk.F90 -o psb_ssparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cfcg.F90 -o psb_cfcg.o +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cgcr.f90 -o psb_cgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_colsum.f90 -o psb_z_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetptn.f90 -o psb_z_dia_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetrow.f90 -o psb_z_dia_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_llk.F90 -o psb_ssparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ainv_bld.f90 -o psb_d_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmm.f90 -o psb_z_dia_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmv.f90 -o psb_z_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgs.f90 -o psb_ccgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ainv_bld.f90 -o psb_c_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ainv_bld.f90 -o psb_s_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cbicg.f90 -o psb_cbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ainv_bld.f90 -o psb_z_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invt_fact.f90 -o psb_c_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invt_fact.f90 -o psb_d_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invt_fact.f90 -o psb_s_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invt_fact.f90 -o psb_z_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstabl.f90 -o psb_ccgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crgmres.f90 -o psb_crgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invk_fact.f90 -o psb_c_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_get_diag.f90 -o psb_z_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invk_fact.f90 -o psb_d_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_maxval.f90 -o psb_z_dia_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_mold.f90 -o psb_z_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_print.f90 -o psb_z_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invk_fact.f90 -o psb_s_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstab.f90 -o psb_zcgstab.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcg.F90 -o psb_zcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zfcg.F90 -o psb_zfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invk_fact.f90 -o psb_z_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zgcr.f90 -o psb_zgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgs.f90 -o psb_zcgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reallocate_nz.f90 -o psb_z_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zbicg.f90 -o psb_zbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reinit.f90 -o psb_z_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_rowsum.f90 -o psb_z_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scal.f90 -o psb_z_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scals.f90 -o psb_z_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_aclsum.f90 -o psb_z_ell_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstabl.f90 -o psb_zcgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrgmres.f90 -o psb_zrgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_allocate_mnnz.f90 -o psb_z_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_arwsum.f90 -o psb_z_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_colsum.f90 -o psb_z_ell_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetblk.f90 -o psb_z_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetptn.f90 -o psb_z_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetrow.f90 -o psb_z_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmm.f90 -o psb_z_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmv.f90 -o psb_z_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnm1.f90 -o psb_z_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnmi.f90 -o psb_z_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csput.f90 -o psb_z_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssm.f90 -o psb_z_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssv.f90 -o psb_z_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_get_diag.f90 -o psb_z_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_maxval.f90 -o psb_z_ell_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_mold.f90 -o psb_z_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_print.f90 -o psb_z_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reallocate_nz.f90 -o psb_z_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reinit.f90 -o psb_z_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_rowsum.f90 -o psb_z_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scal.f90 -o psb_z_ell_scal.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scals.f90 -o psb_z_ell_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_trim.f90 -o psb_z_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_allocate_mnnz.f90 -o psb_z_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_csmv.f90 -o psb_z_hdia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_mold.f90 -o psb_z_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_print.f90 -o psb_z_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_aclsum.f90 -o psb_z_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_allocate_mnnz.f90 -o psb_z_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_arwsum.f90 -o psb_z_hll_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_colsum.f90 -o psb_z_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetblk.f90 -o psb_z_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetptn.f90 -o psb_z_hll_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetrow.f90 -o psb_z_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmm.f90 -o psb_z_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmv.f90 -o psb_z_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnm1.f90 -o psb_z_hll_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnmi.f90 -o psb_z_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csput.f90 -o psb_z_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssm.f90 -o psb_z_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssv.f90 -o psb_z_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_get_diag.f90 -o psb_z_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_maxval.f90 -o psb_z_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_mold.f90 -o psb_z_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_print.f90 -o psb_z_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reallocate_nz.f90 -o psb_z_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reinit.f90 -o psb_z_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_rowsum.f90 -o psb_z_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scal.f90 -o psb_z_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scals.f90 -o psb_z_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_dia_from_coo.f90 -o psb_z_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_coo.f90 -o psb_z_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_fmt.f90 -o psb_z_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_coo.f90 -o psb_z_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_fmt.f90 -o psb_z_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_from_coo.f90 -o psb_z_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_to_coo.f90 -o psb_z_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_coo.f90 -o psb_z_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_fmt.f90 -o psb_z_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_coo.f90 -o psb_z_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_fmt.f90 -o psb_z_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_ell_from_coo.f90 -o psi_s_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_ell_from_coo.f90 -o psi_c_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_ell_from_coo.f90 -o psi_d_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_ell_from_coo.f90 -o psi_z_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_ell_from_coo.f90 -o psi_s_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_ell_from_coo.f90 -o psi_c_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_ell_from_coo.f90 -o psi_d_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_ell_from_coo.f90 -o psi_z_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_hll_from_coo.f90 -o psi_s_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_hll_from_coo.f90 -o psi_c_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_hll_from_coo.f90 -o psi_d_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_hll_from_coo.f90 -o psi_z_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_dia_from_coo.f90 -o psi_s_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_dia_from_coo.f90 -o psi_c_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_dia_from_coo.f90 -o psi_d_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_dia_from_coo.f90 -o psi_z_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_coo_from_dia.f90 -o psi_s_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_coo_from_dia.f90 -o psi_d_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_coo_from_dia.f90 -o psi_c_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_coo_from_dia.f90 -o psi_z_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_dia_from_coo.f90 -o psi_s_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_cbind_mod.f90 -o psb_base_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_dia_from_coo.f90 -o psi_c_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_dia_from_coo.f90 -o psi_d_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_dia_from_coo.f90 -o psi_z_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dns_mat_impl.f90 -o psb_s_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dns_mat_impl.f90 -o psb_d_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dns_mat_impl.f90 -o psb_c_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dns_mat_impl.f90 -o psb_z_dns_mat_impl.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_sprec_cbind_mod.f90 -o psb_sprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dprec_cbind_mod.f90 -o psb_dprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cprec_cbind_mod.f90 -o psb_cprec_cbind_mod.o +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_util_cbind_mod.f90 -o psb_c_util_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zprec_cbind_mod.f90 -o psb_zprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_util_cbind_mod.f90 -o psb_d_util_cbind_mod.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sprec.c -o psb_c_sprec.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_util_cbind_mod.f90 -o psb_s_util_cbind_mod.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dprec.c -o psb_c_dprec.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_util_cbind_mod.f90 -o psb_z_util_cbind_mod.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cprec.c -o psb_c_cprec.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zprec.c -o psb_c_zprec.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_prec_cbind_mod.f90 -o psb_prec_cbind_mod.o +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_linsolve_cbind_mod.f90 -o psb_base_linsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_slinsolve_cbind_mod.f90 -o psb_slinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dlinsolve_cbind_mod.f90 -o psb_dlinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_clinsolve_cbind_mod.f90 -o psb_clinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zlinsolve_cbind_mod.f90 -o psb_zlinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_util_cbind_mod.f90 -o psb_util_cbind_mod.o +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C cbind objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C base lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C modules objs F90="" F90COPT=" " +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +/usr/bin/install -c -p -p *.mod ../../modules +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make -C serial objs +make -C comm objs +make -C auxil objs +make -C psblas objs +make -C tools objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C sort objs +make -C internals objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") +make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[3]: «psb_dscatter.o» è aggiornato. +make[3]: «psb_zscatter.o» è aggiornato. +make[3]: «psb_iscatter.o» è aggiornato. +make[3]: «psb_lscatter.o» è aggiornato. +make[3]: «psb_cscatter.o» è aggiornato. +make[3]: «psb_sscatter.o» è aggiornato. +make[3]: «psi_desc_index.o» è aggiornato. +make[3]: «psb_dscatter_a.o» è aggiornato. +make[3]: «psi_fnd_owner.o» è aggiornato. +make[3]: «psb_zscatter_a.o» è aggiornato. +make[3]: «psi_a2a_fnd_owner.o» è aggiornato. +make[3]: «psb_mscatter_a.o» è aggiornato. +make[3]: «psi_graph_fnd_owner.o» è aggiornato. +make[3]: «psb_escatter_a.o» è aggiornato. +make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. +make[3]: «psb_cscatter_a.o» è aggiornato. +make[3]: «psi_symm_dep_list.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: «psb_sscatter_a.o» è aggiornato. +make[3]: «psb_dspgather.o» è aggiornato. +make[3]: «psb_sspgather.o» è aggiornato. +make[3]: «psb_zspgather.o» è aggiornato. +make[3]: «psb_cspgather.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: «psb_icdasb.o» è aggiornato. +make[3]: «psb_ssphalo.o» è aggiornato. +make[3]: «psb_dsphalo.o» è aggiornato. +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[3]: «psb_csphalo.o» è aggiornato. +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: «psb_zsphalo.o» è aggiornato. +make[3]: «psb_dcdbldext.o» è aggiornato. +make[3]: «psb_zcdbldext.o» è aggiornato. +make[3]: «psb_scdbldext.o» è aggiornato. +make[3]: «psb_ccdbldext.o» è aggiornato. +make[3]: «psb_s_remote_mat.o» è aggiornato. +make[3]: «psb_d_remote_mat.o» è aggiornato. +make[3]: «psb_c_remote_mat.o» è aggiornato. +make[3]: «psb_z_remote_mat.o» è aggiornato. +make[3]: «psb_s_remote_vect.o» è aggiornato. +make[3]: «psb_d_remote_vect.o» è aggiornato. +make[3]: «psb_c_remote_vect.o» è aggiornato. +make[3]: «psb_z_remote_vect.o» è aggiornato. +make[3]: «psb_e_remote_vect.o» è aggiornato. +make[3]: «psb_m_remote_vect.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C modules lib LIBNAME=libpsb_base.a F90="" F90COPT=" " +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +/usr/bin/install -c -p -p *.mod ../../modules +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +ar -cDr ..//libpsb_base.a psb_const_mod.o psb_cbind_const_mod.o psb_error_mod.o psb_realloc_mod.o auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o serial/psb_serial_mod.o comm/psb_neighbor_topology_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o serial/psb_vect_mod.o auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o auxil/psb_ip_reord_mod.o auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o auxil/psb_d_msort_mod.o auxil/psb_d_qsort_mod.o auxil/psb_c_hsort_mod.o auxil/psb_c_isort_mod.o auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o auxil/psb_i_hsort_x_mod.o auxil/psb_l_hsort_x_mod.o auxil/psb_s_hsort_x_mod.o auxil/psb_d_hsort_x_mod.o auxil/psb_c_hsort_x_mod.o auxil/psb_z_hsort_x_mod.o auxil/psb_s_rb_idx_tree_mod.o auxil/psb_d_rb_idx_tree_mod.o auxil/psb_c_rb_idx_tree_mod.o auxil/psb_z_rb_idx_tree_mod.o auxil/psb_rb_idx_tree_mod.o serial/psb_base_mat_mod.o serial/psb_mat_mod.o serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_glist_map_mod.o desc/psb_hash_map_mod.o desc/psb_hashval.o desc/psb_desc_mod.o auxil/psb_sort_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o tools/psb_tools_mod.o psb_penv_mod.o penv/psi_penv_mod.o penv/psi_p2p_mod.o penv/psi_m_p2p_mod.o penv/psi_i2_p2p_mod.o penv/psi_e_p2p_mod.o penv/psi_s_p2p_mod.o penv/psi_d_p2p_mod.o penv/psi_c_p2p_mod.o penv/psi_z_p2p_mod.o penv/psi_collective_mod.o penv/psi_i2_collective_mod.o penv/psi_e_collective_mod.o penv/psi_m_collective_mod.o penv/psi_s_collective_mod.o penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_mod.o psb_error_impl.o psb_timers_mod.o comm/psb_base_linmap_mod.o comm/psb_linmap_mod.o comm/psb_s_linmap_mod.o comm/psb_d_linmap_mod.o comm/psb_c_linmap_mod.o comm/psb_z_linmap_mod.o comm/psb_comm_mod.o comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o comm/psi_s_comm_v_mod.o comm/psi_d_comm_v_mod.o comm/psi_c_comm_v_mod.o comm/psi_z_comm_v_mod.o psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o psblas/psb_psblas_mod.o psb_check_mod.o desc/psb_hash_mod.o error.o psb_base_mod.o cutil.o +ranlib ..//libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make -C serial lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C impl objs +make -C sort objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make -C impl lib +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +ar -cDr ../../libpsb_base.a psb_base_mat_impl.o psb_s_base_mat_impl.o psb_d_base_mat_impl.o psb_c_base_mat_impl.o psb_z_base_mat_impl.o psb_s_csr_impl.o psb_s_coo_impl.o psb_s_csc_impl.o psb_s_mat_impl.o psb_s_rb_idx_tree_impl.o psb_d_csr_impl.o psb_d_coo_impl.o psb_d_csc_impl.o psb_d_mat_impl.o psb_d_rb_idx_tree_impl.o psb_c_csr_impl.o psb_c_coo_impl.o psb_c_csc_impl.o psb_c_mat_impl.o psb_c_rb_idx_tree_impl.o psb_z_csr_impl.o psb_z_coo_impl.o psb_z_csc_impl.o psb_z_mat_impl.o psb_z_rb_idx_tree_impl.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make -C sort lib +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +ar -cDr ../../libpsb_base.a psb_s_hsort_impl.o psb_s_isort_impl.o psb_s_msort_impl.o psb_s_qsort_impl.o psb_d_hsort_impl.o psb_d_isort_impl.o psb_d_msort_impl.o psb_d_qsort_impl.o psb_c_hsort_impl.o psb_c_isort_impl.o psb_c_msort_impl.o psb_c_qsort_impl.o psb_z_hsort_impl.o psb_z_isort_impl.o psb_z_msort_impl.o psb_z_qsort_impl.o psb_m_hsort_impl.o psb_m_isort_impl.o psb_m_msort_impl.o psb_m_qsort_impl.o psb_e_hsort_impl.o psb_e_isort_impl.o psb_e_msort_impl.o psb_e_qsort_impl.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +ar -cDr ../libpsb_base.a psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o psi_s_serial_impl.o psi_d_serial_impl.o psi_c_serial_impl.o psi_z_serial_impl.o psb_srwextd.o psb_drwextd.o psb_crwextd.o psb_zrwextd.o psb_sspspmm.o psb_dspspmm.o psb_cspspmm.o psb_zspspmm.o psb_ssymbmm.o psb_dsymbmm.o psb_csymbmm.o psb_zsymbmm.o psb_snumbmm.o psb_dnumbmm.o psb_cnumbmm.o psb_znumbmm.o smmp.o lsmmp.o psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C comm lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C internals objs +make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[3]: «psb_dscatter.o» è aggiornato. +make[3]: «psb_zscatter.o» è aggiornato. +make[3]: «psb_iscatter.o» è aggiornato. +make[3]: «psb_lscatter.o» è aggiornato. +make[3]: «psb_cscatter.o» è aggiornato. +make[3]: «psb_sscatter.o» è aggiornato. +make[3]: «psb_dscatter_a.o» è aggiornato. +make[3]: «psb_zscatter_a.o» è aggiornato. +make[3]: «psb_mscatter_a.o» è aggiornato. +make[3]: «psb_escatter_a.o» è aggiornato. +make[3]: «psb_cscatter_a.o» è aggiornato. +make[3]: «psb_sscatter_a.o» è aggiornato. +make[3]: «psb_dspgather.o» è aggiornato. +make[3]: «psb_sspgather.o» è aggiornato. +make[3]: «psb_zspgather.o» è aggiornato. +make[3]: «psb_cspgather.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make -C internals lib LIBNAME=libpsb_base.a +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +ar -cDr ../../libpsb_base.a psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o psi_iovrl_restr.o psi_iovrl_save.o psi_iovrl_upd.o psi_lovrl_restr.o psi_lovrl_save.o psi_lovrl_upd.o psi_sovrl_restr.o psi_sovrl_save.o psi_sovrl_upd.o psi_dovrl_restr.o psi_dovrl_save.o psi_dovrl_upd.o psi_covrl_restr.o psi_covrl_save.o psi_covrl_upd.o psi_zovrl_restr.o psi_zovrl_save.o psi_zovrl_upd.o psi_movrl_restr_a.o psi_movrl_save_a.o psi_movrl_upd_a.o psi_eovrl_restr_a.o psi_eovrl_save_a.o psi_eovrl_upd_a.o psi_sovrl_restr_a.o psi_sovrl_save_a.o psi_sovrl_upd_a.o psi_dovrl_restr_a.o psi_dovrl_save_a.o psi_dovrl_upd_a.o psi_covrl_restr_a.o psi_covrl_save_a.o psi_covrl_upd_a.o psi_zovrl_restr_a.o psi_zovrl_save_a.o psi_zovrl_upd_a.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +ar -cDr ../libpsb_base.a psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o psb_dgather.o psb_dhalo.o psb_dovrl.o psb_sgather.o psb_shalo.o psb_sovrl.o psb_igather.o psb_ihalo.o psb_iovrl.o psb_lgather.o psb_lhalo.o psb_lovrl.o psb_cgather.o psb_chalo.o psb_covrl.o psb_zgather.o psb_zhalo.o psb_zovrl.o psb_dgather_a.o psb_dhalo_a.o psb_dovrl_a.o psb_sgather_a.o psb_shalo_a.o psb_sovrl_a.o psb_mgather_a.o psb_mhalo_a.o psb_movrl_a.o psb_egather_a.o psb_ehalo_a.o psb_eovrl_a.o psb_cgather_a.o psb_chalo_a.o psb_covrl_a.o psb_zgather_a.o psb_zhalo_a.o psb_zovrl_a.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C auxil lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: «psi_desc_index.o» è aggiornato. +make[3]: «psi_fnd_owner.o» è aggiornato. +make[3]: «psi_a2a_fnd_owner.o» è aggiornato. +make[3]: «psi_graph_fnd_owner.o» è aggiornato. +make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. +make[3]: «psi_symm_dep_list.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +ar -cDr ../libpsb_base.a psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o psi_crea_bnd_elem.o psi_crea_index.o psi_crea_ovr_elem.o psi_bld_tmpovrl.o psi_bld_tmphalo.o psi_sort_dl.o psi_indx_map_fnd_owner.o psi_desc_impl.o psi_hash_impl.o psi_srtlist.o psi_bld_glb_dep_list.o psi_xtr_loc_dl.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make -C psblas lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +ar -cDr ../libpsb_base.a psb_ddot.o psb_damax.o psb_dasum.o psb_daxpby.o psb_dnrm2.o psb_dnrmi.o psb_dspmm.o psb_dspsm.o psb_sspnrm1.o psb_dspnrm1.o psb_cspnrm1.o psb_zspnrm1.o psb_zamax.o psb_zasum.o psb_zaxpby.o psb_zdot.o psb_znrm2.o psb_znrmi.o psb_zspmm.o psb_zspsm.o psb_saxpby.o psb_sdot.o psb_sasum.o psb_samax.o psb_snrm2.o psb_snrmi.o psb_sspmm.o psb_sspsm.o psb_camax.o psb_casum.o psb_caxpby.o psb_cdot.o psb_cnrm2.o psb_cnrmi.o psb_cspmm.o psb_cspsm.o psb_cmlt_vect.o psb_dmlt_vect.o psb_zmlt_vect.o psb_smlt_vect.o psb_cdiv_vect.o psb_ddiv_vect.o psb_zdiv_vect.o psb_sdiv_vect.o psb_cinv_vect.o psb_dinv_vect.o psb_zinv_vect.o psb_sinv_vect.o psb_dcmp_vect.o psb_scmp_vect.o psb_ccmp_vect.o psb_zcmp_vect.o psb_cabs_vect.o psb_dabs_vect.o psb_sabs_vect.o psb_zabs_vect.o psb_cgetmatinfo.o psb_dgetmatinfo.o psb_sgetmatinfo.o psb_zgetmatinfo.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +make -C tools lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: «psb_icdasb.o» è aggiornato. +make[3]: «psb_ssphalo.o» è aggiornato. +make[3]: «psb_dsphalo.o» è aggiornato. +make[3]: «psb_csphalo.o» è aggiornato. +make[3]: «psb_zsphalo.o» è aggiornato. +make[3]: «psb_dcdbldext.o» è aggiornato. +make[3]: «psb_zcdbldext.o» è aggiornato. +make[3]: «psb_scdbldext.o» è aggiornato. +make[3]: «psb_ccdbldext.o» è aggiornato. +make[3]: «psb_s_remote_mat.o» è aggiornato. +make[3]: «psb_d_remote_mat.o» è aggiornato. +make[3]: «psb_c_remote_mat.o» è aggiornato. +make[3]: «psb_z_remote_mat.o» è aggiornato. +make[3]: «psb_s_remote_vect.o» è aggiornato. +make[3]: «psb_d_remote_vect.o» è aggiornato. +make[3]: «psb_c_remote_vect.o» è aggiornato. +make[3]: «psb_z_remote_vect.o» è aggiornato. +make[3]: «psb_e_remote_vect.o» è aggiornato. +make[3]: «psb_m_remote_vect.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +ar -cDr ../libpsb_base.a psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o psb_cdall.o psb_cdals.o psb_cdalv.o psb_cd_inloc.o psb_cdins.o psb_cdprt.o psb_cdren.o psb_cdrep.o psb_get_overlap.o psb_cd_lstext.o psb_cd_remap.o psb_cdcpy.o psb_cd_reinit.o psb_cd_switch_ovl_indxmap.o psb_cd_renum_block.o psb_dspalloc.o psb_dspasb.o psb_d_remap.o psb_dspfree.o psb_dspins.o psb_dsprn.o psb_sspalloc.o psb_sspasb.o psb_s_remap.o psb_sspfree.o psb_sspins.o psb_ssprn.o psb_glob_to_loc.o psb_loc_to_glob.o psb_iallc.o psb_iasb.o psb_ifree.o psb_iins.o psb_lallc.o psb_lasb.o psb_lfree.o psb_lins.o psb_sallc.o psb_sasb.o psb_sfree.o psb_sins.o psb_dallc.o psb_dasb.o psb_dfree.o psb_dins.o psb_callc.o psb_casb.o psb_cfree.o psb_cins.o psb_zallc.o psb_zasb.o psb_zfree.o psb_zins.o psb_mallc_a.o psb_masb_a.o psb_mfree_a.o psb_mins_a.o psb_eallc_a.o psb_easb_a.o psb_efree_a.o psb_eins_a.o psb_sallc_a.o psb_sasb_a.o psb_sfree_a.o psb_sins_a.o psb_dallc_a.o psb_dasb_a.o psb_dfree_a.o psb_dins_a.o psb_callc_a.o psb_casb_a.o psb_cfree_a.o psb_cins_a.o psb_zallc_a.o psb_zasb_a.o psb_zfree_a.o psb_zins_a.o psb_zspalloc.o psb_zspasb.o psb_z_remap.o psb_zspfree.o psb_zspins.o psb_zsprn.o psb_cspalloc.o psb_cspasb.o psb_c_remap.o psb_cspfree.o psb_cspins.o psb_csprn.o psb_cd_set_bld.o psb_s_map.o psb_d_map.o psb_c_map.o psb_z_map.o psb_s_par_csr_spspmm.o psb_d_par_csr_spspmm.o psb_c_par_csr_spspmm.o psb_z_par_csr_spspmm.o psb_s_glob_transpose.o psb_d_glob_transpose.o psb_c_glob_transpose.o psb_z_glob_transpose.o psb_cgetelem.o psb_dgetelem.o psb_sgetelem.o psb_zgetelem.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +/bin/cp -p ./libpsb_base.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C prec lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make -C impl lib +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +ar -cDr ../libpsb_prec.a psb_s_prec_type_impl.o psb_d_prec_type_impl.o psb_c_prec_type_impl.o psb_z_prec_type_impl.o psb_d_diagprec_impl.o psb_d_bjacprec_impl.o psb_d_nullprec_impl.o psb_d_ilu0_fact.o psb_d_iluk_fact.o psb_d_ilut_fact.o psb_dprecbld.o psb_dprecinit.o psb_s_diagprec_impl.o psb_s_bjacprec_impl.o psb_s_nullprec_impl.o psb_s_ilu0_fact.o psb_s_iluk_fact.o psb_s_ilut_fact.o psb_sprecbld.o psb_sprecinit.o psb_c_diagprec_impl.o psb_c_bjacprec_impl.o psb_c_nullprec_impl.o psb_c_ilu0_fact.o psb_c_iluk_fact.o psb_c_ilut_fact.o psb_cprecbld.o psb_cprecinit.o psb_z_diagprec_impl.o psb_z_bjacprec_impl.o psb_z_nullprec_impl.o psb_z_ilu0_fact.o psb_z_iluk_fact.o psb_z_ilut_fact.o psb_zprecbld.o psb_zprecinit.o psb_c_sparsify.o psb_d_sparsify.o psb_s_sparsify.o psb_z_sparsify.o psb_crwclip.o psb_drwclip.o psb_srwclip.o psb_zrwclip.o psb_c_sp_drop.o psb_d_sp_drop.o psb_s_sp_drop.o psb_z_sp_drop.o psb_dsparse_biconjg_llk_noth.o psb_dsparse_biconjg_llk.o psb_dsparse_biconjg_mlk.o psb_dsparse_biconjg_s_ft_llk.o psb_dsparse_biconjg_s_llk.o psb_csparse_biconjg_llk_noth.o psb_csparse_biconjg_llk.o psb_csparse_biconjg_mlk.o psb_csparse_biconjg_s_ft_llk.o psb_csparse_biconjg_s_llk.o psb_zsparse_biconjg_llk_noth.o psb_zsparse_biconjg_llk.o psb_zsparse_biconjg_mlk.o psb_zsparse_biconjg_s_ft_llk.o psb_zsparse_biconjg_s_llk.o psb_ssparse_biconjg_llk_noth.o psb_ssparse_biconjg_llk.o psb_ssparse_biconjg_mlk.o psb_ssparse_biconjg_s_ft_llk.o psb_ssparse_biconjg_s_llk.o psb_d_ainv_bld.o psb_c_ainv_bld.o psb_s_ainv_bld.o psb_z_ainv_bld.o psb_c_invt_fact.o psb_d_invt_fact.o psb_s_invt_fact.o psb_z_invt_fact.o psb_c_invk_fact.o psb_d_invk_fact.o psb_s_invk_fact.o psb_z_invk_fact.o +ranlib ../libpsb_prec.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +ar -cDr ./libpsb_prec.a psb_prec_const_mod.o psb_s_prec_type.o psb_d_prec_type.o psb_c_prec_type.o psb_z_prec_type.o psb_s_base_prec_mod.o psb_d_base_prec_mod.o psb_c_base_prec_mod.o psb_z_base_prec_mod.o psb_prec_type.o psb_prec_mod.o psb_s_prec_mod.o psb_d_prec_mod.o psb_c_prec_mod.o psb_z_prec_mod.o psb_d_diagprec.o psb_d_nullprec.o psb_d_bjacprec.o psb_s_ilu_fact_mod.o psb_s_diagprec.o psb_s_nullprec.o psb_s_bjacprec.o psb_d_ilu_fact_mod.o psb_c_diagprec.o psb_c_nullprec.o psb_c_bjacprec.o psb_c_ilu_fact_mod.o psb_z_diagprec.o psb_z_nullprec.o psb_z_bjacprec.o psb_z_ilu_fact_mod.o psb_c_ainv_fact_mod.o psb_d_ainv_fact_mod.o psb_s_ainv_fact_mod.o psb_z_ainv_fact_mod.o psb_c_ainv_tools_mod.o psb_d_ainv_tools_mod.o psb_s_ainv_tools_mod.o psb_z_ainv_tools_mod.o psb_ainv_tools_mod.o psb_biconjg_mod.o psb_c_biconjg_mod.o psb_d_biconjg_mod.o psb_s_biconjg_mod.o psb_z_biconjg_mod.o psb_c_invt_fact_mod.o psb_d_invt_fact_mod.o psb_s_invt_fact_mod.o psb_z_invt_fact_mod.o psb_c_invk_fact_mod.o psb_d_invk_fact_mod.o psb_s_invk_fact_mod.o psb_z_invk_fact_mod.o +ranlib ./libpsb_prec.a +/bin/cp -p ./libpsb_prec.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +make -C linsolve lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make -C impl lib +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +ar -cDr ../libpsb_linsolve.a psb_dkrylov.o psb_skrylov.o psb_ckrylov.o psb_zkrylov.o psb_drichardson.o psb_srichardson.o psb_crichardson.o psb_zrichardson.o psb_dcgstab.o psb_dcg.o psb_dfcg.o psb_dgcr.o psb_dcgs.o psb_dbicg.o psb_dcgstabl.o psb_drgmres.o psb_scgstab.o psb_scg.o psb_sfcg.o psb_sgcr.o psb_scgs.o psb_sbicg.o psb_scgstabl.o psb_srgmres.o psb_ccgstab.o psb_ccg.o psb_cfcg.o psb_cgcr.o psb_ccgs.o psb_cbicg.o psb_ccgstabl.o psb_crgmres.o psb_zcgstab.o psb_zcg.o psb_zfcg.o psb_zgcr.o psb_zcgs.o psb_zbicg.o psb_zcgstabl.o psb_zrgmres.o +ranlib ../libpsb_linsolve.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +ar -cDr ./libpsb_linsolve.a psb_base_linsolve_conv_mod.o psb_s_linsolve_conv_mod.o psb_c_linsolve_conv_mod.o psb_d_linsolve_conv_mod.o psb_z_linsolve_conv_mod.o psb_linsolve_mod.o +ranlib ./libpsb_linsolve.a +/bin/cp -p ./libpsb_linsolve.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +make -C util lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +/usr/bin/install -c -p -p *.mod ../modules +ar -cDr ./libpsb_util.a psb_metis_int.o psb_amd_order.o psb_util_mod.o psb_blockpart_mod.o psb_metispart_mod.o psb_partidx_mod.o psb_hbio_mod.o psb_mmio_mod.o psb_mat_dist_mod.o psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o psb_renum_mod.o psb_gps_mod.o psb_s_renum_mod.o psb_d_renum_mod.o psb_c_renum_mod.o psb_z_renum_mod.o psb_s_hbio_impl.o psb_d_hbio_impl.o psb_c_hbio_impl.o psb_z_hbio_impl.o psb_s_mmio_impl.o psb_d_mmio_impl.o psb_c_mmio_impl.o psb_z_mmio_impl.o psb_i_mmio_impl.o psb_s_mat_dist_impl.o psb_d_mat_dist_impl.o psb_c_mat_dist_impl.o psb_z_mat_dist_impl.o psb_s_renum_impl.o psb_d_renum_impl.o psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o +ranlib ./libpsb_util.a +/bin/cp -p ./libpsb_util.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +make -C cbind lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +cd base && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +ar -cDr ../libpsb_cbind.a psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o psb_c_scomm.o psb_c_dcomm.o psb_c_ccomm.o psb_c_zcomm.o +ranlib ../libpsb_cbind.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +ar -cDr ../libpsb_cbind.a psb_prec_cbind_mod.o psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o psb_c_sprec.o psb_c_dprec.o psb_c_cprec.o psb_c_zprec.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +ar -cDr ../libpsb_cbind.a psb_base_linsolve_cbind_mod.o psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +cd util && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +ar -cDr ../libpsb_cbind.a psb_util_cbind_mod.o psb_c_util_cbind_mod.o psb_d_util_cbind_mod.o psb_s_util_cbind_mod.o psb_z_util_cbind_mod.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p ./libpsb_cbind.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C ext lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +/bin/cp -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make -C impl lib LIBNAME=libpsb_ext.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +ar -cDr ../libpsb_ext.a psb_s_cp_dia_from_coo.o psb_s_cp_dia_to_coo.o psb_s_cp_ell_from_coo.o psb_s_cp_ell_from_fmt.o psb_s_cp_ell_to_coo.o psb_s_cp_ell_to_fmt.o psb_s_cp_hdia_from_coo.o psb_s_cp_hdia_to_coo.o psb_s_cp_hll_from_coo.o psb_s_cp_hll_from_fmt.o psb_s_cp_hll_to_coo.o psb_s_cp_hll_to_fmt.o psb_s_dia_aclsum.o psb_s_dia_allocate_mnnz.o psb_s_dia_arwsum.o psb_s_dia_colsum.o psb_s_dia_csgetptn.o psb_s_dia_csgetrow.o psb_s_dia_csmm.o psb_s_dia_csmv.o psb_s_dia_get_diag.o psb_s_dia_maxval.o psb_s_dia_mold.o psb_s_dia_print.o psb_s_dia_reallocate_nz.o psb_s_dia_reinit.o psb_s_dia_rowsum.o psb_s_dia_scal.o psb_s_dia_scals.o psb_s_ell_aclsum.o psb_s_ell_allocate_mnnz.o psb_s_ell_arwsum.o psb_s_ell_colsum.o psb_s_ell_csgetblk.o psb_s_ell_csgetptn.o psb_s_ell_csgetrow.o psb_s_ell_csmm.o psb_s_ell_csmv.o psb_s_ell_csnm1.o psb_s_ell_csnmi.o psb_s_ell_csput.o psb_s_ell_cssm.o psb_s_ell_cssv.o psb_s_ell_get_diag.o psb_s_ell_maxval.o psb_s_ell_mold.o psb_s_ell_print.o psb_s_ell_reallocate_nz.o psb_s_ell_reinit.o psb_s_ell_rowsum.o psb_s_ell_scal.o psb_s_ell_scals.o psb_s_ell_trim.o psb_s_hdia_allocate_mnnz.o psb_s_hdia_csmv.o psb_s_hdia_mold.o psb_s_hdia_print.o psb_s_hll_aclsum.o psb_s_hll_allocate_mnnz.o psb_s_hll_arwsum.o psb_s_hll_colsum.o psb_s_hll_csgetblk.o psb_s_hll_csgetptn.o psb_s_hll_csgetrow.o psb_s_hll_csmm.o psb_s_hll_csmv.o psb_s_hll_csnm1.o psb_s_hll_csnmi.o psb_s_hll_csput.o psb_s_hll_cssm.o psb_s_hll_cssv.o psb_s_hll_get_diag.o psb_s_hll_maxval.o psb_s_hll_mold.o psb_s_hll_print.o psb_s_hll_reallocate_nz.o psb_s_hll_reinit.o psb_s_hll_rowsum.o psb_s_hll_scal.o psb_s_hll_scals.o psb_s_mv_dia_from_coo.o psb_s_mv_ell_from_coo.o psb_s_mv_ell_from_fmt.o psb_s_mv_ell_to_coo.o psb_s_mv_ell_to_fmt.o psb_s_mv_hdia_from_coo.o psb_s_mv_hdia_to_coo.o psb_s_mv_hll_from_coo.o psb_s_mv_hll_from_fmt.o psb_s_mv_hll_to_coo.o psb_s_mv_hll_to_fmt.o psb_c_cp_dia_from_coo.o psb_c_cp_dia_to_coo.o psb_c_cp_ell_from_coo.o psb_c_cp_ell_from_fmt.o psb_c_cp_ell_to_coo.o psb_c_cp_ell_to_fmt.o psb_c_cp_hdia_from_coo.o psb_c_cp_hdia_to_coo.o psb_c_cp_hll_from_coo.o psb_c_cp_hll_from_fmt.o psb_c_cp_hll_to_coo.o psb_c_cp_hll_to_fmt.o psb_c_dia_aclsum.o psb_c_dia_allocate_mnnz.o psb_c_dia_arwsum.o psb_c_dia_colsum.o psb_c_dia_csgetptn.o psb_c_dia_csgetrow.o psb_c_dia_csmm.o psb_c_dia_csmv.o psb_c_dia_get_diag.o psb_c_dia_maxval.o psb_c_dia_mold.o psb_c_dia_print.o psb_c_dia_reallocate_nz.o psb_c_dia_reinit.o psb_c_dia_rowsum.o psb_c_dia_scal.o psb_c_dia_scals.o psb_c_ell_aclsum.o psb_c_ell_allocate_mnnz.o psb_c_ell_arwsum.o psb_c_ell_colsum.o psb_c_ell_csgetblk.o psb_c_ell_csgetptn.o psb_c_ell_csgetrow.o psb_c_ell_csmm.o psb_c_ell_csmv.o psb_c_ell_csnm1.o psb_c_ell_csnmi.o psb_c_ell_csput.o psb_c_ell_cssm.o psb_c_ell_cssv.o psb_c_ell_get_diag.o psb_c_ell_maxval.o psb_c_ell_mold.o psb_c_ell_print.o psb_c_ell_reallocate_nz.o psb_c_ell_reinit.o psb_c_ell_rowsum.o psb_c_ell_scal.o psb_c_ell_scals.o psb_c_ell_trim.o psb_c_hdia_allocate_mnnz.o psb_c_hdia_csmv.o psb_c_hdia_mold.o psb_c_hdia_print.o psb_c_hll_aclsum.o psb_c_hll_allocate_mnnz.o psb_c_hll_arwsum.o psb_c_hll_colsum.o psb_c_hll_csgetblk.o psb_c_hll_csgetptn.o psb_c_hll_csgetrow.o psb_c_hll_csmm.o psb_c_hll_csmv.o psb_c_hll_csnm1.o psb_c_hll_csnmi.o psb_c_hll_csput.o psb_c_hll_cssm.o psb_c_hll_cssv.o psb_c_hll_get_diag.o psb_c_hll_maxval.o psb_c_hll_mold.o psb_c_hll_print.o psb_c_hll_reallocate_nz.o psb_c_hll_reinit.o psb_c_hll_rowsum.o psb_c_hll_scal.o psb_c_hll_scals.o psb_c_mv_dia_from_coo.o psb_c_mv_ell_from_coo.o psb_c_mv_ell_from_fmt.o psb_c_mv_ell_to_coo.o psb_c_mv_ell_to_fmt.o psb_c_mv_hdia_from_coo.o psb_c_mv_hdia_to_coo.o psb_c_mv_hll_from_coo.o psb_c_mv_hll_from_fmt.o psb_c_mv_hll_to_coo.o psb_c_mv_hll_to_fmt.o psb_d_cp_dia_from_coo.o psb_d_cp_dia_to_coo.o psb_d_cp_ell_from_coo.o psb_d_cp_ell_from_fmt.o psb_d_cp_ell_to_coo.o psb_d_cp_ell_to_fmt.o psb_d_cp_hdia_from_coo.o psb_d_cp_hdia_to_coo.o psb_d_cp_hll_from_coo.o psb_d_cp_hll_from_fmt.o psb_d_cp_hll_to_coo.o psb_d_cp_hll_to_fmt.o psb_d_dia_aclsum.o psb_d_dia_allocate_mnnz.o psb_d_dia_arwsum.o psb_d_dia_colsum.o psb_d_dia_csgetptn.o psb_d_dia_csgetrow.o psb_d_dia_csmm.o psb_d_dia_csmv.o psb_d_dia_get_diag.o psb_d_dia_maxval.o psb_d_dia_mold.o psb_d_dia_print.o psb_d_dia_reallocate_nz.o psb_d_dia_reinit.o psb_d_dia_rowsum.o psb_d_dia_scal.o psb_d_dia_scals.o psb_d_ell_aclsum.o psb_d_ell_allocate_mnnz.o psb_d_ell_arwsum.o psb_d_ell_colsum.o psb_d_ell_csgetblk.o psb_d_ell_csgetptn.o psb_d_ell_csgetrow.o psb_d_ell_csmm.o psb_d_ell_csmv.o psb_d_ell_csnm1.o psb_d_ell_csnmi.o psb_d_ell_csput.o psb_d_ell_cssm.o psb_d_ell_cssv.o psb_d_ell_get_diag.o psb_d_ell_maxval.o psb_d_ell_mold.o psb_d_ell_print.o psb_d_ell_reallocate_nz.o psb_d_ell_reinit.o psb_d_ell_rowsum.o psb_d_ell_scal.o psb_d_ell_scals.o psb_d_ell_trim.o psb_d_hdia_allocate_mnnz.o psb_d_hdia_csmv.o psb_d_hdia_mold.o psb_d_hdia_print.o psb_d_hll_aclsum.o psb_d_hll_allocate_mnnz.o psb_d_hll_arwsum.o psb_d_hll_colsum.o psb_d_hll_csgetblk.o psb_d_hll_csgetptn.o psb_d_hll_csgetrow.o psb_d_hll_csmm.o psb_d_hll_csmv.o psb_d_hll_csnm1.o psb_d_hll_csnmi.o psb_d_hll_csput.o psb_d_hll_cssm.o psb_d_hll_cssv.o psb_d_hll_get_diag.o psb_d_hll_maxval.o psb_d_hll_mold.o psb_d_hll_print.o psb_d_hll_reallocate_nz.o psb_d_hll_reinit.o psb_d_hll_rowsum.o psb_d_hll_scal.o psb_d_hll_scals.o psb_d_mv_dia_from_coo.o psb_d_mv_ell_from_coo.o psb_d_mv_ell_from_fmt.o psb_d_mv_ell_to_coo.o psb_d_mv_ell_to_fmt.o psb_d_mv_hdia_from_coo.o psb_d_mv_hdia_to_coo.o psb_d_mv_hll_from_coo.o psb_d_mv_hll_from_fmt.o psb_d_mv_hll_to_coo.o psb_d_mv_hll_to_fmt.o psb_z_cp_dia_from_coo.o psb_z_cp_dia_to_coo.o psb_z_cp_ell_from_coo.o psb_z_cp_ell_from_fmt.o psb_z_cp_ell_to_coo.o psb_z_cp_ell_to_fmt.o psb_z_cp_hdia_from_coo.o psb_z_cp_hdia_to_coo.o psb_z_cp_hll_from_coo.o psb_z_cp_hll_from_fmt.o psb_z_cp_hll_to_coo.o psb_z_cp_hll_to_fmt.o psb_z_dia_aclsum.o psb_z_dia_allocate_mnnz.o psb_z_dia_arwsum.o psb_z_dia_colsum.o psb_z_dia_csgetptn.o psb_z_dia_csgetrow.o psb_z_dia_csmm.o psb_z_dia_csmv.o psb_z_dia_get_diag.o psb_z_dia_maxval.o psb_z_dia_mold.o psb_z_dia_print.o psb_z_dia_reallocate_nz.o psb_z_dia_reinit.o psb_z_dia_rowsum.o psb_z_dia_scal.o psb_z_dia_scals.o psb_z_ell_aclsum.o psb_z_ell_allocate_mnnz.o psb_z_ell_arwsum.o psb_z_ell_colsum.o psb_z_ell_csgetblk.o psb_z_ell_csgetptn.o psb_z_ell_csgetrow.o psb_z_ell_csmm.o psb_z_ell_csmv.o psb_z_ell_csnm1.o psb_z_ell_csnmi.o psb_z_ell_csput.o psb_z_ell_cssm.o psb_z_ell_cssv.o psb_z_ell_get_diag.o psb_z_ell_maxval.o psb_z_ell_mold.o psb_z_ell_print.o psb_z_ell_reallocate_nz.o psb_z_ell_reinit.o psb_z_ell_rowsum.o psb_z_ell_scal.o psb_z_ell_scals.o psb_z_ell_trim.o psb_z_hdia_allocate_mnnz.o psb_z_hdia_csmv.o psb_z_hdia_mold.o psb_z_hdia_print.o psb_z_hll_aclsum.o psb_z_hll_allocate_mnnz.o psb_z_hll_arwsum.o psb_z_hll_colsum.o psb_z_hll_csgetblk.o psb_z_hll_csgetptn.o psb_z_hll_csgetrow.o psb_z_hll_csmm.o psb_z_hll_csmv.o psb_z_hll_csnm1.o psb_z_hll_csnmi.o psb_z_hll_csput.o psb_z_hll_cssm.o psb_z_hll_cssv.o psb_z_hll_get_diag.o psb_z_hll_maxval.o psb_z_hll_mold.o psb_z_hll_print.o psb_z_hll_reallocate_nz.o psb_z_hll_reinit.o psb_z_hll_rowsum.o psb_z_hll_scal.o psb_z_hll_scals.o psb_z_mv_dia_from_coo.o psb_z_mv_ell_from_coo.o psb_z_mv_ell_from_fmt.o psb_z_mv_ell_to_coo.o psb_z_mv_ell_to_fmt.o psb_z_mv_hdia_from_coo.o psb_z_mv_hdia_to_coo.o psb_z_mv_hll_from_coo.o psb_z_mv_hll_from_fmt.o psb_z_mv_hll_to_coo.o psb_z_mv_hll_to_fmt.o psi_s_xtr_ell_from_coo.o psi_c_xtr_ell_from_coo.o psi_d_xtr_ell_from_coo.o psi_z_xtr_ell_from_coo.o psi_s_convert_ell_from_coo.o psi_c_convert_ell_from_coo.o psi_d_convert_ell_from_coo.o psi_z_convert_ell_from_coo.o psi_s_convert_hll_from_coo.o psi_c_convert_hll_from_coo.o psi_d_convert_hll_from_coo.o psi_z_convert_hll_from_coo.o psi_s_xtr_dia_from_coo.o psi_c_xtr_dia_from_coo.o psi_d_xtr_dia_from_coo.o psi_z_xtr_dia_from_coo.o psi_s_xtr_coo_from_dia.o psi_d_xtr_coo_from_dia.o psi_c_xtr_coo_from_dia.o psi_z_xtr_coo_from_dia.o psi_s_convert_dia_from_coo.o psi_c_convert_dia_from_coo.o psi_d_convert_dia_from_coo.o psi_z_convert_dia_from_coo.o psb_s_dns_mat_impl.o psb_d_dns_mat_impl.o psb_c_dns_mat_impl.o psb_z_dns_mat_impl.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +ar -cDr libpsb_ext.a psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o psb_s_hll_mat_mod.o psb_s_ell_mat_mod.o psb_c_hll_mat_mod.o psb_c_ell_mat_mod.o psb_z_hll_mat_mod.o psb_z_ell_mat_mod.o psb_d_dia_mat_mod.o psb_d_hdia_mat_mod.o psb_s_dia_mat_mod.o psb_s_hdia_mat_mod.o psb_c_dia_mat_mod.o psb_c_hdia_mat_mod.o psb_z_dia_mat_mod.o psb_z_hdia_mat_mod.o psb_s_dns_mat_mod.o psb_d_dns_mat_mod.o psb_c_dns_mat_mod.o psb_z_dns_mat_mod.o psi_ext_util_mod.o psi_i_ext_util_mod.o psi_s_ext_util_mod.o psi_c_ext_util_mod.o psi_d_ext_util_mod.o psi_z_ext_util_mod.o psb_ext_mod.o +/bin/cp -p libpsb_ext.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +===================================== +PSBLAS libraries Compilation Successful. From 476167577f8871d6d764c2a46d03cd1ff8993ae0 Mon Sep 17 00:00:00 2001 From: federicamontes Date: Tue, 17 Mar 2026 11:30:42 +0100 Subject: [PATCH 117/175] aligned single precision -- psi_dswapdata and psi_sswapdata, removed _vidx_vect functions --- base/comm/internals/psi_dswapdata.F90 | 3 +- base/comm/internals/psi_sswapdata.F90 | 336 ++++++++----------------- base/modules/comm/psi_s_comm_v_mod.f90 | 43 +--- 3 files changed, 117 insertions(+), 265 deletions(-) diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index c5c043e65..19ce72a2e 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -113,7 +113,6 @@ contains type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name ! local variables used to detect the communication scheme logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait @@ -631,7 +630,7 @@ contains integer(psb_mpk_) :: icomm integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name + character(len=30) :: name info = psb_success_ name = 'psi_dswapdata_multivect' diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index c4cfbf053..4718c3e38 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -105,25 +105,34 @@ contains integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_), target :: work(:) - type(psb_desc_type), target :: desc_a + class(psb_s_base_vect_type) :: y + real(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + real(psb_spk_), target :: work(:) integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + ! error handling variables + integer(psb_ipk_) :: err_act + integer(psb_mpk_) :: me, np + character(len=30) :: name + info=psb_success_ - name='psi_swap_datav' + name='psi_sswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -149,122 +158,50 @@ contains goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psi_sswapdata_vect - - - ! - ! - ! Subroutine: psi_sswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_sswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait -#ifdef PSB_MPI_MOD - use mpi -#endif - implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif - - type(psb_ctxt_type), intent(in) :: ctxt - !integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av - - ! local variable used for get the communicator - integer(psb_mpk_) :: icomm - - ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name - - - info=psb_success_ - name='psi_sswap_vidx_vect' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - - icomm = ctxt%get_mpic() - - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 - end if - - - if (baseline) then - call psi_sswap_baseline_vect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') goto 9999 end if - else if (neighbor_a2av) then - call psi_sswap_neighbor_topology_vect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + + if (baseline) then + call psi_dswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + call psb_erractionrestore(err_act) + return + 9999 call psb_error_handler(ctxt,err_act) - return + return + end subroutine psi_sswapdata_vect + - end subroutine psi_sswap_vidx_vect @@ -694,25 +631,30 @@ end subroutine psi_sswap_neighbor_topology_vect integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_), target :: work(:) - type(psb_desc_type), target :: desc_a + class(psb_s_base_multivect_type) :: y + real(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + real(psb_spk_), target :: work(:) integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + info=psb_success_ - name='psi_swap_datav' + name='psi_sswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() + + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ @@ -738,120 +680,52 @@ end subroutine psi_sswap_neighbor_topology_vect goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) - if (info /= psb_success_) goto 9999 - - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psi_sswapdata_multivect - - - ! - ! - ! Subroutine: psi_sswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_sswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) -#ifdef PSB_MPI_MOD - use mpi -#endif - implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif - - type(psb_ctxt_type), intent(in) :: ctxt - !integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 - ! local variable used to get communicator - integer(psb_mpk_) :: icomm - - ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name - - - info=psb_success_ - name='psi_sswap_vidx_multivect' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - - icomm = ctxt%get_mpic() - - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 - end if + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + icomm = ctxt%get_mpic() - if (baseline) then - call psi_sswap_baseline_multivect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') goto 9999 end if - else if (neighbor_a2av) then - call psi_sswap_neighbor_topology_multivect(ctxt,icomm,flag,beta,y,idx,totxch,totsnd,totrcv,work,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + + + if (baseline) then + call psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if - - call psb_erractionrestore(err_act) - return + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return + return + end subroutine psi_sswapdata_multivect + - end subroutine psi_sswap_vidx_multivect diff --git a/base/modules/comm/psi_s_comm_v_mod.f90 b/base/modules/comm/psi_s_comm_v_mod.f90 index 170e7c910..ccd114cc7 100644 --- a/base/modules/comm/psi_s_comm_v_mod.f90 +++ b/base/modules/comm/psi_s_comm_v_mod.f90 @@ -39,46 +39,25 @@ module psi_s_comm_v_mod module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_),target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + class(psb_s_base_vect_type) :: y + real(psb_spk_), intent(in) :: beta + real(psb_spk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data end subroutine psi_sswapdata_vect module subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_),target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + class(psb_s_base_multivect_type) :: y + real(psb_spk_), intent(in) :: beta + real(psb_spk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data end subroutine psi_sswapdata_multivect - module subroutine psi_sswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_sswap_vidx_vect - module subroutine psi_sswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_sswap_vidx_multivect end interface psi_swapdata + interface psi_swaptran module subroutine psi_sswaptran_vect(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag From dc61cbb0a2053009bacc71b69221b68e96f80716 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Tue, 17 Mar 2026 13:58:43 +0100 Subject: [PATCH 118/175] [UPDATE] Mid commit to fix dist_graph_create --- base/comm/internals/psi_dswapdata.F90 | 6 +- ...s_comm_v_mod@psi_s_ovrl_restr_v_impl.smod0 | Bin 0 -> 49152 bytes base/comm/internals/psi_sswapdata.F90 | 150 +- base/comm/internals/psi_sswaptran.F90 | 60 +- base/comm/psb_dhalo.f90 | 6 +- base/comm/psb_dovrl.f90 | 8 +- base/comm/psb_shalo.f90 | 14 +- base/comm/psb_sovrl.f90 | 3 +- base/modules/comm/psi_d_comm_v_mod.f90 | 8 +- base/modules/comm/psi_s_comm_v_mod.f90 | 32 +- base/psblas/psb_dspmm.f90 | 42 +- log.txt | 1870 ++--------------- test/comm/Makefile | 33 + test/comm/psb_comm_test.F90 | 281 +++ 14 files changed, 600 insertions(+), 1913 deletions(-) create mode 100644 base/comm/internals/psi_s_comm_v_mod@psi_s_ovrl_restr_v_impl.smod0 create mode 100644 test/comm/Makefile create mode 100644 test/comm/psb_comm_test.F90 diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 19ce72a2e..6dcc4eea6 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -91,7 +91,7 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod contains - module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,info,data,work) #ifdef PSB_MPI_MOD use mpi @@ -476,6 +476,8 @@ contains goto 9999 endif + icomm = ctxt%get_mpic() + do_start = iand(flag,psb_swap_start_) /= 0 do_wait = iand(flag,psb_swap_wait_) /= 0 @@ -604,7 +606,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,info,data,work) #ifdef PSB_MPI_MOD use mpi #endif diff --git a/base/comm/internals/psi_s_comm_v_mod@psi_s_ovrl_restr_v_impl.smod0 b/base/comm/internals/psi_s_comm_v_mod@psi_s_ovrl_restr_v_impl.smod0 new file mode 100644 index 0000000000000000000000000000000000000000..5767f7ca74babbd3a282c786fa29902a6cc189f6 GIT binary patch literal 49152 zcmaI719W8Hw)UNL>`KQ;$F@7RZQHhO+qP}1oL4vwq`Q&zf`X zJw}bH+H38#aU&ps{&|6{cWJn+H`i0YPwLFrgyTM93}CxT>eoCNWm1t6rg%+ypW;hk zYnU|ANKotS>U>Q=`J=@Op6QEOyAu@`l7tE8L4zqSRQBVS z=s9$8babj>Lpe0Ew{8B~vXoZw(bCDTsdhFw+c*e0yLfeP=xF=Y@d;{wz3f1%2zjSf zF)vavHd3)ZP|5rGAP(tCvoBtnG)<|e+*ci_0oC(UkN7MJnQ>wyN%8$bNXcv1XA3*4 z^2^=F&dI^6kzKuJ$~omM;US|TVy+>gMTD~KhANwE<9DkTcGrex<(4I_%xBl8RdkKa z=FUvTM#e+N-iC1$U!Q|BF}4PK54#4g&CT(vr$hAcHOu8|5^Np*CU+aBjLRa6kB*hI z2&Ga>&FyA8#xApn>&N5k?T6A@^iM6ql3|u%PmlRnORQB*ogR*E)(z`w5t-8Ju%5~0 zy(Oo&*KLcAjA9SQO{>?IwR1A8vx<$w;d-mm&;ubnRPkh7#Lr6BE9_IP-?62SjMBH;oMP z9yA3m6xO6(Hw(lw+8|zJKbxH2msbYWzN{{Vk}k8oHZ?yNye?JPDRzYQ)sjk#e>#5f}I88#LBvp~F%G73SuumJW)^zKBF!6USX_)gd386x^#$Oez4cZ*#o+4GLwqjcuc#gADFe*$N=DlCA zhJMaM@&VJKYsj#Me$7Ji3G)??0+drEh&PHii8qV4h_{Nj38)J%7d>#mVH%Wwmo4mw zD7*g`%B<3l202mAlIzSqhj3`{Df0i4&=>!RAqUJUGtQE-uL5Iy7fB0zbIUJLl+{(O(!4ynxZ0Yjn72KhgFpjE`K z1>|KEZJWGxq(~n-;f)5ziS<_5ovi zyxrfHCroU(qPa3tTa_U;E;qw24;RlaHY?I{&@Uq%jTghaKbY=^uUFlCjvB+vJLcAM zyd1eAA(wt128&|j>|tu8c{@bLSp$^`sZKu|r1k%8(x3ewCVTaD ztoc8=-?n4+|8MR;17P4S{4*N(CESl@Am&e~_kM2325G%T@^SVcwGz5BWaF&9N`+J> z=zq*SivO7YsEYqF|DT!vn2DwTt6W|7KV#;Cp)}_HtDF@2+e9UcI>I~rR($D6@JZkH zwEw>vFchYIVAQ4m-R_v!7Be;aV#rq=@Bmb&c!@X0Cu)A@hroAUh+U#aw; z(f^yD^6uxHHs`iFzw8{kVq#wuB67nF0!KIFuJrb+J$&S1HwY#kC1!oT)dr6by%oHEVO1s5fT%#^f1$W37~L#1?*9en?iuwP z4sNL)5Q1WSea!z21#N)=CPB%6&<{Bapoc@8`!}%N>uZ{?T!t@3BFRFKPyfJaluB+W zba%WuJ{(@HsKA0Q@XEp=hm<*e{e8Pz>175Og7EzY7%IFyzOW20Et$;dj)bu|9fOm4 zw{vx{@^q_{z8SpR-9?wa8Qa;oIC)My^4{m-zprr9v=7TfyC|g5r|N*;jp=%0jMEZY z8qxK@9;WoZGo~aspnyb0T+tt3EhhxHnvSe&k^9|MsFM$?XMYO7#_P zt4_K4dbM!q>Tc!S5cHp1RLO`yxS;gDM?V~SGcLV7dbQ&cYwX_I%=B8$T!)2lv9EE{ zSlVlW2*~VNfor%7X4}yBzz|6vremEjHoZTVY-z_)5meGG`xfL|miXV_XRGQT&lcVLk?p>bY z9hfofGJK@62FIdbM!JXgz8!QXwK`hVV?#sR((%|!cRu=XxclL@7n0`FsY7ZT;4#9o zHdkQ&C`RvoyK!^5@p`!NVElAx@4;>aw}@u2a9s4!um5m-GlsCn#l=ui0ujKv)mc=v z)#Hqia)hoM->6y67a_DV|oP8!hy%;;wggy#kEt4ScM-x8A1q z9E<90XwJhwY4GX8Z-4X@185&#zETGE2 z*LprM+oj{q8y~k*vIh>E}@HV$$KrN75yinCdy9wKJ6xOP0K8*M#eZPBxW#!J&?KI^{0E6n#yIs#TbJZxDy0y1~Z^X1b$bUnd`Hj2tiA6NnZ>P5He!DYj) z$x9G1`Z9HcYf9gg;6jh{XN@H0Lr`U&l2ui1-jd9mytZG~w2{fQrhD!`dUkOy$6YE5 zX2&)!{rl(wo){tL;_UHKUF|H@;lq!?*ZuILN#q2Cs6Tv5|WM zP!4m~upK)RB9XS)j-4SkE(^hl6m@u{(+tHBE=pG8#$ zw<93!I6+U4F%`^23NzNKXxh|tZv5(5af(2wUfVO4kY$Uynt8?a=yoL`!OG zxhCqC-aCWsp1ePU(>{CD%4ob}m9EisXOpBgL8t6R)Bl$WIXR%~`c<6LkZ+%=J-N#k zaYPkB;R=uRM~!p17G{qIwv+C*ZyLsc7Pfof7$)1`eK6=RU!i7C2;bDPY8o*({}G-e zJpWN`lpTQm2xH{N6l@D}#twiDF=NMfKs^~vfg_+0O9OFY4=j&_j;ya(I@F_A(vE#> z+RC{~;d&A@f51g(Xwy-2;4WoZW+oT7|6s zBTKJrHrvj)q!3rPeqF3|e^P!W101-hwC_IXKQOHZ8ii`A`9VYq362Z)xx@CqyXdEZN>c6;cp#ZT zXP^O9co;*10)Q%@1ynqB;Cz&SU^s%g?v(LZDFmtGdkYheDA)K;D$oox$U#dO3@z4mfWe6Ch zPyf|F8c90rYadCr6d>m2Oiw9~h3Ed&ZLu*Gb!#T>BJ6g}hSU4r9j z0u#k{)qJ^PVpY+#2j5aNHE3utSGugc(XPEAKj?g_+;sZeLJD>H@3ZFwkky=B=UhNnA$2_PxuTVhsacyAybSD}14-)$bN+jBSYx27lVF9NZG;f2 zR0^eB8m3$drBWKEQVOM78Zg@J2~>*7f@=9V82AHQ=iQ@TWhlT6fuq0n;z)81G2Y)> z_!_#HX@)$o2sQ~0+dJdT>WXI)LU^9Nz|f_MJ9!v)ad@p|&L)rv9&56l1!E{QGi*97 zGz(Et4~mOXR*xm)qWFozh${jz1F|j*9c#wt=`k`o#XG;n$HnH+pu5X6KzT_P1nd=z zL zW0+|UYkFAF}}&n3-* zsJ^c~#k$b4Rrr*bi_kU3nS>z4MWZWHSurU>#Fv)>&EZKw5dICH#hIBzh&RpUMb!k? zFfOchZOBs#N98cjr#1$i;$3J=ntonzZ=!N`HgWJkbU2_Ks$R%IdMOQXB@OLF3fzR! zzXI)b@jvF^d(Oi9lm_^Qz-;+m5Eu>!3dgzsY^qG9;OA!1n*B^7g&g}wiBm}VpV)>iOLXVG1UH)oiO2n6(R>C^$}g0+L^S;s zgS`~F_u`w32U~TDGhm&6bYeP3EH&VDTT!NEgj-~(eNJeXfVRSO`3Z^HFSJkF-9ynO z$|Yr+hSv^@#^`!;yEk~~7)=r>-V?>ShOJ{&J;h<=$UQ9_Shh18;XSXRX&x|K+?84 zYg=B0gZD~&us3!Q8iLRUofmQV{;q|oxO1@<(!0*G-n0tAAA`rDcda*B!7gy!R_jT% zx%5q<`UP0iSx7p8A-BIw@I6`1lpkn=g$9U$Ev+rofj<-rTqRUh0h~ z5p%KGllGUYuGC*wk&lUj21Hz)LpSMTrEB@=>o!mssO7%l8Hmre0OuoMh@plYK@~LIur#I9B1AYXF+5L)TD2tzigS!1C7om#s9JR_o|pf_0{% z!cSQ!Odol!Xl*8cqk+W``fb+!@d)e1TFS77VLgX^VjS>?@$a=e3E98xFXp42iiCxe zCKv+4-}6tkpcm-s7_j7svQ5uEl zY)?Q)#b(VA$KCl92&u+<^f_KYkp#5`)GaneAXqZ*ZDl!Sz!W1u9wI=J03bK^it`OT zS8-1n4$&a7Av%|g&}3%>VqfU$dx=2v2n9<2I>z9)yZU?{cE)5ITbp2GpfVme@)FXA zREy>B@yZ&Uq>7*+o#>NbrxlJ8Ns-Xs0HJm3y-uJhL?2<>ri15@pr!HQrSjvY3g9ud zjVJ>5Y6ABf0{2=1_c{XidII+b0{2D&_a*}OW&-yX0{2z|_cj9eb^`Yf0Bh<_F*xxa zZyJXQYp>Rir`L=V0#={W;VlSIg{hoBfQ+XUSm<|n>GpV!$+#T_=ud#qLb#tV&%P4M zlD}Y^emJE>=L>BN&V%-@gKECYb#bSu38uCA!t_MBN2Niv4mgS&axhE|&4Xwv2EjPs zl(nR4FcvJ1tWT?`u**3`Gw#vFw%o}r~|mC4Shum z{D9g01oQi9)uku6*8#lILVltNe!=v8f!%!hLjn0?0JUDjwKIp_pn<;Z^|2(1P$p^% zoG@#aLq!Y|7dzj=iPz-aWBv>2sgRhAdW;rTC2gz&qSJl#7CMw__O6$!?VRPD%nDR%BZ@&`H5fzQm^w6Axj&PNygM@v-{lo6=%t!#=6xZyspE(gQ8ilV! zrKo7}HCzfi9`vVLe*_Aa%);A zr^;9kmmXhKJ(1*YCMC6Ulh&Wvboa8i??J}XqwYhU~JMew> z5PYhocr=Otbc#?|l)zwUeF3oEJpW@^&D^FcT<6EbVi2$BN1lP$-JfHSwQ}Zy`FwW0 zpAoLIe7vQ21d4#46roTkph3|2{9t-{{;jfnx}|sw$SIqS%TfN%NO^?8iU2{1P=djr zBIs5KyjVq6V68K7q!(*Mmme}d2EwT^T?V z0b@*uSmz(B$|qTgN2Uxwp#-m8=A)RY)tVI2*SG84x66zG?Sv-K2E(sut!0*G;a3Nv zuWC)z>!9D^w!o0GD-f8jz&lj}JW_;u3>KMuAwOof$xeq~B)tq0i4F}d6Hl7#nt%Z} z`a`PoK~~w;#ReCQ56WZKB@0s(BUYFV*kej@!F3~2n%iRjl#YPe+GZ*|2$twk7?N+= zn7m9gU4p`NCQx^--pbs|+Q?Ar1e@SSyx?B-Y#r(4P@A>sL1mZL|6v0b*Wy2|q4^wz zp9~h}#P^EwczXXcVehp#M$^bR{Ya4%QUwqcA<;wLhWTgOMQu5pS4&gXD9~Yj2}FL& zdQpJ);CO7A4Y4A*)^b$0sr!3r^_HICR0Z%z8Ty6-`U#C|!DlD$fvEZwC}m&$^OG|4 zYcR;hwuul_6#x=BmRm4DKY0^KrpK2`M`I~BxJzLf*AO!ah1iAUs07(gVylPC`gWWO z00o6qqCM@!+u1s~N)V+_jG*c8!;cbE_u0AuDVIm0Mt4}M;_^dn(zN^~b5F@JrA|l6l z+npO~EoAi#z_8?pM}Ffzg!xiWT^^6+;weC$o#Yp<^bVQO@~qYzT8#bGy8jUt>IC7uQ?QoC#?=3qYh0( z4HVz=_X6sj^*1%+Yh|LTYn7?I?7!vC91awO(a#6toAEC-u_>ChIE%vzztjHPdWAI6AcVc(Ef<0h>Dh zOnXvMVMKwvj>O<<$gn6)7<^JGIg|16$wt%bYXZAjZLJ;a>ObF`Sb1T}!Ig1@Sv*o} zs7>!#>ZTU4k%=r28zH_I3(k20TMfe=9&C(%b=#zR=VX9+k>-)R#Du`~ogO zhU4+vTSN!AE|*|>)1(IN)yf?^!0{kRbxjc}&>jP$iNyMyG}zN|dYtp;U)s%hje*Ui ziV7j*eQN5{q(tOylc8p-&FkJ~!U7${O zig4P{*K1K-p-y(TFz=`{HLkow9qU-A-=j3)2SxpIa_&0g8Udjq!Z9IlRfVBJ4TxCS z)@N&-)R+f>w6TidLadwo<G=;h`M1o zEH1-FlX5zrgTYzsCh7<#8y|`)e;6p+5J-l>mlWeqzfdlQKs82mL>M#lOYja>uubhP z7Km#+Fy|-`4viLznPhYpV|*Rg=yJB9B?8*-p;KGQ&Dif?h8b9pb_8jEbM+iFuLN^f z6REbw7MPd|Y(^W3UpP!n#!pN3i#XeS!-~nWt|pi_ZY~cu`~;`T^D=6MNQbYfq4%ZI z9Y#hN{Umbl%JOsuNto5;5r38rjy=XJqDR<>3AAeei$PSBcHZiUrZ=;JRH8C9$pbDZ&t2} ztWgZVqd`=a@p7X7Ev8#TOwL_!+4^{T>iM|;K;Y?7|9E-z>G?eP>in$9(f+zQeZbww z>G^ydi&1(l_@MJ%7|Z#5IDNR{`M7m|m^*uj>3KiX>FM-FJfr@4{_^@-d*b=LIb~_w zx-WkN)xX}Ot?~KV^YH9-dC&LRCC|w=|N6WfgpvP2h|)8-b*2d4uHE(8)ARX07sK-* zH_=$|)YOpflh=L)b70fzlA=x2zWe2RDuhzPKU{6(Ai+u5QfyFWccsH61h^dBm>h%C1=&HYE?2bD z*=)0ZyjnbXqL=r>?bMdG5@G)5!`K*)kN3j#{p~^wk4gW_TMp0r<5-T*_jxEieAx7O zeeqbl-<-BQjH&c=yMNp+oZ)_vV%0NMvYEvb=kuX>n?Ghg1h=6WwPVqA7qRDLk$kr&&ZWcgI`|HvXbG%=wsjV)AK}*?lrMlxkzRVB<}C|n>M&k&dJO!m+RI>MB{~10z+wL z+rq5f)i^jb)g^z@x62FO4^PhOlXOJfAxza(di&L4WRUH-Av;1sAwlo2uoKc!QrsR7 zczxYX^}IiS;Lfz3MK+bsEf!?;Z#EsbsBC?$S5@91q?g1efe@Td%tfVRQPnh zUa+L{kK)Brk<(#>XU<_DpV7ToBIQuOSV}1SMk)W?GPwJ)O`iVCRaOWH<^Kohvm| z05OzS0!^Wv&WM4{&g6Y~YNMbZ3{xxui2dEDHXaVjP}Xxl&mjSvycQ8Jt77hJJLUunMe(jnn7wzFgTm0s9i^#aqdja zG?l(<2*)XHy{X=A=@x|L!jaT6q+{}UdYbQE)q(ePy^+4YV4u6-OEI{HNlcHpq|%V9 zLoCN??TENkckicAcdozG$Ozjt%4{*pY_hUw#+u`bnF)k>eSM&w0CE+phV919{`$E3 z;5;s>foC)8o0f5pl)Q>PoCJqcu_i4n8-Bu?Dm$=$C`S|o`Y=+Y(I_xwR+f7lH+9tY zfYy;1Ac`P+@>h&W^bsS=1IAJ5lRH7bO*gpmJ`Kb9ocOuKP=yPU{-)Mtw$KWvZ@OXs zD?ev6gh@;po0rc6m0#(b0@CbaH2g$y{XUhLf|*D4@+yd^`0h}^-wcL?2BH^oF_sC8 zxe!r>2B>|#Gx?M(rHS7#DgwTg_7Uk27oaIrj~}TbO}OVE@%m`q~dcByy7A zCzX6TpZAxyEgv5~I*K!UoT`k0fNDGCX=})u)tGM3sC10Hp3go~ACJ0M6gZ!+;fi9T z(b-&)GXxcur2ubH9Ida&57(KlMSdd@ds(=H+!i82&gQd4Uf6iNWo>|Dl{X}X@`DWgX-?^n#1f(O}|DNpq z0{PH9N8NQ>;quKlB-GNgW=y=Pve&%GSeqKN^TI>YOtnebP%vO7UjMcETPSQO+svGK z>Oxj9^|Jl5o0Uz{+|VHT_d?cDX`KDfWgS6f@G}XPL^FB4XR+Sj22v+s?^*B6-?v<$ zhduLQiW}vFo(UxMWndd88i4q(Wa7;8BgIi98HVC5s;Wo+;o)gf z+UOBcz-EzlV$;ho*F2``nNcx2JfZ68+8D$9jFt9SB`M>dOf}Av8Gq$66&tf0uQ(BV ze@FZEeliT4+4;e76t%DRgNs~AAUtyvUKQ8X+gJRC*{IdO!CTM)vu_<*?-s=qobQup zK&rIVxK#9vIYNs}L%qhTTbohbV|%^MY@s=5p46zM!db&@f4dp)H}z~Yk*;&25a%*n zm(;E?Otr^>ebeLP;l@z_1j(IYoM=))A@2>+1Wb}Y<;{4THTGYE4w)pDFIPTB9RJyA zEMAB`qrWMzOj}D3tl)MT2Y{0V@2B~z>`KD}%mbJm*zCJm`Bjzq?xe{h2;Up3bW!w( z%Tif=%@GWj?q5Se1FgJ6^t8SrXWR1nn#UMV#vZFewJE%2{bE{6C^Y&(68Kh`A|P;K zoIR?rNu1NAd9$(bV=~Z{`@q5i6f6??3^($zDO6S^5>4!l$8IZ2@!Y&p1qxj7+2=%V z^++_tlVRBoB^d}Nq!|yxdnGzQuiAV@EywAB^9Xfodw2w^iApFWSR}N{1Nzh_1Q^|X zb6AlX)k?xi)r;r3sY%PcIJeD3g=37pg(GDP3^ayEn5~DNHD!1;PL*>A^1W&y+QLKOawIg3L zi@I7=35x^ChTmuG|GZN5N50)rjwqHx{ zxQs5Bdc#@e{3nmQ&yf!HCq-PGF(<-&7GP%TnU8CpbPdl?FjDCe+fpKd*Ov2K<+fJG zOgstR73kWRCm=H=Ku@;ZUbj#jHa?-;g0r4gLlmtcGF|cIkEjU42ra>|Boy1wUW$hJ zu#zXdtO(J0s$96%(tBa7`a` zbnq0}bJ!=d#L;lRf=KHpz<>3BpkPRG*WH(rC*d5t?4?26sEKy)gvejW;lxKv^p0%z zo{$4)n)qPnSiULT2@m^igv8={yS?yW;MaW8s@`I%dyG_iv@$=&iW9`A7i#pU`r}XC zZELhw6PSH(1-^~l8av8=>g`Lj--$xO3osIiqW)v$*8Bk**Uvxo>8(kagnj4x_G0TQG z)58YGd-V4==&!D@Q$7rWqv-jDuv0D!_u=U7LaPJA=2ot~Z^$uv9S@4FkVban?-0 zoClS!;eLQxmepq)8FlqSdwf(SffH{(GMv8@ko^wYtfFA8 zqLR3SbDCdx%b@wy{Od&m<&EmXdQ5?uIw6xvrl~QUJ#47FsLtH1Qe7&ma9BbiX($kb z9`1rsXcvc*$VJjCyq;CstG=u|-Ri7j#mtMjLPR5G#%x2{ko#Slh!Deb zke`oF$EE(Y!RW^FmnRkTsd>hTQ{nvGkAoA_M~?K5>crV?!RBCDADXEF7xInXnT#Fr zP1qC<#`^glu((sCvVEJ;j2(NMp=;y2 zoFv+uRoXi)w{u)zZ8y)X>$F7|kFzupmW#hTxB!EZB0ADRfE&cRO)r?!E0Yr5^^d4SJ&MbcUB}49=J6AJ4uwiB#HNm`eZX)NLD{kpecvTH;BJ=!7 z&*@yteE0D3bbp;st%V{iMv3&~Pkn2zC4O=;v9(G*&Ao4u5!4rUTb;{(Y&1dN=yx6x zx|3f9@tC>tt4Wtr4Nn;%rD{RTc8qNL40gZKNGDzMPkKG#*iFr+)d8yPZd}n?frkxxw zX0q#cAR2N+O8hb&d0|AJW@zKFx|aReOuMqy-O|D$!QAS_(8>j8EfcVo0&C5~)G8BR zTah3Xn?+?KGqyH&``FmoMP5ZZWZW2Ya|46VUPT>j`J4FnTIPfS-VTGP)aYk64VVu9 z=o_N=r=he27kL-LqC6DwRapF!;ON^=@y!_7TT%y@Nxh$Gwzt`=ZZb8Yv^)DB08$?Y z2ppZ@Ws<_ql8)iIjlGl08^gKS@W8QwP1+;t?`%M-p9jzh!VL2<0i*@^GuGHeHhc zK33&9Dv`6BpWYa+2SeidD4rF!p+W5xgD@3FiXZvFcktN}scKP?MQ81b(#fMkg24y= z2pL6OhC0Ve#HFT62wml)p~S}y1~|eIK$^oB!LH{nBo2UCBJhik!L7zZ+RLRR`b{SF zvi4hI_-9Q|`5hn0vU{?lvlUu^JGH~=D@c9tMiA2}ql?#GPWQFTsEaZ^za89rLlLnP z5xMA6f5e)f?4^W_k*cztzd^=-E_3zp5OEa>WD3BX!7He`nCfki-n{^H4BqF&Ch%8a zo{i+6NL$^PFF4NbiF0QHGQ`spUUs`R*0Wg)!_E8<_x^<1M{;g` z^%2deku5{v1Poj|ZvahV`E1Cvl{P`C1zUI2v|^Epla@+rC<@IT)gTGsy zC=*ftZGxNhu5dFPHep8!UTZG?4Kg@6%|1D-ye2YjdWzfKPZox|de9zDNfMSillOZf zL+ze&^+iH_?ZCQF?}%V_axqXg@}qvfR=r{(8olqi%HZ`}9ORUYxTc~LO$njuCqr?W zIF(XnW)KLa9pN2W4DeRS=;&dl_LK)>Y*+5Ra4B=l;>cW7b{3fo&lo?i&YxX1JQG(!2^DYjPWwqdaCna7 z23rw#(h=j>IEjvJDaG=~#D+CaT_vz>+6>Vqp%t0E*q*o-pAOw(9)xHI?{LmIToP$S zlB#oUZbfx=CqJE>n!P=|Ub4wX9NwjsuP*!NE+ay)e-QdSpFE5`#Dpc3n{k$R#D`SB z#smNIev2^YRQ}bY^YsoqM}^BmpDtElS8+HraR!940~$QV-0$LivviOUo&D)7EOVyY z>5R<15V?8y`nqv5c=B7hvi%HQxkZj1Lx7PZcwt_|bBjK6Z`-kXQxCSHV^UKOeZUUd zpfrR2{min%O&+RoD;iW?47MpAoogi$Cj}jTEg?Gh%~?2h2mc}~iUVrPD!F(#l4~~E zOoqrp-?nw%T0#!)odN#hc;I2fxaIrFEm!g4hW3e;KF2DQnAQ1ThBdDj1#U0187bJ8 zMpt}uW~##(UmB2oh?*uPL%nPH6J=Ji~N?Mg9dB{{lyI@qG?uLDxBH)WehHp#Wb>eHjeYX$OU8XfXnB*qG zmk=W^^M*{sC-I@7!Oy)081W7r)2vj0p$H3q&nKE<8OHug*!fbdT;X%u(&+Cy;3+JX zRvtsg51T2t0v*!B)$Y7gUi&vX`hK414vA@}~chAa?WkRu`xc#?Yh zED7nf-aG5R|9ETJN&nrPf|e1|d6}_9%e|gZb8`UDvDTFo8cNu?LcPxoQZ2pzluE4*Go;vRfl^)9LYm0yf4UMR9JjIA zOw!RV64Q<%bz|>rf4R5|VXB)ec{&X@R?&QWJ>vRxGSH6MS^ezJh-!l7;aZn2r-DK* zMmkWu6^%rE0<`DhL@fWaed&sSR2Pq;n-t_Iv1{(D%Do!o#w&7BjsqyM5PS&xJLuvKp3@>d4 z!g~BMQ3h0lW6c6fcMg%m70@_M_sxYcMOxUMZ;`?qTGb7QC%I~-n1 z7{2=Gt}OG4Ms$=a>1IK9eAh48aH;BVq1VirJ$O^~C5x-I=mVA2weZx3fw$5-h~-)e z8OSEd0Pr~JPcdcGE>Po6Wi!N+pR<4h`BoWaHN)L)_`Z0Z_A=UioycSItvtsvd(P_x zWb`YiE`6+@G`zuU$mNq?`sYB=P_2W0zh$$s*FD{hvzw6qmM5F^|DkD5Q7pGmD$gia zWJzpy8D1OvUS^1x*if8W;&#R9l4)O%YjHna?7QJ^jf*#xSxP`EltGh+gA*j8K0hhB z39_V~$p%go#a13s2b9soor;+Qb5X6@^OXek*XLwzLPS`LdNkpQfpdih&H35(k0Y+o zB0@+ON(r*Z^GTypP*bYKu%#K5U{i(Fm$gUc#0!#n%WoG{PQ<3lA=VC#ORoF^1m;8! zxNHBQ8K+44Kcnwj-)#rW-v*M*Qmqs?5=+09OsgtJ=4)$oaC8F?=Se-mc&}KgWq;FT zMEEV=^NA|s@1N&U!I(C5I_r}YI>TEAm1%o6{)BkeqC!ZzFa>ewD2gy%k8CLpm3DU9 zF?==RV#-O-!L(dfBxI8x3AjbObjarOKX+JDK`~Mv+%9_E!WP9Yie?p`g`~)*D+=Zw zN=a_1-#xrTlP#sU2dDVUGv}>|A|lqL#4eDcG981{S7jBj%*_Q}m=dS>-PG1=Um#(} z#;8pI>96(Aqi!awKOKif$Kq;#LH!rf%-Ix3O*$0KBv%`>g0Ygp&PNR$awFoa!4aby z(cpsyqw>5uKEyvu-98d5HC9%e?akN3SDWE*Ng!x^fIYf%+fmvR5AzD{o5FzYBmmve|^WWK*!DxNzDm$$Eo zm#a4^N>+j;X`~dK#zo9vQmCbbFBauHm7Vs%tA)Ai%kYE;`xu7{H6$rBWuQzL3pJ?C zSpF{wWh$Av)(NTo3?A{RYY-Al^u1?X0QIjb-%&A2mThLBI_t;))cCToB668hp)yJ{ zxp3E2olv4Zn^r(MwhaGiisFUrU($H>jS5mFj>OCJ_m_kz1ZUh0 z!@s`lRifY~l{Bd`;%kU;V{|Bq&S8Qw1f?F5dM(A0hcy`UPMVXjOksJAAt)DmO7$U1 z)(8mY3e=&i0~(n9;X}3g^p)bvphhC#Vm?22cgV9rm1U__`P3NYIGy|YM3(QkZaf>q zOp@3P+a)FL=om^F8&+J~`ClIA(= z^)09Z&e|5Np*(NQ5>AOnbA#`L=u&R8@EJUscYx0)@UWUT{u$gS0wEH=#kVfR3Ah?dEQe@Kr$!*rzzJS>M-wzlj|)Bv*m>nu(4I?NVmfddO@RdnWw-GU9bQ- z&P|fEvk_vO5E*>5+cqLvhgyT!*04V91>uPJT`mNGY%GvXOVyM5Szjzveslu)v_48j z3VR5!m%4cMmd&WVT2{C$UmaO{em+pw}El;N;dBG4(!>DU%o&z~_t1qbM zM$bQfnn!HQ#O4+$TPSds(C0nXc%;zuOUu+eNX$eD!`&U0iz_%AM?fYfuVi?7&fxfj z{{9}_p9>cMAvo4uK(tFvc1<|RxHY~YPMs)msg!9As)8j@620#fPVXVO)?EN;b2^ZP zX$MZqwP5&A*Z&st$AX3fesUHox1sw@gDLFb9_@Rfyhzc+1FyIjV+ALBk>yU|Il$Y69KNpk3wq4t%8h+#t4mz%} zy(uF%W`8-_Q6bYPh<<8`?tg{reDsbSNAMpYg&*MPq{R{kKjacffWct3V1jvp_gGP* z4fxj9rXPPdcEKU_M;$S2x53i6TS1DmH15G(uqxDlv-P6ADy7SM;k4QIdbA-7eTTQ*U4?k)XRc>e(6%LYj_z(!!q@+t8a#@Cq)%vL*e@Y`X?Q`^*YE3C+7W z9;rFoRmQT)xUCT=W3713nObJ8DN<-{)~qAB-OKoqZ-s=z-&tF?@Ong;LWAEl~N_Z8W*BsdS^xtx@SR3 zyXR0JR1Fm30X!>gb=-H9W1Z1!`!v)6s8Y{CAqb_mWMjnb7K*_&bgfGy7cUP7KFCw_50BxIN;;5>%^wCn&JEtMv1=-= z7`owOJQ5}Z1@+NkXA0>4mkI}cPen@<_We}tqpA`nS@iU33S$#y8`{4@uGyUHwQ}*t zVYsxHqLZ8Gw3e#rsA|3FT8IWk#JJMtqT?JSRn}$`o!N`BXtB)|9&g)4r8t3Ol%%*@ zJ1NphCMErv_k^DPA@h^%r@&0z`9P!+D7-!jHCQJedB(}nBJMUBjAMMdsiqQK#Zc|9 zwGsw>0{#0?~1r`BP8r-V;oaN z9_M23DQ`I>ZTwMTj>Ld=W0x*mB48$YZk(T?cu)c<^_ySPT#nnVToDGoEFD*}x_$7S zoy?ux74cVwS?Z5=K9GqG@R?~^*FR!rRK6dWl)jTxz1WM5@S`o#cUszWt8+*F>FWnx z?@bs2UJ42OmnPqJq&Iw&#u7UpEyOp5)SGO?OD3V7Jlq3y&85a~F=P_Mv!{nA4-PB4GuXU~u($>CK82#n`@bnqj??-kvavKPSMLd=5O{ypuSCTWb z3^9{b^VsXVHR{AC@PsJwpy7h?(%uJnS&N4sR^($U%$5XkRkn|DC24T-%2aHC?)I3) zcFZPZ)*q9-=~rNPk8aX|u46=zMVtpYI{k4Ep5|Ii@jviH@nuP5TfqDeQ<#co5hV>n z6?2hF?uBRq^tP>lD)8yV|CbuL6a1RRjkD$-i`PzQ=r?Pz@PHb)Y|$F8siQx*W2{_R z4w!t7n0$0+9!mr_?2i1CI*M$|Y@b(QWzQ2c&!(MwCG6;msvj16uE}e)X3W`wO?~U8 ze$UP1z0TN6+KE5b$$OJQSApDFsJax6dJ6ES@C2f46MaSZI- z1%fsNl7Dy?xu0*z$5w2eCU1NRQ zqq+Tt{myfAg(L9Q(pBkW+wzP&fKY!U&%5=K90!g zL%WjM-#2K-W@r+`Q)@pVM~)dC1a=Kk8aIK^2{8UXb%uZw@D*r2E#gpAm!S!I-QH-1 z&_Tei6u1_xOoOWP`nmLvuexW>*D)5nUL;oeuEZigeaehPV#&WZLv36O{HC$rGN51X zl%pJeu5sQVL?)zs)48R!QCrByVU%)%8}Wb7WyW1VTv}AkpHDl!>tOl!_c)? zpTlC+^_%Ej?gftt{fp=$&OPQqv5*Qrq>9Fx9`8(_Yr-xo6Ava74mLN(LLG!1iZ~j& z>CZ#PhwaNl2Eo$0XKnT?XQu{4Lz=`%LCoZ(E63r(jn>8fpP+;fHzb|M*5;z-Z_zr(|SS`X}!)AkSW+svK=)a3;kh-lduo|!n-f+ zT=NC!7%8!a0WV8Fo=E2*Wg|cRp;wX5+IU>65wj=mbO`u3jQRq5qdbdr;(cV6Nf=^; zed9$?JU5i~S6h&OA?qsQo%A9Ai84SSC{d0iB@heMe`uVh z#CwsPg$n^ppe{t+D!h!CIGTY(>pXD7@d{rF-y zfqcauI%D*mWWQ`iD`jx4BuPDFG@CKRAu^gx^X~w?}xYZ&N1 z5Ka+97$5bPNqlmh2*^d>9Cl{Za*&?LS+5s!R56|4bqR92^jaMghF6tdrX7ispFJUI zW_dxf|741&ZpT}Z=>-7B>I~#1FuID(d2EFNY-34JU{llXteC|H}rZ1t!87W*5F(@SFee9qOr0R)XR}_iS2vvWZpNK zvCuSq6#;?22f^iOTM?ikDjk4xSsV};P{&o*WwkF&h8?*SmuLP|PRz0tS#kCDq*S&K zP2`Hzp93H#hLCOy9#20@fDS2G@Us-ix+kjAWZSTSkk=_6LeYX{Dzf4 z9?6x2w;xp2<)+_N!^n5y%A^<+fa#L!-C%6mj3Vd)TM<|QUA&Nu40$v;swC!^#ZK_` zb7OjmLU78tcUeq;{inBw<4-NtIZWG$rnam#U!d|@dp(`uR1^hTRf`SI^=jPQ62?ca z-S2vrBndt%gW^4t{1 z&xzwlG6%vmZl7ZIZC^nZ+zz`X!R5f1A#EhX{&zc3Ya@7I~F%T&#(|Ngr5e zRa=Qb#4>t%x7<4q&03qer%uJ$uC{U4D3R#S7r8VR4n6u~4y5ZS=*L zo(0F0tCNe|Cx8;E+1zVwVp!`;M5>SW6r^$$o@^^WTvNZfpnvd&zjBl-@j`G;B#y$x z8ZRy=^eIY`N_pfthpRKZl^NgdEm0@sDu&NcQH&~4!qBvPpl|YrUlFP~JX5FH^(iE` zDpVZ60)P-SYAgOUMQ`^J?PzmIGsl&Q3J0+vfjniX3(_cO!1&}eM#V$Szg`I8>CDBn zuZ`$l+VU-q^ry!0cTVN({>{=Gx+rLi3B0}ZK7E-Uo&Lfn`td?pzRNO-JGC+$hAEOb z_T#ezYgB+X0ahrbG!b+moV3%iG=G9|l6Cev5OLLbQd()0q(a!?)4jiuRL#?j-U^D9 ztkdUVQ3S7_G1opXuWCnVWz6nR8BTv`Gw^QsA?>(XZRc&b9W;K^oFw}z2nOd9iO$C4 zSz9=soMr9^mro=__H7y_Rn1))CXE%@7?g_y=r3Tamu1>|BNJDBJ z%iw8a1YUOzv#Zm>FAORkr zXr{%R4v+vODl7x&bB8CX2RHyfp5SZ}aqAePxjb0>5GB-wSS`JP!GR&u@BY*t5H(?#lhjy7NNeOZ`4wx-c%k&*#v zl*M14l90hh)s|5&Gl!tOsxV67AvHN$S_{Nx!#vC5=j5#c37d3UhDdcwb60$;Y;mOke(8X<}W^6WeSK~zUZ{%s$10}j z&KqXjv>u@Jjr#%-i}CF9ZS0et^7#Igh{9+gxn4cIqnrla>sjolt~wVv>qXt11d8vC zhPRi&LyDaATc%H6tU@AdB?RHmold*;)jv-iWptG2R2K4`k znu^wn*+pASc@HVd%Wxy+D>Y5kqAQR->fNr1FMP7}E5abYJ~?aZxNzeqPxf1#>@WlE zv3a=Q3Gjmv5k-4LNel*SyCV&~a0>ojt*h!RQ^&1m&ZD|QRcuCDZZu2KpaNE8aEsxy z8r|RRcQGhUkke4*2B~u*?9?IMxbHFy$b%{Vz(>5}w!{7>7Ng_*H@K_8LtY4A@4DlD~*?t!6*2k6p#pj&N9!d=ZFvTq9sU&emr-t01MdXHMOUQ!MpHIW$y=7oV}9?VMHX@`1H6&55lkM& z+)g|9!#VdaW@sZPjD?-~F0OWKFlKdLkQFxBPq8&T(o2N6r(h`$(ZVjn-;2!kmf!ak zjg-R}m3As1%DEM#mKjbgpd)GyA+Y7{9vsb2`k}<7ju6+-K)A`{9c(f(9`_aRR9A@y zMI2B;q;%Q@bdb?v8BDCBZ#P9=Yo~iQe>WZjQ^rFL*U`6{;IFlVU2JGNt%d><#zTLv zp)WL5UK-#mH02LUt~spNK%%5GwAm(@m|CQ*0)e#NX+nY48UyHFdUgVv){F`<+t!>e zb5Ya#XZV_P>I$Bj>ZZc0!u)eXmD}p=gY=51b--W2Q#Ld}1?w}Voo>nvk7ltZ`99z} zZo-N7<=(VU)I$cDyv%lWu~k+*NK7~fs?qK)EdV+}Q=>KeG{7tB&64{tqvSvT+K zQF*@HA?lp529%3o;Kskm95D3rR>{CeOh$x~4GAb3=$qR$IJK_@a%uA5(-Zu^Y50pZ zfQKbvh`DITDU4|(XuS>Vm$PB5NruBKgX4eDrAgUd6xCPO$Fji*gJLv! z;5GdZ9RP`*3LDDo2w2Uw#PMs*irFMY5GPWX7be!C{vt9V0)C8W3Rrxyxo8v%$%$sP zpvQR_K{j2ioi6))Ew!vlVF<4u3Yg8}3PTHuuRA&wvs!eWbo>CT>^1Oi)vMK*4s~2=&*Nx)6(a9RcO4EfNAJ#|+I-+8tP znHtPqD4bse>Wp25w7dTZjDUrB${gQ_B)|_S!s3}RZN#Rc%DJLIF}(rz z>dd&IrX3KoKiT!~O5Dn9x7}>Bg}u(}-;&vei*Y_Ss7l?rT`bd6wtLGg^p4OBI(4;z z52zFiN=jxG>z%a$AzHjtDw|#K0F}4s<1oSQ#P0nhoH-6KEPd#@pD5>2mB&H&#Yl_u zA!nzej}Lk7Z%X`qtl0)QinWncnt#uIgJq^9?Se^qFZ~YNUk)4}9=PA)r)M*08t#=o zSW~k+6S9ZFJWQWmMNQF|_QO(c<$V5!hfueC89q8(cXjrM%o6DgfEY$|1_rW^}FaUtuyg#wkbjS1~xj|3daewq%(t`iwMe7+IC`g zy~ktURSEmPgQ0 zut%k~ZB33IW!cg1U1OqwJP?hS^Oq3;P1;F;fu&y{YnuoMr5B+V<@v{ktbwYDLp;Nb zD2E1936K2U4(+eU4NPqyz{>UZH&5OmMjs`9%=aya=|8gGVzA}J36x!kFKWaCyZkHE z!NM#n@Xbj76q!_l;v5R|C!O3JafYr~EaRjiH;o1IZ*1rHDZ(hI*QA`b18*f2#zW_6 z_;gpC`gHmnp>ZneDLJ+Dv@z3;w}Jl7ki-rY^O-<^?m+KFR4_LJar*0|B3H{5QYd1X zx#0|r1>K4CoH}+gJs%F(a|($|nZIGKE{?fIFaTm8cfed+bE`jxmJrf38T=dE96t;) zP$XICi3Mnie^SiejgMMe>8VN-e!*tByEx{qkht0Z-IP&^G`RO~m96U#@izufpYfvv z+Cy~EaiyWLfp!S;cxfSSm6J(n9P@O2*JfI>ilu zK~iD&(l+lT2gwZSZX|nT_`I5*96Fuj1bG6!!PS_i6?S_}@uI$NsVYOV**bT7+e8=3MDMjn?w7e+&d?{V1nMCQCaW=|O#|`X7Ztd9OWhc=L%v{lgkRW4ndt>O8 zU)0E;s)ab^3>I12rn|w@=DO6Vpuj>mOD;u(<1&(%@370qvC)Se9rUNuo`dDP6Xc}d zu0=&yjaOZXQ>90N0jG^u)r=O)TLZU^EHu*LaUf}=OtU|*@6!svbEurh+>I3(o=2Rq z00`eQ8W7kIM47&##{D2ByIdkTuAELPkASHndY)SAFF z6wlx(ETXrkfg|_!cQ(f%YTuI(%{WBa=X-CCB?BuSbBQIf$e+0)9sok&td(=>LmV<| zXu*3~Hinmy_~hF*!g}N6cm&3%{yfFR)c_~pL9v!9`JVl-4Q)SO1}U(bnI0Sf6#(NL z1paE|n;<@k4O23gBw=Sd$S1}!)ZE{5^Ao^`zk{Dg#~S^QC7LKMJNauc{jKiPRQvp7 zNJGNp+x{Oc5?5NgP1QqH7r||JIiZuh&!a{;DT$}LLR3v~-8CbSg@g23$P zP@FADEDF*s0%6L2(Oz?y>aDJ-KHe3{~ej`vr+uY>*;c zCX#ekutiQlYMQ645;F--w{RRRD^;R;cO~g4D+(TIVG+wrCelisRC~#9-IcnL_RYG^ zDBk3neJr^O&nv7%c~b;$N>QmLwC{s^JUPrdR(@Cg-$P-&uXQZx_AEU~EPVz~)eDY% zwgs^kY?4;JKH4_3%M}DqDH_D+SX{qC7`CJuA~ujTV-M>kt+6Zdam6|T5czX@Tv#Fh zKI(4@ATHkRAD!)lYQp)+Y58bYqKvzow9i4f+{vyrN1GW#5lYCP;&glgU2hI<O>khyW4PU~;v-+}LtiI_=bLIogEKM)HB%1b==KwN@KOyPl`tOO9KfIA_P1 z;`s9X`xC<@cX+9jWY?#ttUqT?8@pzL(KWpRp;gkPjllqcjY3J1YXPpUhNzk=vh^S( zHIDd8W~y~3JnYnzvNLayq&niKgLlF1uiaw}rt&!740naz$$6*Zq?poj`;^^84s5b7`e)a%x3PRLVcbK!I0Vi$ic>5j5C%F+w+SCPlzt+;p@jrIcc_kb6DYsTU)D z()&T7pewg*FW)KX2{E%GrX?y3XlV2lF7rsn<>{MBhv{Ws2p=}_gOpoHE@j=^d~;!i z#@r$uT=iBfG$BIDk=JL_t5aLM6A11F_v-`?gVb$;sozsI&)TNJC;lbU$hP6Ii^41iF0Kz}^5qw*d{#79@66Mr-_~ZUCPzc4hRex)mDLNn?%g|4&&TUN5qjH)K9R=7 zwcgk3{d5cY*n)-cy0U_*(eZ<`$Lo=6M)d9ab(A~f=gayl*m%*U8yXSg5Oz5e3&j(g zMe{xzS&oa2s-%uwJ4(-WU@KF$1<%f6)-H?IaF|*+fg)J9#ulPE?J)k~{yE-Ln;k*U z`Kb2lb9>?a{VrjR>EeWC^H~ONxuj;H&!_L9L6WIm@pHv3BtN2s`)taYt3ru>b`yr7zH*GQr645B2 zT<`OtMx(|jhNX{1AFZI4R9}xM$J$Pds{Hz(u%$p?yJ~!qL04~c%cRnJ;2s)_d4%2g z%@VE%QKQA_gNwc&udnTUGhzZ)TQvcm|oUK^aw?B-Q$O z#H2MIU9<9~)%OTE(njawqZjjx*ci@7H`6)a>Dsw<6DiMv%72GQN^XHt((ce%5$?i==DeFN0b{XmJM0_3BIj^I7$Z})P(kEhaT({zOdc|R=c)EH_cXOM0 zDXQHP7sE?qy1IU9t8TK~iv7Ck#KU7S*LclLAe39dX;Q4j-7PM)d4Q0{@Y_yfJ%OLR zxkjUbbZlbNX1Gvgg>myi^;nHVBRXPH$N{yE%ZCg4R+BkM%Yy`&Ek`v!1A1G~Jgg8~} z5(4;k(}Zi0i<7a|hwCBqX0BDbQ#V#EnY+(@>5ef&k(XiJUCxuzR?1Elq*<}l8rmMb z=H!e&k*uWLHaW>H?lwCxngH~?t1WjkSGgqm&zrBrgbM^=+}Z3y1~lF)Ckstycn+fSCFu5OtL^h$;XSs_93i0={>@h^xEA+)v3qqKzBQ!)3Q}m{jt{gnYd_fPz@uI zpt0V|fNtwyWBh0Lv(;amc@8%AcEZ9d&-xu_u!?gM1jA8bfS*3F|l_uMRF+yf%t- zRcN6)1$h&IN2A}3BK2^@reBS2XjMk136NP8o-VW8XZu~uO*71yDJoio zZa9R#%PtcD3TTO(3DEcpg%t~+fz!k=ux%yb6#*R9ODf~)1B@g%piXzGxc5|yGVT%v ze;(?#2y?f+)cR&g%b2JO#)br3Ovcg zBq+1fvb5k2p<3rBodt4F(4srXwO2QUag5-5gQP_7Tq zLtGkgDzyI$9X zGBFt^Y*IC3?vX_=H<=!vj#ZNamVAWdChHj*H%*sILRu%fc*!X*RY?Rw@pLz|P=qKe~P5%cUTr>n)v zc0*z0yj^XOowjI`TtK-%=l8<12pM)|(wQ8>3UHh4W&zkJ8Vc7IO9zDf=Pnkyz# zC`HxuD_ktfT<1cfpodpnnX|=Wnw=jT#ixIGP6q@LV9?Lg~{i*8yDx1NVyw*Eg!a97>xHlx#-(Jo^4`vg!vX zJm{5@Lt_TdH=GoD#A2p&@#)~WpAs7ET!myP*3O<;JsWgL68sB7>4+7K)C+djVyL;Y zI+6#fagzkhDTecs@S&dJm&0sLbjIHr8>tTN=Le2&r^fp}S*kJeWoVq&8l#757iT=R z(4m;^v3q;bL~$>%=y#^rG_j3E_o3x~fFj3-!9+d55yUae+8gbFL&Y7ZdDT$`j-aul zUn2kWcJbk)>{j6m1|_>Bm0YeK37DGb4{PYqOM{4&H?Y_3t&{+1z!kStFQ7K%*s5ms zalSeV?A40)x7Y0Or9;(2?=*Ln&h*X4P-%f(A1=!B1>GbBB|QWEs{oD7OY&{CZI1%| z4eYd^HivvKwE#$SqrqhJBl=InORE~Q=x65eVs7e$fxk+($Ie%Ol|cK)gzxcH*rTSY ztl=qALmwtltmm8^_t}F{Cz?9#`aKiG*%eSuq)?DcvG@$#BJz8dL4vpCdT;qAZ+DJh zxU-K{9QhvL;JCBzHF|G#@b~;Liw+56fGy-EfW<}~WGg$G7dmr0n%3Jxz5K8_*1;TV zc?J+Neu&5i^qpihnwHF)4TnCyd5GQQP&^=!)KAn{Yx3SQivJ(v)MI6OzxpqmFtQGL z-v)3inF_vSsUf+3bj!5L2FBYY`o;06M8dLI3V}2()5x50QKa~y;#t9%S5oxeQUIcv zK%$x8J-N#ap+pVmd3(TldIE#xOI3<9M){>NMmM#B3t7#(`-lOCLd0o__RjN3qy^5$ z@eQNEIC5-Jx(H=B#=K0N_7qZd1&!F9^LRDAc=-GH-&rZ& z8d0e1MIkL|nUwm%Fg9(#p7gu=))Xmu*B}fWsweQ9cuGVo=^~_-EK85RRqVWd9Y9d8 zeQjo8@g-LZy&VqbWq+{AOl)3d2s=59g%s*sEO{Y`G&Mq;5-w>TyO{s5w8&XBJiw*4 zR#?4^SB>3}JH2EOoe+kG4;A40n>I+&;j7fD2w&e@GivYx|D+CZR|72!jf(r%Te_bW z8@s`gycL98^+>98B2FodtWPu9fL@k4nF4zpHPQs;Z#}rNmVX_6Q7tE^vDTQFy^72w zf3@@8E^BtupbE^G19{@16!mzVQZiYebuvwZmjCMa|F%VL0*jZKc7qt0R=JFM1@X8B z4-9GDt)-d2!BsrE<}mhJ4jmODNR-V-MPpt)RPA_fkE`$mk`TK6j5H%q&9}knSogB z!-V$ll>Rx;;){3DBGI9L!lg0T0zLsI%!|Oxq0<;W$Kvf;i1gN<3&@kPvnJu zncVZ!aWDcRV$zBoWDk|t);crsgVvleA0~z$v7}%!En7TB6(wrZ3YbKZKR}Nn547G? z7&${d{~HyIL-K?Gvm{^EV(TKX`!aqsYoZc7ezaIG?y*YWGR_E|HJ{d|X$R~+9o-{A z#eFCgT1p00C52phFI!@5w`5R3%%aJDOg*-eWS(b){55DUaZ}eo94E_$xtm;;$~VOT zf5@9BmTPm_=9+b^ce@Wp2baMOA&m)_-Yu)VX->&1h{`KZ(c5z)+ToKZ z2^m!uu~C-333swiIPgd~0D4k<@+)^xC;5xpRtreA!pWm!-(YA+JQt)98ALO~)uU4f z?NVv*7#^`IoubEjrLKIbj)G07O}%|+z5Md$-BY6uxC?Zy@uN|D&;0fEB38pD?ViQ) zP-fwgmB(zZUDAL_xd&Ww031JaDVQ;2`2)Vas?@bRb=97ZL0F$N6En%#DoFuswB_-$ z6{6EE*CR*ZS%w7P1!WAciEuDbhAvs=x`9)CA`!7O=jk&;Za;CF$eQxV0PA%lolse; zSq#R9c{PDM?E;Ac0(x&!{qW*dv~hbxH{zQ6=UKezYF{&m+WxWD(v3zOCSqZi@ zMMoq;N#0HG(j1nj13rusSu4qU=Q1>ld4O`+mTdih>|@%za9Q;NNeUV!MG3lm<+VxI zI_J4VaZ4uXP-etaTV`R=P6%D+O{13>VA;GI8wtuh$>)wBG8ufy7x%Q(HV#%UeLuQ8wgqGClQVbJINVNE zSjz&<6C{7ny^*qx9-xgEBC7Ns)Tq;^bso~MNo0zzCpMh;Zt!F@j2xhtq2#$++Qp3; zZ;^`X`L&E711fajq%v7j73>UR^ZbN^Az^0`*mc=wfU~h;Gb6|HmMsViws8-edLr#9dANSs6l+2OQeX(A2&&u}3+93Y>Gsc)L>U=h zl}jxxa3c=PTw~MBFvO_Rw6S6Ot8P=ZYmWXA#q3;8GGGAQd>j>%UvhA*(4*oFIPggS zB#OL!bNd@#`- zN|gNf2Yhg0ff7B2`v9J^Mu-l>P3r2=WCTGTtC-v+g@E+ryol?3Z6^VRcWch=t&72k zKT98`DB~21$t$=-pYL|bASuX?77pxE8orT=WhQ%2$O9Ej99Dvo^(hLk7{hMclB%#V zCvw0TL>rV~zxe1z(>3`}yBicSr7C^;mtaZdjP|BgY11C0<|g09HkMB8qlTs~<48Pg zMWm}Ag{;6^WluJ?*MpX1^e{ z4z)trXWZ6fP+0p?(9t~8d|`kaV`=}SW|ZM1T`H(#4MDdAP(>(LN>U93AGBAQberO3hI3wQSD`09XU{ZJumm=wVc`A` z?1Nv6O_fC1<-6GprN5itC@DZic11~}Cy5EF`|Q~`;YZ}edP7{hLCAU))RN43F}Kxd zd1mT7`hQZv-lB7p8jed_h6mns9KE*iQUlS7qe?BG9Q~?wF$-zFcX=W$0oU`zpb1E6 zty%LXSu1fp{}Ge5X@hDeiexuznA8^1qN_3CB|p)q;J;@fv9bJQIcHU$IlrFI%&^Bh zp%>rNezQ?WAd%}mOTuigb~uj<`Nx&(t!)63(>xP_hVSll#W&fMko(ui&jPmV1s z&5S8kOLh@Etdtz}JLG$NLGjfUXDM}hLyYIabv5w=?G0LsaAyTgwVxwsM1~iYMi&)@ zn#Py4_^eJiF#$;4#MP7ctFMPz^oTCRBZ9$P`zU4+U2nL9T8K1(Qxn4W%p050Mn^!4 zl~s_aMtl?Fukl^cjTWPx*zCTgg-?0&nkdeC4}i09XZ4*h$Q=cUO&DMjzQT(-;xHp{zt zGAVS3s6t^>ByZRzitT#7@7`9s9uV~nJJ|{L8unZ#XvYmHuzKYB+;7I%X>6;*%Ke#2 z8Rl&?59(?3d3gaEOK*PM#3+@px^UM8aPWzagAv9f!%i?~KKYL;9kTvZR76t5(uHPc zU+1^Wc4j_2>g6#QSoThRfJtdm;BwIY{C7eYm&9?mO0p1=bk-hUP^A9#Z=Dk}h-p_! zyKW3{#%>6J={KqSi1Yz6NXDmRVP5$3t=9BW6$@ul6$6D;HqS|U-v5;~Vpil{4A}a} zr7sDaI$Z<;yoLA(Ki8Uuc~*U+P)*Y4U)I&u+*&R6IunRw!r#tt6+$~O@_Rl0J=D1L z{JYy+&p$aavw}DI`uDoovi&jOeZQ|*k>m5(EP_CrknCIA8kL0431*ico^her5%&3Z zKBBji8MYy1$_?JW?$-Q!ES@h*m=_THuS$C^JM+K*|Xv+Cz@@(za#g4n;s{53?3erk? z0}_+s`s2O>Aq!n{XM2m$-IX&6QkuSQPbHs#0MCm36#wJ2zR&CBy1uYmH5~}557EJ; zhT!MZ$FoN3J%>uj^Bfg6t zcq0JJFUwG;S&I+q8Wdew`)1+2e_XKxDwierky3zhyywIQiVkL1PfJbi zjjOg-->aw(WAoAe)crzaeCIWPG!H*Mu9}-ptcz(0{D4K5`}2Lr9&WnP3#*3Wbk!Fp zTaL~~->Lrqz@g=~)JZnFUaD{#|_ zNI4-@AYBv+&Dz@?%&AQSV;$(PL?0>NUma8cul@4n^{exJ_NwD(dAS!|y>jQE`ED~? z&qsH&B2^-(h>vsgnT|?J?U`Nx0}9Hs+e7X>fahA~j2HFU_HY~5c^K8$Y1uN1!rOc= zvC}FO8z(X@!ObxQ%u3d#L2jh84erthYFy2K<_t$|o*ZgJ{MNsvKKw^lUhkmd>4wn` znjec!VcTS_WPYK8Ez7?&YQL60!xN8P$}B#L+?;2?RYH#xcffWoUfq#|c=dp9hWRt) zmTDOZCt3T!?nrLkRtueJN>WBSe`&?_Pp0I*=N?Vb^TsB~*nh94tFZ5)k83gncP1FZ z|HWO*82_$xqC;}dK~q%G-X5c2f2BQF)EO8vuE3|{xFAeVKO?+uX#uTWj_SPb zdZRK^IB(DCJOt5O6KI}$Kd;7*cAteSNMsUu+NgecFhQErE7@6SEFyrK;tosOBphla z%Fsbxs*i@t9h_^%1GCQ2kZzEyv<`-UZpx)!&@l(EEEb6w~-Yjqq(0FGIve5qe z=iNJfJHmjNk}<63U8`shx(bo_W>n_;?1dToyL%M_sbGwAxFzSNP4z23gjI<#^7yeo z{QU{y?<|uBWAT?G%Nw|&g&R_qBM{K7S>f_{{C36doj~Lhz73gOe5lSp(ia*7!m*g2 zK0w&m^X%xD%!%U9&RI6q+YOf&^%@Q6ekQ;bU2(F1a7`?I;e34WTJ`6|aqj4L=IS?? zBrQ*9duB+d0--(h}!KmRuME8d>sKBdFJ(K`_X-OpG*NaOtP<jj;o6XqiFKX*4(3=G>y7drJR|3{mvl1 zQk44(&u;DgSmtdiyL)5FRdU1e=w&hEKm#CMI;+UlUw<$EC)%)3e?)5DFjd`~ZwuqdtjM3FkA4J~R$}KWi#~6}h zlnwtRa<8?GOTe+iv2-r8{2S$!<@MI)lg7115;TK=XZiM?I@8t@$<(n?O*pH;{=cBD z7GiE2+gaJ0)$MUQX(_$7#9%&LE-bs;IdDOAs*UBQgz}n>HsTarmHi`J@&ItNM}%N# zk`BvY*N@ug5O>t@lzkyGpf|^v$?R??QKKI ze%99pXT0!nBk?otDex+L7X+c#_LmeEOuNb4a;J3p%Chq%jhHovuJK62c!pC1*(y8Q3uk^ru*Zl1Q@gTy(% zseV*0{P&N09EPHjUhapAmuOh;MV3jz0X+SJ3Fs!=zNgUYsd+i_<@R$Mq!ec1bw2c|ZuSlus}J*I z7(iyb{H<)yfdLQP`%}IdTNEpmNHdwL^?uBbL(+c6oX@B9#CUkr>UA>q7HR7`lHDvQ zis|Qq5wNpp%xS6qhyM6+nm3iKdztm!5e2d%+F6d(Z?v(_eEGIMSoWB)+oNt+exp-w zd2@arv%O86wV-9Zv$=(Nl7TN|`nCeO%_Aavw0Ds|)G?-8t7DPh+!1N}e14x$!M)+w z@$?Uz9@G?MqJ|ilnbz&60ES2h54K2z3>9L8jfiFu#P%^HXy%5SS3vYW9qrc6&49Il zAgIei!&G=qg*o`u3UqFlaGKv%gZhq&n?e{5o=fhy))Gq&38C5hJI@LG#4f#Jg!?L9 zZ9=}@6Qt9OWp0An((2}bXC)w;;Y_^tbH{uAky?d!`_uBVo_5jFwa0l|a5g`(%v15~ z{FwlHf-IwGyk^71?OO3*21lyBVBF@bfIp?uVVvSk+j-U9&T()nx~CFtcb zq+`T@daac*5}kK^TmU@W?%JRpQHU=eB%}k*7vNqqrhMEH1j7O1Z_C ziR-fR1fyn^E8-8AnWyXA%WdKH8Z6{SwZB~hvAI=@90QM&UK%JasEHq|uy`=&*URWt zcV{Ys*9fkO9FU}E9?w0Z7-QXC4DM;qQLP}@|7hrm9R+JD^kA-%2=(eM!zOx0mAL{k z3`RWH*&LGma**isJ6+%FwkY1MB72HJub{GRHFMIM&e=RFA;4~is@{0UE~Z&DuOz-= z6#0axVu?PkNifE+1)T=I8bdh|#^I#iP5U|`v!jk;2(L3f0Lci6{P~Dxn1fmB>PY>p zIgpk$o4WLV7#j{;oFp{&Gj$+{<)5TX>WUdd=N29{vWX-A9M%YXQocKg1xGS;L8j+8 z4TW{y++ac?!C$1#DOb6zG%bslx+!qX;-v3%ycW(smeV0gQL^DpzXQhqUJ^)og-l+( zmiZ)rdqfo5t>un6dV~}kc_aP)EmX5vldtkLgba* zY*R`rC=ko}S~$6i?sNcazc=B_zAt(w;vzJ%*NbM}jz8$8FQ-``Ot6-rkVq`D77v5o zY#iCm4v%rqWfkx1C+u<)jl1Jq@SnTkoT(X7*ms`iUO#Ts3_y)5PQJ`-qUPGs3|m+; z|9NHka8Q4Q)$@E$WSgnvH%|jtTj< zBvJPw@l(6&k8#Kq)?9h;Wu85ojUUCMvz=dGJAZw=+<2OC1XOpB6Di-{k3rirEpq>= z@>$|k%rr_}?s@iIPd)ponBjyptdO)R&vL&t>Brk`Xd4G?vYp#XKWP4Ks&mgo>qDt` z#W2OJ-17#+HGm)2k*&E5`8q%rJ(aRM_?S)xxWy2Duc$0ZYCOo0GiAZT5#ML1xnT5c`Q_!Gqi(ELX^G^c~>#7Mk3#Jcj12(CeH z)#M6|mt~fsM{5iWMLfvGRSaC){pv)rSiQS{`FB_oc%&uQ7BfaPsK*5g&^m#PR~0z~ z`rfHlVYHhBRx#q@O;ns2fp6FOvkt@>42-lddM4-?;4qYZmNZ8W2Tj7H6ZL~@G7`+S z&w{_hAU8RhQXYfKlJJ7Sb}!!hl@KGt6qf3YXz=#=LF?tL-l+e*+Vu4j*)dXciZea| zyy@Heyw)g0#Y#TCUx((>hu!#m2z+@x)VdCTTZT+Cemz{TR{DOt9cMa-J(4!jMjX$! zyWycgLMVz*#a8~xaEOK?vgdaKi(~g&KDYU*>(J~D6_V&guC!I}_1(hoQvcmCI(==z z!d=$GLt0+&Sa(@u9u%ZGs3%LAYD$Hbn^)S{M~T-QVauLakO1k;OvCmmBCbyK1! zN@pvI3)@VFR*aOwb6+Km2B=8z;u|@Ng+MUJHA}K#XlTjDBM7!}ciRvp0+dP!&A=*Q zBY|~q&~oh6oz%oQ(PuHE7{P`OzAYOD(9mPPJ%#;#t`SeQ7ukite=(q`j|QD{sz(8n z-2L;IZJ0H79ENKT9&B1iO^g?c$AjzJK3dzggt&rk`N9WY0{jF*V*2@l-a_5cw>um& zo}1zB@>m#(pdIe=ZhvCzB}v*;u)o~?7!f4c*j=|Txe3FmnDCaz`vD}z)4=L#Ya}0q zsMIVz-2imn+59*^(c4_@siiivnrC(gfYc~6)C^*nNmRYq!TPYjj`!C!^n2#dUHuP);al6Dudkhd@41z(U)nYsv~9x`-NzyH z6K>)XFr5+Eq+k9hA0IaAhlXx~@YpHCemN`2MLxIGWX*Iub(sB zw~=M1rrq28TS?($;hYMYj|NvaJ7C^&d4Cm)c*7up>7bZa=u729(RA@quCRSLz|ub- z$EB@bPYPY{`klvw^nkCs&Dh<~w{3X=J@%hcecWmFs(lt63UR0@><=}HEN%bBEuh`y zAdlv#T0W!(o&(dJ`yk{F)!>Zm)1VVu4NU=Q*)nS(>0$;*{>k_SJN-nJl)6gXkXhPd zSamBjF|pD)LZyF@ZZRktklXbc_FR=PTh!dEzJ+|DmW+3i~V6 z2uv1^3z8x}{ih1oIfAAN*RK~VMf{SySU-|aZit58D-yejSs=fPozp1H`Qh#b{9PV* zh{0iY_h(Fu7O3DEd3#wNP;FJ`OETq0z2c|>KYY+!GR}82g*`3}=;fQ5=n)`r z2OqY(-qMO+V9VK2ox=u|~!%S1aQ9N4Ol@ zcRNC}ST?aA8HQ&RIIMgD@Pycn&==?Vo8EqhLh==E>R^#3bJFUtWyg<5dWzQ|lZo61fWx<84j1{Tcu6r_jG5}k6cCyfv z|I~WDeY}?s;5|X5CEd?gpQe&WM%JVta5-vfc>uXHVZrOQ%)sz)yEj1va(>A1r3OT# z?~-yl&qBk>(*P^NoNpZa;=Kxfy@4zBtSwERC0o)E)6#|;5cbr7gL+2z)AzB~Z%#j2;!>PW@q*+3SoM4^8mUM44 zD*i~@XO359jy6TU%hFZlOVF*Eq}=a_-x_lc!3aHO^t&178D{OQ4Ov5cxFb=AVTD&@ zo37;}sW9n`&qw4yRn+5>t>iny3gomZRcyXV+U(ilS^O)y9(_WY*i*65*Xd?FaA9{H zw%N{3os&shs@U%7SFho->Ls~Uhu?2=ixqF*nh;~r71<}c8GfhK*U2SMR+#1ZQ1 z9!sZs2yi)aiFjtBmppdEQ-oU52}8-#i&NYZEKn=GEs*xij_^coN}O2T zE3iq{X7c{M+V=6Ngw|^c$aJjy)^WY>i=43u&E(}QHFGG3&Q)9-AqwoJQ}!-2(w#Mm zt@s&jbcN2Ts@XIOer1E>JixNW4<28G)^)m%$>H{=Y0}VDYBU_)+3k;5ZgbtBNZWSo z8kJ%a-zLw$m(Ay0!UP@>Ep8QJRXryQ+_}X)PIZ%?7Ru>V;B{Wv%|1)82Yyu?x(yyW zLb^>g+F^MN9h-kO2DMl1() z^?*G!D#A(#bw5K-Mh70}$0|v-M;Fi@F&pruw67J`JM65j6PeV;&!m5c0EX+qKci)U zW|$l6AdYW$df-OvU#$$*xe00S<8O@$_HLvb&h?ij3ifxp4MYpjAJO~cQwdBP=~Coh z24ssA?ByZTI%}9E*K=J#k&5#KbCj*h6PnJlgi}eXZQoF)Er~!ENvVN(!|ximHeYf$1IcKn8Z(_VyP;V zfn(=)OYb5LTI9k}H26k3B~_o5Vpz+&fRU6cQ+JjDx7PO$LpsIk69U7-Eg0+Mba9o7 zNHHvDk^z{eOcj+2l^}cG$IrO3m2j9s9}|H1hk7K_c`s>{f0>*(*3HlNkGDZ{ITXHU zkV3-}sRe2pZ|R?33@Ui5c->`4?C zRrNu=SbT5IS^<%7{eQwJCb&g*6#e!0{M7#6ROj_+ z_7tOI&isK3{Q(eyrUXce%jMH=j(%uB1F}04Lz&7iVds+GVLYfQWAmsfk<&R`Xv_!3 zMHo+y3}G4Nn`Tb~e{BwZiAc zj&}1sMb=;!6;53HcE28V8f`;!DA$h|34I*7h1^EApn?y*#ItrIDZEiB5s;6v_6bke zi?{|?J&vbegqL)(&60y&r}?w5JBRxb#oKlHFF)FD)OCdD&e+{%#KNBlk<^52(ladE zgCGPZBiaOcn_p`oo*U>Jr7CEaa>P6CTcNdPe#lnKpcCSm6ujMMiRYzt0$`NO(=cNg zh#5>FB7y*EvF4s)&am-JVC20TZ&fI;qzYXuqzWU^g70GLg#Xe{QC*@b&r!u%BZC+W zd#^IUJxlmY2Q9pSLqFMCl*@WFm52df~t<2 zkH_tB-Jg6*-V5qhej3lFtxG+vPA0q=4y1w|r%8{-vS9O?8sFXR8iLO)j0dAEG{Mt< zWoH}N8*6dhZVarY5ED{)a{&k7+t(kk`(P|-CH3~=IA(`|WaL023^rRG4b$b&LcCJe zA64j(v`)=bes4=E_f9vrMHGA|a|Yy478HAto4u za1a}&Yc)_G(uQkNZ$RTU4rY2eG-G+XySb`1wY}53Y1uOhdtEGHizhsjLaE7{sGRVWly$GgfV*5QZHwZI?Jn==+QS)K@;UwAUF zcyr4aK{8c3!XJ#+XPl}G_{dgaEztPlAgiHQgYS@ zUrPRKkbDZj?$^)v+#c@-tNP3D$@uN{sIS%%fbpD6tBzvFvE6;Gg%D0M>MrXmXNAqN zo{#Te`!ik|CawU~W*;lnkc%9+c3~o6mM|y>Z6td!{+gWXjg{R=vj)w8{SWQ_M1GDG zPBT+3t(8y;g&zLPoS)VJPu1|XO9+5xc_O&h!q$~Nx+$yIGOF^F^UJvqu)?otr`J}f zz_dP2Vb)!z+V<-!b9?&4)XW4=#}Q!hwGk^A_z6(i(UpkX*Y*Ds%oUJ_F?}PSsRm(a zk#7_0GPg8xJr|m4Z53K^|M$W5v|R_XFb8E0eN@;()AnW~0Ug?wGtU&S`&pRhdIe;^^9|-A+c{l1~jK;j@V?UvBYk9;*hS?%uis#k#6<0N>zPC zSS$NV;a#h-&x-o5n@-3?oK8}?5Tp8)P{@6Wd1^|uWM#4}U+=~-e${JNSp3Y0!u^u9 z5C*ChY|dPADkn2x`O;=S$eYbDsP^rXgi8>Z#)#if8t%Q_y4Ef^zfrCJ?T%&{hC5T_QTfk{Qx{o>dOT5hc9j<#>X&r#@~X=yYfJ zr~2J~<|IYWs65o~zeM>zv3Q|Qe{@?YawOmJgDY$cqrs232n7cWqqC7}!BC9l`+WZT z=pk2pX>hE(^f`n!1`UuymxfSDanW?_Y7U+fZjFmb zsZhj9>j3iNAeRrkxdekvb<2;y$(gi$DtY;Nf~uk#N`(!NVePh0g&tn%FPQ|Sk*yTn z*!b+eXQNXcNE|^SLpWboT!f&J+n;-}sQ-=E5Ly8P(Y)IG%tt|ISnOY_S>0PsP|IGk z{)}n|c0lz`HL%s)5s2^z37QNK-(;3z()Co0{6?aw)Zn#d61{rUSRS}&%=$1@jedVT zdCpYbYpXmvvF)uxxo@amaSNDb}rSNpsXxUt!&U=$Gl zoGtSCqpWM^RW%@75fZ_2R27SFUQWUIUSo*LU5+?+vR1G} zN!nE}j0_a>cGDt(q|@z#!^A3X6i#K=JmB0gY4N3aCYD-n%Gy=^4DRZruD$C*Ay8_5 zM_mQGxye8{c(ekI@HwXCdW|TdqP^wnTn>A&Ox}QZ1??Qo*&l1RUmGw(gQd?Qk8FKY zqm$*@3Kp~hInvA`|Bs%1QohjTj{k4i{qT{S1f{e)Pd*|He`=UfVR4zw53**<_zae! zN~$JijRV2^EWs*xV^smhn0pPOK5WEjkchLWjlFbJ;Uhj- zJVph1N19f@wPDQ*5*i-Bjl#LX)Wm=(De2XD?wSgH0~C=K*@UsTEJ3`e^o>MHs0@Q7P=e86FuUEX*mDw8I{AV@Uf zk%S#k`g+^w&ki8PyCu^?@81_{6th@2Q4As>Q`;Nd&rcVlUdIDn&{&2ZblXT+zJw!s zxR_zF?G=wm!?d$R(KGDug(bpgA2;`j3sTNHID}^vmd0>0d>w#$TTxx++F9S3&#*4J zzO$sHE`1rKRAh=V!X{g=agT`w(xJtVPbi{4BhR9|by;DwXc*jM88lAzsLXY+viuwZ zTY!fYEuh|tsxvv!<(Pt@N66*yhffLmz#N&+p1E>ROlGn3G>C2I>6 zP5~>r#Z+9*PERhnx>n%vS(pdc3uE=Dyg4O}i?wBH#qRzrRhQh$HwGWu(av-!@$27k z((sspO0cnwS8dF9fIJk^T$x>)^6a7`3gv%grZ)9-el&IH3vgImxaCi1y7mZ|t#s_O z=31Mf2LlCa8&@!TmwxjMA2eRUS<0n1*SHzA;OD=((Q?Io=U&_is215?;hGmxL#3qa zjOL+I^T?+fniq8=EVQQPD;=odl-tuxR=PsSLmCd{X;j)SMF;2CPs;WVfASHc0k&G3 z2}kqgXb;tUHop?$ogR6)agDjs>MR}zFRlj9_hz?CvWKcE8mJ|t&@2ase-B?N(^iI5 z)R1i|FYh^?fHx_oR|y`;ox0S|17lpf;vc91vXmCgxJgZJD`ra0I$JwBW;25*=$j{W z33GFf06}jz2SNW_Q3h;uF@>M>3P%0fN(~gxd{#$2llMh8d?!Q~sqg&ZxK)jr{t3M4 zcyjJsRyQiEJ8YnD9M1I`2gk38KdDmUr*hJ&2C=x|G$fo?@A_gcN7uwDHci+y^Rtj7 zEqE~(%SF;+1R=wtSAIu}VPNa3fz%+%u39vwXEF`ED!TizCg+sQ1l$Q3o^O!|m9zBU z?U`(Xk^hjPR(0|B+2CzafaTIwa?aI^C~*jZY%xnCE+T~)R)D~~JQ)+fxQcI25){Pz z6NEmxjd=QzLp;f2I8!(1jH{l0_R_Gk)2swej=bhDQrNdqSJhMhA=v7f$d3Qlmd?KB+QsKtVTJvcMOzTZ8MlHuzbB4kDe7c& zI-FNmpP(FMX;05iQ^a)?%o3=oN2b*a*2}Jhk-?v$;GL!dg|4f%`@tcnWp67@R9-%n z9}kHNr)Q4ZzP*6_&cVm?eos$iRVyp6x9>&VLsk&T!hAv-4l(dM(Q$8_z}iyka3e)c z)FO|bP8m+Mvr#Fsf^{igH0vyUp@t$slv{6?%5AkRD&2V;W{TeYFnB|fvr{Y&{%|(xZm*NPGa5ZmRYO70zLIUuTrMfQQ6K6 zdWJ;u2%oA;&WSyaMOK*;jg|9~w>Bqb*wIB{EsUo5gcptYC|YJkcXa3hx)4dLTjDo7}Qg}*8pd9L_W#yi)Tny zI;>?#QtIri>Ij^AddNs&ZVvs@kfNbeDuiwvbW=f9%yOJ5$xo5DBYf!<=7;(j&U#TS z81?pH{mtd~N1uaOdiz?8M(Ku&F@b97eh-xZcX(Txel{nqD`i+0sk<2I$ijR2t5Pcp zu6Qm|XX><&m@-vrjcg%;a!AKCy7uFP%GC)0S)*nHa{I|%LV0f9>vWU&Uf<>80|$II zRX8Yo-$vyhs3thAMARJ=nAH%AMV0>3uow1++PPA7;+>XPSES#JbN`KTAbHv~p7Jip zl}eQnUR(u)RU8>@zgA|s#;^Lk+U$zHo|j~OxZ{j!kpvZFoBkF#RJ1FR`qP3u^JZA1 zI%zpLYRg7y61KfC%$YUCbpR`Kzb@xoVFM@pX0dgaO9zH&nx5KE*txk<)VA9l`BlLD zK+91Z>bVUy&W4IO)Y%#%rhr8W39)Uo;hk5KsV3|-5}hI@>6+um=k*HOBTFug{q?`H zx}gFbos3srE=BE_Z_yFwqp*t^R1Zx82k1DyPMe>Mu0J!Eb1yp0V&wv++AWJ%`*j<) z(%BAH#3%45IUZS)8F$dNS@-2Y%!Ra+0QunI9gU7Gt$uS6Jr2^33`9+4+wO2M@QLTV z)ceqG$-^a%V>(b3pAGkU=Q-~gcc)d@+3U3=jkNnFo267U^O~&j|Gof(V#5zCTJ#zH z94WemL8d1|j!fk*hs`qPJM8Y(GjVJ&5cfPbCM-WDXFO^-$ba*p;d+ueI;(^kwDebc zT*e=_vql$>`zK(i&oDt(EQTGiZT#H!iBHpEapmp8W;n=z<^?pRTZpfgTK@GrX4xs< z^(iDl=T`SQ4MSg;sl!8-FOYIN#-ns-yu(R&fC;|G77{=4dzYmMD z7+!uZ;^6$g;_xl#EQM5}Z&Ys#Nl^xY>*k|ZG0iW_>t6U6Y>_4BQUtp=B~Ue&a{A_2 z`ZP*)o)0ASy|(#v^xrv50s8K@ou4{QmKl~BquHEl`qyRo^Gu$(KE1M4L7cskVm?es zDi6Kx*o;M!MJyccKNBOI{og1bO6qI(?ymt zCH9<8;}kGsWe0*tK7Ii{yQf$-2Z!3US6eMR5xio7m4gwqqXt&e^$L*mJRQh zC03bu;AB?%txT_?^l&4QbFgITbRu!Zu_OLe=5({}E61?kqT(FolDA7#6~$b2h)YDE zeVzh~DpaiVhpmbq1^A6+4RPdqj<8H>F%a3lTMk9uMR*p3j1n8MYB9#9`Y}btNlBK< zsif(X$)xGVT&Oq#X#Y(Trj~;z;$;f(#=9CE$P#HJSm3E7SW3TtR9A^Hj&LY?eouXD zSuR#X_2y2QJbe-aRq_vSV#ZIMWEYW92yW_W_tmKu;ilg-cy-8T9s;8Ls$47#ZY%nv zCm{2bskXJXC2)B^NpK>lDi07LrS8|SSP~XV4_u_wH??P|!bl37)XKVeXUAgf?V_zV z0~@A);$-B{RWBzr(uB!vRJPYS`t=m+YB#2_T`-KQa!gmlktbZ1 z@n&F)jA)OKv?g+Jq^bOOUvOTdlYebrTPahrlz&ZdeC=)V;Cl zs$x_stbZIYnrCX2(S)4GLn7aYPHV-Qc{rx>)yOhQG=<88qMV>6(y>LzT4QM46u{u= z6c!lwj!{N$;yVMHI+K=WI8doR>vccf*3govqek4`?Fl>0k|A%*A8V5$#H9^uuR1ro z>)ynw*Fr@K6|n_!DvfKn+V#jfk@6rd9q1=KV1l_a&|$&RmKRsuw`^C``$&O9Vn<=I zU`IrWQ3tZnaLG&Zxp&Z_?7n?kw$M4(-a8w?2h*0 zj`y-~pTeLyXraIBNKqJoQvmNsX&TMZ?@?%UBnSnp8JabE`n+9Ap$l96tdv+<93_lV zbFqZ5kcVIt8yDT)n~4qOzKYc)_UQytn+lkx4I*=z_L0g;9k#H-Xl(3Qr z(@3J8p+K|Y?2F~7MxlEuVoPpchg5?TEs$LQ-gg+f^d9#^PV_PExFq|WZ3ZKC4`raIGrBt3}R_ z=iaD;LzxdIVVNhe@S~bfw!IEhA+VZ+hLb3e+_(gd*HC88Q&>em;R26PhXN}oqyaYz z3mewb2Ae$#2HUUKQ>o4~s0gts5fXyV261}-s@ibAbTVxGZh0tPGRwvtY{-R#3{C2)#jo!E69*-Q{!^}6B#c(&*D|pN zuiEmaTti%wDRr2~X?s2eVB6NgA={NlFZ&t4H^z z!Y0d}awJ``E6n8Zr`ym%w|uG23CU|0?B}J;@OxT`KGE~fWrn<&Gr9*Tl^1$2NCi51 z_0p5yEVS5<8B;se1V1}dJ34<;d#QDXYFi=cbn36-n=}&8n{B+%raMh^$uz#2xL%KHE=+ zFy>wFoHL4!@Jzs!NN58W*VrPRlA5iQ>SG$7JhV`97jo8`ecqgstTpC#M?;qa->`yX zvg2bKXc%eDP~YSP^2XJA?8(Ms8vff1)tFngeu2)cGle0<(eFSs(VoqdF3BD6uBqlp z8wmwVgpB5a_@^q`XO<1NgNJ$h_0jgqSrJsqntH3mVg$1s9aQ=w@s^ExZ@LLJhl2c{ z8$1`;o`vwhqB_N%h0cJ!OxM?c2H&oXWQ1f3(p~8j`DR8^C4?Anr`zOw%VhtGd~Wnx zaU)%&uaTCw_)#5H5ggmxKZ6GGZyo2^*D&U(rH50KZFjxjyPqK}rN4Z4KFnS3TaVzF zhVvwks1J24%ZG(6+Uqu_KcQBa-!vE=LUVUMpS*8ut_fUSc}M7aIF9K?+{60!89or) z+iNU9V`u4o8 zc7}Z7Yl(d5#M&ee)Y4M#3r|P^8;0z^B8bXqU1_F1Mz0=pGy4N>crk7{)z1t$CKEEh z_1FHY8db@z)@3Sf{pI^nuus7wZux_jeJ^96l(*Fy0TC?nsGA_?gpA3oU}gHR8EV<` z=5pw?&Ew8F_m}3?&x_Jbf!q3@sW+>!qxHb>KPaJ1OUp{k*B(7jfB<4^XT_O6;GsVh z`|50sFZ=`bd|F`?;Djt*3@#(b07*pj3Se3on7Dgq2h$IO%FXOZ*83bk5y29_r;MpT zzw|T_AGaARTW@@Po)5k!tv>HJ4*t#5BeY31)Ta4FXAra+b3J?X4Cr&_sF#}#rLhRr z;8HFqk%Dv$1&Nlw{C!lJxrgN&rRQML1i^pf)MFPV{+5O(c1w~=B?gqNG#jE*Q(%S^ z0ZGO;gc(EG>fT2?N!m{je4L*RpKl>X3%b>Qm1T$V4c9MvpLY_f?|%LrL>BnK;<9ac zf>q-Gt>I-oLg@Oo#-oeI>m9>iL*|jX5sE>IBHTqQsnrrMlKmwk>f$KSF}CHLqnY7A z*5HTCQXvI%8uVjt#hzo|o(^}{9d#BI_Qa2Etd$0WY`?&SK#9BuAHzmMOtGTu$t8&n z?!twiGSe9L_gJu$%9^nsJq7bS~a zhJB#cXHkYs&2ckDkvEUe&b}X_`8d1k`uez?$6mAz?Q#}f#yy&^&Z3~K>57ZWYg5nH zKWG@FfypB$;P+7iavMfE=3%{(cgCbxh|mM(Fv42gDEdr>Sz5D+S`z(;+#w*SRpo^hz=?{g zK{Zf18f-fRw`9QsMg?IYh-p!*W5GfBMWyrLMJMjLSYhzN4W&@fx3z;3P$1w+7_*6b zWWWMOI5>u*Wh97W~ECne@I%9Fi6Jg!JUW3gPA|!Q#;7d7|7)eIo&^g5c7H zA|b!r%L4$IELq{{rsdiEfa-!4Y(w;UrWb{JLiqJrQTnrbCPY#VFp>sRWsH83%d&%0 zQ!u)eFk^cn%KHd3_aHRYBs9k1AbTP#f8s3Sue%o9-HC)Wq3-UYmqHp#U(}dUn%Wpu z0=!BUv8!(tR0P8gGVbWpxnz0KJfJduv~tl>b7bD4qAN9^Y!y~3AO0_Q#jl>-`ab;8 zaB4QZd6@5w{6bN0=#7PYzLMco96jQON(N%6kO(P^f3mrt#QI$TS%&=$G{RL3$x(xn z>DU0E4ouTVGHfidszz(Wq>GY@`4*lS^nb84l|mlb%z*(M=GDUgf>iF%P>19%Zwj@| z>10Hn6yZoh6oDAx#6noZpKKL`S0}_oWZ{(vyueMS$Wq^WHa8t z34x0k46#;AR%N#L3eyE}E@?PkG<|QAAIIo!E3OkH&m#zwVhMy z?7M9E;@t?fxXOVq1G($|$)CU&0^XW5KoTs}P$#cD6+~(LzXnnXihbIQr&D~5>=hDP99jK$mq zl`yjI4Y`RcbHOeb6k<>=5ber{n1G#o@0h0n(1j@x3u$~cg{qn8C@*FRsYA;^(Lo7O zGvdNcXQKs+NZlEPFb=sYXkDzdkD~mVgXU8_FyArQ$5`BS5T7MLq!IQhy>GRv*WmfM~q~)m1S?F+G-3WfA;V6!Q4mb~HSJYAw z65gQh00R)UFf|^B(*c30)?e4^vc|+6i7{Mv(%~G%mAGq)i9F*74+W-;WKXO=G9-0K za}v1Ihp!2AS5xZB=)@)OAW37Vyo3+@fyC&S>Xymw2tp%ow!sioAWEv%sf!I6(|la( zoe#^cbWFf8xn7PSYbXwx2U1hq*NonlQqq>vjjRo{|#IUsv8iMv+aTK(IWifV*5Lv?z8R+ecO zdJe9^{c+2M83-LSE*{nDE%}7%Dte$K2iDY#wWfven;xnKGjQjJj2{-DJWzh=yyBz) z+h34*#qwXMt7DzYlM96I@5h?Ro88Z% z9!=9uT_8mWv?6GMxwSp-ClzHOFE|VpqX z4XQfgay6VrKpj1VNBRW)A9BEj6V~jqRB&g)bE1OG?fwQOIt1D$kRX)99C)~xGH`IJ zQ96=?i-O3p!}Qj!|55^IQ+T zFq;txY79gUVmpd`Ac&ESzA!__LVm+c5En{j+>ctBSYw8kScxMomol9RVlp3|B9tL5 z3tWL9$51ofcHrC#4JKK{VW+K};$+iu4L8vdaR_uF9Q_Q!LUepgVxwHnC}x_8D@gx; zXa`Zl$Z@211hItv(Vby`j`?nm--|5zSyBa7U)C;KS?U3cw^9bW9YvNWAsdAbVUC} zpEy#psNvzCgE7gL|6R8Pf8*z>S$Q;Iy-NTB5>|OQV``3 z`F5b+C@BC@R`e^U0!B!&J@+L*`VFJo8Cq+<5Bz~lLqiaY2Nt&IFBz>qL&vU^@ndpc z$w*!wV9aRg84B)PAO2#*PHlOIHTUFi4=iag7y>gCw17#1{|4qwv_-EU7rg7c*(kJv zS5~||b(*k29lfTdwu7zqHD#R82`PTaGGr+TL>UxE69}%B9Vf3FNw<)lZvN8(_{c`# zk^Zv-gx1IYRf3d=vGN)6tbt@5ud_h_`tXstLr0wbKtTPM-oq0&5@irsL6J%Qv z^HF9H_JahIF%6aevj)Cyk{#Jf6n5nkACX5s7T_h{hlo)V;x@MMPDD~2bvtcus&rhx zQsv66Vu+8VfoNOGq*T)ql~zncJna{04jvd^z?sY8$G;OGZxy-y@p9;mgqFF4`GfZ0 z7X(T`j4YGM#gBwM*5wR#If!PE%M1GSD;tC*HVZ`b*nU0}(PO{na5^C=79X_SIm!t= z+7S#r+m|%y*~Qlr;Q=N|{^qmb(L4xt>2OoP1L9P2m3igK79UifMCO)!7($=IFklQY z*R+xm0}K3%P=-^)m;nnD&f@P05-S>3tckg&Q!PV)UL}%cUwvdl=P;g zz;kd|SPYhU1!6${qBFKsrJEGj|u^)Ed?x%)1N{`%a!!+scTL<}^*QD!@A+*hXOBI%~;rP%X5@c#Y5|}s`u%WgodWv)y z1}RBWgVj_JPcU6_8KXg1zTATvY9)IA+==&W(ANDBKzxx@0 z%y4KyYvfP^9M;fpeL*%cXeuBE9PKiyTJxAL9PPKhtnmMXB^YBleyujor_YDQJVKr# zg&=zfT?O+#Lf$6npG)#9fru-YV;20ALLj&i(gZVE(yuWU2?1FA4?MrTrz^~ngSAb0 zVOs&%?hi5*V_+h%Oce#$o@kfXC+DXu#>|KUSMV|=Rk=fM!iqsx=X%wr&MqGz_{|{~ zwWg>p@5ba}2#FUJ^6W1fJhLRhKVWa4+g~f(K9AUERPixz{N`@V)P_Y}`2fv34H#I0 z$*_uX<5);s_C7XN$i=?PNT2{FHb3SOA0{QD%Mv1fotp-J?c8Ev9$%o8o5$r3vbcUy zg0^2{24e9cNuW8RdhG=ydFVym+uJir!t0OwA&~NM4jZz@{4~2y;Hv{yqoV+fU^)11 zS{^m(s$#|EHL&3TB&CRY5cxy|UiK`&MUl!M(8g3zKX2EEy6xG-w6UBu(xo0)OJa2R zbjPnQ9|A?;91xgng9?X$@;+Eo#^$z%*H}i= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -597,13 +596,16 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& end if if (info == psb_success_) call psi_ovrl_restore(x,xvsave,desc_a,info) - if (doswap_)then - ik = lik ! This should not be an issue, we are expecting the values - ! to be small, within PSB_IPK - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& - & ik,done,y(:,1:ik),desc_a,iwork,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & ik,done,y(:,1:ik),desc_a,iwork,info,data=psb_comm_ovr_) + if (doswap_) then + call psi_swapdata(flag=ior(psb_swap_send_,psb_swap_recv_), beta=dzero, & + & y=x(:,1:lik), desc_a=desc_a, data=psb_comm_halo_, info=info, work=iwork) + end if + call psi_swaptran(flag=ior(psb_swap_send_,psb_swap_recv_), beta=done, & + & y=y(:,1:ik), desc_a=desc_a, info=info, work=iwork) + if (info == psb_success_) then + call psi_swapdata(flag=ior(psb_swap_send_,psb_swap_recv_), beta=done, & + & y=y(:,1:ik), desc_a=desc_a, data=psb_comm_ovr_, info=info, work=iwork) + end if if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info diff --git a/log.txt b/log.txt index 2231eb20c..ae2ce3aa2 100644 --- a/log.txt +++ b/log.txt @@ -4,200 +4,8 @@ make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base make -C modules objs F90="" F90COPT=" " (if test ! -d include ; then mkdir include; fi; /usr/bin/install -c -p -m 644 Make.inc include/Make.inc.psblas) make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_const_mod.F90 -o psb_const_mod.o -(if test ! -d modules ; then mkdir modules; fi;) -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cbind_const_mod.F90 -o psb_cbind_const_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_mod.F90 -o psb_error_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_string_mod.f90 -o auxil/psb_string_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_m_serial_mod.f90 -o auxil/psi_m_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_e_serial_mod.f90 -o auxil/psi_e_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_s_serial_mod.f90 -o auxil/psi_s_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_d_serial_mod.f90 -o auxil/psi_d_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_c_serial_mod.f90 -o auxil/psi_c_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_z_serial_mod.f90 -o auxil/psi_z_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_acx_mod.f90 -o auxil/psi_acx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_alcx_mod.f90 -o auxil/psi_alcx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_lcx_mod.f90 -o auxil/psi_lcx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_realloc_mod.F90 -o auxil/psb_m_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_realloc_mod.F90 -o auxil/psb_e_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_realloc_mod.F90 -o auxil/psb_s_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_realloc_mod.F90 -o auxil/psb_d_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_realloc_mod.F90 -o auxil/psb_c_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_realloc_mod.F90 -o auxil/psb_z_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_realloc_mod.F90 -o psb_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_serial_mod.f90 -o auxil/psi_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c desc/psb_desc_const_mod.f90 -o desc/psb_desc_const_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_hsort_mod.f90 -o auxil/psb_m_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_isort_mod.f90 -o auxil/psb_m_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_msort_mod.f90 -o auxil/psb_m_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_qsort_mod.f90 -o auxil/psb_m_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_hsort_mod.f90 -o auxil/psb_e_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_isort_mod.f90 -o auxil/psb_e_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_msort_mod.f90 -o auxil/psb_e_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_qsort_mod.f90 -o auxil/psb_e_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_mod.f90 -o auxil/psb_s_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_isort_mod.f90 -o auxil/psb_s_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_msort_mod.f90 -o auxil/psb_s_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_qsort_mod.f90 -o auxil/psb_s_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_mod.f90 -o auxil/psb_d_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_isort_mod.f90 -o auxil/psb_d_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_msort_mod.f90 -o auxil/psb_d_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_qsort_mod.f90 -o auxil/psb_d_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_mod.f90 -o auxil/psb_c_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_isort_mod.f90 -o auxil/psb_c_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_msort_mod.f90 -o auxil/psb_c_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_qsort_mod.f90 -o auxil/psb_c_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_mod.f90 -o auxil/psb_z_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_isort_mod.f90 -o auxil/psb_z_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_msort_mod.f90 -o auxil/psb_z_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_qsort_mod.f90 -o auxil/psb_z_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_ip_reord_mod.F90 -o auxil/psb_m_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_ip_reord_mod.F90 -o auxil/psb_e_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_ip_reord_mod.F90 -o auxil/psb_s_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_ip_reord_mod.F90 -o auxil/psb_d_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_ip_reord_mod.F90 -o auxil/psb_c_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_ip_reord_mod.F90 -o auxil/psb_z_ip_reord_mod.o -mpicc -g -O3 -I. -c desc/psb_hashval.c -o desc/psb_hashval.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/psb_neighbor_topology_mod.F90 -o comm/psb_neighbor_topology_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_mod.F90 -o desc/psb_hash_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_x_mod.f90 -o auxil/psb_c_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_x_mod.f90 -o auxil/psb_z_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_i_hsort_x_mod.f90 -o auxil/psb_i_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_l_hsort_x_mod.f90 -o auxil/psb_l_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_x_mod.f90 -o auxil/psb_d_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_x_mod.f90 -o auxil/psb_s_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_base_vect_mod.F90 -o serial/psb_i_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_base_mat_mod.F90 -o serial/psb_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_ip_reord_mod.F90 -o auxil/psb_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_sort_mod.f90 -o auxil/psb_sort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_vect_mod.F90 -o serial/psb_i_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_base_vect_mod.F90 -o serial/psb_l_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_vect_mod.F90 -o serial/psb_l_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_vect_mod.F90 -o serial/psb_d_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_vect_mod.F90 -o serial/psb_s_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_vect_mod.F90 -o serial/psb_c_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_vect_mod.F90 -o serial/psb_z_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_vect_mod.F90 -o serial/psb_z_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_mat_mod.F90 -o serial/psb_z_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_vect_mod.F90 -o serial/psb_d_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_mat_mod.F90 -o serial/psb_d_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_vect_mod.F90 -o serial/psb_s_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_mat_mod.F90 -o serial/psb_s_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csr_mat_mod.f90 -o serial/psb_z_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csc_mat_mod.f90 -o serial/psb_z_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_vect_mod.F90 -o serial/psb_c_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_mat_mod.F90 -o serial/psb_c_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csr_mat_mod.f90 -o serial/psb_d_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csc_mat_mod.f90 -o serial/psb_d_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_rb_idx_tree_mod.f90 -o auxil/psb_z_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csr_mat_mod.f90 -o serial/psb_s_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csc_mat_mod.f90 -o serial/psb_s_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_rb_idx_tree_mod.f90 -o auxil/psb_d_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csr_mat_mod.f90 -o serial/psb_c_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csc_mat_mod.f90 -o serial/psb_c_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_rb_idx_tree_mod.f90 -o auxil/psb_s_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_mat_mod.F90 -o serial/psb_z_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_rb_idx_tree_mod.f90 -o auxil/psb_c_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_rb_idx_tree_mod.f90 -o auxil/psb_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_mat_mod.F90 -o serial/psb_d_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_mat_mod.F90 -o serial/psb_s_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_vect_mod.f90 -o serial/psb_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_mat_mod.F90 -o serial/psb_c_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_mat_mod.f90 -o serial/psb_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_serial_mod.f90 -o serial/psb_s_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_serial_mod.f90 -o serial/psb_d_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_serial_mod.f90 -o serial/psb_c_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_serial_mod.f90 -o serial/psb_z_serial_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_penv_mod.F90 -o penv/psi_penv_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_p2p_mod.F90 -o penv/psi_i2_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_p2p_mod.F90 -o penv/psi_m_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_p2p_mod.F90 -o penv/psi_e_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_p2p_mod.F90 -o penv/psi_s_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_p2p_mod.F90 -o penv/psi_d_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_p2p_mod.F90 -o penv/psi_c_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_p2p_mod.F90 -o penv/psi_z_p2p_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_p2p_mod.F90 -o penv/psi_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_collective_mod.F90 -o penv/psi_i2_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_collective_mod.F90 -o penv/psi_e_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_collective_mod.F90 -o penv/psi_m_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_collective_mod.F90 -o penv/psi_s_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_collective_mod.F90 -o penv/psi_d_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_collective_mod.F90 -o penv/psi_c_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_collective_mod.F90 -o penv/psi_z_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_serial_mod.f90 -o serial/psb_serial_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_collective_mod.F90 -o penv/psi_collective_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c psb_penv_mod.F90 -o psb_penv_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_indx_map_mod.F90 -o desc/psb_indx_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_timers_mod.f90 -o psb_timers_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_impl.F90 -o psb_error_impl.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_map_mod.F90 -o desc/psb_hash_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_list_map_mod.F90 -o desc/psb_list_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_repl_map_mod.F90 -o desc/psb_repl_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_gen_block_map_mod.F90 -o desc/psb_gen_block_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_glist_map_mod.F90 -o desc/psb_glist_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_desc_mod.F90 -o desc/psb_desc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_e_comm_a_mod.f90 -o comm/psi_e_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_m_comm_a_mod.f90 -o comm/psi_m_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_a_mod.f90 -o comm/psi_s_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_a_mod.f90 -o comm/psi_d_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_a_mod.f90 -o comm/psi_c_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_a_mod.f90 -o comm/psi_z_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i_comm_mod.f90 -o comm/psb_i_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_l_comm_mod.f90 -o comm/psb_l_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_mod.f90 -o comm/psb_s_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_mod.f90 -o comm/psb_d_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_mod.f90 -o comm/psb_c_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_mod.f90 -o comm/psb_z_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_m_comm_a_mod.f90 -o comm/psb_m_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_e_comm_a_mod.f90 -o comm/psb_e_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_a_mod.f90 -o comm/psb_s_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_a_mod.f90 -o comm/psb_d_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_a_mod.f90 -o comm/psb_c_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_a_mod.f90 -o comm/psb_z_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_s_psblas_mod.F90 -o psblas/psb_s_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_c_psblas_mod.F90 -o psblas/psb_c_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_d_psblas_mod.F90 -o psblas/psb_d_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_z_psblas_mod.F90 -o psblas/psb_z_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_check_mod.f90 -o psb_check_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_v_mod.f90 -o comm/psi_c_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_v_mod.f90 -o comm/psi_d_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_v_mod.f90 -o comm/psi_z_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_i_comm_v_mod.f90 -o comm/psi_i_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_l_comm_v_mod.f90 -o comm/psi_l_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_v_mod.f90 -o comm/psi_s_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_i_mod.F90 -o psi_i_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_l_mod.F90 -o psi_l_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_mod.F90 -o psi_c_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_mod.F90 -o psi_z_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_mod.F90 -o psi_d_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psblas/psb_psblas_mod.f90 -o psblas/psb_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_mod.F90 -o psi_s_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psi_mod.f90 -o psi_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_comm_mod.f90 -o comm/psb_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_cd_tools_mod.F90 -o tools/psb_cd_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_m_tools_a_mod.f90 -o tools/psb_m_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_e_tools_a_mod.f90 -o tools/psb_e_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_s_tools_mod.F90 -o tools/psb_s_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_d_tools_mod.F90 -o tools/psb_d_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_c_tools_mod.F90 -o tools/psb_c_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_z_tools_mod.F90 -o tools/psb_z_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_s_tools_a_mod.f90 -o tools/psb_s_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_d_tools_a_mod.f90 -o tools/psb_d_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_c_tools_a_mod.f90 -o tools/psb_c_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_z_tools_a_mod.f90 -o tools/psb_z_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_i_tools_mod.F90 -o tools/psb_i_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_l_tools_mod.F90 -o tools/psb_l_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_tools_mod.f90 -o tools/psb_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_base_linmap_mod.f90 -o comm/psb_base_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_linmap_mod.f90 -o comm/psb_s_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_linmap_mod.f90 -o comm/psb_d_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_linmap_mod.f90 -o comm/psb_c_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_linmap_mod.f90 -o comm/psb_z_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_linmap_mod.f90 -o comm/psb_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c error.f90 -o error.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_base_mod.f90 -o psb_base_mod.o -mpicc -g -O3 -I. -c cutil.c -o cutil.o /usr/bin/install -c -p -p *.mod ../../modules +(if test ! -d modules ; then mkdir modules; fi;) /usr/bin/install -c -p -p psb_config.h psb_types.h ../../include make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» @@ -206,1243 +14,18 @@ make -C prec mods make -C ext mods make -C base objs make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_blockpart_mod.f90 -o psb_blockpart_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpicc -g -O3 -I. -I../include -c psb_metis_int.c -o psb_metis_int.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_ell_mat_mod.f90 -o psb_d_ell_mat_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_const_mod.f90 -o psb_prec_const_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» make -C modules objs F90="" F90COPT=" " -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_partidx_mod.F90 -o psb_partidx_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_i_ext_util_mod.f90 -o psi_i_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_tools_mod.f90 -o psb_c_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_hbio_mod.f90 -o psb_hbio_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_s_ext_util_mod.f90 -o psi_s_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mmio_mod.F90 -o psb_mmio_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_tools_mod.f90 -o psb_d_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_c_ext_util_mod.f90 -o psi_c_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_tools_mod.f90 -o psb_s_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_mod.f90 -o psb_s_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_d_ext_util_mod.f90 -o psi_d_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_tools_mod.f90 -o psb_z_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_mod.f90 -o psb_d_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_z_ext_util_mod.f90 -o psi_z_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_mod.f90 -o psb_c_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_ell_mat_mod.f90 -o psb_s_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_mod.f90 -o psb_z_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_ell_mat_mod.f90 -o psb_c_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_renum_mod.f90 -o psb_s_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_ell_mat_mod.f90 -o psb_z_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_renum_mod.f90 -o psb_d_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dns_mat_mod.f90 -o psb_s_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_renum_mod.f90 -o psb_c_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dns_mat_mod.f90 -o psb_d_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_renum_mod.f90 -o psb_z_renum_mod.o -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dns_mat_mod.f90 -o psb_c_dns_mat_mod.o -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_base_mat_impl.f90 -o psb_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dns_mat_mod.f90 -o psb_z_dns_mat_mod.o -make -C sort objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_hsort_impl.f90 -o psb_s_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lsame.f90 -o psb_lsame.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_m_serial_impl.F90 -o psi_m_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_e_serial_impl.F90 -o psi_e_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_serial_impl.F90 -o psi_s_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_isort_impl.f90 -o psb_s_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_serial_impl.F90 -o psi_d_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_msort_impl.f90 -o psb_s_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_serial_impl.F90 -o psi_c_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_serial_impl.F90 -o psi_z_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_srwextd.f90 -o psb_srwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_mat_dist_mod.f90 -o psb_mat_dist_mod.o -make -C comm objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata.F90 -o psi_dswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_base_prec_mod.f90 -o psb_s_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_restr.f90 -o psi_iovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_save.f90 -o psi_iovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_qsort_impl.f90 -o psb_s_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_hsort_impl.f90 -o psb_d_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_isort_impl.f90 -o psb_d_isort_impl.o -make -C auxil objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_desc_index.F90 -o psi_desc_index.o -make -C psblas objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddot.f90 -o psb_ddot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax.f90 -o psb_damax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_drwextd.f90 -o psb_drwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_base_prec_mod.f90 -o psb_d_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_base_prec_mod.f90 -o psb_c_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_crwextd.f90 -o psb_crwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zrwextd.f90 -o psb_zrwextd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_msort_impl.f90 -o psb_d_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_ext_util_mod.f90 -o psi_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_fnd_owner.F90 -o psi_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_qsort_impl.f90 -o psb_d_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspspmm.F90 -o psb_sspspmm.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_upd.f90 -o psi_iovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran.F90 -o psi_dswaptran.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_hsort_impl.f90 -o psb_c_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_base_prec_mod.f90 -o psb_z_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_restr.f90 -o psi_lovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hll_mat_mod.f90 -o psb_d_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hll_mat_mod.f90 -o psb_s_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_isort_impl.f90 -o psb_c_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspspmm.F90 -o psb_dspspmm.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_msort_impl.f90 -o psb_c_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_qsort_impl.f90 -o psb_c_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hll_mat_mod.f90 -o psb_c_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspspmm.F90 -o psb_cspspmm.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hll_mat_mod.f90 -o psb_z_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dia_mat_mod.f90 -o psb_d_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_hsort_impl.f90 -o psb_z_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_isort_impl.f90 -o psb_z_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hdia_mat_mod.f90 -o psb_d_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dia_mat_mod.f90 -o psb_s_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_msort_impl.f90 -o psb_z_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hdia_mat_mod.f90 -o psb_s_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ilu_fact_mod.f90 -o psb_d_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_ainv_tools_mod.f90 -o psb_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dia_mat_mod.f90 -o psb_c_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csc_impl.F90 -o psb_s_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ilu_fact_mod.f90 -o psb_s_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hdia_mat_mod.f90 -o psb_c_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_qsort_impl.f90 -o psb_z_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_fact_mod.f90 -o psb_s_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dia_mat_mod.f90 -o psb_z_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata.F90 -o psi_sswapdata.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hdia_mat_mod.f90 -o psb_z_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_bnd_elem.f90 -o psi_crea_bnd_elem.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ext_mod.F90 -o psb_ext_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_index.f90 -o psi_crea_index.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_a2a_fnd_owner.F90 -o psi_a2a_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_ovr_elem.f90 -o psi_crea_ovr_elem.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmpovrl.f90 -o psi_bld_tmpovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_hsort_impl.f90 -o psb_m_hsort_impl.o -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter.F90 -o psb_dscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather.f90 -o psb_dgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_isort_impl.f90 -o psb_m_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_msort_impl.f90 -o psb_m_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmphalo.f90 -o psi_bld_tmphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_sort_dl.f90 -o psi_sort_dl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_indx_map_fnd_owner.F90 -o psi_indx_map_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_qsort_impl.f90 -o psb_m_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ilu_fact_mod.f90 -o psb_c_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save.f90 -o psi_sovrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter.F90 -o psb_zscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_desc_impl.f90 -o psi_desc_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd.f90 -o psi_sovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_hsort_impl.f90 -o psb_e_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr.f90 -o psi_dovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather.f90 -o psb_sgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_isort_impl.f90 -o psb_e_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran.F90 -o psi_sswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_fact_mod.f90 -o psb_c_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_iscatter.F90 -o psb_iscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_lscatter.F90 -o psb_lscatter.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_msort_impl.f90 -o psb_e_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invk_fact_mod.f90 -o psb_c_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum.f90 -o psb_dasum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_graph_fnd_owner.F90 -o psi_graph_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invt_fact_mod.f90 -o psb_c_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_hash_impl.f90 -o psi_hash_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter.F90 -o psb_cscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter.F90 -o psb_sscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_srtlist.f90 -o psi_srtlist.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daxpby.f90 -o psb_daxpby.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save.f90 -o psi_dovrl_save.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd.f90 -o psi_dovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrm2.f90 -o psb_dnrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr.f90 -o psi_covrl_restr.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrmi.f90 -o psb_dnrmi.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswapdata.F90 -o psi_iswapdata.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save.f90 -o psi_covrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd.f90 -o psi_covrl_upd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter_a.F90 -o psb_dscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr.f90 -o psi_zovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ilu_fact_mod.f90 -o psb_z_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter_a.F90 -o psb_zscatter_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_fact_mod.f90 -o psb_z_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mscatter_a.F90 -o psb_mscatter_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_escatter_a.F90 -o psb_escatter_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter_a.F90 -o psb_cscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_mat_impl.F90 -o psb_s_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_rb_idx_tree_impl.F90 -o psb_s_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter_a.F90 -o psb_sscatter_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspgather.F90 -o psb_dspgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csr_impl.F90 -o psb_d_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspgather.F90 -o psb_sspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspgather.F90 -o psb_zspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspgather.F90 -o psb_cspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_bld_glb_dep_list.F90 -o psi_bld_glb_dep_list.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_xtr_loc_dl.F90 -o psi_xtr_loc_dl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswaptran.F90 -o psi_iswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_coo_impl.F90 -o psb_d_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_igather.f90 -o psb_igather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ihalo.f90 -o psb_ihalo.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_biconjg_mod.F90 -o psb_c_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspnrm1.f90 -o psb_sspnrm1.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csc_impl.F90 -o psb_d_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_biconjg_mod.F90 -o psb_d_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_biconjg_mod.F90 -o psb_s_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspnrm1.f90 -o psb_dspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspnrm1.f90 -o psb_cspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspnrm1.f90 -o psb_zspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax.f90 -o psb_zamax.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_biconjg_mod.F90 -o psb_z_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum.f90 -o psb_zasum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_util_mod.f90 -o psb_util_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save.f90 -o psi_zovrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaxpby.f90 -o psb_zaxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdot.f90 -o psb_zdot.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_mat_impl.F90 -o psb_d_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_rb_idx_tree_impl.F90 -o psb_d_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csr_impl.F90 -o psb_c_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_coo_impl.F90 -o psb_c_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrm2.f90 -o psb_znrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrmi.f90 -o psb_znrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lgather.f90 -o psb_lgather.o -/bin/cp -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspspmm.F90 -o psb_zspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ssymbmm.f90 -o psb_ssymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dsymbmm.f90 -o psb_dsymbmm.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csc_impl.F90 -o psb_c_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_csymbmm.f90 -o psb_csymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lhalo.f90 -o psb_lhalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_mat_impl.F90 -o psb_c_mat_impl.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zsymbmm.f90 -o psb_zsymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lovrl.f90 -o psb_lovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata.F90 -o psi_cswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather.f90 -o psb_cgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o -/usr/bin/install -c -p -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrm2.f90 -o psb_snrm2.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd.f90 -o psi_zovrl_upd.o -make -C ext objs make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» /bin/cp -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_from_coo.f90 -o psb_s_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran.F90 -o psi_cswaptran.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_to_coo.f90 -o psb_s_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_coo.f90 -o psb_s_cp_ell_from_coo.o -make -C tools objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_icdasb.F90 -o psb_icdasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdall.f90 -o psb_cdall.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdals.f90 -o psb_cdals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snumbmm.f90 -o psb_snumbmm.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_restr_a.f90 -o psi_movrl_restr_a.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnumbmm.f90 -o psb_dnumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnumbmm.f90 -o psb_cnumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znumbmm.f90 -o psb_znumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_type.f90 -o psb_s_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c smmp.f90 -o smmp.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_type.f90 -o psb_d_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdalv.f90 -o psb_cdalv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_inloc.f90 -o psb_cd_inloc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdins.F90 -o psb_cdins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdprt.f90 -o psb_cdprt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_fmt.f90 -o psb_s_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_coo.f90 -o psb_s_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssphalo.F90 -o psb_ssphalo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_fmt.f90 -o psb_s_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_from_coo.f90 -o psb_s_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_to_coo.f90 -o psb_s_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_coo.f90 -o psb_s_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_save_a.f90 -o psi_movrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata.F90 -o psi_zswapdata.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_upd_a.f90 -o psi_movrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c lsmmp.f90 -o lsmmp.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgeprt.f90 -o psb_dgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgeprt.f90 -o psb_cgeprt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_fmt.f90 -o psb_s_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_coo.f90 -o psb_s_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_fmt.f90 -o psb_s_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_rb_idx_tree_impl.F90 -o psb_c_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csr_impl.F90 -o psb_z_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_coo_impl.F90 -o psb_z_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdren.f90 -o psb_cdren.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_aclsum.f90 -o psb_s_dia_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo.f90 -o psb_chalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl.f90 -o psb_covrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather.f90 -o psb_zgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo.f90 -o psb_zhalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_restr_a.f90 -o psi_eovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl.f90 -o psb_zovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran.F90 -o psi_zswaptran.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_save_a.f90 -o psi_eovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_upd_a.f90 -o psi_eovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr_a.f90 -o psi_sovrl_restr_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_allocate_mnnz.f90 -o psb_s_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_arwsum.f90 -o psb_s_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_colsum.f90 -o psb_s_dia_colsum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save_a.f90 -o psi_sovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd_a.f90 -o psi_sovrl_upd_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetptn.f90 -o psb_s_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetrow.f90 -o psb_s_dia_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdrep.f90 -o psb_cdrep.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather_a.f90 -o psb_dgather_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr_a.f90 -o psi_dovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_get_overlap.f90 -o psb_get_overlap.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csc_impl.F90 -o psb_z_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_mat_impl.F90 -o psb_z_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_rb_idx_tree_impl.F90 -o psb_z_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo_a.f90 -o psb_dhalo_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata_a.F90 -o psi_dswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsphalo.F90 -o psb_dsphalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save_a.f90 -o psi_dovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd_a.f90 -o psi_dovrl_upd_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmm.f90 -o psb_s_dia_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_type.f90 -o psb_c_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_type.f90 -o psb_z_prec_type.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmv.f90 -o psb_s_dia_csmv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_lstext.f90 -o psb_cd_lstext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spdot_srtd.f90 -o psb_spdot_srtd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl_a.f90 -o psb_dovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather_a.f90 -o psb_sgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrmi.f90 -o psb_snrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_fact_mod.f90 -o psb_d_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr_a.f90 -o psi_covrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invk_fact_mod.f90 -o psb_d_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save_a.f90 -o psi_covrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_remap.F90 -o psb_cd_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invt_fact_mod.f90 -o psb_d_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd_a.f90 -o psi_covrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr_a.f90 -o psi_zovrl_restr_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_get_diag.f90 -o psb_s_dia_get_diag.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invk_fact_mod.f90 -o psb_s_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_maxval.f90 -o psb_s_dia_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspmm.f90 -o psb_sspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdcpy.F90 -o psb_cdcpy.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_reinit.f90 -o psb_cd_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_switch_ovl_indxmap.f90 -o psb_cd_switch_ovl_indxmap.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_mold.f90 -o psb_s_dia_mold.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspsm.f90 -o psb_sspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax.f90 -o psb_camax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum.f90 -o psb_casum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caxpby.f90 -o psb_caxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdot.f90 -o psb_cdot.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_print.f90 -o psb_s_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reallocate_nz.f90 -o psb_s_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrm2.f90 -o psb_cnrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invt_fact_mod.f90 -o psb_s_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invk_fact_mod.f90 -o psb_z_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save_a.f90 -o psi_zovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd_a.f90 -o psi_zovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_renum_block.F90 -o psb_cd_renum_block.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo_a.f90 -o psb_shalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl_a.f90 -o psb_sovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invt_fact_mod.f90 -o psb_z_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspalloc.f90 -o psb_dspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspasb.f90 -o psb_dspasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remap.F90 -o psb_d_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspfree.f90 -o psb_dspfree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reinit.f90 -o psb_s_dia_reinit.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csphalo.F90 -o psb_csphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_aspxpby.f90 -o psb_aspxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spge_dot.f90 -o psb_spge_dot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dsprn.f90 -o psb_dsprn.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_biconjg_mod.F90 -o psb_biconjg_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_rowsum.f90 -o psb_s_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scal.f90 -o psb_s_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scals.f90 -o psb_s_dia_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saplusat.f90 -o psb_saplusat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_aclsum.f90 -o psb_s_ell_aclsum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daplusat.f90 -o psb_daplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mgather_a.f90 -o psb_mgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mhalo_a.f90 -o psb_mhalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_movrl_a.f90 -o psb_movrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caplusat.f90 -o psb_caplusat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_allocate_mnnz.f90 -o psb_s_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspalloc.f90 -o psb_sspalloc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_arwsum.f90 -o psb_s_ell_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_egather_a.f90 -o psb_egather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ehalo_a.f90 -o psb_ehalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrmi.f90 -o psb_cnrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspmm.f90 -o psb_cspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_colsum.f90 -o psb_s_ell_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspasb.f90 -o psb_sspasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remap.F90 -o psb_s_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspsm.f90 -o psb_cspsm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetblk.f90 -o psb_s_ell_csgetblk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_eovrl_a.f90 -o psb_eovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather_a.f90 -o psb_cgather_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetptn.f90 -o psb_s_ell_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaplusat.f90 -o psb_zaplusat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetrow.f90 -o psb_s_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmm.f90 -o psb_s_ell_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cmlt_vect.f90 -o psb_cmlt_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo_a.f90 -o psb_chalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dmlt_vect.f90 -o psb_dmlt_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmv.f90 -o psb_s_ell_csmv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zmlt_vect.f90 -o psb_zmlt_vect.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswaptran_a.F90 -o psi_mswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_smlt_vect.f90 -o psb_smlt_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdiv_vect.f90 -o psb_cdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddiv_vect.f90 -o psb_ddiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdiv_vect.f90 -o psb_zdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdiv_vect.f90 -o psb_sdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspfree.f90 -o psb_sspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspins.F90 -o psb_sspins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ssprn.f90 -o psb_ssprn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnm1.f90 -o psb_s_ell_csnm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl_a.f90 -o psb_covrl_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnmi.f90 -o psb_s_ell_csnmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather_a.f90 -o psb_zgather_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csput.f90 -o psb_s_ell_csput.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_glob_to_loc.f90 -o psb_glob_to_loc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_loc_to_glob.f90 -o psb_loc_to_glob.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iallc.f90 -o psb_iallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cinv_vect.f90 -o psb_cinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dinv_vect.f90 -o psb_dinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zinv_vect.f90 -o psb_zinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo_a.f90 -o psb_zhalo_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssm.f90 -o psb_s_ell_cssm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsphalo.F90 -o psb_zsphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl_a.f90 -o psb_zovrl_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssv.f90 -o psb_s_ell_cssv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iasb.f90 -o psb_iasb.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_get_diag.f90 -o psb_s_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_maxval.f90 -o psb_s_ell_maxval.o -make[4]: «psi_mswaptran_a.o» è aggiornato. -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_mold.f90 -o psb_s_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_print.f90 -o psb_s_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reallocate_nz.f90 -o psb_s_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sinv_vect.f90 -o psb_sinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax_s.f90 -o psb_samax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax_s.f90 -o psb_damax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax_s.f90 -o psb_camax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ifree.f90 -o psb_ifree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reinit.f90 -o psb_s_ell_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_type.f90 -o psb_prec_type.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_rowsum.f90 -o psb_s_ell_rowsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax_s.f90 -o psb_zamax_s.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata_a.F90 -o psi_cswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran_a.F90 -o psi_cswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata_a.F90 -o psi_zswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran_a.F90 -o psi_zswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iins.f90 -o psb_iins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lallc.f90 -o psb_lallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lasb.f90 -o psb_lasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dcmp_vect.f90 -o psb_dcmp_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_scmp_vect.f90 -o psb_scmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scal.f90 -o psb_s_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scals.f90 -o psb_s_ell_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ccmp_vect.f90 -o psb_ccmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_trim.f90 -o psb_s_ell_trim.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zcmp_vect.f90 -o psb_zcmp_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum_s.f90 -o psb_sasum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lfree.f90 -o psb_lfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum_s.f90 -o psb_dasum_s.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_allocate_mnnz.f90 -o psb_s_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_csmv.f90 -o psb_s_hdia_csmv.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_mod.f90 -o psb_s_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum_s.f90 -o psb_casum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cabs_vect.f90 -o psb_cabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum_s.f90 -o psb_zasum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_mod.f90 -o psb_d_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dabs_vect.f90 -o psb_dabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sabs_vect.f90 -o psb_sabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_mold.f90 -o psb_s_hdia_mold.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_mod.f90 -o psb_c_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zabs_vect.f90 -o psb_zabs_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_print.f90 -o psb_s_hdia_print.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cgetmatinfo.F90 -o psb_cgetmatinfo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_aclsum.f90 -o psb_s_hll_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_mod.f90 -o psb_z_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dgetmatinfo.F90 -o psb_dgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree.f90 -o psb_sfree.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sgetmatinfo.F90 -o psb_sgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins.f90 -o psb_sins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc.f90 -o psb_dallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb.f90 -o psb_dasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zgetmatinfo.F90 -o psb_zgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree.f90 -o psb_dfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins.f90 -o psb_dins.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_mod.f90 -o psb_prec_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_allocate_mnnz.f90 -o psb_s_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_arwsum.f90 -o psb_s_hll_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc.f90 -o psb_callc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_colsum.f90 -o psb_s_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetblk.f90 -o psb_s_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetptn.f90 -o psb_s_hll_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb.f90 -o psb_casb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetrow.f90 -o psb_s_hll_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree.f90 -o psb_cfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins.f90 -o psb_cins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcdbldext.F90 -o psb_dcdbldext.o -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmm.f90 -o psb_s_hll_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_diagprec.f90 -o psb_d_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_nullprec.f90 -o psb_d_nullprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmv.f90 -o psb_s_hll_csmv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc.f90 -o psb_zallc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnm1.f90 -o psb_s_hll_csnm1.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_bjacprec.f90 -o psb_d_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb.f90 -o psb_zasb.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_diagprec.f90 -o psb_s_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_nullprec.f90 -o psb_s_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree.f90 -o psb_zfree.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnmi.f90 -o psb_s_hll_csnmi.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_bjacprec.f90 -o psb_s_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins.f90 -o psb_zins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csput.f90 -o psb_s_hll_csput.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_diagprec.f90 -o psb_c_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_nullprec.f90 -o psb_c_nullprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssm.f90 -o psb_s_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssv.f90 -o psb_s_hll_cssv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mallc_a.f90 -o psb_mallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_get_diag.f90 -o psb_s_hll_get_diag.o mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_bjacprec.f90 -o psb_c_bjacprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_maxval.f90 -o psb_s_hll_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_diagprec.f90 -o psb_z_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_nullprec.f90 -o psb_z_nullprec.o mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_bjacprec.f90 -o psb_z_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_masb_a.f90 -o psb_masb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mfree_a.f90 -o psb_mfree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mins_a.f90 -o psb_mins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcdbldext.F90 -o psb_zcdbldext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eallc_a.f90 -o psb_eallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_easb_a.f90 -o psb_easb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_mold.f90 -o psb_s_hll_mold.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_efree_a.f90 -o psb_efree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_print.f90 -o psb_s_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reallocate_nz.f90 -o psb_s_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reinit.f90 -o psb_s_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_rowsum.f90 -o psb_s_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scal.f90 -o psb_s_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scals.f90 -o psb_s_hll_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eins_a.f90 -o psb_eins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc_a.f90 -o psb_sallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb_a.f90 -o psb_sasb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_dia_from_coo.f90 -o psb_s_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree_a.f90 -o psb_sfree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins_a.f90 -o psb_sins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc_a.f90 -o psb_dallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb_a.f90 -o psb_dasb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_coo.f90 -o psb_s_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree_a.f90 -o psb_dfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_fmt.f90 -o psb_s_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_coo.f90 -o psb_s_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_fmt.f90 -o psb_s_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_from_coo.f90 -o psb_s_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_to_coo.f90 -o psb_s_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins_a.f90 -o psb_dins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_coo.f90 -o psb_s_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc_a.f90 -o psb_callc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scdbldext.F90 -o psb_scdbldext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb_a.f90 -o psb_casb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_fmt.f90 -o psb_s_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_coo.f90 -o psb_s_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree_a.f90 -o psb_cfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_fmt.f90 -o psb_s_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_from_coo.f90 -o psb_c_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins_a.f90 -o psb_cins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc_a.f90 -o psb_zallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb_a.f90 -o psb_zasb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree_a.f90 -o psb_zfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_to_coo.f90 -o psb_c_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_coo.f90 -o psb_c_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins_a.f90 -o psb_zins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_fmt.f90 -o psb_c_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_coo.f90 -o psb_c_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_fmt.f90 -o psb_c_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_from_coo.f90 -o psb_c_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_to_coo.f90 -o psb_c_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_coo.f90 -o psb_c_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_fmt.f90 -o psb_c_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspalloc.f90 -o psb_zspalloc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_coo.f90 -o psb_c_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspasb.f90 -o psb_zspasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remap.F90 -o psb_z_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspfree.f90 -o psb_zspfree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_fmt.f90 -o psb_c_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspins.F90 -o psb_zspins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_aclsum.f90 -o psb_c_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_allocate_mnnz.f90 -o psb_c_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_arwsum.f90 -o psb_c_dia_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zsprn.f90 -o psb_zsprn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_colsum.f90 -o psb_c_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetptn.f90 -o psb_c_dia_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspalloc.f90 -o psb_cspalloc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetrow.f90 -o psb_c_dia_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspasb.f90 -o psb_cspasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmm.f90 -o psb_c_dia_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccdbldext.F90 -o psb_ccdbldext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remap.F90 -o psb_c_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspfree.f90 -o psb_cspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspins.F90 -o psb_cspins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_csprn.f90 -o psb_csprn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmv.f90 -o psb_c_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_get_diag.f90 -o psb_c_dia_get_diag.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_set_bld.f90 -o psb_cd_set_bld.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_map.f90 -o psb_s_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_maxval.f90 -o psb_c_dia_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_map.f90 -o psb_d_map.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_map.f90 -o psb_c_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_mold.f90 -o psb_c_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_print.f90 -o psb_c_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reallocate_nz.f90 -o psb_c_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reinit.f90 -o psb_c_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_rowsum.f90 -o psb_c_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scal.f90 -o psb_c_dia_scal.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_map.f90 -o psb_z_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scals.f90 -o psb_c_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_aclsum.f90 -o psb_c_ell_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_par_csr_spspmm.f90 -o psb_s_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_par_csr_spspmm.f90 -o psb_d_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_allocate_mnnz.f90 -o psb_c_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_par_csr_spspmm.f90 -o psb_c_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_arwsum.f90 -o psb_c_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_colsum.f90 -o psb_c_ell_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_par_csr_spspmm.f90 -o psb_z_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_glob_transpose.F90 -o psb_s_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetblk.f90 -o psb_c_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetptn.f90 -o psb_c_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetrow.f90 -o psb_c_ell_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_glob_transpose.F90 -o psb_d_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmm.f90 -o psb_c_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmv.f90 -o psb_c_ell_csmv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnm1.f90 -o psb_c_ell_csnm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_glob_transpose.F90 -o psb_c_glob_transpose.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_glob_transpose.F90 -o psb_z_glob_transpose.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cgetelem.f90 -o psb_cgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnmi.f90 -o psb_c_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csput.f90 -o psb_c_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssm.f90 -o psb_c_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssv.f90 -o psb_c_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_get_diag.f90 -o psb_c_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_maxval.f90 -o psb_c_ell_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dgetelem.f90 -o psb_dgetelem.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sgetelem.f90 -o psb_sgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_mold.f90 -o psb_c_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_print.f90 -o psb_c_ell_print.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reallocate_nz.f90 -o psb_c_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reinit.f90 -o psb_c_ell_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zgetelem.f90 -o psb_zgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_rowsum.f90 -o psb_c_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scal.f90 -o psb_c_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scals.f90 -o psb_c_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_trim.f90 -o psb_c_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_allocate_mnnz.f90 -o psb_c_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_csmv.f90 -o psb_c_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_mold.f90 -o psb_c_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_print.f90 -o psb_c_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_aclsum.f90 -o psb_c_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_allocate_mnnz.f90 -o psb_c_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_arwsum.f90 -o psb_c_hll_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_colsum.f90 -o psb_c_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetblk.f90 -o psb_c_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetptn.f90 -o psb_c_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetrow.f90 -o psb_c_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmm.f90 -o psb_c_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmv.f90 -o psb_c_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnm1.f90 -o psb_c_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnmi.f90 -o psb_c_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csput.f90 -o psb_c_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssm.f90 -o psb_c_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssv.f90 -o psb_c_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_get_diag.f90 -o psb_c_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_maxval.f90 -o psb_c_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_mold.f90 -o psb_c_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_print.f90 -o psb_c_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reallocate_nz.f90 -o psb_c_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reinit.f90 -o psb_c_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_rowsum.f90 -o psb_c_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scal.f90 -o psb_c_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scals.f90 -o psb_c_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_dia_from_coo.f90 -o psb_c_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_mat.F90 -o psb_z_remote_mat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_coo.f90 -o psb_c_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_fmt.f90 -o psb_c_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_coo.f90 -o psb_c_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_fmt.f90 -o psb_c_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_from_coo.f90 -o psb_c_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_to_coo.f90 -o psb_c_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_coo.f90 -o psb_c_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_fmt.f90 -o psb_c_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_coo.f90 -o psb_c_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_fmt.f90 -o psb_c_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_from_coo.f90 -o psb_d_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_to_coo.f90 -o psb_d_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_coo.f90 -o psb_d_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_fmt.f90 -o psb_d_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_coo.f90 -o psb_d_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_fmt.f90 -o psb_d_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_vect.F90 -o psb_s_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_from_coo.f90 -o psb_d_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_to_coo.f90 -o psb_d_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_coo.f90 -o psb_d_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_fmt.f90 -o psb_d_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_coo.f90 -o psb_d_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_fmt.f90 -o psb_d_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_aclsum.f90 -o psb_d_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_allocate_mnnz.f90 -o psb_d_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_arwsum.f90 -o psb_d_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_colsum.f90 -o psb_d_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetptn.f90 -o psb_d_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetrow.f90 -o psb_d_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmm.f90 -o psb_d_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmv.f90 -o psb_d_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_get_diag.f90 -o psb_d_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_maxval.f90 -o psb_d_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_mold.f90 -o psb_d_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_print.f90 -o psb_d_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reallocate_nz.f90 -o psb_d_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reinit.f90 -o psb_d_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_rowsum.f90 -o psb_d_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scal.f90 -o psb_d_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scals.f90 -o psb_d_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_aclsum.f90 -o psb_d_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_allocate_mnnz.f90 -o psb_d_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_arwsum.f90 -o psb_d_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_colsum.f90 -o psb_d_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetblk.f90 -o psb_d_ell_csgetblk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_vect.F90 -o psb_d_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetptn.f90 -o psb_d_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetrow.f90 -o psb_d_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmm.f90 -o psb_d_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmv.f90 -o psb_d_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnm1.f90 -o psb_d_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnmi.f90 -o psb_d_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csput.f90 -o psb_d_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssm.f90 -o psb_d_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssv.f90 -o psb_d_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_get_diag.f90 -o psb_d_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_maxval.f90 -o psb_d_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_mold.f90 -o psb_d_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_print.f90 -o psb_d_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reallocate_nz.f90 -o psb_d_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reinit.f90 -o psb_d_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_rowsum.f90 -o psb_d_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scal.f90 -o psb_d_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scals.f90 -o psb_d_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_trim.f90 -o psb_d_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_allocate_mnnz.f90 -o psb_d_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_csmv.f90 -o psb_d_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_mold.f90 -o psb_d_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_print.f90 -o psb_d_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_aclsum.f90 -o psb_d_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_allocate_mnnz.f90 -o psb_d_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_arwsum.f90 -o psb_d_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_colsum.f90 -o psb_d_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetblk.f90 -o psb_d_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetptn.f90 -o psb_d_hll_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_vect.F90 -o psb_c_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetrow.f90 -o psb_d_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmm.f90 -o psb_d_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmv.f90 -o psb_d_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnm1.f90 -o psb_d_hll_csnm1.o -/usr/bin/install -c -p -p *.mod ../modules -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnmi.f90 -o psb_d_hll_csnmi.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csput.f90 -o psb_d_hll_csput.o -make -C linsolve mods -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_base_linsolve_conv_mod.f90 -o psb_base_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_linsolve_mod.f90 -o psb_linsolve_mod.o -make -C prec objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -/usr/bin/install -c -p -p *.mod ../modules -make -C util objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -/usr/bin/install -c -p -p *.mod ../modules -mpicc -g -O3 -I. -I../include -c psb_amd_order.c -o psb_amd_order.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_hbio_impl.f90 -o psb_s_hbio_impl.o -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_prec_type_impl.f90 -o psb_s_prec_type_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_prec_type_impl.f90 -o psb_d_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_hbio_impl.f90 -o psb_d_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_hbio_impl.f90 -o psb_c_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_hbio_impl.f90 -o psb_z_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mmio_impl.f90 -o psb_s_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mmio_impl.f90 -o psb_d_mmio_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_prec_type_impl.f90 -o psb_c_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mmio_impl.f90 -o psb_c_mmio_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_prec_type_impl.f90 -o psb_z_prec_type_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_diagprec_impl.f90 -o psb_d_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_vect.F90 -o psb_z_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mmio_impl.f90 -o psb_z_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_i_mmio_impl.F90 -o psb_i_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_impl.f90 -o psb_s_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_impl.f90 -o psb_d_mat_dist_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_bjacprec_impl.f90 -o psb_d_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssm.f90 -o psb_d_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssv.f90 -o psb_d_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_get_diag.f90 -o psb_d_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_nullprec_impl.f90 -o psb_d_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilu0_fact.f90 -o psb_d_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_iluk_fact.f90 -o psb_d_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilut_fact.f90 -o psb_d_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_maxval.f90 -o psb_d_hll_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_impl.f90 -o psb_c_mat_dist_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_mold.f90 -o psb_d_hll_mold.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_e_remote_vect.F90 -o psb_e_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecbld.f90 -o psb_dprecbld.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_impl.f90 -o psb_z_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_renum_impl.F90 -o psb_s_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_linsolve_conv_mod.f90 -o psb_s_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_renum_impl.F90 -o psb_d_renum_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecinit.f90 -o psb_dprecinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_m_remote_vect.F90 -o psb_m_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_print.f90 -o psb_d_hll_print.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_linsolve_conv_mod.f90 -o psb_c_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_diagprec_impl.f90 -o psb_s_diagprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_bjacprec_impl.f90 -o psb_s_bjacprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_renum_impl.F90 -o psb_c_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_linsolve_conv_mod.f90 -o psb_d_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_renum_impl.F90 -o psb_z_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_build_mtpart.F90 -o psi_build_mtpart.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reallocate_nz.f90 -o psb_d_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_linsolve_conv_mod.f90 -o psb_z_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_nullprec_impl.f90 -o psb_s_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilu0_fact.f90 -o psb_s_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_iluk_fact.f90 -o psb_s_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reinit.f90 -o psb_d_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_rowsum.f90 -o psb_d_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilut_fact.f90 -o psb_s_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecbld.f90 -o psb_sprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecinit.f90 -o psb_sprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scal.f90 -o psb_d_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_diagprec_impl.f90 -o psb_c_diagprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scals.f90 -o psb_d_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_dia_from_coo.f90 -o psb_d_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_bjacprec_impl.f90 -o psb_c_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_nullprec_impl.f90 -o psb_c_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilu0_fact.f90 -o psb_c_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_coo.f90 -o psb_d_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_fmt.f90 -o psb_d_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_iluk_fact.f90 -o psb_c_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_coo.f90 -o psb_d_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilut_fact.f90 -o psb_c_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecbld.f90 -o psb_cprecbld.o -/usr/bin/install -c -p -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecinit.f90 -o psb_cprecinit.o -make -C cbind objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_objhandle_mod.F90 -o psb_objhandle_mod.o -make -C linsolve objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dkrylov.f90 -o psb_dkrylov.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_base.c -o psb_c_base.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sbase.c -o psb_c_sbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dbase.c -o psb_c_dbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cbase.c -o psb_c_cbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zbase.c -o psb_c_zbase.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_diagprec_impl.f90 -o psb_z_diagprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_fmt.f90 -o psb_d_mv_ell_to_fmt.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_scomm.c -o psb_c_scomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dcomm.c -o psb_c_dcomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_ccomm.c -o psb_c_ccomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zcomm.c -o psb_c_zcomm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_bjacprec_impl.f90 -o psb_z_bjacprec_impl.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_from_coo.f90 -o psb_d_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_nullprec_impl.f90 -o psb_z_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_skrylov.f90 -o psb_skrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ckrylov.f90 -o psb_ckrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilu0_fact.f90 -o psb_z_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_iluk_fact.f90 -o psb_z_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilut_fact.f90 -o psb_z_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecbld.f90 -o psb_zprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecinit.f90 -o psb_zprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sparsify.f90 -o psb_c_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sparsify.f90 -o psb_d_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_to_coo.f90 -o psb_d_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_base_tools_cbind_mod.F90 -o psb_base_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_coo.f90 -o psb_d_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sparsify.f90 -o psb_s_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_fmt.f90 -o psb_d_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zkrylov.f90 -o psb_zkrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sparsify.f90 -o psb_z_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drichardson.f90 -o psb_drichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crwclip.f90 -o psb_crwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srichardson.f90 -o psb_srichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drwclip.f90 -o psb_drwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srwclip.f90 -o psb_srwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_coo.f90 -o psb_d_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crichardson.f90 -o psb_crichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrwclip.f90 -o psb_zrwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrichardson.f90 -o psb_zrichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sp_drop.f90 -o psb_c_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sp_drop.f90 -o psb_d_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sp_drop.f90 -o psb_s_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sp_drop.f90 -o psb_z_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstab.f90 -o psb_dcgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk_noth.F90 -o psb_dsparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk.F90 -o psb_dsparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcg.F90 -o psb_dcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_fmt.f90 -o psb_d_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dfcg.F90 -o psb_dfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dgcr.f90 -o psb_dgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_mlk.F90 -o psb_dsparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_ft_llk.F90 -o psb_dsparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgs.f90 -o psb_dcgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_llk.F90 -o psb_dsparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dbicg.f90 -o psb_dbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstabl.f90 -o psb_dcgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_from_coo.f90 -o psb_z_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drgmres.f90 -o psb_drgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_to_coo.f90 -o psb_z_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk_noth.F90 -o psb_csparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_psblas_cbind_mod.f90 -o psb_s_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_psblas_cbind_mod.f90 -o psb_d_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstab.f90 -o psb_scgstab.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_psblas_cbind_mod.f90 -o psb_c_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_psblas_cbind_mod.f90 -o psb_z_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_tools_cbind_mod.F90 -o psb_s_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scg.F90 -o psb_scg.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_serial_cbind_mod.F90 -o psb_s_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sfcg.F90 -o psb_sfcg.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_tools_cbind_mod.F90 -o psb_d_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_coo.f90 -o psb_z_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_serial_cbind_mod.F90 -o psb_d_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_fmt.f90 -o psb_z_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_tools_cbind_mod.F90 -o psb_c_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_serial_cbind_mod.F90 -o psb_c_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_tools_cbind_mod.F90 -o psb_z_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk.F90 -o psb_csparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_mlk.F90 -o psb_csparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sgcr.f90 -o psb_sgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgs.f90 -o psb_scgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sbicg.f90 -o psb_sbicg.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_serial_cbind_mod.F90 -o psb_z_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_comm_cbind_mod.f90 -o psb_s_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_comm_cbind_mod.f90 -o psb_d_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_comm_cbind_mod.f90 -o psb_c_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_coo.f90 -o psb_z_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_fmt.f90 -o psb_z_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_from_coo.f90 -o psb_z_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_ft_llk.F90 -o psb_csparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_to_coo.f90 -o psb_z_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_comm_cbind_mod.f90 -o psb_z_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstabl.f90 -o psb_scgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_llk.F90 -o psb_csparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_coo.f90 -o psb_z_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_fmt.f90 -o psb_z_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_coo.f90 -o psb_z_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk_noth.F90 -o psb_zsparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srgmres.f90 -o psb_srgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk.F90 -o psb_zsparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstab.f90 -o psb_ccgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_mlk.F90 -o psb_zsparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_ft_llk.F90 -o psb_zsparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_llk.F90 -o psb_zsparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_psblas_cbind_mod.f90 -o psb_base_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_fmt.f90 -o psb_z_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk_noth.F90 -o psb_ssparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk.F90 -o psb_ssparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_aclsum.f90 -o psb_z_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_allocate_mnnz.f90 -o psb_z_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_arwsum.f90 -o psb_z_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccg.F90 -o psb_ccg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_mlk.F90 -o psb_ssparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_ft_llk.F90 -o psb_ssparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cfcg.F90 -o psb_cfcg.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cgcr.f90 -o psb_cgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_colsum.f90 -o psb_z_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetptn.f90 -o psb_z_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetrow.f90 -o psb_z_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_llk.F90 -o psb_ssparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ainv_bld.f90 -o psb_d_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmm.f90 -o psb_z_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmv.f90 -o psb_z_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgs.f90 -o psb_ccgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ainv_bld.f90 -o psb_c_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ainv_bld.f90 -o psb_s_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cbicg.f90 -o psb_cbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ainv_bld.f90 -o psb_z_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invt_fact.f90 -o psb_c_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invt_fact.f90 -o psb_d_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invt_fact.f90 -o psb_s_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invt_fact.f90 -o psb_z_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstabl.f90 -o psb_ccgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crgmres.f90 -o psb_crgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invk_fact.f90 -o psb_c_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_get_diag.f90 -o psb_z_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invk_fact.f90 -o psb_d_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_maxval.f90 -o psb_z_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_mold.f90 -o psb_z_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_print.f90 -o psb_z_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invk_fact.f90 -o psb_s_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstab.f90 -o psb_zcgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcg.F90 -o psb_zcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zfcg.F90 -o psb_zfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invk_fact.f90 -o psb_z_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zgcr.f90 -o psb_zgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgs.f90 -o psb_zcgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reallocate_nz.f90 -o psb_z_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zbicg.f90 -o psb_zbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reinit.f90 -o psb_z_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_rowsum.f90 -o psb_z_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scal.f90 -o psb_z_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scals.f90 -o psb_z_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_aclsum.f90 -o psb_z_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstabl.f90 -o psb_zcgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrgmres.f90 -o psb_zrgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_allocate_mnnz.f90 -o psb_z_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_arwsum.f90 -o psb_z_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_colsum.f90 -o psb_z_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetblk.f90 -o psb_z_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetptn.f90 -o psb_z_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetrow.f90 -o psb_z_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmm.f90 -o psb_z_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmv.f90 -o psb_z_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnm1.f90 -o psb_z_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnmi.f90 -o psb_z_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csput.f90 -o psb_z_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssm.f90 -o psb_z_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssv.f90 -o psb_z_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_get_diag.f90 -o psb_z_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_maxval.f90 -o psb_z_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_mold.f90 -o psb_z_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_print.f90 -o psb_z_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reallocate_nz.f90 -o psb_z_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reinit.f90 -o psb_z_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_rowsum.f90 -o psb_z_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scal.f90 -o psb_z_ell_scal.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scals.f90 -o psb_z_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_trim.f90 -o psb_z_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_allocate_mnnz.f90 -o psb_z_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_csmv.f90 -o psb_z_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_mold.f90 -o psb_z_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_print.f90 -o psb_z_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_aclsum.f90 -o psb_z_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_allocate_mnnz.f90 -o psb_z_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_arwsum.f90 -o psb_z_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_colsum.f90 -o psb_z_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetblk.f90 -o psb_z_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetptn.f90 -o psb_z_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetrow.f90 -o psb_z_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmm.f90 -o psb_z_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmv.f90 -o psb_z_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnm1.f90 -o psb_z_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnmi.f90 -o psb_z_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csput.f90 -o psb_z_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssm.f90 -o psb_z_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssv.f90 -o psb_z_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_get_diag.f90 -o psb_z_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_maxval.f90 -o psb_z_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_mold.f90 -o psb_z_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_print.f90 -o psb_z_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reallocate_nz.f90 -o psb_z_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reinit.f90 -o psb_z_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_rowsum.f90 -o psb_z_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scal.f90 -o psb_z_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scals.f90 -o psb_z_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_dia_from_coo.f90 -o psb_z_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_coo.f90 -o psb_z_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_fmt.f90 -o psb_z_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_coo.f90 -o psb_z_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_fmt.f90 -o psb_z_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_from_coo.f90 -o psb_z_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_to_coo.f90 -o psb_z_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_coo.f90 -o psb_z_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_fmt.f90 -o psb_z_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_coo.f90 -o psb_z_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_fmt.f90 -o psb_z_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_ell_from_coo.f90 -o psi_s_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_ell_from_coo.f90 -o psi_c_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_ell_from_coo.f90 -o psi_d_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_ell_from_coo.f90 -o psi_z_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_ell_from_coo.f90 -o psi_s_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_ell_from_coo.f90 -o psi_c_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_ell_from_coo.f90 -o psi_d_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_ell_from_coo.f90 -o psi_z_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_hll_from_coo.f90 -o psi_s_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_hll_from_coo.f90 -o psi_c_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_hll_from_coo.f90 -o psi_d_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_hll_from_coo.f90 -o psi_z_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_dia_from_coo.f90 -o psi_s_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_dia_from_coo.f90 -o psi_c_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_dia_from_coo.f90 -o psi_d_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_dia_from_coo.f90 -o psi_z_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_coo_from_dia.f90 -o psi_s_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_coo_from_dia.f90 -o psi_d_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_coo_from_dia.f90 -o psi_c_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_coo_from_dia.f90 -o psi_z_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_dia_from_coo.f90 -o psi_s_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_cbind_mod.f90 -o psb_base_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_dia_from_coo.f90 -o psi_c_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_dia_from_coo.f90 -o psi_d_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_dia_from_coo.f90 -o psi_z_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dns_mat_impl.f90 -o psb_s_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dns_mat_impl.f90 -o psb_d_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dns_mat_impl.f90 -o psb_c_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dns_mat_impl.f90 -o psb_z_dns_mat_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_sprec_cbind_mod.f90 -o psb_sprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dprec_cbind_mod.f90 -o psb_dprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cprec_cbind_mod.f90 -o psb_cprec_cbind_mod.o -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_util_cbind_mod.f90 -o psb_c_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zprec_cbind_mod.f90 -o psb_zprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_util_cbind_mod.f90 -o psb_d_util_cbind_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sprec.c -o psb_c_sprec.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_util_cbind_mod.f90 -o psb_s_util_cbind_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dprec.c -o psb_c_dprec.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_util_cbind_mod.f90 -o psb_z_util_cbind_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cprec.c -o psb_c_cprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zprec.c -o psb_c_zprec.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_prec_cbind_mod.f90 -o psb_prec_cbind_mod.o -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_linsolve_cbind_mod.f90 -o psb_base_linsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_slinsolve_cbind_mod.f90 -o psb_slinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dlinsolve_cbind_mod.f90 -o psb_dlinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_clinsolve_cbind_mod.f90 -o psb_clinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zlinsolve_cbind_mod.f90 -o psb_zlinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_util_cbind_mod.f90 -o psb_util_cbind_mod.o -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C cbind objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C base lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» /usr/bin/install -c -p -p *.mod ../../modules /usr/bin/install -c -p -p psb_config.h psb_types.h ../../include @@ -1455,141 +38,36 @@ make -C tools objs make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» make -C impl objs make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C sort objs make -C internals objs make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make -C sort objs (make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» (make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» (make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: «psb_dscatter.o» è aggiornato. -make[3]: «psb_zscatter.o» è aggiornato. -make[3]: «psb_iscatter.o» è aggiornato. -make[3]: «psb_lscatter.o» è aggiornato. -make[3]: «psb_cscatter.o» è aggiornato. -make[3]: «psb_sscatter.o» è aggiornato. -make[3]: «psi_desc_index.o» è aggiornato. -make[3]: «psb_dscatter_a.o» è aggiornato. -make[3]: «psi_fnd_owner.o» è aggiornato. -make[3]: «psb_zscatter_a.o» è aggiornato. -make[3]: «psi_a2a_fnd_owner.o» è aggiornato. -make[3]: «psb_mscatter_a.o» è aggiornato. -make[3]: «psi_graph_fnd_owner.o» è aggiornato. -make[3]: «psb_escatter_a.o» è aggiornato. -make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. -make[3]: «psb_cscatter_a.o» è aggiornato. -make[3]: «psi_symm_dep_list.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: «psb_sscatter_a.o» è aggiornato. -make[3]: «psb_dspgather.o» è aggiornato. -make[3]: «psb_sspgather.o» è aggiornato. -make[3]: «psb_zspgather.o» è aggiornato. -make[3]: «psb_cspgather.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: «psb_icdasb.o» è aggiornato. -make[3]: «psb_ssphalo.o» è aggiornato. -make[3]: «psb_dsphalo.o» è aggiornato. -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: «psb_csphalo.o» è aggiornato. -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psb_zsphalo.o» è aggiornato. -make[3]: «psb_dcdbldext.o» è aggiornato. -make[3]: «psb_zcdbldext.o» è aggiornato. -make[3]: «psb_scdbldext.o» è aggiornato. -make[3]: «psb_ccdbldext.o» è aggiornato. -make[3]: «psb_s_remote_mat.o» è aggiornato. -make[3]: «psb_d_remote_mat.o» è aggiornato. -make[3]: «psb_c_remote_mat.o» è aggiornato. -make[3]: «psb_z_remote_mat.o» è aggiornato. -make[3]: «psb_s_remote_vect.o» è aggiornato. -make[3]: «psb_d_remote_vect.o» è aggiornato. -make[3]: «psb_c_remote_vect.o» è aggiornato. -make[3]: «psb_z_remote_vect.o» è aggiornato. -make[3]: «psb_e_remote_vect.o» è aggiornato. -make[3]: «psb_m_remote_vect.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C modules lib LIBNAME=libpsb_base.a F90="" F90COPT=" " -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -ar -cDr ..//libpsb_base.a psb_const_mod.o psb_cbind_const_mod.o psb_error_mod.o psb_realloc_mod.o auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o serial/psb_serial_mod.o comm/psb_neighbor_topology_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o serial/psb_vect_mod.o auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o auxil/psb_ip_reord_mod.o auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o auxil/psb_d_msort_mod.o auxil/psb_d_qsort_mod.o auxil/psb_c_hsort_mod.o auxil/psb_c_isort_mod.o auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o auxil/psb_i_hsort_x_mod.o auxil/psb_l_hsort_x_mod.o auxil/psb_s_hsort_x_mod.o auxil/psb_d_hsort_x_mod.o auxil/psb_c_hsort_x_mod.o auxil/psb_z_hsort_x_mod.o auxil/psb_s_rb_idx_tree_mod.o auxil/psb_d_rb_idx_tree_mod.o auxil/psb_c_rb_idx_tree_mod.o auxil/psb_z_rb_idx_tree_mod.o auxil/psb_rb_idx_tree_mod.o serial/psb_base_mat_mod.o serial/psb_mat_mod.o serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_glist_map_mod.o desc/psb_hash_map_mod.o desc/psb_hashval.o desc/psb_desc_mod.o auxil/psb_sort_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o tools/psb_tools_mod.o psb_penv_mod.o penv/psi_penv_mod.o penv/psi_p2p_mod.o penv/psi_m_p2p_mod.o penv/psi_i2_p2p_mod.o penv/psi_e_p2p_mod.o penv/psi_s_p2p_mod.o penv/psi_d_p2p_mod.o penv/psi_c_p2p_mod.o penv/psi_z_p2p_mod.o penv/psi_collective_mod.o penv/psi_i2_collective_mod.o penv/psi_e_collective_mod.o penv/psi_m_collective_mod.o penv/psi_s_collective_mod.o penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_mod.o psb_error_impl.o psb_timers_mod.o comm/psb_base_linmap_mod.o comm/psb_linmap_mod.o comm/psb_s_linmap_mod.o comm/psb_d_linmap_mod.o comm/psb_c_linmap_mod.o comm/psb_z_linmap_mod.o comm/psb_comm_mod.o comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o comm/psi_s_comm_v_mod.o comm/psi_d_comm_v_mod.o comm/psi_c_comm_v_mod.o comm/psi_z_comm_v_mod.o psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o psblas/psb_psblas_mod.o psb_check_mod.o desc/psb_hash_mod.o error.o psb_base_mod.o cutil.o -ranlib ..//libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make -C sort objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make -C impl lib -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -ar -cDr ../../libpsb_base.a psb_base_mat_impl.o psb_s_base_mat_impl.o psb_d_base_mat_impl.o psb_c_base_mat_impl.o psb_z_base_mat_impl.o psb_s_csr_impl.o psb_s_coo_impl.o psb_s_csc_impl.o psb_s_mat_impl.o psb_s_rb_idx_tree_impl.o psb_d_csr_impl.o psb_d_coo_impl.o psb_d_csc_impl.o psb_d_mat_impl.o psb_d_rb_idx_tree_impl.o psb_c_csr_impl.o psb_c_coo_impl.o psb_c_csc_impl.o psb_c_mat_impl.o psb_c_rb_idx_tree_impl.o psb_z_csr_impl.o psb_z_coo_impl.o psb_z_csc_impl.o psb_z_mat_impl.o psb_z_rb_idx_tree_impl.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make -C sort lib +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -ar -cDr ../../libpsb_base.a psb_s_hsort_impl.o psb_s_isort_impl.o psb_s_msort_impl.o psb_s_qsort_impl.o psb_d_hsort_impl.o psb_d_isort_impl.o psb_d_msort_impl.o psb_d_qsort_impl.o psb_c_hsort_impl.o psb_c_isort_impl.o psb_c_msort_impl.o psb_c_qsort_impl.o psb_z_hsort_impl.o psb_z_isort_impl.o psb_z_msort_impl.o psb_z_qsort_impl.o psb_m_hsort_impl.o psb_m_isort_impl.o psb_m_msort_impl.o psb_m_qsort_impl.o psb_e_hsort_impl.o psb_e_isort_impl.o psb_e_msort_impl.o psb_e_qsort_impl.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -ar -cDr ../libpsb_base.a psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o psi_s_serial_impl.o psi_d_serial_impl.o psi_c_serial_impl.o psi_z_serial_impl.o psb_srwextd.o psb_drwextd.o psb_crwextd.o psb_zrwextd.o psb_sspspmm.o psb_dspspmm.o psb_cspspmm.o psb_zspspmm.o psb_ssymbmm.o psb_dsymbmm.o psb_csymbmm.o psb_zsymbmm.o psb_snumbmm.o psb_dnumbmm.o psb_cnumbmm.o psb_znumbmm.o smmp.o lsmmp.o psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C comm lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» make[3]: «psb_dscatter.o» è aggiornato. make[3]: «psb_zscatter.o» è aggiornato. @@ -1608,75 +86,9 @@ make[3]: «psb_sspgather.o» è aggiornato. make[3]: «psb_zspgather.o» è aggiornato. make[3]: «psb_cspgather.o» è aggiornato. make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make -C internals lib LIBNAME=libpsb_base.a -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -ar -cDr ../../libpsb_base.a psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o psi_iovrl_restr.o psi_iovrl_save.o psi_iovrl_upd.o psi_lovrl_restr.o psi_lovrl_save.o psi_lovrl_upd.o psi_sovrl_restr.o psi_sovrl_save.o psi_sovrl_upd.o psi_dovrl_restr.o psi_dovrl_save.o psi_dovrl_upd.o psi_covrl_restr.o psi_covrl_save.o psi_covrl_upd.o psi_zovrl_restr.o psi_zovrl_save.o psi_zovrl_upd.o psi_movrl_restr_a.o psi_movrl_save_a.o psi_movrl_upd_a.o psi_eovrl_restr_a.o psi_eovrl_save_a.o psi_eovrl_upd_a.o psi_sovrl_restr_a.o psi_sovrl_save_a.o psi_sovrl_upd_a.o psi_dovrl_restr_a.o psi_dovrl_save_a.o psi_dovrl_upd_a.o psi_covrl_restr_a.o psi_covrl_save_a.o psi_covrl_upd_a.o psi_zovrl_restr_a.o psi_zovrl_save_a.o psi_zovrl_upd_a.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -ar -cDr ../libpsb_base.a psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o psb_dgather.o psb_dhalo.o psb_dovrl.o psb_sgather.o psb_shalo.o psb_sovrl.o psb_igather.o psb_ihalo.o psb_iovrl.o psb_lgather.o psb_lhalo.o psb_lovrl.o psb_cgather.o psb_chalo.o psb_covrl.o psb_zgather.o psb_zhalo.o psb_zovrl.o psb_dgather_a.o psb_dhalo_a.o psb_dovrl_a.o psb_sgather_a.o psb_shalo_a.o psb_sovrl_a.o psb_mgather_a.o psb_mhalo_a.o psb_movrl_a.o psb_egather_a.o psb_ehalo_a.o psb_eovrl_a.o psb_cgather_a.o psb_chalo_a.o psb_covrl_a.o psb_zgather_a.o psb_zhalo_a.o psb_zovrl_a.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C auxil lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o make[3]: «psi_desc_index.o» è aggiornato. make[3]: «psi_fnd_owner.o» è aggiornato. make[3]: «psi_a2a_fnd_owner.o» è aggiornato. @@ -1684,21 +96,14 @@ make[3]: «psi_graph_fnd_owner.o» è aggiornato. make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. make[3]: «psi_symm_dep_list.o» è aggiornato. make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -ar -cDr ../libpsb_base.a psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o psi_crea_bnd_elem.o psi_crea_index.o psi_crea_ovr_elem.o psi_bld_tmpovrl.o psi_bld_tmphalo.o psi_sort_dl.o psi_indx_map_fnd_owner.o psi_desc_impl.o psi_hash_impl.o psi_srtlist.o psi_bld_glb_dep_list.o psi_xtr_loc_dl.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make -C psblas lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -ar -cDr ../libpsb_base.a psb_ddot.o psb_damax.o psb_dasum.o psb_daxpby.o psb_dnrm2.o psb_dnrmi.o psb_dspmm.o psb_dspsm.o psb_sspnrm1.o psb_dspnrm1.o psb_cspnrm1.o psb_zspnrm1.o psb_zamax.o psb_zasum.o psb_zaxpby.o psb_zdot.o psb_znrm2.o psb_znrmi.o psb_zspmm.o psb_zspsm.o psb_saxpby.o psb_sdot.o psb_sasum.o psb_samax.o psb_snrm2.o psb_snrmi.o psb_sspmm.o psb_sspsm.o psb_camax.o psb_casum.o psb_caxpby.o psb_cdot.o psb_cnrm2.o psb_cnrmi.o psb_cspmm.o psb_cspsm.o psb_cmlt_vect.o psb_dmlt_vect.o psb_zmlt_vect.o psb_smlt_vect.o psb_cdiv_vect.o psb_ddiv_vect.o psb_zdiv_vect.o psb_sdiv_vect.o psb_cinv_vect.o psb_dinv_vect.o psb_zinv_vect.o psb_sinv_vect.o psb_dcmp_vect.o psb_scmp_vect.o psb_ccmp_vect.o psb_zcmp_vect.o psb_cabs_vect.o psb_dabs_vect.o psb_sabs_vect.o psb_zabs_vect.o psb_cgetmatinfo.o psb_dgetmatinfo.o psb_sgetmatinfo.o psb_zgetmatinfo.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make -C tools lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» make[3]: «psb_icdasb.o» è aggiornato. +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» make[3]: «psb_ssphalo.o» è aggiornato. +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. make[3]: «psb_dsphalo.o» è aggiornato. make[3]: «psb_csphalo.o» è aggiornato. make[3]: «psb_zsphalo.o» è aggiornato. @@ -1706,127 +111,96 @@ make[3]: «psb_dcdbldext.o» è aggiornato. make[3]: «psb_zcdbldext.o» è aggiornato. make[3]: «psb_scdbldext.o» è aggiornato. make[3]: «psb_ccdbldext.o» è aggiornato. -make[3]: «psb_s_remote_mat.o» è aggiornato. -make[3]: «psb_d_remote_mat.o» è aggiornato. -make[3]: «psb_c_remote_mat.o» è aggiornato. -make[3]: «psb_z_remote_mat.o» è aggiornato. -make[3]: «psb_s_remote_vect.o» è aggiornato. -make[3]: «psb_d_remote_vect.o» è aggiornato. -make[3]: «psb_c_remote_vect.o» è aggiornato. -make[3]: «psb_z_remote_vect.o» è aggiornato. -make[3]: «psb_e_remote_vect.o» è aggiornato. -make[3]: «psb_m_remote_vect.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -ar -cDr ../libpsb_base.a psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o psb_cdall.o psb_cdals.o psb_cdalv.o psb_cd_inloc.o psb_cdins.o psb_cdprt.o psb_cdren.o psb_cdrep.o psb_get_overlap.o psb_cd_lstext.o psb_cd_remap.o psb_cdcpy.o psb_cd_reinit.o psb_cd_switch_ovl_indxmap.o psb_cd_renum_block.o psb_dspalloc.o psb_dspasb.o psb_d_remap.o psb_dspfree.o psb_dspins.o psb_dsprn.o psb_sspalloc.o psb_sspasb.o psb_s_remap.o psb_sspfree.o psb_sspins.o psb_ssprn.o psb_glob_to_loc.o psb_loc_to_glob.o psb_iallc.o psb_iasb.o psb_ifree.o psb_iins.o psb_lallc.o psb_lasb.o psb_lfree.o psb_lins.o psb_sallc.o psb_sasb.o psb_sfree.o psb_sins.o psb_dallc.o psb_dasb.o psb_dfree.o psb_dins.o psb_callc.o psb_casb.o psb_cfree.o psb_cins.o psb_zallc.o psb_zasb.o psb_zfree.o psb_zins.o psb_mallc_a.o psb_masb_a.o psb_mfree_a.o psb_mins_a.o psb_eallc_a.o psb_easb_a.o psb_efree_a.o psb_eins_a.o psb_sallc_a.o psb_sasb_a.o psb_sfree_a.o psb_sins_a.o psb_dallc_a.o psb_dasb_a.o psb_dfree_a.o psb_dins_a.o psb_callc_a.o psb_casb_a.o psb_cfree_a.o psb_cins_a.o psb_zallc_a.o psb_zasb_a.o psb_zfree_a.o psb_zins_a.o psb_zspalloc.o psb_zspasb.o psb_z_remap.o psb_zspfree.o psb_zspins.o psb_zsprn.o psb_cspalloc.o psb_cspasb.o psb_c_remap.o psb_cspfree.o psb_cspins.o psb_csprn.o psb_cd_set_bld.o psb_s_map.o psb_d_map.o psb_c_map.o psb_z_map.o psb_s_par_csr_spspmm.o psb_d_par_csr_spspmm.o psb_c_par_csr_spspmm.o psb_z_par_csr_spspmm.o psb_s_glob_transpose.o psb_d_glob_transpose.o psb_c_glob_transpose.o psb_z_glob_transpose.o psb_cgetelem.o psb_dgetelem.o psb_sgetelem.o psb_zgetelem.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -/bin/cp -p ./libpsb_base.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C prec lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make -C impl lib -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -ar -cDr ../libpsb_prec.a psb_s_prec_type_impl.o psb_d_prec_type_impl.o psb_c_prec_type_impl.o psb_z_prec_type_impl.o psb_d_diagprec_impl.o psb_d_bjacprec_impl.o psb_d_nullprec_impl.o psb_d_ilu0_fact.o psb_d_iluk_fact.o psb_d_ilut_fact.o psb_dprecbld.o psb_dprecinit.o psb_s_diagprec_impl.o psb_s_bjacprec_impl.o psb_s_nullprec_impl.o psb_s_ilu0_fact.o psb_s_iluk_fact.o psb_s_ilut_fact.o psb_sprecbld.o psb_sprecinit.o psb_c_diagprec_impl.o psb_c_bjacprec_impl.o psb_c_nullprec_impl.o psb_c_ilu0_fact.o psb_c_iluk_fact.o psb_c_ilut_fact.o psb_cprecbld.o psb_cprecinit.o psb_z_diagprec_impl.o psb_z_bjacprec_impl.o psb_z_nullprec_impl.o psb_z_ilu0_fact.o psb_z_iluk_fact.o psb_z_ilut_fact.o psb_zprecbld.o psb_zprecinit.o psb_c_sparsify.o psb_d_sparsify.o psb_s_sparsify.o psb_z_sparsify.o psb_crwclip.o psb_drwclip.o psb_srwclip.o psb_zrwclip.o psb_c_sp_drop.o psb_d_sp_drop.o psb_s_sp_drop.o psb_z_sp_drop.o psb_dsparse_biconjg_llk_noth.o psb_dsparse_biconjg_llk.o psb_dsparse_biconjg_mlk.o psb_dsparse_biconjg_s_ft_llk.o psb_dsparse_biconjg_s_llk.o psb_csparse_biconjg_llk_noth.o psb_csparse_biconjg_llk.o psb_csparse_biconjg_mlk.o psb_csparse_biconjg_s_ft_llk.o psb_csparse_biconjg_s_llk.o psb_zsparse_biconjg_llk_noth.o psb_zsparse_biconjg_llk.o psb_zsparse_biconjg_mlk.o psb_zsparse_biconjg_s_ft_llk.o psb_zsparse_biconjg_s_llk.o psb_ssparse_biconjg_llk_noth.o psb_ssparse_biconjg_llk.o psb_ssparse_biconjg_mlk.o psb_ssparse_biconjg_s_ft_llk.o psb_ssparse_biconjg_s_llk.o psb_d_ainv_bld.o psb_c_ainv_bld.o psb_s_ainv_bld.o psb_z_ainv_bld.o psb_c_invt_fact.o psb_d_invt_fact.o psb_s_invt_fact.o psb_z_invt_fact.o psb_c_invk_fact.o psb_d_invk_fact.o psb_s_invk_fact.o psb_z_invk_fact.o -ranlib ../libpsb_prec.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -ar -cDr ./libpsb_prec.a psb_prec_const_mod.o psb_s_prec_type.o psb_d_prec_type.o psb_c_prec_type.o psb_z_prec_type.o psb_s_base_prec_mod.o psb_d_base_prec_mod.o psb_c_base_prec_mod.o psb_z_base_prec_mod.o psb_prec_type.o psb_prec_mod.o psb_s_prec_mod.o psb_d_prec_mod.o psb_c_prec_mod.o psb_z_prec_mod.o psb_d_diagprec.o psb_d_nullprec.o psb_d_bjacprec.o psb_s_ilu_fact_mod.o psb_s_diagprec.o psb_s_nullprec.o psb_s_bjacprec.o psb_d_ilu_fact_mod.o psb_c_diagprec.o psb_c_nullprec.o psb_c_bjacprec.o psb_c_ilu_fact_mod.o psb_z_diagprec.o psb_z_nullprec.o psb_z_bjacprec.o psb_z_ilu_fact_mod.o psb_c_ainv_fact_mod.o psb_d_ainv_fact_mod.o psb_s_ainv_fact_mod.o psb_z_ainv_fact_mod.o psb_c_ainv_tools_mod.o psb_d_ainv_tools_mod.o psb_s_ainv_tools_mod.o psb_z_ainv_tools_mod.o psb_ainv_tools_mod.o psb_biconjg_mod.o psb_c_biconjg_mod.o psb_d_biconjg_mod.o psb_s_biconjg_mod.o psb_z_biconjg_mod.o psb_c_invt_fact_mod.o psb_d_invt_fact_mod.o psb_s_invt_fact_mod.o psb_z_invt_fact_mod.o psb_c_invk_fact_mod.o psb_d_invk_fact_mod.o psb_s_invk_fact_mod.o psb_z_invk_fact_mod.o -ranlib ./libpsb_prec.a -/bin/cp -p ./libpsb_prec.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -make -C linsolve lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make -C impl lib -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -ar -cDr ../libpsb_linsolve.a psb_dkrylov.o psb_skrylov.o psb_ckrylov.o psb_zkrylov.o psb_drichardson.o psb_srichardson.o psb_crichardson.o psb_zrichardson.o psb_dcgstab.o psb_dcg.o psb_dfcg.o psb_dgcr.o psb_dcgs.o psb_dbicg.o psb_dcgstabl.o psb_drgmres.o psb_scgstab.o psb_scg.o psb_sfcg.o psb_sgcr.o psb_scgs.o psb_sbicg.o psb_scgstabl.o psb_srgmres.o psb_ccgstab.o psb_ccg.o psb_cfcg.o psb_cgcr.o psb_ccgs.o psb_cbicg.o psb_ccgstabl.o psb_crgmres.o psb_zcgstab.o psb_zcg.o psb_zfcg.o psb_zgcr.o psb_zcgs.o psb_zbicg.o psb_zcgstabl.o psb_zrgmres.o -ranlib ../libpsb_linsolve.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -ar -cDr ./libpsb_linsolve.a psb_base_linsolve_conv_mod.o psb_s_linsolve_conv_mod.o psb_c_linsolve_conv_mod.o psb_d_linsolve_conv_mod.o psb_z_linsolve_conv_mod.o psb_linsolve_mod.o -ranlib ./libpsb_linsolve.a -/bin/cp -p ./libpsb_linsolve.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -make -C util lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -/usr/bin/install -c -p -p *.mod ../modules -ar -cDr ./libpsb_util.a psb_metis_int.o psb_amd_order.o psb_util_mod.o psb_blockpart_mod.o psb_metispart_mod.o psb_partidx_mod.o psb_hbio_mod.o psb_mmio_mod.o psb_mat_dist_mod.o psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o psb_renum_mod.o psb_gps_mod.o psb_s_renum_mod.o psb_d_renum_mod.o psb_c_renum_mod.o psb_z_renum_mod.o psb_s_hbio_impl.o psb_d_hbio_impl.o psb_c_hbio_impl.o psb_z_hbio_impl.o psb_s_mmio_impl.o psb_d_mmio_impl.o psb_c_mmio_impl.o psb_z_mmio_impl.o psb_i_mmio_impl.o psb_s_mat_dist_impl.o psb_d_mat_dist_impl.o psb_c_mat_dist_impl.o psb_z_mat_dist_impl.o psb_s_renum_impl.o psb_d_renum_impl.o psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o -ranlib ./libpsb_util.a -/bin/cp -p ./libpsb_util.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -make -C cbind lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -cd base && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -ar -cDr ../libpsb_cbind.a psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o psb_c_scomm.o psb_c_dcomm.o psb_c_ccomm.o psb_c_zcomm.o -ranlib ../libpsb_cbind.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -ar -cDr ../libpsb_cbind.a psb_prec_cbind_mod.o psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o psb_c_sprec.o psb_c_dprec.o psb_c_cprec.o psb_c_zprec.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -ar -cDr ../libpsb_cbind.a psb_base_linsolve_cbind_mod.o psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -cd util && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -ar -cDr ../libpsb_cbind.a psb_util_cbind_mod.o psb_c_util_cbind_mod.o psb_d_util_cbind_mod.o psb_s_util_cbind_mod.o psb_z_util_cbind_mod.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p ./libpsb_cbind.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C ext lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make -C impl lib LIBNAME=libpsb_ext.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -ar -cDr ../libpsb_ext.a psb_s_cp_dia_from_coo.o psb_s_cp_dia_to_coo.o psb_s_cp_ell_from_coo.o psb_s_cp_ell_from_fmt.o psb_s_cp_ell_to_coo.o psb_s_cp_ell_to_fmt.o psb_s_cp_hdia_from_coo.o psb_s_cp_hdia_to_coo.o psb_s_cp_hll_from_coo.o psb_s_cp_hll_from_fmt.o psb_s_cp_hll_to_coo.o psb_s_cp_hll_to_fmt.o psb_s_dia_aclsum.o psb_s_dia_allocate_mnnz.o psb_s_dia_arwsum.o psb_s_dia_colsum.o psb_s_dia_csgetptn.o psb_s_dia_csgetrow.o psb_s_dia_csmm.o psb_s_dia_csmv.o psb_s_dia_get_diag.o psb_s_dia_maxval.o psb_s_dia_mold.o psb_s_dia_print.o psb_s_dia_reallocate_nz.o psb_s_dia_reinit.o psb_s_dia_rowsum.o psb_s_dia_scal.o psb_s_dia_scals.o psb_s_ell_aclsum.o psb_s_ell_allocate_mnnz.o psb_s_ell_arwsum.o psb_s_ell_colsum.o psb_s_ell_csgetblk.o psb_s_ell_csgetptn.o psb_s_ell_csgetrow.o psb_s_ell_csmm.o psb_s_ell_csmv.o psb_s_ell_csnm1.o psb_s_ell_csnmi.o psb_s_ell_csput.o psb_s_ell_cssm.o psb_s_ell_cssv.o psb_s_ell_get_diag.o psb_s_ell_maxval.o psb_s_ell_mold.o psb_s_ell_print.o psb_s_ell_reallocate_nz.o psb_s_ell_reinit.o psb_s_ell_rowsum.o psb_s_ell_scal.o psb_s_ell_scals.o psb_s_ell_trim.o psb_s_hdia_allocate_mnnz.o psb_s_hdia_csmv.o psb_s_hdia_mold.o psb_s_hdia_print.o psb_s_hll_aclsum.o psb_s_hll_allocate_mnnz.o psb_s_hll_arwsum.o psb_s_hll_colsum.o psb_s_hll_csgetblk.o psb_s_hll_csgetptn.o psb_s_hll_csgetrow.o psb_s_hll_csmm.o psb_s_hll_csmv.o psb_s_hll_csnm1.o psb_s_hll_csnmi.o psb_s_hll_csput.o psb_s_hll_cssm.o psb_s_hll_cssv.o psb_s_hll_get_diag.o psb_s_hll_maxval.o psb_s_hll_mold.o psb_s_hll_print.o psb_s_hll_reallocate_nz.o psb_s_hll_reinit.o psb_s_hll_rowsum.o psb_s_hll_scal.o psb_s_hll_scals.o psb_s_mv_dia_from_coo.o psb_s_mv_ell_from_coo.o psb_s_mv_ell_from_fmt.o psb_s_mv_ell_to_coo.o psb_s_mv_ell_to_fmt.o psb_s_mv_hdia_from_coo.o psb_s_mv_hdia_to_coo.o psb_s_mv_hll_from_coo.o psb_s_mv_hll_from_fmt.o psb_s_mv_hll_to_coo.o psb_s_mv_hll_to_fmt.o psb_c_cp_dia_from_coo.o psb_c_cp_dia_to_coo.o psb_c_cp_ell_from_coo.o psb_c_cp_ell_from_fmt.o psb_c_cp_ell_to_coo.o psb_c_cp_ell_to_fmt.o psb_c_cp_hdia_from_coo.o psb_c_cp_hdia_to_coo.o psb_c_cp_hll_from_coo.o psb_c_cp_hll_from_fmt.o psb_c_cp_hll_to_coo.o psb_c_cp_hll_to_fmt.o psb_c_dia_aclsum.o psb_c_dia_allocate_mnnz.o psb_c_dia_arwsum.o psb_c_dia_colsum.o psb_c_dia_csgetptn.o psb_c_dia_csgetrow.o psb_c_dia_csmm.o psb_c_dia_csmv.o psb_c_dia_get_diag.o psb_c_dia_maxval.o psb_c_dia_mold.o psb_c_dia_print.o psb_c_dia_reallocate_nz.o psb_c_dia_reinit.o psb_c_dia_rowsum.o psb_c_dia_scal.o psb_c_dia_scals.o psb_c_ell_aclsum.o psb_c_ell_allocate_mnnz.o psb_c_ell_arwsum.o psb_c_ell_colsum.o psb_c_ell_csgetblk.o psb_c_ell_csgetptn.o psb_c_ell_csgetrow.o psb_c_ell_csmm.o psb_c_ell_csmv.o psb_c_ell_csnm1.o psb_c_ell_csnmi.o psb_c_ell_csput.o psb_c_ell_cssm.o psb_c_ell_cssv.o psb_c_ell_get_diag.o psb_c_ell_maxval.o psb_c_ell_mold.o psb_c_ell_print.o psb_c_ell_reallocate_nz.o psb_c_ell_reinit.o psb_c_ell_rowsum.o psb_c_ell_scal.o psb_c_ell_scals.o psb_c_ell_trim.o psb_c_hdia_allocate_mnnz.o psb_c_hdia_csmv.o psb_c_hdia_mold.o psb_c_hdia_print.o psb_c_hll_aclsum.o psb_c_hll_allocate_mnnz.o psb_c_hll_arwsum.o psb_c_hll_colsum.o psb_c_hll_csgetblk.o psb_c_hll_csgetptn.o psb_c_hll_csgetrow.o psb_c_hll_csmm.o psb_c_hll_csmv.o psb_c_hll_csnm1.o psb_c_hll_csnmi.o psb_c_hll_csput.o psb_c_hll_cssm.o psb_c_hll_cssv.o psb_c_hll_get_diag.o psb_c_hll_maxval.o psb_c_hll_mold.o psb_c_hll_print.o psb_c_hll_reallocate_nz.o psb_c_hll_reinit.o psb_c_hll_rowsum.o psb_c_hll_scal.o psb_c_hll_scals.o psb_c_mv_dia_from_coo.o psb_c_mv_ell_from_coo.o psb_c_mv_ell_from_fmt.o psb_c_mv_ell_to_coo.o psb_c_mv_ell_to_fmt.o psb_c_mv_hdia_from_coo.o psb_c_mv_hdia_to_coo.o psb_c_mv_hll_from_coo.o psb_c_mv_hll_from_fmt.o psb_c_mv_hll_to_coo.o psb_c_mv_hll_to_fmt.o psb_d_cp_dia_from_coo.o psb_d_cp_dia_to_coo.o psb_d_cp_ell_from_coo.o psb_d_cp_ell_from_fmt.o psb_d_cp_ell_to_coo.o psb_d_cp_ell_to_fmt.o psb_d_cp_hdia_from_coo.o psb_d_cp_hdia_to_coo.o psb_d_cp_hll_from_coo.o psb_d_cp_hll_from_fmt.o psb_d_cp_hll_to_coo.o psb_d_cp_hll_to_fmt.o psb_d_dia_aclsum.o psb_d_dia_allocate_mnnz.o psb_d_dia_arwsum.o psb_d_dia_colsum.o psb_d_dia_csgetptn.o psb_d_dia_csgetrow.o psb_d_dia_csmm.o psb_d_dia_csmv.o psb_d_dia_get_diag.o psb_d_dia_maxval.o psb_d_dia_mold.o psb_d_dia_print.o psb_d_dia_reallocate_nz.o psb_d_dia_reinit.o psb_d_dia_rowsum.o psb_d_dia_scal.o psb_d_dia_scals.o psb_d_ell_aclsum.o psb_d_ell_allocate_mnnz.o psb_d_ell_arwsum.o psb_d_ell_colsum.o psb_d_ell_csgetblk.o psb_d_ell_csgetptn.o psb_d_ell_csgetrow.o psb_d_ell_csmm.o psb_d_ell_csmv.o psb_d_ell_csnm1.o psb_d_ell_csnmi.o psb_d_ell_csput.o psb_d_ell_cssm.o psb_d_ell_cssv.o psb_d_ell_get_diag.o psb_d_ell_maxval.o psb_d_ell_mold.o psb_d_ell_print.o psb_d_ell_reallocate_nz.o psb_d_ell_reinit.o psb_d_ell_rowsum.o psb_d_ell_scal.o psb_d_ell_scals.o psb_d_ell_trim.o psb_d_hdia_allocate_mnnz.o psb_d_hdia_csmv.o psb_d_hdia_mold.o psb_d_hdia_print.o psb_d_hll_aclsum.o psb_d_hll_allocate_mnnz.o psb_d_hll_arwsum.o psb_d_hll_colsum.o psb_d_hll_csgetblk.o psb_d_hll_csgetptn.o psb_d_hll_csgetrow.o psb_d_hll_csmm.o psb_d_hll_csmv.o psb_d_hll_csnm1.o psb_d_hll_csnmi.o psb_d_hll_csput.o psb_d_hll_cssm.o psb_d_hll_cssv.o psb_d_hll_get_diag.o psb_d_hll_maxval.o psb_d_hll_mold.o psb_d_hll_print.o psb_d_hll_reallocate_nz.o psb_d_hll_reinit.o psb_d_hll_rowsum.o psb_d_hll_scal.o psb_d_hll_scals.o psb_d_mv_dia_from_coo.o psb_d_mv_ell_from_coo.o psb_d_mv_ell_from_fmt.o psb_d_mv_ell_to_coo.o psb_d_mv_ell_to_fmt.o psb_d_mv_hdia_from_coo.o psb_d_mv_hdia_to_coo.o psb_d_mv_hll_from_coo.o psb_d_mv_hll_from_fmt.o psb_d_mv_hll_to_coo.o psb_d_mv_hll_to_fmt.o psb_z_cp_dia_from_coo.o psb_z_cp_dia_to_coo.o psb_z_cp_ell_from_coo.o psb_z_cp_ell_from_fmt.o psb_z_cp_ell_to_coo.o psb_z_cp_ell_to_fmt.o psb_z_cp_hdia_from_coo.o psb_z_cp_hdia_to_coo.o psb_z_cp_hll_from_coo.o psb_z_cp_hll_from_fmt.o psb_z_cp_hll_to_coo.o psb_z_cp_hll_to_fmt.o psb_z_dia_aclsum.o psb_z_dia_allocate_mnnz.o psb_z_dia_arwsum.o psb_z_dia_colsum.o psb_z_dia_csgetptn.o psb_z_dia_csgetrow.o psb_z_dia_csmm.o psb_z_dia_csmv.o psb_z_dia_get_diag.o psb_z_dia_maxval.o psb_z_dia_mold.o psb_z_dia_print.o psb_z_dia_reallocate_nz.o psb_z_dia_reinit.o psb_z_dia_rowsum.o psb_z_dia_scal.o psb_z_dia_scals.o psb_z_ell_aclsum.o psb_z_ell_allocate_mnnz.o psb_z_ell_arwsum.o psb_z_ell_colsum.o psb_z_ell_csgetblk.o psb_z_ell_csgetptn.o psb_z_ell_csgetrow.o psb_z_ell_csmm.o psb_z_ell_csmv.o psb_z_ell_csnm1.o psb_z_ell_csnmi.o psb_z_ell_csput.o psb_z_ell_cssm.o psb_z_ell_cssv.o psb_z_ell_get_diag.o psb_z_ell_maxval.o psb_z_ell_mold.o psb_z_ell_print.o psb_z_ell_reallocate_nz.o psb_z_ell_reinit.o psb_z_ell_rowsum.o psb_z_ell_scal.o psb_z_ell_scals.o psb_z_ell_trim.o psb_z_hdia_allocate_mnnz.o psb_z_hdia_csmv.o psb_z_hdia_mold.o psb_z_hdia_print.o psb_z_hll_aclsum.o psb_z_hll_allocate_mnnz.o psb_z_hll_arwsum.o psb_z_hll_colsum.o psb_z_hll_csgetblk.o psb_z_hll_csgetptn.o psb_z_hll_csgetrow.o psb_z_hll_csmm.o psb_z_hll_csmv.o psb_z_hll_csnm1.o psb_z_hll_csnmi.o psb_z_hll_csput.o psb_z_hll_cssm.o psb_z_hll_cssv.o psb_z_hll_get_diag.o psb_z_hll_maxval.o psb_z_hll_mold.o psb_z_hll_print.o psb_z_hll_reallocate_nz.o psb_z_hll_reinit.o psb_z_hll_rowsum.o psb_z_hll_scal.o psb_z_hll_scals.o psb_z_mv_dia_from_coo.o psb_z_mv_ell_from_coo.o psb_z_mv_ell_from_fmt.o psb_z_mv_ell_to_coo.o psb_z_mv_ell_to_fmt.o psb_z_mv_hdia_from_coo.o psb_z_mv_hdia_to_coo.o psb_z_mv_hll_from_coo.o psb_z_mv_hll_from_fmt.o psb_z_mv_hll_to_coo.o psb_z_mv_hll_to_fmt.o psi_s_xtr_ell_from_coo.o psi_c_xtr_ell_from_coo.o psi_d_xtr_ell_from_coo.o psi_z_xtr_ell_from_coo.o psi_s_convert_ell_from_coo.o psi_c_convert_ell_from_coo.o psi_d_convert_ell_from_coo.o psi_z_convert_ell_from_coo.o psi_s_convert_hll_from_coo.o psi_c_convert_hll_from_coo.o psi_d_convert_hll_from_coo.o psi_z_convert_hll_from_coo.o psi_s_xtr_dia_from_coo.o psi_c_xtr_dia_from_coo.o psi_d_xtr_dia_from_coo.o psi_z_xtr_dia_from_coo.o psi_s_xtr_coo_from_dia.o psi_d_xtr_coo_from_dia.o psi_c_xtr_coo_from_dia.o psi_z_xtr_coo_from_dia.o psi_s_convert_dia_from_coo.o psi_c_convert_dia_from_coo.o psi_d_convert_dia_from_coo.o psi_z_convert_dia_from_coo.o psb_s_dns_mat_impl.o psb_d_dns_mat_impl.o psb_c_dns_mat_impl.o psb_z_dns_mat_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -ar -cDr libpsb_ext.a psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o psb_s_hll_mat_mod.o psb_s_ell_mat_mod.o psb_c_hll_mat_mod.o psb_c_ell_mat_mod.o psb_z_hll_mat_mod.o psb_z_ell_mat_mod.o psb_d_dia_mat_mod.o psb_d_hdia_mat_mod.o psb_s_dia_mat_mod.o psb_s_hdia_mat_mod.o psb_c_dia_mat_mod.o psb_c_hdia_mat_mod.o psb_z_dia_mat_mod.o psb_z_hdia_mat_mod.o psb_s_dns_mat_mod.o psb_d_dns_mat_mod.o psb_c_dns_mat_mod.o psb_z_dns_mat_mod.o psi_ext_util_mod.o psi_i_ext_util_mod.o psi_s_ext_util_mod.o psi_c_ext_util_mod.o psi_d_ext_util_mod.o psi_z_ext_util_mod.o psb_ext_mod.o -/bin/cp -p libpsb_ext.a ../lib +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -===================================== -PSBLAS libraries Compilation Successful. +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o +psb_dspmm.f90:600:88: + + 600 | call psi_swapdata(flag=ior(psb_swap_send_,psb_swap_recv_), beta=dzero, y=x%v, desc_a=desc_a, & + | 1 +Error: Unexpected â€%’ for nonderived-type variable â€x’ at (1) +psb_dspmm.f90:618:5: + + 618 | end if + | 1 +Error: Expecting END SUBROUTINE statement at (1) +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o +psb_sovrl.f90:316:48: + + 316 | & desc_a,iwork,info,data=psb_comm_ovr_) + | 1 +Error: There is no specific subroutine for the generic â€psi_swapdata’ at (1) +make[2]: *** [../../Make.inc:114: psb_sovrl.o] Errore 1 +make[2]: *** Attesa per i processi non terminati.... +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o +psb_dspsm.f90:212:57: + + 212 | & done,y%v,desc_a,iwork,info,data=psb_comm_ovr_) + | 1 +Error: There is no specific subroutine for the generic â€psi_swapdata’ at (1) +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o +make[2]: *** [../../Make.inc:114: psb_samax.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_dspsm.o] Interruzione +make[1]: *** [../Make.inc:116: psb_metispart_mod.o] Interruzione +make[3]: *** [../../../Make.inc:116: psb_s_base_mat_impl.o] Interruzione +make[3]: *** [../../../Make.inc:116: psb_d_base_mat_impl.o] Interruzione +make[3]: *** [../../../Make.inc:116: psb_c_base_mat_impl.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_lins.o] Interruzione +make[3]: *** [../../../Make.inc:116: psb_z_base_mat_impl.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_sasb.o] Interruzione +make[3]: *** [../../../Make.inc:116: psb_s_csr_impl.o] Interruzione +make[3]: *** [../../../Make.inc:116: psb_s_coo_impl.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_dspmm.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_zspmm.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_saxpby.o] Interruzione +make[4]: *** wait: Nessun processo figlio. Arresto. +make[4]: *** Attesa per i processi non terminati.... +make[4]: *** wait: Nessun processo figlio. Arresto. +make[2]: *** [../../Make.inc:114: psb_sallc.o] Interruzione +make[3]: *** [../../../Make.inc:114: psi_sovrl_restr.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_zspsm.o] Interruzione +make[2]: *** [../../Make.inc:116: psb_dspins.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_sdot.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_sasum.o] Interruzione +make[3]: *** [../../Make.inc:116: psb_c_remote_mat.o] Interruzione +make[1]: *** [../Make.inc:114: psb_s_bjacprec.o] Interruzione +make[2]: *** [../../Make.inc:114: psb_zgeprt.o] Interruzione +make[2]: *** [Makefile:34: impld] Interruzione +make[2]: *** wait: Nessun processo figlio. Arresto. +make[2]: *** Attesa per i processi non terminati.... +make[1]: *** [../Make.inc:114: psb_gps_mod.o] Interruzione +make[2]: *** wait: Nessun processo figlio. Arresto. +make[1]: *** [../Make.inc:114: psb_c_bjacprec.o] Interruzione +make[1]: *** wait: Nessun processo figlio. Arresto. +make[1]: *** Attesa per i processi non terminati.... +make[1]: *** wait: Nessun processo figlio. Arresto. +make[1]: *** [Makefile:31: pb] Interruzione +make[3]: *** [Makefile:41: mpfobjs] Errore 2 +make[1]: *** [../Make.inc:114: psb_z_bjacprec.o] Interruzione +make[1]: *** wait: Nessun processo figlio. Arresto. +make[1]: *** Attesa per i processi non terminati.... +make[1]: *** wait: Nessun processo figlio. Arresto. +make[1]: *** [Makefile:25: sr] Errore 2 +make: *** [Makefile:21: utilmods] Errore 2 +make[2]: *** [Makefile:51: mpfobjs] Interruzione +make: *** [Makefile:17: precmods] Errore 2 +make[1]: *** [Makefile:33: tl] Interruzione +make[2]: *** [Makefile:38: interns] Interruzione +make[1]: *** [Makefile:27: cm] Interruzione +make: *** [Makefile:56: based] Interruzione diff --git a/test/comm/Makefile b/test/comm/Makefile new file mode 100644 index 000000000..fe64c4a4e --- /dev/null +++ b/test/comm/Makefile @@ -0,0 +1,33 @@ +INSTALLDIR=../.. +INCDIR=$(INSTALLDIR)/include/ +MODDIR=$(INSTALLDIR)/modules/ +include $(INCDIR)/Make.inc.psblas +# +# Libraries used +# +LIBDIR=$(INSTALLDIR)/lib/ +PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base +LDLIBS=$(PSBLDLIBS) + +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). + +TOBJS=psb_comm_test.o + +EXEDIR=./runs + +all: runsd psb_comm_test + +runsd: + (if test ! -d runs ; then mkdir runs; fi) + +psb_comm_test: $(TOBJS) + $(FLINK) $(LOPT) $(TOBJS) -o psb_comm_test $(PSBLAS_LIB) $(LDLIBS) + /bin/mv psb_comm_test $(EXEDIR) + +clean: + /bin/rm -f $(TOBJS) $(TOBJS_API) *$(.mod) $(EXEDIR)/psb_comm_test + +lib: + (cd ../../; make library) +verycleanlib: + (cd ../../; make veryclean) \ No newline at end of file diff --git a/test/comm/psb_comm_test.F90 b/test/comm/psb_comm_test.F90 new file mode 100644 index 000000000..4ed282ded --- /dev/null +++ b/test/comm/psb_comm_test.F90 @@ -0,0 +1,281 @@ +! +! Test program for D-type halo exchange: baseline vs neighbor topology. +! +! This test exercises the lower-level psi_swapdata interface directly +! to compare the two communication paths implemented in psi_dswapdata.F90: +! +! 1. Baseline (Isend/Irecv) : flag = IOR(psb_swap_send_, psb_swap_recv_) +! 2. Neighbor topology (Ineighbor_alltoallv) : flag = psb_swap_start_ then psb_swap_wait_ +! +! It builds a 3D block-partitioned descriptor with a 7-point stencil, +! fills owned entries with their global index, performs halo exchange +! via both paths, then checks: +! (a) The two paths produce identical results (cross-check) +! (b) Every halo entry equals the global index of its source (absolute check) +! +! Run with: mpirun -np

./test_halo_new +! +program psb_comm_test + use psb_base_mod + use psi_mod + implicit none + + ! ---- parameters ---- + integer(psb_ipk_) :: idim + integer(psb_ipk_) :: argc + character(len=32) :: arg + + ! ---- descriptor / context ---- + type(psb_ctxt_type) :: ctxt + type(psb_desc_type) :: desc_a + integer(psb_ipk_) :: my_rank, np, info, i, nr, number_of_local_rows + integer(psb_lpk_) :: m, nt + integer(psb_lpk_), allocatable :: myidx(:) + + ! ---- vectors ---- + type(psb_d_vect_type) :: v_baseline, v_neighbor + + ! ---- temporary / comparison arrays ---- + real(psb_dpk_), allocatable :: vals(:) + real(psb_dpk_), allocatable :: result_baseline(:), result_neighbor(:) + real(psb_dpk_), allocatable :: expected(:) + + ! ---- halo index bookkeeping ---- + integer(psb_ipk_) :: nrow, ncol, num_neighbors, send_indexes, receive_indexes + class(psb_i_base_vect_type), pointer :: halo_indexes + + ! ---- error / reporting ---- + integer(psb_ipk_) :: n_pass, n_total, imode + real(psb_dpk_) :: err, tol + integer(psb_lpk_), allocatable :: glob_col(:) + character(len=40) :: name + + name = 'test_halo_new' + tol = 1.0d-12 + n_pass = 0 + n_total = 0 + + ! ---- parse command-line argument for idim ---- + idim = 10 + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--dim') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) idim + exit + end if + end if + end do + + if (idim <= 0) then + write(*,*) 'Invalid dimension specified. Usage: --dim ' + call psb_abort(ctxt) + end if + ! ================================================================== + ! 1. Initialise MPI / PSBLAS context + ! ================================================================== + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Test: D-type halo baseline vs neighbor topo")') + write(psb_out_unit,'(" Processes : ",i0)') np + write(psb_out_unit,'(" Grid : ",i0," x ",i0," x ",i0)') idim,idim,idim + write(psb_out_unit,'("================================================")') + end if + + ! ================================================================== + ! 2. Build descriptor with 7-point stencil connectivity + ! ================================================================== + m = (1_psb_lpk_ * idim) * idim * idim + nt = (m + np - 1) / np + nr = max(0, min(int(nt,psb_ipk_), int(m - (my_rank * nt),psb_ipk_))) + + call psb_cdall(ctxt, desc_a, info, nl=nr) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdall error:', info + call psb_abort(ctxt) + end if + + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + + do i = 1, number_of_local_rows + call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)/), desc_a, info) + if (myidx(i) > 1) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-1/), desc_a, info) + if (myidx(i) < m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+1/), desc_a, info) + if (myidx(i) > idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-idim/), desc_a, info) + if (myidx(i) + idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+idim/), desc_a, info) + if (myidx(i) > int(idim,psb_lpk_)*idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) - int(idim,psb_lpk_)*idim/), desc_a, info) + if (myidx(i) + int(idim,psb_lpk_)*idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) + int(idim,psb_lpk_)*idim/), desc_a, info) + end do + + call psb_cdasb(desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdasb error:', info + call psb_abort(ctxt) + end if + + nrow = desc_a%get_local_rows() ! owned + ncol = desc_a%get_local_cols() ! owned + halo + + ! ================================================================== + ! 3. Allocate two D vectors (scratch) and fill owned entries + ! ================================================================== + call psb_geall(v_baseline, desc_a, info) + call psb_geall(v_neighbor, desc_a, info) + call psb_geasb(v_baseline, desc_a, info, scratch=.true.) + call psb_geasb(v_neighbor, desc_a, info, scratch=.true.) + + ! Fill owned entries with the global index value + allocate(vals(ncol)) + vals = dzero + do i = 1, number_of_local_rows + vals(i) = real(myidx(i), psb_dpk_) + end do + call v_baseline%set_vect(vals) + call v_neighbor%set_vect(vals) + deallocate(vals) + + ! ================================================================== + ! 4. Build the expected result for halo positions + ! glob_col(j) = global index of local column j + ! After halo exchange every position j should hold glob_col(j). + ! ================================================================== + allocate(glob_col(ncol), expected(ncol)) + glob_col = desc_a%get_global_indices(owned=.false.) + do i = 1, ncol + expected(i) = real(glob_col(i), psb_dpk_) + end do + + ! ================================================================== + ! 6. Baseline halo exchange (Isend/Irecv in one call) + ! ================================================================== + imode = IOR(psb_swap_send_, psb_swap_recv_) + ! v_baseline%v is a psb_d_base_vect_type + call psi_swapdata(flag=imode, beta=dzero, y=v_baseline%v, desc_a=desc_a, info=info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + + ! ================================================================== + ! 7. Neighbor topology halo exchange (start + wait) + ! ================================================================== + imode = psb_swap_start_ + call psi_swapdata(imode, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor start error:', info + call psb_abort(ctxt) + end if + + imode = psb_swap_wait_ + call psi_swapdata(imode, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor wait error:', info + call psb_abort(ctxt) + end if + + ! ================================================================== + ! 8. Extract results and compare + ! ================================================================== + result_baseline = v_baseline%get_vect() + result_neighbor = v_neighbor%get_vect() + + ! ---- Test 1: cross-check baseline vs neighbor (all entries) ---- + n_total = n_total + 1 + err = maxval(abs(result_baseline(1:ncol) - result_neighbor(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] cross-check baseline vs neighbor : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] cross-check baseline vs neighbor : err = ",es12.5)') err + end if + end if + + ! ---- Test 2: baseline absolute correctness (halo = global index) ---- + n_total = n_total + 1 + err = maxval(abs(result_baseline(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] baseline absolute correctness : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] baseline absolute correctness : err = ",es12.5)') err + end if + end if + + ! ---- Test 3: neighbor absolute correctness (halo = global index) ---- + n_total = n_total + 1 + err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] neighbor absolute correctness : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] neighbor absolute correctness : err = ",es12.5)') err + end if + end if + + ! ---- Test 4: repeat neighbor exchange (topology reuse) ---- + ! Reset halo entries to zero, run again, and check + do i = nrow+1, ncol + result_neighbor(i) = dzero + end do + call v_neighbor%set_vect(result_neighbor) + + call psi_swapdata(psb_swap_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_swap_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + + result_neighbor = v_neighbor%get_vect() + n_total = n_total + 1 + err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] neighbor topology reuse : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] neighbor topology reuse : err = ",es12.5)') err + end if + end if + + ! ================================================================== + ! 9. Summary + ! ================================================================== + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Results: ",i0," / ",i0," tests passed")') n_pass, n_total + if (n_pass == n_total) then + write(psb_out_unit,'(" STATUS: ALL PASSED")') + else + write(psb_out_unit,'(" STATUS: SOME FAILURES")') + end if + write(psb_out_unit,'("================================================")') + end if + + ! ================================================================== + ! 10. Cleanup + ! ================================================================== + deallocate(result_baseline, result_neighbor, expected, glob_col) + call psb_gefree(v_baseline, desc_a, info) + call psb_gefree(v_neighbor, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_exit(ctxt) + +end program psb_comm_test \ No newline at end of file From 176596a17f4a7b166a55d6e33d7a973c60a4161e Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 17 Mar 2026 16:26:09 +0100 Subject: [PATCH 119/175] Fix jump on uninitialized in cuda_exit --- cuda/cuda_util.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cuda/cuda_util.c b/cuda/cuda_util.c index f7414695b..5299f429b 100644 --- a/cuda/cuda_util.c +++ b/cuda/cuda_util.c @@ -247,14 +247,14 @@ int gpuInit(int dev) void gpuClose() { cudaStream_t st1, st2; - if (! psb_cuda_handle) + if ((! psb_cuda_handle)&&(! psb_cublas_handle)) { st1=spgpuGetStream(psb_cuda_handle); - if (! psb_cublas_handle) cublasGetStream(psb_cublas_handle,&st2); + if (st1 != st2) + psb_cudaDestroyCublasHandle(); + } FcusparseDestroy(); psb_cudaDestroyHandle(); - if (st1 != st2) - psb_cudaDestroyCublasHandle(); free(prop); prop=NULL; hasUVA=-1; From 25b51b4cf7e66c15d4d374c3da7e571c61b2cc81 Mon Sep 17 00:00:00 2001 From: Marco Feder Date: Wed, 18 Mar 2026 00:09:57 +0100 Subject: [PATCH 120/175] Expose reinit with clear option --- cbind/base/psb_c_dbase.h | 1 + cbind/base/psb_d_tools_cbind_mod.F90 | 34 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index 6a82fe77f..97ef408f2 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -37,6 +37,7 @@ psb_i_t psb_c_dgeasb_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_ psb_i_t psb_c_dgeasb_options_format(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t dupl, const char *fmt); psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgereinit(psb_c_dvector *xh, psb_c_descriptor *cdh, bool clear); psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); /* sparse matrices*/ diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 935b6cc6f..1b4bb40ee 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -253,6 +253,40 @@ contains end function psb_c_dgefree + function psb_c_dgereinit(xh,cdh,clear) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + logical(c_bool), value :: clear + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + logical :: fclear + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + fclear = clear + call xp%reinit(info, clear=fclear) + res = min(0,info) + + return + end function psb_c_dgereinit + + function psb_c_dgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none From cbf71f6b97eb8e968fd423142ba869c513de028a Mon Sep 17 00:00:00 2001 From: Marco Feder Date: Wed, 18 Mar 2026 00:25:30 +0100 Subject: [PATCH 121/175] Add variants with other vector types --- cbind/base/psb_c_cbase.h | 1 + cbind/base/psb_c_sbase.h | 1 + cbind/base/psb_c_tools_cbind_mod.F90 | 34 ++++++++++++++++++++++++++++ cbind/base/psb_c_zbase.h | 1 + cbind/base/psb_s_tools_cbind_mod.F90 | 34 ++++++++++++++++++++++++++++ cbind/base/psb_z_tools_cbind_mod.F90 | 34 ++++++++++++++++++++++++++++ 6 files changed, 105 insertions(+) diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index dcf379656..0dd426d75 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -37,6 +37,7 @@ psb_i_t psb_c_cgeasb_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_ psb_i_t psb_c_cgeasb_options_format(psb_c_cvector *xh, psb_c_descriptor *cdh, const char *fmt, psb_i_t dupl); psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgereinit(psb_c_cvector *xh, psb_c_descriptor *cdh, bool clear); psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); /* sparse matrices*/ diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index f132e707e..1e1895bad 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -37,6 +37,7 @@ psb_i_t psb_c_sgeasb_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_ psb_i_t psb_c_sgeasb_options_format(psb_c_svector *xh, psb_c_descriptor *cdh, const char *fmt, psb_i_t dupl); psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgereinit(psb_c_svector *xh, psb_c_descriptor *cdh, bool clear); psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); /* sparse matrices*/ diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index a3fa17721..5cf3478e8 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -253,6 +253,40 @@ contains end function psb_c_cgefree + function psb_c_cgereinit(xh,cdh,clear) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + logical(c_bool), value :: clear + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + logical :: fclear + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + fclear = clear + call xp%reinit(info, clear=fclear) + res = min(0,info) + + return + end function psb_c_cgereinit + + function psb_c_cgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index 40bff4853..2e4f01c45 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -37,6 +37,7 @@ psb_i_t psb_c_zgeasb_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_ psb_i_t psb_c_zgeasb_options_format(psb_c_zvector *xh, psb_c_descriptor *cdh, const char *fmt, psb_i_t dupl); psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgereinit(psb_c_zvector *xh, psb_c_descriptor *cdh, bool clear); psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); /* sparse matrices*/ diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 7633564f6..3f5334a79 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -253,6 +253,40 @@ contains end function psb_c_sgefree + function psb_c_sgereinit(xh,cdh,clear) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + logical(c_bool), value :: clear + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + logical :: fclear + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + fclear = clear + call xp%reinit(info, clear=fclear) + res = min(0,info) + + return + end function psb_c_sgereinit + + function psb_c_sgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 0ca9424df..b4693a4c8 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -253,6 +253,40 @@ contains end function psb_c_zgefree + function psb_c_zgereinit(xh,cdh,clear) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + logical(c_bool), value :: clear + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + logical :: fclear + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + fclear = clear + call xp%reinit(info, clear=fclear) + res = min(0,info) + + return + end function psb_c_zgereinit + + function psb_c_zgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none From 303edfedc75fcc38119df63bc9642ab30c4b8745 Mon Sep 17 00:00:00 2001 From: Marco Feder Date: Wed, 18 Mar 2026 10:48:38 +0100 Subject: [PATCH 122/175] Fix return value --- base/modules/serial/psb_c_base_vect_mod.F90 | 2 ++ base/modules/serial/psb_d_base_vect_mod.F90 | 2 ++ base/modules/serial/psb_s_base_vect_mod.F90 | 2 ++ base/modules/serial/psb_z_base_vect_mod.F90 | 2 ++ 4 files changed, 8 insertions(+) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index 3fc0b87bf..2ac4c4149 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -426,6 +426,8 @@ contains integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ + + info = 0 if (present(clear)) then clear_ = clear diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 22e57cd83..e3deaa60e 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -434,6 +434,8 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 + if (present(clear)) then clear_ = clear else diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index b448d54ed..7311225f2 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -434,6 +434,8 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 + if (present(clear)) then clear_ = clear else diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 79d45a9ce..ba5b996d3 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -427,6 +427,8 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 + if (present(clear)) then clear_ = clear else From d2fba9e952807b0258360c7b49714a0e9f626a3b Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 18 Mar 2026 14:49:55 +0100 Subject: [PATCH 123/175] Fix licensing text --- CMakeLists.txt | 14 +++++++++++--- LICENSE | 7 ++----- base/auxil/psi_a2a_fnd_owner.F90 | 2 +- base/auxil/psi_adjcncy_fnd_owner.F90 | 2 +- base/auxil/psi_bld_glb_dep_list.F90 | 2 +- base/auxil/psi_bld_tmphalo.f90 | 2 +- base/auxil/psi_bld_tmpovrl.f90 | 2 +- base/auxil/psi_compute_size.f90 | 2 +- base/auxil/psi_crea_bnd_elem.f90 | 2 +- base/auxil/psi_crea_index.f90 | 2 +- base/auxil/psi_crea_ovr_elem.f90 | 2 +- base/auxil/psi_desc_impl.f90 | 2 +- base/auxil/psi_desc_index.F90 | 2 +- base/auxil/psi_fnd_owner.F90 | 2 +- base/auxil/psi_graph_fnd_owner.F90 | 2 +- base/auxil/psi_hash_impl.f90 | 2 +- base/auxil/psi_indx_map_fnd_owner.F90 | 2 +- base/auxil/psi_sort_dl.f90 | 2 +- base/auxil/psi_srtlist.f90 | 2 +- base/auxil/psi_symm_dep_list.F90 | 2 +- base/auxil/psi_xtr_loc_dl.F90 | 2 +- base/comm/internals/psi_covrl_restr.f90 | 2 +- base/comm/internals/psi_covrl_restr_a.f90 | 2 +- base/comm/internals/psi_covrl_save.f90 | 2 +- base/comm/internals/psi_covrl_save_a.f90 | 2 +- base/comm/internals/psi_covrl_upd.f90 | 2 +- base/comm/internals/psi_covrl_upd_a.f90 | 2 +- base/comm/internals/psi_cswapdata.F90 | 2 +- base/comm/internals/psi_cswapdata_a.F90 | 2 +- base/comm/internals/psi_cswaptran.F90 | 2 +- base/comm/internals/psi_cswaptran_a.F90 | 2 +- base/comm/internals/psi_dovrl_restr.f90 | 2 +- base/comm/internals/psi_dovrl_restr_a.f90 | 2 +- base/comm/internals/psi_dovrl_save.f90 | 2 +- base/comm/internals/psi_dovrl_save_a.f90 | 2 +- base/comm/internals/psi_dovrl_upd.f90 | 2 +- base/comm/internals/psi_dovrl_upd_a.f90 | 2 +- base/comm/internals/psi_dswapdata.F90 | 2 +- base/comm/internals/psi_dswapdata_a.F90 | 2 +- base/comm/internals/psi_dswaptran.F90 | 2 +- base/comm/internals/psi_dswaptran_a.F90 | 2 +- base/comm/internals/psi_eovrl_restr_a.f90 | 2 +- base/comm/internals/psi_eovrl_save_a.f90 | 2 +- base/comm/internals/psi_eovrl_upd_a.f90 | 2 +- base/comm/internals/psi_eswapdata_a.F90 | 2 +- base/comm/internals/psi_eswaptran_a.F90 | 2 +- base/comm/internals/psi_i2ovrl_restr_a.f90 | 2 +- base/comm/internals/psi_i2ovrl_save_a.f90 | 2 +- base/comm/internals/psi_i2ovrl_upd_a.f90 | 2 +- base/comm/internals/psi_i2swapdata_a.F90 | 2 +- base/comm/internals/psi_i2swaptran_a.F90 | 2 +- base/comm/internals/psi_iovrl_restr.f90 | 2 +- base/comm/internals/psi_iovrl_save.f90 | 2 +- base/comm/internals/psi_iovrl_upd.f90 | 2 +- base/comm/internals/psi_iswapdata.F90 | 2 +- base/comm/internals/psi_iswaptran.F90 | 2 +- base/comm/internals/psi_lovrl_restr.f90 | 2 +- base/comm/internals/psi_lovrl_save.f90 | 2 +- base/comm/internals/psi_lovrl_upd.f90 | 2 +- base/comm/internals/psi_lswapdata.F90 | 2 +- base/comm/internals/psi_lswaptran.F90 | 2 +- base/comm/internals/psi_movrl_restr_a.f90 | 2 +- base/comm/internals/psi_movrl_save_a.f90 | 2 +- base/comm/internals/psi_movrl_upd_a.f90 | 2 +- base/comm/internals/psi_mswapdata_a.F90 | 2 +- base/comm/internals/psi_mswaptran_a.F90 | 2 +- base/comm/internals/psi_sovrl_restr.f90 | 2 +- base/comm/internals/psi_sovrl_restr_a.f90 | 2 +- base/comm/internals/psi_sovrl_save.f90 | 2 +- base/comm/internals/psi_sovrl_save_a.f90 | 2 +- base/comm/internals/psi_sovrl_upd.f90 | 2 +- base/comm/internals/psi_sovrl_upd_a.f90 | 2 +- base/comm/internals/psi_sswapdata.F90 | 2 +- base/comm/internals/psi_sswapdata_a.F90 | 2 +- base/comm/internals/psi_sswaptran.F90 | 2 +- base/comm/internals/psi_sswaptran_a.F90 | 2 +- base/comm/internals/psi_zovrl_restr.f90 | 2 +- base/comm/internals/psi_zovrl_restr_a.f90 | 2 +- base/comm/internals/psi_zovrl_save.f90 | 2 +- base/comm/internals/psi_zovrl_save_a.f90 | 2 +- base/comm/internals/psi_zovrl_upd.f90 | 2 +- base/comm/internals/psi_zovrl_upd_a.f90 | 2 +- base/comm/internals/psi_zswapdata.F90 | 2 +- base/comm/internals/psi_zswapdata_a.F90 | 2 +- base/comm/internals/psi_zswaptran.F90 | 2 +- base/comm/internals/psi_zswaptran_a.F90 | 2 +- base/comm/psb_cgather.f90 | 2 +- base/comm/psb_cgather_a.f90 | 4 ++-- base/comm/psb_chalo.f90 | 2 +- base/comm/psb_chalo_a.f90 | 4 ++-- base/comm/psb_covrl.f90 | 2 +- base/comm/psb_covrl_a.f90 | 4 ++-- base/comm/psb_cscatter.F90 | 2 +- base/comm/psb_cscatter_a.F90 | 4 ++-- base/comm/psb_cspgather.F90 | 2 +- base/comm/psb_dgather.f90 | 2 +- base/comm/psb_dgather_a.f90 | 4 ++-- base/comm/psb_dhalo.f90 | 2 +- base/comm/psb_dhalo_a.f90 | 4 ++-- base/comm/psb_dovrl.f90 | 2 +- base/comm/psb_dovrl_a.f90 | 4 ++-- base/comm/psb_dscatter.F90 | 2 +- base/comm/psb_dscatter_a.F90 | 4 ++-- base/comm/psb_dspgather.F90 | 2 +- base/comm/psb_egather_a.f90 | 4 ++-- base/comm/psb_ehalo_a.f90 | 4 ++-- base/comm/psb_eovrl_a.f90 | 4 ++-- base/comm/psb_escatter_a.F90 | 4 ++-- base/comm/psb_i2gather_a.f90 | 4 ++-- base/comm/psb_i2halo_a.f90 | 4 ++-- base/comm/psb_i2ovrl_a.f90 | 4 ++-- base/comm/psb_i2scatter_a.F90 | 4 ++-- base/comm/psb_igather.f90 | 2 +- base/comm/psb_ihalo.f90 | 2 +- base/comm/psb_iovrl.f90 | 2 +- base/comm/psb_iscatter.F90 | 2 +- base/comm/psb_ispgather.F90 | 2 +- base/comm/psb_lgather.f90 | 2 +- base/comm/psb_lhalo.f90 | 2 +- base/comm/psb_lovrl.f90 | 2 +- base/comm/psb_lscatter.F90 | 2 +- base/comm/psb_lspgather.F90 | 2 +- base/comm/psb_mgather_a.f90 | 4 ++-- base/comm/psb_mhalo_a.f90 | 4 ++-- base/comm/psb_movrl_a.f90 | 4 ++-- base/comm/psb_mscatter_a.F90 | 4 ++-- base/comm/psb_sgather.f90 | 2 +- base/comm/psb_sgather_a.f90 | 4 ++-- base/comm/psb_shalo.f90 | 2 +- base/comm/psb_shalo_a.f90 | 4 ++-- base/comm/psb_sovrl.f90 | 2 +- base/comm/psb_sovrl_a.f90 | 4 ++-- base/comm/psb_sscatter.F90 | 2 +- base/comm/psb_sscatter_a.F90 | 4 ++-- base/comm/psb_sspgather.F90 | 2 +- base/comm/psb_zgather.f90 | 2 +- base/comm/psb_zgather_a.f90 | 4 ++-- base/comm/psb_zhalo.f90 | 2 +- base/comm/psb_zhalo_a.f90 | 4 ++-- base/comm/psb_zovrl.f90 | 2 +- base/comm/psb_zovrl_a.f90 | 4 ++-- base/comm/psb_zscatter.F90 | 2 +- base/comm/psb_zscatter_a.F90 | 4 ++-- base/comm/psb_zspgather.F90 | 2 +- base/modules/auxil/psb_c_hsort_mod.f90 | 2 +- base/modules/auxil/psb_c_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_c_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_c_isort_mod.f90 | 2 +- base/modules/auxil/psb_c_msort_mod.f90 | 2 +- base/modules/auxil/psb_c_qsort_mod.f90 | 2 +- base/modules/auxil/psb_c_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_c_realloc_mod.F90 | 2 +- base/modules/auxil/psb_d_hsort_mod.f90 | 2 +- base/modules/auxil/psb_d_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_d_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_d_isort_mod.f90 | 2 +- base/modules/auxil/psb_d_msort_mod.f90 | 2 +- base/modules/auxil/psb_d_qsort_mod.f90 | 2 +- base/modules/auxil/psb_d_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_d_realloc_mod.F90 | 2 +- base/modules/auxil/psb_e_hsort_mod.f90 | 2 +- base/modules/auxil/psb_e_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_e_isort_mod.f90 | 2 +- base/modules/auxil/psb_e_msort_mod.f90 | 2 +- base/modules/auxil/psb_e_qsort_mod.f90 | 2 +- base/modules/auxil/psb_e_realloc_mod.F90 | 2 +- base/modules/auxil/psb_i2_hsort_mod.f90 | 2 +- base/modules/auxil/psb_i2_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_i2_isort_mod.f90 | 2 +- base/modules/auxil/psb_i2_msort_mod.f90 | 2 +- base/modules/auxil/psb_i2_qsort_mod.f90 | 2 +- base/modules/auxil/psb_i2_realloc_mod.F90 | 2 +- base/modules/auxil/psb_i_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_l_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_m_hsort_mod.f90 | 2 +- base/modules/auxil/psb_m_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_m_isort_mod.f90 | 2 +- base/modules/auxil/psb_m_msort_mod.f90 | 2 +- base/modules/auxil/psb_m_qsort_mod.f90 | 2 +- base/modules/auxil/psb_m_realloc_mod.F90 | 2 +- base/modules/auxil/psb_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_s_hsort_mod.f90 | 2 +- base/modules/auxil/psb_s_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_s_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_s_isort_mod.f90 | 2 +- base/modules/auxil/psb_s_msort_mod.f90 | 2 +- base/modules/auxil/psb_s_qsort_mod.f90 | 2 +- base/modules/auxil/psb_s_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_s_realloc_mod.F90 | 2 +- base/modules/auxil/psb_sort_mod.f90 | 2 +- base/modules/auxil/psb_string_mod.f90 | 2 +- base/modules/auxil/psb_z_hsort_mod.f90 | 2 +- base/modules/auxil/psb_z_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_z_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_z_isort_mod.f90 | 2 +- base/modules/auxil/psb_z_msort_mod.f90 | 2 +- base/modules/auxil/psb_z_qsort_mod.f90 | 2 +- base/modules/auxil/psb_z_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_z_realloc_mod.F90 | 2 +- base/modules/auxil/psi_acx_mod.f90 | 2 +- base/modules/auxil/psi_alcx_mod.f90 | 2 +- base/modules/auxil/psi_c_serial_mod.f90 | 2 +- base/modules/auxil/psi_d_serial_mod.f90 | 2 +- base/modules/auxil/psi_e_serial_mod.f90 | 2 +- base/modules/auxil/psi_i2_serial_mod.f90 | 2 +- base/modules/auxil/psi_lcx_mod.f90 | 2 +- base/modules/auxil/psi_m_serial_mod.f90 | 2 +- base/modules/auxil/psi_s_serial_mod.f90 | 2 +- base/modules/auxil/psi_serial_mod.f90 | 2 +- base/modules/auxil/psi_z_serial_mod.f90 | 2 +- base/modules/comm/psb_base_linmap_mod.f90 | 2 +- base/modules/comm/psb_c_comm_a_mod.f90 | 2 +- base/modules/comm/psb_c_comm_mod.f90 | 2 +- base/modules/comm/psb_c_linmap_mod.f90 | 2 +- base/modules/comm/psb_comm_mod.f90 | 2 +- base/modules/comm/psb_d_comm_a_mod.f90 | 2 +- base/modules/comm/psb_d_comm_mod.f90 | 2 +- base/modules/comm/psb_d_linmap_mod.f90 | 2 +- base/modules/comm/psb_e_comm_a_mod.f90 | 2 +- base/modules/comm/psb_i2_comm_a_mod.f90 | 2 +- base/modules/comm/psb_i_comm_mod.f90 | 2 +- base/modules/comm/psb_l_comm_mod.f90 | 2 +- base/modules/comm/psb_linmap_mod.f90 | 2 +- base/modules/comm/psb_m_comm_a_mod.f90 | 2 +- base/modules/comm/psb_s_comm_a_mod.f90 | 2 +- base/modules/comm/psb_s_comm_mod.f90 | 2 +- base/modules/comm/psb_s_linmap_mod.f90 | 2 +- base/modules/comm/psb_z_comm_a_mod.f90 | 2 +- base/modules/comm/psb_z_comm_mod.f90 | 2 +- base/modules/comm/psb_z_linmap_mod.f90 | 2 +- base/modules/comm/psi_c_comm_a_mod.f90 | 2 +- base/modules/comm/psi_c_comm_v_mod.f90 | 2 +- base/modules/comm/psi_d_comm_a_mod.f90 | 2 +- base/modules/comm/psi_d_comm_v_mod.f90 | 2 +- base/modules/comm/psi_e_comm_a_mod.f90 | 2 +- base/modules/comm/psi_i2_comm_a_mod.f90 | 2 +- base/modules/comm/psi_i_comm_v_mod.f90 | 2 +- base/modules/comm/psi_l_comm_v_mod.f90 | 2 +- base/modules/comm/psi_m_comm_a_mod.f90 | 2 +- base/modules/comm/psi_s_comm_a_mod.f90 | 2 +- base/modules/comm/psi_s_comm_v_mod.f90 | 2 +- base/modules/comm/psi_z_comm_a_mod.f90 | 2 +- base/modules/comm/psi_z_comm_v_mod.f90 | 2 +- base/modules/desc/psb_desc_const_mod.f90 | 2 +- base/modules/desc/psb_desc_mod.F90 | 2 +- base/modules/desc/psb_gen_block_map_mod.F90 | 2 +- base/modules/desc/psb_glist_map_mod.F90 | 2 +- base/modules/desc/psb_hash_map_mod.F90 | 2 +- base/modules/desc/psb_hash_mod.F90 | 2 +- base/modules/desc/psb_indx_map_mod.F90 | 2 +- base/modules/desc/psb_list_map_mod.F90 | 2 +- base/modules/desc/psb_repl_map_mod.F90 | 2 +- base/modules/error.f90 | 2 +- base/modules/penv/psi_c_collective_mod.F90 | 2 +- base/modules/penv/psi_c_p2p_mod.F90 | 2 +- base/modules/penv/psi_collective_mod.F90 | 2 +- base/modules/penv/psi_d_collective_mod.F90 | 2 +- base/modules/penv/psi_d_p2p_mod.F90 | 2 +- base/modules/penv/psi_e_collective_mod.F90 | 2 +- base/modules/penv/psi_e_p2p_mod.F90 | 2 +- base/modules/penv/psi_i2_collective_mod.F90 | 2 +- base/modules/penv/psi_i2_p2p_mod.F90 | 2 +- base/modules/penv/psi_m_collective_mod.F90 | 2 +- base/modules/penv/psi_m_p2p_mod.F90 | 2 +- base/modules/penv/psi_p2p_mod.F90 | 2 +- base/modules/penv/psi_penv_mod.F90 | 2 +- base/modules/penv/psi_s_collective_mod.F90 | 2 +- base/modules/penv/psi_s_p2p_mod.F90 | 2 +- base/modules/penv/psi_z_collective_mod.F90 | 2 +- base/modules/penv/psi_z_p2p_mod.F90 | 2 +- base/modules/psb_base_mod.f90 | 2 +- base/modules/psb_cbind_const_mod.F90 | 2 +- base/modules/psb_check_mod.f90 | 2 +- base/modules/psb_const_mod.F90 | 2 +- base/modules/psb_error_mod.F90 | 2 +- base/modules/psb_realloc_mod.F90 | 2 +- base/modules/psb_timers_mod.f90 | 2 +- base/modules/psblas/psb_c_psblas_mod.F90 | 2 +- base/modules/psblas/psb_d_psblas_mod.F90 | 2 +- base/modules/psblas/psb_psblas_mod.f90 | 2 +- base/modules/psblas/psb_s_psblas_mod.F90 | 2 +- base/modules/psblas/psb_z_psblas_mod.F90 | 2 +- base/modules/psi_c_mod.F90 | 2 +- base/modules/psi_d_mod.F90 | 2 +- base/modules/psi_i_mod.F90 | 2 +- base/modules/psi_l_mod.F90 | 2 +- base/modules/psi_mod.f90 | 2 +- base/modules/psi_s_mod.F90 | 2 +- base/modules/psi_z_mod.F90 | 2 +- base/modules/serial/psb_base_mat_mod.F90 | 2 +- base/modules/serial/psb_c_base_mat_mod.F90 | 2 +- base/modules/serial/psb_c_base_vect_mod.F90 | 2 +- base/modules/serial/psb_c_csc_mat_mod.f90 | 2 +- base/modules/serial/psb_c_csr_mat_mod.f90 | 2 +- base/modules/serial/psb_c_mat_mod.F90 | 2 +- base/modules/serial/psb_c_serial_mod.f90 | 2 +- base/modules/serial/psb_c_vect_mod.F90 | 2 +- base/modules/serial/psb_d_base_mat_mod.F90 | 2 +- base/modules/serial/psb_d_base_vect_mod.F90 | 2 +- base/modules/serial/psb_d_csc_mat_mod.f90 | 2 +- base/modules/serial/psb_d_csr_mat_mod.f90 | 2 +- base/modules/serial/psb_d_mat_mod.F90 | 2 +- base/modules/serial/psb_d_serial_mod.f90 | 2 +- base/modules/serial/psb_d_vect_mod.F90 | 2 +- base/modules/serial/psb_i_base_vect_mod.F90 | 2 +- base/modules/serial/psb_i_vect_mod.F90 | 2 +- base/modules/serial/psb_l_base_vect_mod.F90 | 2 +- base/modules/serial/psb_l_vect_mod.F90 | 2 +- base/modules/serial/psb_s_base_mat_mod.F90 | 2 +- base/modules/serial/psb_s_base_vect_mod.F90 | 2 +- base/modules/serial/psb_s_csc_mat_mod.f90 | 2 +- base/modules/serial/psb_s_csr_mat_mod.f90 | 2 +- base/modules/serial/psb_s_mat_mod.F90 | 2 +- base/modules/serial/psb_s_serial_mod.f90 | 2 +- base/modules/serial/psb_s_vect_mod.F90 | 2 +- base/modules/serial/psb_serial_mod.f90 | 2 +- base/modules/serial/psb_z_base_mat_mod.F90 | 2 +- base/modules/serial/psb_z_base_vect_mod.F90 | 2 +- base/modules/serial/psb_z_csc_mat_mod.f90 | 2 +- base/modules/serial/psb_z_csr_mat_mod.f90 | 2 +- base/modules/serial/psb_z_mat_mod.F90 | 2 +- base/modules/serial/psb_z_serial_mod.f90 | 2 +- base/modules/serial/psb_z_vect_mod.F90 | 2 +- base/modules/tools/psb_c_tools_a_mod.f90 | 2 +- base/modules/tools/psb_c_tools_mod.F90 | 2 +- base/modules/tools/psb_cd_tools_mod.F90 | 2 +- base/modules/tools/psb_d_tools_a_mod.f90 | 2 +- base/modules/tools/psb_d_tools_mod.F90 | 2 +- base/modules/tools/psb_e_tools_a_mod.f90 | 2 +- base/modules/tools/psb_i2_tools_a_mod.f90 | 2 +- base/modules/tools/psb_i_tools_mod.F90 | 2 +- base/modules/tools/psb_l_tools_mod.F90 | 2 +- base/modules/tools/psb_m_tools_a_mod.f90 | 2 +- base/modules/tools/psb_s_tools_a_mod.f90 | 2 +- base/modules/tools/psb_s_tools_mod.F90 | 2 +- base/modules/tools/psb_tools_mod.f90 | 2 +- base/modules/tools/psb_z_tools_a_mod.f90 | 2 +- base/modules/tools/psb_z_tools_mod.F90 | 2 +- base/psblas/psb_cabs_vect.f90 | 2 +- base/psblas/psb_camax.f90 | 8 ++++---- base/psblas/psb_casum.f90 | 6 +++--- base/psblas/psb_caxpby.f90 | 8 ++++---- base/psblas/psb_ccmp_vect.f90 | 2 +- base/psblas/psb_cdiv_vect.f90 | 2 +- base/psblas/psb_cdot.f90 | 8 ++++---- base/psblas/psb_cgetmatinfo.F90 | 2 +- base/psblas/psb_cinv_vect.f90 | 2 +- base/psblas/psb_cmlt_vect.f90 | 2 +- base/psblas/psb_cnrm2.f90 | 6 +++--- base/psblas/psb_cnrmi.f90 | 2 +- base/psblas/psb_cspmm.f90 | 4 ++-- base/psblas/psb_cspnrm1.f90 | 2 +- base/psblas/psb_cspsm.f90 | 2 +- base/psblas/psb_cvmlt.f90 | 2 +- base/psblas/psb_dabs_vect.f90 | 2 +- base/psblas/psb_damax.f90 | 8 ++++---- base/psblas/psb_dasum.f90 | 6 +++--- base/psblas/psb_daxpby.f90 | 8 ++++---- base/psblas/psb_dcmp_vect.f90 | 4 ++-- base/psblas/psb_ddiv_vect.f90 | 2 +- base/psblas/psb_ddot.f90 | 8 ++++---- base/psblas/psb_dgetmatinfo.F90 | 2 +- base/psblas/psb_dinv_vect.f90 | 2 +- base/psblas/psb_dmlt_vect.f90 | 2 +- base/psblas/psb_dnrm2.f90 | 6 +++--- base/psblas/psb_dnrmi.f90 | 2 +- base/psblas/psb_dspmm.f90 | 4 ++-- base/psblas/psb_dspnrm1.f90 | 2 +- base/psblas/psb_dspsm.f90 | 2 +- base/psblas/psb_dvmlt.f90 | 2 +- base/psblas/psb_sabs_vect.f90 | 2 +- base/psblas/psb_samax.f90 | 8 ++++---- base/psblas/psb_sasum.f90 | 6 +++--- base/psblas/psb_saxpby.f90 | 8 ++++---- base/psblas/psb_scmp_vect.f90 | 4 ++-- base/psblas/psb_sdiv_vect.f90 | 2 +- base/psblas/psb_sdot.f90 | 8 ++++---- base/psblas/psb_sgetmatinfo.F90 | 2 +- base/psblas/psb_sinv_vect.f90 | 2 +- base/psblas/psb_smlt_vect.f90 | 2 +- base/psblas/psb_snrm2.f90 | 6 +++--- base/psblas/psb_snrmi.f90 | 2 +- base/psblas/psb_sspmm.f90 | 4 ++-- base/psblas/psb_sspnrm1.f90 | 2 +- base/psblas/psb_sspsm.f90 | 2 +- base/psblas/psb_svmlt.f90 | 2 +- base/psblas/psb_zabs_vect.f90 | 2 +- base/psblas/psb_zamax.f90 | 8 ++++---- base/psblas/psb_zasum.f90 | 6 +++--- base/psblas/psb_zaxpby.f90 | 8 ++++---- base/psblas/psb_zcmp_vect.f90 | 2 +- base/psblas/psb_zdiv_vect.f90 | 2 +- base/psblas/psb_zdot.f90 | 8 ++++---- base/psblas/psb_zgetmatinfo.F90 | 2 +- base/psblas/psb_zinv_vect.f90 | 2 +- base/psblas/psb_zmlt_vect.f90 | 2 +- base/psblas/psb_znrm2.f90 | 6 +++--- base/psblas/psb_znrmi.f90 | 2 +- base/psblas/psb_zspmm.f90 | 4 ++-- base/psblas/psb_zspnrm1.f90 | 2 +- base/psblas/psb_zspsm.f90 | 2 +- base/psblas/psb_zvmlt.f90 | 2 +- base/serial/impl/psb_base_mat_impl.f90 | 2 +- base/serial/impl/psb_c_base_mat_impl.F90 | 2 +- base/serial/impl/psb_c_coo_impl.F90 | 2 +- base/serial/impl/psb_c_csc_impl.F90 | 2 +- base/serial/impl/psb_c_csr_impl.F90 | 2 +- base/serial/impl/psb_c_mat_impl.F90 | 2 +- base/serial/impl/psb_c_rb_idx_tree_impl.F90 | 2 +- base/serial/impl/psb_d_base_mat_impl.F90 | 2 +- base/serial/impl/psb_d_coo_impl.F90 | 2 +- base/serial/impl/psb_d_csc_impl.F90 | 2 +- base/serial/impl/psb_d_csr_impl.F90 | 2 +- base/serial/impl/psb_d_mat_impl.F90 | 2 +- base/serial/impl/psb_d_rb_idx_tree_impl.F90 | 2 +- base/serial/impl/psb_s_base_mat_impl.F90 | 2 +- base/serial/impl/psb_s_coo_impl.F90 | 2 +- base/serial/impl/psb_s_csc_impl.F90 | 2 +- base/serial/impl/psb_s_csr_impl.F90 | 2 +- base/serial/impl/psb_s_mat_impl.F90 | 2 +- base/serial/impl/psb_s_rb_idx_tree_impl.F90 | 2 +- base/serial/impl/psb_z_base_mat_impl.F90 | 2 +- base/serial/impl/psb_z_coo_impl.F90 | 2 +- base/serial/impl/psb_z_csc_impl.F90 | 2 +- base/serial/impl/psb_z_csr_impl.F90 | 2 +- base/serial/impl/psb_z_mat_impl.F90 | 2 +- base/serial/impl/psb_z_rb_idx_tree_impl.F90 | 2 +- base/serial/lsmmp.f90 | 2 +- base/serial/psb_aspxpby.f90 | 2 +- base/serial/psb_camax_s.f90 | 2 +- base/serial/psb_casum_s.f90 | 2 +- base/serial/psb_cgeprt.f90 | 2 +- base/serial/psb_cnumbmm.f90 | 2 +- base/serial/psb_crwextd.f90 | 2 +- base/serial/psb_cspspmm.F90 | 2 +- base/serial/psb_csymbmm.f90 | 2 +- base/serial/psb_damax_s.f90 | 2 +- base/serial/psb_dasum_s.f90 | 2 +- base/serial/psb_dgeprt.f90 | 2 +- base/serial/psb_dnumbmm.f90 | 2 +- base/serial/psb_drwextd.f90 | 2 +- base/serial/psb_dspspmm.F90 | 2 +- base/serial/psb_dsymbmm.f90 | 2 +- base/serial/psb_lsame.f90 | 2 +- base/serial/psb_samax_s.f90 | 2 +- base/serial/psb_sasum_s.f90 | 2 +- base/serial/psb_sgeprt.f90 | 2 +- base/serial/psb_snumbmm.f90 | 2 +- base/serial/psb_spdot_srtd.f90 | 2 +- base/serial/psb_spge_dot.f90 | 2 +- base/serial/psb_srwextd.f90 | 2 +- base/serial/psb_sspspmm.F90 | 2 +- base/serial/psb_ssymbmm.f90 | 2 +- base/serial/psb_zamax_s.f90 | 2 +- base/serial/psb_zasum_s.f90 | 2 +- base/serial/psb_zgeprt.f90 | 2 +- base/serial/psb_znumbmm.f90 | 2 +- base/serial/psb_zrwextd.f90 | 2 +- base/serial/psb_zspspmm.F90 | 2 +- base/serial/psb_zsymbmm.f90 | 2 +- base/serial/psi_c_serial_impl.F90 | 6 +++--- base/serial/psi_d_serial_impl.F90 | 6 +++--- base/serial/psi_e_serial_impl.F90 | 6 +++--- base/serial/psi_i2_serial_impl.F90 | 6 +++--- base/serial/psi_m_serial_impl.F90 | 6 +++--- base/serial/psi_s_serial_impl.F90 | 6 +++--- base/serial/psi_z_serial_impl.F90 | 6 +++--- base/serial/smmp.f90 | 2 +- base/serial/sort/psb_c_hsort_impl.f90 | 2 +- base/serial/sort/psb_c_isort_impl.f90 | 2 +- base/serial/sort/psb_c_msort_impl.f90 | 2 +- base/serial/sort/psb_c_qsort_impl.f90 | 2 +- base/serial/sort/psb_d_hsort_impl.f90 | 2 +- base/serial/sort/psb_d_isort_impl.f90 | 2 +- base/serial/sort/psb_d_msort_impl.f90 | 2 +- base/serial/sort/psb_d_qsort_impl.f90 | 2 +- base/serial/sort/psb_e_hsort_impl.f90 | 2 +- base/serial/sort/psb_e_isort_impl.f90 | 2 +- base/serial/sort/psb_e_msort_impl.f90 | 2 +- base/serial/sort/psb_e_qsort_impl.f90 | 2 +- base/serial/sort/psb_m_hsort_impl.f90 | 2 +- base/serial/sort/psb_m_isort_impl.f90 | 2 +- base/serial/sort/psb_m_msort_impl.f90 | 2 +- base/serial/sort/psb_m_qsort_impl.f90 | 2 +- base/serial/sort/psb_s_hsort_impl.f90 | 2 +- base/serial/sort/psb_s_isort_impl.f90 | 2 +- base/serial/sort/psb_s_msort_impl.f90 | 2 +- base/serial/sort/psb_s_qsort_impl.f90 | 2 +- base/serial/sort/psb_z_hsort_impl.f90 | 2 +- base/serial/sort/psb_z_isort_impl.f90 | 2 +- base/serial/sort/psb_z_msort_impl.f90 | 2 +- base/serial/sort/psb_z_qsort_impl.f90 | 2 +- base/tools/psb_c_glob_transpose.F90 | 2 +- base/tools/psb_c_map.f90 | 2 +- base/tools/psb_c_par_csr_spspmm.f90 | 2 +- base/tools/psb_c_remap.F90 | 2 +- base/tools/psb_c_remote_mat.F90 | 2 +- base/tools/psb_c_remote_vect.F90 | 2 +- base/tools/psb_callc.f90 | 2 +- base/tools/psb_callc_a.f90 | 4 ++-- base/tools/psb_casb.f90 | 2 +- base/tools/psb_casb_a.f90 | 4 ++-- base/tools/psb_ccdbldext.F90 | 2 +- base/tools/psb_cd_inloc.f90 | 2 +- base/tools/psb_cd_lstext.f90 | 2 +- base/tools/psb_cd_reinit.f90 | 2 +- base/tools/psb_cd_remap.F90 | 2 +- base/tools/psb_cd_renum_block.F90 | 2 +- base/tools/psb_cd_set_bld.f90 | 2 +- base/tools/psb_cd_switch_ovl_indxmap.f90 | 2 +- base/tools/psb_cdall.f90 | 2 +- base/tools/psb_cdals.f90 | 2 +- base/tools/psb_cdalv.f90 | 2 +- base/tools/psb_cdcpy.F90 | 2 +- base/tools/psb_cdins.F90 | 2 +- base/tools/psb_cdprt.f90 | 2 +- base/tools/psb_cdren.f90 | 2 +- base/tools/psb_cdrep.f90 | 2 +- base/tools/psb_cfree.f90 | 2 +- base/tools/psb_cfree_a.f90 | 2 +- base/tools/psb_cgetelem.f90 | 2 +- base/tools/psb_cins.f90 | 2 +- base/tools/psb_cins_a.f90 | 4 ++-- base/tools/psb_cspalloc.f90 | 2 +- base/tools/psb_cspasb.f90 | 2 +- base/tools/psb_cspfree.f90 | 2 +- base/tools/psb_csphalo.F90 | 2 +- base/tools/psb_cspins.F90 | 2 +- base/tools/psb_csprn.f90 | 2 +- base/tools/psb_d_glob_transpose.F90 | 2 +- base/tools/psb_d_map.f90 | 2 +- base/tools/psb_d_par_csr_spspmm.f90 | 2 +- base/tools/psb_d_remap.F90 | 2 +- base/tools/psb_d_remote_mat.F90 | 2 +- base/tools/psb_d_remote_vect.F90 | 2 +- base/tools/psb_dallc.f90 | 2 +- base/tools/psb_dallc_a.f90 | 4 ++-- base/tools/psb_dasb.f90 | 2 +- base/tools/psb_dasb_a.f90 | 4 ++-- base/tools/psb_dcdbldext.F90 | 2 +- base/tools/psb_dfree.f90 | 2 +- base/tools/psb_dfree_a.f90 | 2 +- base/tools/psb_dgetelem.f90 | 2 +- base/tools/psb_dins.f90 | 2 +- base/tools/psb_dins_a.f90 | 4 ++-- base/tools/psb_dspalloc.f90 | 2 +- base/tools/psb_dspasb.f90 | 2 +- base/tools/psb_dspfree.f90 | 2 +- base/tools/psb_dsphalo.F90 | 2 +- base/tools/psb_dspins.F90 | 2 +- base/tools/psb_dsprn.f90 | 2 +- base/tools/psb_e_remote_vect.F90 | 2 +- base/tools/psb_eallc_a.f90 | 4 ++-- base/tools/psb_easb_a.f90 | 4 ++-- base/tools/psb_efree_a.f90 | 2 +- base/tools/psb_eins_a.f90 | 4 ++-- base/tools/psb_get_overlap.f90 | 2 +- base/tools/psb_glob_to_loc.f90 | 4 ++-- base/tools/psb_i2_remote_vect.F90 | 2 +- base/tools/psb_i2allc_a.f90 | 4 ++-- base/tools/psb_i2asb_a.f90 | 4 ++-- base/tools/psb_i2free_a.f90 | 2 +- base/tools/psb_i2ins_a.f90 | 4 ++-- base/tools/psb_iallc.f90 | 2 +- base/tools/psb_iasb.f90 | 2 +- base/tools/psb_icdasb.F90 | 2 +- base/tools/psb_ifree.f90 | 2 +- base/tools/psb_iins.f90 | 2 +- base/tools/psb_lallc.f90 | 2 +- base/tools/psb_lasb.f90 | 2 +- base/tools/psb_lfree.f90 | 2 +- base/tools/psb_lins.f90 | 2 +- base/tools/psb_loc_to_glob.f90 | 4 ++-- base/tools/psb_m_remote_vect.F90 | 2 +- base/tools/psb_mallc_a.f90 | 4 ++-- base/tools/psb_masb_a.f90 | 4 ++-- base/tools/psb_mfree_a.f90 | 2 +- base/tools/psb_mins_a.f90 | 4 ++-- base/tools/psb_s_glob_transpose.F90 | 2 +- base/tools/psb_s_map.f90 | 2 +- base/tools/psb_s_par_csr_spspmm.f90 | 2 +- base/tools/psb_s_remap.F90 | 2 +- base/tools/psb_s_remote_mat.F90 | 2 +- base/tools/psb_s_remote_vect.F90 | 2 +- base/tools/psb_sallc.f90 | 2 +- base/tools/psb_sallc_a.f90 | 4 ++-- base/tools/psb_sasb.f90 | 2 +- base/tools/psb_sasb_a.f90 | 4 ++-- base/tools/psb_scdbldext.F90 | 2 +- base/tools/psb_sfree.f90 | 2 +- base/tools/psb_sfree_a.f90 | 2 +- base/tools/psb_sgetelem.f90 | 2 +- base/tools/psb_sins.f90 | 2 +- base/tools/psb_sins_a.f90 | 4 ++-- base/tools/psb_sspalloc.f90 | 2 +- base/tools/psb_sspasb.f90 | 2 +- base/tools/psb_sspfree.f90 | 2 +- base/tools/psb_ssphalo.F90 | 2 +- base/tools/psb_sspins.F90 | 2 +- base/tools/psb_ssprn.f90 | 2 +- base/tools/psb_z_glob_transpose.F90 | 2 +- base/tools/psb_z_map.f90 | 2 +- base/tools/psb_z_par_csr_spspmm.f90 | 2 +- base/tools/psb_z_remap.F90 | 2 +- base/tools/psb_z_remote_mat.F90 | 2 +- base/tools/psb_z_remote_vect.F90 | 2 +- base/tools/psb_zallc.f90 | 2 +- base/tools/psb_zallc_a.f90 | 4 ++-- base/tools/psb_zasb.f90 | 2 +- base/tools/psb_zasb_a.f90 | 4 ++-- base/tools/psb_zcdbldext.F90 | 2 +- base/tools/psb_zfree.f90 | 2 +- base/tools/psb_zfree_a.f90 | 2 +- base/tools/psb_zgetelem.f90 | 2 +- base/tools/psb_zins.f90 | 2 +- base/tools/psb_zins_a.f90 | 4 ++-- base/tools/psb_zspalloc.f90 | 2 +- base/tools/psb_zspasb.f90 | 2 +- base/tools/psb_zspfree.f90 | 2 +- base/tools/psb_zsphalo.F90 | 2 +- base/tools/psb_zspins.F90 | 2 +- base/tools/psb_zsprn.f90 | 2 +- cbind/test/pdegen/pdegen3dc.c | 2 +- cuda/{License-spgpu.md => License-spgpu} | 0 cuda/Makefile | 0 cuda/base_cusparse_mod.F90 | 2 +- cuda/c_cusparse_mod.F90 | 2 +- cuda/ccusparse.c | 2 +- cuda/ccusparse.h | 2 +- cuda/cintrf.h | 2 +- cuda/core_mod.f90 | 2 +- cuda/cuda_util.c | 2 +- cuda/cuda_util.h | 2 +- cuda/cusparse_mod.F90 | 2 +- cuda/cvectordev.c | 2 +- cuda/cvectordev.h | 2 +- cuda/d_cusparse_mod.F90 | 2 +- cuda/dcusparse.c | 2 +- cuda/dcusparse.h | 2 +- cuda/diagdev.c | 2 +- cuda/diagdev.h | 2 +- cuda/diagdev_mod.F90 | 2 +- cuda/dnsdev.c | 2 +- cuda/dnsdev.h | 2 +- cuda/dnsdev_mod.F90 | 2 +- cuda/dvectordev.c | 2 +- cuda/dvectordev.h | 2 +- cuda/elldev.c | 2 +- cuda/elldev.h | 2 +- cuda/elldev_mod.F90 | 2 +- cuda/fcusparse.c | 2 +- cuda/fcusparse.h | 2 +- cuda/fcusparse_dat.h | 2 +- cuda/fcusparse_fct.h | 2 +- cuda/hdiagdev.c | 2 +- cuda/hdiagdev.h | 2 +- cuda/hdiagdev_mod.F90 | 2 +- cuda/hlldev.c | 2 +- cuda/hlldev.h | 2 +- cuda/hlldev_mod.F90 | 2 +- cuda/impl/Makefile | 0 cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_csmm.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_from_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_mold.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_scal.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_scals.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_diag_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_diag_mold.F90 | 2 +- cuda/impl/psb_c_cuda_diag_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_diag_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 | 2 +- cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_c_cuda_elg_asb.f90 | 2 +- cuda/impl/psb_c_cuda_elg_csmm.F90 | 2 +- cuda/impl/psb_c_cuda_elg_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_elg_csput.F90 | 2 +- cuda/impl/psb_c_cuda_elg_from_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_c_cuda_elg_mold.F90 | 2 +- cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 | 2 +- cuda/impl/psb_c_cuda_elg_scal.F90 | 2 +- cuda/impl/psb_c_cuda_elg_scals.F90 | 2 +- cuda/impl/psb_c_cuda_elg_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_elg_trim.f90 | 2 +- cuda/impl/psb_c_cuda_elg_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_hdiag_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_hdiag_mold.F90 | 2 +- cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_csmm.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_from_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_mold.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_scal.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_scals.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_csmm.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_mold.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_scal.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_scals.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_csmm.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_from_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_mold.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_scal.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_scals.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_diag_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_diag_mold.F90 | 2 +- cuda/impl/psb_d_cuda_diag_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_diag_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 | 2 +- cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_d_cuda_elg_asb.f90 | 2 +- cuda/impl/psb_d_cuda_elg_csmm.F90 | 2 +- cuda/impl/psb_d_cuda_elg_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_elg_csput.F90 | 2 +- cuda/impl/psb_d_cuda_elg_from_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_d_cuda_elg_mold.F90 | 2 +- cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 | 2 +- cuda/impl/psb_d_cuda_elg_scal.F90 | 2 +- cuda/impl/psb_d_cuda_elg_scals.F90 | 2 +- cuda/impl/psb_d_cuda_elg_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_elg_trim.f90 | 2 +- cuda/impl/psb_d_cuda_elg_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_hdiag_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_hdiag_mold.F90 | 2 +- cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_csmm.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_from_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_mold.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_scal.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_scals.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_csmm.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_mold.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_scal.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_scals.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_csmm.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_from_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_mold.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_scal.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_scals.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_diag_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_diag_mold.F90 | 2 +- cuda/impl/psb_s_cuda_diag_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_diag_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 | 2 +- cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_s_cuda_elg_asb.f90 | 2 +- cuda/impl/psb_s_cuda_elg_csmm.F90 | 2 +- cuda/impl/psb_s_cuda_elg_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_elg_csput.F90 | 2 +- cuda/impl/psb_s_cuda_elg_from_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_s_cuda_elg_mold.F90 | 2 +- cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 | 2 +- cuda/impl/psb_s_cuda_elg_scal.F90 | 2 +- cuda/impl/psb_s_cuda_elg_scals.F90 | 2 +- cuda/impl/psb_s_cuda_elg_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_elg_trim.f90 | 2 +- cuda/impl/psb_s_cuda_elg_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_hdiag_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_hdiag_mold.F90 | 2 +- cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_csmm.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_from_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_mold.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_scal.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_scals.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_csmm.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_mold.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_scal.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_scals.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_csmm.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_from_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_mold.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_scal.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_scals.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_diag_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_diag_mold.F90 | 2 +- cuda/impl/psb_z_cuda_diag_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_diag_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 | 2 +- cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_z_cuda_elg_asb.f90 | 2 +- cuda/impl/psb_z_cuda_elg_csmm.F90 | 2 +- cuda/impl/psb_z_cuda_elg_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_elg_csput.F90 | 2 +- cuda/impl/psb_z_cuda_elg_from_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_z_cuda_elg_mold.F90 | 2 +- cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 | 2 +- cuda/impl/psb_z_cuda_elg_scal.F90 | 2 +- cuda/impl/psb_z_cuda_elg_scals.F90 | 2 +- cuda/impl/psb_z_cuda_elg_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_elg_trim.f90 | 2 +- cuda/impl/psb_z_cuda_elg_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_hdiag_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_hdiag_mold.F90 | 2 +- cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_csmm.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_from_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_mold.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_scal.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_scals.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_csmm.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_mold.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_scal.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_scals.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 | 2 +- cuda/ivectordev.c | 2 +- cuda/ivectordev.h | 2 +- cuda/psb_base_vectordev_mod.F90 | 2 +- cuda/psb_c_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_c_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_c_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_vect_mod.F90 | 2 +- cuda/psb_c_vectordev_mod.F90 | 2 +- cuda/psb_cuda_env_mod.F90 | 2 +- cuda/psb_cuda_mod.F90 | 2 +- cuda/psb_d_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_d_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_d_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_vect_mod.F90 | 2 +- cuda/psb_d_vectordev_mod.F90 | 2 +- cuda/psb_i_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_i_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_i_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_vect_mod.F90 | 2 +- cuda/psb_i_vectordev_mod.F90 | 2 +- cuda/psb_s_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_s_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_s_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_vect_mod.F90 | 2 +- cuda/psb_s_vectordev_mod.F90 | 2 +- cuda/psb_z_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_z_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_z_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_vect_mod.F90 | 2 +- cuda/psb_z_vectordev_mod.F90 | 2 +- cuda/s_cusparse_mod.F90 | 2 +- cuda/scusparse.c | 2 +- cuda/scusparse.h | 2 +- cuda/spgpu/coo_conv.h | 8 -------- cuda/spgpu/core.c | 8 -------- cuda/spgpu/core.h | 16 ---------------- cuda/spgpu/debug.h | 8 -------- cuda/spgpu/dia.h | 8 -------- cuda/spgpu/dia_conv.h | 8 -------- cuda/spgpu/ell.h | 8 -------- cuda/spgpu/ell_conv.h | 8 -------- cuda/spgpu/hdia.h | 8 -------- cuda/spgpu/hdia_conv.h | 8 -------- cuda/spgpu/hell.h | 8 -------- cuda/spgpu/hell_conv.h | 8 -------- cuda/spgpu/kernels/abs_base.cuh | 8 -------- cuda/spgpu/kernels/amax_base.cuh | 8 -------- cuda/spgpu/kernels/asum_base.cuh | 8 -------- cuda/spgpu/kernels/axy_base.cuh | 8 -------- cuda/spgpu/kernels/cabs.cu | 8 -------- cuda/spgpu/kernels/camax.cu | 8 -------- cuda/spgpu/kernels/casum.cu | 8 -------- cuda/spgpu/kernels/caxpby.cu | 8 -------- cuda/spgpu/kernels/caxy.cu | 8 -------- cuda/spgpu/kernels/cdot.cu | 8 -------- cuda/spgpu/kernels/cgath.cu | 8 -------- cuda/spgpu/kernels/cnrm2.cu | 8 -------- cuda/spgpu/kernels/cscal.cu | 8 -------- cuda/spgpu/kernels/cscat.cu | 8 -------- cuda/spgpu/kernels/csetscal.cu | 8 -------- cuda/spgpu/kernels/cudadebug.h | 8 -------- cuda/spgpu/kernels/cudalang.h | 8 -------- cuda/spgpu/kernels/cupd_xyz.cu | 8 -------- cuda/spgpu/kernels/cxyzw.cu | 8 -------- cuda/spgpu/kernels/dabs.cu | 8 -------- cuda/spgpu/kernels/damax.cu | 8 -------- cuda/spgpu/kernels/dasum.cu | 8 -------- cuda/spgpu/kernels/daxpby.cu | 8 -------- cuda/spgpu/kernels/daxy.cu | 8 -------- cuda/spgpu/kernels/ddot.cu | 8 -------- cuda/spgpu/kernels/dgath.cu | 8 -------- cuda/spgpu/kernels/dia_cspmv.cu | 8 -------- cuda/spgpu/kernels/dia_dspmv.cu | 8 -------- cuda/spgpu/kernels/dia_spmv_base.cuh | 8 -------- cuda/spgpu/kernels/dia_spmv_base_template.cuh | 8 -------- cuda/spgpu/kernels/dia_sspmv.cu | 8 -------- cuda/spgpu/kernels/dia_zspmv.cu | 8 -------- cuda/spgpu/kernels/dnrm2.cu | 8 -------- cuda/spgpu/kernels/dscal.cu | 8 -------- cuda/spgpu/kernels/dscat.cu | 8 -------- cuda/spgpu/kernels/dsetscal.cu | 8 -------- cuda/spgpu/kernels/dupd_xyz.cu | 8 -------- cuda/spgpu/kernels/dxyzw.cu | 8 -------- cuda/spgpu/kernels/ell_ccsput.cu | 8 -------- cuda/spgpu/kernels/ell_cspmv.cu | 8 -------- cuda/spgpu/kernels/ell_csput_base.cuh | 8 -------- cuda/spgpu/kernels/ell_dcsput.cu | 8 -------- cuda/spgpu/kernels/ell_dspmv.cu | 8 -------- cuda/spgpu/kernels/ell_scsput.cu | 8 -------- cuda/spgpu/kernels/ell_spmv_base.cuh | 8 -------- cuda/spgpu/kernels/ell_spmv_base_nors.cuh | 8 -------- cuda/spgpu/kernels/ell_spmv_base_template.cuh | 8 -------- cuda/spgpu/kernels/ell_sspmv.cu | 8 -------- cuda/spgpu/kernels/ell_zcsput.cu | 8 -------- cuda/spgpu/kernels/ell_zspmv.cu | 8 -------- cuda/spgpu/kernels/gath_base.cuh | 8 -------- cuda/spgpu/kernels/hdia_cspmv.cu | 8 -------- cuda/spgpu/kernels/hdia_dspmv.cu | 8 -------- cuda/spgpu/kernels/hdia_spmv_base.cuh | 8 -------- cuda/spgpu/kernels/hdia_spmv_base_template.cuh | 8 -------- cuda/spgpu/kernels/hdia_sspmv.cu | 8 -------- cuda/spgpu/kernels/hdia_zspmv.cu | 8 -------- cuda/spgpu/kernels/hell_cspmv.cu | 8 -------- cuda/spgpu/kernels/hell_dspmv.cu | 8 -------- cuda/spgpu/kernels/hell_spmv_base.cuh | 8 -------- cuda/spgpu/kernels/hell_spmv_base_template.cuh | 8 -------- cuda/spgpu/kernels/hell_sspmv.cu | 8 -------- cuda/spgpu/kernels/hell_zspmv.cu | 8 -------- cuda/spgpu/kernels/igath.cu | 8 -------- cuda/spgpu/kernels/iscat.cu | 8 -------- cuda/spgpu/kernels/isetscal.cu | 8 -------- cuda/spgpu/kernels/sabs.cu | 8 -------- cuda/spgpu/kernels/samax.cu | 8 -------- cuda/spgpu/kernels/sasum.cu | 8 -------- cuda/spgpu/kernels/saxpby.cu | 8 -------- cuda/spgpu/kernels/saxy.cu | 8 -------- cuda/spgpu/kernels/scal_base.cuh | 8 -------- cuda/spgpu/kernels/scat_base.cuh | 8 -------- cuda/spgpu/kernels/sdot.cu | 8 -------- cuda/spgpu/kernels/setscal_base.cuh | 8 -------- cuda/spgpu/kernels/sgath.cu | 8 -------- cuda/spgpu/kernels/snrm2.cu | 8 -------- cuda/spgpu/kernels/sscal.cu | 8 -------- cuda/spgpu/kernels/sscat.cu | 8 -------- cuda/spgpu/kernels/ssetscal.cu | 8 -------- cuda/spgpu/kernels/supd_xyz.cu | 8 -------- cuda/spgpu/kernels/sxyzw.cu | 8 -------- cuda/spgpu/kernels/zabs.cu | 8 -------- cuda/spgpu/kernels/zamax.cu | 8 -------- cuda/spgpu/kernels/zasum.cu | 8 -------- cuda/spgpu/kernels/zaxpby.cu | 8 -------- cuda/spgpu/kernels/zaxy.cu | 8 -------- cuda/spgpu/kernels/zdot.cu | 8 -------- cuda/spgpu/kernels/zgath.cu | 8 -------- cuda/spgpu/kernels/znrm2.cu | 8 -------- cuda/spgpu/kernels/zscal.cu | 8 -------- cuda/spgpu/kernels/zscat.cu | 8 -------- cuda/spgpu/kernels/zsetscal.cu | 8 -------- cuda/spgpu/kernels/zupd_xyz.cu | 8 -------- cuda/spgpu/kernels/zxyzw.cu | 8 -------- cuda/spgpu/vector.h | 8 -------- cuda/svectordev.c | 2 +- cuda/svectordev.h | 2 +- cuda/vectordev.c | 2 +- cuda/vectordev.h | 2 +- cuda/z_cusparse_mod.F90 | 2 +- cuda/zcusparse.c | 2 +- cuda/zcusparse.h | 2 +- cuda/zvectordev.c | 2 +- cuda/zvectordev.h | 2 +- ext/Makefile | 0 ext/impl/Makefile | 0 ext/impl/psb_c_cp_dia_from_coo.f90 | 2 +- ext/impl/psb_c_cp_dia_to_coo.f90 | 2 +- ext/impl/psb_c_cp_ell_from_coo.f90 | 2 +- ext/impl/psb_c_cp_ell_from_fmt.f90 | 2 +- ext/impl/psb_c_cp_ell_to_coo.f90 | 2 +- ext/impl/psb_c_cp_ell_to_fmt.f90 | 2 +- ext/impl/psb_c_cp_hdia_from_coo.f90 | 2 +- ext/impl/psb_c_cp_hdia_to_coo.f90 | 2 +- ext/impl/psb_c_cp_hll_from_coo.f90 | 2 +- ext/impl/psb_c_cp_hll_from_fmt.f90 | 2 +- ext/impl/psb_c_cp_hll_to_coo.f90 | 2 +- ext/impl/psb_c_cp_hll_to_fmt.f90 | 2 +- ext/impl/psb_c_dia_aclsum.f90 | 2 +- ext/impl/psb_c_dia_allocate_mnnz.f90 | 2 +- ext/impl/psb_c_dia_arwsum.f90 | 2 +- ext/impl/psb_c_dia_colsum.f90 | 2 +- ext/impl/psb_c_dia_csgetptn.f90 | 2 +- ext/impl/psb_c_dia_csgetrow.f90 | 2 +- ext/impl/psb_c_dia_csmm.f90 | 2 +- ext/impl/psb_c_dia_csmv.f90 | 2 +- ext/impl/psb_c_dia_get_diag.f90 | 2 +- ext/impl/psb_c_dia_maxval.f90 | 2 +- ext/impl/psb_c_dia_mold.f90 | 2 +- ext/impl/psb_c_dia_print.f90 | 2 +- ext/impl/psb_c_dia_reallocate_nz.f90 | 2 +- ext/impl/psb_c_dia_reinit.f90 | 2 +- ext/impl/psb_c_dia_rowsum.f90 | 2 +- ext/impl/psb_c_dia_scal.f90 | 2 +- ext/impl/psb_c_dia_scals.f90 | 2 +- ext/impl/psb_c_ell_aclsum.f90 | 2 +- ext/impl/psb_c_ell_allocate_mnnz.f90 | 2 +- ext/impl/psb_c_ell_arwsum.f90 | 2 +- ext/impl/psb_c_ell_colsum.f90 | 2 +- ext/impl/psb_c_ell_csgetblk.f90 | 2 +- ext/impl/psb_c_ell_csgetptn.f90 | 2 +- ext/impl/psb_c_ell_csgetrow.f90 | 2 +- ext/impl/psb_c_ell_csmm.f90 | 2 +- ext/impl/psb_c_ell_csmv.f90 | 2 +- ext/impl/psb_c_ell_csnm1.f90 | 2 +- ext/impl/psb_c_ell_csnmi.f90 | 2 +- ext/impl/psb_c_ell_csput.f90 | 2 +- ext/impl/psb_c_ell_cssm.f90 | 2 +- ext/impl/psb_c_ell_cssv.f90 | 2 +- ext/impl/psb_c_ell_get_diag.f90 | 2 +- ext/impl/psb_c_ell_maxval.f90 | 2 +- ext/impl/psb_c_ell_mold.f90 | 2 +- ext/impl/psb_c_ell_print.f90 | 2 +- ext/impl/psb_c_ell_reallocate_nz.f90 | 2 +- ext/impl/psb_c_ell_reinit.f90 | 2 +- ext/impl/psb_c_ell_rowsum.f90 | 2 +- ext/impl/psb_c_ell_scal.f90 | 2 +- ext/impl/psb_c_ell_scals.f90 | 2 +- ext/impl/psb_c_ell_trim.f90 | 2 +- ext/impl/psb_c_hdia_allocate_mnnz.f90 | 2 +- ext/impl/psb_c_hdia_csmv.f90 | 2 +- ext/impl/psb_c_hdia_mold.f90 | 2 +- ext/impl/psb_c_hdia_print.f90 | 2 +- ext/impl/psb_c_hll_aclsum.f90 | 2 +- ext/impl/psb_c_hll_allocate_mnnz.f90 | 2 +- ext/impl/psb_c_hll_arwsum.f90 | 2 +- ext/impl/psb_c_hll_colsum.f90 | 2 +- ext/impl/psb_c_hll_csgetblk.f90 | 2 +- ext/impl/psb_c_hll_csgetptn.f90 | 2 +- ext/impl/psb_c_hll_csgetrow.f90 | 2 +- ext/impl/psb_c_hll_csmm.f90 | 2 +- ext/impl/psb_c_hll_csmv.f90 | 2 +- ext/impl/psb_c_hll_csnm1.f90 | 2 +- ext/impl/psb_c_hll_csnmi.f90 | 2 +- ext/impl/psb_c_hll_csput.f90 | 2 +- ext/impl/psb_c_hll_cssm.f90 | 2 +- ext/impl/psb_c_hll_cssv.f90 | 2 +- ext/impl/psb_c_hll_get_diag.f90 | 2 +- ext/impl/psb_c_hll_maxval.f90 | 2 +- ext/impl/psb_c_hll_mold.f90 | 2 +- ext/impl/psb_c_hll_print.f90 | 2 +- ext/impl/psb_c_hll_reallocate_nz.f90 | 2 +- ext/impl/psb_c_hll_reinit.f90 | 2 +- ext/impl/psb_c_hll_rowsum.f90 | 2 +- ext/impl/psb_c_hll_scal.f90 | 2 +- ext/impl/psb_c_hll_scals.f90 | 2 +- ext/impl/psb_c_mv_dia_from_coo.f90 | 2 +- ext/impl/psb_c_mv_dia_to_coo.f90 | 2 +- ext/impl/psb_c_mv_ell_from_coo.f90 | 2 +- ext/impl/psb_c_mv_ell_from_fmt.f90 | 2 +- ext/impl/psb_c_mv_ell_to_coo.f90 | 2 +- ext/impl/psb_c_mv_ell_to_fmt.f90 | 2 +- ext/impl/psb_c_mv_hdia_from_coo.f90 | 2 +- ext/impl/psb_c_mv_hdia_to_coo.f90 | 2 +- ext/impl/psb_c_mv_hll_from_coo.f90 | 2 +- ext/impl/psb_c_mv_hll_from_fmt.f90 | 2 +- ext/impl/psb_c_mv_hll_to_coo.f90 | 2 +- ext/impl/psb_c_mv_hll_to_fmt.f90 | 2 +- ext/impl/psb_d_cp_dia_from_coo.f90 | 2 +- ext/impl/psb_d_cp_dia_to_coo.f90 | 2 +- ext/impl/psb_d_cp_ell_from_coo.f90 | 2 +- ext/impl/psb_d_cp_ell_from_fmt.f90 | 2 +- ext/impl/psb_d_cp_ell_to_coo.f90 | 2 +- ext/impl/psb_d_cp_ell_to_fmt.f90 | 2 +- ext/impl/psb_d_cp_hdia_from_coo.f90 | 2 +- ext/impl/psb_d_cp_hdia_to_coo.f90 | 2 +- ext/impl/psb_d_cp_hll_from_coo.f90 | 2 +- ext/impl/psb_d_cp_hll_from_fmt.f90 | 2 +- ext/impl/psb_d_cp_hll_to_coo.f90 | 2 +- ext/impl/psb_d_cp_hll_to_fmt.f90 | 2 +- ext/impl/psb_d_dia_aclsum.f90 | 2 +- ext/impl/psb_d_dia_allocate_mnnz.f90 | 2 +- ext/impl/psb_d_dia_arwsum.f90 | 2 +- ext/impl/psb_d_dia_colsum.f90 | 2 +- ext/impl/psb_d_dia_csgetptn.f90 | 2 +- ext/impl/psb_d_dia_csgetrow.f90 | 2 +- ext/impl/psb_d_dia_csmm.f90 | 2 +- ext/impl/psb_d_dia_csmv.f90 | 2 +- ext/impl/psb_d_dia_get_diag.f90 | 2 +- ext/impl/psb_d_dia_maxval.f90 | 2 +- ext/impl/psb_d_dia_mold.f90 | 2 +- ext/impl/psb_d_dia_print.f90 | 2 +- ext/impl/psb_d_dia_reallocate_nz.f90 | 2 +- ext/impl/psb_d_dia_reinit.f90 | 2 +- ext/impl/psb_d_dia_rowsum.f90 | 2 +- ext/impl/psb_d_dia_scal.f90 | 2 +- ext/impl/psb_d_dia_scals.f90 | 2 +- ext/impl/psb_d_ell_aclsum.f90 | 2 +- ext/impl/psb_d_ell_allocate_mnnz.f90 | 2 +- ext/impl/psb_d_ell_arwsum.f90 | 2 +- ext/impl/psb_d_ell_colsum.f90 | 2 +- ext/impl/psb_d_ell_csgetblk.f90 | 2 +- ext/impl/psb_d_ell_csgetptn.f90 | 2 +- ext/impl/psb_d_ell_csgetrow.f90 | 2 +- ext/impl/psb_d_ell_csmm.f90 | 2 +- ext/impl/psb_d_ell_csmv.f90 | 2 +- ext/impl/psb_d_ell_csnm1.f90 | 2 +- ext/impl/psb_d_ell_csnmi.f90 | 2 +- ext/impl/psb_d_ell_csput.f90 | 2 +- ext/impl/psb_d_ell_cssm.f90 | 2 +- ext/impl/psb_d_ell_cssv.f90 | 2 +- ext/impl/psb_d_ell_get_diag.f90 | 2 +- ext/impl/psb_d_ell_maxval.f90 | 2 +- ext/impl/psb_d_ell_mold.f90 | 2 +- ext/impl/psb_d_ell_print.f90 | 2 +- ext/impl/psb_d_ell_reallocate_nz.f90 | 2 +- ext/impl/psb_d_ell_reinit.f90 | 2 +- ext/impl/psb_d_ell_rowsum.f90 | 2 +- ext/impl/psb_d_ell_scal.f90 | 2 +- ext/impl/psb_d_ell_scals.f90 | 2 +- ext/impl/psb_d_ell_trim.f90 | 2 +- ext/impl/psb_d_hdia_allocate_mnnz.f90 | 2 +- ext/impl/psb_d_hdia_csmv.f90 | 2 +- ext/impl/psb_d_hdia_mold.f90 | 2 +- ext/impl/psb_d_hdia_print.f90 | 2 +- ext/impl/psb_d_hll_aclsum.f90 | 2 +- ext/impl/psb_d_hll_allocate_mnnz.f90 | 2 +- ext/impl/psb_d_hll_arwsum.f90 | 2 +- ext/impl/psb_d_hll_colsum.f90 | 2 +- ext/impl/psb_d_hll_csgetblk.f90 | 2 +- ext/impl/psb_d_hll_csgetptn.f90 | 2 +- ext/impl/psb_d_hll_csgetrow.f90 | 2 +- ext/impl/psb_d_hll_csmm.f90 | 2 +- ext/impl/psb_d_hll_csmv.f90 | 2 +- ext/impl/psb_d_hll_csnm1.f90 | 2 +- ext/impl/psb_d_hll_csnmi.f90 | 2 +- ext/impl/psb_d_hll_csput.f90 | 2 +- ext/impl/psb_d_hll_cssm.f90 | 2 +- ext/impl/psb_d_hll_cssv.f90 | 2 +- ext/impl/psb_d_hll_get_diag.f90 | 2 +- ext/impl/psb_d_hll_maxval.f90 | 2 +- ext/impl/psb_d_hll_mold.f90 | 2 +- ext/impl/psb_d_hll_print.f90 | 2 +- ext/impl/psb_d_hll_reallocate_nz.f90 | 2 +- ext/impl/psb_d_hll_reinit.f90 | 2 +- ext/impl/psb_d_hll_rowsum.f90 | 2 +- ext/impl/psb_d_hll_scal.f90 | 2 +- ext/impl/psb_d_hll_scals.f90 | 2 +- ext/impl/psb_d_mv_dia_from_coo.f90 | 2 +- ext/impl/psb_d_mv_dia_to_coo.f90 | 2 +- ext/impl/psb_d_mv_ell_from_coo.f90 | 2 +- ext/impl/psb_d_mv_ell_from_fmt.f90 | 2 +- ext/impl/psb_d_mv_ell_to_coo.f90 | 2 +- ext/impl/psb_d_mv_ell_to_fmt.f90 | 2 +- ext/impl/psb_d_mv_hdia_from_coo.f90 | 2 +- ext/impl/psb_d_mv_hdia_to_coo.f90 | 2 +- ext/impl/psb_d_mv_hll_from_coo.f90 | 2 +- ext/impl/psb_d_mv_hll_from_fmt.f90 | 2 +- ext/impl/psb_d_mv_hll_to_coo.f90 | 2 +- ext/impl/psb_d_mv_hll_to_fmt.f90 | 2 +- ext/impl/psb_s_cp_dia_from_coo.f90 | 2 +- ext/impl/psb_s_cp_dia_to_coo.f90 | 2 +- ext/impl/psb_s_cp_ell_from_coo.f90 | 2 +- ext/impl/psb_s_cp_ell_from_fmt.f90 | 2 +- ext/impl/psb_s_cp_ell_to_coo.f90 | 2 +- ext/impl/psb_s_cp_ell_to_fmt.f90 | 2 +- ext/impl/psb_s_cp_hdia_from_coo.f90 | 2 +- ext/impl/psb_s_cp_hdia_to_coo.f90 | 2 +- ext/impl/psb_s_cp_hll_from_coo.f90 | 2 +- ext/impl/psb_s_cp_hll_from_fmt.f90 | 2 +- ext/impl/psb_s_cp_hll_to_coo.f90 | 2 +- ext/impl/psb_s_cp_hll_to_fmt.f90 | 2 +- ext/impl/psb_s_dia_aclsum.f90 | 2 +- ext/impl/psb_s_dia_allocate_mnnz.f90 | 2 +- ext/impl/psb_s_dia_arwsum.f90 | 2 +- ext/impl/psb_s_dia_colsum.f90 | 2 +- ext/impl/psb_s_dia_csgetptn.f90 | 2 +- ext/impl/psb_s_dia_csgetrow.f90 | 2 +- ext/impl/psb_s_dia_csmm.f90 | 2 +- ext/impl/psb_s_dia_csmv.f90 | 2 +- ext/impl/psb_s_dia_get_diag.f90 | 2 +- ext/impl/psb_s_dia_maxval.f90 | 2 +- ext/impl/psb_s_dia_mold.f90 | 2 +- ext/impl/psb_s_dia_print.f90 | 2 +- ext/impl/psb_s_dia_reallocate_nz.f90 | 2 +- ext/impl/psb_s_dia_reinit.f90 | 2 +- ext/impl/psb_s_dia_rowsum.f90 | 2 +- ext/impl/psb_s_dia_scal.f90 | 2 +- ext/impl/psb_s_dia_scals.f90 | 2 +- ext/impl/psb_s_ell_aclsum.f90 | 2 +- ext/impl/psb_s_ell_allocate_mnnz.f90 | 2 +- ext/impl/psb_s_ell_arwsum.f90 | 2 +- ext/impl/psb_s_ell_colsum.f90 | 2 +- ext/impl/psb_s_ell_csgetblk.f90 | 2 +- ext/impl/psb_s_ell_csgetptn.f90 | 2 +- ext/impl/psb_s_ell_csgetrow.f90 | 2 +- ext/impl/psb_s_ell_csmm.f90 | 2 +- ext/impl/psb_s_ell_csmv.f90 | 2 +- ext/impl/psb_s_ell_csnm1.f90 | 2 +- ext/impl/psb_s_ell_csnmi.f90 | 2 +- ext/impl/psb_s_ell_csput.f90 | 2 +- ext/impl/psb_s_ell_cssm.f90 | 2 +- ext/impl/psb_s_ell_cssv.f90 | 2 +- ext/impl/psb_s_ell_get_diag.f90 | 2 +- ext/impl/psb_s_ell_maxval.f90 | 2 +- ext/impl/psb_s_ell_mold.f90 | 2 +- ext/impl/psb_s_ell_print.f90 | 2 +- ext/impl/psb_s_ell_reallocate_nz.f90 | 2 +- ext/impl/psb_s_ell_reinit.f90 | 2 +- ext/impl/psb_s_ell_rowsum.f90 | 2 +- ext/impl/psb_s_ell_scal.f90 | 2 +- ext/impl/psb_s_ell_scals.f90 | 2 +- ext/impl/psb_s_ell_trim.f90 | 2 +- ext/impl/psb_s_hdia_allocate_mnnz.f90 | 2 +- ext/impl/psb_s_hdia_csmv.f90 | 2 +- ext/impl/psb_s_hdia_mold.f90 | 2 +- ext/impl/psb_s_hdia_print.f90 | 2 +- ext/impl/psb_s_hll_aclsum.f90 | 2 +- ext/impl/psb_s_hll_allocate_mnnz.f90 | 2 +- ext/impl/psb_s_hll_arwsum.f90 | 2 +- ext/impl/psb_s_hll_colsum.f90 | 2 +- ext/impl/psb_s_hll_csgetblk.f90 | 2 +- ext/impl/psb_s_hll_csgetptn.f90 | 2 +- ext/impl/psb_s_hll_csgetrow.f90 | 2 +- ext/impl/psb_s_hll_csmm.f90 | 2 +- ext/impl/psb_s_hll_csmv.f90 | 2 +- ext/impl/psb_s_hll_csnm1.f90 | 2 +- ext/impl/psb_s_hll_csnmi.f90 | 2 +- ext/impl/psb_s_hll_csput.f90 | 2 +- ext/impl/psb_s_hll_cssm.f90 | 2 +- ext/impl/psb_s_hll_cssv.f90 | 2 +- ext/impl/psb_s_hll_get_diag.f90 | 2 +- ext/impl/psb_s_hll_maxval.f90 | 2 +- ext/impl/psb_s_hll_mold.f90 | 2 +- ext/impl/psb_s_hll_print.f90 | 2 +- ext/impl/psb_s_hll_reallocate_nz.f90 | 2 +- ext/impl/psb_s_hll_reinit.f90 | 2 +- ext/impl/psb_s_hll_rowsum.f90 | 2 +- ext/impl/psb_s_hll_scal.f90 | 2 +- ext/impl/psb_s_hll_scals.f90 | 2 +- ext/impl/psb_s_mv_dia_from_coo.f90 | 2 +- ext/impl/psb_s_mv_dia_to_coo.f90 | 2 +- ext/impl/psb_s_mv_ell_from_coo.f90 | 2 +- ext/impl/psb_s_mv_ell_from_fmt.f90 | 2 +- ext/impl/psb_s_mv_ell_to_coo.f90 | 2 +- ext/impl/psb_s_mv_ell_to_fmt.f90 | 2 +- ext/impl/psb_s_mv_hdia_from_coo.f90 | 2 +- ext/impl/psb_s_mv_hdia_to_coo.f90 | 2 +- ext/impl/psb_s_mv_hll_from_coo.f90 | 2 +- ext/impl/psb_s_mv_hll_from_fmt.f90 | 2 +- ext/impl/psb_s_mv_hll_to_coo.f90 | 2 +- ext/impl/psb_s_mv_hll_to_fmt.f90 | 2 +- ext/impl/psb_z_cp_dia_from_coo.f90 | 2 +- ext/impl/psb_z_cp_dia_to_coo.f90 | 2 +- ext/impl/psb_z_cp_ell_from_coo.f90 | 2 +- ext/impl/psb_z_cp_ell_from_fmt.f90 | 2 +- ext/impl/psb_z_cp_ell_to_coo.f90 | 2 +- ext/impl/psb_z_cp_ell_to_fmt.f90 | 2 +- ext/impl/psb_z_cp_hdia_from_coo.f90 | 2 +- ext/impl/psb_z_cp_hdia_to_coo.f90 | 2 +- ext/impl/psb_z_cp_hll_from_coo.f90 | 2 +- ext/impl/psb_z_cp_hll_from_fmt.f90 | 2 +- ext/impl/psb_z_cp_hll_to_coo.f90 | 2 +- ext/impl/psb_z_cp_hll_to_fmt.f90 | 2 +- ext/impl/psb_z_dia_aclsum.f90 | 2 +- ext/impl/psb_z_dia_allocate_mnnz.f90 | 2 +- ext/impl/psb_z_dia_arwsum.f90 | 2 +- ext/impl/psb_z_dia_colsum.f90 | 2 +- ext/impl/psb_z_dia_csgetptn.f90 | 2 +- ext/impl/psb_z_dia_csgetrow.f90 | 2 +- ext/impl/psb_z_dia_csmm.f90 | 2 +- ext/impl/psb_z_dia_csmv.f90 | 2 +- ext/impl/psb_z_dia_get_diag.f90 | 2 +- ext/impl/psb_z_dia_maxval.f90 | 2 +- ext/impl/psb_z_dia_mold.f90 | 2 +- ext/impl/psb_z_dia_print.f90 | 2 +- ext/impl/psb_z_dia_reallocate_nz.f90 | 2 +- ext/impl/psb_z_dia_reinit.f90 | 2 +- ext/impl/psb_z_dia_rowsum.f90 | 2 +- ext/impl/psb_z_dia_scal.f90 | 2 +- ext/impl/psb_z_dia_scals.f90 | 2 +- ext/impl/psb_z_ell_aclsum.f90 | 2 +- ext/impl/psb_z_ell_allocate_mnnz.f90 | 2 +- ext/impl/psb_z_ell_arwsum.f90 | 2 +- ext/impl/psb_z_ell_colsum.f90 | 2 +- ext/impl/psb_z_ell_csgetblk.f90 | 2 +- ext/impl/psb_z_ell_csgetptn.f90 | 2 +- ext/impl/psb_z_ell_csgetrow.f90 | 2 +- ext/impl/psb_z_ell_csmm.f90 | 2 +- ext/impl/psb_z_ell_csmv.f90 | 2 +- ext/impl/psb_z_ell_csnm1.f90 | 2 +- ext/impl/psb_z_ell_csnmi.f90 | 2 +- ext/impl/psb_z_ell_csput.f90 | 2 +- ext/impl/psb_z_ell_cssm.f90 | 2 +- ext/impl/psb_z_ell_cssv.f90 | 2 +- ext/impl/psb_z_ell_get_diag.f90 | 2 +- ext/impl/psb_z_ell_maxval.f90 | 2 +- ext/impl/psb_z_ell_mold.f90 | 2 +- ext/impl/psb_z_ell_print.f90 | 2 +- ext/impl/psb_z_ell_reallocate_nz.f90 | 2 +- ext/impl/psb_z_ell_reinit.f90 | 2 +- ext/impl/psb_z_ell_rowsum.f90 | 2 +- ext/impl/psb_z_ell_scal.f90 | 2 +- ext/impl/psb_z_ell_scals.f90 | 2 +- ext/impl/psb_z_ell_trim.f90 | 2 +- ext/impl/psb_z_hdia_allocate_mnnz.f90 | 2 +- ext/impl/psb_z_hdia_csmv.f90 | 2 +- ext/impl/psb_z_hdia_mold.f90 | 2 +- ext/impl/psb_z_hdia_print.f90 | 2 +- ext/impl/psb_z_hll_aclsum.f90 | 2 +- ext/impl/psb_z_hll_allocate_mnnz.f90 | 2 +- ext/impl/psb_z_hll_arwsum.f90 | 2 +- ext/impl/psb_z_hll_colsum.f90 | 2 +- ext/impl/psb_z_hll_csgetblk.f90 | 2 +- ext/impl/psb_z_hll_csgetptn.f90 | 2 +- ext/impl/psb_z_hll_csgetrow.f90 | 2 +- ext/impl/psb_z_hll_csmm.f90 | 2 +- ext/impl/psb_z_hll_csmv.f90 | 2 +- ext/impl/psb_z_hll_csnm1.f90 | 2 +- ext/impl/psb_z_hll_csnmi.f90 | 2 +- ext/impl/psb_z_hll_csput.f90 | 2 +- ext/impl/psb_z_hll_cssm.f90 | 2 +- ext/impl/psb_z_hll_cssv.f90 | 2 +- ext/impl/psb_z_hll_get_diag.f90 | 2 +- ext/impl/psb_z_hll_maxval.f90 | 2 +- ext/impl/psb_z_hll_mold.f90 | 2 +- ext/impl/psb_z_hll_print.f90 | 2 +- ext/impl/psb_z_hll_reallocate_nz.f90 | 2 +- ext/impl/psb_z_hll_reinit.f90 | 2 +- ext/impl/psb_z_hll_rowsum.f90 | 2 +- ext/impl/psb_z_hll_scal.f90 | 2 +- ext/impl/psb_z_hll_scals.f90 | 2 +- ext/impl/psb_z_mv_dia_from_coo.f90 | 2 +- ext/impl/psb_z_mv_dia_to_coo.f90 | 2 +- ext/impl/psb_z_mv_ell_from_coo.f90 | 2 +- ext/impl/psb_z_mv_ell_from_fmt.f90 | 2 +- ext/impl/psb_z_mv_ell_to_coo.f90 | 2 +- ext/impl/psb_z_mv_ell_to_fmt.f90 | 2 +- ext/impl/psb_z_mv_hdia_from_coo.f90 | 2 +- ext/impl/psb_z_mv_hdia_to_coo.f90 | 2 +- ext/impl/psb_z_mv_hll_from_coo.f90 | 2 +- ext/impl/psb_z_mv_hll_from_fmt.f90 | 2 +- ext/impl/psb_z_mv_hll_to_coo.f90 | 2 +- ext/impl/psb_z_mv_hll_to_fmt.f90 | 2 +- ext/impl/psi_c_convert_dia_from_coo.f90 | 2 +- ext/impl/psi_c_convert_ell_from_coo.f90 | 2 +- ext/impl/psi_c_convert_hll_from_coo.f90 | 2 +- ext/impl/psi_c_xtr_coo_from_dia.f90 | 2 +- ext/impl/psi_c_xtr_dia_from_coo.f90 | 2 +- ext/impl/psi_c_xtr_ell_from_coo.f90 | 2 +- ext/impl/psi_d_convert_dia_from_coo.f90 | 2 +- ext/impl/psi_d_convert_ell_from_coo.f90 | 2 +- ext/impl/psi_d_convert_hll_from_coo.f90 | 2 +- ext/impl/psi_d_xtr_coo_from_dia.f90 | 2 +- ext/impl/psi_d_xtr_dia_from_coo.f90 | 2 +- ext/impl/psi_d_xtr_ell_from_coo.f90 | 2 +- ext/impl/psi_s_convert_dia_from_coo.f90 | 2 +- ext/impl/psi_s_convert_ell_from_coo.f90 | 2 +- ext/impl/psi_s_convert_hll_from_coo.f90 | 2 +- ext/impl/psi_s_xtr_coo_from_dia.f90 | 2 +- ext/impl/psi_s_xtr_dia_from_coo.f90 | 2 +- ext/impl/psi_s_xtr_ell_from_coo.f90 | 2 +- ext/impl/psi_z_convert_dia_from_coo.f90 | 2 +- ext/impl/psi_z_convert_ell_from_coo.f90 | 2 +- ext/impl/psi_z_convert_hll_from_coo.f90 | 2 +- ext/impl/psi_z_xtr_coo_from_dia.f90 | 2 +- ext/impl/psi_z_xtr_dia_from_coo.f90 | 2 +- ext/impl/psi_z_xtr_ell_from_coo.f90 | 2 +- ext/psb_c_dia_mat_mod.f90 | 2 +- ext/psb_c_dns_mat_mod.f90 | 2 +- ext/psb_c_ell_mat_mod.f90 | 2 +- ext/psb_c_hdia_mat_mod.f90 | 2 +- ext/psb_c_hll_mat_mod.f90 | 2 +- ext/psb_d_dia_mat_mod.f90 | 2 +- ext/psb_d_dns_mat_mod.f90 | 2 +- ext/psb_d_ell_mat_mod.f90 | 2 +- ext/psb_d_hdia_mat_mod.f90 | 2 +- ext/psb_d_hll_mat_mod.f90 | 2 +- ext/psb_ext_mod.F90 | 2 +- ext/psb_s_dia_mat_mod.f90 | 2 +- ext/psb_s_dns_mat_mod.f90 | 2 +- ext/psb_s_ell_mat_mod.f90 | 2 +- ext/psb_s_hdia_mat_mod.f90 | 2 +- ext/psb_s_hll_mat_mod.f90 | 2 +- ext/psb_z_dia_mat_mod.f90 | 2 +- ext/psb_z_dns_mat_mod.f90 | 2 +- ext/psb_z_ell_mat_mod.f90 | 2 +- ext/psb_z_hdia_mat_mod.f90 | 2 +- ext/psb_z_hll_mat_mod.f90 | 2 +- ext/psi_c_ext_util_mod.f90 | 2 +- ext/psi_d_ext_util_mod.f90 | 2 +- ext/psi_ext_util_mod.f90 | 2 +- ext/psi_i_ext_util_mod.f90 | 2 +- ext/psi_s_ext_util_mod.f90 | 2 +- ext/psi_z_ext_util_mod.f90 | 2 +- linsolve/impl/psb_cbicg.f90 | 2 +- linsolve/impl/psb_ccg.F90 | 2 +- linsolve/impl/psb_ccgs.f90 | 2 +- linsolve/impl/psb_ccgstab.f90 | 2 +- linsolve/impl/psb_ccgstabl.f90 | 2 +- linsolve/impl/psb_cfcg.F90 | 2 +- linsolve/impl/psb_cgcr.f90 | 2 +- linsolve/impl/psb_ckrylov.f90 | 2 +- linsolve/impl/psb_crgmres.f90 | 2 +- linsolve/impl/psb_crichardson.f90 | 2 +- linsolve/impl/psb_dbicg.f90 | 2 +- linsolve/impl/psb_dcg.F90 | 2 +- linsolve/impl/psb_dcgs.f90 | 2 +- linsolve/impl/psb_dcgstab.f90 | 2 +- linsolve/impl/psb_dcgstabl.f90 | 2 +- linsolve/impl/psb_dfcg.F90 | 2 +- linsolve/impl/psb_dgcr.f90 | 2 +- linsolve/impl/psb_dkrylov.f90 | 2 +- linsolve/impl/psb_drgmres.f90 | 2 +- linsolve/impl/psb_drichardson.f90 | 2 +- linsolve/impl/psb_sbicg.f90 | 2 +- linsolve/impl/psb_scg.F90 | 2 +- linsolve/impl/psb_scgs.f90 | 2 +- linsolve/impl/psb_scgstab.f90 | 2 +- linsolve/impl/psb_scgstabl.f90 | 2 +- linsolve/impl/psb_sfcg.F90 | 2 +- linsolve/impl/psb_sgcr.f90 | 2 +- linsolve/impl/psb_skrylov.f90 | 2 +- linsolve/impl/psb_srgmres.f90 | 2 +- linsolve/impl/psb_srichardson.f90 | 2 +- linsolve/impl/psb_zbicg.f90 | 2 +- linsolve/impl/psb_zcg.F90 | 2 +- linsolve/impl/psb_zcgs.f90 | 2 +- linsolve/impl/psb_zcgstab.f90 | 2 +- linsolve/impl/psb_zcgstabl.f90 | 2 +- linsolve/impl/psb_zfcg.F90 | 2 +- linsolve/impl/psb_zgcr.f90 | 2 +- linsolve/impl/psb_zkrylov.f90 | 2 +- linsolve/impl/psb_zrgmres.f90 | 2 +- linsolve/impl/psb_zrichardson.f90 | 2 +- linsolve/psb_base_linsolve_conv_mod.f90 | 2 +- linsolve/psb_c_linsolve_conv_mod.f90 | 2 +- linsolve/psb_d_linsolve_conv_mod.f90 | 2 +- linsolve/psb_linsolve_conv_mod.f90 | 2 +- linsolve/psb_linsolve_mod.f90 | 2 +- linsolve/psb_s_linsolve_conv_mod.f90 | 2 +- linsolve/psb_z_linsolve_conv_mod.f90 | 2 +- openacc/impl/Makefile | 0 prec/impl/psb_c_ainv_bld.f90 | 4 ++-- prec/impl/psb_c_bjacprec_impl.f90 | 2 +- prec/impl/psb_c_diagprec_impl.f90 | 2 +- prec/impl/psb_c_ilu0_fact.f90 | 4 ++-- prec/impl/psb_c_iluk_fact.f90 | 4 ++-- prec/impl/psb_c_ilut_fact.f90 | 4 ++-- prec/impl/psb_c_invk_fact.f90 | 2 +- prec/impl/psb_c_invt_fact.f90 | 4 ++-- prec/impl/psb_c_nullprec_impl.f90 | 2 +- prec/impl/psb_c_prec_type_impl.f90 | 4 ++-- prec/impl/psb_c_sp_drop.f90 | 4 ++-- prec/impl/psb_c_sparsify.f90 | 4 ++-- prec/impl/psb_cprecbld.f90 | 2 +- prec/impl/psb_cprecinit.f90 | 2 +- prec/impl/psb_crwclip.f90 | 4 ++-- prec/impl/psb_csparse_biconjg_llk.F90 | 2 +- prec/impl/psb_csparse_biconjg_llk_noth.F90 | 2 +- prec/impl/psb_csparse_biconjg_mlk.F90 | 2 +- prec/impl/psb_csparse_biconjg_s_ft_llk.F90 | 2 +- prec/impl/psb_csparse_biconjg_s_llk.F90 | 2 +- prec/impl/psb_d_ainv_bld.f90 | 4 ++-- prec/impl/psb_d_bjacprec_impl.f90 | 2 +- prec/impl/psb_d_diagprec_impl.f90 | 2 +- prec/impl/psb_d_ilu0_fact.f90 | 4 ++-- prec/impl/psb_d_iluk_fact.f90 | 4 ++-- prec/impl/psb_d_ilut_fact.f90 | 4 ++-- prec/impl/psb_d_invk_fact.f90 | 2 +- prec/impl/psb_d_invt_fact.f90 | 4 ++-- prec/impl/psb_d_nullprec_impl.f90 | 2 +- prec/impl/psb_d_prec_type_impl.f90 | 4 ++-- prec/impl/psb_d_sp_drop.f90 | 4 ++-- prec/impl/psb_d_sparsify.f90 | 4 ++-- prec/impl/psb_dprecbld.f90 | 2 +- prec/impl/psb_dprecinit.f90 | 2 +- prec/impl/psb_drwclip.f90 | 4 ++-- prec/impl/psb_dsparse_biconjg_llk.F90 | 2 +- prec/impl/psb_dsparse_biconjg_llk_noth.F90 | 2 +- prec/impl/psb_dsparse_biconjg_mlk.F90 | 2 +- prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 | 2 +- prec/impl/psb_dsparse_biconjg_s_llk.F90 | 2 +- prec/impl/psb_s_ainv_bld.f90 | 4 ++-- prec/impl/psb_s_bjacprec_impl.f90 | 2 +- prec/impl/psb_s_diagprec_impl.f90 | 2 +- prec/impl/psb_s_ilu0_fact.f90 | 4 ++-- prec/impl/psb_s_iluk_fact.f90 | 4 ++-- prec/impl/psb_s_ilut_fact.f90 | 4 ++-- prec/impl/psb_s_invk_fact.f90 | 2 +- prec/impl/psb_s_invt_fact.f90 | 4 ++-- prec/impl/psb_s_nullprec_impl.f90 | 2 +- prec/impl/psb_s_prec_type_impl.f90 | 4 ++-- prec/impl/psb_s_sp_drop.f90 | 4 ++-- prec/impl/psb_s_sparsify.f90 | 4 ++-- prec/impl/psb_sprecbld.f90 | 2 +- prec/impl/psb_sprecinit.f90 | 2 +- prec/impl/psb_srwclip.f90 | 4 ++-- prec/impl/psb_ssparse_biconjg_llk.F90 | 2 +- prec/impl/psb_ssparse_biconjg_llk_noth.F90 | 2 +- prec/impl/psb_ssparse_biconjg_mlk.F90 | 2 +- prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 | 2 +- prec/impl/psb_ssparse_biconjg_s_llk.F90 | 2 +- prec/impl/psb_z_ainv_bld.f90 | 4 ++-- prec/impl/psb_z_bjacprec_impl.f90 | 2 +- prec/impl/psb_z_diagprec_impl.f90 | 2 +- prec/impl/psb_z_ilu0_fact.f90 | 4 ++-- prec/impl/psb_z_iluk_fact.f90 | 4 ++-- prec/impl/psb_z_ilut_fact.f90 | 4 ++-- prec/impl/psb_z_invk_fact.f90 | 2 +- prec/impl/psb_z_invt_fact.f90 | 4 ++-- prec/impl/psb_z_nullprec_impl.f90 | 2 +- prec/impl/psb_z_prec_type_impl.f90 | 4 ++-- prec/impl/psb_z_sp_drop.f90 | 4 ++-- prec/impl/psb_z_sparsify.f90 | 4 ++-- prec/impl/psb_zprecbld.f90 | 2 +- prec/impl/psb_zprecinit.f90 | 2 +- prec/impl/psb_zrwclip.f90 | 4 ++-- prec/impl/psb_zsparse_biconjg_llk.F90 | 2 +- prec/impl/psb_zsparse_biconjg_llk_noth.F90 | 2 +- prec/impl/psb_zsparse_biconjg_mlk.F90 | 2 +- prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 | 2 +- prec/impl/psb_zsparse_biconjg_s_llk.F90 | 2 +- prec/psb_c_ainv_fact_mod.f90 | 4 ++-- prec/psb_c_ainv_tools_mod.f90 | 4 ++-- prec/psb_c_base_prec_mod.f90 | 2 +- prec/psb_c_biconjg_mod.F90 | 6 +++--- prec/psb_c_bjacprec.f90 | 2 +- prec/psb_c_diagprec.f90 | 2 +- prec/psb_c_ilu_fact_mod.f90 | 4 ++-- prec/psb_c_invk_fact_mod.f90 | 4 ++-- prec/psb_c_invt_fact_mod.f90 | 4 ++-- prec/psb_c_nullprec.f90 | 2 +- prec/psb_c_prec_mod.f90 | 2 +- prec/psb_c_prec_type.f90 | 2 +- prec/psb_d_ainv_fact_mod.f90 | 4 ++-- prec/psb_d_ainv_tools_mod.f90 | 4 ++-- prec/psb_d_base_prec_mod.f90 | 2 +- prec/psb_d_biconjg_mod.F90 | 6 +++--- prec/psb_d_bjacprec.f90 | 2 +- prec/psb_d_diagprec.f90 | 2 +- prec/psb_d_ilu_fact_mod.f90 | 4 ++-- prec/psb_d_invk_fact_mod.f90 | 4 ++-- prec/psb_d_invt_fact_mod.f90 | 4 ++-- prec/psb_d_nullprec.f90 | 2 +- prec/psb_d_prec_mod.f90 | 2 +- prec/psb_d_prec_type.f90 | 2 +- prec/psb_prec_const_mod.f90 | 2 +- prec/psb_prec_mod.f90 | 2 +- prec/psb_prec_type.f90 | 2 +- prec/psb_s_ainv_fact_mod.f90 | 4 ++-- prec/psb_s_ainv_tools_mod.f90 | 4 ++-- prec/psb_s_base_prec_mod.f90 | 2 +- prec/psb_s_biconjg_mod.F90 | 6 +++--- prec/psb_s_bjacprec.f90 | 2 +- prec/psb_s_diagprec.f90 | 2 +- prec/psb_s_ilu_fact_mod.f90 | 4 ++-- prec/psb_s_invk_fact_mod.f90 | 4 ++-- prec/psb_s_invt_fact_mod.f90 | 4 ++-- prec/psb_s_nullprec.f90 | 2 +- prec/psb_s_prec_mod.f90 | 2 +- prec/psb_s_prec_type.f90 | 2 +- prec/psb_z_ainv_fact_mod.f90 | 4 ++-- prec/psb_z_ainv_tools_mod.f90 | 4 ++-- prec/psb_z_base_prec_mod.f90 | 2 +- prec/psb_z_biconjg_mod.F90 | 6 +++--- prec/psb_z_bjacprec.f90 | 2 +- prec/psb_z_diagprec.f90 | 2 +- prec/psb_z_ilu_fact_mod.f90 | 4 ++-- prec/psb_z_invk_fact_mod.f90 | 4 ++-- prec/psb_z_invt_fact_mod.f90 | 4 ++-- prec/psb_z_nullprec.f90 | 2 +- prec/psb_z_prec_mod.f90 | 2 +- prec/psb_z_prec_type.f90 | 2 +- rsb/Makefile | 0 rsb/impl/Makefile | 0 rsb/impl/psb_d_cp_rsb_from_coo.F90 | 2 +- rsb/impl/psb_d_cp_rsb_to_coo.f90 | 2 +- rsb/impl/psb_d_mv_rsb_from_coo.f90 | 2 +- rsb/impl/psb_d_rsb_csmv.F90 | 2 +- rsb/psb_d_rsb_mat_mod.f90 | 2 +- rsb/psb_rsb_mod.F90 | 2 +- rsb/psb_rsb_penv_mod.F90 | 2 +- rsb/rsb_int.c | 2 +- rsb/rsb_mod.F90 | 2 +- test/computational_routines/geaxpby/autotest.sh | 0 test/computational_routines/gedot/autotest.sh | 0 test/computational_routines/spmm/spmm_checker | Bin test/computational_routines/test.sh | 0 test/cudakern/Makefile | 0 test/cudakern/data_input.f90 | 2 +- test/cudakern/dpdegenmv.F90 | 2 +- test/cudakern/spdegenmv.F90 | 2 +- test/fileread/getp.f90 | 2 +- test/fileread/psb_cf_sample.f90 | 2 +- test/fileread/psb_df_sample.f90 | 2 +- test/fileread/psb_sf_sample.f90 | 2 +- test/fileread/psb_zf_sample.f90 | 2 +- test/kernel/d_file_spmv.f90 | 2 +- test/kernel/pdgenspmv.F90 | 2 +- test/kernel/s_file_spmv.f90 | 2 +- test/kernel/vecoperation.f90 | 2 +- test/omp/psb_tomp.F90 | 2 +- test/openacc/dpdegenmv.F90 | 2 +- test/openacc/psb_d_oacc_pde3d.F90 | 2 +- test/pdegen/psb_d_pde2d.F90 | 2 +- test/pdegen/psb_d_pde3d.F90 | 2 +- test/pdegen/psb_s_pde2d.F90 | 2 +- test/pdegen/psb_s_pde3d.F90 | 2 +- test/serial/psb_d_xyz_impl.f90 | 2 +- test/serial/psb_d_xyz_mat_mod.f90 | 2 +- test/util/dhb2mm.f90 | 2 +- test/util/dmm2hb.f90 | 2 +- test/util/zhb2mm.f90 | 2 +- test/util/zmm2hb.f90 | 2 +- util/psb_amd_order.c | 2 +- util/psb_blockpart_mod.f90 | 2 +- util/psb_c_hbio_impl.f90 | 2 +- util/psb_c_mat_dist_impl.f90 | 2 +- util/psb_c_mat_dist_mod.f90 | 2 +- util/psb_c_mmio_impl.f90 | 2 +- util/psb_c_renum_impl.F90 | 2 +- util/psb_c_renum_mod.f90 | 2 +- util/psb_d_hbio_impl.f90 | 2 +- util/psb_d_mat_dist_impl.f90 | 2 +- util/psb_d_mat_dist_mod.f90 | 2 +- util/psb_d_mmio_impl.f90 | 2 +- util/psb_d_renum_impl.F90 | 2 +- util/psb_d_renum_mod.f90 | 2 +- util/psb_gps_mod.f90 | 2 +- util/psb_hbio_mod.f90 | 2 +- util/psb_i_mmio_impl.F90 | 2 +- util/psb_mat_dist_mod.f90 | 2 +- util/psb_metispart_mod.F90 | 2 +- util/psb_mmio_mod.F90 | 2 +- util/psb_partidx_mod.F90 | 2 +- util/psb_renum_mod.f90 | 2 +- util/psb_s_hbio_impl.f90 | 2 +- util/psb_s_mat_dist_impl.f90 | 2 +- util/psb_s_mat_dist_mod.f90 | 2 +- util/psb_s_mmio_impl.f90 | 2 +- util/psb_s_renum_impl.F90 | 2 +- util/psb_s_renum_mod.f90 | 2 +- util/psb_util_mod.f90 | 2 +- util/psb_z_hbio_impl.f90 | 2 +- util/psb_z_mat_dist_impl.f90 | 2 +- util/psb_z_mat_dist_mod.f90 | 2 +- util/psb_z_mmio_impl.f90 | 2 +- util/psb_z_renum_impl.F90 | 2 +- util/psb_z_renum_mod.f90 | 2 +- 1808 files changed, 1885 insertions(+), 2752 deletions(-) rename cuda/{License-spgpu.md => License-spgpu} (100%) mode change 100755 => 100644 cuda/Makefile mode change 100755 => 100644 cuda/impl/Makefile mode change 100755 => 100644 ext/Makefile mode change 100755 => 100644 ext/impl/Makefile mode change 100755 => 100644 openacc/impl/Makefile mode change 100755 => 100644 rsb/Makefile mode change 100755 => 100644 rsb/impl/Makefile mode change 100755 => 100644 test/computational_routines/geaxpby/autotest.sh mode change 100755 => 100644 test/computational_routines/gedot/autotest.sh mode change 100755 => 100644 test/computational_routines/spmm/spmm_checker mode change 100755 => 100644 test/computational_routines/test.sh mode change 100755 => 100644 test/cudakern/Makefile diff --git a/CMakeLists.txt b/CMakeLists.txt index 96bcb7574..a536991e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ #----------------------------------- # Set oldest allowable CMake version #----------------------------------- -cmake_minimum_required(VERSION 3.11) +cmake_minimum_required(VERSION 3.11...4.2) cmake_policy(VERSION 3.11.1...3.13.3) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") @@ -644,7 +644,7 @@ install(EXPORT ${CMAKE_PROJECT_NAME}-targets include(CMakePackageConfigHelpers) # standard CMake module write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake" - VERSION "${psblas_VERSION}" + VERSION "${VERSION}" COMPATIBILITY SameMajorVersion ) @@ -827,6 +827,7 @@ set_target_properties(base POSITION_INDEPENDENT_CODE TRUE OUTPUT_NAME psb_base LINKER_LANGUAGE Fortran + VERSION ${VERSION} SOVERSION ${SOVERSION} ) target_include_directories(base PUBLIC @@ -859,6 +860,7 @@ set_target_properties(prec POSITION_INDEPENDENT_CODE TRUE OUTPUT_NAME psb_prec LINKER_LANGUAGE Fortran + VERSION ${VERSION} SOVERSION ${SOVERSION} ) target_include_directories(prec PUBLIC $ @@ -874,6 +876,7 @@ set_target_properties(linsolve POSITION_INDEPENDENT_CODE TRUE OUTPUT_NAME psb_linsolve LINKER_LANGUAGE Fortran + VERSION ${VERSION} SOVERSION ${SOVERSION} ) target_include_directories(linsolve PUBLIC $ @@ -890,6 +893,7 @@ set_target_properties(ext POSITION_INDEPENDENT_CODE TRUE OUTPUT_NAME psb_ext LINKER_LANGUAGE Fortran + VERSION ${VERSION} SOVERSION ${SOVERSION} ) target_include_directories(ext PUBLIC $ @@ -909,7 +913,8 @@ if(WIN32) set_target_properties(psb_util_C PROPERTIES LINKER_LANGUAGE C - POSITION_INDEPENDENT_CODE TRUE) + POSITION_INDEPENDENT_CODE TRUE + VERSION ${VERSION} SOVERSION ${SOVERSION}) target_link_libraries(psb_util_C PUBLIC kernel32 user32 shell32) endif() @@ -935,6 +940,7 @@ set_target_properties(util POSITION_INDEPENDENT_CODE TRUE OUTPUT_NAME psb_util LINKER_LANGUAGE Fortran + VERSION ${VERSION} SOVERSION ${SOVERSION} ) target_include_directories(util PUBLIC $ @@ -995,6 +1001,7 @@ set_target_properties(cbind POSITION_INDEPENDENT_CODE TRUE OUTPUT_NAME psb_cbind LINKER_LANGUAGE Fortran + VERSION ${VERSION} SOVERSION ${SOVERSION} ) #target_include_directories(cbind PUBLIC # $ @@ -1141,6 +1148,7 @@ if(PSB_BUILD_CUDA) PROPERTIES POSITION_INDEPENDENT_CODE TRUE OUTPUT_NAME psb_cuda + VERSION ${VERSION} SOVERSION ${SOVERSION} LINKER_LANGUAGE C) # Include directories for the CUDA library diff --git a/LICENSE b/LICENSE index a05485c3e..70f4cac9f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,4 @@ - Parallel Sparse BLAS version 3.9 - (C) Copyright 2006-2025 - Salvatore Filippone - Alfredo Buttari + (C) Copyright 2025 Salvatore Filippone, Alfredo Buttari Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -13,7 +10,7 @@ documentation and/or other materials provided with the distribution. 3. The name of the PSBLAS group or the names of its contributors may not be used to endorse or promote products derived from this - software without specific written permission. + software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_a2a_fnd_owner.F90 b/base/auxil/psi_a2a_fnd_owner.F90 index 3fca7f4a9..91aa146cb 100644 --- a/base/auxil/psi_a2a_fnd_owner.F90 +++ b/base/auxil/psi_a2a_fnd_owner.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_adjcncy_fnd_owner.F90 b/base/auxil/psi_adjcncy_fnd_owner.F90 index 3ac830d75..3ee5b3e49 100644 --- a/base/auxil/psi_adjcncy_fnd_owner.F90 +++ b/base/auxil/psi_adjcncy_fnd_owner.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_bld_glb_dep_list.F90 b/base/auxil/psi_bld_glb_dep_list.F90 index ea5349c4e..bd7337b28 100644 --- a/base/auxil/psi_bld_glb_dep_list.F90 +++ b/base/auxil/psi_bld_glb_dep_list.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_bld_tmphalo.f90 b/base/auxil/psi_bld_tmphalo.f90 index d1ee62c69..b9e07dfae 100644 --- a/base/auxil/psi_bld_tmphalo.f90 +++ b/base/auxil/psi_bld_tmphalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_bld_tmpovrl.f90 b/base/auxil/psi_bld_tmpovrl.f90 index 1952b9eb4..4c3c823fa 100644 --- a/base/auxil/psi_bld_tmpovrl.f90 +++ b/base/auxil/psi_bld_tmpovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_compute_size.f90 b/base/auxil/psi_compute_size.f90 index 1820cfecb..85de7cc4f 100644 --- a/base/auxil/psi_compute_size.f90 +++ b/base/auxil/psi_compute_size.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_crea_bnd_elem.f90 b/base/auxil/psi_crea_bnd_elem.f90 index d537dc296..08cd578e3 100644 --- a/base/auxil/psi_crea_bnd_elem.f90 +++ b/base/auxil/psi_crea_bnd_elem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_crea_index.f90 b/base/auxil/psi_crea_index.f90 index bbef054ed..d865d6b5c 100644 --- a/base/auxil/psi_crea_index.f90 +++ b/base/auxil/psi_crea_index.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_crea_ovr_elem.f90 b/base/auxil/psi_crea_ovr_elem.f90 index bf9eeee4d..22c56672e 100644 --- a/base/auxil/psi_crea_ovr_elem.f90 +++ b/base/auxil/psi_crea_ovr_elem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_desc_impl.f90 b/base/auxil/psi_desc_impl.f90 index a6859678b..5743f97bc 100644 --- a/base/auxil/psi_desc_impl.f90 +++ b/base/auxil/psi_desc_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_desc_index.F90 b/base/auxil/psi_desc_index.F90 index 169b7a3e6..338b860de 100644 --- a/base/auxil/psi_desc_index.F90 +++ b/base/auxil/psi_desc_index.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_fnd_owner.F90 b/base/auxil/psi_fnd_owner.F90 index 2ba747886..47ecc3573 100644 --- a/base/auxil/psi_fnd_owner.F90 +++ b/base/auxil/psi_fnd_owner.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_graph_fnd_owner.F90 b/base/auxil/psi_graph_fnd_owner.F90 index 56d4f5dd2..b748d24c1 100644 --- a/base/auxil/psi_graph_fnd_owner.F90 +++ b/base/auxil/psi_graph_fnd_owner.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_hash_impl.f90 b/base/auxil/psi_hash_impl.f90 index ed650e624..685f89e72 100644 --- a/base/auxil/psi_hash_impl.f90 +++ b/base/auxil/psi_hash_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_indx_map_fnd_owner.F90 b/base/auxil/psi_indx_map_fnd_owner.F90 index e45c6a761..593c93564 100644 --- a/base/auxil/psi_indx_map_fnd_owner.F90 +++ b/base/auxil/psi_indx_map_fnd_owner.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_sort_dl.f90 b/base/auxil/psi_sort_dl.f90 index a5c0b3749..1cef53184 100644 --- a/base/auxil/psi_sort_dl.f90 +++ b/base/auxil/psi_sort_dl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_srtlist.f90 b/base/auxil/psi_srtlist.f90 index 375dc8857..fb72d8f6a 100644 --- a/base/auxil/psi_srtlist.f90 +++ b/base/auxil/psi_srtlist.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_symm_dep_list.F90 b/base/auxil/psi_symm_dep_list.F90 index f88eda91d..e88185cea 100644 --- a/base/auxil/psi_symm_dep_list.F90 +++ b/base/auxil/psi_symm_dep_list.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/auxil/psi_xtr_loc_dl.F90 b/base/auxil/psi_xtr_loc_dl.F90 index 26751dc9c..09f5d3c7b 100644 --- a/base/auxil/psi_xtr_loc_dl.F90 +++ b/base/auxil/psi_xtr_loc_dl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_restr.f90 b/base/comm/internals/psi_covrl_restr.f90 index 9e1c86358..26eebae95 100644 --- a/base/comm/internals/psi_covrl_restr.f90 +++ b/base/comm/internals/psi_covrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_restr_a.f90 b/base/comm/internals/psi_covrl_restr_a.f90 index 6d4a4cad6..79bc92c73 100644 --- a/base/comm/internals/psi_covrl_restr_a.f90 +++ b/base/comm/internals/psi_covrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_save.f90 b/base/comm/internals/psi_covrl_save.f90 index 5891a202b..d2583fb04 100644 --- a/base/comm/internals/psi_covrl_save.f90 +++ b/base/comm/internals/psi_covrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_save_a.f90 b/base/comm/internals/psi_covrl_save_a.f90 index c50676e83..3da176a3e 100644 --- a/base/comm/internals/psi_covrl_save_a.f90 +++ b/base/comm/internals/psi_covrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_upd.f90 b/base/comm/internals/psi_covrl_upd.f90 index 28a7d1077..43841f5d5 100644 --- a/base/comm/internals/psi_covrl_upd.f90 +++ b/base/comm/internals/psi_covrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_upd_a.f90 b/base/comm/internals/psi_covrl_upd_a.f90 index f2f2df08e..7e53fe66a 100644 --- a/base/comm/internals/psi_covrl_upd_a.f90 +++ b/base/comm/internals/psi_covrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index 54de16ae7..e6c89e9fb 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_cswapdata_a.F90 b/base/comm/internals/psi_cswapdata_a.F90 index 709a0d629..c8d31ea4f 100644 --- a/base/comm/internals/psi_cswapdata_a.F90 +++ b/base/comm/internals/psi_cswapdata_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index 92b9f326c..88d7d0ac0 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_cswaptran_a.F90 b/base/comm/internals/psi_cswaptran_a.F90 index 285a6a162..89469eb7e 100644 --- a/base/comm/internals/psi_cswaptran_a.F90 +++ b/base/comm/internals/psi_cswaptran_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_restr.f90 b/base/comm/internals/psi_dovrl_restr.f90 index 9bc9bed57..03e7a6209 100644 --- a/base/comm/internals/psi_dovrl_restr.f90 +++ b/base/comm/internals/psi_dovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_restr_a.f90 b/base/comm/internals/psi_dovrl_restr_a.f90 index f197251ba..39a644864 100644 --- a/base/comm/internals/psi_dovrl_restr_a.f90 +++ b/base/comm/internals/psi_dovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_save.f90 b/base/comm/internals/psi_dovrl_save.f90 index 16b376608..b191d788c 100644 --- a/base/comm/internals/psi_dovrl_save.f90 +++ b/base/comm/internals/psi_dovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_save_a.f90 b/base/comm/internals/psi_dovrl_save_a.f90 index 25d754d09..a6950076a 100644 --- a/base/comm/internals/psi_dovrl_save_a.f90 +++ b/base/comm/internals/psi_dovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_upd.f90 b/base/comm/internals/psi_dovrl_upd.f90 index 147fa47a6..a3f54e098 100644 --- a/base/comm/internals/psi_dovrl_upd.f90 +++ b/base/comm/internals/psi_dovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_upd_a.f90 b/base/comm/internals/psi_dovrl_upd_a.f90 index 5b81d0963..a3e99bb6e 100644 --- a/base/comm/internals/psi_dovrl_upd_a.f90 +++ b/base/comm/internals/psi_dovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 2ee44807f..95155e6d4 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dswapdata_a.F90 b/base/comm/internals/psi_dswapdata_a.F90 index 2b10ea2dd..f8dc5a6a2 100644 --- a/base/comm/internals/psi_dswapdata_a.F90 +++ b/base/comm/internals/psi_dswapdata_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index ee4a1a735..e6ef04d1c 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dswaptran_a.F90 b/base/comm/internals/psi_dswaptran_a.F90 index bd89d814c..ec88bc275 100644 --- a/base/comm/internals/psi_dswaptran_a.F90 +++ b/base/comm/internals/psi_dswaptran_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_eovrl_restr_a.f90 b/base/comm/internals/psi_eovrl_restr_a.f90 index 2fe2b7881..960ebb4d1 100644 --- a/base/comm/internals/psi_eovrl_restr_a.f90 +++ b/base/comm/internals/psi_eovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_eovrl_save_a.f90 b/base/comm/internals/psi_eovrl_save_a.f90 index 41e9e5198..23cae9220 100644 --- a/base/comm/internals/psi_eovrl_save_a.f90 +++ b/base/comm/internals/psi_eovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_eovrl_upd_a.f90 b/base/comm/internals/psi_eovrl_upd_a.f90 index 0b6e6f9db..d3caaae33 100644 --- a/base/comm/internals/psi_eovrl_upd_a.f90 +++ b/base/comm/internals/psi_eovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_eswapdata_a.F90 b/base/comm/internals/psi_eswapdata_a.F90 index 5285b4640..3c778cb35 100644 --- a/base/comm/internals/psi_eswapdata_a.F90 +++ b/base/comm/internals/psi_eswapdata_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_eswaptran_a.F90 b/base/comm/internals/psi_eswaptran_a.F90 index b5f375ff1..83b4219d0 100644 --- a/base/comm/internals/psi_eswaptran_a.F90 +++ b/base/comm/internals/psi_eswaptran_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_i2ovrl_restr_a.f90 b/base/comm/internals/psi_i2ovrl_restr_a.f90 index 49cf864d1..8272e68b9 100644 --- a/base/comm/internals/psi_i2ovrl_restr_a.f90 +++ b/base/comm/internals/psi_i2ovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_i2ovrl_save_a.f90 b/base/comm/internals/psi_i2ovrl_save_a.f90 index 09c0cd19e..ca81d36d0 100644 --- a/base/comm/internals/psi_i2ovrl_save_a.f90 +++ b/base/comm/internals/psi_i2ovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_i2ovrl_upd_a.f90 b/base/comm/internals/psi_i2ovrl_upd_a.f90 index 82d52fdf5..2d9f57b85 100644 --- a/base/comm/internals/psi_i2ovrl_upd_a.f90 +++ b/base/comm/internals/psi_i2ovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_i2swapdata_a.F90 b/base/comm/internals/psi_i2swapdata_a.F90 index cb368d540..73828e752 100644 --- a/base/comm/internals/psi_i2swapdata_a.F90 +++ b/base/comm/internals/psi_i2swapdata_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_i2swaptran_a.F90 b/base/comm/internals/psi_i2swaptran_a.F90 index 3244dd66b..eb84761b9 100644 --- a/base/comm/internals/psi_i2swaptran_a.F90 +++ b/base/comm/internals/psi_i2swaptran_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_iovrl_restr.f90 b/base/comm/internals/psi_iovrl_restr.f90 index 838b7e50b..21d8b23bf 100644 --- a/base/comm/internals/psi_iovrl_restr.f90 +++ b/base/comm/internals/psi_iovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_iovrl_save.f90 b/base/comm/internals/psi_iovrl_save.f90 index ed84f7b1b..21eae3510 100644 --- a/base/comm/internals/psi_iovrl_save.f90 +++ b/base/comm/internals/psi_iovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_iovrl_upd.f90 b/base/comm/internals/psi_iovrl_upd.f90 index 6873e3d34..d77747b73 100644 --- a/base/comm/internals/psi_iovrl_upd.f90 +++ b/base/comm/internals/psi_iovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index 38ceee873..d268fb557 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index ce4e64e75..de759fcfa 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_lovrl_restr.f90 b/base/comm/internals/psi_lovrl_restr.f90 index ebc7a8d1a..dd2b77dd7 100644 --- a/base/comm/internals/psi_lovrl_restr.f90 +++ b/base/comm/internals/psi_lovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_lovrl_save.f90 b/base/comm/internals/psi_lovrl_save.f90 index 4e3b26a9f..2b5b53779 100644 --- a/base/comm/internals/psi_lovrl_save.f90 +++ b/base/comm/internals/psi_lovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_lovrl_upd.f90 b/base/comm/internals/psi_lovrl_upd.f90 index 0d1701e2b..a14f418b6 100644 --- a/base/comm/internals/psi_lovrl_upd.f90 +++ b/base/comm/internals/psi_lovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index 017590bb2..ecd6e18bb 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index 094fc5745..7c3b3b876 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_movrl_restr_a.f90 b/base/comm/internals/psi_movrl_restr_a.f90 index a660e2fde..dc2137a00 100644 --- a/base/comm/internals/psi_movrl_restr_a.f90 +++ b/base/comm/internals/psi_movrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_movrl_save_a.f90 b/base/comm/internals/psi_movrl_save_a.f90 index d9d0e603b..d728ed718 100644 --- a/base/comm/internals/psi_movrl_save_a.f90 +++ b/base/comm/internals/psi_movrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_movrl_upd_a.f90 b/base/comm/internals/psi_movrl_upd_a.f90 index f31d4cfa1..dfa070a62 100644 --- a/base/comm/internals/psi_movrl_upd_a.f90 +++ b/base/comm/internals/psi_movrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_mswapdata_a.F90 b/base/comm/internals/psi_mswapdata_a.F90 index 7a00f36c1..8ff53079f 100644 --- a/base/comm/internals/psi_mswapdata_a.F90 +++ b/base/comm/internals/psi_mswapdata_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_mswaptran_a.F90 b/base/comm/internals/psi_mswaptran_a.F90 index 07672d390..e0f32eb2e 100644 --- a/base/comm/internals/psi_mswaptran_a.F90 +++ b/base/comm/internals/psi_mswaptran_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_restr.f90 b/base/comm/internals/psi_sovrl_restr.f90 index 1ce96355b..14dc55ce0 100644 --- a/base/comm/internals/psi_sovrl_restr.f90 +++ b/base/comm/internals/psi_sovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_restr_a.f90 b/base/comm/internals/psi_sovrl_restr_a.f90 index 2e1d53ae7..66960ef41 100644 --- a/base/comm/internals/psi_sovrl_restr_a.f90 +++ b/base/comm/internals/psi_sovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_save.f90 b/base/comm/internals/psi_sovrl_save.f90 index cd259f721..b5d4b3c75 100644 --- a/base/comm/internals/psi_sovrl_save.f90 +++ b/base/comm/internals/psi_sovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_save_a.f90 b/base/comm/internals/psi_sovrl_save_a.f90 index aa3468e02..12e5d2aad 100644 --- a/base/comm/internals/psi_sovrl_save_a.f90 +++ b/base/comm/internals/psi_sovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_upd.f90 b/base/comm/internals/psi_sovrl_upd.f90 index 2ee13aa68..acf68554f 100644 --- a/base/comm/internals/psi_sovrl_upd.f90 +++ b/base/comm/internals/psi_sovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_upd_a.f90 b/base/comm/internals/psi_sovrl_upd_a.f90 index 64d856318..68a0e3357 100644 --- a/base/comm/internals/psi_sovrl_upd_a.f90 +++ b/base/comm/internals/psi_sovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index 6c947fd70..8d9cad518 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sswapdata_a.F90 b/base/comm/internals/psi_sswapdata_a.F90 index 23da82246..08f722cd9 100644 --- a/base/comm/internals/psi_sswapdata_a.F90 +++ b/base/comm/internals/psi_sswapdata_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index afb208e89..bec2aa59c 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sswaptran_a.F90 b/base/comm/internals/psi_sswaptran_a.F90 index 4987450e9..a5dcbede4 100644 --- a/base/comm/internals/psi_sswaptran_a.F90 +++ b/base/comm/internals/psi_sswaptran_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_restr.f90 b/base/comm/internals/psi_zovrl_restr.f90 index 668d1d495..a281d2e13 100644 --- a/base/comm/internals/psi_zovrl_restr.f90 +++ b/base/comm/internals/psi_zovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_restr_a.f90 b/base/comm/internals/psi_zovrl_restr_a.f90 index a83470083..bffd31032 100644 --- a/base/comm/internals/psi_zovrl_restr_a.f90 +++ b/base/comm/internals/psi_zovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_save.f90 b/base/comm/internals/psi_zovrl_save.f90 index 24f4011a0..c642f7898 100644 --- a/base/comm/internals/psi_zovrl_save.f90 +++ b/base/comm/internals/psi_zovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_save_a.f90 b/base/comm/internals/psi_zovrl_save_a.f90 index c5cb81f75..b24f82522 100644 --- a/base/comm/internals/psi_zovrl_save_a.f90 +++ b/base/comm/internals/psi_zovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_upd.f90 b/base/comm/internals/psi_zovrl_upd.f90 index b6a23f09e..cbe494643 100644 --- a/base/comm/internals/psi_zovrl_upd.f90 +++ b/base/comm/internals/psi_zovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_upd_a.f90 b/base/comm/internals/psi_zovrl_upd_a.f90 index 7bfd56b16..b879e2636 100644 --- a/base/comm/internals/psi_zovrl_upd_a.f90 +++ b/base/comm/internals/psi_zovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index 2f9b89c39..5c49c94bb 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zswapdata_a.F90 b/base/comm/internals/psi_zswapdata_a.F90 index 471eecd55..db5373e37 100644 --- a/base/comm/internals/psi_zswapdata_a.F90 +++ b/base/comm/internals/psi_zswapdata_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zswaptran.F90 b/base/comm/internals/psi_zswaptran.F90 index 465337a51..e838e16e8 100644 --- a/base/comm/internals/psi_zswaptran.F90 +++ b/base/comm/internals/psi_zswaptran.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zswaptran_a.F90 b/base/comm/internals/psi_zswaptran_a.F90 index 2ea4d2b86..240ab16b8 100644 --- a/base/comm/internals/psi_zswaptran_a.F90 +++ b/base/comm/internals/psi_zswaptran_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cgather.f90 b/base/comm/psb_cgather.f90 index bc5302f56..443d17290 100644 --- a/base/comm/psb_cgather.f90 +++ b/base/comm/psb_cgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cgather_a.f90 b/base/comm/psb_cgather_a.f90 index ac2e66e4a..ee1420d70 100644 --- a/base/comm/psb_cgather_a.f90 +++ b/base/comm/psb_cgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_cgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_chalo.f90 b/base/comm/psb_chalo.f90 index 7eca2d129..84f1375b6 100644 --- a/base/comm/psb_chalo.f90 +++ b/base/comm/psb_chalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_chalo_a.f90 b/base/comm/psb_chalo_a.f90 index 30d47ba08..2a0441071 100644 --- a/base/comm/psb_chalo_a.f90 +++ b/base/comm/psb_chalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_chalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_covrl.f90 b/base/comm/psb_covrl.f90 index 6ae6ce9f7..4a554e227 100644 --- a/base/comm/psb_covrl.f90 +++ b/base/comm/psb_covrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_covrl_a.f90 b/base/comm/psb_covrl_a.f90 index 2d389438d..98eae90e8 100644 --- a/base/comm/psb_covrl_a.f90 +++ b/base/comm/psb_covrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_covrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cscatter.F90 b/base/comm/psb_cscatter.F90 index 8d1235dbe..5121c2152 100644 --- a/base/comm/psb_cscatter.F90 +++ b/base/comm/psb_cscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cscatter_a.F90 b/base/comm/psb_cscatter_a.F90 index f351b0b02..dadf13c5c 100644 --- a/base/comm/psb_cscatter_a.F90 +++ b/base/comm/psb_cscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_cscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cspgather.F90 b/base/comm/psb_cspgather.F90 index 9cfb6b596..f31659a1d 100644 --- a/base/comm/psb_cspgather.F90 +++ b/base/comm/psb_cspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dgather.f90 b/base/comm/psb_dgather.f90 index ed0591e81..443ef2f08 100644 --- a/base/comm/psb_dgather.f90 +++ b/base/comm/psb_dgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dgather_a.f90 b/base/comm/psb_dgather_a.f90 index 1e03ccfd1..14ce53a12 100644 --- a/base/comm/psb_dgather_a.f90 +++ b/base/comm/psb_dgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_dgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dhalo.f90 b/base/comm/psb_dhalo.f90 index 080631e14..b35c0143f 100644 --- a/base/comm/psb_dhalo.f90 +++ b/base/comm/psb_dhalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dhalo_a.f90 b/base/comm/psb_dhalo_a.f90 index d802ead5d..4fc2ef4de 100644 --- a/base/comm/psb_dhalo_a.f90 +++ b/base/comm/psb_dhalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_dhalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dovrl.f90 b/base/comm/psb_dovrl.f90 index f0905278c..777292f01 100644 --- a/base/comm/psb_dovrl.f90 +++ b/base/comm/psb_dovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dovrl_a.f90 b/base/comm/psb_dovrl_a.f90 index 464b8e31e..c45638213 100644 --- a/base/comm/psb_dovrl_a.f90 +++ b/base/comm/psb_dovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_dovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dscatter.F90 b/base/comm/psb_dscatter.F90 index 3465333b6..559922c8f 100644 --- a/base/comm/psb_dscatter.F90 +++ b/base/comm/psb_dscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dscatter_a.F90 b/base/comm/psb_dscatter_a.F90 index 8864cca8c..739e1aaa8 100644 --- a/base/comm/psb_dscatter_a.F90 +++ b/base/comm/psb_dscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_dscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dspgather.F90 b/base/comm/psb_dspgather.F90 index c7348cd92..e38cb89ad 100644 --- a/base/comm/psb_dspgather.F90 +++ b/base/comm/psb_dspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_egather_a.f90 b/base/comm/psb_egather_a.f90 index b777cebd7..36ddb6abd 100644 --- a/base/comm/psb_egather_a.f90 +++ b/base/comm/psb_egather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_egatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_ehalo_a.f90 b/base/comm/psb_ehalo_a.f90 index d5431e691..742d539a3 100644 --- a/base/comm/psb_ehalo_a.f90 +++ b/base/comm/psb_ehalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_ehalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_eovrl_a.f90 b/base/comm/psb_eovrl_a.f90 index b24e5ab83..5c2354dd6 100644 --- a/base/comm/psb_eovrl_a.f90 +++ b/base/comm/psb_eovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_eovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_escatter_a.F90 b/base/comm/psb_escatter_a.F90 index 9c5ed19df..f5cd08e8e 100644 --- a/base/comm/psb_escatter_a.F90 +++ b/base/comm/psb_escatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_escatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_i2gather_a.f90 b/base/comm/psb_i2gather_a.f90 index e0e1ed7a7..b8eb80bf9 100644 --- a/base/comm/psb_i2gather_a.f90 +++ b/base/comm/psb_i2gather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_i2gatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_i2halo_a.f90 b/base/comm/psb_i2halo_a.f90 index 054b61beb..1ae795a12 100644 --- a/base/comm/psb_i2halo_a.f90 +++ b/base/comm/psb_i2halo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_i2halom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_i2ovrl_a.f90 b/base/comm/psb_i2ovrl_a.f90 index 09cc3b5d1..1501efcea 100644 --- a/base/comm/psb_i2ovrl_a.f90 +++ b/base/comm/psb_i2ovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_i2ovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_i2scatter_a.F90 b/base/comm/psb_i2scatter_a.F90 index 1a07587f0..2da1bcab2 100644 --- a/base/comm/psb_i2scatter_a.F90 +++ b/base/comm/psb_i2scatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_i2scatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_igather.f90 b/base/comm/psb_igather.f90 index acfdf52aa..1d8db00d6 100644 --- a/base/comm/psb_igather.f90 +++ b/base/comm/psb_igather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_ihalo.f90 b/base/comm/psb_ihalo.f90 index 57e529584..988101230 100644 --- a/base/comm/psb_ihalo.f90 +++ b/base/comm/psb_ihalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_iovrl.f90 b/base/comm/psb_iovrl.f90 index 3dd459f1e..af49eb4e7 100644 --- a/base/comm/psb_iovrl.f90 +++ b/base/comm/psb_iovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_iscatter.F90 b/base/comm/psb_iscatter.F90 index 57268e71f..607a4c9be 100644 --- a/base/comm/psb_iscatter.F90 +++ b/base/comm/psb_iscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_ispgather.F90 b/base/comm/psb_ispgather.F90 index 50319debb..bfb43ce7c 100644 --- a/base/comm/psb_ispgather.F90 +++ b/base/comm/psb_ispgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_lgather.f90 b/base/comm/psb_lgather.f90 index 17359bce8..d629b90d5 100644 --- a/base/comm/psb_lgather.f90 +++ b/base/comm/psb_lgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_lhalo.f90 b/base/comm/psb_lhalo.f90 index 3a1885619..0f4c3969a 100644 --- a/base/comm/psb_lhalo.f90 +++ b/base/comm/psb_lhalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_lovrl.f90 b/base/comm/psb_lovrl.f90 index 43de77bb0..9f05305a2 100644 --- a/base/comm/psb_lovrl.f90 +++ b/base/comm/psb_lovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_lscatter.F90 b/base/comm/psb_lscatter.F90 index 0ebbe28eb..fb80711bd 100644 --- a/base/comm/psb_lscatter.F90 +++ b/base/comm/psb_lscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_lspgather.F90 b/base/comm/psb_lspgather.F90 index 5bab14448..1e8dcf65d 100644 --- a/base/comm/psb_lspgather.F90 +++ b/base/comm/psb_lspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_mgather_a.f90 b/base/comm/psb_mgather_a.f90 index df574ea29..7f94883fc 100644 --- a/base/comm/psb_mgather_a.f90 +++ b/base/comm/psb_mgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_mgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_mhalo_a.f90 b/base/comm/psb_mhalo_a.f90 index c3f6a6889..0b020d81e 100644 --- a/base/comm/psb_mhalo_a.f90 +++ b/base/comm/psb_mhalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_mhalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_movrl_a.f90 b/base/comm/psb_movrl_a.f90 index 983bcbf81..607674dd2 100644 --- a/base/comm/psb_movrl_a.f90 +++ b/base/comm/psb_movrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_movrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_mscatter_a.F90 b/base/comm/psb_mscatter_a.F90 index 628fcf19d..847320adb 100644 --- a/base/comm/psb_mscatter_a.F90 +++ b/base/comm/psb_mscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_mscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sgather.f90 b/base/comm/psb_sgather.f90 index 59cecc175..d095ba456 100644 --- a/base/comm/psb_sgather.f90 +++ b/base/comm/psb_sgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sgather_a.f90 b/base/comm/psb_sgather_a.f90 index 28d5f5dca..d19d31a12 100644 --- a/base/comm/psb_sgather_a.f90 +++ b/base/comm/psb_sgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_sgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_shalo.f90 b/base/comm/psb_shalo.f90 index 412fc75f2..723f74760 100644 --- a/base/comm/psb_shalo.f90 +++ b/base/comm/psb_shalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_shalo_a.f90 b/base/comm/psb_shalo_a.f90 index 23cc464d8..5de9cf81c 100644 --- a/base/comm/psb_shalo_a.f90 +++ b/base/comm/psb_shalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_shalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sovrl.f90 b/base/comm/psb_sovrl.f90 index 05c5ade28..edd74972d 100644 --- a/base/comm/psb_sovrl.f90 +++ b/base/comm/psb_sovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sovrl_a.f90 b/base/comm/psb_sovrl_a.f90 index 6ced0fd57..ddce2b2bb 100644 --- a/base/comm/psb_sovrl_a.f90 +++ b/base/comm/psb_sovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_sovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sscatter.F90 b/base/comm/psb_sscatter.F90 index f2b79e839..802be716b 100644 --- a/base/comm/psb_sscatter.F90 +++ b/base/comm/psb_sscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sscatter_a.F90 b/base/comm/psb_sscatter_a.F90 index e060bd1c8..ae8525d32 100644 --- a/base/comm/psb_sscatter_a.F90 +++ b/base/comm/psb_sscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_sscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sspgather.F90 b/base/comm/psb_sspgather.F90 index d6317de22..14efe3539 100644 --- a/base/comm/psb_sspgather.F90 +++ b/base/comm/psb_sspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zgather.f90 b/base/comm/psb_zgather.f90 index 5cf445a9b..b4bf15b7e 100644 --- a/base/comm/psb_zgather.f90 +++ b/base/comm/psb_zgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zgather_a.f90 b/base/comm/psb_zgather_a.f90 index fa5f288b5..0b702835d 100644 --- a/base/comm/psb_zgather_a.f90 +++ b/base/comm/psb_zgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_zgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zhalo.f90 b/base/comm/psb_zhalo.f90 index 2bf1aef20..9ed9a03c9 100644 --- a/base/comm/psb_zhalo.f90 +++ b/base/comm/psb_zhalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zhalo_a.f90 b/base/comm/psb_zhalo_a.f90 index 2acc24631..fac264995 100644 --- a/base/comm/psb_zhalo_a.f90 +++ b/base/comm/psb_zhalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_zhalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zovrl.f90 b/base/comm/psb_zovrl.f90 index 02a2a73d7..9d5b95b96 100644 --- a/base/comm/psb_zovrl.f90 +++ b/base/comm/psb_zovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zovrl_a.f90 b/base/comm/psb_zovrl_a.f90 index e7a87cef8..f95b827ac 100644 --- a/base/comm/psb_zovrl_a.f90 +++ b/base/comm/psb_zovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_zovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zscatter.F90 b/base/comm/psb_zscatter.F90 index f8d2102b6..aae8efd34 100644 --- a/base/comm/psb_zscatter.F90 +++ b/base/comm/psb_zscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zscatter_a.F90 b/base/comm/psb_zscatter_a.F90 index d51dc82ac..5321905ae 100644 --- a/base/comm/psb_zscatter_a.F90 +++ b/base/comm/psb_zscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_zscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zspgather.F90 b/base/comm/psb_zspgather.F90 index 5d4a809b3..5533b5095 100644 --- a/base/comm/psb_zspgather.F90 +++ b/base/comm/psb_zspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_hsort_mod.f90 b/base/modules/auxil/psb_c_hsort_mod.f90 index 863614c9a..ad375db79 100644 --- a/base/modules/auxil/psb_c_hsort_mod.f90 +++ b/base/modules/auxil/psb_c_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_hsort_x_mod.f90 b/base/modules/auxil/psb_c_hsort_x_mod.f90 index 8f0437f7c..1787a77b7 100644 --- a/base/modules/auxil/psb_c_hsort_x_mod.f90 +++ b/base/modules/auxil/psb_c_hsort_x_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_ip_reord_mod.F90 b/base/modules/auxil/psb_c_ip_reord_mod.F90 index daec3a65f..99b3354e9 100644 --- a/base/modules/auxil/psb_c_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_c_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_isort_mod.f90 b/base/modules/auxil/psb_c_isort_mod.f90 index 302a2d8ec..bc46e9516 100644 --- a/base/modules/auxil/psb_c_isort_mod.f90 +++ b/base/modules/auxil/psb_c_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_msort_mod.f90 b/base/modules/auxil/psb_c_msort_mod.f90 index 54103747c..efd5fb7ad 100644 --- a/base/modules/auxil/psb_c_msort_mod.f90 +++ b/base/modules/auxil/psb_c_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_qsort_mod.f90 b/base/modules/auxil/psb_c_qsort_mod.f90 index 178fdc721..b055fc07c 100644 --- a/base/modules/auxil/psb_c_qsort_mod.f90 +++ b/base/modules/auxil/psb_c_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_rb_idx_tree_mod.f90 b/base/modules/auxil/psb_c_rb_idx_tree_mod.f90 index 9b3ada6e4..f3669f69e 100644 --- a/base/modules/auxil/psb_c_rb_idx_tree_mod.f90 +++ b/base/modules/auxil/psb_c_rb_idx_tree_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_realloc_mod.F90 b/base/modules/auxil/psb_c_realloc_mod.F90 index 16be31838..dae4f8974 100644 --- a/base/modules/auxil/psb_c_realloc_mod.F90 +++ b/base/modules/auxil/psb_c_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_hsort_mod.f90 b/base/modules/auxil/psb_d_hsort_mod.f90 index e9d10a706..d54886471 100644 --- a/base/modules/auxil/psb_d_hsort_mod.f90 +++ b/base/modules/auxil/psb_d_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_hsort_x_mod.f90 b/base/modules/auxil/psb_d_hsort_x_mod.f90 index ba45d6833..adefb3c46 100644 --- a/base/modules/auxil/psb_d_hsort_x_mod.f90 +++ b/base/modules/auxil/psb_d_hsort_x_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_ip_reord_mod.F90 b/base/modules/auxil/psb_d_ip_reord_mod.F90 index 7cd0a2699..229cafc5e 100644 --- a/base/modules/auxil/psb_d_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_d_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_isort_mod.f90 b/base/modules/auxil/psb_d_isort_mod.f90 index e5e2a09a6..f59e1cc07 100644 --- a/base/modules/auxil/psb_d_isort_mod.f90 +++ b/base/modules/auxil/psb_d_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_msort_mod.f90 b/base/modules/auxil/psb_d_msort_mod.f90 index 3c4559bfe..b9acd7cdf 100644 --- a/base/modules/auxil/psb_d_msort_mod.f90 +++ b/base/modules/auxil/psb_d_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_qsort_mod.f90 b/base/modules/auxil/psb_d_qsort_mod.f90 index 4a9953d8b..ca547cd2e 100644 --- a/base/modules/auxil/psb_d_qsort_mod.f90 +++ b/base/modules/auxil/psb_d_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_rb_idx_tree_mod.f90 b/base/modules/auxil/psb_d_rb_idx_tree_mod.f90 index 099d1a305..b68326d0b 100644 --- a/base/modules/auxil/psb_d_rb_idx_tree_mod.f90 +++ b/base/modules/auxil/psb_d_rb_idx_tree_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_realloc_mod.F90 b/base/modules/auxil/psb_d_realloc_mod.F90 index ae093a4a3..96d094d5a 100644 --- a/base/modules/auxil/psb_d_realloc_mod.F90 +++ b/base/modules/auxil/psb_d_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_hsort_mod.f90 b/base/modules/auxil/psb_e_hsort_mod.f90 index 3bc38743a..5789c680e 100644 --- a/base/modules/auxil/psb_e_hsort_mod.f90 +++ b/base/modules/auxil/psb_e_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_ip_reord_mod.F90 b/base/modules/auxil/psb_e_ip_reord_mod.F90 index 7369d1f2f..7b018cab1 100644 --- a/base/modules/auxil/psb_e_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_e_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_isort_mod.f90 b/base/modules/auxil/psb_e_isort_mod.f90 index 4006c4120..dd859b7ec 100644 --- a/base/modules/auxil/psb_e_isort_mod.f90 +++ b/base/modules/auxil/psb_e_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_msort_mod.f90 b/base/modules/auxil/psb_e_msort_mod.f90 index ef9d5b8d6..0f1637afd 100644 --- a/base/modules/auxil/psb_e_msort_mod.f90 +++ b/base/modules/auxil/psb_e_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_qsort_mod.f90 b/base/modules/auxil/psb_e_qsort_mod.f90 index bfd9aa0d2..f3d2457e7 100644 --- a/base/modules/auxil/psb_e_qsort_mod.f90 +++ b/base/modules/auxil/psb_e_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_realloc_mod.F90 b/base/modules/auxil/psb_e_realloc_mod.F90 index 688753d88..b3749ced6 100644 --- a/base/modules/auxil/psb_e_realloc_mod.F90 +++ b/base/modules/auxil/psb_e_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i2_hsort_mod.f90 b/base/modules/auxil/psb_i2_hsort_mod.f90 index 76f7c3fe8..9c5fc4985 100644 --- a/base/modules/auxil/psb_i2_hsort_mod.f90 +++ b/base/modules/auxil/psb_i2_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i2_ip_reord_mod.F90 b/base/modules/auxil/psb_i2_ip_reord_mod.F90 index 985b3cd42..9f437f980 100644 --- a/base/modules/auxil/psb_i2_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_i2_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i2_isort_mod.f90 b/base/modules/auxil/psb_i2_isort_mod.f90 index a7b016624..396229a0f 100644 --- a/base/modules/auxil/psb_i2_isort_mod.f90 +++ b/base/modules/auxil/psb_i2_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i2_msort_mod.f90 b/base/modules/auxil/psb_i2_msort_mod.f90 index f884be48d..d0e606805 100644 --- a/base/modules/auxil/psb_i2_msort_mod.f90 +++ b/base/modules/auxil/psb_i2_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i2_qsort_mod.f90 b/base/modules/auxil/psb_i2_qsort_mod.f90 index 4931a35e5..9b2e5119a 100644 --- a/base/modules/auxil/psb_i2_qsort_mod.f90 +++ b/base/modules/auxil/psb_i2_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i2_realloc_mod.F90 b/base/modules/auxil/psb_i2_realloc_mod.F90 index 8d14f5635..267766377 100644 --- a/base/modules/auxil/psb_i2_realloc_mod.F90 +++ b/base/modules/auxil/psb_i2_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i_hsort_x_mod.f90 b/base/modules/auxil/psb_i_hsort_x_mod.f90 index 4bbc3d7f8..ff8259105 100644 --- a/base/modules/auxil/psb_i_hsort_x_mod.f90 +++ b/base/modules/auxil/psb_i_hsort_x_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_ip_reord_mod.F90 b/base/modules/auxil/psb_ip_reord_mod.F90 index 6728c5181..0abc69f59 100644 --- a/base/modules/auxil/psb_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_l_hsort_x_mod.f90 b/base/modules/auxil/psb_l_hsort_x_mod.f90 index 5134d6bb7..54acc107f 100644 --- a/base/modules/auxil/psb_l_hsort_x_mod.f90 +++ b/base/modules/auxil/psb_l_hsort_x_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_m_hsort_mod.f90 b/base/modules/auxil/psb_m_hsort_mod.f90 index 06dab2102..62c7c2f10 100644 --- a/base/modules/auxil/psb_m_hsort_mod.f90 +++ b/base/modules/auxil/psb_m_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_m_ip_reord_mod.F90 b/base/modules/auxil/psb_m_ip_reord_mod.F90 index 29ea47f14..c6ef915c1 100644 --- a/base/modules/auxil/psb_m_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_m_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_m_isort_mod.f90 b/base/modules/auxil/psb_m_isort_mod.f90 index 11206fd03..6e355561a 100644 --- a/base/modules/auxil/psb_m_isort_mod.f90 +++ b/base/modules/auxil/psb_m_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_m_msort_mod.f90 b/base/modules/auxil/psb_m_msort_mod.f90 index d433a3a65..b94bf63e6 100644 --- a/base/modules/auxil/psb_m_msort_mod.f90 +++ b/base/modules/auxil/psb_m_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_m_qsort_mod.f90 b/base/modules/auxil/psb_m_qsort_mod.f90 index b43a62c0f..3c7a4c516 100644 --- a/base/modules/auxil/psb_m_qsort_mod.f90 +++ b/base/modules/auxil/psb_m_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_m_realloc_mod.F90 b/base/modules/auxil/psb_m_realloc_mod.F90 index 865aa47b9..725f00ef0 100644 --- a/base/modules/auxil/psb_m_realloc_mod.F90 +++ b/base/modules/auxil/psb_m_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_rb_idx_tree_mod.f90 b/base/modules/auxil/psb_rb_idx_tree_mod.f90 index 074255eaa..6aa685922 100644 --- a/base/modules/auxil/psb_rb_idx_tree_mod.f90 +++ b/base/modules/auxil/psb_rb_idx_tree_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_s_hsort_mod.f90 b/base/modules/auxil/psb_s_hsort_mod.f90 index 7b25cec0c..66c22db56 100644 --- a/base/modules/auxil/psb_s_hsort_mod.f90 +++ b/base/modules/auxil/psb_s_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_s_hsort_x_mod.f90 b/base/modules/auxil/psb_s_hsort_x_mod.f90 index 204dbbf4e..10ab73e13 100644 --- a/base/modules/auxil/psb_s_hsort_x_mod.f90 +++ b/base/modules/auxil/psb_s_hsort_x_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_s_ip_reord_mod.F90 b/base/modules/auxil/psb_s_ip_reord_mod.F90 index 1b291d502..ad9784c26 100644 --- a/base/modules/auxil/psb_s_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_s_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_s_isort_mod.f90 b/base/modules/auxil/psb_s_isort_mod.f90 index 194ba2dee..1d02e2e92 100644 --- a/base/modules/auxil/psb_s_isort_mod.f90 +++ b/base/modules/auxil/psb_s_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_s_msort_mod.f90 b/base/modules/auxil/psb_s_msort_mod.f90 index ce0e4399b..08d6a1f6a 100644 --- a/base/modules/auxil/psb_s_msort_mod.f90 +++ b/base/modules/auxil/psb_s_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_s_qsort_mod.f90 b/base/modules/auxil/psb_s_qsort_mod.f90 index 5fbfe9e1d..4e1996616 100644 --- a/base/modules/auxil/psb_s_qsort_mod.f90 +++ b/base/modules/auxil/psb_s_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_s_rb_idx_tree_mod.f90 b/base/modules/auxil/psb_s_rb_idx_tree_mod.f90 index 3ed2d60a4..57a1a10ee 100644 --- a/base/modules/auxil/psb_s_rb_idx_tree_mod.f90 +++ b/base/modules/auxil/psb_s_rb_idx_tree_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_s_realloc_mod.F90 b/base/modules/auxil/psb_s_realloc_mod.F90 index fb2820cca..40a0021bd 100644 --- a/base/modules/auxil/psb_s_realloc_mod.F90 +++ b/base/modules/auxil/psb_s_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_sort_mod.f90 b/base/modules/auxil/psb_sort_mod.f90 index e980dc2b0..abcb3c3ea 100644 --- a/base/modules/auxil/psb_sort_mod.f90 +++ b/base/modules/auxil/psb_sort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_string_mod.f90 b/base/modules/auxil/psb_string_mod.f90 index 72f5d870c..5c575ad89 100644 --- a/base/modules/auxil/psb_string_mod.f90 +++ b/base/modules/auxil/psb_string_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_z_hsort_mod.f90 b/base/modules/auxil/psb_z_hsort_mod.f90 index bc3d34364..e7f7939df 100644 --- a/base/modules/auxil/psb_z_hsort_mod.f90 +++ b/base/modules/auxil/psb_z_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_z_hsort_x_mod.f90 b/base/modules/auxil/psb_z_hsort_x_mod.f90 index 4b7302aa0..9e944ec20 100644 --- a/base/modules/auxil/psb_z_hsort_x_mod.f90 +++ b/base/modules/auxil/psb_z_hsort_x_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_z_ip_reord_mod.F90 b/base/modules/auxil/psb_z_ip_reord_mod.F90 index f8ddc182c..7552d7188 100644 --- a/base/modules/auxil/psb_z_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_z_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_z_isort_mod.f90 b/base/modules/auxil/psb_z_isort_mod.f90 index bb51de002..12c673b46 100644 --- a/base/modules/auxil/psb_z_isort_mod.f90 +++ b/base/modules/auxil/psb_z_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_z_msort_mod.f90 b/base/modules/auxil/psb_z_msort_mod.f90 index 6a830d5df..7a02669ee 100644 --- a/base/modules/auxil/psb_z_msort_mod.f90 +++ b/base/modules/auxil/psb_z_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_z_qsort_mod.f90 b/base/modules/auxil/psb_z_qsort_mod.f90 index 351c6ebd4..be7081596 100644 --- a/base/modules/auxil/psb_z_qsort_mod.f90 +++ b/base/modules/auxil/psb_z_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_z_rb_idx_tree_mod.f90 b/base/modules/auxil/psb_z_rb_idx_tree_mod.f90 index 7b15f0800..d3e3555d2 100644 --- a/base/modules/auxil/psb_z_rb_idx_tree_mod.f90 +++ b/base/modules/auxil/psb_z_rb_idx_tree_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_z_realloc_mod.F90 b/base/modules/auxil/psb_z_realloc_mod.F90 index cf33e731f..198a41012 100644 --- a/base/modules/auxil/psb_z_realloc_mod.F90 +++ b/base/modules/auxil/psb_z_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_acx_mod.f90 b/base/modules/auxil/psi_acx_mod.f90 index 8150c8779..90a021f0f 100644 --- a/base/modules/auxil/psi_acx_mod.f90 +++ b/base/modules/auxil/psi_acx_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_alcx_mod.f90 b/base/modules/auxil/psi_alcx_mod.f90 index c11ce8e1d..1bd83d3c6 100644 --- a/base/modules/auxil/psi_alcx_mod.f90 +++ b/base/modules/auxil/psi_alcx_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_c_serial_mod.f90 b/base/modules/auxil/psi_c_serial_mod.f90 index 1d30df106..24a0df63a 100644 --- a/base/modules/auxil/psi_c_serial_mod.f90 +++ b/base/modules/auxil/psi_c_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_d_serial_mod.f90 b/base/modules/auxil/psi_d_serial_mod.f90 index 4115d89ab..abc3d3344 100644 --- a/base/modules/auxil/psi_d_serial_mod.f90 +++ b/base/modules/auxil/psi_d_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_e_serial_mod.f90 b/base/modules/auxil/psi_e_serial_mod.f90 index 6ebc3a542..17403f8d0 100644 --- a/base/modules/auxil/psi_e_serial_mod.f90 +++ b/base/modules/auxil/psi_e_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_i2_serial_mod.f90 b/base/modules/auxil/psi_i2_serial_mod.f90 index 57712a66d..bfba42cb8 100644 --- a/base/modules/auxil/psi_i2_serial_mod.f90 +++ b/base/modules/auxil/psi_i2_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_lcx_mod.f90 b/base/modules/auxil/psi_lcx_mod.f90 index 482069f0e..a876d5220 100644 --- a/base/modules/auxil/psi_lcx_mod.f90 +++ b/base/modules/auxil/psi_lcx_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_m_serial_mod.f90 b/base/modules/auxil/psi_m_serial_mod.f90 index 05a75bde8..1ac2308d3 100644 --- a/base/modules/auxil/psi_m_serial_mod.f90 +++ b/base/modules/auxil/psi_m_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_s_serial_mod.f90 b/base/modules/auxil/psi_s_serial_mod.f90 index 95f536f32..36fa88bbc 100644 --- a/base/modules/auxil/psi_s_serial_mod.f90 +++ b/base/modules/auxil/psi_s_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_serial_mod.f90 b/base/modules/auxil/psi_serial_mod.f90 index 249ecaa2b..941aa6022 100644 --- a/base/modules/auxil/psi_serial_mod.f90 +++ b/base/modules/auxil/psi_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psi_z_serial_mod.f90 b/base/modules/auxil/psi_z_serial_mod.f90 index c08a0fece..bc960db0a 100644 --- a/base/modules/auxil/psi_z_serial_mod.f90 +++ b/base/modules/auxil/psi_z_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_base_linmap_mod.f90 b/base/modules/comm/psb_base_linmap_mod.f90 index b06470aa6..aeb3822a3 100644 --- a/base/modules/comm/psb_base_linmap_mod.f90 +++ b/base/modules/comm/psb_base_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_c_comm_a_mod.f90 b/base/modules/comm/psb_c_comm_a_mod.f90 index 0fbcf01ec..c25270ecd 100644 --- a/base/modules/comm/psb_c_comm_a_mod.f90 +++ b/base/modules/comm/psb_c_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_c_comm_mod.f90 b/base/modules/comm/psb_c_comm_mod.f90 index 1bd461977..19ef74fe0 100644 --- a/base/modules/comm/psb_c_comm_mod.f90 +++ b/base/modules/comm/psb_c_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_c_linmap_mod.f90 b/base/modules/comm/psb_c_linmap_mod.f90 index 07257d881..32b1055fd 100644 --- a/base/modules/comm/psb_c_linmap_mod.f90 +++ b/base/modules/comm/psb_c_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_comm_mod.f90 b/base/modules/comm/psb_comm_mod.f90 index 17cffe4cd..aa2bfafc5 100644 --- a/base/modules/comm/psb_comm_mod.f90 +++ b/base/modules/comm/psb_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_d_comm_a_mod.f90 b/base/modules/comm/psb_d_comm_a_mod.f90 index 5fb410f2d..aa3c6feb8 100644 --- a/base/modules/comm/psb_d_comm_a_mod.f90 +++ b/base/modules/comm/psb_d_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_d_comm_mod.f90 b/base/modules/comm/psb_d_comm_mod.f90 index 013c76e2a..96b8bb092 100644 --- a/base/modules/comm/psb_d_comm_mod.f90 +++ b/base/modules/comm/psb_d_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_d_linmap_mod.f90 b/base/modules/comm/psb_d_linmap_mod.f90 index 744cad2d0..15eacb584 100644 --- a/base/modules/comm/psb_d_linmap_mod.f90 +++ b/base/modules/comm/psb_d_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_e_comm_a_mod.f90 b/base/modules/comm/psb_e_comm_a_mod.f90 index 0e57a4594..b9c9b1fe0 100644 --- a/base/modules/comm/psb_e_comm_a_mod.f90 +++ b/base/modules/comm/psb_e_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_i2_comm_a_mod.f90 b/base/modules/comm/psb_i2_comm_a_mod.f90 index 72cdf228b..7ac24f9d1 100644 --- a/base/modules/comm/psb_i2_comm_a_mod.f90 +++ b/base/modules/comm/psb_i2_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_i_comm_mod.f90 b/base/modules/comm/psb_i_comm_mod.f90 index 25d761ba8..fcc1539d8 100644 --- a/base/modules/comm/psb_i_comm_mod.f90 +++ b/base/modules/comm/psb_i_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_l_comm_mod.f90 b/base/modules/comm/psb_l_comm_mod.f90 index 2bba923dd..bb805539d 100644 --- a/base/modules/comm/psb_l_comm_mod.f90 +++ b/base/modules/comm/psb_l_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_linmap_mod.f90 b/base/modules/comm/psb_linmap_mod.f90 index f27926c92..036926623 100644 --- a/base/modules/comm/psb_linmap_mod.f90 +++ b/base/modules/comm/psb_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_m_comm_a_mod.f90 b/base/modules/comm/psb_m_comm_a_mod.f90 index 105f14d7e..83a07e2d2 100644 --- a/base/modules/comm/psb_m_comm_a_mod.f90 +++ b/base/modules/comm/psb_m_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_s_comm_a_mod.f90 b/base/modules/comm/psb_s_comm_a_mod.f90 index 5ceaad8bf..8f1a88905 100644 --- a/base/modules/comm/psb_s_comm_a_mod.f90 +++ b/base/modules/comm/psb_s_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_s_comm_mod.f90 b/base/modules/comm/psb_s_comm_mod.f90 index a202b5b61..df71c05c5 100644 --- a/base/modules/comm/psb_s_comm_mod.f90 +++ b/base/modules/comm/psb_s_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_s_linmap_mod.f90 b/base/modules/comm/psb_s_linmap_mod.f90 index 1ded2c596..77459e2a0 100644 --- a/base/modules/comm/psb_s_linmap_mod.f90 +++ b/base/modules/comm/psb_s_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_z_comm_a_mod.f90 b/base/modules/comm/psb_z_comm_a_mod.f90 index 708efead7..478cc99a5 100644 --- a/base/modules/comm/psb_z_comm_a_mod.f90 +++ b/base/modules/comm/psb_z_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_z_comm_mod.f90 b/base/modules/comm/psb_z_comm_mod.f90 index 304cdfb9b..0dc85160d 100644 --- a/base/modules/comm/psb_z_comm_mod.f90 +++ b/base/modules/comm/psb_z_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_z_linmap_mod.f90 b/base/modules/comm/psb_z_linmap_mod.f90 index 8fe61b0a8..a72933f43 100644 --- a/base/modules/comm/psb_z_linmap_mod.f90 +++ b/base/modules/comm/psb_z_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_c_comm_a_mod.f90 b/base/modules/comm/psi_c_comm_a_mod.f90 index 97b5f9588..9289c6bd9 100644 --- a/base/modules/comm/psi_c_comm_a_mod.f90 +++ b/base/modules/comm/psi_c_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_c_comm_v_mod.f90 b/base/modules/comm/psi_c_comm_v_mod.f90 index 9f7c87581..4a05f675f 100644 --- a/base/modules/comm/psi_c_comm_v_mod.f90 +++ b/base/modules/comm/psi_c_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_d_comm_a_mod.f90 b/base/modules/comm/psi_d_comm_a_mod.f90 index 46f021427..f27378087 100644 --- a/base/modules/comm/psi_d_comm_a_mod.f90 +++ b/base/modules/comm/psi_d_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index 5893d76bb..86647fadc 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_e_comm_a_mod.f90 b/base/modules/comm/psi_e_comm_a_mod.f90 index 9e215e7cc..d3108e8b9 100644 --- a/base/modules/comm/psi_e_comm_a_mod.f90 +++ b/base/modules/comm/psi_e_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_i2_comm_a_mod.f90 b/base/modules/comm/psi_i2_comm_a_mod.f90 index d6c282f96..a76ca9b37 100644 --- a/base/modules/comm/psi_i2_comm_a_mod.f90 +++ b/base/modules/comm/psi_i2_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_i_comm_v_mod.f90 b/base/modules/comm/psi_i_comm_v_mod.f90 index 2bc8a0e96..e5cfe8e9d 100644 --- a/base/modules/comm/psi_i_comm_v_mod.f90 +++ b/base/modules/comm/psi_i_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_l_comm_v_mod.f90 b/base/modules/comm/psi_l_comm_v_mod.f90 index 92768d863..c4f294fda 100644 --- a/base/modules/comm/psi_l_comm_v_mod.f90 +++ b/base/modules/comm/psi_l_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_m_comm_a_mod.f90 b/base/modules/comm/psi_m_comm_a_mod.f90 index ac134e655..8950ed6ff 100644 --- a/base/modules/comm/psi_m_comm_a_mod.f90 +++ b/base/modules/comm/psi_m_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_s_comm_a_mod.f90 b/base/modules/comm/psi_s_comm_a_mod.f90 index 3615bb6c0..50fc6986f 100644 --- a/base/modules/comm/psi_s_comm_a_mod.f90 +++ b/base/modules/comm/psi_s_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_s_comm_v_mod.f90 b/base/modules/comm/psi_s_comm_v_mod.f90 index f210542a0..704c84db0 100644 --- a/base/modules/comm/psi_s_comm_v_mod.f90 +++ b/base/modules/comm/psi_s_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_z_comm_a_mod.f90 b/base/modules/comm/psi_z_comm_a_mod.f90 index 28393467b..d86c796a1 100644 --- a/base/modules/comm/psi_z_comm_a_mod.f90 +++ b/base/modules/comm/psi_z_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psi_z_comm_v_mod.f90 b/base/modules/comm/psi_z_comm_v_mod.f90 index 8c749f605..033a64801 100644 --- a/base/modules/comm/psi_z_comm_v_mod.f90 +++ b/base/modules/comm/psi_z_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_desc_const_mod.f90 b/base/modules/desc/psb_desc_const_mod.f90 index 8cfbc208f..e0be707b1 100644 --- a/base/modules/desc/psb_desc_const_mod.f90 +++ b/base/modules/desc/psb_desc_const_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_desc_mod.F90 b/base/modules/desc/psb_desc_mod.F90 index 86cdf351c..bf8f6c93c 100644 --- a/base/modules/desc/psb_desc_mod.F90 +++ b/base/modules/desc/psb_desc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_gen_block_map_mod.F90 b/base/modules/desc/psb_gen_block_map_mod.F90 index 3b5ecfd12..cbcac3190 100644 --- a/base/modules/desc/psb_gen_block_map_mod.F90 +++ b/base/modules/desc/psb_gen_block_map_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_glist_map_mod.F90 b/base/modules/desc/psb_glist_map_mod.F90 index a63210134..e3a764ac9 100644 --- a/base/modules/desc/psb_glist_map_mod.F90 +++ b/base/modules/desc/psb_glist_map_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_hash_map_mod.F90 b/base/modules/desc/psb_hash_map_mod.F90 index 7c432b524..4c92a4a83 100644 --- a/base/modules/desc/psb_hash_map_mod.F90 +++ b/base/modules/desc/psb_hash_map_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_hash_mod.F90 b/base/modules/desc/psb_hash_mod.F90 index c2839cf48..f26c45c33 100644 --- a/base/modules/desc/psb_hash_mod.F90 +++ b/base/modules/desc/psb_hash_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_indx_map_mod.F90 b/base/modules/desc/psb_indx_map_mod.F90 index 7d7b9a075..e99bbc691 100644 --- a/base/modules/desc/psb_indx_map_mod.F90 +++ b/base/modules/desc/psb_indx_map_mod.F90 @@ -15,7 +15,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_list_map_mod.F90 b/base/modules/desc/psb_list_map_mod.F90 index 7b4778fbd..0a88ad84b 100644 --- a/base/modules/desc/psb_list_map_mod.F90 +++ b/base/modules/desc/psb_list_map_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/desc/psb_repl_map_mod.F90 b/base/modules/desc/psb_repl_map_mod.F90 index 2a25aef9a..e52ec9edd 100644 --- a/base/modules/desc/psb_repl_map_mod.F90 +++ b/base/modules/desc/psb_repl_map_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/error.f90 b/base/modules/error.f90 index 10cb1339f..545f4dc96 100644 --- a/base/modules/error.f90 +++ b/base/modules/error.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_c_collective_mod.F90 b/base/modules/penv/psi_c_collective_mod.F90 index 0e04fd5ed..dedd8503c 100644 --- a/base/modules/penv/psi_c_collective_mod.F90 +++ b/base/modules/penv/psi_c_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_c_p2p_mod.F90 b/base/modules/penv/psi_c_p2p_mod.F90 index 183584ff9..8a5f2c20b 100644 --- a/base/modules/penv/psi_c_p2p_mod.F90 +++ b/base/modules/penv/psi_c_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_collective_mod.F90 b/base/modules/penv/psi_collective_mod.F90 index 4ca131d4b..a06103a88 100644 --- a/base/modules/penv/psi_collective_mod.F90 +++ b/base/modules/penv/psi_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_d_collective_mod.F90 b/base/modules/penv/psi_d_collective_mod.F90 index bf66dc470..14e4f48a5 100644 --- a/base/modules/penv/psi_d_collective_mod.F90 +++ b/base/modules/penv/psi_d_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_d_p2p_mod.F90 b/base/modules/penv/psi_d_p2p_mod.F90 index 280f328de..99369d4a1 100644 --- a/base/modules/penv/psi_d_p2p_mod.F90 +++ b/base/modules/penv/psi_d_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_e_collective_mod.F90 b/base/modules/penv/psi_e_collective_mod.F90 index 15c69864f..63ad5627d 100644 --- a/base/modules/penv/psi_e_collective_mod.F90 +++ b/base/modules/penv/psi_e_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_e_p2p_mod.F90 b/base/modules/penv/psi_e_p2p_mod.F90 index f6c37d8a8..f3c4d2bac 100644 --- a/base/modules/penv/psi_e_p2p_mod.F90 +++ b/base/modules/penv/psi_e_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_i2_collective_mod.F90 b/base/modules/penv/psi_i2_collective_mod.F90 index 7ca2de155..cb2fe435c 100644 --- a/base/modules/penv/psi_i2_collective_mod.F90 +++ b/base/modules/penv/psi_i2_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_i2_p2p_mod.F90 b/base/modules/penv/psi_i2_p2p_mod.F90 index 4d2d33858..eb70385e5 100644 --- a/base/modules/penv/psi_i2_p2p_mod.F90 +++ b/base/modules/penv/psi_i2_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_m_collective_mod.F90 b/base/modules/penv/psi_m_collective_mod.F90 index 0e858c03a..8db430045 100644 --- a/base/modules/penv/psi_m_collective_mod.F90 +++ b/base/modules/penv/psi_m_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_m_p2p_mod.F90 b/base/modules/penv/psi_m_p2p_mod.F90 index 0132ce02c..1f1683a88 100644 --- a/base/modules/penv/psi_m_p2p_mod.F90 +++ b/base/modules/penv/psi_m_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_p2p_mod.F90 b/base/modules/penv/psi_p2p_mod.F90 index 275b5de7a..a3eda5af5 100644 --- a/base/modules/penv/psi_p2p_mod.F90 +++ b/base/modules/penv/psi_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_penv_mod.F90 b/base/modules/penv/psi_penv_mod.F90 index f810863c1..1e4d12281 100644 --- a/base/modules/penv/psi_penv_mod.F90 +++ b/base/modules/penv/psi_penv_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_s_collective_mod.F90 b/base/modules/penv/psi_s_collective_mod.F90 index 9936395ad..809ca2865 100644 --- a/base/modules/penv/psi_s_collective_mod.F90 +++ b/base/modules/penv/psi_s_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_s_p2p_mod.F90 b/base/modules/penv/psi_s_p2p_mod.F90 index d8352bd5d..a1b70392d 100644 --- a/base/modules/penv/psi_s_p2p_mod.F90 +++ b/base/modules/penv/psi_s_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_z_collective_mod.F90 b/base/modules/penv/psi_z_collective_mod.F90 index de4e5bcc7..cbe434ac3 100644 --- a/base/modules/penv/psi_z_collective_mod.F90 +++ b/base/modules/penv/psi_z_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_z_p2p_mod.F90 b/base/modules/penv/psi_z_p2p_mod.F90 index 6606d4ed1..c8ed01eb7 100644 --- a/base/modules/penv/psi_z_p2p_mod.F90 +++ b/base/modules/penv/psi_z_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psb_base_mod.f90 b/base/modules/psb_base_mod.f90 index 78a973b64..87cc46384 100644 --- a/base/modules/psb_base_mod.f90 +++ b/base/modules/psb_base_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psb_cbind_const_mod.F90 b/base/modules/psb_cbind_const_mod.F90 index a976d55da..901569cc1 100644 --- a/base/modules/psb_cbind_const_mod.F90 +++ b/base/modules/psb_cbind_const_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psb_check_mod.f90 b/base/modules/psb_check_mod.f90 index 599c7197e..e352743a1 100644 --- a/base/modules/psb_check_mod.f90 +++ b/base/modules/psb_check_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index 036b90d82..16802c447 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psb_error_mod.F90 b/base/modules/psb_error_mod.F90 index a13dd97f0..2ab958938 100644 --- a/base/modules/psb_error_mod.F90 +++ b/base/modules/psb_error_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psb_realloc_mod.F90 b/base/modules/psb_realloc_mod.F90 index fba5fd0d7..b912eec8e 100644 --- a/base/modules/psb_realloc_mod.F90 +++ b/base/modules/psb_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psb_timers_mod.f90 b/base/modules/psb_timers_mod.f90 index 6bf954668..cc6fe88e2 100644 --- a/base/modules/psb_timers_mod.f90 +++ b/base/modules/psb_timers_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psblas/psb_c_psblas_mod.F90 b/base/modules/psblas/psb_c_psblas_mod.F90 index 130159bc0..73c03ba5d 100644 --- a/base/modules/psblas/psb_c_psblas_mod.F90 +++ b/base/modules/psblas/psb_c_psblas_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psblas/psb_d_psblas_mod.F90 b/base/modules/psblas/psb_d_psblas_mod.F90 index afc3acafa..feca402b9 100644 --- a/base/modules/psblas/psb_d_psblas_mod.F90 +++ b/base/modules/psblas/psb_d_psblas_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psblas/psb_psblas_mod.f90 b/base/modules/psblas/psb_psblas_mod.f90 index d582c36f1..df0dc1a86 100644 --- a/base/modules/psblas/psb_psblas_mod.f90 +++ b/base/modules/psblas/psb_psblas_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psblas/psb_s_psblas_mod.F90 b/base/modules/psblas/psb_s_psblas_mod.F90 index 6048d023e..2f92d22a4 100644 --- a/base/modules/psblas/psb_s_psblas_mod.F90 +++ b/base/modules/psblas/psb_s_psblas_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psblas/psb_z_psblas_mod.F90 b/base/modules/psblas/psb_z_psblas_mod.F90 index fd0cc300d..6ac7096cc 100644 --- a/base/modules/psblas/psb_z_psblas_mod.F90 +++ b/base/modules/psblas/psb_z_psblas_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_c_mod.F90 b/base/modules/psi_c_mod.F90 index d59d26a21..9028315c3 100644 --- a/base/modules/psi_c_mod.F90 +++ b/base/modules/psi_c_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_d_mod.F90 b/base/modules/psi_d_mod.F90 index f39527f12..833e32fc8 100644 --- a/base/modules/psi_d_mod.F90 +++ b/base/modules/psi_d_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_i_mod.F90 b/base/modules/psi_i_mod.F90 index 881ae078f..ad08b3094 100644 --- a/base/modules/psi_i_mod.F90 +++ b/base/modules/psi_i_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_l_mod.F90 b/base/modules/psi_l_mod.F90 index 1ea56ad0a..58686b6df 100644 --- a/base/modules/psi_l_mod.F90 +++ b/base/modules/psi_l_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_mod.f90 b/base/modules/psi_mod.f90 index 55882c010..f24125c76 100644 --- a/base/modules/psi_mod.f90 +++ b/base/modules/psi_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_s_mod.F90 b/base/modules/psi_s_mod.F90 index cac4d0f6d..b87cade1c 100644 --- a/base/modules/psi_s_mod.F90 +++ b/base/modules/psi_s_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_z_mod.F90 b/base/modules/psi_z_mod.F90 index dc102323f..1ce783151 100644 --- a/base/modules/psi_z_mod.F90 +++ b/base/modules/psi_z_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_base_mat_mod.F90 b/base/modules/serial/psb_base_mat_mod.F90 index 716d78d33..0fc1115a3 100644 --- a/base/modules/serial/psb_base_mat_mod.F90 +++ b/base/modules/serial/psb_base_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_base_mat_mod.F90 b/base/modules/serial/psb_c_base_mat_mod.F90 index a5537034e..2e83ab4e5 100644 --- a/base/modules/serial/psb_c_base_mat_mod.F90 +++ b/base/modules/serial/psb_c_base_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index 2ac4c4149..9542e3ed4 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_csc_mat_mod.f90 b/base/modules/serial/psb_c_csc_mat_mod.f90 index d0f5a7193..7cf1b0e37 100644 --- a/base/modules/serial/psb_c_csc_mat_mod.f90 +++ b/base/modules/serial/psb_c_csc_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_csr_mat_mod.f90 b/base/modules/serial/psb_c_csr_mat_mod.f90 index 3aa096670..6a4afc295 100644 --- a/base/modules/serial/psb_c_csr_mat_mod.f90 +++ b/base/modules/serial/psb_c_csr_mat_mod.f90 @@ -15,7 +15,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_mat_mod.F90 b/base/modules/serial/psb_c_mat_mod.F90 index 91d8bf4d1..628aae1c5 100644 --- a/base/modules/serial/psb_c_mat_mod.F90 +++ b/base/modules/serial/psb_c_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_serial_mod.f90 b/base/modules/serial/psb_c_serial_mod.f90 index 5ad71641c..db590ea4b 100644 --- a/base/modules/serial/psb_c_serial_mod.f90 +++ b/base/modules/serial/psb_c_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_vect_mod.F90 b/base/modules/serial/psb_c_vect_mod.F90 index 8932a369f..db1d346d9 100644 --- a/base/modules/serial/psb_c_vect_mod.F90 +++ b/base/modules/serial/psb_c_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_d_base_mat_mod.F90 b/base/modules/serial/psb_d_base_mat_mod.F90 index b2f49f2d2..24c2097f7 100644 --- a/base/modules/serial/psb_d_base_mat_mod.F90 +++ b/base/modules/serial/psb_d_base_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index e3deaa60e..567161066 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_d_csc_mat_mod.f90 b/base/modules/serial/psb_d_csc_mat_mod.f90 index 9618536f0..05af6923b 100644 --- a/base/modules/serial/psb_d_csc_mat_mod.f90 +++ b/base/modules/serial/psb_d_csc_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_d_csr_mat_mod.f90 b/base/modules/serial/psb_d_csr_mat_mod.f90 index bee32af03..caa20db24 100644 --- a/base/modules/serial/psb_d_csr_mat_mod.f90 +++ b/base/modules/serial/psb_d_csr_mat_mod.f90 @@ -15,7 +15,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_d_mat_mod.F90 b/base/modules/serial/psb_d_mat_mod.F90 index 754196b74..bd4ccc458 100644 --- a/base/modules/serial/psb_d_mat_mod.F90 +++ b/base/modules/serial/psb_d_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_d_serial_mod.f90 b/base/modules/serial/psb_d_serial_mod.f90 index 6446a9f55..fb0bb1b53 100644 --- a/base/modules/serial/psb_d_serial_mod.f90 +++ b/base/modules/serial/psb_d_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index 048703db8..a47595b49 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index e4e19a9d9..6b4d84bb0 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_i_vect_mod.F90 b/base/modules/serial/psb_i_vect_mod.F90 index 83ad6b799..bdaf82f84 100644 --- a/base/modules/serial/psb_i_vect_mod.F90 +++ b/base/modules/serial/psb_i_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index 91ed2968d..d5d0912ff 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_l_vect_mod.F90 b/base/modules/serial/psb_l_vect_mod.F90 index 80813a1c9..cfdc4cf91 100644 --- a/base/modules/serial/psb_l_vect_mod.F90 +++ b/base/modules/serial/psb_l_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_s_base_mat_mod.F90 b/base/modules/serial/psb_s_base_mat_mod.F90 index 27803e0fb..9f787856e 100644 --- a/base/modules/serial/psb_s_base_mat_mod.F90 +++ b/base/modules/serial/psb_s_base_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index 7311225f2..fcaead015 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_s_csc_mat_mod.f90 b/base/modules/serial/psb_s_csc_mat_mod.f90 index 75cccc9da..c91ecb7ce 100644 --- a/base/modules/serial/psb_s_csc_mat_mod.f90 +++ b/base/modules/serial/psb_s_csc_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_s_csr_mat_mod.f90 b/base/modules/serial/psb_s_csr_mat_mod.f90 index b70b2dc66..d9318aef7 100644 --- a/base/modules/serial/psb_s_csr_mat_mod.f90 +++ b/base/modules/serial/psb_s_csr_mat_mod.f90 @@ -15,7 +15,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_s_mat_mod.F90 b/base/modules/serial/psb_s_mat_mod.F90 index ac619c033..5fe57038d 100644 --- a/base/modules/serial/psb_s_mat_mod.F90 +++ b/base/modules/serial/psb_s_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_s_serial_mod.f90 b/base/modules/serial/psb_s_serial_mod.f90 index c475ab8d9..f0e5475fe 100644 --- a/base/modules/serial/psb_s_serial_mod.f90 +++ b/base/modules/serial/psb_s_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_s_vect_mod.F90 b/base/modules/serial/psb_s_vect_mod.F90 index dda736c4b..137f36637 100644 --- a/base/modules/serial/psb_s_vect_mod.F90 +++ b/base/modules/serial/psb_s_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_serial_mod.f90 b/base/modules/serial/psb_serial_mod.f90 index a25c1c37b..00d0db370 100644 --- a/base/modules/serial/psb_serial_mod.f90 +++ b/base/modules/serial/psb_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_z_base_mat_mod.F90 b/base/modules/serial/psb_z_base_mat_mod.F90 index 0d2c9e768..4aa6c3465 100644 --- a/base/modules/serial/psb_z_base_mat_mod.F90 +++ b/base/modules/serial/psb_z_base_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index ba5b996d3..823113aad 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_z_csc_mat_mod.f90 b/base/modules/serial/psb_z_csc_mat_mod.f90 index 023bbf01b..00ecd4cec 100644 --- a/base/modules/serial/psb_z_csc_mat_mod.f90 +++ b/base/modules/serial/psb_z_csc_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_z_csr_mat_mod.f90 b/base/modules/serial/psb_z_csr_mat_mod.f90 index 1703c6c85..e67d86fe3 100644 --- a/base/modules/serial/psb_z_csr_mat_mod.f90 +++ b/base/modules/serial/psb_z_csr_mat_mod.f90 @@ -15,7 +15,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_z_mat_mod.F90 b/base/modules/serial/psb_z_mat_mod.F90 index 521e665a5..762d978f6 100644 --- a/base/modules/serial/psb_z_mat_mod.F90 +++ b/base/modules/serial/psb_z_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_z_serial_mod.f90 b/base/modules/serial/psb_z_serial_mod.f90 index 6339f5e16..7f9dff40f 100644 --- a/base/modules/serial/psb_z_serial_mod.f90 +++ b/base/modules/serial/psb_z_serial_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_z_vect_mod.F90 b/base/modules/serial/psb_z_vect_mod.F90 index a401d66df..6dc3755c0 100644 --- a/base/modules/serial/psb_z_vect_mod.F90 +++ b/base/modules/serial/psb_z_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_c_tools_a_mod.f90 b/base/modules/tools/psb_c_tools_a_mod.f90 index 8dd592b37..60e934748 100644 --- a/base/modules/tools/psb_c_tools_a_mod.f90 +++ b/base/modules/tools/psb_c_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_c_tools_mod.F90 b/base/modules/tools/psb_c_tools_mod.F90 index 813ef370a..4dc0ee522 100644 --- a/base/modules/tools/psb_c_tools_mod.F90 +++ b/base/modules/tools/psb_c_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_cd_tools_mod.F90 b/base/modules/tools/psb_cd_tools_mod.F90 index 579b6d5fa..69f803747 100644 --- a/base/modules/tools/psb_cd_tools_mod.F90 +++ b/base/modules/tools/psb_cd_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_d_tools_a_mod.f90 b/base/modules/tools/psb_d_tools_a_mod.f90 index 638953b4f..fd7b9ca57 100644 --- a/base/modules/tools/psb_d_tools_a_mod.f90 +++ b/base/modules/tools/psb_d_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_d_tools_mod.F90 b/base/modules/tools/psb_d_tools_mod.F90 index 6ea554cd1..e4e8d6390 100644 --- a/base/modules/tools/psb_d_tools_mod.F90 +++ b/base/modules/tools/psb_d_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_e_tools_a_mod.f90 b/base/modules/tools/psb_e_tools_a_mod.f90 index f8a27cb54..b54a593c8 100644 --- a/base/modules/tools/psb_e_tools_a_mod.f90 +++ b/base/modules/tools/psb_e_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_i2_tools_a_mod.f90 b/base/modules/tools/psb_i2_tools_a_mod.f90 index b8d52bb42..7471adcc9 100644 --- a/base/modules/tools/psb_i2_tools_a_mod.f90 +++ b/base/modules/tools/psb_i2_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_i_tools_mod.F90 b/base/modules/tools/psb_i_tools_mod.F90 index 767dc8e56..28899c9fe 100644 --- a/base/modules/tools/psb_i_tools_mod.F90 +++ b/base/modules/tools/psb_i_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_l_tools_mod.F90 b/base/modules/tools/psb_l_tools_mod.F90 index 92fe875bd..078f06dc7 100644 --- a/base/modules/tools/psb_l_tools_mod.F90 +++ b/base/modules/tools/psb_l_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_m_tools_a_mod.f90 b/base/modules/tools/psb_m_tools_a_mod.f90 index a1de6caa5..65211e353 100644 --- a/base/modules/tools/psb_m_tools_a_mod.f90 +++ b/base/modules/tools/psb_m_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_s_tools_a_mod.f90 b/base/modules/tools/psb_s_tools_a_mod.f90 index 85a2b0296..1881202b1 100644 --- a/base/modules/tools/psb_s_tools_a_mod.f90 +++ b/base/modules/tools/psb_s_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_s_tools_mod.F90 b/base/modules/tools/psb_s_tools_mod.F90 index d4fa78924..d9dd59770 100644 --- a/base/modules/tools/psb_s_tools_mod.F90 +++ b/base/modules/tools/psb_s_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_tools_mod.f90 b/base/modules/tools/psb_tools_mod.f90 index 7f87ee794..1fdd30572 100644 --- a/base/modules/tools/psb_tools_mod.f90 +++ b/base/modules/tools/psb_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_z_tools_a_mod.f90 b/base/modules/tools/psb_z_tools_a_mod.f90 index 4c421f266..1052e57db 100644 --- a/base/modules/tools/psb_z_tools_a_mod.f90 +++ b/base/modules/tools/psb_z_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_z_tools_mod.F90 b/base/modules/tools/psb_z_tools_mod.F90 index 2c105b2bb..cdb9f4469 100644 --- a/base/modules/tools/psb_z_tools_mod.F90 +++ b/base/modules/tools/psb_z_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cabs_vect.f90 b/base/psblas/psb_cabs_vect.f90 index cb1921953..29780abe5 100644 --- a/base/psblas/psb_cabs_vect.f90 +++ b/base/psblas/psb_cabs_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_camax.f90 b/base/psblas/psb_camax.f90 index e30ba8fe2..90ef18ead 100644 --- a/base/psblas/psb_camax.f90 +++ b/base/psblas/psb_camax.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -148,7 +148,7 @@ end function psb_camax !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -371,7 +371,7 @@ end function psb_camax_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,7 +496,7 @@ end subroutine psb_camaxvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_casum.f90 b/base/psblas/psb_casum.f90 index 7b9b32759..7b336ebd9 100644 --- a/base/psblas/psb_casum.f90 +++ b/base/psblas/psb_casum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -261,7 +261,7 @@ end function psb_casum_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -391,7 +391,7 @@ end function psb_casumv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_caxpby.f90 b/base/psblas/psb_caxpby.f90 index da9458490..bb93f7eb8 100644 --- a/base/psblas/psb_caxpby.f90 +++ b/base/psblas/psb_caxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -146,7 +146,7 @@ end subroutine psb_caxpby_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -418,7 +418,7 @@ end subroutine psb_caxpby !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -538,7 +538,7 @@ end subroutine psb_caxpbyv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_ccmp_vect.f90 b/base/psblas/psb_ccmp_vect.f90 index 5de955138..a77631556 100644 --- a/base/psblas/psb_ccmp_vect.f90 +++ b/base/psblas/psb_ccmp_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cdiv_vect.f90 b/base/psblas/psb_cdiv_vect.f90 index 0fe4594a1..9a2525a13 100644 --- a/base/psblas/psb_cdiv_vect.f90 +++ b/base/psblas/psb_cdiv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cdot.f90 b/base/psblas/psb_cdot.f90 index ed300b7ce..7be3f6663 100644 --- a/base/psblas/psb_cdot.f90 +++ b/base/psblas/psb_cdot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -301,7 +301,7 @@ end function psb_cdot !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -437,7 +437,7 @@ end function psb_cdotv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -572,7 +572,7 @@ end subroutine psb_cdotvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cgetmatinfo.F90 b/base/psblas/psb_cgetmatinfo.F90 index 66db76936..eade65178 100644 --- a/base/psblas/psb_cgetmatinfo.F90 +++ b/base/psblas/psb_cgetmatinfo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cinv_vect.f90 b/base/psblas/psb_cinv_vect.f90 index 25589f32b..d5a4ac1f7 100644 --- a/base/psblas/psb_cinv_vect.f90 +++ b/base/psblas/psb_cinv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cmlt_vect.f90 b/base/psblas/psb_cmlt_vect.f90 index 9b4037bf0..c88514992 100644 --- a/base/psblas/psb_cmlt_vect.f90 +++ b/base/psblas/psb_cmlt_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cnrm2.f90 b/base/psblas/psb_cnrm2.f90 index 0de8ed162..de99ca703 100644 --- a/base/psblas/psb_cnrm2.f90 +++ b/base/psblas/psb_cnrm2.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -155,7 +155,7 @@ end function psb_cnrm2 !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -610,7 +610,7 @@ end function psb_cnrm2_weightmask_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cnrmi.f90 b/base/psblas/psb_cnrmi.f90 index f28719ea5..38cdc45fb 100644 --- a/base/psblas/psb_cnrmi.f90 +++ b/base/psblas/psb_cnrmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cspmm.f90 b/base/psblas/psb_cspmm.f90 index 777ade06f..f04eb74fe 100644 --- a/base/psblas/psb_cspmm.f90 +++ b/base/psblas/psb_cspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -651,7 +651,7 @@ end subroutine psb_cspmm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cspnrm1.f90 b/base/psblas/psb_cspnrm1.f90 index 92b04ebb4..a912bfd1a 100644 --- a/base/psblas/psb_cspnrm1.f90 +++ b/base/psblas/psb_cspnrm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cspsm.f90 b/base/psblas/psb_cspsm.f90 index 9787b2d88..c239da379 100644 --- a/base/psblas/psb_cspsm.f90 +++ b/base/psblas/psb_cspsm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cvmlt.f90 b/base/psblas/psb_cvmlt.f90 index a5ee7bbcd..9cbf35180 100644 --- a/base/psblas/psb_cvmlt.f90 +++ b/base/psblas/psb_cvmlt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dabs_vect.f90 b/base/psblas/psb_dabs_vect.f90 index 0b655d9cd..29e0ec6ea 100644 --- a/base/psblas/psb_dabs_vect.f90 +++ b/base/psblas/psb_dabs_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_damax.f90 b/base/psblas/psb_damax.f90 index 490d4ffe3..fef149ee5 100644 --- a/base/psblas/psb_damax.f90 +++ b/base/psblas/psb_damax.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -148,7 +148,7 @@ end function psb_damax !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -371,7 +371,7 @@ end function psb_damax_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,7 +496,7 @@ end subroutine psb_damaxvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dasum.f90 b/base/psblas/psb_dasum.f90 index ff4399de3..dbb8e5ee1 100644 --- a/base/psblas/psb_dasum.f90 +++ b/base/psblas/psb_dasum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -261,7 +261,7 @@ end function psb_dasum_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -391,7 +391,7 @@ end function psb_dasumv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_daxpby.f90 b/base/psblas/psb_daxpby.f90 index f86b7fe9f..20b7f71b9 100644 --- a/base/psblas/psb_daxpby.f90 +++ b/base/psblas/psb_daxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -146,7 +146,7 @@ end subroutine psb_daxpby_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -418,7 +418,7 @@ end subroutine psb_daxpby !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -538,7 +538,7 @@ end subroutine psb_daxpbyv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dcmp_vect.f90 b/base/psblas/psb_dcmp_vect.f90 index b52b34d12..c9549be6c 100644 --- a/base/psblas/psb_dcmp_vect.f90 +++ b/base/psblas/psb_dcmp_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -121,7 +121,7 @@ end subroutine psb_dcmp_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_ddiv_vect.f90 b/base/psblas/psb_ddiv_vect.f90 index 7f958e19b..37fe59e1b 100644 --- a/base/psblas/psb_ddiv_vect.f90 +++ b/base/psblas/psb_ddiv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_ddot.f90 b/base/psblas/psb_ddot.f90 index 633c75498..611e43067 100644 --- a/base/psblas/psb_ddot.f90 +++ b/base/psblas/psb_ddot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -301,7 +301,7 @@ end function psb_ddot !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -437,7 +437,7 @@ end function psb_ddotv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -572,7 +572,7 @@ end subroutine psb_ddotvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dgetmatinfo.F90 b/base/psblas/psb_dgetmatinfo.F90 index 9b3270118..0b743a86d 100644 --- a/base/psblas/psb_dgetmatinfo.F90 +++ b/base/psblas/psb_dgetmatinfo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dinv_vect.f90 b/base/psblas/psb_dinv_vect.f90 index 2159398f0..5c238c4b8 100644 --- a/base/psblas/psb_dinv_vect.f90 +++ b/base/psblas/psb_dinv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dmlt_vect.f90 b/base/psblas/psb_dmlt_vect.f90 index 80a138c16..b8ff807b4 100644 --- a/base/psblas/psb_dmlt_vect.f90 +++ b/base/psblas/psb_dmlt_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dnrm2.f90 b/base/psblas/psb_dnrm2.f90 index 7ebe94391..cce877f32 100644 --- a/base/psblas/psb_dnrm2.f90 +++ b/base/psblas/psb_dnrm2.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -155,7 +155,7 @@ end function psb_dnrm2 !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -610,7 +610,7 @@ end function psb_dnrm2_weightmask_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dnrmi.f90 b/base/psblas/psb_dnrmi.f90 index e06bc71bb..a251ae825 100644 --- a/base/psblas/psb_dnrmi.f90 +++ b/base/psblas/psb_dnrmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dspmm.f90 b/base/psblas/psb_dspmm.f90 index ca7e7c568..9d28c2e47 100644 --- a/base/psblas/psb_dspmm.f90 +++ b/base/psblas/psb_dspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -651,7 +651,7 @@ end subroutine psb_dspmm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dspnrm1.f90 b/base/psblas/psb_dspnrm1.f90 index 6bdb4eea3..c415bc526 100644 --- a/base/psblas/psb_dspnrm1.f90 +++ b/base/psblas/psb_dspnrm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dspsm.f90 b/base/psblas/psb_dspsm.f90 index e4010b015..39cb001c9 100644 --- a/base/psblas/psb_dspsm.f90 +++ b/base/psblas/psb_dspsm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dvmlt.f90 b/base/psblas/psb_dvmlt.f90 index ea76e57a0..d3c6abb59 100644 --- a/base/psblas/psb_dvmlt.f90 +++ b/base/psblas/psb_dvmlt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sabs_vect.f90 b/base/psblas/psb_sabs_vect.f90 index 2eb22d73c..aad75a030 100644 --- a/base/psblas/psb_sabs_vect.f90 +++ b/base/psblas/psb_sabs_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_samax.f90 b/base/psblas/psb_samax.f90 index b2858d965..056b201c3 100644 --- a/base/psblas/psb_samax.f90 +++ b/base/psblas/psb_samax.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -148,7 +148,7 @@ end function psb_samax !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -371,7 +371,7 @@ end function psb_samax_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,7 +496,7 @@ end subroutine psb_samaxvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sasum.f90 b/base/psblas/psb_sasum.f90 index 6ca62d244..b4e503d0b 100644 --- a/base/psblas/psb_sasum.f90 +++ b/base/psblas/psb_sasum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -261,7 +261,7 @@ end function psb_sasum_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -391,7 +391,7 @@ end function psb_sasumv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_saxpby.f90 b/base/psblas/psb_saxpby.f90 index 61f71b5a7..f47c866b6 100644 --- a/base/psblas/psb_saxpby.f90 +++ b/base/psblas/psb_saxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -146,7 +146,7 @@ end subroutine psb_saxpby_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -418,7 +418,7 @@ end subroutine psb_saxpby !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -538,7 +538,7 @@ end subroutine psb_saxpbyv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_scmp_vect.f90 b/base/psblas/psb_scmp_vect.f90 index 7a7ff0028..d4678486b 100644 --- a/base/psblas/psb_scmp_vect.f90 +++ b/base/psblas/psb_scmp_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -121,7 +121,7 @@ end subroutine psb_scmp_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sdiv_vect.f90 b/base/psblas/psb_sdiv_vect.f90 index 70bb96d03..223ce77ff 100644 --- a/base/psblas/psb_sdiv_vect.f90 +++ b/base/psblas/psb_sdiv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sdot.f90 b/base/psblas/psb_sdot.f90 index cf0678a71..00671c7d5 100644 --- a/base/psblas/psb_sdot.f90 +++ b/base/psblas/psb_sdot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -301,7 +301,7 @@ end function psb_sdot !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -437,7 +437,7 @@ end function psb_sdotv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -572,7 +572,7 @@ end subroutine psb_sdotvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sgetmatinfo.F90 b/base/psblas/psb_sgetmatinfo.F90 index 5d5ae9c42..25c626ab1 100644 --- a/base/psblas/psb_sgetmatinfo.F90 +++ b/base/psblas/psb_sgetmatinfo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sinv_vect.f90 b/base/psblas/psb_sinv_vect.f90 index f658b1779..757899097 100644 --- a/base/psblas/psb_sinv_vect.f90 +++ b/base/psblas/psb_sinv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_smlt_vect.f90 b/base/psblas/psb_smlt_vect.f90 index 04b3150cb..b9dcff878 100644 --- a/base/psblas/psb_smlt_vect.f90 +++ b/base/psblas/psb_smlt_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_snrm2.f90 b/base/psblas/psb_snrm2.f90 index bb9b3effb..fcc36eaa9 100644 --- a/base/psblas/psb_snrm2.f90 +++ b/base/psblas/psb_snrm2.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -155,7 +155,7 @@ end function psb_snrm2 !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -610,7 +610,7 @@ end function psb_snrm2_weightmask_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_snrmi.f90 b/base/psblas/psb_snrmi.f90 index d48bb5f9a..0f9ba9dae 100644 --- a/base/psblas/psb_snrmi.f90 +++ b/base/psblas/psb_snrmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sspmm.f90 b/base/psblas/psb_sspmm.f90 index 7f680934c..91e3fee03 100644 --- a/base/psblas/psb_sspmm.f90 +++ b/base/psblas/psb_sspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -651,7 +651,7 @@ end subroutine psb_sspmm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sspnrm1.f90 b/base/psblas/psb_sspnrm1.f90 index 09ea96fbd..3f1bf39cd 100644 --- a/base/psblas/psb_sspnrm1.f90 +++ b/base/psblas/psb_sspnrm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sspsm.f90 b/base/psblas/psb_sspsm.f90 index c354569ba..d12abc389 100644 --- a/base/psblas/psb_sspsm.f90 +++ b/base/psblas/psb_sspsm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_svmlt.f90 b/base/psblas/psb_svmlt.f90 index a9b506c6c..0117c295c 100644 --- a/base/psblas/psb_svmlt.f90 +++ b/base/psblas/psb_svmlt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zabs_vect.f90 b/base/psblas/psb_zabs_vect.f90 index 8c027727f..17d064f8a 100644 --- a/base/psblas/psb_zabs_vect.f90 +++ b/base/psblas/psb_zabs_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zamax.f90 b/base/psblas/psb_zamax.f90 index 79cc6d96d..ff3331e4c 100644 --- a/base/psblas/psb_zamax.f90 +++ b/base/psblas/psb_zamax.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -148,7 +148,7 @@ end function psb_zamax !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -371,7 +371,7 @@ end function psb_zamax_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,7 +496,7 @@ end subroutine psb_zamaxvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zasum.f90 b/base/psblas/psb_zasum.f90 index 63061d0b7..4e07c9970 100644 --- a/base/psblas/psb_zasum.f90 +++ b/base/psblas/psb_zasum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -261,7 +261,7 @@ end function psb_zasum_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -391,7 +391,7 @@ end function psb_zasumv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zaxpby.f90 b/base/psblas/psb_zaxpby.f90 index e47a871d1..df5d7f773 100644 --- a/base/psblas/psb_zaxpby.f90 +++ b/base/psblas/psb_zaxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -146,7 +146,7 @@ end subroutine psb_zaxpby_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -418,7 +418,7 @@ end subroutine psb_zaxpby !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -538,7 +538,7 @@ end subroutine psb_zaxpbyv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zcmp_vect.f90 b/base/psblas/psb_zcmp_vect.f90 index 01e1cecf8..4729b4465 100644 --- a/base/psblas/psb_zcmp_vect.f90 +++ b/base/psblas/psb_zcmp_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zdiv_vect.f90 b/base/psblas/psb_zdiv_vect.f90 index 22d8b21ce..ad4d069d8 100644 --- a/base/psblas/psb_zdiv_vect.f90 +++ b/base/psblas/psb_zdiv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zdot.f90 b/base/psblas/psb_zdot.f90 index 97ecbedf3..0b03c30a6 100644 --- a/base/psblas/psb_zdot.f90 +++ b/base/psblas/psb_zdot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -301,7 +301,7 @@ end function psb_zdot !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -437,7 +437,7 @@ end function psb_zdotv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -572,7 +572,7 @@ end subroutine psb_zdotvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zgetmatinfo.F90 b/base/psblas/psb_zgetmatinfo.F90 index 7cc3bfaea..cdf74d0e3 100644 --- a/base/psblas/psb_zgetmatinfo.F90 +++ b/base/psblas/psb_zgetmatinfo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zinv_vect.f90 b/base/psblas/psb_zinv_vect.f90 index 593d342b9..b631f2365 100644 --- a/base/psblas/psb_zinv_vect.f90 +++ b/base/psblas/psb_zinv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zmlt_vect.f90 b/base/psblas/psb_zmlt_vect.f90 index 5db9cdb47..2dc83fd84 100644 --- a/base/psblas/psb_zmlt_vect.f90 +++ b/base/psblas/psb_zmlt_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_znrm2.f90 b/base/psblas/psb_znrm2.f90 index 5612a01db..76f51ffc1 100644 --- a/base/psblas/psb_znrm2.f90 +++ b/base/psblas/psb_znrm2.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -155,7 +155,7 @@ end function psb_znrm2 !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -610,7 +610,7 @@ end function psb_znrm2_weightmask_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_znrmi.f90 b/base/psblas/psb_znrmi.f90 index 9afae6e7f..f1ba036bd 100644 --- a/base/psblas/psb_znrmi.f90 +++ b/base/psblas/psb_znrmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zspmm.f90 b/base/psblas/psb_zspmm.f90 index b7fc5cc6c..15bb385c8 100644 --- a/base/psblas/psb_zspmm.f90 +++ b/base/psblas/psb_zspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -651,7 +651,7 @@ end subroutine psb_zspmm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zspnrm1.f90 b/base/psblas/psb_zspnrm1.f90 index cb568ab87..a6dc8e88f 100644 --- a/base/psblas/psb_zspnrm1.f90 +++ b/base/psblas/psb_zspnrm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zspsm.f90 b/base/psblas/psb_zspsm.f90 index 3cb06b021..15bf023bf 100644 --- a/base/psblas/psb_zspsm.f90 +++ b/base/psblas/psb_zspsm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zvmlt.f90 b/base/psblas/psb_zvmlt.f90 index a4c06fc4e..c6bebedc3 100644 --- a/base/psblas/psb_zvmlt.f90 +++ b/base/psblas/psb_zvmlt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_base_mat_impl.f90 b/base/serial/impl/psb_base_mat_impl.f90 index 39e21300c..83a8e6405 100644 --- a/base/serial/impl/psb_base_mat_impl.f90 +++ b/base/serial/impl/psb_base_mat_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_base_mat_impl.F90 b/base/serial/impl/psb_c_base_mat_impl.F90 index 25cd290a3..e04a742c4 100644 --- a/base/serial/impl/psb_c_base_mat_impl.F90 +++ b/base/serial/impl/psb_c_base_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_coo_impl.F90 b/base/serial/impl/psb_c_coo_impl.F90 index 53ffcea91..3b9ff2758 100644 --- a/base/serial/impl/psb_c_coo_impl.F90 +++ b/base/serial/impl/psb_c_coo_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_csc_impl.F90 b/base/serial/impl/psb_c_csc_impl.F90 index 4073a1ac7..7553ec01b 100644 --- a/base/serial/impl/psb_c_csc_impl.F90 +++ b/base/serial/impl/psb_c_csc_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_csr_impl.F90 b/base/serial/impl/psb_c_csr_impl.F90 index af5812da9..d0fe429d8 100644 --- a/base/serial/impl/psb_c_csr_impl.F90 +++ b/base/serial/impl/psb_c_csr_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_mat_impl.F90 b/base/serial/impl/psb_c_mat_impl.F90 index 81479084f..e796d5431 100644 --- a/base/serial/impl/psb_c_mat_impl.F90 +++ b/base/serial/impl/psb_c_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_rb_idx_tree_impl.F90 b/base/serial/impl/psb_c_rb_idx_tree_impl.F90 index 04730aaa2..0a99b6de7 100644 --- a/base/serial/impl/psb_c_rb_idx_tree_impl.F90 +++ b/base/serial/impl/psb_c_rb_idx_tree_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_base_mat_impl.F90 b/base/serial/impl/psb_d_base_mat_impl.F90 index 5f849bea1..0b54601ac 100644 --- a/base/serial/impl/psb_d_base_mat_impl.F90 +++ b/base/serial/impl/psb_d_base_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_coo_impl.F90 b/base/serial/impl/psb_d_coo_impl.F90 index 7a79847eb..99d4e2f63 100644 --- a/base/serial/impl/psb_d_coo_impl.F90 +++ b/base/serial/impl/psb_d_coo_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_csc_impl.F90 b/base/serial/impl/psb_d_csc_impl.F90 index e91285cd0..d11cd14da 100644 --- a/base/serial/impl/psb_d_csc_impl.F90 +++ b/base/serial/impl/psb_d_csc_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_csr_impl.F90 b/base/serial/impl/psb_d_csr_impl.F90 index 5ff34a2f6..763bd4f22 100644 --- a/base/serial/impl/psb_d_csr_impl.F90 +++ b/base/serial/impl/psb_d_csr_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_mat_impl.F90 b/base/serial/impl/psb_d_mat_impl.F90 index c744f7f5b..9b6fe8795 100644 --- a/base/serial/impl/psb_d_mat_impl.F90 +++ b/base/serial/impl/psb_d_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_rb_idx_tree_impl.F90 b/base/serial/impl/psb_d_rb_idx_tree_impl.F90 index 241338fb3..62af7430c 100644 --- a/base/serial/impl/psb_d_rb_idx_tree_impl.F90 +++ b/base/serial/impl/psb_d_rb_idx_tree_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_base_mat_impl.F90 b/base/serial/impl/psb_s_base_mat_impl.F90 index c070e7167..7fe841e3f 100644 --- a/base/serial/impl/psb_s_base_mat_impl.F90 +++ b/base/serial/impl/psb_s_base_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_coo_impl.F90 b/base/serial/impl/psb_s_coo_impl.F90 index b4e6a8df9..d03103f81 100644 --- a/base/serial/impl/psb_s_coo_impl.F90 +++ b/base/serial/impl/psb_s_coo_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_csc_impl.F90 b/base/serial/impl/psb_s_csc_impl.F90 index 9dd32d589..dec7ccfb2 100644 --- a/base/serial/impl/psb_s_csc_impl.F90 +++ b/base/serial/impl/psb_s_csc_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_csr_impl.F90 b/base/serial/impl/psb_s_csr_impl.F90 index a7dd2c159..92bdc0f02 100644 --- a/base/serial/impl/psb_s_csr_impl.F90 +++ b/base/serial/impl/psb_s_csr_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_mat_impl.F90 b/base/serial/impl/psb_s_mat_impl.F90 index a27a24a5d..dda59ee8e 100644 --- a/base/serial/impl/psb_s_mat_impl.F90 +++ b/base/serial/impl/psb_s_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_rb_idx_tree_impl.F90 b/base/serial/impl/psb_s_rb_idx_tree_impl.F90 index 5241225ea..88e4fc82c 100644 --- a/base/serial/impl/psb_s_rb_idx_tree_impl.F90 +++ b/base/serial/impl/psb_s_rb_idx_tree_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_base_mat_impl.F90 b/base/serial/impl/psb_z_base_mat_impl.F90 index 2d68d1527..b488fd0da 100644 --- a/base/serial/impl/psb_z_base_mat_impl.F90 +++ b/base/serial/impl/psb_z_base_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_coo_impl.F90 b/base/serial/impl/psb_z_coo_impl.F90 index 949d0384c..d7439be9d 100644 --- a/base/serial/impl/psb_z_coo_impl.F90 +++ b/base/serial/impl/psb_z_coo_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_csc_impl.F90 b/base/serial/impl/psb_z_csc_impl.F90 index 4a06d8d83..c987996ee 100644 --- a/base/serial/impl/psb_z_csc_impl.F90 +++ b/base/serial/impl/psb_z_csc_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_csr_impl.F90 b/base/serial/impl/psb_z_csr_impl.F90 index 9f6c9b941..17dbd4abc 100644 --- a/base/serial/impl/psb_z_csr_impl.F90 +++ b/base/serial/impl/psb_z_csr_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_mat_impl.F90 b/base/serial/impl/psb_z_mat_impl.F90 index e1f9310b1..ee1895177 100644 --- a/base/serial/impl/psb_z_mat_impl.F90 +++ b/base/serial/impl/psb_z_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_rb_idx_tree_impl.F90 b/base/serial/impl/psb_z_rb_idx_tree_impl.F90 index 42695158e..26b4d88e5 100644 --- a/base/serial/impl/psb_z_rb_idx_tree_impl.F90 +++ b/base/serial/impl/psb_z_rb_idx_tree_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/lsmmp.f90 b/base/serial/lsmmp.f90 index 2bf2efdaa..77aadca41 100644 --- a/base/serial/lsmmp.f90 +++ b/base/serial/lsmmp.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_aspxpby.f90 b/base/serial/psb_aspxpby.f90 index 3ce0c61b1..6c27f231b 100644 --- a/base/serial/psb_aspxpby.f90 +++ b/base/serial/psb_aspxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_camax_s.f90 b/base/serial/psb_camax_s.f90 index d9073d0f9..99f51840d 100644 --- a/base/serial/psb_camax_s.f90 +++ b/base/serial/psb_camax_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_casum_s.f90 b/base/serial/psb_casum_s.f90 index 1c357cc89..32977f2f3 100644 --- a/base/serial/psb_casum_s.f90 +++ b/base/serial/psb_casum_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_cgeprt.f90 b/base/serial/psb_cgeprt.f90 index e05d673b6..1ec98f32f 100644 --- a/base/serial/psb_cgeprt.f90 +++ b/base/serial/psb_cgeprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_cnumbmm.f90 b/base/serial/psb_cnumbmm.f90 index 920187b3d..9559ad44d 100644 --- a/base/serial/psb_cnumbmm.f90 +++ b/base/serial/psb_cnumbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_crwextd.f90 b/base/serial/psb_crwextd.f90 index 9676ad247..243f91535 100644 --- a/base/serial/psb_crwextd.f90 +++ b/base/serial/psb_crwextd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_cspspmm.F90 b/base/serial/psb_cspspmm.F90 index 64fedbfea..e7ab8ec20 100644 --- a/base/serial/psb_cspspmm.F90 +++ b/base/serial/psb_cspspmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_csymbmm.f90 b/base/serial/psb_csymbmm.f90 index 0f8c18ab8..519b1689c 100644 --- a/base/serial/psb_csymbmm.f90 +++ b/base/serial/psb_csymbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_damax_s.f90 b/base/serial/psb_damax_s.f90 index 66aef2882..372dd3082 100644 --- a/base/serial/psb_damax_s.f90 +++ b/base/serial/psb_damax_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dasum_s.f90 b/base/serial/psb_dasum_s.f90 index 1ab42614f..88b7925ea 100644 --- a/base/serial/psb_dasum_s.f90 +++ b/base/serial/psb_dasum_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dgeprt.f90 b/base/serial/psb_dgeprt.f90 index ae4c5b11c..6d1a540d6 100644 --- a/base/serial/psb_dgeprt.f90 +++ b/base/serial/psb_dgeprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dnumbmm.f90 b/base/serial/psb_dnumbmm.f90 index 4719b2bc7..6763774e6 100644 --- a/base/serial/psb_dnumbmm.f90 +++ b/base/serial/psb_dnumbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_drwextd.f90 b/base/serial/psb_drwextd.f90 index 70c73f831..5b7dab4db 100644 --- a/base/serial/psb_drwextd.f90 +++ b/base/serial/psb_drwextd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dspspmm.F90 b/base/serial/psb_dspspmm.F90 index 4b37df0e7..e2b394ad9 100644 --- a/base/serial/psb_dspspmm.F90 +++ b/base/serial/psb_dspspmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dsymbmm.f90 b/base/serial/psb_dsymbmm.f90 index d647d2707..b892ecbab 100644 --- a/base/serial/psb_dsymbmm.f90 +++ b/base/serial/psb_dsymbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_lsame.f90 b/base/serial/psb_lsame.f90 index 887438571..d4356ed38 100644 --- a/base/serial/psb_lsame.f90 +++ b/base/serial/psb_lsame.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_samax_s.f90 b/base/serial/psb_samax_s.f90 index f2b1fee2c..df39aa244 100644 --- a/base/serial/psb_samax_s.f90 +++ b/base/serial/psb_samax_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_sasum_s.f90 b/base/serial/psb_sasum_s.f90 index c692cbd48..e7307d772 100644 --- a/base/serial/psb_sasum_s.f90 +++ b/base/serial/psb_sasum_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_sgeprt.f90 b/base/serial/psb_sgeprt.f90 index 9f3205fdf..b3afeb855 100644 --- a/base/serial/psb_sgeprt.f90 +++ b/base/serial/psb_sgeprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_snumbmm.f90 b/base/serial/psb_snumbmm.f90 index 99075a8b5..8cc1c38dd 100644 --- a/base/serial/psb_snumbmm.f90 +++ b/base/serial/psb_snumbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_spdot_srtd.f90 b/base/serial/psb_spdot_srtd.f90 index d0f9120f5..340af0a8c 100644 --- a/base/serial/psb_spdot_srtd.f90 +++ b/base/serial/psb_spdot_srtd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_spge_dot.f90 b/base/serial/psb_spge_dot.f90 index 714971731..677cb4bb8 100644 --- a/base/serial/psb_spge_dot.f90 +++ b/base/serial/psb_spge_dot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_srwextd.f90 b/base/serial/psb_srwextd.f90 index 3ecd7a8e9..4cceb8f57 100644 --- a/base/serial/psb_srwextd.f90 +++ b/base/serial/psb_srwextd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_sspspmm.F90 b/base/serial/psb_sspspmm.F90 index bc3352ee7..5ab8b62a9 100644 --- a/base/serial/psb_sspspmm.F90 +++ b/base/serial/psb_sspspmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_ssymbmm.f90 b/base/serial/psb_ssymbmm.f90 index d76b48ea3..97108ee11 100644 --- a/base/serial/psb_ssymbmm.f90 +++ b/base/serial/psb_ssymbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zamax_s.f90 b/base/serial/psb_zamax_s.f90 index 4a4085664..2adca0c5b 100644 --- a/base/serial/psb_zamax_s.f90 +++ b/base/serial/psb_zamax_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zasum_s.f90 b/base/serial/psb_zasum_s.f90 index 35a043ed9..13fdc6f1b 100644 --- a/base/serial/psb_zasum_s.f90 +++ b/base/serial/psb_zasum_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zgeprt.f90 b/base/serial/psb_zgeprt.f90 index 3fc0eb0c2..3788600d1 100644 --- a/base/serial/psb_zgeprt.f90 +++ b/base/serial/psb_zgeprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_znumbmm.f90 b/base/serial/psb_znumbmm.f90 index 31b8f6b28..30fee807a 100644 --- a/base/serial/psb_znumbmm.f90 +++ b/base/serial/psb_znumbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zrwextd.f90 b/base/serial/psb_zrwextd.f90 index 393a3d9d4..c8cd0e43d 100644 --- a/base/serial/psb_zrwextd.f90 +++ b/base/serial/psb_zrwextd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zspspmm.F90 b/base/serial/psb_zspspmm.F90 index a37bd013f..b7faf46aa 100644 --- a/base/serial/psb_zspspmm.F90 +++ b/base/serial/psb_zspspmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zsymbmm.f90 b/base/serial/psb_zsymbmm.f90 index 9c31b0e73..a9703d446 100644 --- a/base/serial/psb_zsymbmm.f90 +++ b/base/serial/psb_zsymbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_c_serial_impl.F90 b/base/serial/psi_c_serial_impl.F90 index d6706c887..441211e54 100644 --- a/base/serial/psi_c_serial_impl.F90 +++ b/base/serial/psi_c_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_cgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_cgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_d_serial_impl.F90 b/base/serial/psi_d_serial_impl.F90 index 772f28ea8..aafd9d983 100644 --- a/base/serial/psi_d_serial_impl.F90 +++ b/base/serial/psi_d_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_dgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_dgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_e_serial_impl.F90 b/base/serial/psi_e_serial_impl.F90 index 10ea49cf7..5ede8afbf 100644 --- a/base/serial/psi_e_serial_impl.F90 +++ b/base/serial/psi_e_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_egelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_egelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_i2_serial_impl.F90 b/base/serial/psi_i2_serial_impl.F90 index ae6ee65a6..8eccd73c9 100644 --- a/base/serial/psi_i2_serial_impl.F90 +++ b/base/serial/psi_i2_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_i2gelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_i2gelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_m_serial_impl.F90 b/base/serial/psi_m_serial_impl.F90 index 25eaca324..0b6a69831 100644 --- a/base/serial/psi_m_serial_impl.F90 +++ b/base/serial/psi_m_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_mgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_mgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_s_serial_impl.F90 b/base/serial/psi_s_serial_impl.F90 index 6baa8dd75..580975c10 100644 --- a/base/serial/psi_s_serial_impl.F90 +++ b/base/serial/psi_s_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_sgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_sgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_z_serial_impl.F90 b/base/serial/psi_z_serial_impl.F90 index dcd02540b..7292320e8 100644 --- a/base/serial/psi_z_serial_impl.F90 +++ b/base/serial/psi_z_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_zgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_zgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/smmp.f90 b/base/serial/smmp.f90 index fe3ff2cc2..a8844db2d 100644 --- a/base/serial/smmp.f90 +++ b/base/serial/smmp.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_c_hsort_impl.f90 b/base/serial/sort/psb_c_hsort_impl.f90 index 4251ddaad..674ff8d47 100644 --- a/base/serial/sort/psb_c_hsort_impl.f90 +++ b/base/serial/sort/psb_c_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_c_isort_impl.f90 b/base/serial/sort/psb_c_isort_impl.f90 index 0251d37e2..cf3857ad6 100644 --- a/base/serial/sort/psb_c_isort_impl.f90 +++ b/base/serial/sort/psb_c_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_c_msort_impl.f90 b/base/serial/sort/psb_c_msort_impl.f90 index e61ee9e1e..e94fcd7ab 100644 --- a/base/serial/sort/psb_c_msort_impl.f90 +++ b/base/serial/sort/psb_c_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_c_qsort_impl.f90 b/base/serial/sort/psb_c_qsort_impl.f90 index 0111e9c23..300b3fec4 100644 --- a/base/serial/sort/psb_c_qsort_impl.f90 +++ b/base/serial/sort/psb_c_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_d_hsort_impl.f90 b/base/serial/sort/psb_d_hsort_impl.f90 index dac327d16..7f5a48bda 100644 --- a/base/serial/sort/psb_d_hsort_impl.f90 +++ b/base/serial/sort/psb_d_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_d_isort_impl.f90 b/base/serial/sort/psb_d_isort_impl.f90 index 62b6eed14..da6338709 100644 --- a/base/serial/sort/psb_d_isort_impl.f90 +++ b/base/serial/sort/psb_d_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_d_msort_impl.f90 b/base/serial/sort/psb_d_msort_impl.f90 index 7c38f27dc..43ef089ff 100644 --- a/base/serial/sort/psb_d_msort_impl.f90 +++ b/base/serial/sort/psb_d_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_d_qsort_impl.f90 b/base/serial/sort/psb_d_qsort_impl.f90 index c397ba233..6cd35eb01 100644 --- a/base/serial/sort/psb_d_qsort_impl.f90 +++ b/base/serial/sort/psb_d_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_e_hsort_impl.f90 b/base/serial/sort/psb_e_hsort_impl.f90 index 8fa00a834..7d9d6104b 100644 --- a/base/serial/sort/psb_e_hsort_impl.f90 +++ b/base/serial/sort/psb_e_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_e_isort_impl.f90 b/base/serial/sort/psb_e_isort_impl.f90 index 20d3600ca..68c1d35d6 100644 --- a/base/serial/sort/psb_e_isort_impl.f90 +++ b/base/serial/sort/psb_e_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_e_msort_impl.f90 b/base/serial/sort/psb_e_msort_impl.f90 index 93ac8a6eb..beeabf5a0 100644 --- a/base/serial/sort/psb_e_msort_impl.f90 +++ b/base/serial/sort/psb_e_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_e_qsort_impl.f90 b/base/serial/sort/psb_e_qsort_impl.f90 index ea3bfd140..9057ff36f 100644 --- a/base/serial/sort/psb_e_qsort_impl.f90 +++ b/base/serial/sort/psb_e_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_m_hsort_impl.f90 b/base/serial/sort/psb_m_hsort_impl.f90 index 92f67d8b0..743fe0381 100644 --- a/base/serial/sort/psb_m_hsort_impl.f90 +++ b/base/serial/sort/psb_m_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_m_isort_impl.f90 b/base/serial/sort/psb_m_isort_impl.f90 index ae6c0ce23..3d2001dc0 100644 --- a/base/serial/sort/psb_m_isort_impl.f90 +++ b/base/serial/sort/psb_m_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_m_msort_impl.f90 b/base/serial/sort/psb_m_msort_impl.f90 index d3af46737..69de7cc6e 100644 --- a/base/serial/sort/psb_m_msort_impl.f90 +++ b/base/serial/sort/psb_m_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_m_qsort_impl.f90 b/base/serial/sort/psb_m_qsort_impl.f90 index 2dd009b3d..112f5db0d 100644 --- a/base/serial/sort/psb_m_qsort_impl.f90 +++ b/base/serial/sort/psb_m_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_s_hsort_impl.f90 b/base/serial/sort/psb_s_hsort_impl.f90 index 559f92c51..3e0a5a7f7 100644 --- a/base/serial/sort/psb_s_hsort_impl.f90 +++ b/base/serial/sort/psb_s_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_s_isort_impl.f90 b/base/serial/sort/psb_s_isort_impl.f90 index a8be6d46c..048ed943a 100644 --- a/base/serial/sort/psb_s_isort_impl.f90 +++ b/base/serial/sort/psb_s_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_s_msort_impl.f90 b/base/serial/sort/psb_s_msort_impl.f90 index e3c0a1845..a602cb34a 100644 --- a/base/serial/sort/psb_s_msort_impl.f90 +++ b/base/serial/sort/psb_s_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_s_qsort_impl.f90 b/base/serial/sort/psb_s_qsort_impl.f90 index 6b2d48218..e0868ce4b 100644 --- a/base/serial/sort/psb_s_qsort_impl.f90 +++ b/base/serial/sort/psb_s_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_z_hsort_impl.f90 b/base/serial/sort/psb_z_hsort_impl.f90 index 9e886dde9..018ede744 100644 --- a/base/serial/sort/psb_z_hsort_impl.f90 +++ b/base/serial/sort/psb_z_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_z_isort_impl.f90 b/base/serial/sort/psb_z_isort_impl.f90 index 465699dab..a7783925e 100644 --- a/base/serial/sort/psb_z_isort_impl.f90 +++ b/base/serial/sort/psb_z_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_z_msort_impl.f90 b/base/serial/sort/psb_z_msort_impl.f90 index 24934e14d..6eb8babe8 100644 --- a/base/serial/sort/psb_z_msort_impl.f90 +++ b/base/serial/sort/psb_z_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_z_qsort_impl.f90 b/base/serial/sort/psb_z_qsort_impl.f90 index ce3061ea9..6b9a7ca54 100644 --- a/base/serial/sort/psb_z_qsort_impl.f90 +++ b/base/serial/sort/psb_z_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_glob_transpose.F90 b/base/tools/psb_c_glob_transpose.F90 index 8c8b3fd45..9285c18a0 100644 --- a/base/tools/psb_c_glob_transpose.F90 +++ b/base/tools/psb_c_glob_transpose.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_map.f90 b/base/tools/psb_c_map.f90 index 1cfb92723..dd027563d 100644 --- a/base/tools/psb_c_map.f90 +++ b/base/tools/psb_c_map.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_par_csr_spspmm.f90 b/base/tools/psb_c_par_csr_spspmm.f90 index 0d8e59899..de14df0c3 100644 --- a/base/tools/psb_c_par_csr_spspmm.f90 +++ b/base/tools/psb_c_par_csr_spspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_remap.F90 b/base/tools/psb_c_remap.F90 index ccab6c928..9b40dd29c 100644 --- a/base/tools/psb_c_remap.F90 +++ b/base/tools/psb_c_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_remote_mat.F90 b/base/tools/psb_c_remote_mat.F90 index c3ef56022..ecfac5098 100644 --- a/base/tools/psb_c_remote_mat.F90 +++ b/base/tools/psb_c_remote_mat.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_remote_vect.F90 b/base/tools/psb_c_remote_vect.F90 index 855aea992..00e7415ae 100644 --- a/base/tools/psb_c_remote_vect.F90 +++ b/base/tools/psb_c_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_callc.f90 b/base/tools/psb_callc.f90 index d42118720..f0d8f4203 100644 --- a/base/tools/psb_callc.f90 +++ b/base/tools/psb_callc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_callc_a.f90 b/base/tools/psb_callc_a.f90 index 5ae9dac5d..806f809d1 100644 --- a/base/tools/psb_callc_a.f90 +++ b/base/tools/psb_callc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_calloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_casb.f90 b/base/tools/psb_casb.f90 index c8d2834c6..3b3782fc7 100644 --- a/base/tools/psb_casb.f90 +++ b/base/tools/psb_casb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_casb_a.f90 b/base/tools/psb_casb_a.f90 index db7b23c8b..9fa846d87 100644 --- a/base/tools/psb_casb_a.f90 +++ b/base/tools/psb_casb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_casb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_ccdbldext.F90 b/base/tools/psb_ccdbldext.F90 index b9064212b..4f20bad67 100644 --- a/base/tools/psb_ccdbldext.F90 +++ b/base/tools/psb_ccdbldext.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cd_inloc.f90 b/base/tools/psb_cd_inloc.f90 index 4d0ff7f6d..808a96c6b 100644 --- a/base/tools/psb_cd_inloc.f90 +++ b/base/tools/psb_cd_inloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cd_lstext.f90 b/base/tools/psb_cd_lstext.f90 index f96abd9c5..650960911 100644 --- a/base/tools/psb_cd_lstext.f90 +++ b/base/tools/psb_cd_lstext.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cd_reinit.f90 b/base/tools/psb_cd_reinit.f90 index 6752c3db7..ef50de31b 100644 --- a/base/tools/psb_cd_reinit.f90 +++ b/base/tools/psb_cd_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cd_remap.F90 b/base/tools/psb_cd_remap.F90 index 882af13d7..bfc4dd79d 100644 --- a/base/tools/psb_cd_remap.F90 +++ b/base/tools/psb_cd_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cd_renum_block.F90 b/base/tools/psb_cd_renum_block.F90 index e78e90797..6a2384924 100644 --- a/base/tools/psb_cd_renum_block.F90 +++ b/base/tools/psb_cd_renum_block.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cd_set_bld.f90 b/base/tools/psb_cd_set_bld.f90 index ecce17f94..30e9378da 100644 --- a/base/tools/psb_cd_set_bld.f90 +++ b/base/tools/psb_cd_set_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cd_switch_ovl_indxmap.f90 b/base/tools/psb_cd_switch_ovl_indxmap.f90 index 10ce794ea..1b31ab0d4 100644 --- a/base/tools/psb_cd_switch_ovl_indxmap.f90 +++ b/base/tools/psb_cd_switch_ovl_indxmap.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cdall.f90 b/base/tools/psb_cdall.f90 index e9ffdaf8e..7deaba6c1 100644 --- a/base/tools/psb_cdall.f90 +++ b/base/tools/psb_cdall.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cdals.f90 b/base/tools/psb_cdals.f90 index 2b1aa8c5e..0124d01fb 100644 --- a/base/tools/psb_cdals.f90 +++ b/base/tools/psb_cdals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cdalv.f90 b/base/tools/psb_cdalv.f90 index 2f740dc87..d1cb951ed 100644 --- a/base/tools/psb_cdalv.f90 +++ b/base/tools/psb_cdalv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cdcpy.F90 b/base/tools/psb_cdcpy.F90 index d44c0c95d..4ba714629 100644 --- a/base/tools/psb_cdcpy.F90 +++ b/base/tools/psb_cdcpy.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cdins.F90 b/base/tools/psb_cdins.F90 index d29aeef86..42583951b 100644 --- a/base/tools/psb_cdins.F90 +++ b/base/tools/psb_cdins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cdprt.f90 b/base/tools/psb_cdprt.f90 index 473995df0..5f1793484 100644 --- a/base/tools/psb_cdprt.f90 +++ b/base/tools/psb_cdprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cdren.f90 b/base/tools/psb_cdren.f90 index f80c21baa..d0e67fd62 100644 --- a/base/tools/psb_cdren.f90 +++ b/base/tools/psb_cdren.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cdrep.f90 b/base/tools/psb_cdrep.f90 index b6f6bfb73..46cf95d8a 100644 --- a/base/tools/psb_cdrep.f90 +++ b/base/tools/psb_cdrep.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cfree.f90 b/base/tools/psb_cfree.f90 index 54c728f59..524cdbe6b 100644 --- a/base/tools/psb_cfree.f90 +++ b/base/tools/psb_cfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cfree_a.f90 b/base/tools/psb_cfree_a.f90 index a8746071a..85fa57c32 100644 --- a/base/tools/psb_cfree_a.f90 +++ b/base/tools/psb_cfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cgetelem.f90 b/base/tools/psb_cgetelem.f90 index 3c4151c9f..ae90b2b00 100644 --- a/base/tools/psb_cgetelem.f90 +++ b/base/tools/psb_cgetelem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cins.f90 b/base/tools/psb_cins.f90 index 1c14b7b27..be0655d49 100644 --- a/base/tools/psb_cins.f90 +++ b/base/tools/psb_cins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cins_a.f90 b/base/tools/psb_cins_a.f90 index 688d06e9f..bcd9e572f 100644 --- a/base/tools/psb_cins_a.f90 +++ b/base/tools/psb_cins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_cinsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cspalloc.f90 b/base/tools/psb_cspalloc.f90 index 7bec040c3..afa2170ad 100644 --- a/base/tools/psb_cspalloc.f90 +++ b/base/tools/psb_cspalloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cspasb.f90 b/base/tools/psb_cspasb.f90 index 1ada38e96..ac229b12c 100644 --- a/base/tools/psb_cspasb.f90 +++ b/base/tools/psb_cspasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cspfree.f90 b/base/tools/psb_cspfree.f90 index 51f40259e..4a6aff419 100644 --- a/base/tools/psb_cspfree.f90 +++ b/base/tools/psb_cspfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_csphalo.F90 b/base/tools/psb_csphalo.F90 index cd053056b..1b6102548 100644 --- a/base/tools/psb_csphalo.F90 +++ b/base/tools/psb_csphalo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cspins.F90 b/base/tools/psb_cspins.F90 index 6ed5c6296..4b40d4ce9 100644 --- a/base/tools/psb_cspins.F90 +++ b/base/tools/psb_cspins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_csprn.f90 b/base/tools/psb_csprn.f90 index 82fb5be2f..eaeadf66d 100644 --- a/base/tools/psb_csprn.f90 +++ b/base/tools/psb_csprn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_glob_transpose.F90 b/base/tools/psb_d_glob_transpose.F90 index 2fc4a4580..f884222f6 100644 --- a/base/tools/psb_d_glob_transpose.F90 +++ b/base/tools/psb_d_glob_transpose.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_map.f90 b/base/tools/psb_d_map.f90 index d1a02fdf5..707ab9a8b 100644 --- a/base/tools/psb_d_map.f90 +++ b/base/tools/psb_d_map.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_par_csr_spspmm.f90 b/base/tools/psb_d_par_csr_spspmm.f90 index 3ab675615..3b0a8671c 100644 --- a/base/tools/psb_d_par_csr_spspmm.f90 +++ b/base/tools/psb_d_par_csr_spspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_remap.F90 b/base/tools/psb_d_remap.F90 index dc3219189..a2c9c291f 100644 --- a/base/tools/psb_d_remap.F90 +++ b/base/tools/psb_d_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_remote_mat.F90 b/base/tools/psb_d_remote_mat.F90 index 095474699..56f7b3d3c 100644 --- a/base/tools/psb_d_remote_mat.F90 +++ b/base/tools/psb_d_remote_mat.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_remote_vect.F90 b/base/tools/psb_d_remote_vect.F90 index 78a089fd2..38ea57b6c 100644 --- a/base/tools/psb_d_remote_vect.F90 +++ b/base/tools/psb_d_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dallc.f90 b/base/tools/psb_dallc.f90 index 8a02d3ad5..c726db862 100644 --- a/base/tools/psb_dallc.f90 +++ b/base/tools/psb_dallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dallc_a.f90 b/base/tools/psb_dallc_a.f90 index 8cd927fe8..027b64a60 100644 --- a/base/tools/psb_dallc_a.f90 +++ b/base/tools/psb_dallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_dalloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dasb.f90 b/base/tools/psb_dasb.f90 index 74970cc76..38323a92b 100644 --- a/base/tools/psb_dasb.f90 +++ b/base/tools/psb_dasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dasb_a.f90 b/base/tools/psb_dasb_a.f90 index 2a62fedf8..305c2e31d 100644 --- a/base/tools/psb_dasb_a.f90 +++ b/base/tools/psb_dasb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_dasb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dcdbldext.F90 b/base/tools/psb_dcdbldext.F90 index d6721c764..f16402b7c 100644 --- a/base/tools/psb_dcdbldext.F90 +++ b/base/tools/psb_dcdbldext.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dfree.f90 b/base/tools/psb_dfree.f90 index 8e092dfa3..e3c8482ec 100644 --- a/base/tools/psb_dfree.f90 +++ b/base/tools/psb_dfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dfree_a.f90 b/base/tools/psb_dfree_a.f90 index 0ce49ecca..b71aba123 100644 --- a/base/tools/psb_dfree_a.f90 +++ b/base/tools/psb_dfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dgetelem.f90 b/base/tools/psb_dgetelem.f90 index 38d398aa8..6df8229a9 100644 --- a/base/tools/psb_dgetelem.f90 +++ b/base/tools/psb_dgetelem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dins.f90 b/base/tools/psb_dins.f90 index eca13da7c..3141ffc84 100644 --- a/base/tools/psb_dins.f90 +++ b/base/tools/psb_dins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dins_a.f90 b/base/tools/psb_dins_a.f90 index eb04ebaff..dd53275df 100644 --- a/base/tools/psb_dins_a.f90 +++ b/base/tools/psb_dins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_dinsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dspalloc.f90 b/base/tools/psb_dspalloc.f90 index 433d71298..192267c83 100644 --- a/base/tools/psb_dspalloc.f90 +++ b/base/tools/psb_dspalloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dspasb.f90 b/base/tools/psb_dspasb.f90 index 61f20a399..a68073051 100644 --- a/base/tools/psb_dspasb.f90 +++ b/base/tools/psb_dspasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dspfree.f90 b/base/tools/psb_dspfree.f90 index 060043487..9015907f2 100644 --- a/base/tools/psb_dspfree.f90 +++ b/base/tools/psb_dspfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dsphalo.F90 b/base/tools/psb_dsphalo.F90 index 53b671b2b..b40a7c514 100644 --- a/base/tools/psb_dsphalo.F90 +++ b/base/tools/psb_dsphalo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dspins.F90 b/base/tools/psb_dspins.F90 index a9cbbe4b6..e88be0840 100644 --- a/base/tools/psb_dspins.F90 +++ b/base/tools/psb_dspins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dsprn.f90 b/base/tools/psb_dsprn.f90 index 36e0531f4..a3b613a3f 100644 --- a/base/tools/psb_dsprn.f90 +++ b/base/tools/psb_dsprn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_e_remote_vect.F90 b/base/tools/psb_e_remote_vect.F90 index 0ca38c022..91423486f 100644 --- a/base/tools/psb_e_remote_vect.F90 +++ b/base/tools/psb_e_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_eallc_a.f90 b/base/tools/psb_eallc_a.f90 index c9c65634d..ba1a60338 100644 --- a/base/tools/psb_eallc_a.f90 +++ b/base/tools/psb_eallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_ealloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_easb_a.f90 b/base/tools/psb_easb_a.f90 index baa8514d3..e0819bc2b 100644 --- a/base/tools/psb_easb_a.f90 +++ b/base/tools/psb_easb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_easb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_efree_a.f90 b/base/tools/psb_efree_a.f90 index 85baa0c0c..9439f65b2 100644 --- a/base/tools/psb_efree_a.f90 +++ b/base/tools/psb_efree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_eins_a.f90 b/base/tools/psb_eins_a.f90 index 25744f5ad..3db771844 100644 --- a/base/tools/psb_eins_a.f90 +++ b/base/tools/psb_eins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_einsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_get_overlap.f90 b/base/tools/psb_get_overlap.f90 index 9ef3377e0..6c322772c 100644 --- a/base/tools/psb_get_overlap.f90 +++ b/base/tools/psb_get_overlap.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_glob_to_loc.f90 b/base/tools/psb_glob_to_loc.f90 index 5681d2aeb..0e25648d3 100644 --- a/base/tools/psb_glob_to_loc.f90 +++ b/base/tools/psb_glob_to_loc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -137,7 +137,7 @@ end subroutine psb_glob_to_loc2v !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2_remote_vect.F90 b/base/tools/psb_i2_remote_vect.F90 index 4c4ce8b54..c2a7706f3 100644 --- a/base/tools/psb_i2_remote_vect.F90 +++ b/base/tools/psb_i2_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2allc_a.f90 b/base/tools/psb_i2allc_a.f90 index 525983041..55c152152 100644 --- a/base/tools/psb_i2allc_a.f90 +++ b/base/tools/psb_i2allc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_i2alloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2asb_a.f90 b/base/tools/psb_i2asb_a.f90 index 97879105f..397703452 100644 --- a/base/tools/psb_i2asb_a.f90 +++ b/base/tools/psb_i2asb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_i2asb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2free_a.f90 b/base/tools/psb_i2free_a.f90 index d5c7509ca..1aa9c9c06 100644 --- a/base/tools/psb_i2free_a.f90 +++ b/base/tools/psb_i2free_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2ins_a.f90 b/base/tools/psb_i2ins_a.f90 index 975e619b2..81e321baf 100644 --- a/base/tools/psb_i2ins_a.f90 +++ b/base/tools/psb_i2ins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_i2insvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_iallc.f90 b/base/tools/psb_iallc.f90 index 68b94e59e..6ecb6d270 100644 --- a/base/tools/psb_iallc.f90 +++ b/base/tools/psb_iallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_iasb.f90 b/base/tools/psb_iasb.f90 index 474b8934c..9cae9b478 100644 --- a/base/tools/psb_iasb.f90 +++ b/base/tools/psb_iasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_icdasb.F90 b/base/tools/psb_icdasb.F90 index 4ad4ce3de..c8af1b17e 100644 --- a/base/tools/psb_icdasb.F90 +++ b/base/tools/psb_icdasb.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_ifree.f90 b/base/tools/psb_ifree.f90 index a804913a3..7e0d67587 100644 --- a/base/tools/psb_ifree.f90 +++ b/base/tools/psb_ifree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_iins.f90 b/base/tools/psb_iins.f90 index bf02deb19..bbe666ed6 100644 --- a/base/tools/psb_iins.f90 +++ b/base/tools/psb_iins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_lallc.f90 b/base/tools/psb_lallc.f90 index ba8cc415e..8d3767989 100644 --- a/base/tools/psb_lallc.f90 +++ b/base/tools/psb_lallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_lasb.f90 b/base/tools/psb_lasb.f90 index 3f0ba4670..1a0c29647 100644 --- a/base/tools/psb_lasb.f90 +++ b/base/tools/psb_lasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_lfree.f90 b/base/tools/psb_lfree.f90 index 6630601c0..42c28eb25 100644 --- a/base/tools/psb_lfree.f90 +++ b/base/tools/psb_lfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_lins.f90 b/base/tools/psb_lins.f90 index a3548571e..1070173d1 100644 --- a/base/tools/psb_lins.f90 +++ b/base/tools/psb_lins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_loc_to_glob.f90 b/base/tools/psb_loc_to_glob.f90 index e4708b9d7..5be450fce 100644 --- a/base/tools/psb_loc_to_glob.f90 +++ b/base/tools/psb_loc_to_glob.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -122,7 +122,7 @@ end subroutine psb_loc_to_glob2v !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_m_remote_vect.F90 b/base/tools/psb_m_remote_vect.F90 index 2266cc800..94cbba4dc 100644 --- a/base/tools/psb_m_remote_vect.F90 +++ b/base/tools/psb_m_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_mallc_a.f90 b/base/tools/psb_mallc_a.f90 index c815e8f93..0f67dda4b 100644 --- a/base/tools/psb_mallc_a.f90 +++ b/base/tools/psb_mallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_malloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_masb_a.f90 b/base/tools/psb_masb_a.f90 index 50f2b7685..46c3ccd44 100644 --- a/base/tools/psb_masb_a.f90 +++ b/base/tools/psb_masb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_masb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_mfree_a.f90 b/base/tools/psb_mfree_a.f90 index c2f57f216..5beae30ca 100644 --- a/base/tools/psb_mfree_a.f90 +++ b/base/tools/psb_mfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_mins_a.f90 b/base/tools/psb_mins_a.f90 index d1549c921..7af8a44d2 100644 --- a/base/tools/psb_mins_a.f90 +++ b/base/tools/psb_mins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_minsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_glob_transpose.F90 b/base/tools/psb_s_glob_transpose.F90 index d663ea3e5..bee763ac0 100644 --- a/base/tools/psb_s_glob_transpose.F90 +++ b/base/tools/psb_s_glob_transpose.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_map.f90 b/base/tools/psb_s_map.f90 index e6c6d445c..1a4469e01 100644 --- a/base/tools/psb_s_map.f90 +++ b/base/tools/psb_s_map.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_par_csr_spspmm.f90 b/base/tools/psb_s_par_csr_spspmm.f90 index 17bf4e449..ca21351a0 100644 --- a/base/tools/psb_s_par_csr_spspmm.f90 +++ b/base/tools/psb_s_par_csr_spspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_remap.F90 b/base/tools/psb_s_remap.F90 index b7cf73696..6f5365b32 100644 --- a/base/tools/psb_s_remap.F90 +++ b/base/tools/psb_s_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_remote_mat.F90 b/base/tools/psb_s_remote_mat.F90 index 631777ecf..a9bc2a7a5 100644 --- a/base/tools/psb_s_remote_mat.F90 +++ b/base/tools/psb_s_remote_mat.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_remote_vect.F90 b/base/tools/psb_s_remote_vect.F90 index 260d03bd2..cd7fe19ea 100644 --- a/base/tools/psb_s_remote_vect.F90 +++ b/base/tools/psb_s_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sallc.f90 b/base/tools/psb_sallc.f90 index 3c4f9a993..518b269dd 100644 --- a/base/tools/psb_sallc.f90 +++ b/base/tools/psb_sallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sallc_a.f90 b/base/tools/psb_sallc_a.f90 index 3b511d61b..9a50199fd 100644 --- a/base/tools/psb_sallc_a.f90 +++ b/base/tools/psb_sallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_salloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sasb.f90 b/base/tools/psb_sasb.f90 index 6d667dc96..fb1593f2d 100644 --- a/base/tools/psb_sasb.f90 +++ b/base/tools/psb_sasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sasb_a.f90 b/base/tools/psb_sasb_a.f90 index 76dbdafbe..a6a4ef347 100644 --- a/base/tools/psb_sasb_a.f90 +++ b/base/tools/psb_sasb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_sasb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_scdbldext.F90 b/base/tools/psb_scdbldext.F90 index 812ca8aa0..d7a5f7223 100644 --- a/base/tools/psb_scdbldext.F90 +++ b/base/tools/psb_scdbldext.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sfree.f90 b/base/tools/psb_sfree.f90 index add6162b5..90c397c28 100644 --- a/base/tools/psb_sfree.f90 +++ b/base/tools/psb_sfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sfree_a.f90 b/base/tools/psb_sfree_a.f90 index 036bb903c..b8f1e7c7f 100644 --- a/base/tools/psb_sfree_a.f90 +++ b/base/tools/psb_sfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sgetelem.f90 b/base/tools/psb_sgetelem.f90 index 723a2f7df..118ee31b4 100644 --- a/base/tools/psb_sgetelem.f90 +++ b/base/tools/psb_sgetelem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sins.f90 b/base/tools/psb_sins.f90 index ec9988f8b..bc3a73db0 100644 --- a/base/tools/psb_sins.f90 +++ b/base/tools/psb_sins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sins_a.f90 b/base/tools/psb_sins_a.f90 index 629ad7832..d1e8db110 100644 --- a/base/tools/psb_sins_a.f90 +++ b/base/tools/psb_sins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_sinsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sspalloc.f90 b/base/tools/psb_sspalloc.f90 index 8004e7421..3e421d5a3 100644 --- a/base/tools/psb_sspalloc.f90 +++ b/base/tools/psb_sspalloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sspasb.f90 b/base/tools/psb_sspasb.f90 index 60d1c25f8..971efe06c 100644 --- a/base/tools/psb_sspasb.f90 +++ b/base/tools/psb_sspasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sspfree.f90 b/base/tools/psb_sspfree.f90 index 968e9f9a6..073f8cdc6 100644 --- a/base/tools/psb_sspfree.f90 +++ b/base/tools/psb_sspfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_ssphalo.F90 b/base/tools/psb_ssphalo.F90 index 9a94b4383..c33a560b7 100644 --- a/base/tools/psb_ssphalo.F90 +++ b/base/tools/psb_ssphalo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sspins.F90 b/base/tools/psb_sspins.F90 index 377c6e23a..74497707f 100644 --- a/base/tools/psb_sspins.F90 +++ b/base/tools/psb_sspins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_ssprn.f90 b/base/tools/psb_ssprn.f90 index 602867e67..6b687306f 100644 --- a/base/tools/psb_ssprn.f90 +++ b/base/tools/psb_ssprn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_glob_transpose.F90 b/base/tools/psb_z_glob_transpose.F90 index de952682d..339d2804e 100644 --- a/base/tools/psb_z_glob_transpose.F90 +++ b/base/tools/psb_z_glob_transpose.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_map.f90 b/base/tools/psb_z_map.f90 index 0aba3e3eb..8b9ff4cee 100644 --- a/base/tools/psb_z_map.f90 +++ b/base/tools/psb_z_map.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_par_csr_spspmm.f90 b/base/tools/psb_z_par_csr_spspmm.f90 index 6629aee25..455d2128f 100644 --- a/base/tools/psb_z_par_csr_spspmm.f90 +++ b/base/tools/psb_z_par_csr_spspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_remap.F90 b/base/tools/psb_z_remap.F90 index 661ae3cc9..c8d23a600 100644 --- a/base/tools/psb_z_remap.F90 +++ b/base/tools/psb_z_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_remote_mat.F90 b/base/tools/psb_z_remote_mat.F90 index 5542f2260..c30f7896f 100644 --- a/base/tools/psb_z_remote_mat.F90 +++ b/base/tools/psb_z_remote_mat.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_remote_vect.F90 b/base/tools/psb_z_remote_vect.F90 index 319ab38fd..083d23d7e 100644 --- a/base/tools/psb_z_remote_vect.F90 +++ b/base/tools/psb_z_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zallc.f90 b/base/tools/psb_zallc.f90 index bfc3d6780..a3ffa1ee7 100644 --- a/base/tools/psb_zallc.f90 +++ b/base/tools/psb_zallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zallc_a.f90 b/base/tools/psb_zallc_a.f90 index 1af815e4a..a9fe74fd8 100644 --- a/base/tools/psb_zallc_a.f90 +++ b/base/tools/psb_zallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_zalloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zasb.f90 b/base/tools/psb_zasb.f90 index b8d797ecc..b0cb8b899 100644 --- a/base/tools/psb_zasb.f90 +++ b/base/tools/psb_zasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zasb_a.f90 b/base/tools/psb_zasb_a.f90 index e8c9db992..1d6cae4da 100644 --- a/base/tools/psb_zasb_a.f90 +++ b/base/tools/psb_zasb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_zasb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zcdbldext.F90 b/base/tools/psb_zcdbldext.F90 index 0db84d7a0..fe83b784d 100644 --- a/base/tools/psb_zcdbldext.F90 +++ b/base/tools/psb_zcdbldext.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zfree.f90 b/base/tools/psb_zfree.f90 index 6f7f057b1..862432f42 100644 --- a/base/tools/psb_zfree.f90 +++ b/base/tools/psb_zfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zfree_a.f90 b/base/tools/psb_zfree_a.f90 index 95fa38d14..67e94de19 100644 --- a/base/tools/psb_zfree_a.f90 +++ b/base/tools/psb_zfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zgetelem.f90 b/base/tools/psb_zgetelem.f90 index ac130e826..45757cefa 100644 --- a/base/tools/psb_zgetelem.f90 +++ b/base/tools/psb_zgetelem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zins.f90 b/base/tools/psb_zins.f90 index 8e8b2afd0..a966c0130 100644 --- a/base/tools/psb_zins.f90 +++ b/base/tools/psb_zins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zins_a.f90 b/base/tools/psb_zins_a.f90 index 4b068117f..7bd8b1f9c 100644 --- a/base/tools/psb_zins_a.f90 +++ b/base/tools/psb_zins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_zinsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zspalloc.f90 b/base/tools/psb_zspalloc.f90 index 308774ef8..58a71b85c 100644 --- a/base/tools/psb_zspalloc.f90 +++ b/base/tools/psb_zspalloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zspasb.f90 b/base/tools/psb_zspasb.f90 index deba9edc2..163f0d5e5 100644 --- a/base/tools/psb_zspasb.f90 +++ b/base/tools/psb_zspasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zspfree.f90 b/base/tools/psb_zspfree.f90 index 73f0bb273..3d89e4cbd 100644 --- a/base/tools/psb_zspfree.f90 +++ b/base/tools/psb_zspfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zsphalo.F90 b/base/tools/psb_zsphalo.F90 index 3a878172d..90151d451 100644 --- a/base/tools/psb_zsphalo.F90 +++ b/base/tools/psb_zsphalo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zspins.F90 b/base/tools/psb_zspins.F90 index f5181030b..2e73b7ae4 100644 --- a/base/tools/psb_zspins.F90 +++ b/base/tools/psb_zspins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zsprn.f90 b/base/tools/psb_zsprn.f90 index c1676bed0..0d797d482 100644 --- a/base/tools/psb_zsprn.f90 +++ b/base/tools/psb_zsprn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cbind/test/pdegen/pdegen3dc.c b/cbind/test/pdegen/pdegen3dc.c index d9f95b238..52a7a97f6 100644 --- a/cbind/test/pdegen/pdegen3dc.c +++ b/cbind/test/pdegen/pdegen3dc.c @@ -12,7 +12,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ -/* software without specific written permission. */ +/* software without specific prior written permission. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/License-spgpu.md b/cuda/License-spgpu similarity index 100% rename from cuda/License-spgpu.md rename to cuda/License-spgpu diff --git a/cuda/Makefile b/cuda/Makefile old mode 100755 new mode 100644 diff --git a/cuda/base_cusparse_mod.F90 b/cuda/base_cusparse_mod.F90 index 94a8255f0..382472c9e 100644 --- a/cuda/base_cusparse_mod.F90 +++ b/cuda/base_cusparse_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/c_cusparse_mod.F90 b/cuda/c_cusparse_mod.F90 index 3329f7331..3ac7911b9 100644 --- a/cuda/c_cusparse_mod.F90 +++ b/cuda/c_cusparse_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/ccusparse.c b/cuda/ccusparse.c index 6b5c8ea65..d3d5fd7cb 100644 --- a/cuda/ccusparse.c +++ b/cuda/ccusparse.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/ccusparse.h b/cuda/ccusparse.h index 8643211ad..549fd47ef 100644 --- a/cuda/ccusparse.h +++ b/cuda/ccusparse.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/cintrf.h b/cuda/cintrf.h index c9b70ce38..6555a5198 100644 --- a/cuda/cintrf.h +++ b/cuda/cintrf.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/core_mod.f90 b/cuda/core_mod.f90 index d30f8a996..3eb62f48a 100644 --- a/cuda/core_mod.f90 +++ b/cuda/core_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/cuda_util.c b/cuda/cuda_util.c index 5299f429b..707c88de1 100644 --- a/cuda/cuda_util.c +++ b/cuda/cuda_util.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/cuda_util.h b/cuda/cuda_util.h index 0c2cce4f7..3163b8ee3 100644 --- a/cuda/cuda_util.h +++ b/cuda/cuda_util.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/cusparse_mod.F90 b/cuda/cusparse_mod.F90 index 4ae16cffc..97f09b1e3 100644 --- a/cuda/cusparse_mod.F90 +++ b/cuda/cusparse_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/cvectordev.c b/cuda/cvectordev.c index ea09f80e4..5304525c2 100644 --- a/cuda/cvectordev.c +++ b/cuda/cvectordev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/cvectordev.h b/cuda/cvectordev.h index be095ff58..8f717a3d6 100644 --- a/cuda/cvectordev.h +++ b/cuda/cvectordev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/d_cusparse_mod.F90 b/cuda/d_cusparse_mod.F90 index 55751475d..598dccb05 100644 --- a/cuda/d_cusparse_mod.F90 +++ b/cuda/d_cusparse_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/dcusparse.c b/cuda/dcusparse.c index 9af4ce381..80a6d83c7 100644 --- a/cuda/dcusparse.c +++ b/cuda/dcusparse.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/dcusparse.h b/cuda/dcusparse.h index 4b00173b5..149f7b530 100644 --- a/cuda/dcusparse.h +++ b/cuda/dcusparse.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/diagdev.c b/cuda/diagdev.c index 0cf78a41f..7c26e65e1 100644 --- a/cuda/diagdev.c +++ b/cuda/diagdev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/diagdev.h b/cuda/diagdev.h index 3a062fb78..f5cb51f6b 100644 --- a/cuda/diagdev.h +++ b/cuda/diagdev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/diagdev_mod.F90 b/cuda/diagdev_mod.F90 index 70d58d4e5..42714902a 100644 --- a/cuda/diagdev_mod.F90 +++ b/cuda/diagdev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/dnsdev.c b/cuda/dnsdev.c index 3cf57976f..ce253f5fe 100644 --- a/cuda/dnsdev.c +++ b/cuda/dnsdev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/dnsdev.h b/cuda/dnsdev.h index aa536105d..f5e006240 100644 --- a/cuda/dnsdev.h +++ b/cuda/dnsdev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/dnsdev_mod.F90 b/cuda/dnsdev_mod.F90 index fd257e0ef..9dfc3b73b 100644 --- a/cuda/dnsdev_mod.F90 +++ b/cuda/dnsdev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/dvectordev.c b/cuda/dvectordev.c index 336aee522..ea1da37af 100644 --- a/cuda/dvectordev.c +++ b/cuda/dvectordev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/dvectordev.h b/cuda/dvectordev.h index 85699ffd1..263c4b473 100644 --- a/cuda/dvectordev.h +++ b/cuda/dvectordev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/elldev.c b/cuda/elldev.c index cf49aadd9..f2678f64f 100644 --- a/cuda/elldev.c +++ b/cuda/elldev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/elldev.h b/cuda/elldev.h index 4e69bb3af..273ffe43c 100644 --- a/cuda/elldev.h +++ b/cuda/elldev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/elldev_mod.F90 b/cuda/elldev_mod.F90 index 40cf8e495..bbeae25de 100644 --- a/cuda/elldev_mod.F90 +++ b/cuda/elldev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/fcusparse.c b/cuda/fcusparse.c index 094348cec..4479efe74 100644 --- a/cuda/fcusparse.c +++ b/cuda/fcusparse.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/fcusparse.h b/cuda/fcusparse.h index 73417591f..bf1b46bec 100644 --- a/cuda/fcusparse.h +++ b/cuda/fcusparse.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/fcusparse_dat.h b/cuda/fcusparse_dat.h index 09de4363c..bbda6b1e3 100644 --- a/cuda/fcusparse_dat.h +++ b/cuda/fcusparse_dat.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/fcusparse_fct.h b/cuda/fcusparse_fct.h index e8ce7934b..d30af56c7 100644 --- a/cuda/fcusparse_fct.h +++ b/cuda/fcusparse_fct.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/hdiagdev.c b/cuda/hdiagdev.c index 813e4fab5..6f0e4ef6c 100644 --- a/cuda/hdiagdev.c +++ b/cuda/hdiagdev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/hdiagdev.h b/cuda/hdiagdev.h index c02fcc690..9aae0b026 100644 --- a/cuda/hdiagdev.h +++ b/cuda/hdiagdev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/hdiagdev_mod.F90 b/cuda/hdiagdev_mod.F90 index 9a3530e73..1af4d069b 100644 --- a/cuda/hdiagdev_mod.F90 +++ b/cuda/hdiagdev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/hlldev.c b/cuda/hlldev.c index 186831d38..879f165df 100644 --- a/cuda/hlldev.c +++ b/cuda/hlldev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/hlldev.h b/cuda/hlldev.h index 3b47f5ea1..f80e905dc 100644 --- a/cuda/hlldev.h +++ b/cuda/hlldev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/hlldev_mod.F90 b/cuda/hlldev_mod.F90 index 90b8e13c8..7a3f13c67 100644 --- a/cuda/hlldev_mod.F90 +++ b/cuda/hlldev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/Makefile b/cuda/impl/Makefile old mode 100755 new mode 100644 diff --git a/cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 index aa6a3ba35..3ee98b177 100644 --- a/cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 b/cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 index e9d42139f..54dfa69ff 100644 --- a/cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 index e70a044e8..88dfec87f 100644 --- a/cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 index c6105e886..d70fdabac 100644 --- a/cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 b/cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 index f7e5351ed..bdd39f00b 100644 --- a/cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 index 9be741c98..2d1c01d1f 100644 --- a/cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 index 8b0d9f2a6..e6c6b894b 100644 --- a/cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 b/cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 index 96a5c5e8d..06d8a1869 100644 --- a/cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 index d69247d0e..35c972510 100644 --- a/cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 b/cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 index a6e87518d..4b6b6a578 100644 --- a/cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 b/cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 index f1e002f39..d5bea71c1 100644 --- a/cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 +++ b/cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_csmm.F90 b/cuda/impl/psb_c_cuda_csrg_csmm.F90 index b30129521..9b2dfba78 100644 --- a/cuda/impl/psb_c_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_csrg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_csmv.F90 b/cuda/impl/psb_c_cuda_csrg_csmv.F90 index ae90cb7eb..9d323f923 100644 --- a/cuda/impl/psb_c_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_csrg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_from_gpu.F90 b/cuda/impl/psb_c_cuda_csrg_from_gpu.F90 index 1b18195d1..7622cc410 100644 --- a/cuda/impl/psb_c_cuda_csrg_from_gpu.F90 +++ b/cuda/impl/psb_c_cuda_csrg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 b/cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 index 7e5bb6143..43c2aa3aa 100644 --- a/cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 +++ b/cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_mold.F90 b/cuda/impl/psb_c_cuda_csrg_mold.F90 index 405f2736c..4f531d14e 100644 --- a/cuda/impl/psb_c_cuda_csrg_mold.F90 +++ b/cuda/impl/psb_c_cuda_csrg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 b/cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 index a757f4776..9db2fe74f 100644 --- a/cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 +++ b/cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_scal.F90 b/cuda/impl/psb_c_cuda_csrg_scal.F90 index 137163394..1c9af3056 100644 --- a/cuda/impl/psb_c_cuda_csrg_scal.F90 +++ b/cuda/impl/psb_c_cuda_csrg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_scals.F90 b/cuda/impl/psb_c_cuda_csrg_scals.F90 index 5334be3db..aa5db9d6b 100644 --- a/cuda/impl/psb_c_cuda_csrg_scals.F90 +++ b/cuda/impl/psb_c_cuda_csrg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_to_gpu.F90 b/cuda/impl/psb_c_cuda_csrg_to_gpu.F90 index 8dac41c0f..fe6a2e7e2 100644 --- a/cuda/impl/psb_c_cuda_csrg_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_csrg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 index c58e7ec09..dd9fab0d7 100644 --- a/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_diag_csmv.F90 b/cuda/impl/psb_c_cuda_diag_csmv.F90 index c09409035..e1bdec7a0 100644 --- a/cuda/impl/psb_c_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_c_cuda_diag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_diag_mold.F90 b/cuda/impl/psb_c_cuda_diag_mold.F90 index 4c8a3c567..f916322ee 100644 --- a/cuda/impl/psb_c_cuda_diag_mold.F90 +++ b/cuda/impl/psb_c_cuda_diag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_diag_to_gpu.F90 b/cuda/impl/psb_c_cuda_diag_to_gpu.F90 index 88bbd8b53..916cb0cd1 100644 --- a/cuda/impl/psb_c_cuda_diag_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_diag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_diag_vect_mv.F90 b/cuda/impl/psb_c_cuda_diag_vect_mv.F90 index fba22bc5d..41fdbda62 100644 --- a/cuda/impl/psb_c_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_diag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 b/cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 index 65a42640e..746011ae9 100644 --- a/cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 +++ b/cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 b/cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 index 7f50d547e..f9e660520 100644 --- a/cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 +++ b/cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_asb.f90 b/cuda/impl/psb_c_cuda_elg_asb.f90 index 16d70736f..5b83ae948 100644 --- a/cuda/impl/psb_c_cuda_elg_asb.f90 +++ b/cuda/impl/psb_c_cuda_elg_asb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_csmm.F90 b/cuda/impl/psb_c_cuda_elg_csmm.F90 index f7ae98926..0a450cd1d 100644 --- a/cuda/impl/psb_c_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_elg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_csmv.F90 b/cuda/impl/psb_c_cuda_elg_csmv.F90 index a23d4a60e..0f04f193f 100644 --- a/cuda/impl/psb_c_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_elg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_csput.F90 b/cuda/impl/psb_c_cuda_elg_csput.F90 index 3da928f0e..98dea017a 100644 --- a/cuda/impl/psb_c_cuda_elg_csput.F90 +++ b/cuda/impl/psb_c_cuda_elg_csput.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_from_gpu.F90 b/cuda/impl/psb_c_cuda_elg_from_gpu.F90 index 34c6e4a62..4a21bd7fa 100644 --- a/cuda/impl/psb_c_cuda_elg_from_gpu.F90 +++ b/cuda/impl/psb_c_cuda_elg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 b/cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 index 148d72d20..a4d1a5430 100644 --- a/cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 +++ b/cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_mold.F90 b/cuda/impl/psb_c_cuda_elg_mold.F90 index bb94bf075..22bc84580 100644 --- a/cuda/impl/psb_c_cuda_elg_mold.F90 +++ b/cuda/impl/psb_c_cuda_elg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 b/cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 index 6a1f87639..3f5618196 100644 --- a/cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 +++ b/cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_scal.F90 b/cuda/impl/psb_c_cuda_elg_scal.F90 index 65f847684..49bf887fb 100644 --- a/cuda/impl/psb_c_cuda_elg_scal.F90 +++ b/cuda/impl/psb_c_cuda_elg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_scals.F90 b/cuda/impl/psb_c_cuda_elg_scals.F90 index 966f2e918..291dddf5a 100644 --- a/cuda/impl/psb_c_cuda_elg_scals.F90 +++ b/cuda/impl/psb_c_cuda_elg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_to_gpu.F90 b/cuda/impl/psb_c_cuda_elg_to_gpu.F90 index 495207c73..3cf6e7710 100644 --- a/cuda/impl/psb_c_cuda_elg_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_elg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_trim.f90 b/cuda/impl/psb_c_cuda_elg_trim.f90 index 78dbe1937..bea106719 100644 --- a/cuda/impl/psb_c_cuda_elg_trim.f90 +++ b/cuda/impl/psb_c_cuda_elg_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_vect_mv.F90 b/cuda/impl/psb_c_cuda_elg_vect_mv.F90 index 9da6a34ac..903047d46 100644 --- a/cuda/impl/psb_c_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_elg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hdiag_csmv.F90 b/cuda/impl/psb_c_cuda_hdiag_csmv.F90 index 36928062a..8385d743d 100644 --- a/cuda/impl/psb_c_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hdiag_mold.F90 b/cuda/impl/psb_c_cuda_hdiag_mold.F90 index 27402cfc7..64bde1349 100644 --- a/cuda/impl/psb_c_cuda_hdiag_mold.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 b/cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 index 8d1b61a1b..65705d115 100644 --- a/cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 index 0c7ce856f..4b661c77b 100644 --- a/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 b/cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 index 1b41f1326..c122f7ca6 100644 --- a/cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 +++ b/cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_csmm.F90 b/cuda/impl/psb_c_cuda_hlg_csmm.F90 index 88aa53a84..3acfc1156 100644 --- a/cuda/impl/psb_c_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_hlg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_csmv.F90 b/cuda/impl/psb_c_cuda_hlg_csmv.F90 index 18db6ad10..ee3649434 100644 --- a/cuda/impl/psb_c_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hlg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_from_gpu.F90 b/cuda/impl/psb_c_cuda_hlg_from_gpu.F90 index d06d54888..e197a5dbe 100644 --- a/cuda/impl/psb_c_cuda_hlg_from_gpu.F90 +++ b/cuda/impl/psb_c_cuda_hlg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 b/cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 index 87d7c662e..cc36e4089 100644 --- a/cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 +++ b/cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_mold.F90 b/cuda/impl/psb_c_cuda_hlg_mold.F90 index a702e2110..be1cebf90 100644 --- a/cuda/impl/psb_c_cuda_hlg_mold.F90 +++ b/cuda/impl/psb_c_cuda_hlg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 b/cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 index 2ec5fa2ca..2b5d6f7ec 100644 --- a/cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 +++ b/cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_scal.F90 b/cuda/impl/psb_c_cuda_hlg_scal.F90 index 770d17345..267ee7808 100644 --- a/cuda/impl/psb_c_cuda_hlg_scal.F90 +++ b/cuda/impl/psb_c_cuda_hlg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_scals.F90 b/cuda/impl/psb_c_cuda_hlg_scals.F90 index ef6bc1e39..1a5ba0295 100644 --- a/cuda/impl/psb_c_cuda_hlg_scals.F90 +++ b/cuda/impl/psb_c_cuda_hlg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_to_gpu.F90 b/cuda/impl/psb_c_cuda_hlg_to_gpu.F90 index d7d179e75..5d28e9f8e 100644 --- a/cuda/impl/psb_c_cuda_hlg_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_hlg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 index 3789ef17a..af4ae84ec 100644 --- a/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 b/cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 index dbbeb1f2a..1a2cd1293 100644 --- a/cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 +++ b/cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_csmm.F90 b/cuda/impl/psb_c_cuda_hybg_csmm.F90 index 8899f54e6..817c30f8e 100644 --- a/cuda/impl/psb_c_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_hybg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_csmv.F90 b/cuda/impl/psb_c_cuda_hybg_csmv.F90 index 5832cf347..898e6ebbd 100644 --- a/cuda/impl/psb_c_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hybg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 b/cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 index 4444397ca..cdfe30fd6 100644 --- a/cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 +++ b/cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_mold.F90 b/cuda/impl/psb_c_cuda_hybg_mold.F90 index ba0e31a06..57a658fd9 100644 --- a/cuda/impl/psb_c_cuda_hybg_mold.F90 +++ b/cuda/impl/psb_c_cuda_hybg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 b/cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 index c3bd728bd..78f631e49 100644 --- a/cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 +++ b/cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_scal.F90 b/cuda/impl/psb_c_cuda_hybg_scal.F90 index d7e360190..0c86f603f 100644 --- a/cuda/impl/psb_c_cuda_hybg_scal.F90 +++ b/cuda/impl/psb_c_cuda_hybg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_scals.F90 b/cuda/impl/psb_c_cuda_hybg_scals.F90 index 03106f7af..c3e162480 100644 --- a/cuda/impl/psb_c_cuda_hybg_scals.F90 +++ b/cuda/impl/psb_c_cuda_hybg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_to_gpu.F90 b/cuda/impl/psb_c_cuda_hybg_to_gpu.F90 index a424c7959..f2e585c78 100644 --- a/cuda/impl/psb_c_cuda_hybg_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_hybg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 index cb38321f9..34da8f889 100644 --- a/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 index f0a74c093..2667c3a4d 100644 --- a/cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 b/cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 index eb3698b0f..aac8298c2 100644 --- a/cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 index c1ee2ba99..39a8b8ab0 100644 --- a/cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 index f9555729b..a836f2232 100644 --- a/cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 b/cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 index 59615e25b..7332c1f42 100644 --- a/cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 index 21ee731d4..9b044d95c 100644 --- a/cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 index 50c20fad9..c7380d813 100644 --- a/cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 b/cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 index 3fba905a8..0c5e5e5ed 100644 --- a/cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 index 72837aa69..83a445329 100644 --- a/cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 b/cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 index da910175a..3a3d36566 100644 --- a/cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 index ab3a72561..ceb85ec2e 100644 --- a/cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 b/cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 index 8f8e8cbed..41455df8a 100644 --- a/cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 index dc0401d52..66b9e1b3e 100644 --- a/cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 index 890bdc392..dd82d1b4d 100644 --- a/cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 b/cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 index 7beea7f16..be6fbce8a 100644 --- a/cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 index 82ef48766..7729b1bb0 100644 --- a/cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 index 34b999a9c..503d737d9 100644 --- a/cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 b/cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 index ecb15157b..cc5de351e 100644 --- a/cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 index 6405c61d1..b26f2bc11 100644 --- a/cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 b/cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 index a6f9391ba..2029bab87 100644 --- a/cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 b/cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 index 056f2deb3..0aa23bd9b 100644 --- a/cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 +++ b/cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_csmm.F90 b/cuda/impl/psb_d_cuda_csrg_csmm.F90 index ddac1373c..eca4fc5cf 100644 --- a/cuda/impl/psb_d_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_csrg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_csmv.F90 b/cuda/impl/psb_d_cuda_csrg_csmv.F90 index c1c889f83..98b98100c 100644 --- a/cuda/impl/psb_d_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_csrg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_from_gpu.F90 b/cuda/impl/psb_d_cuda_csrg_from_gpu.F90 index 9b5c4e4c1..509fea629 100644 --- a/cuda/impl/psb_d_cuda_csrg_from_gpu.F90 +++ b/cuda/impl/psb_d_cuda_csrg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 b/cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 index 9a45ee176..cf964bea9 100644 --- a/cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 +++ b/cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_mold.F90 b/cuda/impl/psb_d_cuda_csrg_mold.F90 index eec34975f..8fe1d44fc 100644 --- a/cuda/impl/psb_d_cuda_csrg_mold.F90 +++ b/cuda/impl/psb_d_cuda_csrg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 b/cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 index c27cb943a..74d3f786f 100644 --- a/cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 +++ b/cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_scal.F90 b/cuda/impl/psb_d_cuda_csrg_scal.F90 index 860e93962..a518de842 100644 --- a/cuda/impl/psb_d_cuda_csrg_scal.F90 +++ b/cuda/impl/psb_d_cuda_csrg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_scals.F90 b/cuda/impl/psb_d_cuda_csrg_scals.F90 index 87ef588d9..cadbb53bd 100644 --- a/cuda/impl/psb_d_cuda_csrg_scals.F90 +++ b/cuda/impl/psb_d_cuda_csrg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_to_gpu.F90 b/cuda/impl/psb_d_cuda_csrg_to_gpu.F90 index b4067e880..f173522fe 100644 --- a/cuda/impl/psb_d_cuda_csrg_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_csrg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 index 03fefbdd5..a0beaeba8 100644 --- a/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_diag_csmv.F90 b/cuda/impl/psb_d_cuda_diag_csmv.F90 index 0317a3699..4ba861fae 100644 --- a/cuda/impl/psb_d_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_d_cuda_diag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_diag_mold.F90 b/cuda/impl/psb_d_cuda_diag_mold.F90 index 7cea069e3..61efcb7e9 100644 --- a/cuda/impl/psb_d_cuda_diag_mold.F90 +++ b/cuda/impl/psb_d_cuda_diag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_diag_to_gpu.F90 b/cuda/impl/psb_d_cuda_diag_to_gpu.F90 index 9b6489622..46f526478 100644 --- a/cuda/impl/psb_d_cuda_diag_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_diag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_diag_vect_mv.F90 b/cuda/impl/psb_d_cuda_diag_vect_mv.F90 index 3bc2372d8..bbe8d8d6c 100644 --- a/cuda/impl/psb_d_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_diag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 b/cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 index e4419d810..7724db91e 100644 --- a/cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 +++ b/cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 b/cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 index 6db20c966..a827921f5 100644 --- a/cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 +++ b/cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_asb.f90 b/cuda/impl/psb_d_cuda_elg_asb.f90 index 7d510ee27..1ae9a4150 100644 --- a/cuda/impl/psb_d_cuda_elg_asb.f90 +++ b/cuda/impl/psb_d_cuda_elg_asb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_csmm.F90 b/cuda/impl/psb_d_cuda_elg_csmm.F90 index f77d72d83..aa588fa38 100644 --- a/cuda/impl/psb_d_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_elg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_csmv.F90 b/cuda/impl/psb_d_cuda_elg_csmv.F90 index 351ad99d8..49d94fa74 100644 --- a/cuda/impl/psb_d_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_elg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_csput.F90 b/cuda/impl/psb_d_cuda_elg_csput.F90 index 0d16de1f8..18c055e9e 100644 --- a/cuda/impl/psb_d_cuda_elg_csput.F90 +++ b/cuda/impl/psb_d_cuda_elg_csput.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_from_gpu.F90 b/cuda/impl/psb_d_cuda_elg_from_gpu.F90 index 720a6d733..296e950c4 100644 --- a/cuda/impl/psb_d_cuda_elg_from_gpu.F90 +++ b/cuda/impl/psb_d_cuda_elg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 b/cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 index 5e5d72eff..4fcbad08d 100644 --- a/cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 +++ b/cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_mold.F90 b/cuda/impl/psb_d_cuda_elg_mold.F90 index 107f19afb..538c4ec55 100644 --- a/cuda/impl/psb_d_cuda_elg_mold.F90 +++ b/cuda/impl/psb_d_cuda_elg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 b/cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 index 474647605..c9e60e49f 100644 --- a/cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 +++ b/cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_scal.F90 b/cuda/impl/psb_d_cuda_elg_scal.F90 index 420c710ee..b1828a73c 100644 --- a/cuda/impl/psb_d_cuda_elg_scal.F90 +++ b/cuda/impl/psb_d_cuda_elg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_scals.F90 b/cuda/impl/psb_d_cuda_elg_scals.F90 index ff22002e4..9986d613d 100644 --- a/cuda/impl/psb_d_cuda_elg_scals.F90 +++ b/cuda/impl/psb_d_cuda_elg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_to_gpu.F90 b/cuda/impl/psb_d_cuda_elg_to_gpu.F90 index 9b88af69b..8bcfdb41e 100644 --- a/cuda/impl/psb_d_cuda_elg_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_elg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_trim.f90 b/cuda/impl/psb_d_cuda_elg_trim.f90 index a371c6738..d50d3f62d 100644 --- a/cuda/impl/psb_d_cuda_elg_trim.f90 +++ b/cuda/impl/psb_d_cuda_elg_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_vect_mv.F90 b/cuda/impl/psb_d_cuda_elg_vect_mv.F90 index f0b83c2bd..f8a165d64 100644 --- a/cuda/impl/psb_d_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_elg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hdiag_csmv.F90 b/cuda/impl/psb_d_cuda_hdiag_csmv.F90 index bf4dacc18..c4553b0ec 100644 --- a/cuda/impl/psb_d_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hdiag_mold.F90 b/cuda/impl/psb_d_cuda_hdiag_mold.F90 index b858b56d0..212f6aa2f 100644 --- a/cuda/impl/psb_d_cuda_hdiag_mold.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 b/cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 index 73c4a47de..b413397b6 100644 --- a/cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 index c18c80ac9..537234447 100644 --- a/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 b/cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 index 68d9ab50e..f6a1f2202 100644 --- a/cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 +++ b/cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_csmm.F90 b/cuda/impl/psb_d_cuda_hlg_csmm.F90 index ee8424e69..972cddbd0 100644 --- a/cuda/impl/psb_d_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_hlg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_csmv.F90 b/cuda/impl/psb_d_cuda_hlg_csmv.F90 index 58892c1fe..4f7cce512 100644 --- a/cuda/impl/psb_d_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hlg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_from_gpu.F90 b/cuda/impl/psb_d_cuda_hlg_from_gpu.F90 index 752fd944d..05890c0e6 100644 --- a/cuda/impl/psb_d_cuda_hlg_from_gpu.F90 +++ b/cuda/impl/psb_d_cuda_hlg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 b/cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 index f4a0424d2..5394605d3 100644 --- a/cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 +++ b/cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_mold.F90 b/cuda/impl/psb_d_cuda_hlg_mold.F90 index e41d56f27..a188bdd0b 100644 --- a/cuda/impl/psb_d_cuda_hlg_mold.F90 +++ b/cuda/impl/psb_d_cuda_hlg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 b/cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 index e696d304b..68fef0650 100644 --- a/cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 +++ b/cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_scal.F90 b/cuda/impl/psb_d_cuda_hlg_scal.F90 index 042e58050..026b45204 100644 --- a/cuda/impl/psb_d_cuda_hlg_scal.F90 +++ b/cuda/impl/psb_d_cuda_hlg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_scals.F90 b/cuda/impl/psb_d_cuda_hlg_scals.F90 index 4c81faa99..7a01fa943 100644 --- a/cuda/impl/psb_d_cuda_hlg_scals.F90 +++ b/cuda/impl/psb_d_cuda_hlg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_to_gpu.F90 b/cuda/impl/psb_d_cuda_hlg_to_gpu.F90 index 566c94bd5..5fa80c1ba 100644 --- a/cuda/impl/psb_d_cuda_hlg_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_hlg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 index cccba74bb..9feee7074 100644 --- a/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 b/cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 index b9c5d3d03..33cf91e8e 100644 --- a/cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 +++ b/cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_csmm.F90 b/cuda/impl/psb_d_cuda_hybg_csmm.F90 index dbf339907..825ea9887 100644 --- a/cuda/impl/psb_d_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_hybg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_csmv.F90 b/cuda/impl/psb_d_cuda_hybg_csmv.F90 index 1565c6481..acd05eeca 100644 --- a/cuda/impl/psb_d_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hybg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 b/cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 index 902f871dc..ea6d8db0a 100644 --- a/cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 +++ b/cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_mold.F90 b/cuda/impl/psb_d_cuda_hybg_mold.F90 index 3e51acf60..1ebac3548 100644 --- a/cuda/impl/psb_d_cuda_hybg_mold.F90 +++ b/cuda/impl/psb_d_cuda_hybg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 b/cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 index e9699e773..3b876f8ae 100644 --- a/cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 +++ b/cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_scal.F90 b/cuda/impl/psb_d_cuda_hybg_scal.F90 index 15a33d7b6..2bd149b76 100644 --- a/cuda/impl/psb_d_cuda_hybg_scal.F90 +++ b/cuda/impl/psb_d_cuda_hybg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_scals.F90 b/cuda/impl/psb_d_cuda_hybg_scals.F90 index 34faa15d9..303fe312f 100644 --- a/cuda/impl/psb_d_cuda_hybg_scals.F90 +++ b/cuda/impl/psb_d_cuda_hybg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_to_gpu.F90 b/cuda/impl/psb_d_cuda_hybg_to_gpu.F90 index ba8596224..76893ea13 100644 --- a/cuda/impl/psb_d_cuda_hybg_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_hybg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 index 49060c3c1..5b72c916f 100644 --- a/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 index 559bfb2ce..cdbe2552f 100644 --- a/cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 b/cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 index c2411e90c..11b160e60 100644 --- a/cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 index a6a39a1c5..6ebbabddd 100644 --- a/cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 index 9886e90c9..7742ccd2e 100644 --- a/cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 b/cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 index da2d47a19..046051098 100644 --- a/cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 index b3c4f650a..d163e3892 100644 --- a/cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 index 95e862938..f162c2897 100644 --- a/cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 b/cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 index 02578b192..f39a93a4c 100644 --- a/cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 index 42f3aca31..33d43beea 100644 --- a/cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 b/cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 index f9c34f358..49aeac74d 100644 --- a/cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 index 0e3f9113a..f0b7f1622 100644 --- a/cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 b/cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 index 76871b59f..487d9cb3c 100644 --- a/cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 index 07025d776..de773e834 100644 --- a/cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 index 66abf76ad..8268419a0 100644 --- a/cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 b/cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 index 77df12b3a..1e8010a7e 100644 --- a/cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 index 75210478e..c2a89511a 100644 --- a/cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 index c254b15a8..ea1a425e6 100644 --- a/cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 b/cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 index f04b65e5e..160080557 100644 --- a/cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 index bf33a7a45..0bc7e7cb2 100644 --- a/cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 b/cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 index 2f22252d3..9dd4c8691 100644 --- a/cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 b/cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 index 7e6f0c862..aa5fbcdc4 100644 --- a/cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 +++ b/cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_csmm.F90 b/cuda/impl/psb_s_cuda_csrg_csmm.F90 index 453f5260d..9f8416cfc 100644 --- a/cuda/impl/psb_s_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_csrg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_csmv.F90 b/cuda/impl/psb_s_cuda_csrg_csmv.F90 index a387fd34c..c526f4a54 100644 --- a/cuda/impl/psb_s_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_csrg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_from_gpu.F90 b/cuda/impl/psb_s_cuda_csrg_from_gpu.F90 index da1a71842..67c4c972d 100644 --- a/cuda/impl/psb_s_cuda_csrg_from_gpu.F90 +++ b/cuda/impl/psb_s_cuda_csrg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 b/cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 index df11952c4..ed3fa3bc9 100644 --- a/cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 +++ b/cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_mold.F90 b/cuda/impl/psb_s_cuda_csrg_mold.F90 index 5e33850b2..05fdd12ce 100644 --- a/cuda/impl/psb_s_cuda_csrg_mold.F90 +++ b/cuda/impl/psb_s_cuda_csrg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 b/cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 index dfd115e78..90658038a 100644 --- a/cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 +++ b/cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_scal.F90 b/cuda/impl/psb_s_cuda_csrg_scal.F90 index ea3406a1a..ae509f191 100644 --- a/cuda/impl/psb_s_cuda_csrg_scal.F90 +++ b/cuda/impl/psb_s_cuda_csrg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_scals.F90 b/cuda/impl/psb_s_cuda_csrg_scals.F90 index 307d58494..282bd582c 100644 --- a/cuda/impl/psb_s_cuda_csrg_scals.F90 +++ b/cuda/impl/psb_s_cuda_csrg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_to_gpu.F90 b/cuda/impl/psb_s_cuda_csrg_to_gpu.F90 index 0c918dd40..ea4d57bb5 100644 --- a/cuda/impl/psb_s_cuda_csrg_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_csrg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 index 528204360..d8516c5ac 100644 --- a/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_diag_csmv.F90 b/cuda/impl/psb_s_cuda_diag_csmv.F90 index 016b82bcd..0f0e261f8 100644 --- a/cuda/impl/psb_s_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_s_cuda_diag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_diag_mold.F90 b/cuda/impl/psb_s_cuda_diag_mold.F90 index 9e6c58a62..d3dd61d33 100644 --- a/cuda/impl/psb_s_cuda_diag_mold.F90 +++ b/cuda/impl/psb_s_cuda_diag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_diag_to_gpu.F90 b/cuda/impl/psb_s_cuda_diag_to_gpu.F90 index c8578e75d..2e556d819 100644 --- a/cuda/impl/psb_s_cuda_diag_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_diag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_diag_vect_mv.F90 b/cuda/impl/psb_s_cuda_diag_vect_mv.F90 index d68e5193e..d2ec5143c 100644 --- a/cuda/impl/psb_s_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_diag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 b/cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 index 3f12b2935..731ce670b 100644 --- a/cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 +++ b/cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 b/cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 index b771ca1b0..e370a6315 100644 --- a/cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 +++ b/cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_asb.f90 b/cuda/impl/psb_s_cuda_elg_asb.f90 index 53a17a32b..6c5735ad1 100644 --- a/cuda/impl/psb_s_cuda_elg_asb.f90 +++ b/cuda/impl/psb_s_cuda_elg_asb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_csmm.F90 b/cuda/impl/psb_s_cuda_elg_csmm.F90 index ff7b78487..d16189410 100644 --- a/cuda/impl/psb_s_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_elg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_csmv.F90 b/cuda/impl/psb_s_cuda_elg_csmv.F90 index caf106cb5..2b8310130 100644 --- a/cuda/impl/psb_s_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_elg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_csput.F90 b/cuda/impl/psb_s_cuda_elg_csput.F90 index d43294bf8..280def3f1 100644 --- a/cuda/impl/psb_s_cuda_elg_csput.F90 +++ b/cuda/impl/psb_s_cuda_elg_csput.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_from_gpu.F90 b/cuda/impl/psb_s_cuda_elg_from_gpu.F90 index d995157ed..0b571a32e 100644 --- a/cuda/impl/psb_s_cuda_elg_from_gpu.F90 +++ b/cuda/impl/psb_s_cuda_elg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 b/cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 index 537365a6a..f5b88c8a6 100644 --- a/cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 +++ b/cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_mold.F90 b/cuda/impl/psb_s_cuda_elg_mold.F90 index 7ff9c7aeb..9f5f3aa04 100644 --- a/cuda/impl/psb_s_cuda_elg_mold.F90 +++ b/cuda/impl/psb_s_cuda_elg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 b/cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 index 5b99b9adb..a49b889ca 100644 --- a/cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 +++ b/cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_scal.F90 b/cuda/impl/psb_s_cuda_elg_scal.F90 index dfa99cf19..440e0d2aa 100644 --- a/cuda/impl/psb_s_cuda_elg_scal.F90 +++ b/cuda/impl/psb_s_cuda_elg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_scals.F90 b/cuda/impl/psb_s_cuda_elg_scals.F90 index f0aa2504b..8b0fe49a3 100644 --- a/cuda/impl/psb_s_cuda_elg_scals.F90 +++ b/cuda/impl/psb_s_cuda_elg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_to_gpu.F90 b/cuda/impl/psb_s_cuda_elg_to_gpu.F90 index 9c16ea8d1..6ba09d055 100644 --- a/cuda/impl/psb_s_cuda_elg_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_elg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_trim.f90 b/cuda/impl/psb_s_cuda_elg_trim.f90 index 2d3903436..c703e696e 100644 --- a/cuda/impl/psb_s_cuda_elg_trim.f90 +++ b/cuda/impl/psb_s_cuda_elg_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_vect_mv.F90 b/cuda/impl/psb_s_cuda_elg_vect_mv.F90 index 6c898fda5..bca9b3f58 100644 --- a/cuda/impl/psb_s_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_elg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hdiag_csmv.F90 b/cuda/impl/psb_s_cuda_hdiag_csmv.F90 index 3f34c2e79..093437890 100644 --- a/cuda/impl/psb_s_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hdiag_mold.F90 b/cuda/impl/psb_s_cuda_hdiag_mold.F90 index c11283ddc..f4621492c 100644 --- a/cuda/impl/psb_s_cuda_hdiag_mold.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 b/cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 index bc3fa3253..2442f162b 100644 --- a/cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 index 03215047c..5a9302d1d 100644 --- a/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 b/cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 index 480f6677a..3852392e3 100644 --- a/cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 +++ b/cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_csmm.F90 b/cuda/impl/psb_s_cuda_hlg_csmm.F90 index 0dc28c7f6..2d6428882 100644 --- a/cuda/impl/psb_s_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_hlg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_csmv.F90 b/cuda/impl/psb_s_cuda_hlg_csmv.F90 index c029c9081..4fff1ab5b 100644 --- a/cuda/impl/psb_s_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hlg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_from_gpu.F90 b/cuda/impl/psb_s_cuda_hlg_from_gpu.F90 index 8d9a315b7..39526c34a 100644 --- a/cuda/impl/psb_s_cuda_hlg_from_gpu.F90 +++ b/cuda/impl/psb_s_cuda_hlg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 b/cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 index 2985a1ab3..77c392375 100644 --- a/cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 +++ b/cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_mold.F90 b/cuda/impl/psb_s_cuda_hlg_mold.F90 index 89e329e7f..783fe71ed 100644 --- a/cuda/impl/psb_s_cuda_hlg_mold.F90 +++ b/cuda/impl/psb_s_cuda_hlg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 b/cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 index 037429586..33bff84f5 100644 --- a/cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 +++ b/cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_scal.F90 b/cuda/impl/psb_s_cuda_hlg_scal.F90 index 7074b8b68..116b29db1 100644 --- a/cuda/impl/psb_s_cuda_hlg_scal.F90 +++ b/cuda/impl/psb_s_cuda_hlg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_scals.F90 b/cuda/impl/psb_s_cuda_hlg_scals.F90 index 2c9f5ae88..faf1b411c 100644 --- a/cuda/impl/psb_s_cuda_hlg_scals.F90 +++ b/cuda/impl/psb_s_cuda_hlg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_to_gpu.F90 b/cuda/impl/psb_s_cuda_hlg_to_gpu.F90 index 91cfd5ad0..ab158c2fa 100644 --- a/cuda/impl/psb_s_cuda_hlg_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_hlg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 index 946969491..9b5197d7d 100644 --- a/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 b/cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 index a8e31ad81..349043ecc 100644 --- a/cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 +++ b/cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_csmm.F90 b/cuda/impl/psb_s_cuda_hybg_csmm.F90 index 85250fe33..d0705ce4d 100644 --- a/cuda/impl/psb_s_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_hybg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_csmv.F90 b/cuda/impl/psb_s_cuda_hybg_csmv.F90 index 993195f17..880253e08 100644 --- a/cuda/impl/psb_s_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hybg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 b/cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 index 6a230f827..f4b6af83c 100644 --- a/cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 +++ b/cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_mold.F90 b/cuda/impl/psb_s_cuda_hybg_mold.F90 index d1b41c2b0..015beb36e 100644 --- a/cuda/impl/psb_s_cuda_hybg_mold.F90 +++ b/cuda/impl/psb_s_cuda_hybg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 b/cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 index d43da4d9d..d69ff47dd 100644 --- a/cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 +++ b/cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_scal.F90 b/cuda/impl/psb_s_cuda_hybg_scal.F90 index b1e244261..9084af3eb 100644 --- a/cuda/impl/psb_s_cuda_hybg_scal.F90 +++ b/cuda/impl/psb_s_cuda_hybg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_scals.F90 b/cuda/impl/psb_s_cuda_hybg_scals.F90 index 93c747568..39eefed8b 100644 --- a/cuda/impl/psb_s_cuda_hybg_scals.F90 +++ b/cuda/impl/psb_s_cuda_hybg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_to_gpu.F90 b/cuda/impl/psb_s_cuda_hybg_to_gpu.F90 index 3f85a5c67..b34bd4ef5 100644 --- a/cuda/impl/psb_s_cuda_hybg_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_hybg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 index e786afe10..bbc6c5756 100644 --- a/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 index b61e94d68..a3837a91c 100644 --- a/cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 b/cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 index 52643a10c..f8f80e4b5 100644 --- a/cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 index 1b2fe8a1c..53cbbfb2c 100644 --- a/cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 index e8dbbabfc..dff1437d9 100644 --- a/cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 b/cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 index 21d9a339b..0be48fca2 100644 --- a/cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 index b0370ebb0..5c852d9c8 100644 --- a/cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 index 4c8aab71a..bf6021fc4 100644 --- a/cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 b/cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 index a162e2aaf..b21482cf8 100644 --- a/cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 index a22741fcd..7e78211b3 100644 --- a/cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 b/cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 index 53865e65b..567bc4ad5 100644 --- a/cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 index 90f3fb4f7..a96a7272b 100644 --- a/cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 b/cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 index e086c8a49..037573029 100644 --- a/cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 index 347065024..a13f40548 100644 --- a/cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 index e8553cbf0..15d32d5a8 100644 --- a/cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 b/cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 index 85066cef7..eaad3b87f 100644 --- a/cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 index 36013faa1..cac0954df 100644 --- a/cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 index f7be08358..121dea29b 100644 --- a/cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 b/cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 index 253a034f0..4054c90ad 100644 --- a/cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 index f49742cd2..33f900951 100644 --- a/cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 b/cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 index bc59cdba7..d062bca94 100644 --- a/cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 b/cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 index a7988dd37..ea7ee2a7f 100644 --- a/cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 +++ b/cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_csmm.F90 b/cuda/impl/psb_z_cuda_csrg_csmm.F90 index 731b7417e..4395f0dbc 100644 --- a/cuda/impl/psb_z_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_csrg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_csmv.F90 b/cuda/impl/psb_z_cuda_csrg_csmv.F90 index f6b01e7e4..b74d446b7 100644 --- a/cuda/impl/psb_z_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_csrg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_from_gpu.F90 b/cuda/impl/psb_z_cuda_csrg_from_gpu.F90 index 202f9f751..f40c25d30 100644 --- a/cuda/impl/psb_z_cuda_csrg_from_gpu.F90 +++ b/cuda/impl/psb_z_cuda_csrg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 b/cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 index 9a3f8281c..31600091b 100644 --- a/cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 +++ b/cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_mold.F90 b/cuda/impl/psb_z_cuda_csrg_mold.F90 index 23bb658ae..59079041d 100644 --- a/cuda/impl/psb_z_cuda_csrg_mold.F90 +++ b/cuda/impl/psb_z_cuda_csrg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 b/cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 index 964cd84e0..fbffb371c 100644 --- a/cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 +++ b/cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_scal.F90 b/cuda/impl/psb_z_cuda_csrg_scal.F90 index 9d97433e3..d9d5c172f 100644 --- a/cuda/impl/psb_z_cuda_csrg_scal.F90 +++ b/cuda/impl/psb_z_cuda_csrg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_scals.F90 b/cuda/impl/psb_z_cuda_csrg_scals.F90 index 1479ea3aa..712858290 100644 --- a/cuda/impl/psb_z_cuda_csrg_scals.F90 +++ b/cuda/impl/psb_z_cuda_csrg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_to_gpu.F90 b/cuda/impl/psb_z_cuda_csrg_to_gpu.F90 index 154c91f8e..781bb8d8e 100644 --- a/cuda/impl/psb_z_cuda_csrg_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_csrg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 index 977d7ff99..7f9d63013 100644 --- a/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_diag_csmv.F90 b/cuda/impl/psb_z_cuda_diag_csmv.F90 index fde7147e7..8a7943f38 100644 --- a/cuda/impl/psb_z_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_z_cuda_diag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_diag_mold.F90 b/cuda/impl/psb_z_cuda_diag_mold.F90 index 5b11b41c9..4ed593703 100644 --- a/cuda/impl/psb_z_cuda_diag_mold.F90 +++ b/cuda/impl/psb_z_cuda_diag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_diag_to_gpu.F90 b/cuda/impl/psb_z_cuda_diag_to_gpu.F90 index 672ce9385..4e8e866d8 100644 --- a/cuda/impl/psb_z_cuda_diag_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_diag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_diag_vect_mv.F90 b/cuda/impl/psb_z_cuda_diag_vect_mv.F90 index c6d11f045..fd55c4f1f 100644 --- a/cuda/impl/psb_z_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_diag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 b/cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 index 7f41b22d4..66dfa7595 100644 --- a/cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 +++ b/cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 b/cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 index 5c54d00bc..cf9e1533d 100644 --- a/cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 +++ b/cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_asb.f90 b/cuda/impl/psb_z_cuda_elg_asb.f90 index 65b584257..7f5a10ab3 100644 --- a/cuda/impl/psb_z_cuda_elg_asb.f90 +++ b/cuda/impl/psb_z_cuda_elg_asb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_csmm.F90 b/cuda/impl/psb_z_cuda_elg_csmm.F90 index 4414f0e60..78be93e3a 100644 --- a/cuda/impl/psb_z_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_elg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_csmv.F90 b/cuda/impl/psb_z_cuda_elg_csmv.F90 index 060147b91..2b875c838 100644 --- a/cuda/impl/psb_z_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_elg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_csput.F90 b/cuda/impl/psb_z_cuda_elg_csput.F90 index a9eb7c433..b55c5ba9b 100644 --- a/cuda/impl/psb_z_cuda_elg_csput.F90 +++ b/cuda/impl/psb_z_cuda_elg_csput.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_from_gpu.F90 b/cuda/impl/psb_z_cuda_elg_from_gpu.F90 index b1291ab2f..4aa5c0cff 100644 --- a/cuda/impl/psb_z_cuda_elg_from_gpu.F90 +++ b/cuda/impl/psb_z_cuda_elg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 b/cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 index 443e7cbb1..dbce28980 100644 --- a/cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 +++ b/cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_mold.F90 b/cuda/impl/psb_z_cuda_elg_mold.F90 index e9a3891da..86b0d56cc 100644 --- a/cuda/impl/psb_z_cuda_elg_mold.F90 +++ b/cuda/impl/psb_z_cuda_elg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 b/cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 index 3a8c2760f..233f44162 100644 --- a/cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 +++ b/cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_scal.F90 b/cuda/impl/psb_z_cuda_elg_scal.F90 index a98463625..9863c7264 100644 --- a/cuda/impl/psb_z_cuda_elg_scal.F90 +++ b/cuda/impl/psb_z_cuda_elg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_scals.F90 b/cuda/impl/psb_z_cuda_elg_scals.F90 index b44625890..02a505ab4 100644 --- a/cuda/impl/psb_z_cuda_elg_scals.F90 +++ b/cuda/impl/psb_z_cuda_elg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_to_gpu.F90 b/cuda/impl/psb_z_cuda_elg_to_gpu.F90 index 3a0ecd140..18d0e359c 100644 --- a/cuda/impl/psb_z_cuda_elg_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_elg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_trim.f90 b/cuda/impl/psb_z_cuda_elg_trim.f90 index 98f92efe5..9c51bdc1f 100644 --- a/cuda/impl/psb_z_cuda_elg_trim.f90 +++ b/cuda/impl/psb_z_cuda_elg_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_vect_mv.F90 b/cuda/impl/psb_z_cuda_elg_vect_mv.F90 index 1b1a0720b..7000de4b0 100644 --- a/cuda/impl/psb_z_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_elg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hdiag_csmv.F90 b/cuda/impl/psb_z_cuda_hdiag_csmv.F90 index 187655a8c..51a9cf8b1 100644 --- a/cuda/impl/psb_z_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hdiag_mold.F90 b/cuda/impl/psb_z_cuda_hdiag_mold.F90 index 7b86b3a37..4221211ea 100644 --- a/cuda/impl/psb_z_cuda_hdiag_mold.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 b/cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 index a11409612..9bde8c6c2 100644 --- a/cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 index aef5628c5..667ba8a9e 100644 --- a/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 b/cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 index f85666612..aebcca1d1 100644 --- a/cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 +++ b/cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_csmm.F90 b/cuda/impl/psb_z_cuda_hlg_csmm.F90 index 8eb30ef9f..3bf65cc15 100644 --- a/cuda/impl/psb_z_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_hlg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_csmv.F90 b/cuda/impl/psb_z_cuda_hlg_csmv.F90 index 1a8070169..81229f362 100644 --- a/cuda/impl/psb_z_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hlg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_from_gpu.F90 b/cuda/impl/psb_z_cuda_hlg_from_gpu.F90 index 8260ecd73..0cd72c4d2 100644 --- a/cuda/impl/psb_z_cuda_hlg_from_gpu.F90 +++ b/cuda/impl/psb_z_cuda_hlg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 b/cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 index 6a914fc0c..d776a0ca1 100644 --- a/cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 +++ b/cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_mold.F90 b/cuda/impl/psb_z_cuda_hlg_mold.F90 index bc631eced..964abb264 100644 --- a/cuda/impl/psb_z_cuda_hlg_mold.F90 +++ b/cuda/impl/psb_z_cuda_hlg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 b/cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 index ac3fbbd10..5862c55cf 100644 --- a/cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 +++ b/cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_scal.F90 b/cuda/impl/psb_z_cuda_hlg_scal.F90 index 7b9df998a..d96300539 100644 --- a/cuda/impl/psb_z_cuda_hlg_scal.F90 +++ b/cuda/impl/psb_z_cuda_hlg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_scals.F90 b/cuda/impl/psb_z_cuda_hlg_scals.F90 index b867e3b85..0284be5d9 100644 --- a/cuda/impl/psb_z_cuda_hlg_scals.F90 +++ b/cuda/impl/psb_z_cuda_hlg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_to_gpu.F90 b/cuda/impl/psb_z_cuda_hlg_to_gpu.F90 index 8f81842a7..22656cd92 100644 --- a/cuda/impl/psb_z_cuda_hlg_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_hlg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 index e2e93b851..2b0f123f2 100644 --- a/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 b/cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 index dbfbfb916..69a89007a 100644 --- a/cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 +++ b/cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_csmm.F90 b/cuda/impl/psb_z_cuda_hybg_csmm.F90 index 3c53acbd2..0da8702b3 100644 --- a/cuda/impl/psb_z_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_hybg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_csmv.F90 b/cuda/impl/psb_z_cuda_hybg_csmv.F90 index 17b35b405..9f0c2606d 100644 --- a/cuda/impl/psb_z_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hybg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 b/cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 index 9b06d4993..b6bf86ff4 100644 --- a/cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 +++ b/cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_mold.F90 b/cuda/impl/psb_z_cuda_hybg_mold.F90 index 236c83599..27517ea34 100644 --- a/cuda/impl/psb_z_cuda_hybg_mold.F90 +++ b/cuda/impl/psb_z_cuda_hybg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 b/cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 index 2479226c7..a6631661d 100644 --- a/cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 +++ b/cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_scal.F90 b/cuda/impl/psb_z_cuda_hybg_scal.F90 index c365499f2..58fe7c289 100644 --- a/cuda/impl/psb_z_cuda_hybg_scal.F90 +++ b/cuda/impl/psb_z_cuda_hybg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_scals.F90 b/cuda/impl/psb_z_cuda_hybg_scals.F90 index 95bb12733..1bc9e81d2 100644 --- a/cuda/impl/psb_z_cuda_hybg_scals.F90 +++ b/cuda/impl/psb_z_cuda_hybg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_to_gpu.F90 b/cuda/impl/psb_z_cuda_hybg_to_gpu.F90 index b75f9df7e..6295c929f 100644 --- a/cuda/impl/psb_z_cuda_hybg_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_hybg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 index a5c082de7..0432f2bde 100644 --- a/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 index 7cfd4f191..0691bcf8a 100644 --- a/cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 b/cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 index f03294c8d..4ad93f174 100644 --- a/cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 index 8e702e7ea..3d8678d2f 100644 --- a/cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 index f0cb23f39..c161b7d44 100644 --- a/cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 b/cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 index 29f634233..e247442d7 100644 --- a/cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 index dd6dae1e5..f3d05ace7 100644 --- a/cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 index 609680b92..3c3e3278a 100644 --- a/cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 b/cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 index e67c8d83c..66eed8793 100644 --- a/cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 index dbf0e5122..dc694ae2e 100644 --- a/cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 b/cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 index d39da2913..a820ac42e 100644 --- a/cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/ivectordev.c b/cuda/ivectordev.c index db466a6b6..1e139d578 100644 --- a/cuda/ivectordev.c +++ b/cuda/ivectordev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/ivectordev.h b/cuda/ivectordev.h index 307235433..54811a5a5 100644 --- a/cuda/ivectordev.h +++ b/cuda/ivectordev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/psb_base_vectordev_mod.F90 b/cuda/psb_base_vectordev_mod.F90 index da02b2f33..955e268fd 100644 --- a/cuda/psb_base_vectordev_mod.F90 +++ b/cuda/psb_base_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_csrg_mat_mod.F90 b/cuda/psb_c_cuda_csrg_mat_mod.F90 index 1fdeec4a7..e86106603 100644 --- a/cuda/psb_c_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_c_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_diag_mat_mod.F90 b/cuda/psb_c_cuda_diag_mat_mod.F90 index d3232965f..20bff37fc 100644 --- a/cuda/psb_c_cuda_diag_mat_mod.F90 +++ b/cuda/psb_c_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_dnsg_mat_mod.F90 b/cuda/psb_c_cuda_dnsg_mat_mod.F90 index 97bacb7df..736fc505f 100644 --- a/cuda/psb_c_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_c_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_elg_mat_mod.F90 b/cuda/psb_c_cuda_elg_mat_mod.F90 index c507a6c71..a152f413a 100644 --- a/cuda/psb_c_cuda_elg_mat_mod.F90 +++ b/cuda/psb_c_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_hdiag_mat_mod.F90 b/cuda/psb_c_cuda_hdiag_mat_mod.F90 index f06e501ea..070dc0d53 100644 --- a/cuda/psb_c_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_c_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_hlg_mat_mod.F90 b/cuda/psb_c_cuda_hlg_mat_mod.F90 index 5b80d3f6f..07fb159bf 100644 --- a/cuda/psb_c_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_c_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_hybg_mat_mod.F90 b/cuda/psb_c_cuda_hybg_mat_mod.F90 index 89ec14a53..5ebff1e96 100644 --- a/cuda/psb_c_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_c_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_vect_mod.F90 b/cuda/psb_c_cuda_vect_mod.F90 index 4513b2f5f..8d49f7a4b 100644 --- a/cuda/psb_c_cuda_vect_mod.F90 +++ b/cuda/psb_c_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_vectordev_mod.F90 b/cuda/psb_c_vectordev_mod.F90 index ea94f435e..9a38d3d32 100644 --- a/cuda/psb_c_vectordev_mod.F90 +++ b/cuda/psb_c_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_cuda_env_mod.F90 b/cuda/psb_cuda_env_mod.F90 index b397cbd08..2a7a8e46e 100644 --- a/cuda/psb_cuda_env_mod.F90 +++ b/cuda/psb_cuda_env_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_cuda_mod.F90 b/cuda/psb_cuda_mod.F90 index 12b91b90e..b9f1b8c78 100644 --- a/cuda/psb_cuda_mod.F90 +++ b/cuda/psb_cuda_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_csrg_mat_mod.F90 b/cuda/psb_d_cuda_csrg_mat_mod.F90 index 101959bde..276637283 100644 --- a/cuda/psb_d_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_d_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_diag_mat_mod.F90 b/cuda/psb_d_cuda_diag_mat_mod.F90 index 3f570799c..5d72ae501 100644 --- a/cuda/psb_d_cuda_diag_mat_mod.F90 +++ b/cuda/psb_d_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_dnsg_mat_mod.F90 b/cuda/psb_d_cuda_dnsg_mat_mod.F90 index ffa17eeb4..1fdaba933 100644 --- a/cuda/psb_d_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_d_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_elg_mat_mod.F90 b/cuda/psb_d_cuda_elg_mat_mod.F90 index 3fde2075f..74313ce99 100644 --- a/cuda/psb_d_cuda_elg_mat_mod.F90 +++ b/cuda/psb_d_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_hdiag_mat_mod.F90 b/cuda/psb_d_cuda_hdiag_mat_mod.F90 index 46b63b43d..25a7f9249 100644 --- a/cuda/psb_d_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_d_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_hlg_mat_mod.F90 b/cuda/psb_d_cuda_hlg_mat_mod.F90 index a1a2539d4..2f474ce41 100644 --- a/cuda/psb_d_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_d_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_hybg_mat_mod.F90 b/cuda/psb_d_cuda_hybg_mat_mod.F90 index 4ff72f51f..220e8b680 100644 --- a/cuda/psb_d_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_d_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_vect_mod.F90 b/cuda/psb_d_cuda_vect_mod.F90 index b6e38ed6d..0dacc511a 100644 --- a/cuda/psb_d_cuda_vect_mod.F90 +++ b/cuda/psb_d_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_vectordev_mod.F90 b/cuda/psb_d_vectordev_mod.F90 index 368eda346..749c11157 100644 --- a/cuda/psb_d_vectordev_mod.F90 +++ b/cuda/psb_d_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_csrg_mat_mod.F90 b/cuda/psb_i_cuda_csrg_mat_mod.F90 index 0867a8a5b..f358ce304 100644 --- a/cuda/psb_i_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_i_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_diag_mat_mod.F90 b/cuda/psb_i_cuda_diag_mat_mod.F90 index 2862d2eb3..814cfd906 100644 --- a/cuda/psb_i_cuda_diag_mat_mod.F90 +++ b/cuda/psb_i_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_dnsg_mat_mod.F90 b/cuda/psb_i_cuda_dnsg_mat_mod.F90 index f3079d9ef..195cf4806 100644 --- a/cuda/psb_i_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_i_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_elg_mat_mod.F90 b/cuda/psb_i_cuda_elg_mat_mod.F90 index bd975d513..086071885 100644 --- a/cuda/psb_i_cuda_elg_mat_mod.F90 +++ b/cuda/psb_i_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_hdiag_mat_mod.F90 b/cuda/psb_i_cuda_hdiag_mat_mod.F90 index 22277f3a9..347ce3b16 100644 --- a/cuda/psb_i_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_i_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_hlg_mat_mod.F90 b/cuda/psb_i_cuda_hlg_mat_mod.F90 index 8b9dc654d..888e18459 100644 --- a/cuda/psb_i_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_i_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_hybg_mat_mod.F90 b/cuda/psb_i_cuda_hybg_mat_mod.F90 index eb38e498b..d96ddd1f0 100644 --- a/cuda/psb_i_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_i_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_vect_mod.F90 b/cuda/psb_i_cuda_vect_mod.F90 index 3274a85ef..f8bcf5e83 100644 --- a/cuda/psb_i_cuda_vect_mod.F90 +++ b/cuda/psb_i_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_vectordev_mod.F90 b/cuda/psb_i_vectordev_mod.F90 index ad9d6cefd..8fa762bbc 100644 --- a/cuda/psb_i_vectordev_mod.F90 +++ b/cuda/psb_i_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_csrg_mat_mod.F90 b/cuda/psb_s_cuda_csrg_mat_mod.F90 index bd654dbb8..4cb9d28c5 100644 --- a/cuda/psb_s_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_s_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_diag_mat_mod.F90 b/cuda/psb_s_cuda_diag_mat_mod.F90 index 30386618f..b4406d8f5 100644 --- a/cuda/psb_s_cuda_diag_mat_mod.F90 +++ b/cuda/psb_s_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_dnsg_mat_mod.F90 b/cuda/psb_s_cuda_dnsg_mat_mod.F90 index 07b49f034..ebbc51aac 100644 --- a/cuda/psb_s_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_s_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_elg_mat_mod.F90 b/cuda/psb_s_cuda_elg_mat_mod.F90 index 0626fd24e..eb7c2069f 100644 --- a/cuda/psb_s_cuda_elg_mat_mod.F90 +++ b/cuda/psb_s_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_hdiag_mat_mod.F90 b/cuda/psb_s_cuda_hdiag_mat_mod.F90 index cac72c86b..0e7d73934 100644 --- a/cuda/psb_s_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_s_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_hlg_mat_mod.F90 b/cuda/psb_s_cuda_hlg_mat_mod.F90 index 7b8c49b56..de49bbbc3 100644 --- a/cuda/psb_s_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_s_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_hybg_mat_mod.F90 b/cuda/psb_s_cuda_hybg_mat_mod.F90 index b4a7cd75b..0fb3785e8 100644 --- a/cuda/psb_s_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_s_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_vect_mod.F90 b/cuda/psb_s_cuda_vect_mod.F90 index 87fd12542..6127ea4ee 100644 --- a/cuda/psb_s_cuda_vect_mod.F90 +++ b/cuda/psb_s_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_vectordev_mod.F90 b/cuda/psb_s_vectordev_mod.F90 index 28dd14606..e95dde5ed 100644 --- a/cuda/psb_s_vectordev_mod.F90 +++ b/cuda/psb_s_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_csrg_mat_mod.F90 b/cuda/psb_z_cuda_csrg_mat_mod.F90 index 389149aa4..bc91f0e88 100644 --- a/cuda/psb_z_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_z_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_diag_mat_mod.F90 b/cuda/psb_z_cuda_diag_mat_mod.F90 index 8b0d2168a..5b9bc8ba4 100644 --- a/cuda/psb_z_cuda_diag_mat_mod.F90 +++ b/cuda/psb_z_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_dnsg_mat_mod.F90 b/cuda/psb_z_cuda_dnsg_mat_mod.F90 index 6f687a759..5b881bff3 100644 --- a/cuda/psb_z_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_z_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_elg_mat_mod.F90 b/cuda/psb_z_cuda_elg_mat_mod.F90 index 1348a7cb2..3d32ad48f 100644 --- a/cuda/psb_z_cuda_elg_mat_mod.F90 +++ b/cuda/psb_z_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_hdiag_mat_mod.F90 b/cuda/psb_z_cuda_hdiag_mat_mod.F90 index 708976649..ee16a37ef 100644 --- a/cuda/psb_z_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_z_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_hlg_mat_mod.F90 b/cuda/psb_z_cuda_hlg_mat_mod.F90 index f7150250a..3cdfce58f 100644 --- a/cuda/psb_z_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_z_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_hybg_mat_mod.F90 b/cuda/psb_z_cuda_hybg_mat_mod.F90 index efcd73f7a..1d88380f1 100644 --- a/cuda/psb_z_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_z_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_vect_mod.F90 b/cuda/psb_z_cuda_vect_mod.F90 index b30488e6f..c6014d535 100644 --- a/cuda/psb_z_cuda_vect_mod.F90 +++ b/cuda/psb_z_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_vectordev_mod.F90 b/cuda/psb_z_vectordev_mod.F90 index 90f30ce68..0d4382f3b 100644 --- a/cuda/psb_z_vectordev_mod.F90 +++ b/cuda/psb_z_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/s_cusparse_mod.F90 b/cuda/s_cusparse_mod.F90 index 24adfdba4..74ca282b8 100644 --- a/cuda/s_cusparse_mod.F90 +++ b/cuda/s_cusparse_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/scusparse.c b/cuda/scusparse.c index b02299075..78f7c795f 100644 --- a/cuda/scusparse.c +++ b/cuda/scusparse.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/scusparse.h b/cuda/scusparse.h index a5e534467..25945f809 100644 --- a/cuda/scusparse.h +++ b/cuda/scusparse.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/spgpu/coo_conv.h b/cuda/spgpu/coo_conv.h index feccb63a6..adf03efde 100644 --- a/cuda/spgpu/coo_conv.h +++ b/cuda/spgpu/coo_conv.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include diff --git a/cuda/spgpu/core.c b/cuda/spgpu/core.c index e89aa2cfd..154ad244d 100644 --- a/cuda/spgpu/core.c +++ b/cuda/spgpu/core.c @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "core.h" diff --git a/cuda/spgpu/core.h b/cuda/spgpu/core.h index 35d5849d5..9a35deab3 100644 --- a/cuda/spgpu/core.h +++ b/cuda/spgpu/core.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ @@ -36,14 +28,6 @@ * Valeria Cardellini - University of Rome Tor Vergata\n * Salvatore Filippone - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or\n - * modify it under the terms of the GNU General Public License\n - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful,\n - * but WITHOUT ANY WARRANTY; without even the implied warranty of\n - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - * GNU General Public License for more details. */ #include "psb_config.h" diff --git a/cuda/spgpu/debug.h b/cuda/spgpu/debug.h index d5bc6de2e..433f1a2ca 100644 --- a/cuda/spgpu/debug.h +++ b/cuda/spgpu/debug.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/dia.h b/cuda/spgpu/dia.h index a0b5e2074..e3d342e03 100644 --- a/cuda/spgpu/dia.h +++ b/cuda/spgpu/dia.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2013 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "core.h" diff --git a/cuda/spgpu/dia_conv.h b/cuda/spgpu/dia_conv.h index 3a4de93a4..e0fce4c37 100644 --- a/cuda/spgpu/dia_conv.h +++ b/cuda/spgpu/dia_conv.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2013 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "dia.h" diff --git a/cuda/spgpu/ell.h b/cuda/spgpu/ell.h index 1aa787482..5dae6f040 100644 --- a/cuda/spgpu/ell.h +++ b/cuda/spgpu/ell.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "core.h" diff --git a/cuda/spgpu/ell_conv.h b/cuda/spgpu/ell_conv.h index d6ec37a9c..5ac010de6 100644 --- a/cuda/spgpu/ell_conv.h +++ b/cuda/spgpu/ell_conv.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "ell.h" diff --git a/cuda/spgpu/hdia.h b/cuda/spgpu/hdia.h index e8808fb7c..8cb2f3538 100644 --- a/cuda/spgpu/hdia.h +++ b/cuda/spgpu/hdia.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2013 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "core.h" diff --git a/cuda/spgpu/hdia_conv.h b/cuda/spgpu/hdia_conv.h index c22bf9903..3ddda224d 100644 --- a/cuda/spgpu/hdia_conv.h +++ b/cuda/spgpu/hdia_conv.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2013 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "core.h" diff --git a/cuda/spgpu/hell.h b/cuda/spgpu/hell.h index d177686cd..64af409de 100644 --- a/cuda/spgpu/hell.h +++ b/cuda/spgpu/hell.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "core.h" diff --git a/cuda/spgpu/hell_conv.h b/cuda/spgpu/hell_conv.h index 301fd3032..b7de21da5 100644 --- a/cuda/spgpu/hell_conv.h +++ b/cuda/spgpu/hell_conv.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "hell.h" diff --git a/cuda/spgpu/kernels/abs_base.cuh b/cuda/spgpu/kernels/abs_base.cuh index d48f815d0..6b3cc8d78 100644 --- a/cuda/spgpu/kernels/abs_base.cuh +++ b/cuda/spgpu/kernels/abs_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/amax_base.cuh b/cuda/spgpu/kernels/amax_base.cuh index 4d7e7d4a8..8136b8e45 100644 --- a/cuda/spgpu/kernels/amax_base.cuh +++ b/cuda/spgpu/kernels/amax_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/asum_base.cuh b/cuda/spgpu/kernels/asum_base.cuh index 33f1695c5..8bd609730 100644 --- a/cuda/spgpu/kernels/asum_base.cuh +++ b/cuda/spgpu/kernels/asum_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/axy_base.cuh b/cuda/spgpu/kernels/axy_base.cuh index e1a776fe4..d0752f02e 100644 --- a/cuda/spgpu/kernels/axy_base.cuh +++ b/cuda/spgpu/kernels/axy_base.cuh @@ -5,14 +5,6 @@ * Salvatore Filippone - University of Rome Tor Vergata * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/cabs.cu b/cuda/spgpu/kernels/cabs.cu index 4c6df219d..ac619cd56 100644 --- a/cuda/spgpu/kernels/cabs.cu +++ b/cuda/spgpu/kernels/cabs.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/camax.cu b/cuda/spgpu/kernels/camax.cu index 05d701e4f..db8653416 100644 --- a/cuda/spgpu/kernels/camax.cu +++ b/cuda/spgpu/kernels/camax.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/casum.cu b/cuda/spgpu/kernels/casum.cu index 7362cff87..ca522d53c 100644 --- a/cuda/spgpu/kernels/casum.cu +++ b/cuda/spgpu/kernels/casum.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/caxpby.cu b/cuda/spgpu/kernels/caxpby.cu index a89f2b9ce..a892dfa2e 100644 --- a/cuda/spgpu/kernels/caxpby.cu +++ b/cuda/spgpu/kernels/caxpby.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" #include "cudalang.h" diff --git a/cuda/spgpu/kernels/caxy.cu b/cuda/spgpu/kernels/caxy.cu index 7b2a06cca..93522407a 100644 --- a/cuda/spgpu/kernels/caxy.cu +++ b/cuda/spgpu/kernels/caxy.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/cdot.cu b/cuda/spgpu/kernels/cdot.cu index 6ad40bae4..ab1a159cc 100644 --- a/cuda/spgpu/kernels/cdot.cu +++ b/cuda/spgpu/kernels/cdot.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/cgath.cu b/cuda/spgpu/kernels/cgath.cu index 256254c3b..5d0fb3a50 100644 --- a/cuda/spgpu/kernels/cgath.cu +++ b/cuda/spgpu/kernels/cgath.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/cnrm2.cu b/cuda/spgpu/kernels/cnrm2.cu index 23e133e88..318c0e693 100644 --- a/cuda/spgpu/kernels/cnrm2.cu +++ b/cuda/spgpu/kernels/cnrm2.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/cscal.cu b/cuda/spgpu/kernels/cscal.cu index 26ffaf3d8..a3ad2c2ca 100644 --- a/cuda/spgpu/kernels/cscal.cu +++ b/cuda/spgpu/kernels/cscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/cscat.cu b/cuda/spgpu/kernels/cscat.cu index 683f0ddd8..af3b7d716 100644 --- a/cuda/spgpu/kernels/cscat.cu +++ b/cuda/spgpu/kernels/cscat.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/csetscal.cu b/cuda/spgpu/kernels/csetscal.cu index f87742614..e49a9fffc 100644 --- a/cuda/spgpu/kernels/csetscal.cu +++ b/cuda/spgpu/kernels/csetscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/cudadebug.h b/cuda/spgpu/kernels/cudadebug.h index 5367ab3ba..f196c6f94 100644 --- a/cuda/spgpu/kernels/cudadebug.h +++ b/cuda/spgpu/kernels/cudadebug.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cuda_runtime.h" diff --git a/cuda/spgpu/kernels/cudalang.h b/cuda/spgpu/kernels/cudalang.h index ede4f2918..f63124d63 100644 --- a/cuda/spgpu/kernels/cudalang.h +++ b/cuda/spgpu/kernels/cudalang.h @@ -6,14 +6,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ // Used to avoid mad.f32 instructions on c.c. 1.* diff --git a/cuda/spgpu/kernels/cupd_xyz.cu b/cuda/spgpu/kernels/cupd_xyz.cu index e8dc93007..e8cc0eab5 100644 --- a/cuda/spgpu/kernels/cupd_xyz.cu +++ b/cuda/spgpu/kernels/cupd_xyz.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/cxyzw.cu b/cuda/spgpu/kernels/cxyzw.cu index 783c77147..65b9935df 100644 --- a/cuda/spgpu/kernels/cxyzw.cu +++ b/cuda/spgpu/kernels/cxyzw.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/dabs.cu b/cuda/spgpu/kernels/dabs.cu index a27f21e4a..ce19d6d17 100644 --- a/cuda/spgpu/kernels/dabs.cu +++ b/cuda/spgpu/kernels/dabs.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/damax.cu b/cuda/spgpu/kernels/damax.cu index eee0b0650..26b5a8757 100644 --- a/cuda/spgpu/kernels/damax.cu +++ b/cuda/spgpu/kernels/damax.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/dasum.cu b/cuda/spgpu/kernels/dasum.cu index 5d7d7f9b4..7c63c85e2 100644 --- a/cuda/spgpu/kernels/dasum.cu +++ b/cuda/spgpu/kernels/dasum.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/daxpby.cu b/cuda/spgpu/kernels/daxpby.cu index 41e493b1b..110ed46e2 100644 --- a/cuda/spgpu/kernels/daxpby.cu +++ b/cuda/spgpu/kernels/daxpby.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/daxy.cu b/cuda/spgpu/kernels/daxy.cu index 3131a7af0..3a4d132ac 100644 --- a/cuda/spgpu/kernels/daxy.cu +++ b/cuda/spgpu/kernels/daxy.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/ddot.cu b/cuda/spgpu/kernels/ddot.cu index 49f189430..1ac54689b 100644 --- a/cuda/spgpu/kernels/ddot.cu +++ b/cuda/spgpu/kernels/ddot.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/dgath.cu b/cuda/spgpu/kernels/dgath.cu index 26f12647e..eeec50657 100644 --- a/cuda/spgpu/kernels/dgath.cu +++ b/cuda/spgpu/kernels/dgath.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/dia_cspmv.cu b/cuda/spgpu/kernels/dia_cspmv.cu index d4d56dc91..455fe27e8 100644 --- a/cuda/spgpu/kernels/dia_cspmv.cu +++ b/cuda/spgpu/kernels/dia_cspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/dia_dspmv.cu b/cuda/spgpu/kernels/dia_dspmv.cu index 21d16570f..1294088fa 100644 --- a/cuda/spgpu/kernels/dia_dspmv.cu +++ b/cuda/spgpu/kernels/dia_dspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/dia_spmv_base.cuh b/cuda/spgpu/kernels/dia_spmv_base.cuh index afcb38679..a77b4695c 100644 --- a/cuda/spgpu/kernels/dia_spmv_base.cuh +++ b/cuda/spgpu/kernels/dia_spmv_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/dia_spmv_base_template.cuh b/cuda/spgpu/kernels/dia_spmv_base_template.cuh index 792fa7ede..38b90f46c 100644 --- a/cuda/spgpu/kernels/dia_spmv_base_template.cuh +++ b/cuda/spgpu/kernels/dia_spmv_base_template.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/dia_sspmv.cu b/cuda/spgpu/kernels/dia_sspmv.cu index 17464b432..bc2746c48 100644 --- a/cuda/spgpu/kernels/dia_sspmv.cu +++ b/cuda/spgpu/kernels/dia_sspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/dia_zspmv.cu b/cuda/spgpu/kernels/dia_zspmv.cu index 4f53bf5e8..af9ee56a9 100644 --- a/cuda/spgpu/kernels/dia_zspmv.cu +++ b/cuda/spgpu/kernels/dia_zspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/dnrm2.cu b/cuda/spgpu/kernels/dnrm2.cu index aae3edfce..a4f546c5f 100644 --- a/cuda/spgpu/kernels/dnrm2.cu +++ b/cuda/spgpu/kernels/dnrm2.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/dscal.cu b/cuda/spgpu/kernels/dscal.cu index 9e3b240cb..56c2e4ff9 100644 --- a/cuda/spgpu/kernels/dscal.cu +++ b/cuda/spgpu/kernels/dscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/dscat.cu b/cuda/spgpu/kernels/dscat.cu index c6bcf9076..e097a13bb 100644 --- a/cuda/spgpu/kernels/dscat.cu +++ b/cuda/spgpu/kernels/dscat.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/dsetscal.cu b/cuda/spgpu/kernels/dsetscal.cu index 46af07b3b..a45476f75 100644 --- a/cuda/spgpu/kernels/dsetscal.cu +++ b/cuda/spgpu/kernels/dsetscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/dupd_xyz.cu b/cuda/spgpu/kernels/dupd_xyz.cu index 11fc6c9af..d37be35dc 100644 --- a/cuda/spgpu/kernels/dupd_xyz.cu +++ b/cuda/spgpu/kernels/dupd_xyz.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/dxyzw.cu b/cuda/spgpu/kernels/dxyzw.cu index f9964cc7d..d78d29786 100644 --- a/cuda/spgpu/kernels/dxyzw.cu +++ b/cuda/spgpu/kernels/dxyzw.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/ell_ccsput.cu b/cuda/spgpu/kernels/ell_ccsput.cu index 66126bd09..f7b28c699 100644 --- a/cuda/spgpu/kernels/ell_ccsput.cu +++ b/cuda/spgpu/kernels/ell_ccsput.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/ell_cspmv.cu b/cuda/spgpu/kernels/ell_cspmv.cu index b2a5ca3a5..9ec798c52 100644 --- a/cuda/spgpu/kernels/ell_cspmv.cu +++ b/cuda/spgpu/kernels/ell_cspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/ell_csput_base.cuh b/cuda/spgpu/kernels/ell_csput_base.cuh index 95e0e33d7..32f6621e9 100644 --- a/cuda/spgpu/kernels/ell_csput_base.cuh +++ b/cuda/spgpu/kernels/ell_csput_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/ell_dcsput.cu b/cuda/spgpu/kernels/ell_dcsput.cu index b1a25d52c..f9f2c904b 100644 --- a/cuda/spgpu/kernels/ell_dcsput.cu +++ b/cuda/spgpu/kernels/ell_dcsput.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/ell_dspmv.cu b/cuda/spgpu/kernels/ell_dspmv.cu index e4e2e8159..1a265878f 100644 --- a/cuda/spgpu/kernels/ell_dspmv.cu +++ b/cuda/spgpu/kernels/ell_dspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/ell_scsput.cu b/cuda/spgpu/kernels/ell_scsput.cu index 0e3ed7b38..383ad1e90 100644 --- a/cuda/spgpu/kernels/ell_scsput.cu +++ b/cuda/spgpu/kernels/ell_scsput.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/ell_spmv_base.cuh b/cuda/spgpu/kernels/ell_spmv_base.cuh index e2af5896f..366f46bb1 100644 --- a/cuda/spgpu/kernels/ell_spmv_base.cuh +++ b/cuda/spgpu/kernels/ell_spmv_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/ell_spmv_base_nors.cuh b/cuda/spgpu/kernels/ell_spmv_base_nors.cuh index 8cd897049..0c70f81cc 100644 --- a/cuda/spgpu/kernels/ell_spmv_base_nors.cuh +++ b/cuda/spgpu/kernels/ell_spmv_base_nors.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ __device__ void diff --git a/cuda/spgpu/kernels/ell_spmv_base_template.cuh b/cuda/spgpu/kernels/ell_spmv_base_template.cuh index fa39d8a6f..2b423c064 100644 --- a/cuda/spgpu/kernels/ell_spmv_base_template.cuh +++ b/cuda/spgpu/kernels/ell_spmv_base_template.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #define THREAD_BLOCK 128 diff --git a/cuda/spgpu/kernels/ell_sspmv.cu b/cuda/spgpu/kernels/ell_sspmv.cu index 298ff1cb7..60175e9b1 100644 --- a/cuda/spgpu/kernels/ell_sspmv.cu +++ b/cuda/spgpu/kernels/ell_sspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/ell_zcsput.cu b/cuda/spgpu/kernels/ell_zcsput.cu index 9fbd43116..fda901b47 100644 --- a/cuda/spgpu/kernels/ell_zcsput.cu +++ b/cuda/spgpu/kernels/ell_zcsput.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/ell_zspmv.cu b/cuda/spgpu/kernels/ell_zspmv.cu index dd1bc72d4..f7f7edf7a 100644 --- a/cuda/spgpu/kernels/ell_zspmv.cu +++ b/cuda/spgpu/kernels/ell_zspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/gath_base.cuh b/cuda/spgpu/kernels/gath_base.cuh index a0e77b44f..4ca94f2ea 100644 --- a/cuda/spgpu/kernels/gath_base.cuh +++ b/cuda/spgpu/kernels/gath_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/hdia_cspmv.cu b/cuda/spgpu/kernels/hdia_cspmv.cu index 27bb30e14..f8853932d 100644 --- a/cuda/spgpu/kernels/hdia_cspmv.cu +++ b/cuda/spgpu/kernels/hdia_cspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/hdia_dspmv.cu b/cuda/spgpu/kernels/hdia_dspmv.cu index c1ac9af1d..940ba79e6 100644 --- a/cuda/spgpu/kernels/hdia_dspmv.cu +++ b/cuda/spgpu/kernels/hdia_dspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/hdia_spmv_base.cuh b/cuda/spgpu/kernels/hdia_spmv_base.cuh index 2c8cfbaff..0391d6c2d 100644 --- a/cuda/spgpu/kernels/hdia_spmv_base.cuh +++ b/cuda/spgpu/kernels/hdia_spmv_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/hdia_spmv_base_template.cuh b/cuda/spgpu/kernels/hdia_spmv_base_template.cuh index 155179fd6..32a575859 100644 --- a/cuda/spgpu/kernels/hdia_spmv_base_template.cuh +++ b/cuda/spgpu/kernels/hdia_spmv_base_template.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #define THREAD_BLOCK 128 diff --git a/cuda/spgpu/kernels/hdia_sspmv.cu b/cuda/spgpu/kernels/hdia_sspmv.cu index ad1d77e7d..a4b8b7ddd 100644 --- a/cuda/spgpu/kernels/hdia_sspmv.cu +++ b/cuda/spgpu/kernels/hdia_sspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/hdia_zspmv.cu b/cuda/spgpu/kernels/hdia_zspmv.cu index f0b592f6e..ffff9fef2 100644 --- a/cuda/spgpu/kernels/hdia_zspmv.cu +++ b/cuda/spgpu/kernels/hdia_zspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/hell_cspmv.cu b/cuda/spgpu/kernels/hell_cspmv.cu index c2b174199..e5800cc36 100644 --- a/cuda/spgpu/kernels/hell_cspmv.cu +++ b/cuda/spgpu/kernels/hell_cspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/hell_dspmv.cu b/cuda/spgpu/kernels/hell_dspmv.cu index fe379841b..e6b14b42b 100644 --- a/cuda/spgpu/kernels/hell_dspmv.cu +++ b/cuda/spgpu/kernels/hell_dspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/hell_spmv_base.cuh b/cuda/spgpu/kernels/hell_spmv_base.cuh index ca074d338..cdd4b367e 100644 --- a/cuda/spgpu/kernels/hell_spmv_base.cuh +++ b/cuda/spgpu/kernels/hell_spmv_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/hell_spmv_base_template.cuh b/cuda/spgpu/kernels/hell_spmv_base_template.cuh index 9ecd8f745..b732f22e7 100644 --- a/cuda/spgpu/kernels/hell_spmv_base_template.cuh +++ b/cuda/spgpu/kernels/hell_spmv_base_template.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #define IDX2 #define THREAD_BLOCK 128 diff --git a/cuda/spgpu/kernels/hell_sspmv.cu b/cuda/spgpu/kernels/hell_sspmv.cu index 86b4c7b3f..f33619386 100644 --- a/cuda/spgpu/kernels/hell_sspmv.cu +++ b/cuda/spgpu/kernels/hell_sspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/hell_zspmv.cu b/cuda/spgpu/kernels/hell_zspmv.cu index aa8f6418d..8d079fa72 100644 --- a/cuda/spgpu/kernels/hell_zspmv.cu +++ b/cuda/spgpu/kernels/hell_zspmv.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/igath.cu b/cuda/spgpu/kernels/igath.cu index a97a1c98d..0494c4f36 100644 --- a/cuda/spgpu/kernels/igath.cu +++ b/cuda/spgpu/kernels/igath.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/iscat.cu b/cuda/spgpu/kernels/iscat.cu index dfb7e3ca2..ad4f33d9c 100644 --- a/cuda/spgpu/kernels/iscat.cu +++ b/cuda/spgpu/kernels/iscat.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/isetscal.cu b/cuda/spgpu/kernels/isetscal.cu index fe028b0ed..1ecc5604a 100644 --- a/cuda/spgpu/kernels/isetscal.cu +++ b/cuda/spgpu/kernels/isetscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/sabs.cu b/cuda/spgpu/kernels/sabs.cu index ee0efd8ba..9a82d5099 100644 --- a/cuda/spgpu/kernels/sabs.cu +++ b/cuda/spgpu/kernels/sabs.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/samax.cu b/cuda/spgpu/kernels/samax.cu index 8366e3e1a..51d564077 100644 --- a/cuda/spgpu/kernels/samax.cu +++ b/cuda/spgpu/kernels/samax.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/sasum.cu b/cuda/spgpu/kernels/sasum.cu index 3620775b4..dd02d07c0 100644 --- a/cuda/spgpu/kernels/sasum.cu +++ b/cuda/spgpu/kernels/sasum.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/saxpby.cu b/cuda/spgpu/kernels/saxpby.cu index ab103bbb2..aee2c5504 100644 --- a/cuda/spgpu/kernels/saxpby.cu +++ b/cuda/spgpu/kernels/saxpby.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" #include "cudalang.h" diff --git a/cuda/spgpu/kernels/saxy.cu b/cuda/spgpu/kernels/saxy.cu index 9277a2c8b..a1a641cb6 100644 --- a/cuda/spgpu/kernels/saxy.cu +++ b/cuda/spgpu/kernels/saxy.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/scal_base.cuh b/cuda/spgpu/kernels/scal_base.cuh index c82f97387..2d28327f3 100644 --- a/cuda/spgpu/kernels/scal_base.cuh +++ b/cuda/spgpu/kernels/scal_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/scat_base.cuh b/cuda/spgpu/kernels/scat_base.cuh index f6f619b17..d03146bc1 100644 --- a/cuda/spgpu/kernels/scat_base.cuh +++ b/cuda/spgpu/kernels/scat_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/sdot.cu b/cuda/spgpu/kernels/sdot.cu index 5952c34e1..ef2bf295e 100644 --- a/cuda/spgpu/kernels/sdot.cu +++ b/cuda/spgpu/kernels/sdot.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/setscal_base.cuh b/cuda/spgpu/kernels/setscal_base.cuh index afe821cf1..ba1dc34fc 100644 --- a/cuda/spgpu/kernels/setscal_base.cuh +++ b/cuda/spgpu/kernels/setscal_base.cuh @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ diff --git a/cuda/spgpu/kernels/sgath.cu b/cuda/spgpu/kernels/sgath.cu index 6ccfa7966..8e9cb1b0d 100644 --- a/cuda/spgpu/kernels/sgath.cu +++ b/cuda/spgpu/kernels/sgath.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/snrm2.cu b/cuda/spgpu/kernels/snrm2.cu index 1186cbe92..888e3c841 100644 --- a/cuda/spgpu/kernels/snrm2.cu +++ b/cuda/spgpu/kernels/snrm2.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/sscal.cu b/cuda/spgpu/kernels/sscal.cu index 496d37a0c..4a5e80e52 100644 --- a/cuda/spgpu/kernels/sscal.cu +++ b/cuda/spgpu/kernels/sscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/sscat.cu b/cuda/spgpu/kernels/sscat.cu index 44e5dad98..06361b8b7 100644 --- a/cuda/spgpu/kernels/sscat.cu +++ b/cuda/spgpu/kernels/sscat.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/ssetscal.cu b/cuda/spgpu/kernels/ssetscal.cu index dee8e9ab5..dadb2f372 100644 --- a/cuda/spgpu/kernels/ssetscal.cu +++ b/cuda/spgpu/kernels/ssetscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/supd_xyz.cu b/cuda/spgpu/kernels/supd_xyz.cu index 0bfed1ae6..cd455302e 100644 --- a/cuda/spgpu/kernels/supd_xyz.cu +++ b/cuda/spgpu/kernels/supd_xyz.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/sxyzw.cu b/cuda/spgpu/kernels/sxyzw.cu index 26422e550..f8b4367e3 100644 --- a/cuda/spgpu/kernels/sxyzw.cu +++ b/cuda/spgpu/kernels/sxyzw.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/zabs.cu b/cuda/spgpu/kernels/zabs.cu index 4bef9294e..e8e95c02b 100644 --- a/cuda/spgpu/kernels/zabs.cu +++ b/cuda/spgpu/kernels/zabs.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zamax.cu b/cuda/spgpu/kernels/zamax.cu index 4e65cf223..fc5212315 100644 --- a/cuda/spgpu/kernels/zamax.cu +++ b/cuda/spgpu/kernels/zamax.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zasum.cu b/cuda/spgpu/kernels/zasum.cu index fa40b58ca..84323f1ed 100644 --- a/cuda/spgpu/kernels/zasum.cu +++ b/cuda/spgpu/kernels/zasum.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zaxpby.cu b/cuda/spgpu/kernels/zaxpby.cu index 07122ff5f..7378b47fb 100644 --- a/cuda/spgpu/kernels/zaxpby.cu +++ b/cuda/spgpu/kernels/zaxpby.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/zaxy.cu b/cuda/spgpu/kernels/zaxy.cu index cdc21adb3..c2a46cb21 100644 --- a/cuda/spgpu/kernels/zaxy.cu +++ b/cuda/spgpu/kernels/zaxy.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zdot.cu b/cuda/spgpu/kernels/zdot.cu index 1b4b12c9d..bc824e5a7 100644 --- a/cuda/spgpu/kernels/zdot.cu +++ b/cuda/spgpu/kernels/zdot.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zgath.cu b/cuda/spgpu/kernels/zgath.cu index 59cebf6ed..4a9583c59 100644 --- a/cuda/spgpu/kernels/zgath.cu +++ b/cuda/spgpu/kernels/zgath.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/znrm2.cu b/cuda/spgpu/kernels/znrm2.cu index 3d1ed304b..479900663 100644 --- a/cuda/spgpu/kernels/znrm2.cu +++ b/cuda/spgpu/kernels/znrm2.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zscal.cu b/cuda/spgpu/kernels/zscal.cu index 13f3ad153..01f17a171 100644 --- a/cuda/spgpu/kernels/zscal.cu +++ b/cuda/spgpu/kernels/zscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2014 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zscat.cu b/cuda/spgpu/kernels/zscat.cu index b43ab761f..0cbb9c0a2 100644 --- a/cuda/spgpu/kernels/zscat.cu +++ b/cuda/spgpu/kernels/zscat.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zsetscal.cu b/cuda/spgpu/kernels/zsetscal.cu index 70afa01c4..12bf9a5cb 100644 --- a/cuda/spgpu/kernels/zsetscal.cu +++ b/cuda/spgpu/kernels/zsetscal.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2015 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "stdio.h" diff --git a/cuda/spgpu/kernels/zupd_xyz.cu b/cuda/spgpu/kernels/zupd_xyz.cu index 3a7f4c00b..0bfbe8508 100644 --- a/cuda/spgpu/kernels/zupd_xyz.cu +++ b/cuda/spgpu/kernels/zupd_xyz.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/kernels/zxyzw.cu b/cuda/spgpu/kernels/zxyzw.cu index c02991dd9..24c2305df 100644 --- a/cuda/spgpu/kernels/zxyzw.cu +++ b/cuda/spgpu/kernels/zxyzw.cu @@ -4,14 +4,6 @@ * Copyright (C) 2010 - 2012 * Davide Barbieri - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "cudadebug.h" diff --git a/cuda/spgpu/vector.h b/cuda/spgpu/vector.h index 26c3443d6..20980cfef 100644 --- a/cuda/spgpu/vector.h +++ b/cuda/spgpu/vector.h @@ -7,14 +7,6 @@ * Davide Barbieri - University of Rome Tor Vergata * Salvatore Filippone - University of Rome Tor Vergata * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 3 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include "core.h" diff --git a/cuda/svectordev.c b/cuda/svectordev.c index 3bf326654..5b6ec2b43 100644 --- a/cuda/svectordev.c +++ b/cuda/svectordev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/svectordev.h b/cuda/svectordev.h index 2077c1d3f..1265df4d7 100644 --- a/cuda/svectordev.h +++ b/cuda/svectordev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/vectordev.c b/cuda/vectordev.c index db976fe9b..3c0bd7651 100644 --- a/cuda/vectordev.c +++ b/cuda/vectordev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/vectordev.h b/cuda/vectordev.h index 93cf11895..95d5164a6 100644 --- a/cuda/vectordev.h +++ b/cuda/vectordev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/z_cusparse_mod.F90 b/cuda/z_cusparse_mod.F90 index a4f154553..9ad6825d4 100644 --- a/cuda/z_cusparse_mod.F90 +++ b/cuda/z_cusparse_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/zcusparse.c b/cuda/zcusparse.c index 93142d221..1a950966b 100644 --- a/cuda/zcusparse.c +++ b/cuda/zcusparse.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/zcusparse.h b/cuda/zcusparse.h index ca0aeeff8..9b0ccf3d5 100644 --- a/cuda/zcusparse.h +++ b/cuda/zcusparse.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/zvectordev.c b/cuda/zvectordev.c index ce0458730..f7b33ac7c 100644 --- a/cuda/zvectordev.c +++ b/cuda/zvectordev.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/cuda/zvectordev.h b/cuda/zvectordev.h index 3f08da83e..136e77010 100644 --- a/cuda/zvectordev.h +++ b/cuda/zvectordev.h @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/ext/Makefile b/ext/Makefile old mode 100755 new mode 100644 diff --git a/ext/impl/Makefile b/ext/impl/Makefile old mode 100755 new mode 100644 diff --git a/ext/impl/psb_c_cp_dia_from_coo.f90 b/ext/impl/psb_c_cp_dia_from_coo.f90 index 2d2b1caa0..a7a8f83ca 100644 --- a/ext/impl/psb_c_cp_dia_from_coo.f90 +++ b/ext/impl/psb_c_cp_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_dia_to_coo.f90 b/ext/impl/psb_c_cp_dia_to_coo.f90 index 9975bec02..8d2093221 100644 --- a/ext/impl/psb_c_cp_dia_to_coo.f90 +++ b/ext/impl/psb_c_cp_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_ell_from_coo.f90 b/ext/impl/psb_c_cp_ell_from_coo.f90 index 28d7d2420..0a5f389f9 100644 --- a/ext/impl/psb_c_cp_ell_from_coo.f90 +++ b/ext/impl/psb_c_cp_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_ell_from_fmt.f90 b/ext/impl/psb_c_cp_ell_from_fmt.f90 index 309063b9d..39074b727 100644 --- a/ext/impl/psb_c_cp_ell_from_fmt.f90 +++ b/ext/impl/psb_c_cp_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_ell_to_coo.f90 b/ext/impl/psb_c_cp_ell_to_coo.f90 index ec6bcff51..8fea05179 100644 --- a/ext/impl/psb_c_cp_ell_to_coo.f90 +++ b/ext/impl/psb_c_cp_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_ell_to_fmt.f90 b/ext/impl/psb_c_cp_ell_to_fmt.f90 index 0c6a6903b..40d79bec9 100644 --- a/ext/impl/psb_c_cp_ell_to_fmt.f90 +++ b/ext/impl/psb_c_cp_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hdia_from_coo.f90 b/ext/impl/psb_c_cp_hdia_from_coo.f90 index a9e1ca215..e787e70a5 100644 --- a/ext/impl/psb_c_cp_hdia_from_coo.f90 +++ b/ext/impl/psb_c_cp_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hdia_to_coo.f90 b/ext/impl/psb_c_cp_hdia_to_coo.f90 index 328016534..a607f008e 100644 --- a/ext/impl/psb_c_cp_hdia_to_coo.f90 +++ b/ext/impl/psb_c_cp_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hll_from_coo.f90 b/ext/impl/psb_c_cp_hll_from_coo.f90 index 506196c2d..39b8cdba6 100644 --- a/ext/impl/psb_c_cp_hll_from_coo.f90 +++ b/ext/impl/psb_c_cp_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hll_from_fmt.f90 b/ext/impl/psb_c_cp_hll_from_fmt.f90 index 0849561f3..fa08338e0 100644 --- a/ext/impl/psb_c_cp_hll_from_fmt.f90 +++ b/ext/impl/psb_c_cp_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hll_to_coo.f90 b/ext/impl/psb_c_cp_hll_to_coo.f90 index 0ff46352a..38dd22d90 100644 --- a/ext/impl/psb_c_cp_hll_to_coo.f90 +++ b/ext/impl/psb_c_cp_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hll_to_fmt.f90 b/ext/impl/psb_c_cp_hll_to_fmt.f90 index df8fa3b76..ff8da74a8 100644 --- a/ext/impl/psb_c_cp_hll_to_fmt.f90 +++ b/ext/impl/psb_c_cp_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_aclsum.f90 b/ext/impl/psb_c_dia_aclsum.f90 index 4bd8d4408..0c09d910b 100644 --- a/ext/impl/psb_c_dia_aclsum.f90 +++ b/ext/impl/psb_c_dia_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_allocate_mnnz.f90 b/ext/impl/psb_c_dia_allocate_mnnz.f90 index 37fb34e1a..731eea94f 100644 --- a/ext/impl/psb_c_dia_allocate_mnnz.f90 +++ b/ext/impl/psb_c_dia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_arwsum.f90 b/ext/impl/psb_c_dia_arwsum.f90 index fe40deb8d..ede166d54 100644 --- a/ext/impl/psb_c_dia_arwsum.f90 +++ b/ext/impl/psb_c_dia_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_colsum.f90 b/ext/impl/psb_c_dia_colsum.f90 index ed43fa12c..0a2125c23 100644 --- a/ext/impl/psb_c_dia_colsum.f90 +++ b/ext/impl/psb_c_dia_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_csgetptn.f90 b/ext/impl/psb_c_dia_csgetptn.f90 index ad479d357..ac4a1bd2e 100644 --- a/ext/impl/psb_c_dia_csgetptn.f90 +++ b/ext/impl/psb_c_dia_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_csgetrow.f90 b/ext/impl/psb_c_dia_csgetrow.f90 index 2989b20f0..1344cc7a3 100644 --- a/ext/impl/psb_c_dia_csgetrow.f90 +++ b/ext/impl/psb_c_dia_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_csmm.f90 b/ext/impl/psb_c_dia_csmm.f90 index b65c4651a..e146d9537 100644 --- a/ext/impl/psb_c_dia_csmm.f90 +++ b/ext/impl/psb_c_dia_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_csmv.f90 b/ext/impl/psb_c_dia_csmv.f90 index cf1ef677e..fdb664e14 100644 --- a/ext/impl/psb_c_dia_csmv.f90 +++ b/ext/impl/psb_c_dia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_get_diag.f90 b/ext/impl/psb_c_dia_get_diag.f90 index d868b62d3..278e98377 100644 --- a/ext/impl/psb_c_dia_get_diag.f90 +++ b/ext/impl/psb_c_dia_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_maxval.f90 b/ext/impl/psb_c_dia_maxval.f90 index 03a2be82c..99bbadd8e 100644 --- a/ext/impl/psb_c_dia_maxval.f90 +++ b/ext/impl/psb_c_dia_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_mold.f90 b/ext/impl/psb_c_dia_mold.f90 index 1d6948286..2a89b5231 100644 --- a/ext/impl/psb_c_dia_mold.f90 +++ b/ext/impl/psb_c_dia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_print.f90 b/ext/impl/psb_c_dia_print.f90 index f3233366d..86c7b7bf7 100644 --- a/ext/impl/psb_c_dia_print.f90 +++ b/ext/impl/psb_c_dia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_reallocate_nz.f90 b/ext/impl/psb_c_dia_reallocate_nz.f90 index c46cd4654..86f161925 100644 --- a/ext/impl/psb_c_dia_reallocate_nz.f90 +++ b/ext/impl/psb_c_dia_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_reinit.f90 b/ext/impl/psb_c_dia_reinit.f90 index 04a345eb3..415d7f4c4 100644 --- a/ext/impl/psb_c_dia_reinit.f90 +++ b/ext/impl/psb_c_dia_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_rowsum.f90 b/ext/impl/psb_c_dia_rowsum.f90 index 1f36dab4c..5cef3e0f5 100644 --- a/ext/impl/psb_c_dia_rowsum.f90 +++ b/ext/impl/psb_c_dia_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_scal.f90 b/ext/impl/psb_c_dia_scal.f90 index 8f35b7c1b..25fc48853 100644 --- a/ext/impl/psb_c_dia_scal.f90 +++ b/ext/impl/psb_c_dia_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_scals.f90 b/ext/impl/psb_c_dia_scals.f90 index a9ca5db14..d82790f51 100644 --- a/ext/impl/psb_c_dia_scals.f90 +++ b/ext/impl/psb_c_dia_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_aclsum.f90 b/ext/impl/psb_c_ell_aclsum.f90 index 3d5a292ae..ce09dc137 100644 --- a/ext/impl/psb_c_ell_aclsum.f90 +++ b/ext/impl/psb_c_ell_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_allocate_mnnz.f90 b/ext/impl/psb_c_ell_allocate_mnnz.f90 index b137eb044..7cb2f5d55 100644 --- a/ext/impl/psb_c_ell_allocate_mnnz.f90 +++ b/ext/impl/psb_c_ell_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_arwsum.f90 b/ext/impl/psb_c_ell_arwsum.f90 index c047c742f..a17caf70e 100644 --- a/ext/impl/psb_c_ell_arwsum.f90 +++ b/ext/impl/psb_c_ell_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_colsum.f90 b/ext/impl/psb_c_ell_colsum.f90 index 6d06b5894..15fba919d 100644 --- a/ext/impl/psb_c_ell_colsum.f90 +++ b/ext/impl/psb_c_ell_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csgetblk.f90 b/ext/impl/psb_c_ell_csgetblk.f90 index deb07c25f..f07f0825a 100644 --- a/ext/impl/psb_c_ell_csgetblk.f90 +++ b/ext/impl/psb_c_ell_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csgetptn.f90 b/ext/impl/psb_c_ell_csgetptn.f90 index 821daa89b..da19391c3 100644 --- a/ext/impl/psb_c_ell_csgetptn.f90 +++ b/ext/impl/psb_c_ell_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csgetrow.f90 b/ext/impl/psb_c_ell_csgetrow.f90 index 39eff5a2f..735539146 100644 --- a/ext/impl/psb_c_ell_csgetrow.f90 +++ b/ext/impl/psb_c_ell_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csmm.f90 b/ext/impl/psb_c_ell_csmm.f90 index 86d15e29b..ac2f46e36 100644 --- a/ext/impl/psb_c_ell_csmm.f90 +++ b/ext/impl/psb_c_ell_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csmv.f90 b/ext/impl/psb_c_ell_csmv.f90 index 46d5ac004..a8e3bedcc 100644 --- a/ext/impl/psb_c_ell_csmv.f90 +++ b/ext/impl/psb_c_ell_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csnm1.f90 b/ext/impl/psb_c_ell_csnm1.f90 index e83dcb282..a02933a42 100644 --- a/ext/impl/psb_c_ell_csnm1.f90 +++ b/ext/impl/psb_c_ell_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csnmi.f90 b/ext/impl/psb_c_ell_csnmi.f90 index 6dc9cfa47..918fdb9e5 100644 --- a/ext/impl/psb_c_ell_csnmi.f90 +++ b/ext/impl/psb_c_ell_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csput.f90 b/ext/impl/psb_c_ell_csput.f90 index e0b0f47f4..261275e01 100644 --- a/ext/impl/psb_c_ell_csput.f90 +++ b/ext/impl/psb_c_ell_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_cssm.f90 b/ext/impl/psb_c_ell_cssm.f90 index 26e760307..204fe19f1 100644 --- a/ext/impl/psb_c_ell_cssm.f90 +++ b/ext/impl/psb_c_ell_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_cssv.f90 b/ext/impl/psb_c_ell_cssv.f90 index e65e81dce..f37d4dd16 100644 --- a/ext/impl/psb_c_ell_cssv.f90 +++ b/ext/impl/psb_c_ell_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_get_diag.f90 b/ext/impl/psb_c_ell_get_diag.f90 index edcdae419..19434edc1 100644 --- a/ext/impl/psb_c_ell_get_diag.f90 +++ b/ext/impl/psb_c_ell_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_maxval.f90 b/ext/impl/psb_c_ell_maxval.f90 index 4de58b110..11102f1f5 100644 --- a/ext/impl/psb_c_ell_maxval.f90 +++ b/ext/impl/psb_c_ell_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_mold.f90 b/ext/impl/psb_c_ell_mold.f90 index c7c5d621b..fd0a3dc0b 100644 --- a/ext/impl/psb_c_ell_mold.f90 +++ b/ext/impl/psb_c_ell_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_print.f90 b/ext/impl/psb_c_ell_print.f90 index 1b8117a82..1212c3942 100644 --- a/ext/impl/psb_c_ell_print.f90 +++ b/ext/impl/psb_c_ell_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_reallocate_nz.f90 b/ext/impl/psb_c_ell_reallocate_nz.f90 index b0d775688..c10739cfb 100644 --- a/ext/impl/psb_c_ell_reallocate_nz.f90 +++ b/ext/impl/psb_c_ell_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_reinit.f90 b/ext/impl/psb_c_ell_reinit.f90 index 2b15dfeaf..a3590e07e 100644 --- a/ext/impl/psb_c_ell_reinit.f90 +++ b/ext/impl/psb_c_ell_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_rowsum.f90 b/ext/impl/psb_c_ell_rowsum.f90 index 5ae7d42cd..002a8e473 100644 --- a/ext/impl/psb_c_ell_rowsum.f90 +++ b/ext/impl/psb_c_ell_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_scal.f90 b/ext/impl/psb_c_ell_scal.f90 index 63150f32f..cf2db8f93 100644 --- a/ext/impl/psb_c_ell_scal.f90 +++ b/ext/impl/psb_c_ell_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_scals.f90 b/ext/impl/psb_c_ell_scals.f90 index 3e4cd92a0..ed2e90135 100644 --- a/ext/impl/psb_c_ell_scals.f90 +++ b/ext/impl/psb_c_ell_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_trim.f90 b/ext/impl/psb_c_ell_trim.f90 index 22aafefde..c1a13248b 100644 --- a/ext/impl/psb_c_ell_trim.f90 +++ b/ext/impl/psb_c_ell_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hdia_allocate_mnnz.f90 b/ext/impl/psb_c_hdia_allocate_mnnz.f90 index 17a49ffe1..a6cbc7d96 100644 --- a/ext/impl/psb_c_hdia_allocate_mnnz.f90 +++ b/ext/impl/psb_c_hdia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hdia_csmv.f90 b/ext/impl/psb_c_hdia_csmv.f90 index a04fde071..c486cbebf 100644 --- a/ext/impl/psb_c_hdia_csmv.f90 +++ b/ext/impl/psb_c_hdia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hdia_mold.f90 b/ext/impl/psb_c_hdia_mold.f90 index d9f85ec94..545ca3de0 100644 --- a/ext/impl/psb_c_hdia_mold.f90 +++ b/ext/impl/psb_c_hdia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hdia_print.f90 b/ext/impl/psb_c_hdia_print.f90 index 477a54330..a042d9eb6 100644 --- a/ext/impl/psb_c_hdia_print.f90 +++ b/ext/impl/psb_c_hdia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_aclsum.f90 b/ext/impl/psb_c_hll_aclsum.f90 index f1bd8e898..2190f7489 100644 --- a/ext/impl/psb_c_hll_aclsum.f90 +++ b/ext/impl/psb_c_hll_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_allocate_mnnz.f90 b/ext/impl/psb_c_hll_allocate_mnnz.f90 index 97b996bdb..400d68174 100644 --- a/ext/impl/psb_c_hll_allocate_mnnz.f90 +++ b/ext/impl/psb_c_hll_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_arwsum.f90 b/ext/impl/psb_c_hll_arwsum.f90 index 9c48e1c04..0f13f4141 100644 --- a/ext/impl/psb_c_hll_arwsum.f90 +++ b/ext/impl/psb_c_hll_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_colsum.f90 b/ext/impl/psb_c_hll_colsum.f90 index fbcb0934c..cff3c9ef3 100644 --- a/ext/impl/psb_c_hll_colsum.f90 +++ b/ext/impl/psb_c_hll_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csgetblk.f90 b/ext/impl/psb_c_hll_csgetblk.f90 index 9bf0b869c..a2c26cd60 100644 --- a/ext/impl/psb_c_hll_csgetblk.f90 +++ b/ext/impl/psb_c_hll_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csgetptn.f90 b/ext/impl/psb_c_hll_csgetptn.f90 index 0f6481ed8..7c6f07f7b 100644 --- a/ext/impl/psb_c_hll_csgetptn.f90 +++ b/ext/impl/psb_c_hll_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csgetrow.f90 b/ext/impl/psb_c_hll_csgetrow.f90 index 798ffa853..111639044 100644 --- a/ext/impl/psb_c_hll_csgetrow.f90 +++ b/ext/impl/psb_c_hll_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csmm.f90 b/ext/impl/psb_c_hll_csmm.f90 index 24024c72f..77bab41e3 100644 --- a/ext/impl/psb_c_hll_csmm.f90 +++ b/ext/impl/psb_c_hll_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csmv.f90 b/ext/impl/psb_c_hll_csmv.f90 index fe26e4bb5..ce597e2e3 100644 --- a/ext/impl/psb_c_hll_csmv.f90 +++ b/ext/impl/psb_c_hll_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csnm1.f90 b/ext/impl/psb_c_hll_csnm1.f90 index 25daa75da..5c3ca5c4b 100644 --- a/ext/impl/psb_c_hll_csnm1.f90 +++ b/ext/impl/psb_c_hll_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csnmi.f90 b/ext/impl/psb_c_hll_csnmi.f90 index c70be9ceb..23097aa24 100644 --- a/ext/impl/psb_c_hll_csnmi.f90 +++ b/ext/impl/psb_c_hll_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csput.f90 b/ext/impl/psb_c_hll_csput.f90 index e46ae30a0..b7db2c6a9 100644 --- a/ext/impl/psb_c_hll_csput.f90 +++ b/ext/impl/psb_c_hll_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_cssm.f90 b/ext/impl/psb_c_hll_cssm.f90 index 90e3b9786..2c20996bf 100644 --- a/ext/impl/psb_c_hll_cssm.f90 +++ b/ext/impl/psb_c_hll_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_cssv.f90 b/ext/impl/psb_c_hll_cssv.f90 index 2a157849f..e71b12526 100644 --- a/ext/impl/psb_c_hll_cssv.f90 +++ b/ext/impl/psb_c_hll_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_get_diag.f90 b/ext/impl/psb_c_hll_get_diag.f90 index 0a4a37e37..2ea40bb6a 100644 --- a/ext/impl/psb_c_hll_get_diag.f90 +++ b/ext/impl/psb_c_hll_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_maxval.f90 b/ext/impl/psb_c_hll_maxval.f90 index ff82bb40a..042e840f1 100644 --- a/ext/impl/psb_c_hll_maxval.f90 +++ b/ext/impl/psb_c_hll_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_mold.f90 b/ext/impl/psb_c_hll_mold.f90 index 4a6204b0d..3e281a58d 100644 --- a/ext/impl/psb_c_hll_mold.f90 +++ b/ext/impl/psb_c_hll_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_print.f90 b/ext/impl/psb_c_hll_print.f90 index a5eec378f..c576503f6 100644 --- a/ext/impl/psb_c_hll_print.f90 +++ b/ext/impl/psb_c_hll_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_reallocate_nz.f90 b/ext/impl/psb_c_hll_reallocate_nz.f90 index 44d9cfc92..6a08c1802 100644 --- a/ext/impl/psb_c_hll_reallocate_nz.f90 +++ b/ext/impl/psb_c_hll_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_reinit.f90 b/ext/impl/psb_c_hll_reinit.f90 index 82d5cb169..0471a2275 100644 --- a/ext/impl/psb_c_hll_reinit.f90 +++ b/ext/impl/psb_c_hll_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_rowsum.f90 b/ext/impl/psb_c_hll_rowsum.f90 index e6eea2272..09d11a609 100644 --- a/ext/impl/psb_c_hll_rowsum.f90 +++ b/ext/impl/psb_c_hll_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_scal.f90 b/ext/impl/psb_c_hll_scal.f90 index 0fd59f15b..a1bc8bb2c 100644 --- a/ext/impl/psb_c_hll_scal.f90 +++ b/ext/impl/psb_c_hll_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_scals.f90 b/ext/impl/psb_c_hll_scals.f90 index 13a03a225..9e307b566 100644 --- a/ext/impl/psb_c_hll_scals.f90 +++ b/ext/impl/psb_c_hll_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_dia_from_coo.f90 b/ext/impl/psb_c_mv_dia_from_coo.f90 index 998713488..a5c3379a3 100644 --- a/ext/impl/psb_c_mv_dia_from_coo.f90 +++ b/ext/impl/psb_c_mv_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_dia_to_coo.f90 b/ext/impl/psb_c_mv_dia_to_coo.f90 index 1382cec33..278bbee05 100644 --- a/ext/impl/psb_c_mv_dia_to_coo.f90 +++ b/ext/impl/psb_c_mv_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_ell_from_coo.f90 b/ext/impl/psb_c_mv_ell_from_coo.f90 index 64da3e8d8..c94b1ff38 100644 --- a/ext/impl/psb_c_mv_ell_from_coo.f90 +++ b/ext/impl/psb_c_mv_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_ell_from_fmt.f90 b/ext/impl/psb_c_mv_ell_from_fmt.f90 index d0fa9bc42..faac5743b 100644 --- a/ext/impl/psb_c_mv_ell_from_fmt.f90 +++ b/ext/impl/psb_c_mv_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_ell_to_coo.f90 b/ext/impl/psb_c_mv_ell_to_coo.f90 index a49e2e3cf..82edaac47 100644 --- a/ext/impl/psb_c_mv_ell_to_coo.f90 +++ b/ext/impl/psb_c_mv_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_ell_to_fmt.f90 b/ext/impl/psb_c_mv_ell_to_fmt.f90 index 3ea02d6be..15f23e52c 100644 --- a/ext/impl/psb_c_mv_ell_to_fmt.f90 +++ b/ext/impl/psb_c_mv_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hdia_from_coo.f90 b/ext/impl/psb_c_mv_hdia_from_coo.f90 index 4247fdf82..cc3835ac7 100644 --- a/ext/impl/psb_c_mv_hdia_from_coo.f90 +++ b/ext/impl/psb_c_mv_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hdia_to_coo.f90 b/ext/impl/psb_c_mv_hdia_to_coo.f90 index 3a91917a2..149e369a3 100644 --- a/ext/impl/psb_c_mv_hdia_to_coo.f90 +++ b/ext/impl/psb_c_mv_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hll_from_coo.f90 b/ext/impl/psb_c_mv_hll_from_coo.f90 index b78bdd807..e86217467 100644 --- a/ext/impl/psb_c_mv_hll_from_coo.f90 +++ b/ext/impl/psb_c_mv_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hll_from_fmt.f90 b/ext/impl/psb_c_mv_hll_from_fmt.f90 index add903558..1d258ab5f 100644 --- a/ext/impl/psb_c_mv_hll_from_fmt.f90 +++ b/ext/impl/psb_c_mv_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hll_to_coo.f90 b/ext/impl/psb_c_mv_hll_to_coo.f90 index fbf5dfcd1..2d74d9940 100644 --- a/ext/impl/psb_c_mv_hll_to_coo.f90 +++ b/ext/impl/psb_c_mv_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hll_to_fmt.f90 b/ext/impl/psb_c_mv_hll_to_fmt.f90 index 37d77e857..0138b8862 100644 --- a/ext/impl/psb_c_mv_hll_to_fmt.f90 +++ b/ext/impl/psb_c_mv_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_dia_from_coo.f90 b/ext/impl/psb_d_cp_dia_from_coo.f90 index b640565f1..d774f95e9 100644 --- a/ext/impl/psb_d_cp_dia_from_coo.f90 +++ b/ext/impl/psb_d_cp_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_dia_to_coo.f90 b/ext/impl/psb_d_cp_dia_to_coo.f90 index 527c96d0e..bace6af91 100644 --- a/ext/impl/psb_d_cp_dia_to_coo.f90 +++ b/ext/impl/psb_d_cp_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_ell_from_coo.f90 b/ext/impl/psb_d_cp_ell_from_coo.f90 index cf23a0e02..038b1b7a2 100644 --- a/ext/impl/psb_d_cp_ell_from_coo.f90 +++ b/ext/impl/psb_d_cp_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_ell_from_fmt.f90 b/ext/impl/psb_d_cp_ell_from_fmt.f90 index ce8a8d7eb..a88155c85 100644 --- a/ext/impl/psb_d_cp_ell_from_fmt.f90 +++ b/ext/impl/psb_d_cp_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_ell_to_coo.f90 b/ext/impl/psb_d_cp_ell_to_coo.f90 index 8e7ad7352..76fd587c6 100644 --- a/ext/impl/psb_d_cp_ell_to_coo.f90 +++ b/ext/impl/psb_d_cp_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_ell_to_fmt.f90 b/ext/impl/psb_d_cp_ell_to_fmt.f90 index fd05d0fda..b6c8f9c8c 100644 --- a/ext/impl/psb_d_cp_ell_to_fmt.f90 +++ b/ext/impl/psb_d_cp_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hdia_from_coo.f90 b/ext/impl/psb_d_cp_hdia_from_coo.f90 index bbc341959..4d9440089 100644 --- a/ext/impl/psb_d_cp_hdia_from_coo.f90 +++ b/ext/impl/psb_d_cp_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hdia_to_coo.f90 b/ext/impl/psb_d_cp_hdia_to_coo.f90 index bfa77b082..615b0401c 100644 --- a/ext/impl/psb_d_cp_hdia_to_coo.f90 +++ b/ext/impl/psb_d_cp_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hll_from_coo.f90 b/ext/impl/psb_d_cp_hll_from_coo.f90 index 03028d209..dbb22cd83 100644 --- a/ext/impl/psb_d_cp_hll_from_coo.f90 +++ b/ext/impl/psb_d_cp_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hll_from_fmt.f90 b/ext/impl/psb_d_cp_hll_from_fmt.f90 index 785b23ac0..d8d979001 100644 --- a/ext/impl/psb_d_cp_hll_from_fmt.f90 +++ b/ext/impl/psb_d_cp_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hll_to_coo.f90 b/ext/impl/psb_d_cp_hll_to_coo.f90 index b20144c55..2722b4938 100644 --- a/ext/impl/psb_d_cp_hll_to_coo.f90 +++ b/ext/impl/psb_d_cp_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hll_to_fmt.f90 b/ext/impl/psb_d_cp_hll_to_fmt.f90 index 6c60c5b5b..75cd9ace2 100644 --- a/ext/impl/psb_d_cp_hll_to_fmt.f90 +++ b/ext/impl/psb_d_cp_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_aclsum.f90 b/ext/impl/psb_d_dia_aclsum.f90 index 0f4df6ca1..566c41a81 100644 --- a/ext/impl/psb_d_dia_aclsum.f90 +++ b/ext/impl/psb_d_dia_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_allocate_mnnz.f90 b/ext/impl/psb_d_dia_allocate_mnnz.f90 index 309b7d4a3..aec538a8c 100644 --- a/ext/impl/psb_d_dia_allocate_mnnz.f90 +++ b/ext/impl/psb_d_dia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_arwsum.f90 b/ext/impl/psb_d_dia_arwsum.f90 index 98eefc447..b1427fde8 100644 --- a/ext/impl/psb_d_dia_arwsum.f90 +++ b/ext/impl/psb_d_dia_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_colsum.f90 b/ext/impl/psb_d_dia_colsum.f90 index 6a6eb81c5..780f19553 100644 --- a/ext/impl/psb_d_dia_colsum.f90 +++ b/ext/impl/psb_d_dia_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_csgetptn.f90 b/ext/impl/psb_d_dia_csgetptn.f90 index ad0e040a2..a7e4d768c 100644 --- a/ext/impl/psb_d_dia_csgetptn.f90 +++ b/ext/impl/psb_d_dia_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_csgetrow.f90 b/ext/impl/psb_d_dia_csgetrow.f90 index 7e05a26e4..b4595beaf 100644 --- a/ext/impl/psb_d_dia_csgetrow.f90 +++ b/ext/impl/psb_d_dia_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_csmm.f90 b/ext/impl/psb_d_dia_csmm.f90 index 81ad967de..1b4ed8e9b 100644 --- a/ext/impl/psb_d_dia_csmm.f90 +++ b/ext/impl/psb_d_dia_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_csmv.f90 b/ext/impl/psb_d_dia_csmv.f90 index 166b4c580..9a007d415 100644 --- a/ext/impl/psb_d_dia_csmv.f90 +++ b/ext/impl/psb_d_dia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_get_diag.f90 b/ext/impl/psb_d_dia_get_diag.f90 index bbcb4a12f..dbcc51ea1 100644 --- a/ext/impl/psb_d_dia_get_diag.f90 +++ b/ext/impl/psb_d_dia_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_maxval.f90 b/ext/impl/psb_d_dia_maxval.f90 index f57be1ff1..84c2082e6 100644 --- a/ext/impl/psb_d_dia_maxval.f90 +++ b/ext/impl/psb_d_dia_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_mold.f90 b/ext/impl/psb_d_dia_mold.f90 index 2b3cef81c..9ae8dffc9 100644 --- a/ext/impl/psb_d_dia_mold.f90 +++ b/ext/impl/psb_d_dia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_print.f90 b/ext/impl/psb_d_dia_print.f90 index e32dc2edb..f3d358e47 100644 --- a/ext/impl/psb_d_dia_print.f90 +++ b/ext/impl/psb_d_dia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_reallocate_nz.f90 b/ext/impl/psb_d_dia_reallocate_nz.f90 index 83864dd88..6bd56d54d 100644 --- a/ext/impl/psb_d_dia_reallocate_nz.f90 +++ b/ext/impl/psb_d_dia_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_reinit.f90 b/ext/impl/psb_d_dia_reinit.f90 index f1e91ade8..aefeeb1dc 100644 --- a/ext/impl/psb_d_dia_reinit.f90 +++ b/ext/impl/psb_d_dia_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_rowsum.f90 b/ext/impl/psb_d_dia_rowsum.f90 index 7a5875bae..de97870d0 100644 --- a/ext/impl/psb_d_dia_rowsum.f90 +++ b/ext/impl/psb_d_dia_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_scal.f90 b/ext/impl/psb_d_dia_scal.f90 index d87c0d258..7c63425d5 100644 --- a/ext/impl/psb_d_dia_scal.f90 +++ b/ext/impl/psb_d_dia_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_scals.f90 b/ext/impl/psb_d_dia_scals.f90 index a3958f57d..95d3ad462 100644 --- a/ext/impl/psb_d_dia_scals.f90 +++ b/ext/impl/psb_d_dia_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_aclsum.f90 b/ext/impl/psb_d_ell_aclsum.f90 index e0bfc18d8..83c46b446 100644 --- a/ext/impl/psb_d_ell_aclsum.f90 +++ b/ext/impl/psb_d_ell_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_allocate_mnnz.f90 b/ext/impl/psb_d_ell_allocate_mnnz.f90 index 95e4558cc..bec159d62 100644 --- a/ext/impl/psb_d_ell_allocate_mnnz.f90 +++ b/ext/impl/psb_d_ell_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_arwsum.f90 b/ext/impl/psb_d_ell_arwsum.f90 index 6bf3b8881..224c24f59 100644 --- a/ext/impl/psb_d_ell_arwsum.f90 +++ b/ext/impl/psb_d_ell_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_colsum.f90 b/ext/impl/psb_d_ell_colsum.f90 index 9eb30ca0b..862b39607 100644 --- a/ext/impl/psb_d_ell_colsum.f90 +++ b/ext/impl/psb_d_ell_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csgetblk.f90 b/ext/impl/psb_d_ell_csgetblk.f90 index 9725518fc..c30adcfba 100644 --- a/ext/impl/psb_d_ell_csgetblk.f90 +++ b/ext/impl/psb_d_ell_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csgetptn.f90 b/ext/impl/psb_d_ell_csgetptn.f90 index a050fe546..86748fb83 100644 --- a/ext/impl/psb_d_ell_csgetptn.f90 +++ b/ext/impl/psb_d_ell_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csgetrow.f90 b/ext/impl/psb_d_ell_csgetrow.f90 index 08e10cab1..1d54d1d9a 100644 --- a/ext/impl/psb_d_ell_csgetrow.f90 +++ b/ext/impl/psb_d_ell_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csmm.f90 b/ext/impl/psb_d_ell_csmm.f90 index dca837c8d..21a889359 100644 --- a/ext/impl/psb_d_ell_csmm.f90 +++ b/ext/impl/psb_d_ell_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csmv.f90 b/ext/impl/psb_d_ell_csmv.f90 index cb247432a..38453fecb 100644 --- a/ext/impl/psb_d_ell_csmv.f90 +++ b/ext/impl/psb_d_ell_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csnm1.f90 b/ext/impl/psb_d_ell_csnm1.f90 index 418d97394..bcc15e7d8 100644 --- a/ext/impl/psb_d_ell_csnm1.f90 +++ b/ext/impl/psb_d_ell_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csnmi.f90 b/ext/impl/psb_d_ell_csnmi.f90 index b4e3d03e5..b76962047 100644 --- a/ext/impl/psb_d_ell_csnmi.f90 +++ b/ext/impl/psb_d_ell_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csput.f90 b/ext/impl/psb_d_ell_csput.f90 index d38d9d512..0e21676db 100644 --- a/ext/impl/psb_d_ell_csput.f90 +++ b/ext/impl/psb_d_ell_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_cssm.f90 b/ext/impl/psb_d_ell_cssm.f90 index 3c8b5f217..1e2704c74 100644 --- a/ext/impl/psb_d_ell_cssm.f90 +++ b/ext/impl/psb_d_ell_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_cssv.f90 b/ext/impl/psb_d_ell_cssv.f90 index 8c559e652..2541c917c 100644 --- a/ext/impl/psb_d_ell_cssv.f90 +++ b/ext/impl/psb_d_ell_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_get_diag.f90 b/ext/impl/psb_d_ell_get_diag.f90 index 71998f7bc..c6b8d3d31 100644 --- a/ext/impl/psb_d_ell_get_diag.f90 +++ b/ext/impl/psb_d_ell_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_maxval.f90 b/ext/impl/psb_d_ell_maxval.f90 index d0cb24d3e..b7f284e14 100644 --- a/ext/impl/psb_d_ell_maxval.f90 +++ b/ext/impl/psb_d_ell_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_mold.f90 b/ext/impl/psb_d_ell_mold.f90 index 48814f3c4..950ffd1b4 100644 --- a/ext/impl/psb_d_ell_mold.f90 +++ b/ext/impl/psb_d_ell_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_print.f90 b/ext/impl/psb_d_ell_print.f90 index cf5396622..c068e858b 100644 --- a/ext/impl/psb_d_ell_print.f90 +++ b/ext/impl/psb_d_ell_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_reallocate_nz.f90 b/ext/impl/psb_d_ell_reallocate_nz.f90 index 8f92ffadc..4af6927f3 100644 --- a/ext/impl/psb_d_ell_reallocate_nz.f90 +++ b/ext/impl/psb_d_ell_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_reinit.f90 b/ext/impl/psb_d_ell_reinit.f90 index ab9a7ba22..2fcee3988 100644 --- a/ext/impl/psb_d_ell_reinit.f90 +++ b/ext/impl/psb_d_ell_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_rowsum.f90 b/ext/impl/psb_d_ell_rowsum.f90 index 782775d4c..d0c545828 100644 --- a/ext/impl/psb_d_ell_rowsum.f90 +++ b/ext/impl/psb_d_ell_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_scal.f90 b/ext/impl/psb_d_ell_scal.f90 index 15be8a669..566982ea5 100644 --- a/ext/impl/psb_d_ell_scal.f90 +++ b/ext/impl/psb_d_ell_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_scals.f90 b/ext/impl/psb_d_ell_scals.f90 index 501f42b03..f651798af 100644 --- a/ext/impl/psb_d_ell_scals.f90 +++ b/ext/impl/psb_d_ell_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_trim.f90 b/ext/impl/psb_d_ell_trim.f90 index 8b1d52f71..e7aaa144e 100644 --- a/ext/impl/psb_d_ell_trim.f90 +++ b/ext/impl/psb_d_ell_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hdia_allocate_mnnz.f90 b/ext/impl/psb_d_hdia_allocate_mnnz.f90 index e5721754e..7b2f9f504 100644 --- a/ext/impl/psb_d_hdia_allocate_mnnz.f90 +++ b/ext/impl/psb_d_hdia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hdia_csmv.f90 b/ext/impl/psb_d_hdia_csmv.f90 index 825993425..4944dff82 100644 --- a/ext/impl/psb_d_hdia_csmv.f90 +++ b/ext/impl/psb_d_hdia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hdia_mold.f90 b/ext/impl/psb_d_hdia_mold.f90 index cebedd441..8e8079a08 100644 --- a/ext/impl/psb_d_hdia_mold.f90 +++ b/ext/impl/psb_d_hdia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hdia_print.f90 b/ext/impl/psb_d_hdia_print.f90 index 437532992..660658f93 100644 --- a/ext/impl/psb_d_hdia_print.f90 +++ b/ext/impl/psb_d_hdia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_aclsum.f90 b/ext/impl/psb_d_hll_aclsum.f90 index 1f868edc8..3d32ef87d 100644 --- a/ext/impl/psb_d_hll_aclsum.f90 +++ b/ext/impl/psb_d_hll_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_allocate_mnnz.f90 b/ext/impl/psb_d_hll_allocate_mnnz.f90 index f58d0e4a4..555d09b7e 100644 --- a/ext/impl/psb_d_hll_allocate_mnnz.f90 +++ b/ext/impl/psb_d_hll_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_arwsum.f90 b/ext/impl/psb_d_hll_arwsum.f90 index e5ae24fbd..d5870340f 100644 --- a/ext/impl/psb_d_hll_arwsum.f90 +++ b/ext/impl/psb_d_hll_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_colsum.f90 b/ext/impl/psb_d_hll_colsum.f90 index 8c2020ec1..163ebf3b9 100644 --- a/ext/impl/psb_d_hll_colsum.f90 +++ b/ext/impl/psb_d_hll_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csgetblk.f90 b/ext/impl/psb_d_hll_csgetblk.f90 index 185baf297..7d7538ec0 100644 --- a/ext/impl/psb_d_hll_csgetblk.f90 +++ b/ext/impl/psb_d_hll_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csgetptn.f90 b/ext/impl/psb_d_hll_csgetptn.f90 index a7cdc1482..872060d87 100644 --- a/ext/impl/psb_d_hll_csgetptn.f90 +++ b/ext/impl/psb_d_hll_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csgetrow.f90 b/ext/impl/psb_d_hll_csgetrow.f90 index 38ed3f5d5..5ee914e84 100644 --- a/ext/impl/psb_d_hll_csgetrow.f90 +++ b/ext/impl/psb_d_hll_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csmm.f90 b/ext/impl/psb_d_hll_csmm.f90 index 33f68ef82..1840e5229 100644 --- a/ext/impl/psb_d_hll_csmm.f90 +++ b/ext/impl/psb_d_hll_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csmv.f90 b/ext/impl/psb_d_hll_csmv.f90 index f849a54a7..52816fd78 100644 --- a/ext/impl/psb_d_hll_csmv.f90 +++ b/ext/impl/psb_d_hll_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csnm1.f90 b/ext/impl/psb_d_hll_csnm1.f90 index 4627a4d23..3aeed5d4f 100644 --- a/ext/impl/psb_d_hll_csnm1.f90 +++ b/ext/impl/psb_d_hll_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csnmi.f90 b/ext/impl/psb_d_hll_csnmi.f90 index 2b758fa38..66f17aa97 100644 --- a/ext/impl/psb_d_hll_csnmi.f90 +++ b/ext/impl/psb_d_hll_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csput.f90 b/ext/impl/psb_d_hll_csput.f90 index 064e6c598..8d02953a8 100644 --- a/ext/impl/psb_d_hll_csput.f90 +++ b/ext/impl/psb_d_hll_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_cssm.f90 b/ext/impl/psb_d_hll_cssm.f90 index f4f6e3496..ee5ddc5ad 100644 --- a/ext/impl/psb_d_hll_cssm.f90 +++ b/ext/impl/psb_d_hll_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_cssv.f90 b/ext/impl/psb_d_hll_cssv.f90 index 39da6115f..378fe8d3f 100644 --- a/ext/impl/psb_d_hll_cssv.f90 +++ b/ext/impl/psb_d_hll_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_get_diag.f90 b/ext/impl/psb_d_hll_get_diag.f90 index 081a60255..2cc7462ca 100644 --- a/ext/impl/psb_d_hll_get_diag.f90 +++ b/ext/impl/psb_d_hll_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_maxval.f90 b/ext/impl/psb_d_hll_maxval.f90 index 8408cc96a..119ba5054 100644 --- a/ext/impl/psb_d_hll_maxval.f90 +++ b/ext/impl/psb_d_hll_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_mold.f90 b/ext/impl/psb_d_hll_mold.f90 index e9d721f0d..cd0d77877 100644 --- a/ext/impl/psb_d_hll_mold.f90 +++ b/ext/impl/psb_d_hll_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_print.f90 b/ext/impl/psb_d_hll_print.f90 index 93c56d5cc..93c396231 100644 --- a/ext/impl/psb_d_hll_print.f90 +++ b/ext/impl/psb_d_hll_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_reallocate_nz.f90 b/ext/impl/psb_d_hll_reallocate_nz.f90 index 7abdd58f0..5761687a1 100644 --- a/ext/impl/psb_d_hll_reallocate_nz.f90 +++ b/ext/impl/psb_d_hll_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_reinit.f90 b/ext/impl/psb_d_hll_reinit.f90 index 6a0f34fad..c7d66df90 100644 --- a/ext/impl/psb_d_hll_reinit.f90 +++ b/ext/impl/psb_d_hll_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_rowsum.f90 b/ext/impl/psb_d_hll_rowsum.f90 index bfa2d2e16..3f909bc96 100644 --- a/ext/impl/psb_d_hll_rowsum.f90 +++ b/ext/impl/psb_d_hll_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_scal.f90 b/ext/impl/psb_d_hll_scal.f90 index ed9dd9cec..7a2231b65 100644 --- a/ext/impl/psb_d_hll_scal.f90 +++ b/ext/impl/psb_d_hll_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_scals.f90 b/ext/impl/psb_d_hll_scals.f90 index 8e05cddd3..ebe80e77e 100644 --- a/ext/impl/psb_d_hll_scals.f90 +++ b/ext/impl/psb_d_hll_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_dia_from_coo.f90 b/ext/impl/psb_d_mv_dia_from_coo.f90 index e38e975a0..4fe6670ce 100644 --- a/ext/impl/psb_d_mv_dia_from_coo.f90 +++ b/ext/impl/psb_d_mv_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_dia_to_coo.f90 b/ext/impl/psb_d_mv_dia_to_coo.f90 index d8ac7a692..83e102334 100644 --- a/ext/impl/psb_d_mv_dia_to_coo.f90 +++ b/ext/impl/psb_d_mv_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_ell_from_coo.f90 b/ext/impl/psb_d_mv_ell_from_coo.f90 index 8f98daaba..5e09dc5d9 100644 --- a/ext/impl/psb_d_mv_ell_from_coo.f90 +++ b/ext/impl/psb_d_mv_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_ell_from_fmt.f90 b/ext/impl/psb_d_mv_ell_from_fmt.f90 index 6589fd0a5..630c6db22 100644 --- a/ext/impl/psb_d_mv_ell_from_fmt.f90 +++ b/ext/impl/psb_d_mv_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_ell_to_coo.f90 b/ext/impl/psb_d_mv_ell_to_coo.f90 index a1220a6e0..11944346f 100644 --- a/ext/impl/psb_d_mv_ell_to_coo.f90 +++ b/ext/impl/psb_d_mv_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_ell_to_fmt.f90 b/ext/impl/psb_d_mv_ell_to_fmt.f90 index a59753601..4f6447d04 100644 --- a/ext/impl/psb_d_mv_ell_to_fmt.f90 +++ b/ext/impl/psb_d_mv_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hdia_from_coo.f90 b/ext/impl/psb_d_mv_hdia_from_coo.f90 index 68caea345..bcb2880a4 100644 --- a/ext/impl/psb_d_mv_hdia_from_coo.f90 +++ b/ext/impl/psb_d_mv_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hdia_to_coo.f90 b/ext/impl/psb_d_mv_hdia_to_coo.f90 index 595e20a26..95d47bc41 100644 --- a/ext/impl/psb_d_mv_hdia_to_coo.f90 +++ b/ext/impl/psb_d_mv_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hll_from_coo.f90 b/ext/impl/psb_d_mv_hll_from_coo.f90 index 78faed4b1..de6775a26 100644 --- a/ext/impl/psb_d_mv_hll_from_coo.f90 +++ b/ext/impl/psb_d_mv_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hll_from_fmt.f90 b/ext/impl/psb_d_mv_hll_from_fmt.f90 index 76a2f2fb2..1a202b921 100644 --- a/ext/impl/psb_d_mv_hll_from_fmt.f90 +++ b/ext/impl/psb_d_mv_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hll_to_coo.f90 b/ext/impl/psb_d_mv_hll_to_coo.f90 index fbc9111b9..6423ed586 100644 --- a/ext/impl/psb_d_mv_hll_to_coo.f90 +++ b/ext/impl/psb_d_mv_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hll_to_fmt.f90 b/ext/impl/psb_d_mv_hll_to_fmt.f90 index 8022b2e5b..929039728 100644 --- a/ext/impl/psb_d_mv_hll_to_fmt.f90 +++ b/ext/impl/psb_d_mv_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_dia_from_coo.f90 b/ext/impl/psb_s_cp_dia_from_coo.f90 index 6d9a0749d..620d80f35 100644 --- a/ext/impl/psb_s_cp_dia_from_coo.f90 +++ b/ext/impl/psb_s_cp_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_dia_to_coo.f90 b/ext/impl/psb_s_cp_dia_to_coo.f90 index c0cd5d325..4c103287d 100644 --- a/ext/impl/psb_s_cp_dia_to_coo.f90 +++ b/ext/impl/psb_s_cp_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_ell_from_coo.f90 b/ext/impl/psb_s_cp_ell_from_coo.f90 index f178a05c8..afe344702 100644 --- a/ext/impl/psb_s_cp_ell_from_coo.f90 +++ b/ext/impl/psb_s_cp_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_ell_from_fmt.f90 b/ext/impl/psb_s_cp_ell_from_fmt.f90 index bffe3d854..63504c976 100644 --- a/ext/impl/psb_s_cp_ell_from_fmt.f90 +++ b/ext/impl/psb_s_cp_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_ell_to_coo.f90 b/ext/impl/psb_s_cp_ell_to_coo.f90 index b8acddfcd..b866edcd2 100644 --- a/ext/impl/psb_s_cp_ell_to_coo.f90 +++ b/ext/impl/psb_s_cp_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_ell_to_fmt.f90 b/ext/impl/psb_s_cp_ell_to_fmt.f90 index 58fe3756e..c1beb7441 100644 --- a/ext/impl/psb_s_cp_ell_to_fmt.f90 +++ b/ext/impl/psb_s_cp_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hdia_from_coo.f90 b/ext/impl/psb_s_cp_hdia_from_coo.f90 index b3d427d95..5cd7353c8 100644 --- a/ext/impl/psb_s_cp_hdia_from_coo.f90 +++ b/ext/impl/psb_s_cp_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hdia_to_coo.f90 b/ext/impl/psb_s_cp_hdia_to_coo.f90 index 8e90e236d..9648e11ca 100644 --- a/ext/impl/psb_s_cp_hdia_to_coo.f90 +++ b/ext/impl/psb_s_cp_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hll_from_coo.f90 b/ext/impl/psb_s_cp_hll_from_coo.f90 index 9d75f994b..c3ba656f9 100644 --- a/ext/impl/psb_s_cp_hll_from_coo.f90 +++ b/ext/impl/psb_s_cp_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hll_from_fmt.f90 b/ext/impl/psb_s_cp_hll_from_fmt.f90 index 8f0109029..8e94e7004 100644 --- a/ext/impl/psb_s_cp_hll_from_fmt.f90 +++ b/ext/impl/psb_s_cp_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hll_to_coo.f90 b/ext/impl/psb_s_cp_hll_to_coo.f90 index 74502ba29..944bb69bd 100644 --- a/ext/impl/psb_s_cp_hll_to_coo.f90 +++ b/ext/impl/psb_s_cp_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hll_to_fmt.f90 b/ext/impl/psb_s_cp_hll_to_fmt.f90 index f7adaa542..b701e7494 100644 --- a/ext/impl/psb_s_cp_hll_to_fmt.f90 +++ b/ext/impl/psb_s_cp_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_aclsum.f90 b/ext/impl/psb_s_dia_aclsum.f90 index 718a24243..7781f5ed9 100644 --- a/ext/impl/psb_s_dia_aclsum.f90 +++ b/ext/impl/psb_s_dia_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_allocate_mnnz.f90 b/ext/impl/psb_s_dia_allocate_mnnz.f90 index df56c4a65..fa434c100 100644 --- a/ext/impl/psb_s_dia_allocate_mnnz.f90 +++ b/ext/impl/psb_s_dia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_arwsum.f90 b/ext/impl/psb_s_dia_arwsum.f90 index 5a974bbfa..8174c71ae 100644 --- a/ext/impl/psb_s_dia_arwsum.f90 +++ b/ext/impl/psb_s_dia_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_colsum.f90 b/ext/impl/psb_s_dia_colsum.f90 index e60eb88f9..6f671bcc3 100644 --- a/ext/impl/psb_s_dia_colsum.f90 +++ b/ext/impl/psb_s_dia_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_csgetptn.f90 b/ext/impl/psb_s_dia_csgetptn.f90 index f946eb73a..93f8d12a2 100644 --- a/ext/impl/psb_s_dia_csgetptn.f90 +++ b/ext/impl/psb_s_dia_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_csgetrow.f90 b/ext/impl/psb_s_dia_csgetrow.f90 index b79e2470a..615bca558 100644 --- a/ext/impl/psb_s_dia_csgetrow.f90 +++ b/ext/impl/psb_s_dia_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_csmm.f90 b/ext/impl/psb_s_dia_csmm.f90 index 9f586dbb2..079f7091f 100644 --- a/ext/impl/psb_s_dia_csmm.f90 +++ b/ext/impl/psb_s_dia_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_csmv.f90 b/ext/impl/psb_s_dia_csmv.f90 index 1a23932e5..e7d64d806 100644 --- a/ext/impl/psb_s_dia_csmv.f90 +++ b/ext/impl/psb_s_dia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_get_diag.f90 b/ext/impl/psb_s_dia_get_diag.f90 index 5909c72a9..3dc35378d 100644 --- a/ext/impl/psb_s_dia_get_diag.f90 +++ b/ext/impl/psb_s_dia_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_maxval.f90 b/ext/impl/psb_s_dia_maxval.f90 index 5f6726440..4a95733a9 100644 --- a/ext/impl/psb_s_dia_maxval.f90 +++ b/ext/impl/psb_s_dia_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_mold.f90 b/ext/impl/psb_s_dia_mold.f90 index a65379a47..05d8a8276 100644 --- a/ext/impl/psb_s_dia_mold.f90 +++ b/ext/impl/psb_s_dia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_print.f90 b/ext/impl/psb_s_dia_print.f90 index a0de1ba84..448465304 100644 --- a/ext/impl/psb_s_dia_print.f90 +++ b/ext/impl/psb_s_dia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_reallocate_nz.f90 b/ext/impl/psb_s_dia_reallocate_nz.f90 index d37d9e5f0..5fbbbba43 100644 --- a/ext/impl/psb_s_dia_reallocate_nz.f90 +++ b/ext/impl/psb_s_dia_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_reinit.f90 b/ext/impl/psb_s_dia_reinit.f90 index dd1097834..d270013b8 100644 --- a/ext/impl/psb_s_dia_reinit.f90 +++ b/ext/impl/psb_s_dia_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_rowsum.f90 b/ext/impl/psb_s_dia_rowsum.f90 index 3f32a2b28..22b246e23 100644 --- a/ext/impl/psb_s_dia_rowsum.f90 +++ b/ext/impl/psb_s_dia_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_scal.f90 b/ext/impl/psb_s_dia_scal.f90 index 7ccf881a2..91e619c39 100644 --- a/ext/impl/psb_s_dia_scal.f90 +++ b/ext/impl/psb_s_dia_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_scals.f90 b/ext/impl/psb_s_dia_scals.f90 index da1bc94e4..142afaf75 100644 --- a/ext/impl/psb_s_dia_scals.f90 +++ b/ext/impl/psb_s_dia_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_aclsum.f90 b/ext/impl/psb_s_ell_aclsum.f90 index 2eea0cc9a..e0634ac4c 100644 --- a/ext/impl/psb_s_ell_aclsum.f90 +++ b/ext/impl/psb_s_ell_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_allocate_mnnz.f90 b/ext/impl/psb_s_ell_allocate_mnnz.f90 index fd9f1b490..6cd47c33b 100644 --- a/ext/impl/psb_s_ell_allocate_mnnz.f90 +++ b/ext/impl/psb_s_ell_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_arwsum.f90 b/ext/impl/psb_s_ell_arwsum.f90 index a47f87215..00f4154cf 100644 --- a/ext/impl/psb_s_ell_arwsum.f90 +++ b/ext/impl/psb_s_ell_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_colsum.f90 b/ext/impl/psb_s_ell_colsum.f90 index 0924d8a97..8ca6e53c5 100644 --- a/ext/impl/psb_s_ell_colsum.f90 +++ b/ext/impl/psb_s_ell_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csgetblk.f90 b/ext/impl/psb_s_ell_csgetblk.f90 index 5468e93c5..df5c118f0 100644 --- a/ext/impl/psb_s_ell_csgetblk.f90 +++ b/ext/impl/psb_s_ell_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csgetptn.f90 b/ext/impl/psb_s_ell_csgetptn.f90 index 074637574..fe21394c0 100644 --- a/ext/impl/psb_s_ell_csgetptn.f90 +++ b/ext/impl/psb_s_ell_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csgetrow.f90 b/ext/impl/psb_s_ell_csgetrow.f90 index 0164fadba..5d98b7491 100644 --- a/ext/impl/psb_s_ell_csgetrow.f90 +++ b/ext/impl/psb_s_ell_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csmm.f90 b/ext/impl/psb_s_ell_csmm.f90 index 1abce00ff..8dafa2f48 100644 --- a/ext/impl/psb_s_ell_csmm.f90 +++ b/ext/impl/psb_s_ell_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csmv.f90 b/ext/impl/psb_s_ell_csmv.f90 index 35151439b..e1aceaf37 100644 --- a/ext/impl/psb_s_ell_csmv.f90 +++ b/ext/impl/psb_s_ell_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csnm1.f90 b/ext/impl/psb_s_ell_csnm1.f90 index d4d604dfe..6ac3d908e 100644 --- a/ext/impl/psb_s_ell_csnm1.f90 +++ b/ext/impl/psb_s_ell_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csnmi.f90 b/ext/impl/psb_s_ell_csnmi.f90 index 1df9bafaf..69d657c34 100644 --- a/ext/impl/psb_s_ell_csnmi.f90 +++ b/ext/impl/psb_s_ell_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csput.f90 b/ext/impl/psb_s_ell_csput.f90 index c0d69067c..7c2f84116 100644 --- a/ext/impl/psb_s_ell_csput.f90 +++ b/ext/impl/psb_s_ell_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_cssm.f90 b/ext/impl/psb_s_ell_cssm.f90 index ca50fa359..2c4594c78 100644 --- a/ext/impl/psb_s_ell_cssm.f90 +++ b/ext/impl/psb_s_ell_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_cssv.f90 b/ext/impl/psb_s_ell_cssv.f90 index 94ac01044..7b11ccf8d 100644 --- a/ext/impl/psb_s_ell_cssv.f90 +++ b/ext/impl/psb_s_ell_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_get_diag.f90 b/ext/impl/psb_s_ell_get_diag.f90 index fb91a2290..07207f585 100644 --- a/ext/impl/psb_s_ell_get_diag.f90 +++ b/ext/impl/psb_s_ell_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_maxval.f90 b/ext/impl/psb_s_ell_maxval.f90 index 6e2635b88..9ba1ebf8f 100644 --- a/ext/impl/psb_s_ell_maxval.f90 +++ b/ext/impl/psb_s_ell_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_mold.f90 b/ext/impl/psb_s_ell_mold.f90 index 4d137112d..e7a24b2af 100644 --- a/ext/impl/psb_s_ell_mold.f90 +++ b/ext/impl/psb_s_ell_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_print.f90 b/ext/impl/psb_s_ell_print.f90 index aec15a6d7..93fdadca6 100644 --- a/ext/impl/psb_s_ell_print.f90 +++ b/ext/impl/psb_s_ell_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_reallocate_nz.f90 b/ext/impl/psb_s_ell_reallocate_nz.f90 index ff7dabdae..4895f45ab 100644 --- a/ext/impl/psb_s_ell_reallocate_nz.f90 +++ b/ext/impl/psb_s_ell_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_reinit.f90 b/ext/impl/psb_s_ell_reinit.f90 index 088e83986..f6442dc66 100644 --- a/ext/impl/psb_s_ell_reinit.f90 +++ b/ext/impl/psb_s_ell_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_rowsum.f90 b/ext/impl/psb_s_ell_rowsum.f90 index 092329c9c..2fc556753 100644 --- a/ext/impl/psb_s_ell_rowsum.f90 +++ b/ext/impl/psb_s_ell_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_scal.f90 b/ext/impl/psb_s_ell_scal.f90 index 7f39f63d7..bcab2e920 100644 --- a/ext/impl/psb_s_ell_scal.f90 +++ b/ext/impl/psb_s_ell_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_scals.f90 b/ext/impl/psb_s_ell_scals.f90 index 4bc77626a..66952cfe4 100644 --- a/ext/impl/psb_s_ell_scals.f90 +++ b/ext/impl/psb_s_ell_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_trim.f90 b/ext/impl/psb_s_ell_trim.f90 index 758a8bb50..333cd1080 100644 --- a/ext/impl/psb_s_ell_trim.f90 +++ b/ext/impl/psb_s_ell_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hdia_allocate_mnnz.f90 b/ext/impl/psb_s_hdia_allocate_mnnz.f90 index 2c4e16fc4..aba20270f 100644 --- a/ext/impl/psb_s_hdia_allocate_mnnz.f90 +++ b/ext/impl/psb_s_hdia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hdia_csmv.f90 b/ext/impl/psb_s_hdia_csmv.f90 index d945f9643..8f45a82b1 100644 --- a/ext/impl/psb_s_hdia_csmv.f90 +++ b/ext/impl/psb_s_hdia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hdia_mold.f90 b/ext/impl/psb_s_hdia_mold.f90 index a62630c06..d3990aae3 100644 --- a/ext/impl/psb_s_hdia_mold.f90 +++ b/ext/impl/psb_s_hdia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hdia_print.f90 b/ext/impl/psb_s_hdia_print.f90 index f4b927bcf..c83e18db8 100644 --- a/ext/impl/psb_s_hdia_print.f90 +++ b/ext/impl/psb_s_hdia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_aclsum.f90 b/ext/impl/psb_s_hll_aclsum.f90 index cf75dfb2c..d23ad0154 100644 --- a/ext/impl/psb_s_hll_aclsum.f90 +++ b/ext/impl/psb_s_hll_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_allocate_mnnz.f90 b/ext/impl/psb_s_hll_allocate_mnnz.f90 index 549eccb48..7249d8261 100644 --- a/ext/impl/psb_s_hll_allocate_mnnz.f90 +++ b/ext/impl/psb_s_hll_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_arwsum.f90 b/ext/impl/psb_s_hll_arwsum.f90 index b93efb12e..5ec343bf8 100644 --- a/ext/impl/psb_s_hll_arwsum.f90 +++ b/ext/impl/psb_s_hll_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_colsum.f90 b/ext/impl/psb_s_hll_colsum.f90 index 02cceac2f..2a9a1300c 100644 --- a/ext/impl/psb_s_hll_colsum.f90 +++ b/ext/impl/psb_s_hll_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csgetblk.f90 b/ext/impl/psb_s_hll_csgetblk.f90 index c925e3a2e..2bc896655 100644 --- a/ext/impl/psb_s_hll_csgetblk.f90 +++ b/ext/impl/psb_s_hll_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csgetptn.f90 b/ext/impl/psb_s_hll_csgetptn.f90 index ccb1b6a18..a346214a4 100644 --- a/ext/impl/psb_s_hll_csgetptn.f90 +++ b/ext/impl/psb_s_hll_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csgetrow.f90 b/ext/impl/psb_s_hll_csgetrow.f90 index 9c87313d3..5ce408bff 100644 --- a/ext/impl/psb_s_hll_csgetrow.f90 +++ b/ext/impl/psb_s_hll_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csmm.f90 b/ext/impl/psb_s_hll_csmm.f90 index 985d8e34c..30d429745 100644 --- a/ext/impl/psb_s_hll_csmm.f90 +++ b/ext/impl/psb_s_hll_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csmv.f90 b/ext/impl/psb_s_hll_csmv.f90 index 84f0e391e..a3ead4c5c 100644 --- a/ext/impl/psb_s_hll_csmv.f90 +++ b/ext/impl/psb_s_hll_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csnm1.f90 b/ext/impl/psb_s_hll_csnm1.f90 index 6e7450810..439532ea8 100644 --- a/ext/impl/psb_s_hll_csnm1.f90 +++ b/ext/impl/psb_s_hll_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csnmi.f90 b/ext/impl/psb_s_hll_csnmi.f90 index 3be15f9b3..1838c653d 100644 --- a/ext/impl/psb_s_hll_csnmi.f90 +++ b/ext/impl/psb_s_hll_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csput.f90 b/ext/impl/psb_s_hll_csput.f90 index b12678d49..fd206112a 100644 --- a/ext/impl/psb_s_hll_csput.f90 +++ b/ext/impl/psb_s_hll_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_cssm.f90 b/ext/impl/psb_s_hll_cssm.f90 index 30c77c8fb..361bfe9c9 100644 --- a/ext/impl/psb_s_hll_cssm.f90 +++ b/ext/impl/psb_s_hll_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_cssv.f90 b/ext/impl/psb_s_hll_cssv.f90 index 899b30eea..197225bbe 100644 --- a/ext/impl/psb_s_hll_cssv.f90 +++ b/ext/impl/psb_s_hll_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_get_diag.f90 b/ext/impl/psb_s_hll_get_diag.f90 index fb4e473bf..745898364 100644 --- a/ext/impl/psb_s_hll_get_diag.f90 +++ b/ext/impl/psb_s_hll_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_maxval.f90 b/ext/impl/psb_s_hll_maxval.f90 index 846253288..fafe9fb66 100644 --- a/ext/impl/psb_s_hll_maxval.f90 +++ b/ext/impl/psb_s_hll_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_mold.f90 b/ext/impl/psb_s_hll_mold.f90 index eb04ccd90..4a5adb34f 100644 --- a/ext/impl/psb_s_hll_mold.f90 +++ b/ext/impl/psb_s_hll_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_print.f90 b/ext/impl/psb_s_hll_print.f90 index fb6bb38d9..6dbc8557c 100644 --- a/ext/impl/psb_s_hll_print.f90 +++ b/ext/impl/psb_s_hll_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_reallocate_nz.f90 b/ext/impl/psb_s_hll_reallocate_nz.f90 index f7a3076f8..b727a1eb8 100644 --- a/ext/impl/psb_s_hll_reallocate_nz.f90 +++ b/ext/impl/psb_s_hll_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_reinit.f90 b/ext/impl/psb_s_hll_reinit.f90 index 170abe086..65168b714 100644 --- a/ext/impl/psb_s_hll_reinit.f90 +++ b/ext/impl/psb_s_hll_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_rowsum.f90 b/ext/impl/psb_s_hll_rowsum.f90 index c74846980..cbe38ca70 100644 --- a/ext/impl/psb_s_hll_rowsum.f90 +++ b/ext/impl/psb_s_hll_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_scal.f90 b/ext/impl/psb_s_hll_scal.f90 index c8f3ddd5f..60624ad8d 100644 --- a/ext/impl/psb_s_hll_scal.f90 +++ b/ext/impl/psb_s_hll_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_scals.f90 b/ext/impl/psb_s_hll_scals.f90 index 8f823a204..255c07f69 100644 --- a/ext/impl/psb_s_hll_scals.f90 +++ b/ext/impl/psb_s_hll_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_dia_from_coo.f90 b/ext/impl/psb_s_mv_dia_from_coo.f90 index d7dcfc1bc..2289b677a 100644 --- a/ext/impl/psb_s_mv_dia_from_coo.f90 +++ b/ext/impl/psb_s_mv_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_dia_to_coo.f90 b/ext/impl/psb_s_mv_dia_to_coo.f90 index c0944b214..343a8cf25 100644 --- a/ext/impl/psb_s_mv_dia_to_coo.f90 +++ b/ext/impl/psb_s_mv_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_ell_from_coo.f90 b/ext/impl/psb_s_mv_ell_from_coo.f90 index 90965e418..fe78947e1 100644 --- a/ext/impl/psb_s_mv_ell_from_coo.f90 +++ b/ext/impl/psb_s_mv_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_ell_from_fmt.f90 b/ext/impl/psb_s_mv_ell_from_fmt.f90 index 03ebf8e4e..ad968275d 100644 --- a/ext/impl/psb_s_mv_ell_from_fmt.f90 +++ b/ext/impl/psb_s_mv_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_ell_to_coo.f90 b/ext/impl/psb_s_mv_ell_to_coo.f90 index 151cbeff6..3fbe8be58 100644 --- a/ext/impl/psb_s_mv_ell_to_coo.f90 +++ b/ext/impl/psb_s_mv_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_ell_to_fmt.f90 b/ext/impl/psb_s_mv_ell_to_fmt.f90 index 66f335085..acc2ad1fa 100644 --- a/ext/impl/psb_s_mv_ell_to_fmt.f90 +++ b/ext/impl/psb_s_mv_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hdia_from_coo.f90 b/ext/impl/psb_s_mv_hdia_from_coo.f90 index 88765079d..ec3e352dd 100644 --- a/ext/impl/psb_s_mv_hdia_from_coo.f90 +++ b/ext/impl/psb_s_mv_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hdia_to_coo.f90 b/ext/impl/psb_s_mv_hdia_to_coo.f90 index 56399b2ae..d574686d7 100644 --- a/ext/impl/psb_s_mv_hdia_to_coo.f90 +++ b/ext/impl/psb_s_mv_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hll_from_coo.f90 b/ext/impl/psb_s_mv_hll_from_coo.f90 index c8e460860..55938296d 100644 --- a/ext/impl/psb_s_mv_hll_from_coo.f90 +++ b/ext/impl/psb_s_mv_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hll_from_fmt.f90 b/ext/impl/psb_s_mv_hll_from_fmt.f90 index 19bda0a6f..7cb40597b 100644 --- a/ext/impl/psb_s_mv_hll_from_fmt.f90 +++ b/ext/impl/psb_s_mv_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hll_to_coo.f90 b/ext/impl/psb_s_mv_hll_to_coo.f90 index d36286a58..bfb8a7aa0 100644 --- a/ext/impl/psb_s_mv_hll_to_coo.f90 +++ b/ext/impl/psb_s_mv_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hll_to_fmt.f90 b/ext/impl/psb_s_mv_hll_to_fmt.f90 index 17618f69b..cdbf09964 100644 --- a/ext/impl/psb_s_mv_hll_to_fmt.f90 +++ b/ext/impl/psb_s_mv_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_dia_from_coo.f90 b/ext/impl/psb_z_cp_dia_from_coo.f90 index e87bfb349..85614118c 100644 --- a/ext/impl/psb_z_cp_dia_from_coo.f90 +++ b/ext/impl/psb_z_cp_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_dia_to_coo.f90 b/ext/impl/psb_z_cp_dia_to_coo.f90 index 26fac30b3..570aeca49 100644 --- a/ext/impl/psb_z_cp_dia_to_coo.f90 +++ b/ext/impl/psb_z_cp_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_ell_from_coo.f90 b/ext/impl/psb_z_cp_ell_from_coo.f90 index 7559621d3..1c4bd8c55 100644 --- a/ext/impl/psb_z_cp_ell_from_coo.f90 +++ b/ext/impl/psb_z_cp_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_ell_from_fmt.f90 b/ext/impl/psb_z_cp_ell_from_fmt.f90 index 6d63b64e8..606dc6611 100644 --- a/ext/impl/psb_z_cp_ell_from_fmt.f90 +++ b/ext/impl/psb_z_cp_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_ell_to_coo.f90 b/ext/impl/psb_z_cp_ell_to_coo.f90 index 38a1696ba..04e1c7eef 100644 --- a/ext/impl/psb_z_cp_ell_to_coo.f90 +++ b/ext/impl/psb_z_cp_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_ell_to_fmt.f90 b/ext/impl/psb_z_cp_ell_to_fmt.f90 index 7fb64a90e..ea443a0fa 100644 --- a/ext/impl/psb_z_cp_ell_to_fmt.f90 +++ b/ext/impl/psb_z_cp_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hdia_from_coo.f90 b/ext/impl/psb_z_cp_hdia_from_coo.f90 index ed77914e6..4f46bafb9 100644 --- a/ext/impl/psb_z_cp_hdia_from_coo.f90 +++ b/ext/impl/psb_z_cp_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hdia_to_coo.f90 b/ext/impl/psb_z_cp_hdia_to_coo.f90 index c0544ff01..87a3f1d7b 100644 --- a/ext/impl/psb_z_cp_hdia_to_coo.f90 +++ b/ext/impl/psb_z_cp_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hll_from_coo.f90 b/ext/impl/psb_z_cp_hll_from_coo.f90 index 15a8d1c2f..96e5ac602 100644 --- a/ext/impl/psb_z_cp_hll_from_coo.f90 +++ b/ext/impl/psb_z_cp_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hll_from_fmt.f90 b/ext/impl/psb_z_cp_hll_from_fmt.f90 index 3bdb22716..7bdde1f38 100644 --- a/ext/impl/psb_z_cp_hll_from_fmt.f90 +++ b/ext/impl/psb_z_cp_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hll_to_coo.f90 b/ext/impl/psb_z_cp_hll_to_coo.f90 index 409fe7b5e..817d54475 100644 --- a/ext/impl/psb_z_cp_hll_to_coo.f90 +++ b/ext/impl/psb_z_cp_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hll_to_fmt.f90 b/ext/impl/psb_z_cp_hll_to_fmt.f90 index b0417c923..b1c321bcf 100644 --- a/ext/impl/psb_z_cp_hll_to_fmt.f90 +++ b/ext/impl/psb_z_cp_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_aclsum.f90 b/ext/impl/psb_z_dia_aclsum.f90 index 5aed7ff03..da9df10da 100644 --- a/ext/impl/psb_z_dia_aclsum.f90 +++ b/ext/impl/psb_z_dia_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_allocate_mnnz.f90 b/ext/impl/psb_z_dia_allocate_mnnz.f90 index e9c614f65..8f05fb19b 100644 --- a/ext/impl/psb_z_dia_allocate_mnnz.f90 +++ b/ext/impl/psb_z_dia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_arwsum.f90 b/ext/impl/psb_z_dia_arwsum.f90 index 428053499..f9fa8cc96 100644 --- a/ext/impl/psb_z_dia_arwsum.f90 +++ b/ext/impl/psb_z_dia_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_colsum.f90 b/ext/impl/psb_z_dia_colsum.f90 index 69919736f..623142b22 100644 --- a/ext/impl/psb_z_dia_colsum.f90 +++ b/ext/impl/psb_z_dia_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_csgetptn.f90 b/ext/impl/psb_z_dia_csgetptn.f90 index d63304f87..fd805e738 100644 --- a/ext/impl/psb_z_dia_csgetptn.f90 +++ b/ext/impl/psb_z_dia_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_csgetrow.f90 b/ext/impl/psb_z_dia_csgetrow.f90 index 6571264e6..ef69265ae 100644 --- a/ext/impl/psb_z_dia_csgetrow.f90 +++ b/ext/impl/psb_z_dia_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_csmm.f90 b/ext/impl/psb_z_dia_csmm.f90 index cbebd10ec..1e4a55314 100644 --- a/ext/impl/psb_z_dia_csmm.f90 +++ b/ext/impl/psb_z_dia_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_csmv.f90 b/ext/impl/psb_z_dia_csmv.f90 index 9d1f5a2ae..9d37ff878 100644 --- a/ext/impl/psb_z_dia_csmv.f90 +++ b/ext/impl/psb_z_dia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_get_diag.f90 b/ext/impl/psb_z_dia_get_diag.f90 index 9b4039233..f8a3c67b4 100644 --- a/ext/impl/psb_z_dia_get_diag.f90 +++ b/ext/impl/psb_z_dia_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_maxval.f90 b/ext/impl/psb_z_dia_maxval.f90 index d3518c17b..fe845c7d6 100644 --- a/ext/impl/psb_z_dia_maxval.f90 +++ b/ext/impl/psb_z_dia_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_mold.f90 b/ext/impl/psb_z_dia_mold.f90 index 421af2841..aa212a4e8 100644 --- a/ext/impl/psb_z_dia_mold.f90 +++ b/ext/impl/psb_z_dia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_print.f90 b/ext/impl/psb_z_dia_print.f90 index 1f7853ef2..bc5bffd65 100644 --- a/ext/impl/psb_z_dia_print.f90 +++ b/ext/impl/psb_z_dia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_reallocate_nz.f90 b/ext/impl/psb_z_dia_reallocate_nz.f90 index 2d204a642..eac201d19 100644 --- a/ext/impl/psb_z_dia_reallocate_nz.f90 +++ b/ext/impl/psb_z_dia_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_reinit.f90 b/ext/impl/psb_z_dia_reinit.f90 index 0f58a9ed7..2e6315bc7 100644 --- a/ext/impl/psb_z_dia_reinit.f90 +++ b/ext/impl/psb_z_dia_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_rowsum.f90 b/ext/impl/psb_z_dia_rowsum.f90 index 6918ada1a..3c5e53a19 100644 --- a/ext/impl/psb_z_dia_rowsum.f90 +++ b/ext/impl/psb_z_dia_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_scal.f90 b/ext/impl/psb_z_dia_scal.f90 index 65957e607..6f07e9819 100644 --- a/ext/impl/psb_z_dia_scal.f90 +++ b/ext/impl/psb_z_dia_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_scals.f90 b/ext/impl/psb_z_dia_scals.f90 index 895763d9e..fd9a67f2a 100644 --- a/ext/impl/psb_z_dia_scals.f90 +++ b/ext/impl/psb_z_dia_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_aclsum.f90 b/ext/impl/psb_z_ell_aclsum.f90 index b03121fd5..d2ffd4c77 100644 --- a/ext/impl/psb_z_ell_aclsum.f90 +++ b/ext/impl/psb_z_ell_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_allocate_mnnz.f90 b/ext/impl/psb_z_ell_allocate_mnnz.f90 index f7f7f67e4..a707f5b8e 100644 --- a/ext/impl/psb_z_ell_allocate_mnnz.f90 +++ b/ext/impl/psb_z_ell_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_arwsum.f90 b/ext/impl/psb_z_ell_arwsum.f90 index 9d4b4949a..52f9e1044 100644 --- a/ext/impl/psb_z_ell_arwsum.f90 +++ b/ext/impl/psb_z_ell_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_colsum.f90 b/ext/impl/psb_z_ell_colsum.f90 index e9c2bc0b2..e34fd6247 100644 --- a/ext/impl/psb_z_ell_colsum.f90 +++ b/ext/impl/psb_z_ell_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csgetblk.f90 b/ext/impl/psb_z_ell_csgetblk.f90 index d2e56e1db..e6e4fcc45 100644 --- a/ext/impl/psb_z_ell_csgetblk.f90 +++ b/ext/impl/psb_z_ell_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csgetptn.f90 b/ext/impl/psb_z_ell_csgetptn.f90 index 97ed7d90c..d2aec0161 100644 --- a/ext/impl/psb_z_ell_csgetptn.f90 +++ b/ext/impl/psb_z_ell_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csgetrow.f90 b/ext/impl/psb_z_ell_csgetrow.f90 index 5716f9c1b..c6d0941ad 100644 --- a/ext/impl/psb_z_ell_csgetrow.f90 +++ b/ext/impl/psb_z_ell_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csmm.f90 b/ext/impl/psb_z_ell_csmm.f90 index 33c7bdb95..ad076c655 100644 --- a/ext/impl/psb_z_ell_csmm.f90 +++ b/ext/impl/psb_z_ell_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csmv.f90 b/ext/impl/psb_z_ell_csmv.f90 index 2ed4042bd..e0a2df4df 100644 --- a/ext/impl/psb_z_ell_csmv.f90 +++ b/ext/impl/psb_z_ell_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csnm1.f90 b/ext/impl/psb_z_ell_csnm1.f90 index 9669b20bf..ebcf5ca7a 100644 --- a/ext/impl/psb_z_ell_csnm1.f90 +++ b/ext/impl/psb_z_ell_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csnmi.f90 b/ext/impl/psb_z_ell_csnmi.f90 index ecbfb1e1e..db82d8801 100644 --- a/ext/impl/psb_z_ell_csnmi.f90 +++ b/ext/impl/psb_z_ell_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csput.f90 b/ext/impl/psb_z_ell_csput.f90 index cf45070f3..cda18850a 100644 --- a/ext/impl/psb_z_ell_csput.f90 +++ b/ext/impl/psb_z_ell_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_cssm.f90 b/ext/impl/psb_z_ell_cssm.f90 index 2e26c656e..199d997e5 100644 --- a/ext/impl/psb_z_ell_cssm.f90 +++ b/ext/impl/psb_z_ell_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_cssv.f90 b/ext/impl/psb_z_ell_cssv.f90 index d17238a28..2ed0ae4c8 100644 --- a/ext/impl/psb_z_ell_cssv.f90 +++ b/ext/impl/psb_z_ell_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_get_diag.f90 b/ext/impl/psb_z_ell_get_diag.f90 index af9c37a8c..e01ba2d4b 100644 --- a/ext/impl/psb_z_ell_get_diag.f90 +++ b/ext/impl/psb_z_ell_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_maxval.f90 b/ext/impl/psb_z_ell_maxval.f90 index 9596f1241..a792d66e1 100644 --- a/ext/impl/psb_z_ell_maxval.f90 +++ b/ext/impl/psb_z_ell_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_mold.f90 b/ext/impl/psb_z_ell_mold.f90 index 3e1db6ccb..9391ae0f0 100644 --- a/ext/impl/psb_z_ell_mold.f90 +++ b/ext/impl/psb_z_ell_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_print.f90 b/ext/impl/psb_z_ell_print.f90 index 502abb94b..d4d384045 100644 --- a/ext/impl/psb_z_ell_print.f90 +++ b/ext/impl/psb_z_ell_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_reallocate_nz.f90 b/ext/impl/psb_z_ell_reallocate_nz.f90 index 582375080..880bfd1a1 100644 --- a/ext/impl/psb_z_ell_reallocate_nz.f90 +++ b/ext/impl/psb_z_ell_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_reinit.f90 b/ext/impl/psb_z_ell_reinit.f90 index d73620d87..75c14daa8 100644 --- a/ext/impl/psb_z_ell_reinit.f90 +++ b/ext/impl/psb_z_ell_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_rowsum.f90 b/ext/impl/psb_z_ell_rowsum.f90 index 60eb70af3..196947a68 100644 --- a/ext/impl/psb_z_ell_rowsum.f90 +++ b/ext/impl/psb_z_ell_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_scal.f90 b/ext/impl/psb_z_ell_scal.f90 index 7f2f8944b..7500bd0cc 100644 --- a/ext/impl/psb_z_ell_scal.f90 +++ b/ext/impl/psb_z_ell_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_scals.f90 b/ext/impl/psb_z_ell_scals.f90 index 4086d8cce..1160f5260 100644 --- a/ext/impl/psb_z_ell_scals.f90 +++ b/ext/impl/psb_z_ell_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_trim.f90 b/ext/impl/psb_z_ell_trim.f90 index 7cc2ed650..acde75e84 100644 --- a/ext/impl/psb_z_ell_trim.f90 +++ b/ext/impl/psb_z_ell_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hdia_allocate_mnnz.f90 b/ext/impl/psb_z_hdia_allocate_mnnz.f90 index abed0c587..e856ac7c5 100644 --- a/ext/impl/psb_z_hdia_allocate_mnnz.f90 +++ b/ext/impl/psb_z_hdia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hdia_csmv.f90 b/ext/impl/psb_z_hdia_csmv.f90 index 73d11da66..34e736f38 100644 --- a/ext/impl/psb_z_hdia_csmv.f90 +++ b/ext/impl/psb_z_hdia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hdia_mold.f90 b/ext/impl/psb_z_hdia_mold.f90 index d91bdb351..a67cda16c 100644 --- a/ext/impl/psb_z_hdia_mold.f90 +++ b/ext/impl/psb_z_hdia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hdia_print.f90 b/ext/impl/psb_z_hdia_print.f90 index 46f7769d1..09d11df25 100644 --- a/ext/impl/psb_z_hdia_print.f90 +++ b/ext/impl/psb_z_hdia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_aclsum.f90 b/ext/impl/psb_z_hll_aclsum.f90 index e4add2994..bcc3732b7 100644 --- a/ext/impl/psb_z_hll_aclsum.f90 +++ b/ext/impl/psb_z_hll_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_allocate_mnnz.f90 b/ext/impl/psb_z_hll_allocate_mnnz.f90 index 6ba9d7f1d..2bd4c3559 100644 --- a/ext/impl/psb_z_hll_allocate_mnnz.f90 +++ b/ext/impl/psb_z_hll_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_arwsum.f90 b/ext/impl/psb_z_hll_arwsum.f90 index a6e020fda..ebbd62d26 100644 --- a/ext/impl/psb_z_hll_arwsum.f90 +++ b/ext/impl/psb_z_hll_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_colsum.f90 b/ext/impl/psb_z_hll_colsum.f90 index 196a694ec..91ad04882 100644 --- a/ext/impl/psb_z_hll_colsum.f90 +++ b/ext/impl/psb_z_hll_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csgetblk.f90 b/ext/impl/psb_z_hll_csgetblk.f90 index 0cdf1fefe..e58abc250 100644 --- a/ext/impl/psb_z_hll_csgetblk.f90 +++ b/ext/impl/psb_z_hll_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csgetptn.f90 b/ext/impl/psb_z_hll_csgetptn.f90 index 9d4c6714a..1ef36b0cd 100644 --- a/ext/impl/psb_z_hll_csgetptn.f90 +++ b/ext/impl/psb_z_hll_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csgetrow.f90 b/ext/impl/psb_z_hll_csgetrow.f90 index f6d563dd1..160c6623c 100644 --- a/ext/impl/psb_z_hll_csgetrow.f90 +++ b/ext/impl/psb_z_hll_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csmm.f90 b/ext/impl/psb_z_hll_csmm.f90 index fb48d5aa6..c5e0dec31 100644 --- a/ext/impl/psb_z_hll_csmm.f90 +++ b/ext/impl/psb_z_hll_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csmv.f90 b/ext/impl/psb_z_hll_csmv.f90 index e1b9e73f3..cf871d601 100644 --- a/ext/impl/psb_z_hll_csmv.f90 +++ b/ext/impl/psb_z_hll_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csnm1.f90 b/ext/impl/psb_z_hll_csnm1.f90 index eb5c5b6b4..4ca5de7ce 100644 --- a/ext/impl/psb_z_hll_csnm1.f90 +++ b/ext/impl/psb_z_hll_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csnmi.f90 b/ext/impl/psb_z_hll_csnmi.f90 index 6243e5cfd..949cc1915 100644 --- a/ext/impl/psb_z_hll_csnmi.f90 +++ b/ext/impl/psb_z_hll_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csput.f90 b/ext/impl/psb_z_hll_csput.f90 index e47664c7e..84de26d64 100644 --- a/ext/impl/psb_z_hll_csput.f90 +++ b/ext/impl/psb_z_hll_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_cssm.f90 b/ext/impl/psb_z_hll_cssm.f90 index ba1aa1504..a377fe34c 100644 --- a/ext/impl/psb_z_hll_cssm.f90 +++ b/ext/impl/psb_z_hll_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_cssv.f90 b/ext/impl/psb_z_hll_cssv.f90 index 75606bbd3..ffb758cb6 100644 --- a/ext/impl/psb_z_hll_cssv.f90 +++ b/ext/impl/psb_z_hll_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_get_diag.f90 b/ext/impl/psb_z_hll_get_diag.f90 index 1fe3ae046..0ddc1c504 100644 --- a/ext/impl/psb_z_hll_get_diag.f90 +++ b/ext/impl/psb_z_hll_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_maxval.f90 b/ext/impl/psb_z_hll_maxval.f90 index 22258c3a9..922d9dc74 100644 --- a/ext/impl/psb_z_hll_maxval.f90 +++ b/ext/impl/psb_z_hll_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_mold.f90 b/ext/impl/psb_z_hll_mold.f90 index e108e9ce9..4d571b9c2 100644 --- a/ext/impl/psb_z_hll_mold.f90 +++ b/ext/impl/psb_z_hll_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_print.f90 b/ext/impl/psb_z_hll_print.f90 index 438822641..83d6bc106 100644 --- a/ext/impl/psb_z_hll_print.f90 +++ b/ext/impl/psb_z_hll_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_reallocate_nz.f90 b/ext/impl/psb_z_hll_reallocate_nz.f90 index 23432f9f0..27273b05e 100644 --- a/ext/impl/psb_z_hll_reallocate_nz.f90 +++ b/ext/impl/psb_z_hll_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_reinit.f90 b/ext/impl/psb_z_hll_reinit.f90 index b6851c612..b551dd86b 100644 --- a/ext/impl/psb_z_hll_reinit.f90 +++ b/ext/impl/psb_z_hll_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_rowsum.f90 b/ext/impl/psb_z_hll_rowsum.f90 index 027c5b22e..28e6034d5 100644 --- a/ext/impl/psb_z_hll_rowsum.f90 +++ b/ext/impl/psb_z_hll_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_scal.f90 b/ext/impl/psb_z_hll_scal.f90 index a11d0da81..f7827258c 100644 --- a/ext/impl/psb_z_hll_scal.f90 +++ b/ext/impl/psb_z_hll_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_scals.f90 b/ext/impl/psb_z_hll_scals.f90 index 432f11e6a..af846fdb1 100644 --- a/ext/impl/psb_z_hll_scals.f90 +++ b/ext/impl/psb_z_hll_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_dia_from_coo.f90 b/ext/impl/psb_z_mv_dia_from_coo.f90 index 29e27dfc5..ae052501f 100644 --- a/ext/impl/psb_z_mv_dia_from_coo.f90 +++ b/ext/impl/psb_z_mv_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_dia_to_coo.f90 b/ext/impl/psb_z_mv_dia_to_coo.f90 index 1679c9e00..63affd553 100644 --- a/ext/impl/psb_z_mv_dia_to_coo.f90 +++ b/ext/impl/psb_z_mv_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_ell_from_coo.f90 b/ext/impl/psb_z_mv_ell_from_coo.f90 index de39604e9..90f2b1ed1 100644 --- a/ext/impl/psb_z_mv_ell_from_coo.f90 +++ b/ext/impl/psb_z_mv_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_ell_from_fmt.f90 b/ext/impl/psb_z_mv_ell_from_fmt.f90 index a2c7c1901..942d421ec 100644 --- a/ext/impl/psb_z_mv_ell_from_fmt.f90 +++ b/ext/impl/psb_z_mv_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_ell_to_coo.f90 b/ext/impl/psb_z_mv_ell_to_coo.f90 index 3f8afb0a9..20da30833 100644 --- a/ext/impl/psb_z_mv_ell_to_coo.f90 +++ b/ext/impl/psb_z_mv_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_ell_to_fmt.f90 b/ext/impl/psb_z_mv_ell_to_fmt.f90 index d34ae80e0..c31475228 100644 --- a/ext/impl/psb_z_mv_ell_to_fmt.f90 +++ b/ext/impl/psb_z_mv_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hdia_from_coo.f90 b/ext/impl/psb_z_mv_hdia_from_coo.f90 index b9593f343..61c706a62 100644 --- a/ext/impl/psb_z_mv_hdia_from_coo.f90 +++ b/ext/impl/psb_z_mv_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hdia_to_coo.f90 b/ext/impl/psb_z_mv_hdia_to_coo.f90 index f4c8df558..8ae285bd6 100644 --- a/ext/impl/psb_z_mv_hdia_to_coo.f90 +++ b/ext/impl/psb_z_mv_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hll_from_coo.f90 b/ext/impl/psb_z_mv_hll_from_coo.f90 index abe988b3e..3b84be4f7 100644 --- a/ext/impl/psb_z_mv_hll_from_coo.f90 +++ b/ext/impl/psb_z_mv_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hll_from_fmt.f90 b/ext/impl/psb_z_mv_hll_from_fmt.f90 index 81626aba4..3f3beb895 100644 --- a/ext/impl/psb_z_mv_hll_from_fmt.f90 +++ b/ext/impl/psb_z_mv_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hll_to_coo.f90 b/ext/impl/psb_z_mv_hll_to_coo.f90 index af0330047..705dcbe0e 100644 --- a/ext/impl/psb_z_mv_hll_to_coo.f90 +++ b/ext/impl/psb_z_mv_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hll_to_fmt.f90 b/ext/impl/psb_z_mv_hll_to_fmt.f90 index a2fd7027c..8f0ac8e6c 100644 --- a/ext/impl/psb_z_mv_hll_to_fmt.f90 +++ b/ext/impl/psb_z_mv_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_convert_dia_from_coo.f90 b/ext/impl/psi_c_convert_dia_from_coo.f90 index 295657485..7735c2e3a 100644 --- a/ext/impl/psi_c_convert_dia_from_coo.f90 +++ b/ext/impl/psi_c_convert_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_convert_ell_from_coo.f90 b/ext/impl/psi_c_convert_ell_from_coo.f90 index b4e0c7e4a..c208ef44e 100644 --- a/ext/impl/psi_c_convert_ell_from_coo.f90 +++ b/ext/impl/psi_c_convert_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_convert_hll_from_coo.f90 b/ext/impl/psi_c_convert_hll_from_coo.f90 index 2ebb86a6e..4a4b34ce4 100644 --- a/ext/impl/psi_c_convert_hll_from_coo.f90 +++ b/ext/impl/psi_c_convert_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_xtr_coo_from_dia.f90 b/ext/impl/psi_c_xtr_coo_from_dia.f90 index eab82a11b..59bc97e5a 100644 --- a/ext/impl/psi_c_xtr_coo_from_dia.f90 +++ b/ext/impl/psi_c_xtr_coo_from_dia.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_xtr_dia_from_coo.f90 b/ext/impl/psi_c_xtr_dia_from_coo.f90 index f72a03df1..5075ae824 100644 --- a/ext/impl/psi_c_xtr_dia_from_coo.f90 +++ b/ext/impl/psi_c_xtr_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_xtr_ell_from_coo.f90 b/ext/impl/psi_c_xtr_ell_from_coo.f90 index 706e6c1f7..329a9dfb7 100644 --- a/ext/impl/psi_c_xtr_ell_from_coo.f90 +++ b/ext/impl/psi_c_xtr_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_convert_dia_from_coo.f90 b/ext/impl/psi_d_convert_dia_from_coo.f90 index 5f821967a..a0dbdb1ce 100644 --- a/ext/impl/psi_d_convert_dia_from_coo.f90 +++ b/ext/impl/psi_d_convert_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_convert_ell_from_coo.f90 b/ext/impl/psi_d_convert_ell_from_coo.f90 index 51471c19d..19ccaa2b7 100644 --- a/ext/impl/psi_d_convert_ell_from_coo.f90 +++ b/ext/impl/psi_d_convert_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_convert_hll_from_coo.f90 b/ext/impl/psi_d_convert_hll_from_coo.f90 index cb07e52cf..62ce1a31c 100644 --- a/ext/impl/psi_d_convert_hll_from_coo.f90 +++ b/ext/impl/psi_d_convert_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_xtr_coo_from_dia.f90 b/ext/impl/psi_d_xtr_coo_from_dia.f90 index 5fc98b827..4e19ba783 100644 --- a/ext/impl/psi_d_xtr_coo_from_dia.f90 +++ b/ext/impl/psi_d_xtr_coo_from_dia.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_xtr_dia_from_coo.f90 b/ext/impl/psi_d_xtr_dia_from_coo.f90 index cd95b64e8..3c76ddcfa 100644 --- a/ext/impl/psi_d_xtr_dia_from_coo.f90 +++ b/ext/impl/psi_d_xtr_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_xtr_ell_from_coo.f90 b/ext/impl/psi_d_xtr_ell_from_coo.f90 index ec520797d..0014ed995 100644 --- a/ext/impl/psi_d_xtr_ell_from_coo.f90 +++ b/ext/impl/psi_d_xtr_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_convert_dia_from_coo.f90 b/ext/impl/psi_s_convert_dia_from_coo.f90 index d2f587787..65946d76b 100644 --- a/ext/impl/psi_s_convert_dia_from_coo.f90 +++ b/ext/impl/psi_s_convert_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_convert_ell_from_coo.f90 b/ext/impl/psi_s_convert_ell_from_coo.f90 index ecdd9b1e6..6cd161271 100644 --- a/ext/impl/psi_s_convert_ell_from_coo.f90 +++ b/ext/impl/psi_s_convert_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_convert_hll_from_coo.f90 b/ext/impl/psi_s_convert_hll_from_coo.f90 index dcf6c4e25..b560ee761 100644 --- a/ext/impl/psi_s_convert_hll_from_coo.f90 +++ b/ext/impl/psi_s_convert_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_xtr_coo_from_dia.f90 b/ext/impl/psi_s_xtr_coo_from_dia.f90 index 3745365b4..db58cd4c1 100644 --- a/ext/impl/psi_s_xtr_coo_from_dia.f90 +++ b/ext/impl/psi_s_xtr_coo_from_dia.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_xtr_dia_from_coo.f90 b/ext/impl/psi_s_xtr_dia_from_coo.f90 index a8ee7c4b3..236c44746 100644 --- a/ext/impl/psi_s_xtr_dia_from_coo.f90 +++ b/ext/impl/psi_s_xtr_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_xtr_ell_from_coo.f90 b/ext/impl/psi_s_xtr_ell_from_coo.f90 index 0bac2ec08..eff8fe7d8 100644 --- a/ext/impl/psi_s_xtr_ell_from_coo.f90 +++ b/ext/impl/psi_s_xtr_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_convert_dia_from_coo.f90 b/ext/impl/psi_z_convert_dia_from_coo.f90 index ddc9d2fd5..34623e893 100644 --- a/ext/impl/psi_z_convert_dia_from_coo.f90 +++ b/ext/impl/psi_z_convert_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_convert_ell_from_coo.f90 b/ext/impl/psi_z_convert_ell_from_coo.f90 index 3d37c11f9..b646948db 100644 --- a/ext/impl/psi_z_convert_ell_from_coo.f90 +++ b/ext/impl/psi_z_convert_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_convert_hll_from_coo.f90 b/ext/impl/psi_z_convert_hll_from_coo.f90 index bc9fdde17..6904d3ab2 100644 --- a/ext/impl/psi_z_convert_hll_from_coo.f90 +++ b/ext/impl/psi_z_convert_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_xtr_coo_from_dia.f90 b/ext/impl/psi_z_xtr_coo_from_dia.f90 index 70d0938f6..61cc65751 100644 --- a/ext/impl/psi_z_xtr_coo_from_dia.f90 +++ b/ext/impl/psi_z_xtr_coo_from_dia.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_xtr_dia_from_coo.f90 b/ext/impl/psi_z_xtr_dia_from_coo.f90 index 6b2542c6f..bc88c174b 100644 --- a/ext/impl/psi_z_xtr_dia_from_coo.f90 +++ b/ext/impl/psi_z_xtr_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_xtr_ell_from_coo.f90 b/ext/impl/psi_z_xtr_ell_from_coo.f90 index 7133f2aee..cc018f611 100644 --- a/ext/impl/psi_z_xtr_ell_from_coo.f90 +++ b/ext/impl/psi_z_xtr_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_dia_mat_mod.f90 b/ext/psb_c_dia_mat_mod.f90 index 8311487b9..80e933376 100644 --- a/ext/psb_c_dia_mat_mod.f90 +++ b/ext/psb_c_dia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_dns_mat_mod.f90 b/ext/psb_c_dns_mat_mod.f90 index 5e5a191dd..2ff21d0ab 100644 --- a/ext/psb_c_dns_mat_mod.f90 +++ b/ext/psb_c_dns_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_ell_mat_mod.f90 b/ext/psb_c_ell_mat_mod.f90 index 6954946f5..12b8bd5b6 100644 --- a/ext/psb_c_ell_mat_mod.f90 +++ b/ext/psb_c_ell_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_hdia_mat_mod.f90 b/ext/psb_c_hdia_mat_mod.f90 index fbac05dee..5f0059999 100644 --- a/ext/psb_c_hdia_mat_mod.f90 +++ b/ext/psb_c_hdia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_hll_mat_mod.f90 b/ext/psb_c_hll_mat_mod.f90 index 966b60f56..1876ccb1e 100644 --- a/ext/psb_c_hll_mat_mod.f90 +++ b/ext/psb_c_hll_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_dia_mat_mod.f90 b/ext/psb_d_dia_mat_mod.f90 index 7df615acf..92d47f52d 100644 --- a/ext/psb_d_dia_mat_mod.f90 +++ b/ext/psb_d_dia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_dns_mat_mod.f90 b/ext/psb_d_dns_mat_mod.f90 index f8c977bce..5bc038851 100644 --- a/ext/psb_d_dns_mat_mod.f90 +++ b/ext/psb_d_dns_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_ell_mat_mod.f90 b/ext/psb_d_ell_mat_mod.f90 index cc945baf6..479695aba 100644 --- a/ext/psb_d_ell_mat_mod.f90 +++ b/ext/psb_d_ell_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_hdia_mat_mod.f90 b/ext/psb_d_hdia_mat_mod.f90 index 25bc6898c..a16f42757 100644 --- a/ext/psb_d_hdia_mat_mod.f90 +++ b/ext/psb_d_hdia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_hll_mat_mod.f90 b/ext/psb_d_hll_mat_mod.f90 index acc3b312b..5185eff44 100644 --- a/ext/psb_d_hll_mat_mod.f90 +++ b/ext/psb_d_hll_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_ext_mod.F90 b/ext/psb_ext_mod.F90 index b1dbdb59c..a7711968d 100644 --- a/ext/psb_ext_mod.F90 +++ b/ext/psb_ext_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_dia_mat_mod.f90 b/ext/psb_s_dia_mat_mod.f90 index 3a11d959f..3d59d227f 100644 --- a/ext/psb_s_dia_mat_mod.f90 +++ b/ext/psb_s_dia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_dns_mat_mod.f90 b/ext/psb_s_dns_mat_mod.f90 index e9ea5f263..e68343cef 100644 --- a/ext/psb_s_dns_mat_mod.f90 +++ b/ext/psb_s_dns_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_ell_mat_mod.f90 b/ext/psb_s_ell_mat_mod.f90 index 9e3dd8b45..5f842ecd7 100644 --- a/ext/psb_s_ell_mat_mod.f90 +++ b/ext/psb_s_ell_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_hdia_mat_mod.f90 b/ext/psb_s_hdia_mat_mod.f90 index b7b2b110d..c9b1667e8 100644 --- a/ext/psb_s_hdia_mat_mod.f90 +++ b/ext/psb_s_hdia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_hll_mat_mod.f90 b/ext/psb_s_hll_mat_mod.f90 index 735091c8b..ccb5ec907 100644 --- a/ext/psb_s_hll_mat_mod.f90 +++ b/ext/psb_s_hll_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_dia_mat_mod.f90 b/ext/psb_z_dia_mat_mod.f90 index 76d071af2..ab02e0537 100644 --- a/ext/psb_z_dia_mat_mod.f90 +++ b/ext/psb_z_dia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_dns_mat_mod.f90 b/ext/psb_z_dns_mat_mod.f90 index 6147057d7..75908a544 100644 --- a/ext/psb_z_dns_mat_mod.f90 +++ b/ext/psb_z_dns_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_ell_mat_mod.f90 b/ext/psb_z_ell_mat_mod.f90 index 0e1f0e00e..b58d5eee0 100644 --- a/ext/psb_z_ell_mat_mod.f90 +++ b/ext/psb_z_ell_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_hdia_mat_mod.f90 b/ext/psb_z_hdia_mat_mod.f90 index e7c113219..2b7f36f0f 100644 --- a/ext/psb_z_hdia_mat_mod.f90 +++ b/ext/psb_z_hdia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_hll_mat_mod.f90 b/ext/psb_z_hll_mat_mod.f90 index 98eb403f2..60d046906 100644 --- a/ext/psb_z_hll_mat_mod.f90 +++ b/ext/psb_z_hll_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_c_ext_util_mod.f90 b/ext/psi_c_ext_util_mod.f90 index e58c0d93a..734e5fe24 100644 --- a/ext/psi_c_ext_util_mod.f90 +++ b/ext/psi_c_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_d_ext_util_mod.f90 b/ext/psi_d_ext_util_mod.f90 index 07de8ad1f..5adfd4089 100644 --- a/ext/psi_d_ext_util_mod.f90 +++ b/ext/psi_d_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_ext_util_mod.f90 b/ext/psi_ext_util_mod.f90 index afb2c7498..5e85ef105 100644 --- a/ext/psi_ext_util_mod.f90 +++ b/ext/psi_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_i_ext_util_mod.f90 b/ext/psi_i_ext_util_mod.f90 index ac073f1d0..9227b07f6 100644 --- a/ext/psi_i_ext_util_mod.f90 +++ b/ext/psi_i_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_s_ext_util_mod.f90 b/ext/psi_s_ext_util_mod.f90 index 2aeefc7b9..98cebda8b 100644 --- a/ext/psi_s_ext_util_mod.f90 +++ b/ext/psi_s_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_z_ext_util_mod.f90 b/ext/psi_z_ext_util_mod.f90 index 25f1ede0d..79573c858 100644 --- a/ext/psi_z_ext_util_mod.f90 +++ b/ext/psi_z_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_cbicg.f90 b/linsolve/impl/psb_cbicg.f90 index c357054b1..da9acad76 100644 --- a/linsolve/impl/psb_cbicg.f90 +++ b/linsolve/impl/psb_cbicg.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_ccg.F90 b/linsolve/impl/psb_ccg.F90 index 0ba1b5fc2..493fa3872 100644 --- a/linsolve/impl/psb_ccg.F90 +++ b/linsolve/impl/psb_ccg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_ccgs.f90 b/linsolve/impl/psb_ccgs.f90 index f7808c0d0..0c6e0673e 100644 --- a/linsolve/impl/psb_ccgs.f90 +++ b/linsolve/impl/psb_ccgs.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_ccgstab.f90 b/linsolve/impl/psb_ccgstab.f90 index 4ccbaf7a8..088d752c5 100644 --- a/linsolve/impl/psb_ccgstab.f90 +++ b/linsolve/impl/psb_ccgstab.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_ccgstabl.f90 b/linsolve/impl/psb_ccgstabl.f90 index f1463b83d..ac713cac5 100644 --- a/linsolve/impl/psb_ccgstabl.f90 +++ b/linsolve/impl/psb_ccgstabl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_cfcg.F90 b/linsolve/impl/psb_cfcg.F90 index f28db7dea..c77191d09 100644 --- a/linsolve/impl/psb_cfcg.F90 +++ b/linsolve/impl/psb_cfcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_cgcr.f90 b/linsolve/impl/psb_cgcr.f90 index 5120b102f..7201df51d 100644 --- a/linsolve/impl/psb_cgcr.f90 +++ b/linsolve/impl/psb_cgcr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_ckrylov.f90 b/linsolve/impl/psb_ckrylov.f90 index 39f310fc8..22712da05 100644 --- a/linsolve/impl/psb_ckrylov.f90 +++ b/linsolve/impl/psb_ckrylov.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_crgmres.f90 b/linsolve/impl/psb_crgmres.f90 index e0c0b38da..673d13994 100644 --- a/linsolve/impl/psb_crgmres.f90 +++ b/linsolve/impl/psb_crgmres.f90 @@ -18,7 +18,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_crichardson.f90 b/linsolve/impl/psb_crichardson.f90 index 3eb4c2634..2ff18eb68 100644 --- a/linsolve/impl/psb_crichardson.f90 +++ b/linsolve/impl/psb_crichardson.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dbicg.f90 b/linsolve/impl/psb_dbicg.f90 index ebcc8eb90..fef0fbc2e 100644 --- a/linsolve/impl/psb_dbicg.f90 +++ b/linsolve/impl/psb_dbicg.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dcg.F90 b/linsolve/impl/psb_dcg.F90 index a59937310..1fea599ef 100644 --- a/linsolve/impl/psb_dcg.F90 +++ b/linsolve/impl/psb_dcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dcgs.f90 b/linsolve/impl/psb_dcgs.f90 index 5c2401d1a..37dde891a 100644 --- a/linsolve/impl/psb_dcgs.f90 +++ b/linsolve/impl/psb_dcgs.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dcgstab.f90 b/linsolve/impl/psb_dcgstab.f90 index 749015d75..20c5e31d2 100644 --- a/linsolve/impl/psb_dcgstab.f90 +++ b/linsolve/impl/psb_dcgstab.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dcgstabl.f90 b/linsolve/impl/psb_dcgstabl.f90 index a2ae6164b..c5a9d157f 100644 --- a/linsolve/impl/psb_dcgstabl.f90 +++ b/linsolve/impl/psb_dcgstabl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dfcg.F90 b/linsolve/impl/psb_dfcg.F90 index cb741795a..157e7f76a 100644 --- a/linsolve/impl/psb_dfcg.F90 +++ b/linsolve/impl/psb_dfcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dgcr.f90 b/linsolve/impl/psb_dgcr.f90 index cf2e2b0eb..8d59d83ab 100644 --- a/linsolve/impl/psb_dgcr.f90 +++ b/linsolve/impl/psb_dgcr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dkrylov.f90 b/linsolve/impl/psb_dkrylov.f90 index d858c2285..5963f5a8a 100644 --- a/linsolve/impl/psb_dkrylov.f90 +++ b/linsolve/impl/psb_dkrylov.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_drgmres.f90 b/linsolve/impl/psb_drgmres.f90 index e0d783822..e03e043f7 100644 --- a/linsolve/impl/psb_drgmres.f90 +++ b/linsolve/impl/psb_drgmres.f90 @@ -18,7 +18,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_drichardson.f90 b/linsolve/impl/psb_drichardson.f90 index b0a53a4b2..70b60e650 100644 --- a/linsolve/impl/psb_drichardson.f90 +++ b/linsolve/impl/psb_drichardson.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_sbicg.f90 b/linsolve/impl/psb_sbicg.f90 index 1b5f1fb89..46cde1319 100644 --- a/linsolve/impl/psb_sbicg.f90 +++ b/linsolve/impl/psb_sbicg.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_scg.F90 b/linsolve/impl/psb_scg.F90 index c116edc4e..b199284f0 100644 --- a/linsolve/impl/psb_scg.F90 +++ b/linsolve/impl/psb_scg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_scgs.f90 b/linsolve/impl/psb_scgs.f90 index 4034283e6..084b1f743 100644 --- a/linsolve/impl/psb_scgs.f90 +++ b/linsolve/impl/psb_scgs.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_scgstab.f90 b/linsolve/impl/psb_scgstab.f90 index a0b57fa8d..813bb2b5b 100644 --- a/linsolve/impl/psb_scgstab.f90 +++ b/linsolve/impl/psb_scgstab.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_scgstabl.f90 b/linsolve/impl/psb_scgstabl.f90 index e55d27467..adf304a6f 100644 --- a/linsolve/impl/psb_scgstabl.f90 +++ b/linsolve/impl/psb_scgstabl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_sfcg.F90 b/linsolve/impl/psb_sfcg.F90 index 449942cd6..9453a0651 100644 --- a/linsolve/impl/psb_sfcg.F90 +++ b/linsolve/impl/psb_sfcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_sgcr.f90 b/linsolve/impl/psb_sgcr.f90 index b2d09d3e7..bee8bdff7 100644 --- a/linsolve/impl/psb_sgcr.f90 +++ b/linsolve/impl/psb_sgcr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_skrylov.f90 b/linsolve/impl/psb_skrylov.f90 index 1a612a122..e24d7d05f 100644 --- a/linsolve/impl/psb_skrylov.f90 +++ b/linsolve/impl/psb_skrylov.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_srgmres.f90 b/linsolve/impl/psb_srgmres.f90 index 32129e35e..cf455385e 100644 --- a/linsolve/impl/psb_srgmres.f90 +++ b/linsolve/impl/psb_srgmres.f90 @@ -18,7 +18,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_srichardson.f90 b/linsolve/impl/psb_srichardson.f90 index 660778fcc..c42390839 100644 --- a/linsolve/impl/psb_srichardson.f90 +++ b/linsolve/impl/psb_srichardson.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zbicg.f90 b/linsolve/impl/psb_zbicg.f90 index 6a3e02154..7f9829599 100644 --- a/linsolve/impl/psb_zbicg.f90 +++ b/linsolve/impl/psb_zbicg.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zcg.F90 b/linsolve/impl/psb_zcg.F90 index 6ca5909c1..ceb5948e5 100644 --- a/linsolve/impl/psb_zcg.F90 +++ b/linsolve/impl/psb_zcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zcgs.f90 b/linsolve/impl/psb_zcgs.f90 index c51405452..b90af9603 100644 --- a/linsolve/impl/psb_zcgs.f90 +++ b/linsolve/impl/psb_zcgs.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zcgstab.f90 b/linsolve/impl/psb_zcgstab.f90 index e04cd7c40..1784a418f 100644 --- a/linsolve/impl/psb_zcgstab.f90 +++ b/linsolve/impl/psb_zcgstab.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zcgstabl.f90 b/linsolve/impl/psb_zcgstabl.f90 index 93abd0561..679d02ce6 100644 --- a/linsolve/impl/psb_zcgstabl.f90 +++ b/linsolve/impl/psb_zcgstabl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zfcg.F90 b/linsolve/impl/psb_zfcg.F90 index 1ab036feb..550740ff2 100644 --- a/linsolve/impl/psb_zfcg.F90 +++ b/linsolve/impl/psb_zfcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zgcr.f90 b/linsolve/impl/psb_zgcr.f90 index e48fc4c1d..2566b9e36 100644 --- a/linsolve/impl/psb_zgcr.f90 +++ b/linsolve/impl/psb_zgcr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zkrylov.f90 b/linsolve/impl/psb_zkrylov.f90 index 900e50b61..091271d15 100644 --- a/linsolve/impl/psb_zkrylov.f90 +++ b/linsolve/impl/psb_zkrylov.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zrgmres.f90 b/linsolve/impl/psb_zrgmres.f90 index c6bcc0189..1d2aa3484 100644 --- a/linsolve/impl/psb_zrgmres.f90 +++ b/linsolve/impl/psb_zrgmres.f90 @@ -18,7 +18,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zrichardson.f90 b/linsolve/impl/psb_zrichardson.f90 index 4c2bc5674..54c019a51 100644 --- a/linsolve/impl/psb_zrichardson.f90 +++ b/linsolve/impl/psb_zrichardson.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_base_linsolve_conv_mod.f90 b/linsolve/psb_base_linsolve_conv_mod.f90 index 5eca2b825..8e45614f4 100644 --- a/linsolve/psb_base_linsolve_conv_mod.f90 +++ b/linsolve/psb_base_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_c_linsolve_conv_mod.f90 b/linsolve/psb_c_linsolve_conv_mod.f90 index 73db081eb..474acfaa6 100644 --- a/linsolve/psb_c_linsolve_conv_mod.f90 +++ b/linsolve/psb_c_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_d_linsolve_conv_mod.f90 b/linsolve/psb_d_linsolve_conv_mod.f90 index ba59923f7..f92edce39 100644 --- a/linsolve/psb_d_linsolve_conv_mod.f90 +++ b/linsolve/psb_d_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_linsolve_conv_mod.f90 b/linsolve/psb_linsolve_conv_mod.f90 index 23d6c84c7..e5640eaa9 100644 --- a/linsolve/psb_linsolve_conv_mod.f90 +++ b/linsolve/psb_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_linsolve_mod.f90 b/linsolve/psb_linsolve_mod.f90 index c54326f3b..1cd324622 100644 --- a/linsolve/psb_linsolve_mod.f90 +++ b/linsolve/psb_linsolve_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_s_linsolve_conv_mod.f90 b/linsolve/psb_s_linsolve_conv_mod.f90 index 5de6ebb62..8cac66a41 100644 --- a/linsolve/psb_s_linsolve_conv_mod.f90 +++ b/linsolve/psb_s_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_z_linsolve_conv_mod.f90 b/linsolve/psb_z_linsolve_conv_mod.f90 index 6c6276ff6..d6082262c 100644 --- a/linsolve/psb_z_linsolve_conv_mod.f90 +++ b/linsolve/psb_z_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/openacc/impl/Makefile b/openacc/impl/Makefile old mode 100755 new mode 100644 diff --git a/prec/impl/psb_c_ainv_bld.f90 b/prec/impl/psb_c_ainv_bld.f90 index 5cf2a45e9..f46d6a76a 100644 --- a/prec/impl/psb_c_ainv_bld.f90 +++ b/prec/impl/psb_c_ainv_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_bjacprec_impl.f90 b/prec/impl/psb_c_bjacprec_impl.f90 index 32baf385c..59b019331 100644 --- a/prec/impl/psb_c_bjacprec_impl.f90 +++ b/prec/impl/psb_c_bjacprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_diagprec_impl.f90 b/prec/impl/psb_c_diagprec_impl.f90 index c16f94658..4e7c766a4 100644 --- a/prec/impl/psb_c_diagprec_impl.f90 +++ b/prec/impl/psb_c_diagprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_ilu0_fact.f90 b/prec/impl/psb_c_ilu0_fact.f90 index c016359fd..fc4c6182b 100644 --- a/prec/impl/psb_c_ilu0_fact.f90 +++ b/prec/impl/psb_c_ilu0_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_iluk_fact.f90 b/prec/impl/psb_c_iluk_fact.f90 index 6c6d8a5f3..2297f6d91 100644 --- a/prec/impl/psb_c_iluk_fact.f90 +++ b/prec/impl/psb_c_iluk_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_ilut_fact.f90 b/prec/impl/psb_c_ilut_fact.f90 index 8421ee1c3..03a5bb027 100644 --- a/prec/impl/psb_c_ilut_fact.f90 +++ b/prec/impl/psb_c_ilut_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_invk_fact.f90 b/prec/impl/psb_c_invk_fact.f90 index 5c047b181..6c93d11a0 100644 --- a/prec/impl/psb_c_invk_fact.f90 +++ b/prec/impl/psb_c_invk_fact.f90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_invt_fact.f90 b/prec/impl/psb_c_invt_fact.f90 index 73e242f6d..db7f0f110 100644 --- a/prec/impl/psb_c_invt_fact.f90 +++ b/prec/impl/psb_c_invt_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_nullprec_impl.f90 b/prec/impl/psb_c_nullprec_impl.f90 index 9d87522ad..f5ed4e8ed 100644 --- a/prec/impl/psb_c_nullprec_impl.f90 +++ b/prec/impl/psb_c_nullprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_prec_type_impl.f90 b/prec/impl/psb_c_prec_type_impl.f90 index e82d7dca0..dc7f3814d 100644 --- a/prec/impl/psb_c_prec_type_impl.f90 +++ b/prec/impl/psb_c_prec_type_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -45,7 +45,7 @@ !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_sp_drop.f90 b/prec/impl/psb_c_sp_drop.f90 index fda59cc71..1ab54a864 100644 --- a/prec/impl/psb_c_sp_drop.f90 +++ b/prec/impl/psb_c_sp_drop.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_sparsify.f90 b/prec/impl/psb_c_sparsify.f90 index 4962f337d..f0e8c3bb3 100644 --- a/prec/impl/psb_c_sparsify.f90 +++ b/prec/impl/psb_c_sparsify.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_cprecbld.f90 b/prec/impl/psb_cprecbld.f90 index 3c3bf8bee..a9e9f7d72 100644 --- a/prec/impl/psb_cprecbld.f90 +++ b/prec/impl/psb_cprecbld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_cprecinit.f90 b/prec/impl/psb_cprecinit.f90 index 63b4d51bb..efa9aec2e 100644 --- a/prec/impl/psb_cprecinit.f90 +++ b/prec/impl/psb_cprecinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_crwclip.f90 b/prec/impl/psb_crwclip.f90 index ade1171f6..de2b4ee42 100644 --- a/prec/impl/psb_crwclip.f90 +++ b/prec/impl/psb_crwclip.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_llk.F90 b/prec/impl/psb_csparse_biconjg_llk.F90 index 98110cd1c..00da11c71 100644 --- a/prec/impl/psb_csparse_biconjg_llk.F90 +++ b/prec/impl/psb_csparse_biconjg_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_llk_noth.F90 b/prec/impl/psb_csparse_biconjg_llk_noth.F90 index 5fe472eb8..f148fea13 100644 --- a/prec/impl/psb_csparse_biconjg_llk_noth.F90 +++ b/prec/impl/psb_csparse_biconjg_llk_noth.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_mlk.F90 b/prec/impl/psb_csparse_biconjg_mlk.F90 index 58838c82b..b8e67c476 100644 --- a/prec/impl/psb_csparse_biconjg_mlk.F90 +++ b/prec/impl/psb_csparse_biconjg_mlk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_s_ft_llk.F90 b/prec/impl/psb_csparse_biconjg_s_ft_llk.F90 index 64af2ed52..0c9195018 100644 --- a/prec/impl/psb_csparse_biconjg_s_ft_llk.F90 +++ b/prec/impl/psb_csparse_biconjg_s_ft_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_s_llk.F90 b/prec/impl/psb_csparse_biconjg_s_llk.F90 index b38b2a0c8..b9974c40a 100644 --- a/prec/impl/psb_csparse_biconjg_s_llk.F90 +++ b/prec/impl/psb_csparse_biconjg_s_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_ainv_bld.f90 b/prec/impl/psb_d_ainv_bld.f90 index 6c175d25a..931c2ec89 100644 --- a/prec/impl/psb_d_ainv_bld.f90 +++ b/prec/impl/psb_d_ainv_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_bjacprec_impl.f90 b/prec/impl/psb_d_bjacprec_impl.f90 index ec866dbe1..9f5b75a79 100644 --- a/prec/impl/psb_d_bjacprec_impl.f90 +++ b/prec/impl/psb_d_bjacprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_diagprec_impl.f90 b/prec/impl/psb_d_diagprec_impl.f90 index 3a6e32f9e..ec624908c 100644 --- a/prec/impl/psb_d_diagprec_impl.f90 +++ b/prec/impl/psb_d_diagprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_ilu0_fact.f90 b/prec/impl/psb_d_ilu0_fact.f90 index dde22249e..f9562c530 100644 --- a/prec/impl/psb_d_ilu0_fact.f90 +++ b/prec/impl/psb_d_ilu0_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_iluk_fact.f90 b/prec/impl/psb_d_iluk_fact.f90 index dc837ba91..5afeb786c 100644 --- a/prec/impl/psb_d_iluk_fact.f90 +++ b/prec/impl/psb_d_iluk_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_ilut_fact.f90 b/prec/impl/psb_d_ilut_fact.f90 index cd185e806..8d221a020 100644 --- a/prec/impl/psb_d_ilut_fact.f90 +++ b/prec/impl/psb_d_ilut_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_invk_fact.f90 b/prec/impl/psb_d_invk_fact.f90 index f1a09985d..14c0a1c9e 100644 --- a/prec/impl/psb_d_invk_fact.f90 +++ b/prec/impl/psb_d_invk_fact.f90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_invt_fact.f90 b/prec/impl/psb_d_invt_fact.f90 index 83aa73ffc..5aaa24faf 100644 --- a/prec/impl/psb_d_invt_fact.f90 +++ b/prec/impl/psb_d_invt_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_nullprec_impl.f90 b/prec/impl/psb_d_nullprec_impl.f90 index b98229328..dce9a50ee 100644 --- a/prec/impl/psb_d_nullprec_impl.f90 +++ b/prec/impl/psb_d_nullprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_prec_type_impl.f90 b/prec/impl/psb_d_prec_type_impl.f90 index 69e480797..7ef6d2bb4 100644 --- a/prec/impl/psb_d_prec_type_impl.f90 +++ b/prec/impl/psb_d_prec_type_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -45,7 +45,7 @@ !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_sp_drop.f90 b/prec/impl/psb_d_sp_drop.f90 index 67c49b6f5..84551b855 100644 --- a/prec/impl/psb_d_sp_drop.f90 +++ b/prec/impl/psb_d_sp_drop.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_sparsify.f90 b/prec/impl/psb_d_sparsify.f90 index de4628ba1..e2d378a82 100644 --- a/prec/impl/psb_d_sparsify.f90 +++ b/prec/impl/psb_d_sparsify.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dprecbld.f90 b/prec/impl/psb_dprecbld.f90 index c37a05e9f..4413ddc9a 100644 --- a/prec/impl/psb_dprecbld.f90 +++ b/prec/impl/psb_dprecbld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dprecinit.f90 b/prec/impl/psb_dprecinit.f90 index 260a4f511..fe9f6e9d0 100644 --- a/prec/impl/psb_dprecinit.f90 +++ b/prec/impl/psb_dprecinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_drwclip.f90 b/prec/impl/psb_drwclip.f90 index 97aea4289..57872c7d0 100644 --- a/prec/impl/psb_drwclip.f90 +++ b/prec/impl/psb_drwclip.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_llk.F90 b/prec/impl/psb_dsparse_biconjg_llk.F90 index 919f64ab1..2459d234b 100644 --- a/prec/impl/psb_dsparse_biconjg_llk.F90 +++ b/prec/impl/psb_dsparse_biconjg_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_llk_noth.F90 b/prec/impl/psb_dsparse_biconjg_llk_noth.F90 index 447cb68f2..764eadab5 100644 --- a/prec/impl/psb_dsparse_biconjg_llk_noth.F90 +++ b/prec/impl/psb_dsparse_biconjg_llk_noth.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_mlk.F90 b/prec/impl/psb_dsparse_biconjg_mlk.F90 index aae56a5a9..faf5e5073 100644 --- a/prec/impl/psb_dsparse_biconjg_mlk.F90 +++ b/prec/impl/psb_dsparse_biconjg_mlk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 b/prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 index fbf4bc025..07c87d40c 100644 --- a/prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 +++ b/prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_s_llk.F90 b/prec/impl/psb_dsparse_biconjg_s_llk.F90 index 72257d445..78016233a 100644 --- a/prec/impl/psb_dsparse_biconjg_s_llk.F90 +++ b/prec/impl/psb_dsparse_biconjg_s_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_ainv_bld.f90 b/prec/impl/psb_s_ainv_bld.f90 index 0ed9e9e84..07d469fa3 100644 --- a/prec/impl/psb_s_ainv_bld.f90 +++ b/prec/impl/psb_s_ainv_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_bjacprec_impl.f90 b/prec/impl/psb_s_bjacprec_impl.f90 index d4a4fd171..a477c663d 100644 --- a/prec/impl/psb_s_bjacprec_impl.f90 +++ b/prec/impl/psb_s_bjacprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_diagprec_impl.f90 b/prec/impl/psb_s_diagprec_impl.f90 index 4074cbff9..8e93f9647 100644 --- a/prec/impl/psb_s_diagprec_impl.f90 +++ b/prec/impl/psb_s_diagprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_ilu0_fact.f90 b/prec/impl/psb_s_ilu0_fact.f90 index d9ce1298e..590ae1d92 100644 --- a/prec/impl/psb_s_ilu0_fact.f90 +++ b/prec/impl/psb_s_ilu0_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_iluk_fact.f90 b/prec/impl/psb_s_iluk_fact.f90 index 67fb8ada2..67f32f1f5 100644 --- a/prec/impl/psb_s_iluk_fact.f90 +++ b/prec/impl/psb_s_iluk_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_ilut_fact.f90 b/prec/impl/psb_s_ilut_fact.f90 index 3d1111033..fdb2b3367 100644 --- a/prec/impl/psb_s_ilut_fact.f90 +++ b/prec/impl/psb_s_ilut_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_invk_fact.f90 b/prec/impl/psb_s_invk_fact.f90 index 4e7bb755a..d5b85a0b1 100644 --- a/prec/impl/psb_s_invk_fact.f90 +++ b/prec/impl/psb_s_invk_fact.f90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_invt_fact.f90 b/prec/impl/psb_s_invt_fact.f90 index f311860da..2df810028 100644 --- a/prec/impl/psb_s_invt_fact.f90 +++ b/prec/impl/psb_s_invt_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_nullprec_impl.f90 b/prec/impl/psb_s_nullprec_impl.f90 index f95c34fd2..55870f860 100644 --- a/prec/impl/psb_s_nullprec_impl.f90 +++ b/prec/impl/psb_s_nullprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_prec_type_impl.f90 b/prec/impl/psb_s_prec_type_impl.f90 index 4272ba753..1289d2689 100644 --- a/prec/impl/psb_s_prec_type_impl.f90 +++ b/prec/impl/psb_s_prec_type_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -45,7 +45,7 @@ !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_sp_drop.f90 b/prec/impl/psb_s_sp_drop.f90 index bc297d085..104f88f81 100644 --- a/prec/impl/psb_s_sp_drop.f90 +++ b/prec/impl/psb_s_sp_drop.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_sparsify.f90 b/prec/impl/psb_s_sparsify.f90 index f829fbf21..4a722d805 100644 --- a/prec/impl/psb_s_sparsify.f90 +++ b/prec/impl/psb_s_sparsify.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_sprecbld.f90 b/prec/impl/psb_sprecbld.f90 index a878c16c2..5a8df3f87 100644 --- a/prec/impl/psb_sprecbld.f90 +++ b/prec/impl/psb_sprecbld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_sprecinit.f90 b/prec/impl/psb_sprecinit.f90 index 32641bbbd..9d1265695 100644 --- a/prec/impl/psb_sprecinit.f90 +++ b/prec/impl/psb_sprecinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_srwclip.f90 b/prec/impl/psb_srwclip.f90 index f57207d7e..ab943aa46 100644 --- a/prec/impl/psb_srwclip.f90 +++ b/prec/impl/psb_srwclip.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_llk.F90 b/prec/impl/psb_ssparse_biconjg_llk.F90 index 6269cdc84..b533d5ef4 100644 --- a/prec/impl/psb_ssparse_biconjg_llk.F90 +++ b/prec/impl/psb_ssparse_biconjg_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_llk_noth.F90 b/prec/impl/psb_ssparse_biconjg_llk_noth.F90 index 0683750ad..b2728301f 100644 --- a/prec/impl/psb_ssparse_biconjg_llk_noth.F90 +++ b/prec/impl/psb_ssparse_biconjg_llk_noth.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_mlk.F90 b/prec/impl/psb_ssparse_biconjg_mlk.F90 index 7fc2db48c..c8236cca4 100644 --- a/prec/impl/psb_ssparse_biconjg_mlk.F90 +++ b/prec/impl/psb_ssparse_biconjg_mlk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 b/prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 index e8287e84b..4b1fa37bc 100644 --- a/prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 +++ b/prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_s_llk.F90 b/prec/impl/psb_ssparse_biconjg_s_llk.F90 index 42e710895..49ab6e6aa 100644 --- a/prec/impl/psb_ssparse_biconjg_s_llk.F90 +++ b/prec/impl/psb_ssparse_biconjg_s_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_ainv_bld.f90 b/prec/impl/psb_z_ainv_bld.f90 index 4762a5f75..c147c5329 100644 --- a/prec/impl/psb_z_ainv_bld.f90 +++ b/prec/impl/psb_z_ainv_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_bjacprec_impl.f90 b/prec/impl/psb_z_bjacprec_impl.f90 index 3533f1e31..91e833a45 100644 --- a/prec/impl/psb_z_bjacprec_impl.f90 +++ b/prec/impl/psb_z_bjacprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_diagprec_impl.f90 b/prec/impl/psb_z_diagprec_impl.f90 index 15776b526..6940af2a0 100644 --- a/prec/impl/psb_z_diagprec_impl.f90 +++ b/prec/impl/psb_z_diagprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_ilu0_fact.f90 b/prec/impl/psb_z_ilu0_fact.f90 index 997a5e054..6039e7ffd 100644 --- a/prec/impl/psb_z_ilu0_fact.f90 +++ b/prec/impl/psb_z_ilu0_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_iluk_fact.f90 b/prec/impl/psb_z_iluk_fact.f90 index a5540880b..2d30eff99 100644 --- a/prec/impl/psb_z_iluk_fact.f90 +++ b/prec/impl/psb_z_iluk_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_ilut_fact.f90 b/prec/impl/psb_z_ilut_fact.f90 index 0c2785157..ad2467841 100644 --- a/prec/impl/psb_z_ilut_fact.f90 +++ b/prec/impl/psb_z_ilut_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_invk_fact.f90 b/prec/impl/psb_z_invk_fact.f90 index 99489acd1..21d3b6091 100644 --- a/prec/impl/psb_z_invk_fact.f90 +++ b/prec/impl/psb_z_invk_fact.f90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_invt_fact.f90 b/prec/impl/psb_z_invt_fact.f90 index bed713aeb..c3708979c 100644 --- a/prec/impl/psb_z_invt_fact.f90 +++ b/prec/impl/psb_z_invt_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_nullprec_impl.f90 b/prec/impl/psb_z_nullprec_impl.f90 index 0306f35dc..86d5d267a 100644 --- a/prec/impl/psb_z_nullprec_impl.f90 +++ b/prec/impl/psb_z_nullprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_prec_type_impl.f90 b/prec/impl/psb_z_prec_type_impl.f90 index 00f0b05e1..7ed0d2332 100644 --- a/prec/impl/psb_z_prec_type_impl.f90 +++ b/prec/impl/psb_z_prec_type_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -45,7 +45,7 @@ !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_sp_drop.f90 b/prec/impl/psb_z_sp_drop.f90 index 754c76ccb..855deea45 100644 --- a/prec/impl/psb_z_sp_drop.f90 +++ b/prec/impl/psb_z_sp_drop.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_sparsify.f90 b/prec/impl/psb_z_sparsify.f90 index fe29230f2..e83ffa28a 100644 --- a/prec/impl/psb_z_sparsify.f90 +++ b/prec/impl/psb_z_sparsify.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zprecbld.f90 b/prec/impl/psb_zprecbld.f90 index 3c5849475..d1ef268fb 100644 --- a/prec/impl/psb_zprecbld.f90 +++ b/prec/impl/psb_zprecbld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zprecinit.f90 b/prec/impl/psb_zprecinit.f90 index 167a43ecc..1746a8881 100644 --- a/prec/impl/psb_zprecinit.f90 +++ b/prec/impl/psb_zprecinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zrwclip.f90 b/prec/impl/psb_zrwclip.f90 index 574ebcf82..287a08116 100644 --- a/prec/impl/psb_zrwclip.f90 +++ b/prec/impl/psb_zrwclip.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_llk.F90 b/prec/impl/psb_zsparse_biconjg_llk.F90 index 2d3a90cbe..c39003b09 100644 --- a/prec/impl/psb_zsparse_biconjg_llk.F90 +++ b/prec/impl/psb_zsparse_biconjg_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_llk_noth.F90 b/prec/impl/psb_zsparse_biconjg_llk_noth.F90 index 65975a246..7f93208a6 100644 --- a/prec/impl/psb_zsparse_biconjg_llk_noth.F90 +++ b/prec/impl/psb_zsparse_biconjg_llk_noth.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_mlk.F90 b/prec/impl/psb_zsparse_biconjg_mlk.F90 index 52c30c2a9..49a4a2af9 100644 --- a/prec/impl/psb_zsparse_biconjg_mlk.F90 +++ b/prec/impl/psb_zsparse_biconjg_mlk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 b/prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 index 541a755c1..37c89f87d 100644 --- a/prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 +++ b/prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_s_llk.F90 b/prec/impl/psb_zsparse_biconjg_s_llk.F90 index e4d6624a1..98130285a 100644 --- a/prec/impl/psb_zsparse_biconjg_s_llk.F90 +++ b/prec/impl/psb_zsparse_biconjg_s_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_ainv_fact_mod.f90 b/prec/psb_c_ainv_fact_mod.f90 index 200ff5616..f248d97f7 100644 --- a/prec/psb_c_ainv_fact_mod.f90 +++ b/prec/psb_c_ainv_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_ainv_tools_mod.f90 b/prec/psb_c_ainv_tools_mod.f90 index a68d6d695..3f2f14984 100644 --- a/prec/psb_c_ainv_tools_mod.f90 +++ b/prec/psb_c_ainv_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_base_prec_mod.f90 b/prec/psb_c_base_prec_mod.f90 index 4358d5c2a..e0ff73da6 100644 --- a/prec/psb_c_base_prec_mod.f90 +++ b/prec/psb_c_base_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_biconjg_mod.F90 b/prec/psb_c_biconjg_mod.F90 index e6fdaa95e..c2cdd7224 100644 --- a/prec/psb_c_biconjg_mod.F90 +++ b/prec/psb_c_biconjg_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,7 +83,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_bjacprec.f90 b/prec/psb_c_bjacprec.f90 index 8d6893522..a96be3093 100644 --- a/prec/psb_c_bjacprec.f90 +++ b/prec/psb_c_bjacprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_diagprec.f90 b/prec/psb_c_diagprec.f90 index 9af9e2f97..af4b8c15a 100644 --- a/prec/psb_c_diagprec.f90 +++ b/prec/psb_c_diagprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_ilu_fact_mod.f90 b/prec/psb_c_ilu_fact_mod.f90 index 0fae1fc5f..51aaaa2cc 100644 --- a/prec/psb_c_ilu_fact_mod.f90 +++ b/prec/psb_c_ilu_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_invk_fact_mod.f90 b/prec/psb_c_invk_fact_mod.f90 index 620a8adf7..2df812d46 100644 --- a/prec/psb_c_invk_fact_mod.f90 +++ b/prec/psb_c_invk_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_invt_fact_mod.f90 b/prec/psb_c_invt_fact_mod.f90 index 841c39b1b..43a904918 100644 --- a/prec/psb_c_invt_fact_mod.f90 +++ b/prec/psb_c_invt_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_nullprec.f90 b/prec/psb_c_nullprec.f90 index 56bbca583..5754b8b56 100644 --- a/prec/psb_c_nullprec.f90 +++ b/prec/psb_c_nullprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_prec_mod.f90 b/prec/psb_c_prec_mod.f90 index 8d9c9d1d5..c27187082 100644 --- a/prec/psb_c_prec_mod.f90 +++ b/prec/psb_c_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_prec_type.f90 b/prec/psb_c_prec_type.f90 index 9c5e1cdc8..3a4c05569 100644 --- a/prec/psb_c_prec_type.f90 +++ b/prec/psb_c_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_ainv_fact_mod.f90 b/prec/psb_d_ainv_fact_mod.f90 index 8eb6fbc87..198280736 100644 --- a/prec/psb_d_ainv_fact_mod.f90 +++ b/prec/psb_d_ainv_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_ainv_tools_mod.f90 b/prec/psb_d_ainv_tools_mod.f90 index 7329533b7..546334440 100644 --- a/prec/psb_d_ainv_tools_mod.f90 +++ b/prec/psb_d_ainv_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_base_prec_mod.f90 b/prec/psb_d_base_prec_mod.f90 index e38691939..e47e77465 100644 --- a/prec/psb_d_base_prec_mod.f90 +++ b/prec/psb_d_base_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_biconjg_mod.F90 b/prec/psb_d_biconjg_mod.F90 index 696ecbaa9..eb6579e0b 100644 --- a/prec/psb_d_biconjg_mod.F90 +++ b/prec/psb_d_biconjg_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,7 +83,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_bjacprec.f90 b/prec/psb_d_bjacprec.f90 index 6ca35ec8c..a9e1edc2d 100644 --- a/prec/psb_d_bjacprec.f90 +++ b/prec/psb_d_bjacprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_diagprec.f90 b/prec/psb_d_diagprec.f90 index 268b104c4..b1dcb7fa2 100644 --- a/prec/psb_d_diagprec.f90 +++ b/prec/psb_d_diagprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_ilu_fact_mod.f90 b/prec/psb_d_ilu_fact_mod.f90 index 6354573d0..77cefb352 100644 --- a/prec/psb_d_ilu_fact_mod.f90 +++ b/prec/psb_d_ilu_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_invk_fact_mod.f90 b/prec/psb_d_invk_fact_mod.f90 index 2bd97198c..fa54e5db4 100644 --- a/prec/psb_d_invk_fact_mod.f90 +++ b/prec/psb_d_invk_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_invt_fact_mod.f90 b/prec/psb_d_invt_fact_mod.f90 index f38c1c2b5..55a2bc479 100644 --- a/prec/psb_d_invt_fact_mod.f90 +++ b/prec/psb_d_invt_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_nullprec.f90 b/prec/psb_d_nullprec.f90 index 7e94e0ef6..27b64d700 100644 --- a/prec/psb_d_nullprec.f90 +++ b/prec/psb_d_nullprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_prec_mod.f90 b/prec/psb_d_prec_mod.f90 index 3f1a59d8a..23a3f3523 100644 --- a/prec/psb_d_prec_mod.f90 +++ b/prec/psb_d_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_prec_type.f90 b/prec/psb_d_prec_type.f90 index 708b33f33..8d9cb8d70 100644 --- a/prec/psb_d_prec_type.f90 +++ b/prec/psb_d_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_prec_const_mod.f90 b/prec/psb_prec_const_mod.f90 index d74c5bf0e..9ad231cea 100644 --- a/prec/psb_prec_const_mod.f90 +++ b/prec/psb_prec_const_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_prec_mod.f90 b/prec/psb_prec_mod.f90 index 86bf50581..00ecb904e 100644 --- a/prec/psb_prec_mod.f90 +++ b/prec/psb_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_prec_type.f90 b/prec/psb_prec_type.f90 index 0c8212462..9d8edfafd 100644 --- a/prec/psb_prec_type.f90 +++ b/prec/psb_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_ainv_fact_mod.f90 b/prec/psb_s_ainv_fact_mod.f90 index bc7f1d126..02a59b1a5 100644 --- a/prec/psb_s_ainv_fact_mod.f90 +++ b/prec/psb_s_ainv_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_ainv_tools_mod.f90 b/prec/psb_s_ainv_tools_mod.f90 index caa501641..ff00548ac 100644 --- a/prec/psb_s_ainv_tools_mod.f90 +++ b/prec/psb_s_ainv_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_base_prec_mod.f90 b/prec/psb_s_base_prec_mod.f90 index 36af2787a..b2f9bb5bd 100644 --- a/prec/psb_s_base_prec_mod.f90 +++ b/prec/psb_s_base_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_biconjg_mod.F90 b/prec/psb_s_biconjg_mod.F90 index 46fe3a0a5..63eb7ad80 100644 --- a/prec/psb_s_biconjg_mod.F90 +++ b/prec/psb_s_biconjg_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,7 +83,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_bjacprec.f90 b/prec/psb_s_bjacprec.f90 index 5173ddd20..21e97133c 100644 --- a/prec/psb_s_bjacprec.f90 +++ b/prec/psb_s_bjacprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_diagprec.f90 b/prec/psb_s_diagprec.f90 index 022d831d5..3eca21d00 100644 --- a/prec/psb_s_diagprec.f90 +++ b/prec/psb_s_diagprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_ilu_fact_mod.f90 b/prec/psb_s_ilu_fact_mod.f90 index 4021adc9b..c5fe00d4e 100644 --- a/prec/psb_s_ilu_fact_mod.f90 +++ b/prec/psb_s_ilu_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_invk_fact_mod.f90 b/prec/psb_s_invk_fact_mod.f90 index 6b0d35531..835a39d3b 100644 --- a/prec/psb_s_invk_fact_mod.f90 +++ b/prec/psb_s_invk_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_invt_fact_mod.f90 b/prec/psb_s_invt_fact_mod.f90 index 2c9ce38c6..aa27ab4c1 100644 --- a/prec/psb_s_invt_fact_mod.f90 +++ b/prec/psb_s_invt_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_nullprec.f90 b/prec/psb_s_nullprec.f90 index 9907eb7ab..9f414d996 100644 --- a/prec/psb_s_nullprec.f90 +++ b/prec/psb_s_nullprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_prec_mod.f90 b/prec/psb_s_prec_mod.f90 index 858db9ecf..cc8b1130c 100644 --- a/prec/psb_s_prec_mod.f90 +++ b/prec/psb_s_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_prec_type.f90 b/prec/psb_s_prec_type.f90 index 9b6ee231b..236ffe83d 100644 --- a/prec/psb_s_prec_type.f90 +++ b/prec/psb_s_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_ainv_fact_mod.f90 b/prec/psb_z_ainv_fact_mod.f90 index 490fe1322..77db6e75b 100644 --- a/prec/psb_z_ainv_fact_mod.f90 +++ b/prec/psb_z_ainv_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_ainv_tools_mod.f90 b/prec/psb_z_ainv_tools_mod.f90 index f611c2a73..66650b817 100644 --- a/prec/psb_z_ainv_tools_mod.f90 +++ b/prec/psb_z_ainv_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_base_prec_mod.f90 b/prec/psb_z_base_prec_mod.f90 index ddf67630d..46f9fe59e 100644 --- a/prec/psb_z_base_prec_mod.f90 +++ b/prec/psb_z_base_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_biconjg_mod.F90 b/prec/psb_z_biconjg_mod.F90 index bb193f577..8a7db5fd1 100644 --- a/prec/psb_z_biconjg_mod.F90 +++ b/prec/psb_z_biconjg_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,7 +83,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_bjacprec.f90 b/prec/psb_z_bjacprec.f90 index d8ff09bba..bf8432192 100644 --- a/prec/psb_z_bjacprec.f90 +++ b/prec/psb_z_bjacprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_diagprec.f90 b/prec/psb_z_diagprec.f90 index 26ae3c383..377c98485 100644 --- a/prec/psb_z_diagprec.f90 +++ b/prec/psb_z_diagprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_ilu_fact_mod.f90 b/prec/psb_z_ilu_fact_mod.f90 index 4793b43bd..b8658d3a4 100644 --- a/prec/psb_z_ilu_fact_mod.f90 +++ b/prec/psb_z_ilu_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_invk_fact_mod.f90 b/prec/psb_z_invk_fact_mod.f90 index 0a1e5fafb..6b83e5ffd 100644 --- a/prec/psb_z_invk_fact_mod.f90 +++ b/prec/psb_z_invk_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_invt_fact_mod.f90 b/prec/psb_z_invt_fact_mod.f90 index 1cdf32f48..f90f2d04c 100644 --- a/prec/psb_z_invt_fact_mod.f90 +++ b/prec/psb_z_invt_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_nullprec.f90 b/prec/psb_z_nullprec.f90 index 56b5329ff..2b8c0acb1 100644 --- a/prec/psb_z_nullprec.f90 +++ b/prec/psb_z_nullprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_prec_mod.f90 b/prec/psb_z_prec_mod.f90 index 1f0909aae..95cc5dd68 100644 --- a/prec/psb_z_prec_mod.f90 +++ b/prec/psb_z_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_prec_type.f90 b/prec/psb_z_prec_type.f90 index 7fa396ed4..f159df680 100644 --- a/prec/psb_z_prec_type.f90 +++ b/prec/psb_z_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/rsb/Makefile b/rsb/Makefile old mode 100755 new mode 100644 diff --git a/rsb/impl/Makefile b/rsb/impl/Makefile old mode 100755 new mode 100644 diff --git a/rsb/impl/psb_d_cp_rsb_from_coo.F90 b/rsb/impl/psb_d_cp_rsb_from_coo.F90 index 145928779..6d2f995ee 100644 --- a/rsb/impl/psb_d_cp_rsb_from_coo.F90 +++ b/rsb/impl/psb_d_cp_rsb_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/rsb/impl/psb_d_cp_rsb_to_coo.f90 b/rsb/impl/psb_d_cp_rsb_to_coo.f90 index 3747100ff..d37147ac0 100644 --- a/rsb/impl/psb_d_cp_rsb_to_coo.f90 +++ b/rsb/impl/psb_d_cp_rsb_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/rsb/impl/psb_d_mv_rsb_from_coo.f90 b/rsb/impl/psb_d_mv_rsb_from_coo.f90 index 9de74ec77..4f71b4c82 100644 --- a/rsb/impl/psb_d_mv_rsb_from_coo.f90 +++ b/rsb/impl/psb_d_mv_rsb_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/rsb/impl/psb_d_rsb_csmv.F90 b/rsb/impl/psb_d_rsb_csmv.F90 index f5dbba97a..817447600 100644 --- a/rsb/impl/psb_d_rsb_csmv.F90 +++ b/rsb/impl/psb_d_rsb_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/rsb/psb_d_rsb_mat_mod.f90 b/rsb/psb_d_rsb_mat_mod.f90 index e06f8e1d4..64356b443 100644 --- a/rsb/psb_d_rsb_mat_mod.f90 +++ b/rsb/psb_d_rsb_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/rsb/psb_rsb_mod.F90 b/rsb/psb_rsb_mod.F90 index 73db825a2..caec384c2 100644 --- a/rsb/psb_rsb_mod.F90 +++ b/rsb/psb_rsb_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/rsb/psb_rsb_penv_mod.F90 b/rsb/psb_rsb_penv_mod.F90 index 12a56d838..cf57df567 100644 --- a/rsb/psb_rsb_penv_mod.F90 +++ b/rsb/psb_rsb_penv_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/rsb/rsb_int.c b/rsb/rsb_int.c index dc4a80269..2143ee464 100644 --- a/rsb/rsb_int.c +++ b/rsb/rsb_int.c @@ -14,7 +14,7 @@ /* documentation and/or other materials provided with the distribution. */ /* 3. The name of the PSBLAS group or the names of its contributors may */ /* not be used to endorse or promote products derived from this */ - /* software without specific written permission. */ + /* software without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ diff --git a/rsb/rsb_mod.F90 b/rsb/rsb_mod.F90 index e52526546..42a567396 100644 --- a/rsb/rsb_mod.F90 +++ b/rsb/rsb_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/computational_routines/geaxpby/autotest.sh b/test/computational_routines/geaxpby/autotest.sh old mode 100755 new mode 100644 diff --git a/test/computational_routines/gedot/autotest.sh b/test/computational_routines/gedot/autotest.sh old mode 100755 new mode 100644 diff --git a/test/computational_routines/spmm/spmm_checker b/test/computational_routines/spmm/spmm_checker old mode 100755 new mode 100644 diff --git a/test/computational_routines/test.sh b/test/computational_routines/test.sh old mode 100755 new mode 100644 diff --git a/test/cudakern/Makefile b/test/cudakern/Makefile old mode 100755 new mode 100644 diff --git a/test/cudakern/data_input.f90 b/test/cudakern/data_input.f90 index 274cb7ad5..b63792c39 100644 --- a/test/cudakern/data_input.f90 +++ b/test/cudakern/data_input.f90 @@ -21,7 +21,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/cudakern/dpdegenmv.F90 b/test/cudakern/dpdegenmv.F90 index d97a06aae..bd700012d 100644 --- a/test/cudakern/dpdegenmv.F90 +++ b/test/cudakern/dpdegenmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/cudakern/spdegenmv.F90 b/test/cudakern/spdegenmv.F90 index 7e8280111..7e7c4384a 100644 --- a/test/cudakern/spdegenmv.F90 +++ b/test/cudakern/spdegenmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/fileread/getp.f90 b/test/fileread/getp.f90 index 2a32f7de7..32cb3de11 100644 --- a/test/fileread/getp.f90 +++ b/test/fileread/getp.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/fileread/psb_cf_sample.f90 b/test/fileread/psb_cf_sample.f90 index 9fd965aea..426d03d22 100644 --- a/test/fileread/psb_cf_sample.f90 +++ b/test/fileread/psb_cf_sample.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/fileread/psb_df_sample.f90 b/test/fileread/psb_df_sample.f90 index b07e4ede5..f2c5257dc 100644 --- a/test/fileread/psb_df_sample.f90 +++ b/test/fileread/psb_df_sample.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/fileread/psb_sf_sample.f90 b/test/fileread/psb_sf_sample.f90 index 289df307c..5b5327567 100644 --- a/test/fileread/psb_sf_sample.f90 +++ b/test/fileread/psb_sf_sample.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/fileread/psb_zf_sample.f90 b/test/fileread/psb_zf_sample.f90 index b8385922d..91af6a425 100644 --- a/test/fileread/psb_zf_sample.f90 +++ b/test/fileread/psb_zf_sample.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/kernel/d_file_spmv.f90 b/test/kernel/d_file_spmv.f90 index 40a799828..e4b4bd4e0 100644 --- a/test/kernel/d_file_spmv.f90 +++ b/test/kernel/d_file_spmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/kernel/pdgenspmv.F90 b/test/kernel/pdgenspmv.F90 index 736c1eeee..fa8bd0d40 100644 --- a/test/kernel/pdgenspmv.F90 +++ b/test/kernel/pdgenspmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/kernel/s_file_spmv.f90 b/test/kernel/s_file_spmv.f90 index ebbb85cde..4843bd21e 100644 --- a/test/kernel/s_file_spmv.f90 +++ b/test/kernel/s_file_spmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/kernel/vecoperation.f90 b/test/kernel/vecoperation.f90 index 3860a3c39..56f959fbb 100644 --- a/test/kernel/vecoperation.f90 +++ b/test/kernel/vecoperation.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/omp/psb_tomp.F90 b/test/omp/psb_tomp.F90 index 45136ad00..c7274f670 100644 --- a/test/omp/psb_tomp.F90 +++ b/test/omp/psb_tomp.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/openacc/dpdegenmv.F90 b/test/openacc/dpdegenmv.F90 index 951e41e19..1bf62b336 100644 --- a/test/openacc/dpdegenmv.F90 +++ b/test/openacc/dpdegenmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/openacc/psb_d_oacc_pde3d.F90 b/test/openacc/psb_d_oacc_pde3d.F90 index 841da878e..d4bf35989 100644 --- a/test/openacc/psb_d_oacc_pde3d.F90 +++ b/test/openacc/psb_d_oacc_pde3d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/pdegen/psb_d_pde2d.F90 b/test/pdegen/psb_d_pde2d.F90 index 6eee70369..7da7439b2 100644 --- a/test/pdegen/psb_d_pde2d.F90 +++ b/test/pdegen/psb_d_pde2d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index 46768538c..982e582cf 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/pdegen/psb_s_pde2d.F90 b/test/pdegen/psb_s_pde2d.F90 index b904f0ec0..1df7b138a 100644 --- a/test/pdegen/psb_s_pde2d.F90 +++ b/test/pdegen/psb_s_pde2d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/pdegen/psb_s_pde3d.F90 b/test/pdegen/psb_s_pde3d.F90 index 3efcfd45d..ac4dfbdfc 100644 --- a/test/pdegen/psb_s_pde3d.F90 +++ b/test/pdegen/psb_s_pde3d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/serial/psb_d_xyz_impl.f90 b/test/serial/psb_d_xyz_impl.f90 index 8796a3524..a91902358 100644 --- a/test/serial/psb_d_xyz_impl.f90 +++ b/test/serial/psb_d_xyz_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/serial/psb_d_xyz_mat_mod.f90 b/test/serial/psb_d_xyz_mat_mod.f90 index 009ddab07..f2f45dded 100644 --- a/test/serial/psb_d_xyz_mat_mod.f90 +++ b/test/serial/psb_d_xyz_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/util/dhb2mm.f90 b/test/util/dhb2mm.f90 index adc0e2385..18beb126a 100644 --- a/test/util/dhb2mm.f90 +++ b/test/util/dhb2mm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/util/dmm2hb.f90 b/test/util/dmm2hb.f90 index e567471d8..6c2637cc1 100644 --- a/test/util/dmm2hb.f90 +++ b/test/util/dmm2hb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/util/zhb2mm.f90 b/test/util/zhb2mm.f90 index 1981c6cce..cf57fc002 100644 --- a/test/util/zhb2mm.f90 +++ b/test/util/zhb2mm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/util/zmm2hb.f90 b/test/util/zmm2hb.f90 index e6993f3e3..e5c44d1de 100644 --- a/test/util/zmm2hb.f90 +++ b/test/util/zmm2hb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_amd_order.c b/util/psb_amd_order.c index 131303961..f13610831 100644 --- a/util/psb_amd_order.c +++ b/util/psb_amd_order.c @@ -14,7 +14,7 @@ documentation and/or other materials provided with the distribution. 3. The name of the PSBLAS group or the names of its contributors may not be used to endorse or promote products derived from this - software without specific written permission. + software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_blockpart_mod.f90 b/util/psb_blockpart_mod.f90 index 08eacb43e..321577433 100644 --- a/util/psb_blockpart_mod.f90 +++ b/util/psb_blockpart_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_hbio_impl.f90 b/util/psb_c_hbio_impl.f90 index 06c327c56..d105f0874 100644 --- a/util/psb_c_hbio_impl.f90 +++ b/util/psb_c_hbio_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_mat_dist_impl.f90 b/util/psb_c_mat_dist_impl.f90 index b4b4c13e4..96ea70099 100644 --- a/util/psb_c_mat_dist_impl.f90 +++ b/util/psb_c_mat_dist_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_mat_dist_mod.f90 b/util/psb_c_mat_dist_mod.f90 index c0fa00317..bc67afefa 100644 --- a/util/psb_c_mat_dist_mod.f90 +++ b/util/psb_c_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_mmio_impl.f90 b/util/psb_c_mmio_impl.f90 index 222fab82c..68690d06c 100644 --- a/util/psb_c_mmio_impl.f90 +++ b/util/psb_c_mmio_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_renum_impl.F90 b/util/psb_c_renum_impl.F90 index 9b342d6bf..2cb3ef449 100644 --- a/util/psb_c_renum_impl.F90 +++ b/util/psb_c_renum_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_renum_mod.f90 b/util/psb_c_renum_mod.f90 index 113354843..3a79f0c63 100644 --- a/util/psb_c_renum_mod.f90 +++ b/util/psb_c_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_hbio_impl.f90 b/util/psb_d_hbio_impl.f90 index cca909952..900609977 100644 --- a/util/psb_d_hbio_impl.f90 +++ b/util/psb_d_hbio_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_mat_dist_impl.f90 b/util/psb_d_mat_dist_impl.f90 index 0b0db2cd0..5e172b249 100644 --- a/util/psb_d_mat_dist_impl.f90 +++ b/util/psb_d_mat_dist_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_mat_dist_mod.f90 b/util/psb_d_mat_dist_mod.f90 index 978c62dd8..846cc26c6 100644 --- a/util/psb_d_mat_dist_mod.f90 +++ b/util/psb_d_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_mmio_impl.f90 b/util/psb_d_mmio_impl.f90 index 39dc501a5..374eeed92 100644 --- a/util/psb_d_mmio_impl.f90 +++ b/util/psb_d_mmio_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_renum_impl.F90 b/util/psb_d_renum_impl.F90 index 08999fc94..03e2458ae 100644 --- a/util/psb_d_renum_impl.F90 +++ b/util/psb_d_renum_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_renum_mod.f90 b/util/psb_d_renum_mod.f90 index 8e4b4e03e..22c5d868f 100644 --- a/util/psb_d_renum_mod.f90 +++ b/util/psb_d_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_gps_mod.f90 b/util/psb_gps_mod.f90 index 7c42d990f..f031096f5 100644 --- a/util/psb_gps_mod.f90 +++ b/util/psb_gps_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_hbio_mod.f90 b/util/psb_hbio_mod.f90 index 01fa4daa3..799c085a2 100644 --- a/util/psb_hbio_mod.f90 +++ b/util/psb_hbio_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_i_mmio_impl.F90 b/util/psb_i_mmio_impl.F90 index c19989970..941559d91 100644 --- a/util/psb_i_mmio_impl.F90 +++ b/util/psb_i_mmio_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_mat_dist_mod.f90 b/util/psb_mat_dist_mod.f90 index e1532a2fc..9f99d51d1 100644 --- a/util/psb_mat_dist_mod.f90 +++ b/util/psb_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_metispart_mod.F90 b/util/psb_metispart_mod.F90 index 413bbdff4..3db8c85ed 100644 --- a/util/psb_metispart_mod.F90 +++ b/util/psb_metispart_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_mmio_mod.F90 b/util/psb_mmio_mod.F90 index 533312bbf..bc0630c28 100644 --- a/util/psb_mmio_mod.F90 +++ b/util/psb_mmio_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_partidx_mod.F90 b/util/psb_partidx_mod.F90 index de025fb0f..98aea50de 100644 --- a/util/psb_partidx_mod.F90 +++ b/util/psb_partidx_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_renum_mod.f90 b/util/psb_renum_mod.f90 index 9a060cc6d..cfa4aa8ce 100644 --- a/util/psb_renum_mod.f90 +++ b/util/psb_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_hbio_impl.f90 b/util/psb_s_hbio_impl.f90 index 522f8334c..10e9da1c9 100644 --- a/util/psb_s_hbio_impl.f90 +++ b/util/psb_s_hbio_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_mat_dist_impl.f90 b/util/psb_s_mat_dist_impl.f90 index 941906a86..9737b3c65 100644 --- a/util/psb_s_mat_dist_impl.f90 +++ b/util/psb_s_mat_dist_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_mat_dist_mod.f90 b/util/psb_s_mat_dist_mod.f90 index 9cb48058a..427298287 100644 --- a/util/psb_s_mat_dist_mod.f90 +++ b/util/psb_s_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_mmio_impl.f90 b/util/psb_s_mmio_impl.f90 index 1e50adf2f..94e886849 100644 --- a/util/psb_s_mmio_impl.f90 +++ b/util/psb_s_mmio_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_renum_impl.F90 b/util/psb_s_renum_impl.F90 index f60e33a87..1811ea1bd 100644 --- a/util/psb_s_renum_impl.F90 +++ b/util/psb_s_renum_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_renum_mod.f90 b/util/psb_s_renum_mod.f90 index 1e048df53..05a2ceba3 100644 --- a/util/psb_s_renum_mod.f90 +++ b/util/psb_s_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_util_mod.f90 b/util/psb_util_mod.f90 index 6743a2d46..86c9b8727 100644 --- a/util/psb_util_mod.f90 +++ b/util/psb_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_hbio_impl.f90 b/util/psb_z_hbio_impl.f90 index eacf427dc..84c7f6ab0 100644 --- a/util/psb_z_hbio_impl.f90 +++ b/util/psb_z_hbio_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_mat_dist_impl.f90 b/util/psb_z_mat_dist_impl.f90 index e96f50b34..f8acd84fb 100644 --- a/util/psb_z_mat_dist_impl.f90 +++ b/util/psb_z_mat_dist_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_mat_dist_mod.f90 b/util/psb_z_mat_dist_mod.f90 index 3be4f9471..3322a3448 100644 --- a/util/psb_z_mat_dist_mod.f90 +++ b/util/psb_z_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_mmio_impl.f90 b/util/psb_z_mmio_impl.f90 index 406bdd0c6..948de2833 100644 --- a/util/psb_z_mmio_impl.f90 +++ b/util/psb_z_mmio_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_renum_impl.F90 b/util/psb_z_renum_impl.F90 index ac6517fec..624bacd99 100644 --- a/util/psb_z_renum_impl.F90 +++ b/util/psb_z_renum_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_renum_mod.f90 b/util/psb_z_renum_mod.f90 index 0bb56c355..c91cbe4a1 100644 --- a/util/psb_z_renum_mod.f90 +++ b/util/psb_z_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED From 5f0d88449c4182dcae5ddfdf44fd5f7108f8dba2 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 18 Mar 2026 15:50:13 +0100 Subject: [PATCH 124/175] Fix license issues --- cuda/License-spgpu | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/cuda/License-spgpu b/cuda/License-spgpu index 7f4b8ff4c..4e5e16f5b 100644 --- a/cuda/License-spgpu +++ b/cuda/License-spgpu @@ -1,21 +1,26 @@ -(c) Copyright 2011-2021 Davide Barbieri, Salvatore Filippone + (C) Copyright 2011-2026 Davide Barbieri + (C) Copyright 2011-2026 Salvatore Filippone - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions, and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. From 1748dac50f3dc52b1dc33034473d97ccb45eb13e Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 18 Mar 2026 16:12:16 +0100 Subject: [PATCH 125/175] Fix license --- LICENSE | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 70f4cac9f..9aaec1626 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,5 @@ - (C) Copyright 2025 Salvatore Filippone, Alfredo Buttari + (C) Copyright 2025 Salvatore Filippone + (C) Copyright 2025 Alfredo Buttari Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions From eab5e8ccb851093c33576cc257f1799990f1bb30 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 18 Mar 2026 16:57:48 +0100 Subject: [PATCH 126/175] Fix use of AR in configure for other platforms --- configure | 350 +++++++++++++++++++++++++++++++++++++++++++++++++-- configure.ac | 15 +-- 2 files changed, 342 insertions(+), 23 deletions(-) diff --git a/configure b/configure index 390b6555a..e8a214af5 100755 --- a/configure +++ b/configure @@ -732,7 +732,6 @@ INSTALL_LIBDIR INSTALL_DIR INSTALL MPIFCC -AR FLIBS CLINK FLINK @@ -753,6 +752,7 @@ BASEMODNAME CDEFINES FDEFINES LAPACK_LIBS +AR OPENMP_CXXFLAGS OPENMP_CFLAGS OPENMP_FCFLAGS @@ -4282,7 +4282,10 @@ _ACEOF break fi done - rm -f core conftest* + # aligned with autoconf, so not including core; see bug#72225. + rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ + conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ + conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi @@ -5932,7 +5935,7 @@ else fi -am__api_version='1.17' +am__api_version='1.18' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } @@ -6101,10 +6104,14 @@ am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac @@ -6629,9 +6636,133 @@ AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' +_am_tools='gnutar plaintar pax cpio none' + +# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 +printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } + if test x$am_uid = xunknown; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 +printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} + elif test $am_uid -le $am_max_uid; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + _am_tools=none + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 +printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } + if test x$gm_gid = xunknown; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 +printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} + elif test $am_gid -le $am_max_gid; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + _am_tools=none + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 +printf %s "checking how to create a ustar tar archive... " >&6; } + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_ustar-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + { echo "$as_me:$LINENO: $_am_tar --version" >&5 + ($_am_tar --version) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && break + done + am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x ustar -w "$$tardir"' + am__tar_='pax -L -x ustar -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H ustar -L' + am__tar_='find "$tardir" -print | cpio -o -H ustar -L' + am__untar='cpio -i -H ustar -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_ustar}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 + (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + rm -rf conftest.dir + if test -s conftest.tar; then + { echo "$as_me:$LINENO: $am__untar &5 + ($am__untar &5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 + (cat conftest.dir/file) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + if test ${am_cv_prog_tar_ustar+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) am_cv_prog_tar_ustar=$_am_tool ;; +esac +fi -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 +printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } @@ -8887,18 +9018,215 @@ fi ############################################################################### # Parachute rules for ar and ranlib ... (could cause problems) ############################################################################### +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -if test "X$AR" == "X" ; then - AR="ar" + if test "x$ac_ct_AR" = x; then + AR=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" fi -if test "X$RANLIB" == "X" ; then - RANLIB="ranlib" +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -# This should be portable -AR="${AR} -cDr" +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +AR="$AR -cr" ############################################################################### # BLAS library presence checks diff --git a/configure.ac b/configure.ac index 5155bcf06..1116417a9 100644 --- a/configure.ac +++ b/configure.ac @@ -745,18 +745,9 @@ fi ############################################################################### # Parachute rules for ar and ranlib ... (could cause problems) ############################################################################### - -if test "X$AR" == "X" ; then - AR="ar" -fi - -if test "X$RANLIB" == "X" ; then - RANLIB="ranlib" -fi - -# This should be portable -AR="${AR} -cDr" - +AC_PROG_AR +AR="${AR} -cr" +AC_PROG_RANLIB ############################################################################### # BLAS library presence checks From 1ee1b8334195cd72cdfa47090dc3334dc338759a Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Thu, 19 Mar 2026 14:58:00 +0100 Subject: [PATCH 127/175] Added routine to extract single element from sparse matrix --- base/modules/tools/psb_c_tools_mod.F90 | 8 +++ base/modules/tools/psb_d_tools_mod.F90 | 8 +++ base/modules/tools/psb_s_tools_mod.F90 | 8 +++ base/modules/tools/psb_z_tools_mod.F90 | 8 +++ base/tools/psb_cgetelem.f90 | 89 ++++++++++++++++++++++++++ base/tools/psb_dgetelem.f90 | 89 ++++++++++++++++++++++++++ base/tools/psb_sgetelem.f90 | 89 ++++++++++++++++++++++++++ base/tools/psb_zgetelem.f90 | 89 ++++++++++++++++++++++++++ cbind/base/psb_c_cbase.h | 1 + cbind/base/psb_c_dbase.h | 2 + cbind/base/psb_c_sbase.h | 2 + cbind/base/psb_c_tools_cbind_mod.F90 | 69 ++++++++++---------- cbind/base/psb_c_zbase.h | 2 + cbind/base/psb_d_tools_cbind_mod.F90 | 69 ++++++++++---------- cbind/base/psb_s_tools_cbind_mod.F90 | 69 ++++++++++---------- cbind/base/psb_z_tools_cbind_mod.F90 | 69 ++++++++++---------- 16 files changed, 535 insertions(+), 136 deletions(-) diff --git a/base/modules/tools/psb_c_tools_mod.F90 b/base/modules/tools/psb_c_tools_mod.F90 index 4dc0ee522..148ddf59f 100644 --- a/base/modules/tools/psb_c_tools_mod.F90 +++ b/base/modules/tools/psb_c_tools_mod.F90 @@ -444,6 +444,14 @@ Module psb_c_tools_mod integer(psb_ipk_), intent(out) :: info complex(psb_spk_) :: res end function + function psb_c_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + import + type(psb_cspmat_type), intent(inout) :: a + integer(psb_lpk_), intent(in) :: rowindex, colindex + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: res + end function end interface interface psb_remap diff --git a/base/modules/tools/psb_d_tools_mod.F90 b/base/modules/tools/psb_d_tools_mod.F90 index e4e8d6390..97f70fc13 100644 --- a/base/modules/tools/psb_d_tools_mod.F90 +++ b/base/modules/tools/psb_d_tools_mod.F90 @@ -444,6 +444,14 @@ Module psb_d_tools_mod integer(psb_ipk_), intent(out) :: info real(psb_dpk_) :: res end function + function psb_d_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + import + type(psb_dspmat_type), intent(inout) :: a + integer(psb_lpk_), intent(in) :: rowindex, colindex + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: res + end function end interface interface psb_remap diff --git a/base/modules/tools/psb_s_tools_mod.F90 b/base/modules/tools/psb_s_tools_mod.F90 index d9dd59770..c87607bc9 100644 --- a/base/modules/tools/psb_s_tools_mod.F90 +++ b/base/modules/tools/psb_s_tools_mod.F90 @@ -444,6 +444,14 @@ Module psb_s_tools_mod integer(psb_ipk_), intent(out) :: info real(psb_spk_) :: res end function + function psb_s_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + import + type(psb_sspmat_type), intent(inout) :: a + integer(psb_lpk_), intent(in) :: rowindex, colindex + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: res + end function end interface interface psb_remap diff --git a/base/modules/tools/psb_z_tools_mod.F90 b/base/modules/tools/psb_z_tools_mod.F90 index cdb9f4469..8a6c2d34c 100644 --- a/base/modules/tools/psb_z_tools_mod.F90 +++ b/base/modules/tools/psb_z_tools_mod.F90 @@ -444,6 +444,14 @@ Module psb_z_tools_mod integer(psb_ipk_), intent(out) :: info complex(psb_dpk_) :: res end function + function psb_z_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + import + type(psb_zspmat_type), intent(inout) :: a + integer(psb_lpk_), intent(in) :: rowindex, colindex + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: res + end function end interface interface psb_remap diff --git a/base/tools/psb_cgetelem.f90 b/base/tools/psb_cgetelem.f90 index ae90b2b00..952ae251a 100644 --- a/base/tools/psb_cgetelem.f90 +++ b/base/tools/psb_cgetelem.f90 @@ -108,3 +108,92 @@ function psb_c_getelem(x,index,desc_a,info) result(res) end function +! Function: psb_c_getmatelem +! Extract entries from a sparse matrix. Note: the row and column indices in index +! are assumed to be in global numbering and are converted on the fly. +! +! Arguments: +! a - type(psb_cspmat_type) The source matrix +! desc_a - type(psb_desc_type). The communication descriptor. +! rowindex - integer. Row index of x of the value to extract +! colindex - integer. Column index of x of the value to extract +! iam - integer. Index of the process requesting the value +! info - integer. return code + + +function psb_c_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + use psb_base_mod, psb_protect_name => psb_c_getmatelem + use psi_mod + implicit none + + type(psb_cspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_lpk_), intent(in) :: rowindex, colindex + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: res + + !locals + integer(psb_ipk_) :: localrowindex(1), localcolindex(1), jmin, jmax, imin, imax + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_lpk_) :: growindex(1), gcolindex(1) + integer(psb_lpk_), allocatable :: myidx(:),mylocal(:) + integer(psb_ipk_), allocatable, dimension(:) :: ia, ja + integer(psb_ipk_) :: nz + complex(psb_spk_), allocatable, dimension(:) :: val + character(len=20) :: name + logical, parameter :: debug = .false. + + growindex(1) = rowindex + gcolindex(1) = colindex + res = czero + if (psb_errstatus_fatal()) return + info=psb_success_ + call psb_erractionsave(err_act) + name = 'psb_c_getmatelem' + + if (.not.desc_a%is_ok()) then + info = psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if + + ctxt = desc_a%get_context() + + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + call desc_a%indxmap%g2l(growindex,localrowindex,info,owned=.false.) + call desc_a%indxmap%g2l(gcolindex,localcolindex,info,owned=.false.) + imin = localrowindex(1) + imax = localrowindex(1) + jmin = localcolindex(1) + jmax = localcolindex(1) + if(debug.and.(localrowindex(1) < 1 .or. localcolindex(1) < 1)) then + write(*,*)"Process ",me," owns ",desc_a%get_local_rows()," rows"," Global row index is ", & + growindex,"Local row index is ",localrowindex + write(*,*)"Process ",me," owns ",desc_a%get_local_cols()," cols"," Global col index is ", & + gcolindex,"Local col index is ",localcolindex + myidx = desc_a%get_global_indices(owned=.false.) + mylocal = desc_a%get_global_indices(owned=.true.) + write(*,*)"My (local+halo) indexes are: ",myidx + write(*,*)"My (local) indexes are: ",mylocal + end if + if ( localrowindex(1) < 1 .or. localcolindex(1) < 1) then + res = czero + else + call a%csget(imin, imax, nz, ia, ja, val, info, jmin=jmin, jmax=jmax) + res = val(1) + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + +end function diff --git a/base/tools/psb_dgetelem.f90 b/base/tools/psb_dgetelem.f90 index 6df8229a9..805204b08 100644 --- a/base/tools/psb_dgetelem.f90 +++ b/base/tools/psb_dgetelem.f90 @@ -108,3 +108,92 @@ function psb_d_getelem(x,index,desc_a,info) result(res) end function +! Function: psb_d_getmatelem +! Extract entries from a sparse matrix. Note: the row and column indices in index +! are assumed to be in global numbering and are converted on the fly. +! +! Arguments: +! a - type(psb_dspmat_type) The source matrix +! desc_a - type(psb_desc_type). The communication descriptor. +! rowindex - integer. Row index of x of the value to extract +! colindex - integer. Column index of x of the value to extract +! iam - integer. Index of the process requesting the value +! info - integer. return code + + +function psb_d_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + use psb_base_mod, psb_protect_name => psb_d_getmatelem + use psi_mod + implicit none + + type(psb_dspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_lpk_), intent(in) :: rowindex, colindex + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: res + + !locals + integer(psb_ipk_) :: localrowindex(1), localcolindex(1), jmin, jmax, imin, imax + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_lpk_) :: growindex(1), gcolindex(1) + integer(psb_lpk_), allocatable :: myidx(:),mylocal(:) + integer(psb_ipk_), allocatable, dimension(:) :: ia, ja + integer(psb_ipk_) :: nz + real(psb_dpk_), allocatable, dimension(:) :: val + character(len=20) :: name + logical, parameter :: debug = .false. + + growindex(1) = rowindex + gcolindex(1) = colindex + res = dzero + if (psb_errstatus_fatal()) return + info=psb_success_ + call psb_erractionsave(err_act) + name = 'psb_d_getmatelem' + + if (.not.desc_a%is_ok()) then + info = psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if + + ctxt = desc_a%get_context() + + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + call desc_a%indxmap%g2l(growindex,localrowindex,info,owned=.false.) + call desc_a%indxmap%g2l(gcolindex,localcolindex,info,owned=.false.) + imin = localrowindex(1) + imax = localrowindex(1) + jmin = localcolindex(1) + jmax = localcolindex(1) + if(debug.and.(localrowindex(1) < 1 .or. localcolindex(1) < 1)) then + write(*,*)"Process ",me," owns ",desc_a%get_local_rows()," rows"," Global row index is ", & + growindex,"Local row index is ",localrowindex + write(*,*)"Process ",me," owns ",desc_a%get_local_cols()," cols"," Global col index is ", & + gcolindex,"Local col index is ",localcolindex + myidx = desc_a%get_global_indices(owned=.false.) + mylocal = desc_a%get_global_indices(owned=.true.) + write(*,*)"My (local+halo) indexes are: ",myidx + write(*,*)"My (local) indexes are: ",mylocal + end if + if ( localrowindex(1) < 1 .or. localcolindex(1) < 1) then + res = dzero + else + call a%csget(imin, imax, nz, ia, ja, val, info, jmin=jmin, jmax=jmax) + res = val(1) + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + +end function diff --git a/base/tools/psb_sgetelem.f90 b/base/tools/psb_sgetelem.f90 index 118ee31b4..73ab33efa 100644 --- a/base/tools/psb_sgetelem.f90 +++ b/base/tools/psb_sgetelem.f90 @@ -108,3 +108,92 @@ function psb_s_getelem(x,index,desc_a,info) result(res) end function +! Function: psb_s_getmatelem +! Extract entries from a sparse matrix. Note: the row and column indices in index +! are assumed to be in global numbering and are converted on the fly. +! +! Arguments: +! a - type(psb_sspmat_type) The source matrix +! desc_a - type(psb_desc_type). The communication descriptor. +! rowindex - integer. Row index of x of the value to extract +! colindex - integer. Column index of x of the value to extract +! iam - integer. Index of the process requesting the value +! info - integer. return code + + +function psb_s_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + use psb_base_mod, psb_protect_name => psb_s_getmatelem + use psi_mod + implicit none + + type(psb_sspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_lpk_), intent(in) :: rowindex, colindex + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: res + + !locals + integer(psb_ipk_) :: localrowindex(1), localcolindex(1), jmin, jmax, imin, imax + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_lpk_) :: growindex(1), gcolindex(1) + integer(psb_lpk_), allocatable :: myidx(:),mylocal(:) + integer(psb_ipk_), allocatable, dimension(:) :: ia, ja + integer(psb_ipk_) :: nz + real(psb_spk_), allocatable, dimension(:) :: val + character(len=20) :: name + logical, parameter :: debug = .false. + + growindex(1) = rowindex + gcolindex(1) = colindex + res = szero + if (psb_errstatus_fatal()) return + info=psb_success_ + call psb_erractionsave(err_act) + name = 'psb_s_getmatelem' + + if (.not.desc_a%is_ok()) then + info = psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if + + ctxt = desc_a%get_context() + + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + call desc_a%indxmap%g2l(growindex,localrowindex,info,owned=.false.) + call desc_a%indxmap%g2l(gcolindex,localcolindex,info,owned=.false.) + imin = localrowindex(1) + imax = localrowindex(1) + jmin = localcolindex(1) + jmax = localcolindex(1) + if(debug.and.(localrowindex(1) < 1 .or. localcolindex(1) < 1)) then + write(*,*)"Process ",me," owns ",desc_a%get_local_rows()," rows"," Global row index is ", & + growindex,"Local row index is ",localrowindex + write(*,*)"Process ",me," owns ",desc_a%get_local_cols()," cols"," Global col index is ", & + gcolindex,"Local col index is ",localcolindex + myidx = desc_a%get_global_indices(owned=.false.) + mylocal = desc_a%get_global_indices(owned=.true.) + write(*,*)"My (local+halo) indexes are: ",myidx + write(*,*)"My (local) indexes are: ",mylocal + end if + if ( localrowindex(1) < 1 .or. localcolindex(1) < 1) then + res = szero + else + call a%csget(imin, imax, nz, ia, ja, val, info, jmin=jmin, jmax=jmax) + res = val(1) + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + +end function diff --git a/base/tools/psb_zgetelem.f90 b/base/tools/psb_zgetelem.f90 index 45757cefa..a4cb114be 100644 --- a/base/tools/psb_zgetelem.f90 +++ b/base/tools/psb_zgetelem.f90 @@ -108,3 +108,92 @@ function psb_z_getelem(x,index,desc_a,info) result(res) end function +! Function: psb_z_getmatelem +! Extract entries from a sparse matrix. Note: the row and column indices in index +! are assumed to be in global numbering and are converted on the fly. +! +! Arguments: +! a - type(psb_zspmat_type) The source matrix +! desc_a - type(psb_desc_type). The communication descriptor. +! rowindex - integer. Row index of x of the value to extract +! colindex - integer. Column index of x of the value to extract +! iam - integer. Index of the process requesting the value +! info - integer. return code + + +function psb_z_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + use psb_base_mod, psb_protect_name => psb_z_getmatelem + use psi_mod + implicit none + + type(psb_zspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_lpk_), intent(in) :: rowindex, colindex + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: res + + !locals + integer(psb_ipk_) :: localrowindex(1), localcolindex(1), jmin, jmax, imin, imax + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_lpk_) :: growindex(1), gcolindex(1) + integer(psb_lpk_), allocatable :: myidx(:),mylocal(:) + integer(psb_ipk_), allocatable, dimension(:) :: ia, ja + integer(psb_ipk_) :: nz + complex(psb_dpk_), allocatable, dimension(:) :: val + character(len=20) :: name + logical, parameter :: debug = .false. + + growindex(1) = rowindex + gcolindex(1) = colindex + res = zzero + if (psb_errstatus_fatal()) return + info=psb_success_ + call psb_erractionsave(err_act) + name = 'psb_z_getmatelem' + + if (.not.desc_a%is_ok()) then + info = psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if + + ctxt = desc_a%get_context() + + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + call desc_a%indxmap%g2l(growindex,localrowindex,info,owned=.false.) + call desc_a%indxmap%g2l(gcolindex,localcolindex,info,owned=.false.) + imin = localrowindex(1) + imax = localrowindex(1) + jmin = localcolindex(1) + jmax = localcolindex(1) + if(debug.and.(localrowindex(1) < 1 .or. localcolindex(1) < 1)) then + write(*,*)"Process ",me," owns ",desc_a%get_local_rows()," rows"," Global row index is ", & + growindex,"Local row index is ",localrowindex + write(*,*)"Process ",me," owns ",desc_a%get_local_cols()," cols"," Global col index is ", & + gcolindex,"Local col index is ",localcolindex + myidx = desc_a%get_global_indices(owned=.false.) + mylocal = desc_a%get_global_indices(owned=.true.) + write(*,*)"My (local+halo) indexes are: ",myidx + write(*,*)"My (local) indexes are: ",mylocal + end if + if ( localrowindex(1) < 1 .or. localcolindex(1) < 1) then + res = zzero + else + call a%csget(imin, imax, nz, ia, ja, val, info, jmin=jmin, jmax=jmax) + res = val(1) + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + +end function diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index 0dd426d75..45b6c8251 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -39,6 +39,7 @@ psb_i_t psb_c_cgeasb_options_format(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_cgereinit(psb_c_cvector *xh, psb_c_descriptor *cdh, bool clear); psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); +psb_c_t psb_c_cmatgetelem(psb_c_cspmat *ah,psb_l_t rowindex,psb_l_t colindex,psb_c_descriptor *cdh); /* sparse matrices*/ psb_c_cspmat* psb_c_new_cspmat(); diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index 97ef408f2..bf0be8bac 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -39,6 +39,8 @@ psb_i_t psb_c_dgeasb_options_format(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dgereinit(psb_c_dvector *xh, psb_c_descriptor *cdh, bool clear); psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); +psb_d_t psb_c_dmatgetelem(psb_c_dspmat *ah,psb_l_t rowindex,psb_l_t colindex,psb_c_descriptor *cdh); + /* sparse matrices*/ psb_c_dspmat* psb_c_new_dspmat(); diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index 1e1895bad..fa501a50c 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -39,6 +39,8 @@ psb_i_t psb_c_sgeasb_options_format(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_sgereinit(psb_c_svector *xh, psb_c_descriptor *cdh, bool clear); psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); +psb_s_t psb_c_smatgetelem(psb_c_sspmat *ah,psb_l_t rowindex,psb_l_t colindex,psb_c_descriptor *cdh); + /* sparse matrices*/ psb_c_sspmat* psb_c_new_sspmat(); diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index 5cf3478e8..0163f544a 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -253,40 +253,6 @@ contains end function psb_c_cgefree - function psb_c_cgereinit(xh,cdh,clear) bind(c) result(res) - - implicit none - integer(psb_c_ipk_) :: res - type(psb_c_cvector) :: xh - type(psb_c_descriptor) :: cdh - logical(c_bool), value :: clear - - type(psb_desc_type), pointer :: descp - type(psb_c_vect_type), pointer :: xp - integer(psb_c_ipk_) :: info - logical :: fclear - - res = -1 - - if (c_associated(cdh%item)) then - call c_f_pointer(cdh%item,descp) - else - return - end if - if (c_associated(xh%item)) then - call c_f_pointer(xh%item,xp) - else - return - end if - - fclear = clear - call xp%reinit(info, clear=fclear) - res = min(0,info) - - return - end function psb_c_cgereinit - - function psb_c_cgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none @@ -688,4 +654,39 @@ contains end function psb_c_cgetelem + function psb_c_cmatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res) + implicit none + + type(psb_c_cspmat) :: ah + integer(psb_c_lpk_), value :: rowindex, colindex + type(psb_c_descriptor) :: cdh + complex(c_float_complex) :: res + + type(psb_cspmat_type), pointer :: ap + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + ixb = psb_c_get_index_base() + if (ixb == 1) then + res = psb_getelem(ap,rowindex,colindex,descp,info) + else + res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info) + end if + + return + + end function psb_c_cmatgetelem + end module psb_c_tools_cbind_mod diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index 2e4f01c45..fed51efb8 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -39,6 +39,8 @@ psb_i_t psb_c_zgeasb_options_format(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_zgereinit(psb_c_zvector *xh, psb_c_descriptor *cdh, bool clear); psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); +psb_z_t psb_c_zmatgetelem(psb_c_zspmat *ah,psb_l_t rowindex,psb_l_t colindex,psb_c_descriptor *cdh); + /* sparse matrices*/ psb_c_zspmat* psb_c_new_zspmat(); diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 1b4bb40ee..f80377732 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -253,40 +253,6 @@ contains end function psb_c_dgefree - function psb_c_dgereinit(xh,cdh,clear) bind(c) result(res) - - implicit none - integer(psb_c_ipk_) :: res - type(psb_c_dvector) :: xh - type(psb_c_descriptor) :: cdh - logical(c_bool), value :: clear - - type(psb_desc_type), pointer :: descp - type(psb_d_vect_type), pointer :: xp - integer(psb_c_ipk_) :: info - logical :: fclear - - res = -1 - - if (c_associated(cdh%item)) then - call c_f_pointer(cdh%item,descp) - else - return - end if - if (c_associated(xh%item)) then - call c_f_pointer(xh%item,xp) - else - return - end if - - fclear = clear - call xp%reinit(info, clear=fclear) - res = min(0,info) - - return - end function psb_c_dgereinit - - function psb_c_dgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none @@ -698,4 +664,39 @@ contains end function psb_c_dgetelem + function psb_c_dmatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res) + implicit none + + type(psb_c_dspmat) :: ah + integer(psb_c_lpk_), value :: rowindex, colindex + type(psb_c_descriptor) :: cdh + real(c_double) :: res + + type(psb_dspmat_type), pointer :: ap + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + ixb = psb_c_get_index_base() + if (ixb == 1) then + res = psb_getelem(ap,rowindex,colindex,descp,info) + else + res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info) + end if + + return + + end function psb_c_dmatgetelem + end module psb_d_tools_cbind_mod diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 3f5334a79..43ac426e4 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -253,40 +253,6 @@ contains end function psb_c_sgefree - function psb_c_sgereinit(xh,cdh,clear) bind(c) result(res) - - implicit none - integer(psb_c_ipk_) :: res - type(psb_c_svector) :: xh - type(psb_c_descriptor) :: cdh - logical(c_bool), value :: clear - - type(psb_desc_type), pointer :: descp - type(psb_s_vect_type), pointer :: xp - integer(psb_c_ipk_) :: info - logical :: fclear - - res = -1 - - if (c_associated(cdh%item)) then - call c_f_pointer(cdh%item,descp) - else - return - end if - if (c_associated(xh%item)) then - call c_f_pointer(xh%item,xp) - else - return - end if - - fclear = clear - call xp%reinit(info, clear=fclear) - res = min(0,info) - - return - end function psb_c_sgereinit - - function psb_c_sgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none @@ -698,4 +664,39 @@ contains end function psb_c_sgetelem + function psb_c_smatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res) + implicit none + + type(psb_c_sspmat) :: ah + integer(psb_c_lpk_), value :: rowindex, colindex + type(psb_c_descriptor) :: cdh + real(c_float) :: res + + type(psb_sspmat_type), pointer :: ap + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + ixb = psb_c_get_index_base() + if (ixb == 1) then + res = psb_getelem(ap,rowindex,colindex,descp,info) + else + res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info) + end if + + return + + end function psb_c_smatgetelem + end module psb_s_tools_cbind_mod diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index b4693a4c8..a4bda8c9a 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -253,40 +253,6 @@ contains end function psb_c_zgefree - function psb_c_zgereinit(xh,cdh,clear) bind(c) result(res) - - implicit none - integer(psb_c_ipk_) :: res - type(psb_c_zvector) :: xh - type(psb_c_descriptor) :: cdh - logical(c_bool), value :: clear - - type(psb_desc_type), pointer :: descp - type(psb_z_vect_type), pointer :: xp - integer(psb_c_ipk_) :: info - logical :: fclear - - res = -1 - - if (c_associated(cdh%item)) then - call c_f_pointer(cdh%item,descp) - else - return - end if - if (c_associated(xh%item)) then - call c_f_pointer(xh%item,xp) - else - return - end if - - fclear = clear - call xp%reinit(info, clear=fclear) - res = min(0,info) - - return - end function psb_c_zgereinit - - function psb_c_zgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none @@ -688,4 +654,39 @@ contains end function psb_c_zgetelem + function psb_c_zmatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res) + implicit none + + type(psb_c_zspmat) :: ah + integer(psb_c_lpk_), value :: rowindex, colindex + type(psb_c_descriptor) :: cdh + complex(c_double_complex) :: res + + type(psb_zspmat_type), pointer :: ap + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + ixb = psb_c_get_index_base() + if (ixb == 1) then + res = psb_getelem(ap,rowindex,colindex,descp,info) + else + res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info) + end if + + return + + end function psb_c_zmatgetelem + end module psb_z_tools_cbind_mod From 461a6a325f39dabfea6e09b357a8a40d6996b042 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Thu, 19 Mar 2026 17:36:44 +0100 Subject: [PATCH 128/175] [UPDATE] Removed work/aux buffer from vector routines that use psb_x_vect_type encapsulation for data exchange --- base/auxil/Makefile | 2 +- base/comm/internals/Makefile | 2 +- base/comm/internals/psi_cswapdata.F90 | 29 +- base/comm/internals/psi_cswaptran.F90 | 17 +- base/comm/internals/psi_dswapdata.F90 | 93 +- base/comm/internals/psi_dswapdata_a.F90 | 40 +- base/comm/internals/psi_dswaptran.F90 | 81 +- base/comm/internals/psi_dswaptran_a.F90 | 38 +- base/comm/internals/psi_eswaptran_a.F90 | 2 +- base/comm/internals/psi_iswapdata.F90 | 22 +- base/comm/internals/psi_iswaptran.F90 | 21 +- base/comm/internals/psi_lswapdata.F90 | 18 +- base/comm/internals/psi_lswaptran.F90 | 18 +- ...s_comm_v_mod@psi_s_ovrl_restr_v_impl.smod0 | Bin 49152 -> 0 bytes base/comm/internals/psi_sswapdata.F90 | 41 +- base/comm/internals/psi_sswaptran.F90 | 62 +- base/comm/internals/psi_sswaptran_a.F90 | 2 +- base/comm/internals/psi_zswapdata.F90 | 18 +- base/comm/internals/psi_zswaptran.F90 | 18 +- base/comm/psb_chalo.f90 | 115 +- base/comm/psb_chalo_a.f90 | 4 +- base/comm/psb_covrl.f90 | 86 +- base/comm/psb_covrl_a.f90 | 2 +- base/comm/psb_dhalo.f90 | 101 +- base/comm/psb_dhalo_a.f90 | 2 +- base/comm/psb_dovrl.f90 | 96 +- base/comm/psb_ehalo_a.f90 | 6 +- base/comm/psb_ihalo.f90 | 110 +- base/comm/psb_iovrl.f90 | 99 +- base/comm/psb_lhalo.f90 | 119 +- base/comm/psb_lovrl.f90 | 96 +- base/comm/psb_shalo.f90 | 111 +- base/comm/psb_shalo_a.f90 | 4 +- base/comm/psb_sovrl.f90 | 95 +- base/comm/psb_zhalo.f90 | 110 +- base/comm/psb_zovrl.f90 | 96 +- base/modules/comm/psb_c_comm_mod.f90 | 42 +- base/modules/comm/psb_c_linmap_mod.f90 | 6 +- base/modules/comm/psb_d_comm_a_mod.f90 | 28 +- base/modules/comm/psb_d_comm_mod.f90 | 44 +- base/modules/comm/psb_d_linmap_mod.f90 | 6 +- base/modules/comm/psb_i_comm_mod.f90 | 40 +- base/modules/comm/psb_l_comm_mod.f90 | 40 +- base/modules/comm/psb_s_comm_mod.f90 | 40 +- base/modules/comm/psb_s_linmap_mod.f90 | 6 +- base/modules/comm/psb_z_comm_mod.f90 | 40 +- base/modules/comm/psb_z_linmap_mod.f90 | 6 +- base/modules/comm/psi_c_comm_v_mod.f90 | 24 +- base/modules/comm/psi_d_comm_a_mod.f90 | 66 +- base/modules/comm/psi_d_comm_v_mod.f90 | 74 +- base/modules/comm/psi_i_comm_v_mod.f90 | 24 +- base/modules/comm/psi_l_comm_v_mod.f90 | 24 +- base/modules/comm/psi_s_comm_v_mod.f90 | 94 +- base/modules/comm/psi_z_comm_v_mod.f90 | 24 +- base/modules/psblas/psb_c_psblas_mod.F90 | 22 +- base/modules/psblas/psb_d_psblas_mod.F90 | 6 +- base/modules/psblas/psb_s_psblas_mod.F90 | 6 +- base/modules/psblas/psb_z_psblas_mod.F90 | 6 +- base/psblas/psb_cspmm.f90 | 79 +- base/psblas/psb_cspsm.f90 | 60 +- base/psblas/psb_dspmm.f90 | 112 +- base/psblas/psb_dspsm.f90 | 55 +- base/psblas/psb_sspmm.f90 | 71 +- base/psblas/psb_sspsm.f90 | 51 +- base/psblas/psb_zspmm.f90 | 73 +- base/psblas/psb_zspsm.f90 | 56 +- base/tools/psb_c_map.f90 | 22 +- base/tools/psb_d_map.f90 | 22 +- base/tools/psb_s_map.f90 | 22 +- base/tools/psb_z_map.f90 | 22 +- linsolve/impl/psb_cbicg.f90 | 23 +- linsolve/impl/psb_ccg.F90 | 13 +- linsolve/impl/psb_ccgs.f90 | 18 +- linsolve/impl/psb_ccgstab.f90 | 18 +- linsolve/impl/psb_ccgstabl.f90 | 15 +- linsolve/impl/psb_cfcg.F90 | 10 +- linsolve/impl/psb_cgcr.f90 | 14 +- linsolve/impl/psb_crgmres.f90 | 16 +- linsolve/impl/psb_crichardson.f90 | 16 +- linsolve/impl/psb_dbicg.f90 | 18 +- linsolve/impl/psb_dcg.F90 | 13 +- linsolve/impl/psb_dcgs.f90 | 18 +- linsolve/impl/psb_dcgstab.f90 | 20 +- linsolve/impl/psb_dcgstabl.f90 | 15 +- linsolve/impl/psb_dfcg.F90 | 10 +- linsolve/impl/psb_dgcr.f90 | 15 +- linsolve/impl/psb_drgmres.f90 | 18 +- linsolve/impl/psb_drichardson.f90 | 14 +- linsolve/impl/psb_sbicg.f90 | 20 +- linsolve/impl/psb_scg.F90 | 13 +- linsolve/impl/psb_scgs.f90 | 18 +- linsolve/impl/psb_scgstab.f90 | 25 +- linsolve/impl/psb_scgstabl.f90 | 15 +- linsolve/impl/psb_sfcg.F90 | 10 +- linsolve/impl/psb_sgcr.f90 | 21 +- linsolve/impl/psb_srgmres.f90 | 18 +- linsolve/impl/psb_srichardson.f90 | 12 +- linsolve/impl/psb_zbicg.f90 | 19 +- linsolve/impl/psb_zcg.F90 | 13 +- linsolve/impl/psb_zcgs.f90 | 18 +- linsolve/impl/psb_zcgstab.f90 | 24 +- linsolve/impl/psb_zcgstabl.f90 | 15 +- linsolve/impl/psb_zfcg.F90 | 11 +- linsolve/impl/psb_zgcr.f90 | 20 +- linsolve/impl/psb_zrgmres.f90 | 18 +- linsolve/impl/psb_zrichardson.f90 | 12 +- log.txt | 1855 +++++++++++++++-- prec/impl/psb_c_bjacprec_impl.f90 | 46 +- prec/impl/psb_c_diagprec_impl.f90 | 3 +- prec/impl/psb_c_nullprec_impl.f90 | 3 +- prec/impl/psb_c_prec_type_impl.f90 | 66 +- prec/impl/psb_d_bjacprec_impl.f90 | 67 +- prec/impl/psb_d_diagprec_impl.f90 | 3 +- prec/impl/psb_d_nullprec_impl.f90 | 3 +- prec/impl/psb_d_prec_type_impl.f90 | 61 +- prec/impl/psb_s_bjacprec_impl.f90 | 68 +- prec/impl/psb_s_diagprec_impl.f90 | 3 +- prec/impl/psb_s_nullprec_impl.f90 | 3 +- prec/impl/psb_s_prec_type_impl.f90 | 57 +- prec/impl/psb_z_bjacprec_impl.f90 | 49 +- prec/impl/psb_z_diagprec_impl.f90 | 3 +- prec/impl/psb_z_nullprec_impl.f90 | 3 +- prec/impl/psb_z_prec_type_impl.f90 | 51 +- prec/psb_c_base_prec_mod.f90 | 3 +- prec/psb_c_bjacprec.f90 | 4 +- prec/psb_c_diagprec.f90 | 3 +- prec/psb_c_nullprec.f90 | 3 +- prec/psb_c_prec_type.f90 | 28 +- prec/psb_d_base_prec_mod.f90 | 4 +- prec/psb_d_bjacprec.f90 | 3 +- prec/psb_d_diagprec.f90 | 3 +- prec/psb_d_nullprec.f90 | 3 +- prec/psb_d_prec_type.f90 | 6 +- prec/psb_s_base_prec_mod.f90 | 31 +- prec/psb_s_bjacprec.f90 | 5 +- prec/psb_s_diagprec.f90 | 3 +- prec/psb_s_nullprec.f90 | 3 +- prec/psb_s_prec_type.f90 | 6 +- prec/psb_z_base_prec_mod.f90 | 4 +- prec/psb_z_bjacprec.f90 | 3 +- prec/psb_z_diagprec.f90 | 3 +- prec/psb_z_nullprec.f90 | 3 +- test/torture/psb_s_mvsv_tester.f90 | 40 +- 143 files changed, 3051 insertions(+), 3129 deletions(-) delete mode 100644 base/comm/internals/psi_s_comm_v_mod@psi_s_ovrl_restr_v_impl.smod0 diff --git a/base/auxil/Makefile b/base/auxil/Makefile index 1bb3f1056..9e8597e60 100644 --- a/base/auxil/Makefile +++ b/base/auxil/Makefile @@ -16,7 +16,7 @@ MODDIR=../modules FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) $(FMFLAG)$(INCDIR) CINCLUDES=-I. -objs: mpfobjs $(FOBJS) $(FOBJS2) $(COBJS) $(MPFOBJS2) $(MPFOBJS) +objs: mpfobjs $(FOBJS) $(FOBJS2) $(COBJS) $(MPFOBJS2) lib: objs $(AR) $(LIBDIR)/$(LIBNAME) $(MPFOBJS) $(MPFOBJS2) $(FOBJS) $(FOBJS2) $(COBJS) $(RANLIB) $(LIBDIR)/$(LIBNAME) diff --git a/base/comm/internals/Makefile b/base/comm/internals/Makefile index f80555446..2d0278f67 100644 --- a/base/comm/internals/Makefile +++ b/base/comm/internals/Makefile @@ -31,7 +31,7 @@ MODDIR=../../modules FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) $(FMFLAG)$(INCDIR) CINCLUDES=-I. -objs: mpfobjs $(FOBJS) $(MPFOBJS) +objs: mpfobjs $(FOBJS) lib: objs $(AR) $(LIBDIR)/$(LIBNAME) $(MPFOBJS) $(MPFOBJS2) $(FOBJS) $(FOBJS2) $(COBJS) $(RANLIB) $(LIBDIR)/$(LIBNAME) diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index 4d6be4188..657c9de6c 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -77,7 +77,6 @@ ! beta - complex Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -92,7 +91,7 @@ submodule (psi_c_comm_v_mod) psi_c_swapdata_impl use psb_base_mod contains - subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) + subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -103,11 +102,10 @@ contains #endif integer(psb_ipk_), intent(in) :: flag + class(psb_c_base_vect_type) :: y + complex(psb_spk_) :: beta + type(psb_desc_type), target :: desc_a integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data ! locals @@ -117,8 +115,8 @@ contains class(psb_i_base_vect_type), pointer :: d_vidx character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_cswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -148,7 +146,7 @@ contains goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +172,7 @@ contains ! ! module subroutine psi_cswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -189,7 +187,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -207,7 +204,7 @@ contains character(len=20) :: name info=psb_success_ - name='psi_swap_datav' + name='psi_cswap_vidx_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -420,7 +417,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -433,7 +430,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -475,7 +471,7 @@ contains goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -501,7 +497,7 @@ contains ! ! module subroutine psi_cswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -516,7 +512,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index 92b9f326c..569852644 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -80,7 +80,6 @@ ! beta - complex Choose overwrite or sum. ! y - type(psb_c_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -94,7 +93,7 @@ submodule (psi_c_comm_v_mod) psi_c_swaptran_impl use psb_base_mod contains - module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -108,7 +107,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) type(psb_desc_type),target :: desc_a integer(psb_ipk_), optional :: data @@ -150,7 +148,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -175,7 +173,7 @@ contains ! ! module subroutine psi_ctran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -190,7 +188,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -430,7 +427,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -444,7 +441,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) type(psb_desc_type),target :: desc_a integer(psb_ipk_), optional :: data @@ -486,7 +482,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -512,7 +508,7 @@ contains ! ! module subroutine psi_ctran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -527,7 +523,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 6dcc4eea6..4ed8cb48d 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -91,7 +91,7 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod contains - module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,info,data,work) + module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -101,13 +101,12 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - real(psb_dpk_), optional, target :: work(:) - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_d_base_vect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -209,15 +208,15 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals + integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& & iret, nesd, nerv @@ -449,15 +448,15 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y real(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: flag + class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals + integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size @@ -606,7 +605,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,info,data,work) + module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -615,13 +614,12 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - real(psb_dpk_), optional, target :: work(:) - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_d_base_multivect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! local variables used to detect the communication scheme logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait @@ -722,16 +720,16 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals + integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_), allocatable :: prcid(:) @@ -964,26 +962,27 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info + ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name info = psb_success_ - name = 'psi_dswap_nbr_vect' + name = 'psi_dswap_neighbor_topology_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then diff --git a/base/comm/internals/psi_dswapdata_a.F90 b/base/comm/internals/psi_dswapdata_a.F90 index 2b10ea2dd..fae1a7119 100644 --- a/base/comm/internals/psi_dswapdata_a.F90 +++ b/base/comm/internals/psi_dswapdata_a.F90 @@ -97,13 +97,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info -real(psb_dpk_) :: y(:,:), beta -real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -165,12 +166,13 @@ real(psb_dpk_), target :: work(:) #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info -real(psb_dpk_) :: y(:,:), beta -real(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:,:) + real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv ! locals @@ -565,12 +567,13 @@ real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -648,7 +651,8 @@ real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:) real(psb_dpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index ee4a1a735..75e18f2a1 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -80,7 +80,6 @@ ! beta - real Choose overwrite or sum. ! y - type(psb_d_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -94,7 +93,7 @@ submodule (psi_d_comm_v_mod) psi_d_swaptran_impl use psb_base_mod contains - module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -104,13 +103,12 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -119,8 +117,8 @@ contains class(psb_i_base_vect_type), pointer :: d_vidx character(len=20) :: name - info=psb_success_ - name='psi_swap_tranv' + info = psb_success_ + name = 'psi_dswaptran_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -150,7 +148,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -175,7 +173,7 @@ contains ! ! module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -185,14 +183,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -206,8 +203,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_dtran_vidx_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -430,7 +427,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -440,13 +437,12 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -486,7 +482,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -512,7 +508,7 @@ contains ! ! module subroutine psi_dtran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -522,14 +518,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -543,8 +538,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_dtran_vidx_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then diff --git a/base/comm/internals/psi_dswaptran_a.F90 b/base/comm/internals/psi_dswaptran_a.F90 index bd89d814c..e8e991e4b 100644 --- a/base/comm/internals/psi_dswaptran_a.F90 +++ b/base/comm/internals/psi_dswaptran_a.F90 @@ -30,7 +30,7 @@ ! ! ! -! File: psi_dswaptran.F90 +! File: psi_dswaptran_a.F90 ! ! Subroutine: psi_dswaptranm ! Implements the data exchange among processes. This is similar to Xswapdata, but @@ -101,13 +101,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -149,7 +150,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +175,8 @@ contains integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta + real(psb_dpk_), intent(inout) :: y(:,:) + real(psb_dpk_), intent(in) :: beta real(psb_dpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -579,12 +581,13 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + real(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -659,7 +662,8 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta + real(psb_dpk_), intent(inout) :: y(:) + real(psb_dpk_), intent(in) :: beta real(psb_dpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv diff --git a/base/comm/internals/psi_eswaptran_a.F90 b/base/comm/internals/psi_eswaptran_a.F90 index b5f375ff1..c095f7084 100644 --- a/base/comm/internals/psi_eswaptran_a.F90 +++ b/base/comm/internals/psi_eswaptran_a.F90 @@ -30,7 +30,7 @@ ! ! ! -! File: psi_eswaptran.F90 +! File: psi_eswaptran_a.F90 ! ! Subroutine: psi_eswaptranm ! Implements the data exchange among processes. This is similar to Xswapdata, but diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index 23c6d1da6..8d659f9b1 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -77,8 +77,6 @@ ! beta - integer Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -92,7 +90,7 @@ submodule (psi_i_comm_v_mod) psi_i_swapdata_impl use psb_base_mod contains - subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) + subroutine psi_iswapdata_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -106,7 +104,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -148,7 +145,7 @@ contains goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +171,7 @@ contains ! ! module subroutine psi_iswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -189,7 +186,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -206,8 +202,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_iswap_vidx_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -420,7 +416,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -433,7 +429,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -475,7 +470,7 @@ contains goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -501,7 +496,7 @@ contains ! ! module subroutine psi_iswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -516,7 +511,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index ce4e64e75..0454bc1e6 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -80,7 +80,6 @@ ! beta - integer Choose overwrite or sum. ! y - type(psb_i_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -94,7 +93,7 @@ submodule (psi_i_comm_v_mod) psi_i_swaptran_impl use psb_base_mod contains - module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -108,7 +107,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) type(psb_desc_type),target :: desc_a integer(psb_ipk_), optional :: data @@ -119,8 +117,8 @@ contains class(psb_i_base_vect_type), pointer :: d_vidx character(len=20) :: name - info=psb_success_ - name='psi_swap_tranv' + info = psb_success_ + name = 'psi_iswaptran_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -150,7 +148,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -175,7 +173,7 @@ contains ! ! module subroutine psi_itran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -190,7 +188,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -430,7 +427,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -444,7 +441,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) type(psb_desc_type),target :: desc_a integer(psb_ipk_), optional :: data @@ -486,7 +482,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -512,7 +508,7 @@ contains ! ! module subroutine psi_itran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -527,7 +523,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index 7d9e13a44..46b607dfc 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -77,8 +77,6 @@ ! beta - integer Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -92,7 +90,7 @@ submodule (psi_l_comm_v_mod) psi_l_swapdata_impl use psb_base_mod contains - subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) + subroutine psi_lswapdata_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -106,7 +104,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -148,7 +145,7 @@ contains goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +171,7 @@ contains ! ! module subroutine psi_lswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -189,7 +186,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -420,7 +416,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -433,7 +429,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -475,7 +470,7 @@ contains goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -501,7 +496,7 @@ contains ! ! module subroutine psi_lswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -516,7 +511,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index 094fc5745..ff7d34005 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -80,8 +80,6 @@ ! beta - integer Choose overwrite or sum. ! y - type(psb_l_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do -! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -94,7 +92,7 @@ submodule (psi_l_comm_v_mod) psi_l_swaptran_impl use psb_base_mod contains - module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -108,7 +106,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) type(psb_desc_type),target :: desc_a integer(psb_ipk_), optional :: data @@ -150,7 +147,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -175,7 +172,7 @@ contains ! ! module subroutine psi_ltran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -190,7 +187,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv @@ -430,7 +426,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -444,7 +440,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) type(psb_desc_type),target :: desc_a integer(psb_ipk_), optional :: data @@ -486,7 +481,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -512,7 +507,7 @@ contains ! ! module subroutine psi_ltran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) #ifdef PSB_MPI_MOD use mpi @@ -527,7 +522,6 @@ contains integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv diff --git a/base/comm/internals/psi_s_comm_v_mod@psi_s_ovrl_restr_v_impl.smod0 b/base/comm/internals/psi_s_comm_v_mod@psi_s_ovrl_restr_v_impl.smod0 deleted file mode 100644 index 5767f7ca74babbd3a282c786fa29902a6cc189f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 zcmaI719W8Hw)UNL>`KQ;$F@7RZQHhO+qP}1oL4vwq`Q&zf`X zJw}bH+H38#aU&ps{&|6{cWJn+H`i0YPwLFrgyTM93}CxT>eoCNWm1t6rg%+ypW;hk zYnU|ANKotS>U>Q=`J=@Op6QEOyAu@`l7tE8L4zqSRQBVS z=s9$8babj>Lpe0Ew{8B~vXoZw(bCDTsdhFw+c*e0yLfeP=xF=Y@d;{wz3f1%2zjSf zF)vavHd3)ZP|5rGAP(tCvoBtnG)<|e+*ci_0oC(UkN7MJnQ>wyN%8$bNXcv1XA3*4 z^2^=F&dI^6kzKuJ$~omM;US|TVy+>gMTD~KhANwE<9DkTcGrex<(4I_%xBl8RdkKa z=FUvTM#e+N-iC1$U!Q|BF}4PK54#4g&CT(vr$hAcHOu8|5^Np*CU+aBjLRa6kB*hI z2&Ga>&FyA8#xApn>&N5k?T6A@^iM6ql3|u%PmlRnORQB*ogR*E)(z`w5t-8Ju%5~0 zy(Oo&*KLcAjA9SQO{>?IwR1A8vx<$w;d-mm&;ubnRPkh7#Lr6BE9_IP-?62SjMBH;oMP z9yA3m6xO6(Hw(lw+8|zJKbxH2msbYWzN{{Vk}k8oHZ?yNye?JPDRzYQ)sjk#e>#5f}I88#LBvp~F%G73SuumJW)^zKBF!6USX_)gd386x^#$Oez4cZ*#o+4GLwqjcuc#gADFe*$N=DlCA zhJMaM@&VJKYsj#Me$7Ji3G)??0+drEh&PHii8qV4h_{Nj38)J%7d>#mVH%Wwmo4mw zD7*g`%B<3l202mAlIzSqhj3`{Df0i4&=>!RAqUJUGtQE-uL5Iy7fB0zbIUJLl+{(O(!4ynxZ0Yjn72KhgFpjE`K z1>|KEZJWGxq(~n-;f)5ziS<_5ovi zyxrfHCroU(qPa3tTa_U;E;qw24;RlaHY?I{&@Uq%jTghaKbY=^uUFlCjvB+vJLcAM zyd1eAA(wt128&|j>|tu8c{@bLSp$^`sZKu|r1k%8(x3ewCVTaD ztoc8=-?n4+|8MR;17P4S{4*N(CESl@Am&e~_kM2325G%T@^SVcwGz5BWaF&9N`+J> z=zq*SivO7YsEYqF|DT!vn2DwTt6W|7KV#;Cp)}_HtDF@2+e9UcI>I~rR($D6@JZkH zwEw>vFchYIVAQ4m-R_v!7Be;aV#rq=@Bmb&c!@X0Cu)A@hroAUh+U#aw; z(f^yD^6uxHHs`iFzw8{kVq#wuB67nF0!KIFuJrb+J$&S1HwY#kC1!oT)dr6by%oHEVO1s5fT%#^f1$W37~L#1?*9en?iuwP z4sNL)5Q1WSea!z21#N)=CPB%6&<{Bapoc@8`!}%N>uZ{?T!t@3BFRFKPyfJaluB+W zba%WuJ{(@HsKA0Q@XEp=hm<*e{e8Pz>175Og7EzY7%IFyzOW20Et$;dj)bu|9fOm4 zw{vx{@^q_{z8SpR-9?wa8Qa;oIC)My^4{m-zprr9v=7TfyC|g5r|N*;jp=%0jMEZY z8qxK@9;WoZGo~aspnyb0T+tt3EhhxHnvSe&k^9|MsFM$?XMYO7#_P zt4_K4dbM!q>Tc!S5cHp1RLO`yxS;gDM?V~SGcLV7dbQ&cYwX_I%=B8$T!)2lv9EE{ zSlVlW2*~VNfor%7X4}yBzz|6vremEjHoZTVY-z_)5meGG`xfL|miXV_XRGQT&lcVLk?p>bY z9hfofGJK@62FIdbM!JXgz8!QXwK`hVV?#sR((%|!cRu=XxclL@7n0`FsY7ZT;4#9o zHdkQ&C`RvoyK!^5@p`!NVElAx@4;>aw}@u2a9s4!um5m-GlsCn#l=ui0ujKv)mc=v z)#Hqia)hoM->6y67a_DV|oP8!hy%;;wggy#kEt4ScM-x8A1q z9E<90XwJhwY4GX8Z-4X@185&#zETGE2 z*LprM+oj{q8y~k*vIh>E}@HV$$KrN75yinCdy9wKJ6xOP0K8*M#eZPBxW#!J&?KI^{0E6n#yIs#TbJZxDy0y1~Z^X1b$bUnd`Hj2tiA6NnZ>P5He!DYj) z$x9G1`Z9HcYf9gg;6jh{XN@H0Lr`U&l2ui1-jd9mytZG~w2{fQrhD!`dUkOy$6YE5 zX2&)!{rl(wo){tL;_UHKUF|H@;lq!?*ZuILN#q2Cs6Tv5|WM zP!4m~upK)RB9XS)j-4SkE(^hl6m@u{(+tHBE=pG8#$ zw<93!I6+U4F%`^23NzNKXxh|tZv5(5af(2wUfVO4kY$Uynt8?a=yoL`!OG zxhCqC-aCWsp1ePU(>{CD%4ob}m9EisXOpBgL8t6R)Bl$WIXR%~`c<6LkZ+%=J-N#k zaYPkB;R=uRM~!p17G{qIwv+C*ZyLsc7Pfof7$)1`eK6=RU!i7C2;bDPY8o*({}G-e zJpWN`lpTQm2xH{N6l@D}#twiDF=NMfKs^~vfg_+0O9OFY4=j&_j;ya(I@F_A(vE#> z+RC{~;d&A@f51g(Xwy-2;4WoZW+oT7|6s zBTKJrHrvj)q!3rPeqF3|e^P!W101-hwC_IXKQOHZ8ii`A`9VYq362Z)xx@CqyXdEZN>c6;cp#ZT zXP^O9co;*10)Q%@1ynqB;Cz&SU^s%g?v(LZDFmtGdkYheDA)K;D$oox$U#dO3@z4mfWe6Ch zPyf|F8c90rYadCr6d>m2Oiw9~h3Ed&ZLu*Gb!#T>BJ6g}hSU4r9j z0u#k{)qJ^PVpY+#2j5aNHE3utSGugc(XPEAKj?g_+;sZeLJD>H@3ZFwkky=B=UhNnA$2_PxuTVhsacyAybSD}14-)$bN+jBSYx27lVF9NZG;f2 zR0^eB8m3$drBWKEQVOM78Zg@J2~>*7f@=9V82AHQ=iQ@TWhlT6fuq0n;z)81G2Y)> z_!_#HX@)$o2sQ~0+dJdT>WXI)LU^9Nz|f_MJ9!v)ad@p|&L)rv9&56l1!E{QGi*97 zGz(Et4~mOXR*xm)qWFozh${jz1F|j*9c#wt=`k`o#XG;n$HnH+pu5X6KzT_P1nd=z zL zW0+|UYkFAF}}&n3-* zsJ^c~#k$b4Rrr*bi_kU3nS>z4MWZWHSurU>#Fv)>&EZKw5dICH#hIBzh&RpUMb!k? zFfOchZOBs#N98cjr#1$i;$3J=ntonzZ=!N`HgWJkbU2_Ks$R%IdMOQXB@OLF3fzR! zzXI)b@jvF^d(Oi9lm_^Qz-;+m5Eu>!3dgzsY^qG9;OA!1n*B^7g&g}wiBm}VpV)>iOLXVG1UH)oiO2n6(R>C^$}g0+L^S;s zgS`~F_u`w32U~TDGhm&6bYeP3EH&VDTT!NEgj-~(eNJeXfVRSO`3Z^HFSJkF-9ynO z$|Yr+hSv^@#^`!;yEk~~7)=r>-V?>ShOJ{&J;h<=$UQ9_Shh18;XSXRX&x|K+?84 zYg=B0gZD~&us3!Q8iLRUofmQV{;q|oxO1@<(!0*G-n0tAAA`rDcda*B!7gy!R_jT% zx%5q<`UP0iSx7p8A-BIw@I6`1lpkn=g$9U$Ev+rofj<-rTqRUh0h~ z5p%KGllGUYuGC*wk&lUj21Hz)LpSMTrEB@=>o!mssO7%l8Hmre0OuoMh@plYK@~LIur#I9B1AYXF+5L)TD2tzigS!1C7om#s9JR_o|pf_0{% z!cSQ!Odol!Xl*8cqk+W``fb+!@d)e1TFS77VLgX^VjS>?@$a=e3E98xFXp42iiCxe zCKv+4-}6tkpcm-s7_j7svQ5uEl zY)?Q)#b(VA$KCl92&u+<^f_KYkp#5`)GaneAXqZ*ZDl!Sz!W1u9wI=J03bK^it`OT zS8-1n4$&a7Av%|g&}3%>VqfU$dx=2v2n9<2I>z9)yZU?{cE)5ITbp2GpfVme@)FXA zREy>B@yZ&Uq>7*+o#>NbrxlJ8Ns-Xs0HJm3y-uJhL?2<>ri15@pr!HQrSjvY3g9ud zjVJ>5Y6ABf0{2=1_c{XidII+b0{2D&_a*}OW&-yX0{2z|_cj9eb^`Yf0Bh<_F*xxa zZyJXQYp>Rir`L=V0#={W;VlSIg{hoBfQ+XUSm<|n>GpV!$+#T_=ud#qLb#tV&%P4M zlD}Y^emJE>=L>BN&V%-@gKECYb#bSu38uCA!t_MBN2Niv4mgS&axhE|&4Xwv2EjPs zl(nR4FcvJ1tWT?`u**3`Gw#vFw%o}r~|mC4Shum z{D9g01oQi9)uku6*8#lILVltNe!=v8f!%!hLjn0?0JUDjwKIp_pn<;Z^|2(1P$p^% zoG@#aLq!Y|7dzj=iPz-aWBv>2sgRhAdW;rTC2gz&qSJl#7CMw__O6$!?VRPD%nDR%BZ@&`H5fzQm^w6Axj&PNygM@v-{lo6=%t!#=6xZyspE(gQ8ilV! zrKo7}HCzfi9`vVLe*_Aa%);A zr^;9kmmXhKJ(1*YCMC6Ulh&Wvboa8i??J}XqwYhU~JMew> z5PYhocr=Otbc#?|l)zwUeF3oEJpW@^&D^FcT<6EbVi2$BN1lP$-JfHSwQ}Zy`FwW0 zpAoLIe7vQ21d4#46roTkph3|2{9t-{{;jfnx}|sw$SIqS%TfN%NO^?8iU2{1P=djr zBIs5KyjVq6V68K7q!(*Mmme}d2EwT^T?V z0b@*uSmz(B$|qTgN2Uxwp#-m8=A)RY)tVI2*SG84x66zG?Sv-K2E(sut!0*G;a3Nv zuWC)z>!9D^w!o0GD-f8jz&lj}JW_;u3>KMuAwOof$xeq~B)tq0i4F}d6Hl7#nt%Z} z`a`PoK~~w;#ReCQ56WZKB@0s(BUYFV*kej@!F3~2n%iRjl#YPe+GZ*|2$twk7?N+= zn7m9gU4p`NCQx^--pbs|+Q?Ar1e@SSyx?B-Y#r(4P@A>sL1mZL|6v0b*Wy2|q4^wz zp9~h}#P^EwczXXcVehp#M$^bR{Ya4%QUwqcA<;wLhWTgOMQu5pS4&gXD9~Yj2}FL& zdQpJ);CO7A4Y4A*)^b$0sr!3r^_HICR0Z%z8Ty6-`U#C|!DlD$fvEZwC}m&$^OG|4 zYcR;hwuul_6#x=BmRm4DKY0^KrpK2`M`I~BxJzLf*AO!ah1iAUs07(gVylPC`gWWO z00o6qqCM@!+u1s~N)V+_jG*c8!;cbE_u0AuDVIm0Mt4}M;_^dn(zN^~b5F@JrA|l6l z+npO~EoAi#z_8?pM}Ffzg!xiWT^^6+;weC$o#Yp<^bVQO@~qYzT8#bGy8jUt>IC7uQ?QoC#?=3qYh0( z4HVz=_X6sj^*1%+Yh|LTYn7?I?7!vC91awO(a#6toAEC-u_>ChIE%vzztjHPdWAI6AcVc(Ef<0h>Dh zOnXvMVMKwvj>O<<$gn6)7<^JGIg|16$wt%bYXZAjZLJ;a>ObF`Sb1T}!Ig1@Sv*o} zs7>!#>ZTU4k%=r28zH_I3(k20TMfe=9&C(%b=#zR=VX9+k>-)R#Du`~ogO zhU4+vTSN!AE|*|>)1(IN)yf?^!0{kRbxjc}&>jP$iNyMyG}zN|dYtp;U)s%hje*Ui ziV7j*eQN5{q(tOylc8p-&FkJ~!U7${O zig4P{*K1K-p-y(TFz=`{HLkow9qU-A-=j3)2SxpIa_&0g8Udjq!Z9IlRfVBJ4TxCS z)@N&-)R+f>w6TidLadwo<G=;h`M1o zEH1-FlX5zrgTYzsCh7<#8y|`)e;6p+5J-l>mlWeqzfdlQKs82mL>M#lOYja>uubhP z7Km#+Fy|-`4viLznPhYpV|*Rg=yJB9B?8*-p;KGQ&Dif?h8b9pb_8jEbM+iFuLN^f z6REbw7MPd|Y(^W3UpP!n#!pN3i#XeS!-~nWt|pi_ZY~cu`~;`T^D=6MNQbYfq4%ZI z9Y#hN{Umbl%JOsuNto5;5r38rjy=XJqDR<>3AAeei$PSBcHZiUrZ=;JRH8C9$pbDZ&t2} ztWgZVqd`=a@p7X7Ev8#TOwL_!+4^{T>iM|;K;Y?7|9E-z>G?eP>in$9(f+zQeZbww z>G^ydi&1(l_@MJ%7|Z#5IDNR{`M7m|m^*uj>3KiX>FM-FJfr@4{_^@-d*b=LIb~_w zx-WkN)xX}Ot?~KV^YH9-dC&LRCC|w=|N6WfgpvP2h|)8-b*2d4uHE(8)ARX07sK-* zH_=$|)YOpflh=L)b70fzlA=x2zWe2RDuhzPKU{6(Ai+u5QfyFWccsH61h^dBm>h%C1=&HYE?2bD z*=)0ZyjnbXqL=r>?bMdG5@G)5!`K*)kN3j#{p~^wk4gW_TMp0r<5-T*_jxEieAx7O zeeqbl-<-BQjH&c=yMNp+oZ)_vV%0NMvYEvb=kuX>n?Ghg1h=6WwPVqA7qRDLk$kr&&ZWcgI`|HvXbG%=wsjV)AK}*?lrMlxkzRVB<}C|n>M&k&dJO!m+RI>MB{~10z+wL z+rq5f)i^jb)g^z@x62FO4^PhOlXOJfAxza(di&L4WRUH-Av;1sAwlo2uoKc!QrsR7 zczxYX^}IiS;Lfz3MK+bsEf!?;Z#EsbsBC?$S5@91q?g1efe@Td%tfVRQPnh zUa+L{kK)Brk<(#>XU<_DpV7ToBIQuOSV}1SMk)W?GPwJ)O`iVCRaOWH<^Kohvm| z05OzS0!^Wv&WM4{&g6Y~YNMbZ3{xxui2dEDHXaVjP}Xxl&mjSvycQ8Jt77hJJLUunMe(jnn7wzFgTm0s9i^#aqdja zG?l(<2*)XHy{X=A=@x|L!jaT6q+{}UdYbQE)q(ePy^+4YV4u6-OEI{HNlcHpq|%V9 zLoCN??TENkckicAcdozG$Ozjt%4{*pY_hUw#+u`bnF)k>eSM&w0CE+phV919{`$E3 z;5;s>foC)8o0f5pl)Q>PoCJqcu_i4n8-Bu?Dm$=$C`S|o`Y=+Y(I_xwR+f7lH+9tY zfYy;1Ac`P+@>h&W^bsS=1IAJ5lRH7bO*gpmJ`Kb9ocOuKP=yPU{-)Mtw$KWvZ@OXs zD?ev6gh@;po0rc6m0#(b0@CbaH2g$y{XUhLf|*D4@+yd^`0h}^-wcL?2BH^oF_sC8 zxe!r>2B>|#Gx?M(rHS7#DgwTg_7Uk27oaIrj~}TbO}OVE@%m`q~dcByy7A zCzX6TpZAxyEgv5~I*K!UoT`k0fNDGCX=})u)tGM3sC10Hp3go~ACJ0M6gZ!+;fi9T z(b-&)GXxcur2ubH9Ida&57(KlMSdd@ds(=H+!i82&gQd4Uf6iNWo>|Dl{X}X@`DWgX-?^n#1f(O}|DNpq z0{PH9N8NQ>;quKlB-GNgW=y=Pve&%GSeqKN^TI>YOtnebP%vO7UjMcETPSQO+svGK z>Oxj9^|Jl5o0Uz{+|VHT_d?cDX`KDfWgS6f@G}XPL^FB4XR+Sj22v+s?^*B6-?v<$ zhduLQiW}vFo(UxMWndd88i4q(Wa7;8BgIi98HVC5s;Wo+;o)gf z+UOBcz-EzlV$;ho*F2``nNcx2JfZ68+8D$9jFt9SB`M>dOf}Av8Gq$66&tf0uQ(BV ze@FZEeliT4+4;e76t%DRgNs~AAUtyvUKQ8X+gJRC*{IdO!CTM)vu_<*?-s=qobQup zK&rIVxK#9vIYNs}L%qhTTbohbV|%^MY@s=5p46zM!db&@f4dp)H}z~Yk*;&25a%*n zm(;E?Otr^>ebeLP;l@z_1j(IYoM=))A@2>+1Wb}Y<;{4THTGYE4w)pDFIPTB9RJyA zEMAB`qrWMzOj}D3tl)MT2Y{0V@2B~z>`KD}%mbJm*zCJm`Bjzq?xe{h2;Up3bW!w( z%Tif=%@GWj?q5Se1FgJ6^t8SrXWR1nn#UMV#vZFewJE%2{bE{6C^Y&(68Kh`A|P;K zoIR?rNu1NAd9$(bV=~Z{`@q5i6f6??3^($zDO6S^5>4!l$8IZ2@!Y&p1qxj7+2=%V z^++_tlVRBoB^d}Nq!|yxdnGzQuiAV@EywAB^9Xfodw2w^iApFWSR}N{1Nzh_1Q^|X zb6AlX)k?xi)r;r3sY%PcIJeD3g=37pg(GDP3^ayEn5~DNHD!1;PL*>A^1W&y+QLKOawIg3L zi@I7=35x^ChTmuG|GZN5N50)rjwqHx{ zxQs5Bdc#@e{3nmQ&yf!HCq-PGF(<-&7GP%TnU8CpbPdl?FjDCe+fpKd*Ov2K<+fJG zOgstR73kWRCm=H=Ku@;ZUbj#jHa?-;g0r4gLlmtcGF|cIkEjU42ra>|Boy1wUW$hJ zu#zXdtO(J0s$96%(tBa7`a` zbnq0}bJ!=d#L;lRf=KHpz<>3BpkPRG*WH(rC*d5t?4?26sEKy)gvejW;lxKv^p0%z zo{$4)n)qPnSiULT2@m^igv8={yS?yW;MaW8s@`I%dyG_iv@$=&iW9`A7i#pU`r}XC zZELhw6PSH(1-^~l8av8=>g`Lj--$xO3osIiqW)v$*8Bk**Uvxo>8(kagnj4x_G0TQG z)58YGd-V4==&!D@Q$7rWqv-jDuv0D!_u=U7LaPJA=2ot~Z^$uv9S@4FkVban?-0 zoClS!;eLQxmepq)8FlqSdwf(SffH{(GMv8@ko^wYtfFA8 zqLR3SbDCdx%b@wy{Od&m<&EmXdQ5?uIw6xvrl~QUJ#47FsLtH1Qe7&ma9BbiX($kb z9`1rsXcvc*$VJjCyq;CstG=u|-Ri7j#mtMjLPR5G#%x2{ko#Slh!Deb zke`oF$EE(Y!RW^FmnRkTsd>hTQ{nvGkAoA_M~?K5>crV?!RBCDADXEF7xInXnT#Fr zP1qC<#`^glu((sCvVEJ;j2(NMp=;y2 zoFv+uRoXi)w{u)zZ8y)X>$F7|kFzupmW#hTxB!EZB0ADRfE&cRO)r?!E0Yr5^^d4SJ&MbcUB}49=J6AJ4uwiB#HNm`eZX)NLD{kpecvTH;BJ=!7 z&*@yteE0D3bbp;st%V{iMv3&~Pkn2zC4O=;v9(G*&Ao4u5!4rUTb;{(Y&1dN=yx6x zx|3f9@tC>tt4Wtr4Nn;%rD{RTc8qNL40gZKNGDzMPkKG#*iFr+)d8yPZd}n?frkxxw zX0q#cAR2N+O8hb&d0|AJW@zKFx|aReOuMqy-O|D$!QAS_(8>j8EfcVo0&C5~)G8BR zTah3Xn?+?KGqyH&``FmoMP5ZZWZW2Ya|46VUPT>j`J4FnTIPfS-VTGP)aYk64VVu9 z=o_N=r=he27kL-LqC6DwRapF!;ON^=@y!_7TT%y@Nxh$Gwzt`=ZZb8Yv^)DB08$?Y z2ppZ@Ws<_ql8)iIjlGl08^gKS@W8QwP1+;t?`%M-p9jzh!VL2<0i*@^GuGHeHhc zK33&9Dv`6BpWYa+2SeidD4rF!p+W5xgD@3FiXZvFcktN}scKP?MQ81b(#fMkg24y= z2pL6OhC0Ve#HFT62wml)p~S}y1~|eIK$^oB!LH{nBo2UCBJhik!L7zZ+RLRR`b{SF zvi4hI_-9Q|`5hn0vU{?lvlUu^JGH~=D@c9tMiA2}ql?#GPWQFTsEaZ^za89rLlLnP z5xMA6f5e)f?4^W_k*cztzd^=-E_3zp5OEa>WD3BX!7He`nCfki-n{^H4BqF&Ch%8a zo{i+6NL$^PFF4NbiF0QHGQ`spUUs`R*0Wg)!_E8<_x^<1M{;g` z^%2deku5{v1Poj|ZvahV`E1Cvl{P`C1zUI2v|^Epla@+rC<@IT)gTGsy zC=*ftZGxNhu5dFPHep8!UTZG?4Kg@6%|1D-ye2YjdWzfKPZox|de9zDNfMSillOZf zL+ze&^+iH_?ZCQF?}%V_axqXg@}qvfR=r{(8olqi%HZ`}9ORUYxTc~LO$njuCqr?W zIF(XnW)KLa9pN2W4DeRS=;&dl_LK)>Y*+5Ra4B=l;>cW7b{3fo&lo?i&YxX1JQG(!2^DYjPWwqdaCna7 z23rw#(h=j>IEjvJDaG=~#D+CaT_vz>+6>Vqp%t0E*q*o-pAOw(9)xHI?{LmIToP$S zlB#oUZbfx=CqJE>n!P=|Ub4wX9NwjsuP*!NE+ay)e-QdSpFE5`#Dpc3n{k$R#D`SB z#smNIev2^YRQ}bY^YsoqM}^BmpDtElS8+HraR!940~$QV-0$LivviOUo&D)7EOVyY z>5R<15V?8y`nqv5c=B7hvi%HQxkZj1Lx7PZcwt_|bBjK6Z`-kXQxCSHV^UKOeZUUd zpfrR2{min%O&+RoD;iW?47MpAoogi$Cj}jTEg?Gh%~?2h2mc}~iUVrPD!F(#l4~~E zOoqrp-?nw%T0#!)odN#hc;I2fxaIrFEm!g4hW3e;KF2DQnAQ1ThBdDj1#U0187bJ8 zMpt}uW~##(UmB2oh?*uPL%nPH6J=Ji~N?Mg9dB{{lyI@qG?uLDxBH)WehHp#Wb>eHjeYX$OU8XfXnB*qG zmk=W^^M*{sC-I@7!Oy)081W7r)2vj0p$H3q&nKE<8OHug*!fbdT;X%u(&+Cy;3+JX zRvtsg51T2t0v*!B)$Y7gUi&vX`hK414vA@}~chAa?WkRu`xc#?Yh zED7nf-aG5R|9ETJN&nrPf|e1|d6}_9%e|gZb8`UDvDTFo8cNu?LcPxoQZ2pzluE4*Go;vRfl^)9LYm0yf4UMR9JjIA zOw!RV64Q<%bz|>rf4R5|VXB)ec{&X@R?&QWJ>vRxGSH6MS^ezJh-!l7;aZn2r-DK* zMmkWu6^%rE0<`DhL@fWaed&sSR2Pq;n-t_Iv1{(D%Do!o#w&7BjsqyM5PS&xJLuvKp3@>d4 z!g~BMQ3h0lW6c6fcMg%m70@_M_sxYcMOxUMZ;`?qTGb7QC%I~-n1 z7{2=Gt}OG4Ms$=a>1IK9eAh48aH;BVq1VirJ$O^~C5x-I=mVA2weZx3fw$5-h~-)e z8OSEd0Pr~JPcdcGE>Po6Wi!N+pR<4h`BoWaHN)L)_`Z0Z_A=UioycSItvtsvd(P_x zWb`YiE`6+@G`zuU$mNq?`sYB=P_2W0zh$$s*FD{hvzw6qmM5F^|DkD5Q7pGmD$gia zWJzpy8D1OvUS^1x*if8W;&#R9l4)O%YjHna?7QJ^jf*#xSxP`EltGh+gA*j8K0hhB z39_V~$p%go#a13s2b9soor;+Qb5X6@^OXek*XLwzLPS`LdNkpQfpdih&H35(k0Y+o zB0@+ON(r*Z^GTypP*bYKu%#K5U{i(Fm$gUc#0!#n%WoG{PQ<3lA=VC#ORoF^1m;8! zxNHBQ8K+44Kcnwj-)#rW-v*M*Qmqs?5=+09OsgtJ=4)$oaC8F?=Se-mc&}KgWq;FT zMEEV=^NA|s@1N&U!I(C5I_r}YI>TEAm1%o6{)BkeqC!ZzFa>ewD2gy%k8CLpm3DU9 zF?==RV#-O-!L(dfBxI8x3AjbObjarOKX+JDK`~Mv+%9_E!WP9Yie?p`g`~)*D+=Zw zN=a_1-#xrTlP#sU2dDVUGv}>|A|lqL#4eDcG981{S7jBj%*_Q}m=dS>-PG1=Um#(} z#;8pI>96(Aqi!awKOKif$Kq;#LH!rf%-Ix3O*$0KBv%`>g0Ygp&PNR$awFoa!4aby z(cpsyqw>5uKEyvu-98d5HC9%e?akN3SDWE*Ng!x^fIYf%+fmvR5AzD{o5FzYBmmve|^WWK*!DxNzDm$$Eo zm#a4^N>+j;X`~dK#zo9vQmCbbFBauHm7Vs%tA)Ai%kYE;`xu7{H6$rBWuQzL3pJ?C zSpF{wWh$Av)(NTo3?A{RYY-Al^u1?X0QIjb-%&A2mThLBI_t;))cCToB668hp)yJ{ zxp3E2olv4Zn^r(MwhaGiisFUrU($H>jS5mFj>OCJ_m_kz1ZUh0 z!@s`lRifY~l{Bd`;%kU;V{|Bq&S8Qw1f?F5dM(A0hcy`UPMVXjOksJAAt)DmO7$U1 z)(8mY3e=&i0~(n9;X}3g^p)bvphhC#Vm?22cgV9rm1U__`P3NYIGy|YM3(QkZaf>q zOp@3P+a)FL=om^F8&+J~`ClIA(= z^)09Z&e|5Np*(NQ5>AOnbA#`L=u&R8@EJUscYx0)@UWUT{u$gS0wEH=#kVfR3Ah?dEQe@Kr$!*rzzJS>M-wzlj|)Bv*m>nu(4I?NVmfddO@RdnWw-GU9bQ- z&P|fEvk_vO5E*>5+cqLvhgyT!*04V91>uPJT`mNGY%GvXOVyM5Szjzveslu)v_48j z3VR5!m%4cMmd&WVT2{C$UmaO{em+pw}El;N;dBG4(!>DU%o&z~_t1qbM zM$bQfnn!HQ#O4+$TPSds(C0nXc%;zuOUu+eNX$eD!`&U0iz_%AM?fYfuVi?7&fxfj z{{9}_p9>cMAvo4uK(tFvc1<|RxHY~YPMs)msg!9As)8j@620#fPVXVO)?EN;b2^ZP zX$MZqwP5&A*Z&st$AX3fesUHox1sw@gDLFb9_@Rfyhzc+1FyIjV+ALBk>yU|Il$Y69KNpk3wq4t%8h+#t4mz%} zy(uF%W`8-_Q6bYPh<<8`?tg{reDsbSNAMpYg&*MPq{R{kKjacffWct3V1jvp_gGP* z4fxj9rXPPdcEKU_M;$S2x53i6TS1DmH15G(uqxDlv-P6ADy7SM;k4QIdbA-7eTTQ*U4?k)XRc>e(6%LYj_z(!!q@+t8a#@Cq)%vL*e@Y`X?Q`^*YE3C+7W z9;rFoRmQT)xUCT=W3713nObJ8DN<-{)~qAB-OKoqZ-s=z-&tF?@Ong;LWAEl~N_Z8W*BsdS^xtx@SR3 zyXR0JR1Fm30X!>gb=-H9W1Z1!`!v)6s8Y{CAqb_mWMjnb7K*_&bgfGy7cUP7KFCw_50BxIN;;5>%^wCn&JEtMv1=-= z7`owOJQ5}Z1@+NkXA0>4mkI}cPen@<_We}tqpA`nS@iU33S$#y8`{4@uGyUHwQ}*t zVYsxHqLZ8Gw3e#rsA|3FT8IWk#JJMtqT?JSRn}$`o!N`BXtB)|9&g)4r8t3Ol%%*@ zJ1NphCMErv_k^DPA@h^%r@&0z`9P!+D7-!jHCQJedB(}nBJMUBjAMMdsiqQK#Zc|9 zwGsw>0{#0?~1r`BP8r-V;oaN z9_M23DQ`I>ZTwMTj>Ld=W0x*mB48$YZk(T?cu)c<^_ySPT#nnVToDGoEFD*}x_$7S zoy?ux74cVwS?Z5=K9GqG@R?~^*FR!rRK6dWl)jTxz1WM5@S`o#cUszWt8+*F>FWnx z?@bs2UJ42OmnPqJq&Iw&#u7UpEyOp5)SGO?OD3V7Jlq3y&85a~F=P_Mv!{nA4-PB4GuXU~u($>CK82#n`@bnqj??-kvavKPSMLd=5O{ypuSCTWb z3^9{b^VsXVHR{AC@PsJwpy7h?(%uJnS&N4sR^($U%$5XkRkn|DC24T-%2aHC?)I3) zcFZPZ)*q9-=~rNPk8aX|u46=zMVtpYI{k4Ep5|Ii@jviH@nuP5TfqDeQ<#co5hV>n z6?2hF?uBRq^tP>lD)8yV|CbuL6a1RRjkD$-i`PzQ=r?Pz@PHb)Y|$F8siQx*W2{_R z4w!t7n0$0+9!mr_?2i1CI*M$|Y@b(QWzQ2c&!(MwCG6;msvj16uE}e)X3W`wO?~U8 ze$UP1z0TN6+KE5b$$OJQSApDFsJax6dJ6ES@C2f46MaSZI- z1%fsNl7Dy?xu0*z$5w2eCU1NRQ zqq+Tt{myfAg(L9Q(pBkW+wzP&fKY!U&%5=K90!g zL%WjM-#2K-W@r+`Q)@pVM~)dC1a=Kk8aIK^2{8UXb%uZw@D*r2E#gpAm!S!I-QH-1 z&_Tei6u1_xOoOWP`nmLvuexW>*D)5nUL;oeuEZigeaehPV#&WZLv36O{HC$rGN51X zl%pJeu5sQVL?)zs)48R!QCrByVU%)%8}Wb7WyW1VTv}AkpHDl!>tOl!_c)? zpTlC+^_%Ej?gftt{fp=$&OPQqv5*Qrq>9Fx9`8(_Yr-xo6Ava74mLN(LLG!1iZ~j& z>CZ#PhwaNl2Eo$0XKnT?XQu{4Lz=`%LCoZ(E63r(jn>8fpP+;fHzb|M*5;z-Z_zr(|SS`X}!)AkSW+svK=)a3;kh-lduo|!n-f+ zT=NC!7%8!a0WV8Fo=E2*Wg|cRp;wX5+IU>65wj=mbO`u3jQRq5qdbdr;(cV6Nf=^; zed9$?JU5i~S6h&OA?qsQo%A9Ai84SSC{d0iB@heMe`uVh z#CwsPg$n^ppe{t+D!h!CIGTY(>pXD7@d{rF-y zfqcauI%D*mWWQ`iD`jx4BuPDFG@CKRAu^gx^X~w?}xYZ&N1 z5Ka+97$5bPNqlmh2*^d>9Cl{Za*&?LS+5s!R56|4bqR92^jaMghF6tdrX7ispFJUI zW_dxf|741&ZpT}Z=>-7B>I~#1FuID(d2EFNY-34JU{llXteC|H}rZ1t!87W*5F(@SFee9qOr0R)XR}_iS2vvWZpNK zvCuSq6#;?22f^iOTM?ikDjk4xSsV};P{&o*WwkF&h8?*SmuLP|PRz0tS#kCDq*S&K zP2`Hzp93H#hLCOy9#20@fDS2G@Us-ix+kjAWZSTSkk=_6LeYX{Dzf4 z9?6x2w;xp2<)+_N!^n5y%A^<+fa#L!-C%6mj3Vd)TM<|QUA&Nu40$v;swC!^#ZK_` zb7OjmLU78tcUeq;{inBw<4-NtIZWG$rnam#U!d|@dp(`uR1^hTRf`SI^=jPQ62?ca z-S2vrBndt%gW^4t{1 z&xzwlG6%vmZl7ZIZC^nZ+zz`X!R5f1A#EhX{&zc3Ya@7I~F%T&#(|Ngr5e zRa=Qb#4>t%x7<4q&03qer%uJ$uC{U4D3R#S7r8VR4n6u~4y5ZS=*L zo(0F0tCNe|Cx8;E+1zVwVp!`;M5>SW6r^$$o@^^WTvNZfpnvd&zjBl-@j`G;B#y$x z8ZRy=^eIY`N_pfthpRKZl^NgdEm0@sDu&NcQH&~4!qBvPpl|YrUlFP~JX5FH^(iE` zDpVZ60)P-SYAgOUMQ`^J?PzmIGsl&Q3J0+vfjniX3(_cO!1&}eM#V$Szg`I8>CDBn zuZ`$l+VU-q^ry!0cTVN({>{=Gx+rLi3B0}ZK7E-Uo&Lfn`td?pzRNO-JGC+$hAEOb z_T#ezYgB+X0ahrbG!b+moV3%iG=G9|l6Cev5OLLbQd()0q(a!?)4jiuRL#?j-U^D9 ztkdUVQ3S7_G1opXuWCnVWz6nR8BTv`Gw^QsA?>(XZRc&b9W;K^oFw}z2nOd9iO$C4 zSz9=soMr9^mro=__H7y_Rn1))CXE%@7?g_y=r3Tamu1>|BNJDBJ z%iw8a1YUOzv#Zm>FAORkr zXr{%R4v+vODl7x&bB8CX2RHyfp5SZ}aqAePxjb0>5GB-wSS`JP!GR&u@BY*t5H(?#lhjy7NNeOZ`4wx-c%k&*#v zl*M14l90hh)s|5&Gl!tOsxV67AvHN$S_{Nx!#vC5=j5#c37d3UhDdcwb60$;Y;mOke(8X<}W^6WeSK~zUZ{%s$10}j z&KqXjv>u@Jjr#%-i}CF9ZS0et^7#Igh{9+gxn4cIqnrla>sjolt~wVv>qXt11d8vC zhPRi&LyDaATc%H6tU@AdB?RHmold*;)jv-iWptG2R2K4`k znu^wn*+pASc@HVd%Wxy+D>Y5kqAQR->fNr1FMP7}E5abYJ~?aZxNzeqPxf1#>@WlE zv3a=Q3Gjmv5k-4LNel*SyCV&~a0>ojt*h!RQ^&1m&ZD|QRcuCDZZu2KpaNE8aEsxy z8r|RRcQGhUkke4*2B~u*?9?IMxbHFy$b%{Vz(>5}w!{7>7Ng_*H@K_8LtY4A@4DlD~*?t!6*2k6p#pj&N9!d=ZFvTq9sU&emr-t01MdXHMOUQ!MpHIW$y=7oV}9?VMHX@`1H6&55lkM& z+)g|9!#VdaW@sZPjD?-~F0OWKFlKdLkQFxBPq8&T(o2N6r(h`$(ZVjn-;2!kmf!ak zjg-R}m3As1%DEM#mKjbgpd)GyA+Y7{9vsb2`k}<7ju6+-K)A`{9c(f(9`_aRR9A@y zMI2B;q;%Q@bdb?v8BDCBZ#P9=Yo~iQe>WZjQ^rFL*U`6{;IFlVU2JGNt%d><#zTLv zp)WL5UK-#mH02LUt~spNK%%5GwAm(@m|CQ*0)e#NX+nY48UyHFdUgVv){F`<+t!>e zb5Ya#XZV_P>I$Bj>ZZc0!u)eXmD}p=gY=51b--W2Q#Ld}1?w}Voo>nvk7ltZ`99z} zZo-N7<=(VU)I$cDyv%lWu~k+*NK7~fs?qK)EdV+}Q=>KeG{7tB&64{tqvSvT+K zQF*@HA?lp529%3o;Kskm95D3rR>{CeOh$x~4GAb3=$qR$IJK_@a%uA5(-Zu^Y50pZ zfQKbvh`DITDU4|(XuS>Vm$PB5NruBKgX4eDrAgUd6xCPO$Fji*gJLv! z;5GdZ9RP`*3LDDo2w2Uw#PMs*irFMY5GPWX7be!C{vt9V0)C8W3Rrxyxo8v%$%$sP zpvQR_K{j2ioi6))Ew!vlVF<4u3Yg8}3PTHuuRA&wvs!eWbo>CT>^1Oi)vMK*4s~2=&*Nx)6(a9RcO4EfNAJ#|+I-+8tP znHtPqD4bse>Wp25w7dTZjDUrB${gQ_B)|_S!s3}RZN#Rc%DJLIF}(rz z>dd&IrX3KoKiT!~O5Dn9x7}>Bg}u(}-;&vei*Y_Ss7l?rT`bd6wtLGg^p4OBI(4;z z52zFiN=jxG>z%a$AzHjtDw|#K0F}4s<1oSQ#P0nhoH-6KEPd#@pD5>2mB&H&#Yl_u zA!nzej}Lk7Z%X`qtl0)QinWncnt#uIgJq^9?Se^qFZ~YNUk)4}9=PA)r)M*08t#=o zSW~k+6S9ZFJWQWmMNQF|_QO(c<$V5!hfueC89q8(cXjrM%o6DgfEY$|1_rW^}FaUtuyg#wkbjS1~xj|3daewq%(t`iwMe7+IC`g zy~ktURSEmPgQ0 zut%k~ZB33IW!cg1U1OqwJP?hS^Oq3;P1;F;fu&y{YnuoMr5B+V<@v{ktbwYDLp;Nb zD2E1936K2U4(+eU4NPqyz{>UZH&5OmMjs`9%=aya=|8gGVzA}J36x!kFKWaCyZkHE z!NM#n@Xbj76q!_l;v5R|C!O3JafYr~EaRjiH;o1IZ*1rHDZ(hI*QA`b18*f2#zW_6 z_;gpC`gHmnp>ZneDLJ+Dv@z3;w}Jl7ki-rY^O-<^?m+KFR4_LJar*0|B3H{5QYd1X zx#0|r1>K4CoH}+gJs%F(a|($|nZIGKE{?fIFaTm8cfed+bE`jxmJrf38T=dE96t;) zP$XICi3Mnie^SiejgMMe>8VN-e!*tByEx{qkht0Z-IP&^G`RO~m96U#@izufpYfvv z+Cy~EaiyWLfp!S;cxfSSm6J(n9P@O2*JfI>ilu zK~iD&(l+lT2gwZSZX|nT_`I5*96Fuj1bG6!!PS_i6?S_}@uI$NsVYOV**bT7+e8=3MDMjn?w7e+&d?{V1nMCQCaW=|O#|`X7Ztd9OWhc=L%v{lgkRW4ndt>O8 zU)0E;s)ab^3>I12rn|w@=DO6Vpuj>mOD;u(<1&(%@370qvC)Se9rUNuo`dDP6Xc}d zu0=&yjaOZXQ>90N0jG^u)r=O)TLZU^EHu*LaUf}=OtU|*@6!svbEurh+>I3(o=2Rq z00`eQ8W7kIM47&##{D2ByIdkTuAELPkASHndY)SAFF z6wlx(ETXrkfg|_!cQ(f%YTuI(%{WBa=X-CCB?BuSbBQIf$e+0)9sok&td(=>LmV<| zXu*3~Hinmy_~hF*!g}N6cm&3%{yfFR)c_~pL9v!9`JVl-4Q)SO1}U(bnI0Sf6#(NL z1paE|n;<@k4O23gBw=Sd$S1}!)ZE{5^Ao^`zk{Dg#~S^QC7LKMJNauc{jKiPRQvp7 zNJGNp+x{Oc5?5NgP1QqH7r||JIiZuh&!a{;DT$}LLR3v~-8CbSg@g23$P zP@FADEDF*s0%6L2(Oz?y>aDJ-KHe3{~ej`vr+uY>*;c zCX#ekutiQlYMQ645;F--w{RRRD^;R;cO~g4D+(TIVG+wrCelisRC~#9-IcnL_RYG^ zDBk3neJr^O&nv7%c~b;$N>QmLwC{s^JUPrdR(@Cg-$P-&uXQZx_AEU~EPVz~)eDY% zwgs^kY?4;JKH4_3%M}DqDH_D+SX{qC7`CJuA~ujTV-M>kt+6Zdam6|T5czX@Tv#Fh zKI(4@ATHkRAD!)lYQp)+Y58bYqKvzow9i4f+{vyrN1GW#5lYCP;&glgU2hI<O>khyW4PU~;v-+}LtiI_=bLIogEKM)HB%1b==KwN@KOyPl`tOO9KfIA_P1 z;`s9X`xC<@cX+9jWY?#ttUqT?8@pzL(KWpRp;gkPjllqcjY3J1YXPpUhNzk=vh^S( zHIDd8W~y~3JnYnzvNLayq&niKgLlF1uiaw}rt&!740naz$$6*Zq?poj`;^^84s5b7`e)a%x3PRLVcbK!I0Vi$ic>5j5C%F+w+SCPlzt+;p@jrIcc_kb6DYsTU)D z()&T7pewg*FW)KX2{E%GrX?y3XlV2lF7rsn<>{MBhv{Ws2p=}_gOpoHE@j=^d~;!i z#@r$uT=iBfG$BIDk=JL_t5aLM6A11F_v-`?gVb$;sozsI&)TNJC;lbU$hP6Ii^41iF0Kz}^5qw*d{#79@66Mr-_~ZUCPzc4hRex)mDLNn?%g|4&&TUN5qjH)K9R=7 zwcgk3{d5cY*n)-cy0U_*(eZ<`$Lo=6M)d9ab(A~f=gayl*m%*U8yXSg5Oz5e3&j(g zMe{xzS&oa2s-%uwJ4(-WU@KF$1<%f6)-H?IaF|*+fg)J9#ulPE?J)k~{yE-Ln;k*U z`Kb2lb9>?a{VrjR>EeWC^H~ONxuj;H&!_L9L6WIm@pHv3BtN2s`)taYt3ru>b`yr7zH*GQr645B2 zT<`OtMx(|jhNX{1AFZI4R9}xM$J$Pds{Hz(u%$p?yJ~!qL04~c%cRnJ;2s)_d4%2g z%@VE%QKQA_gNwc&udnTUGhzZ)TQvcm|oUK^aw?B-Q$O z#H2MIU9<9~)%OTE(njawqZjjx*ci@7H`6)a>Dsw<6DiMv%72GQN^XHt((ce%5$?i==DeFN0b{XmJM0_3BIj^I7$Z})P(kEhaT({zOdc|R=c)EH_cXOM0 zDXQHP7sE?qy1IU9t8TK~iv7Ck#KU7S*LclLAe39dX;Q4j-7PM)d4Q0{@Y_yfJ%OLR zxkjUbbZlbNX1Gvgg>myi^;nHVBRXPH$N{yE%ZCg4R+BkM%Yy`&Ek`v!1A1G~Jgg8~} z5(4;k(}Zi0i<7a|hwCBqX0BDbQ#V#EnY+(@>5ef&k(XiJUCxuzR?1Elq*<}l8rmMb z=H!e&k*uWLHaW>H?lwCxngH~?t1WjkSGgqm&zrBrgbM^=+}Z3y1~lF)Ckstycn+fSCFu5OtL^h$;XSs_93i0={>@h^xEA+)v3qqKzBQ!)3Q}m{jt{gnYd_fPz@uI zpt0V|fNtwyWBh0Lv(;amc@8%AcEZ9d&-xu_u!?gM1jA8bfS*3F|l_uMRF+yf%t- zRcN6)1$h&IN2A}3BK2^@reBS2XjMk136NP8o-VW8XZu~uO*71yDJoio zZa9R#%PtcD3TTO(3DEcpg%t~+fz!k=ux%yb6#*R9ODf~)1B@g%piXzGxc5|yGVT%v ze;(?#2y?f+)cR&g%b2JO#)br3Ovcg zBq+1fvb5k2p<3rBodt4F(4srXwO2QUag5-5gQP_7Tq zLtGkgDzyI$9X zGBFt^Y*IC3?vX_=H<=!vj#ZNamVAWdChHj*H%*sILRu%fc*!X*RY?Rw@pLz|P=qKe~P5%cUTr>n)v zc0*z0yj^XOowjI`TtK-%=l8<12pM)|(wQ8>3UHh4W&zkJ8Vc7IO9zDf=Pnkyz# zC`HxuD_ktfT<1cfpodpnnX|=Wnw=jT#ixIGP6q@LV9?Lg~{i*8yDx1NVyw*Eg!a97>xHlx#-(Jo^4`vg!vX zJm{5@Lt_TdH=GoD#A2p&@#)~WpAs7ET!myP*3O<;JsWgL68sB7>4+7K)C+djVyL;Y zI+6#fagzkhDTecs@S&dJm&0sLbjIHr8>tTN=Le2&r^fp}S*kJeWoVq&8l#757iT=R z(4m;^v3q;bL~$>%=y#^rG_j3E_o3x~fFj3-!9+d55yUae+8gbFL&Y7ZdDT$`j-aul zUn2kWcJbk)>{j6m1|_>Bm0YeK37DGb4{PYqOM{4&H?Y_3t&{+1z!kStFQ7K%*s5ms zalSeV?A40)x7Y0Or9;(2?=*Ln&h*X4P-%f(A1=!B1>GbBB|QWEs{oD7OY&{CZI1%| z4eYd^HivvKwE#$SqrqhJBl=InORE~Q=x65eVs7e$fxk+($Ie%Ol|cK)gzxcH*rTSY ztl=qALmwtltmm8^_t}F{Cz?9#`aKiG*%eSuq)?DcvG@$#BJz8dL4vpCdT;qAZ+DJh zxU-K{9QhvL;JCBzHF|G#@b~;Liw+56fGy-EfW<}~WGg$G7dmr0n%3Jxz5K8_*1;TV zc?J+Neu&5i^qpihnwHF)4TnCyd5GQQP&^=!)KAn{Yx3SQivJ(v)MI6OzxpqmFtQGL z-v)3inF_vSsUf+3bj!5L2FBYY`o;06M8dLI3V}2()5x50QKa~y;#t9%S5oxeQUIcv zK%$x8J-N#ap+pVmd3(TldIE#xOI3<9M){>NMmM#B3t7#(`-lOCLd0o__RjN3qy^5$ z@eQNEIC5-Jx(H=B#=K0N_7qZd1&!F9^LRDAc=-GH-&rZ& z8d0e1MIkL|nUwm%Fg9(#p7gu=))Xmu*B}fWsweQ9cuGVo=^~_-EK85RRqVWd9Y9d8 zeQjo8@g-LZy&VqbWq+{AOl)3d2s=59g%s*sEO{Y`G&Mq;5-w>TyO{s5w8&XBJiw*4 zR#?4^SB>3}JH2EOoe+kG4;A40n>I+&;j7fD2w&e@GivYx|D+CZR|72!jf(r%Te_bW z8@s`gycL98^+>98B2FodtWPu9fL@k4nF4zpHPQs;Z#}rNmVX_6Q7tE^vDTQFy^72w zf3@@8E^BtupbE^G19{@16!mzVQZiYebuvwZmjCMa|F%VL0*jZKc7qt0R=JFM1@X8B z4-9GDt)-d2!BsrE<}mhJ4jmODNR-V-MPpt)RPA_fkE`$mk`TK6j5H%q&9}knSogB z!-V$ll>Rx;;){3DBGI9L!lg0T0zLsI%!|Oxq0<;W$Kvf;i1gN<3&@kPvnJu zncVZ!aWDcRV$zBoWDk|t);crsgVvleA0~z$v7}%!En7TB6(wrZ3YbKZKR}Nn547G? z7&${d{~HyIL-K?Gvm{^EV(TKX`!aqsYoZc7ezaIG?y*YWGR_E|HJ{d|X$R~+9o-{A z#eFCgT1p00C52phFI!@5w`5R3%%aJDOg*-eWS(b){55DUaZ}eo94E_$xtm;;$~VOT zf5@9BmTPm_=9+b^ce@Wp2baMOA&m)_-Yu)VX->&1h{`KZ(c5z)+ToKZ z2^m!uu~C-333swiIPgd~0D4k<@+)^xC;5xpRtreA!pWm!-(YA+JQt)98ALO~)uU4f z?NVv*7#^`IoubEjrLKIbj)G07O}%|+z5Md$-BY6uxC?Zy@uN|D&;0fEB38pD?ViQ) zP-fwgmB(zZUDAL_xd&Ww031JaDVQ;2`2)Vas?@bRb=97ZL0F$N6En%#DoFuswB_-$ z6{6EE*CR*ZS%w7P1!WAciEuDbhAvs=x`9)CA`!7O=jk&;Za;CF$eQxV0PA%lolse; zSq#R9c{PDM?E;Ac0(x&!{qW*dv~hbxH{zQ6=UKezYF{&m+WxWD(v3zOCSqZi@ zMMoq;N#0HG(j1nj13rusSu4qU=Q1>ld4O`+mTdih>|@%za9Q;NNeUV!MG3lm<+VxI zI_J4VaZ4uXP-etaTV`R=P6%D+O{13>VA;GI8wtuh$>)wBG8ufy7x%Q(HV#%UeLuQ8wgqGClQVbJINVNE zSjz&<6C{7ny^*qx9-xgEBC7Ns)Tq;^bso~MNo0zzCpMh;Zt!F@j2xhtq2#$++Qp3; zZ;^`X`L&E711fajq%v7j73>UR^ZbN^Az^0`*mc=wfU~h;Gb6|HmMsViws8-edLr#9dANSs6l+2OQeX(A2&&u}3+93Y>Gsc)L>U=h zl}jxxa3c=PTw~MBFvO_Rw6S6Ot8P=ZYmWXA#q3;8GGGAQd>j>%UvhA*(4*oFIPggS zB#OL!bNd@#`- zN|gNf2Yhg0ff7B2`v9J^Mu-l>P3r2=WCTGTtC-v+g@E+ryol?3Z6^VRcWch=t&72k zKT98`DB~21$t$=-pYL|bASuX?77pxE8orT=WhQ%2$O9Ej99Dvo^(hLk7{hMclB%#V zCvw0TL>rV~zxe1z(>3`}yBicSr7C^;mtaZdjP|BgY11C0<|g09HkMB8qlTs~<48Pg zMWm}Ag{;6^WluJ?*MpX1^e{ z4z)trXWZ6fP+0p?(9t~8d|`kaV`=}SW|ZM1T`H(#4MDdAP(>(LN>U93AGBAQberO3hI3wQSD`09XU{ZJumm=wVc`A` z?1Nv6O_fC1<-6GprN5itC@DZic11~}Cy5EF`|Q~`;YZ}edP7{hLCAU))RN43F}Kxd zd1mT7`hQZv-lB7p8jed_h6mns9KE*iQUlS7qe?BG9Q~?wF$-zFcX=W$0oU`zpb1E6 zty%LXSu1fp{}Ge5X@hDeiexuznA8^1qN_3CB|p)q;J;@fv9bJQIcHU$IlrFI%&^Bh zp%>rNezQ?WAd%}mOTuigb~uj<`Nx&(t!)63(>xP_hVSll#W&fMko(ui&jPmV1s z&5S8kOLh@Etdtz}JLG$NLGjfUXDM}hLyYIabv5w=?G0LsaAyTgwVxwsM1~iYMi&)@ zn#Py4_^eJiF#$;4#MP7ctFMPz^oTCRBZ9$P`zU4+U2nL9T8K1(Qxn4W%p050Mn^!4 zl~s_aMtl?Fukl^cjTWPx*zCTgg-?0&nkdeC4}i09XZ4*h$Q=cUO&DMjzQT(-;xHp{zt zGAVS3s6t^>ByZRzitT#7@7`9s9uV~nJJ|{L8unZ#XvYmHuzKYB+;7I%X>6;*%Ke#2 z8Rl&?59(?3d3gaEOK*PM#3+@px^UM8aPWzagAv9f!%i?~KKYL;9kTvZR76t5(uHPc zU+1^Wc4j_2>g6#QSoThRfJtdm;BwIY{C7eYm&9?mO0p1=bk-hUP^A9#Z=Dk}h-p_! zyKW3{#%>6J={KqSi1Yz6NXDmRVP5$3t=9BW6$@ul6$6D;HqS|U-v5;~Vpil{4A}a} zr7sDaI$Z<;yoLA(Ki8Uuc~*U+P)*Y4U)I&u+*&R6IunRw!r#tt6+$~O@_Rl0J=D1L z{JYy+&p$aavw}DI`uDoovi&jOeZQ|*k>m5(EP_CrknCIA8kL0431*ico^her5%&3Z zKBBji8MYy1$_?JW?$-Q!ES@h*m=_THuS$C^JM+K*|Xv+Cz@@(za#g4n;s{53?3erk? z0}_+s`s2O>Aq!n{XM2m$-IX&6QkuSQPbHs#0MCm36#wJ2zR&CBy1uYmH5~}557EJ; zhT!MZ$FoN3J%>uj^Bfg6t zcq0JJFUwG;S&I+q8Wdew`)1+2e_XKxDwierky3zhyywIQiVkL1PfJbi zjjOg-->aw(WAoAe)crzaeCIWPG!H*Mu9}-ptcz(0{D4K5`}2Lr9&WnP3#*3Wbk!Fp zTaL~~->Lrqz@g=~)JZnFUaD{#|_ zNI4-@AYBv+&Dz@?%&AQSV;$(PL?0>NUma8cul@4n^{exJ_NwD(dAS!|y>jQE`ED~? z&qsH&B2^-(h>vsgnT|?J?U`Nx0}9Hs+e7X>fahA~j2HFU_HY~5c^K8$Y1uN1!rOc= zvC}FO8z(X@!ObxQ%u3d#L2jh84erthYFy2K<_t$|o*ZgJ{MNsvKKw^lUhkmd>4wn` znjec!VcTS_WPYK8Ez7?&YQL60!xN8P$}B#L+?;2?RYH#xcffWoUfq#|c=dp9hWRt) zmTDOZCt3T!?nrLkRtueJN>WBSe`&?_Pp0I*=N?Vb^TsB~*nh94tFZ5)k83gncP1FZ z|HWO*82_$xqC;}dK~q%G-X5c2f2BQF)EO8vuE3|{xFAeVKO?+uX#uTWj_SPb zdZRK^IB(DCJOt5O6KI}$Kd;7*cAteSNMsUu+NgecFhQErE7@6SEFyrK;tosOBphla z%Fsbxs*i@t9h_^%1GCQ2kZzEyv<`-UZpx)!&@l(EEEb6w~-Yjqq(0FGIve5qe z=iNJfJHmjNk}<63U8`shx(bo_W>n_;?1dToyL%M_sbGwAxFzSNP4z23gjI<#^7yeo z{QU{y?<|uBWAT?G%Nw|&g&R_qBM{K7S>f_{{C36doj~Lhz73gOe5lSp(ia*7!m*g2 zK0w&m^X%xD%!%U9&RI6q+YOf&^%@Q6ekQ;bU2(F1a7`?I;e34WTJ`6|aqj4L=IS?? zBrQ*9duB+d0--(h}!KmRuME8d>sKBdFJ(K`_X-OpG*NaOtP<jj;o6XqiFKX*4(3=G>y7drJR|3{mvl1 zQk44(&u;DgSmtdiyL)5FRdU1e=w&hEKm#CMI;+UlUw<$EC)%)3e?)5DFjd`~ZwuqdtjM3FkA4J~R$}KWi#~6}h zlnwtRa<8?GOTe+iv2-r8{2S$!<@MI)lg7115;TK=XZiM?I@8t@$<(n?O*pH;{=cBD z7GiE2+gaJ0)$MUQX(_$7#9%&LE-bs;IdDOAs*UBQgz}n>HsTarmHi`J@&ItNM}%N# zk`BvY*N@ug5O>t@lzkyGpf|^v$?R??QKKI ze%99pXT0!nBk?otDex+L7X+c#_LmeEOuNb4a;J3p%Chq%jhHovuJK62c!pC1*(y8Q3uk^ru*Zl1Q@gTy(% zseV*0{P&N09EPHjUhapAmuOh;MV3jz0X+SJ3Fs!=zNgUYsd+i_<@R$Mq!ec1bw2c|ZuSlus}J*I z7(iyb{H<)yfdLQP`%}IdTNEpmNHdwL^?uBbL(+c6oX@B9#CUkr>UA>q7HR7`lHDvQ zis|Qq5wNpp%xS6qhyM6+nm3iKdztm!5e2d%+F6d(Z?v(_eEGIMSoWB)+oNt+exp-w zd2@arv%O86wV-9Zv$=(Nl7TN|`nCeO%_Aavw0Ds|)G?-8t7DPh+!1N}e14x$!M)+w z@$?Uz9@G?MqJ|ilnbz&60ES2h54K2z3>9L8jfiFu#P%^HXy%5SS3vYW9qrc6&49Il zAgIei!&G=qg*o`u3UqFlaGKv%gZhq&n?e{5o=fhy))Gq&38C5hJI@LG#4f#Jg!?L9 zZ9=}@6Qt9OWp0An((2}bXC)w;;Y_^tbH{uAky?d!`_uBVo_5jFwa0l|a5g`(%v15~ z{FwlHf-IwGyk^71?OO3*21lyBVBF@bfIp?uVVvSk+j-U9&T()nx~CFtcb zq+`T@daac*5}kK^TmU@W?%JRpQHU=eB%}k*7vNqqrhMEH1j7O1Z_C ziR-fR1fyn^E8-8AnWyXA%WdKH8Z6{SwZB~hvAI=@90QM&UK%JasEHq|uy`=&*URWt zcV{Ys*9fkO9FU}E9?w0Z7-QXC4DM;qQLP}@|7hrm9R+JD^kA-%2=(eM!zOx0mAL{k z3`RWH*&LGma**isJ6+%FwkY1MB72HJub{GRHFMIM&e=RFA;4~is@{0UE~Z&DuOz-= z6#0axVu?PkNifE+1)T=I8bdh|#^I#iP5U|`v!jk;2(L3f0Lci6{P~Dxn1fmB>PY>p zIgpk$o4WLV7#j{;oFp{&Gj$+{<)5TX>WUdd=N29{vWX-A9M%YXQocKg1xGS;L8j+8 z4TW{y++ac?!C$1#DOb6zG%bslx+!qX;-v3%ycW(smeV0gQL^DpzXQhqUJ^)og-l+( zmiZ)rdqfo5t>un6dV~}kc_aP)EmX5vldtkLgba* zY*R`rC=ko}S~$6i?sNcazc=B_zAt(w;vzJ%*NbM}jz8$8FQ-``Ot6-rkVq`D77v5o zY#iCm4v%rqWfkx1C+u<)jl1Jq@SnTkoT(X7*ms`iUO#Ts3_y)5PQJ`-qUPGs3|m+; z|9NHka8Q4Q)$@E$WSgnvH%|jtTj< zBvJPw@l(6&k8#Kq)?9h;Wu85ojUUCMvz=dGJAZw=+<2OC1XOpB6Di-{k3rirEpq>= z@>$|k%rr_}?s@iIPd)ponBjyptdO)R&vL&t>Brk`Xd4G?vYp#XKWP4Ks&mgo>qDt` z#W2OJ-17#+HGm)2k*&E5`8q%rJ(aRM_?S)xxWy2Duc$0ZYCOo0GiAZT5#ML1xnT5c`Q_!Gqi(ELX^G^c~>#7Mk3#Jcj12(CeH z)#M6|mt~fsM{5iWMLfvGRSaC){pv)rSiQS{`FB_oc%&uQ7BfaPsK*5g&^m#PR~0z~ z`rfHlVYHhBRx#q@O;ns2fp6FOvkt@>42-lddM4-?;4qYZmNZ8W2Tj7H6ZL~@G7`+S z&w{_hAU8RhQXYfKlJJ7Sb}!!hl@KGt6qf3YXz=#=LF?tL-l+e*+Vu4j*)dXciZea| zyy@Heyw)g0#Y#TCUx((>hu!#m2z+@x)VdCTTZT+Cemz{TR{DOt9cMa-J(4!jMjX$! zyWycgLMVz*#a8~xaEOK?vgdaKi(~g&KDYU*>(J~D6_V&guC!I}_1(hoQvcmCI(==z z!d=$GLt0+&Sa(@u9u%ZGs3%LAYD$Hbn^)S{M~T-QVauLakO1k;OvCmmBCbyK1! zN@pvI3)@VFR*aOwb6+Km2B=8z;u|@Ng+MUJHA}K#XlTjDBM7!}ciRvp0+dP!&A=*Q zBY|~q&~oh6oz%oQ(PuHE7{P`OzAYOD(9mPPJ%#;#t`SeQ7ukite=(q`j|QD{sz(8n z-2L;IZJ0H79ENKT9&B1iO^g?c$AjzJK3dzggt&rk`N9WY0{jF*V*2@l-a_5cw>um& zo}1zB@>m#(pdIe=ZhvCzB}v*;u)o~?7!f4c*j=|Txe3FmnDCaz`vD}z)4=L#Ya}0q zsMIVz-2imn+59*^(c4_@siiivnrC(gfYc~6)C^*nNmRYq!TPYjj`!C!^n2#dUHuP);al6Dudkhd@41z(U)nYsv~9x`-NzyH z6K>)XFr5+Eq+k9hA0IaAhlXx~@YpHCemN`2MLxIGWX*Iub(sB zw~=M1rrq28TS?($;hYMYj|NvaJ7C^&d4Cm)c*7up>7bZa=u729(RA@quCRSLz|ub- z$EB@bPYPY{`klvw^nkCs&Dh<~w{3X=J@%hcecWmFs(lt63UR0@><=}HEN%bBEuh`y zAdlv#T0W!(o&(dJ`yk{F)!>Zm)1VVu4NU=Q*)nS(>0$;*{>k_SJN-nJl)6gXkXhPd zSamBjF|pD)LZyF@ZZRktklXbc_FR=PTh!dEzJ+|DmW+3i~V6 z2uv1^3z8x}{ih1oIfAAN*RK~VMf{SySU-|aZit58D-yejSs=fPozp1H`Qh#b{9PV* zh{0iY_h(Fu7O3DEd3#wNP;FJ`OETq0z2c|>KYY+!GR}82g*`3}=;fQ5=n)`r z2OqY(-qMO+V9VK2ox=u|~!%S1aQ9N4Ol@ zcRNC}ST?aA8HQ&RIIMgD@Pycn&==?Vo8EqhLh==E>R^#3bJFUtWyg<5dWzQ|lZo61fWx<84j1{Tcu6r_jG5}k6cCyfv z|I~WDeY}?s;5|X5CEd?gpQe&WM%JVta5-vfc>uXHVZrOQ%)sz)yEj1va(>A1r3OT# z?~-yl&qBk>(*P^NoNpZa;=Kxfy@4zBtSwERC0o)E)6#|;5cbr7gL+2z)AzB~Z%#j2;!>PW@q*+3SoM4^8mUM44 zD*i~@XO359jy6TU%hFZlOVF*Eq}=a_-x_lc!3aHO^t&178D{OQ4Ov5cxFb=AVTD&@ zo37;}sW9n`&qw4yRn+5>t>iny3gomZRcyXV+U(ilS^O)y9(_WY*i*65*Xd?FaA9{H zw%N{3os&shs@U%7SFho->Ls~Uhu?2=ixqF*nh;~r71<}c8GfhK*U2SMR+#1ZQ1 z9!sZs2yi)aiFjtBmppdEQ-oU52}8-#i&NYZEKn=GEs*xij_^coN}O2T zE3iq{X7c{M+V=6Ngw|^c$aJjy)^WY>i=43u&E(}QHFGG3&Q)9-AqwoJQ}!-2(w#Mm zt@s&jbcN2Ts@XIOer1E>JixNW4<28G)^)m%$>H{=Y0}VDYBU_)+3k;5ZgbtBNZWSo z8kJ%a-zLw$m(Ay0!UP@>Ep8QJRXryQ+_}X)PIZ%?7Ru>V;B{Wv%|1)82Yyu?x(yyW zLb^>g+F^MN9h-kO2DMl1() z^?*G!D#A(#bw5K-Mh70}$0|v-M;Fi@F&pruw67J`JM65j6PeV;&!m5c0EX+qKci)U zW|$l6AdYW$df-OvU#$$*xe00S<8O@$_HLvb&h?ij3ifxp4MYpjAJO~cQwdBP=~Coh z24ssA?ByZTI%}9E*K=J#k&5#KbCj*h6PnJlgi}eXZQoF)Er~!ENvVN(!|ximHeYf$1IcKn8Z(_VyP;V zfn(=)OYb5LTI9k}H26k3B~_o5Vpz+&fRU6cQ+JjDx7PO$LpsIk69U7-Eg0+Mba9o7 zNHHvDk^z{eOcj+2l^}cG$IrO3m2j9s9}|H1hk7K_c`s>{f0>*(*3HlNkGDZ{ITXHU zkV3-}sRe2pZ|R?33@Ui5c->`4?C zRrNu=SbT5IS^<%7{eQwJCb&g*6#e!0{M7#6ROj_+ z_7tOI&isK3{Q(eyrUXce%jMH=j(%uB1F}04Lz&7iVds+GVLYfQWAmsfk<&R`Xv_!3 zMHo+y3}G4Nn`Tb~e{BwZiAc zj&}1sMb=;!6;53HcE28V8f`;!DA$h|34I*7h1^EApn?y*#ItrIDZEiB5s;6v_6bke zi?{|?J&vbegqL)(&60y&r}?w5JBRxb#oKlHFF)FD)OCdD&e+{%#KNBlk<^52(ladE zgCGPZBiaOcn_p`oo*U>Jr7CEaa>P6CTcNdPe#lnKpcCSm6ujMMiRYzt0$`NO(=cNg zh#5>FB7y*EvF4s)&am-JVC20TZ&fI;qzYXuqzWU^g70GLg#Xe{QC*@b&r!u%BZC+W zd#^IUJxlmY2Q9pSLqFMCl*@WFm52df~t<2 zkH_tB-Jg6*-V5qhej3lFtxG+vPA0q=4y1w|r%8{-vS9O?8sFXR8iLO)j0dAEG{Mt< zWoH}N8*6dhZVarY5ED{)a{&k7+t(kk`(P|-CH3~=IA(`|WaL023^rRG4b$b&LcCJe zA64j(v`)=bes4=E_f9vrMHGA|a|Yy478HAto4u za1a}&Yc)_G(uQkNZ$RTU4rY2eG-G+XySb`1wY}53Y1uOhdtEGHizhsjLaE7{sGRVWly$GgfV*5QZHwZI?Jn==+QS)K@;UwAUF zcyr4aK{8c3!XJ#+XPl}G_{dgaEztPlAgiHQgYS@ zUrPRKkbDZj?$^)v+#c@-tNP3D$@uN{sIS%%fbpD6tBzvFvE6;Gg%D0M>MrXmXNAqN zo{#Te`!ik|CawU~W*;lnkc%9+c3~o6mM|y>Z6td!{+gWXjg{R=vj)w8{SWQ_M1GDG zPBT+3t(8y;g&zLPoS)VJPu1|XO9+5xc_O&h!q$~Nx+$yIGOF^F^UJvqu)?otr`J}f zz_dP2Vb)!z+V<-!b9?&4)XW4=#}Q!hwGk^A_z6(i(UpkX*Y*Ds%oUJ_F?}PSsRm(a zk#7_0GPg8xJr|m4Z53K^|M$W5v|R_XFb8E0eN@;()AnW~0Ug?wGtU&S`&pRhdIe;^^9|-A+c{l1~jK;j@V?UvBYk9;*hS?%uis#k#6<0N>zPC zSS$NV;a#h-&x-o5n@-3?oK8}?5Tp8)P{@6Wd1^|uWM#4}U+=~-e${JNSp3Y0!u^u9 z5C*ChY|dPADkn2x`O;=S$eYbDsP^rXgi8>Z#)#if8t%Q_y4Ef^zfrCJ?T%&{hC5T_QTfk{Qx{o>dOT5hc9j<#>X&r#@~X=yYfJ zr~2J~<|IYWs65o~zeM>zv3Q|Qe{@?YawOmJgDY$cqrs232n7cWqqC7}!BC9l`+WZT z=pk2pX>hE(^f`n!1`UuymxfSDanW?_Y7U+fZjFmb zsZhj9>j3iNAeRrkxdekvb<2;y$(gi$DtY;Nf~uk#N`(!NVePh0g&tn%FPQ|Sk*yTn z*!b+eXQNXcNE|^SLpWboT!f&J+n;-}sQ-=E5Ly8P(Y)IG%tt|ISnOY_S>0PsP|IGk z{)}n|c0lz`HL%s)5s2^z37QNK-(;3z()Co0{6?aw)Zn#d61{rUSRS}&%=$1@jedVT zdCpYbYpXmvvF)uxxo@amaSNDb}rSNpsXxUt!&U=$Gl zoGtSCqpWM^RW%@75fZ_2R27SFUQWUIUSo*LU5+?+vR1G} zN!nE}j0_a>cGDt(q|@z#!^A3X6i#K=JmB0gY4N3aCYD-n%Gy=^4DRZruD$C*Ay8_5 zM_mQGxye8{c(ekI@HwXCdW|TdqP^wnTn>A&Ox}QZ1??Qo*&l1RUmGw(gQd?Qk8FKY zqm$*@3Kp~hInvA`|Bs%1QohjTj{k4i{qT{S1f{e)Pd*|He`=UfVR4zw53**<_zae! zN~$JijRV2^EWs*xV^smhn0pPOK5WEjkchLWjlFbJ;Uhj- zJVph1N19f@wPDQ*5*i-Bjl#LX)Wm=(De2XD?wSgH0~C=K*@UsTEJ3`e^o>MHs0@Q7P=e86FuUEX*mDw8I{AV@Uf zk%S#k`g+^w&ki8PyCu^?@81_{6th@2Q4As>Q`;Nd&rcVlUdIDn&{&2ZblXT+zJw!s zxR_zF?G=wm!?d$R(KGDug(bpgA2;`j3sTNHID}^vmd0>0d>w#$TTxx++F9S3&#*4J zzO$sHE`1rKRAh=V!X{g=agT`w(xJtVPbi{4BhR9|by;DwXc*jM88lAzsLXY+viuwZ zTY!fYEuh|tsxvv!<(Pt@N66*yhffLmz#N&+p1E>ROlGn3G>C2I>6 zP5~>r#Z+9*PERhnx>n%vS(pdc3uE=Dyg4O}i?wBH#qRzrRhQh$HwGWu(av-!@$27k z((sspO0cnwS8dF9fIJk^T$x>)^6a7`3gv%grZ)9-el&IH3vgImxaCi1y7mZ|t#s_O z=31Mf2LlCa8&@!TmwxjMA2eRUS<0n1*SHzA;OD=((Q?Io=U&_is215?;hGmxL#3qa zjOL+I^T?+fniq8=EVQQPD;=odl-tuxR=PsSLmCd{X;j)SMF;2CPs;WVfASHc0k&G3 z2}kqgXb;tUHop?$ogR6)agDjs>MR}zFRlj9_hz?CvWKcE8mJ|t&@2ase-B?N(^iI5 z)R1i|FYh^?fHx_oR|y`;ox0S|17lpf;vc91vXmCgxJgZJD`ra0I$JwBW;25*=$j{W z33GFf06}jz2SNW_Q3h;uF@>M>3P%0fN(~gxd{#$2llMh8d?!Q~sqg&ZxK)jr{t3M4 zcyjJsRyQiEJ8YnD9M1I`2gk38KdDmUr*hJ&2C=x|G$fo?@A_gcN7uwDHci+y^Rtj7 zEqE~(%SF;+1R=wtSAIu}VPNa3fz%+%u39vwXEF`ED!TizCg+sQ1l$Q3o^O!|m9zBU z?U`(Xk^hjPR(0|B+2CzafaTIwa?aI^C~*jZY%xnCE+T~)R)D~~JQ)+fxQcI25){Pz z6NEmxjd=QzLp;f2I8!(1jH{l0_R_Gk)2swej=bhDQrNdqSJhMhA=v7f$d3Qlmd?KB+QsKtVTJvcMOzTZ8MlHuzbB4kDe7c& zI-FNmpP(FMX;05iQ^a)?%o3=oN2b*a*2}Jhk-?v$;GL!dg|4f%`@tcnWp67@R9-%n z9}kHNr)Q4ZzP*6_&cVm?eos$iRVyp6x9>&VLsk&T!hAv-4l(dM(Q$8_z}iyka3e)c z)FO|bP8m+Mvr#Fsf^{igH0vyUp@t$slv{6?%5AkRD&2V;W{TeYFnB|fvr{Y&{%|(xZm*NPGa5ZmRYO70zLIUuTrMfQQ6K6 zdWJ;u2%oA;&WSyaMOK*;jg|9~w>Bqb*wIB{EsUo5gcptYC|YJkcXa3hx)4dLTjDo7}Qg}*8pd9L_W#yi)Tny zI;>?#QtIri>Ij^AddNs&ZVvs@kfNbeDuiwvbW=f9%yOJ5$xo5DBYf!<=7;(j&U#TS z81?pH{mtd~N1uaOdiz?8M(Ku&F@b97eh-xZcX(Txel{nqD`i+0sk<2I$ijR2t5Pcp zu6Qm|XX><&m@-vrjcg%;a!AKCy7uFP%GC)0S)*nHa{I|%LV0f9>vWU&Uf<>80|$II zRX8Yo-$vyhs3thAMARJ=nAH%AMV0>3uow1++PPA7;+>XPSES#JbN`KTAbHv~p7Jip zl}eQnUR(u)RU8>@zgA|s#;^Lk+U$zHo|j~OxZ{j!kpvZFoBkF#RJ1FR`qP3u^JZA1 zI%zpLYRg7y61KfC%$YUCbpR`Kzb@xoVFM@pX0dgaO9zH&nx5KE*txk<)VA9l`BlLD zK+91Z>bVUy&W4IO)Y%#%rhr8W39)Uo;hk5KsV3|-5}hI@>6+um=k*HOBTFug{q?`H zx}gFbos3srE=BE_Z_yFwqp*t^R1Zx82k1DyPMe>Mu0J!Eb1yp0V&wv++AWJ%`*j<) z(%BAH#3%45IUZS)8F$dNS@-2Y%!Ra+0QunI9gU7Gt$uS6Jr2^33`9+4+wO2M@QLTV z)ceqG$-^a%V>(b3pAGkU=Q-~gcc)d@+3U3=jkNnFo267U^O~&j|Gof(V#5zCTJ#zH z94WemL8d1|j!fk*hs`qPJM8Y(GjVJ&5cfPbCM-WDXFO^-$ba*p;d+ueI;(^kwDebc zT*e=_vql$>`zK(i&oDt(EQTGiZT#H!iBHpEapmp8W;n=z<^?pRTZpfgTK@GrX4xs< z^(iDl=T`SQ4MSg;sl!8-FOYIN#-ns-yu(R&fC;|G77{=4dzYmMD z7+!uZ;^6$g;_xl#EQM5}Z&Ys#Nl^xY>*k|ZG0iW_>t6U6Y>_4BQUtp=B~Ue&a{A_2 z`ZP*)o)0ASy|(#v^xrv50s8K@ou4{QmKl~BquHEl`qyRo^Gu$(KE1M4L7cskVm?es zDi6Kx*o;M!MJyccKNBOI{og1bO6qI(?ymt zCH9<8;}kGsWe0*tK7Ii{yQf$-2Z!3US6eMR5xio7m4gwqqXt&e^$L*mJRQh zC03bu;AB?%txT_?^l&4QbFgITbRu!Zu_OLe=5({}E61?kqT(FolDA7#6~$b2h)YDE zeVzh~DpaiVhpmbq1^A6+4RPdqj<8H>F%a3lTMk9uMR*p3j1n8MYB9#9`Y}btNlBK< zsif(X$)xGVT&Oq#X#Y(Trj~;z;$;f(#=9CE$P#HJSm3E7SW3TtR9A^Hj&LY?eouXD zSuR#X_2y2QJbe-aRq_vSV#ZIMWEYW92yW_W_tmKu;ilg-cy-8T9s;8Ls$47#ZY%nv zCm{2bskXJXC2)B^NpK>lDi07LrS8|SSP~XV4_u_wH??P|!bl37)XKVeXUAgf?V_zV z0~@A);$-B{RWBzr(uB!vRJPYS`t=m+YB#2_T`-KQa!gmlktbZ1 z@n&F)jA)OKv?g+Jq^bOOUvOTdlYebrTPahrlz&ZdeC=)V;Cl zs$x_stbZIYnrCX2(S)4GLn7aYPHV-Qc{rx>)yOhQG=<88qMV>6(y>LzT4QM46u{u= z6c!lwj!{N$;yVMHI+K=WI8doR>vccf*3govqek4`?Fl>0k|A%*A8V5$#H9^uuR1ro z>)ynw*Fr@K6|n_!DvfKn+V#jfk@6rd9q1=KV1l_a&|$&RmKRsuw`^C``$&O9Vn<=I zU`IrWQ3tZnaLG&Zxp&Z_?7n?kw$M4(-a8w?2h*0 zj`y-~pTeLyXraIBNKqJoQvmNsX&TMZ?@?%UBnSnp8JabE`n+9Ap$l96tdv+<93_lV zbFqZ5kcVIt8yDT)n~4qOzKYc)_UQytn+lkx4I*=z_L0g;9k#H-Xl(3Qr z(@3J8p+K|Y?2F~7MxlEuVoPpchg5?TEs$LQ-gg+f^d9#^PV_PExFq|WZ3ZKC4`raIGrBt3}R_ z=iaD;LzxdIVVNhe@S~bfw!IEhA+VZ+hLb3e+_(gd*HC88Q&>em;R26PhXN}oqyaYz z3mewb2Ae$#2HUUKQ>o4~s0gts5fXyV261}-s@ibAbTVxGZh0tPGRwvtY{-R#3{C2)#jo!E69*-Q{!^}6B#c(&*D|pN zuiEmaTti%wDRr2~X?s2eVB6NgA={NlFZ&t4H^z z!Y0d}awJ``E6n8Zr`ym%w|uG23CU|0?B}J;@OxT`KGE~fWrn<&Gr9*Tl^1$2NCi51 z_0p5yEVS5<8B;se1V1}dJ34<;d#QDXYFi=cbn36-n=}&8n{B+%raMh^$uz#2xL%KHE=+ zFy>wFoHL4!@Jzs!NN58W*VrPRlA5iQ>SG$7JhV`97jo8`ecqgstTpC#M?;qa->`yX zvg2bKXc%eDP~YSP^2XJA?8(Ms8vff1)tFngeu2)cGle0<(eFSs(VoqdF3BD6uBqlp z8wmwVgpB5a_@^q`XO<1NgNJ$h_0jgqSrJsqntH3mVg$1s9aQ=w@s^ExZ@LLJhl2c{ z8$1`;o`vwhqB_N%h0cJ!OxM?c2H&oXWQ1f3(p~8j`DR8^C4?Anr`zOw%VhtGd~Wnx zaU)%&uaTCw_)#5H5ggmxKZ6GGZyo2^*D&U(rH50KZFjxjyPqK}rN4Z4KFnS3TaVzF zhVvwks1J24%ZG(6+Uqu_KcQBa-!vE=LUVUMpS*8ut_fUSc}M7aIF9K?+{60!89or) z+iNU9V`u4o8 zc7}Z7Yl(d5#M&ee)Y4M#3r|P^8;0z^B8bXqU1_F1Mz0=pGy4N>crk7{)z1t$CKEEh z_1FHY8db@z)@3Sf{pI^nuus7wZux_jeJ^96l(*Fy0TC?nsGA_?gpA3oU}gHR8EV<` z=5pw?&Ew8F_m}3?&x_Jbf!q3@sW+>!qxHb>KPaJ1OUp{k*B(7jfB<4^XT_O6;GsVh z`|50sFZ=`bd|F`?;Djt*3@#(b07*pj3Se3on7Dgq2h$IO%FXOZ*83bk5y29_r;MpT zzw|T_AGaARTW@@Po)5k!tv>HJ4*t#5BeY31)Ta4FXAra+b3J?X4Cr&_sF#}#rLhRr z;8HFqk%Dv$1&Nlw{C!lJxrgN&rRQML1i^pf)MFPV{+5O(c1w~=B?gqNG#jE*Q(%S^ z0ZGO;gc(EG>fT2?N!m{je4L*RpKl>X3%b>Qm1T$V4c9MvpLY_f?|%LrL>BnK;<9ac zf>q-Gt>I-oLg@Oo#-oeI>m9>iL*|jX5sE>IBHTqQsnrrMlKmwk>f$KSF}CHLqnY7A z*5HTCQXvI%8uVjt#hzo|o(^}{9d#BI_Qa2Etd$0WY`?&SK#9BuAHzmMOtGTu$t8&n z?!twiGSe9L_gJu$%9^nsJq7bS~a zhJB#cXHkYs&2ckDkvEUe&b}X_`8d1k`uez?$6mAz?Q#}f#yy&^&Z3~K>57ZWYg5nH zKWG@FfypB$;P+7iavMfE=3%{(cgCbxh|mM(Fv42gDEdr>Sz5D+S`z(;+#w*SRpo^hz=?{g zK{Zf18f-fRw`9QsMg?IYh-p!*W5GfBMWyrLMJMjLSYhzN4W&@fx3z;3P$1w+7_*6b zWWWMOI5>u*Wh97W~ECne@I%9Fi6Jg!JUW3gPA|!Q#;7d7|7)eIo&^g5c7H zA|b!r%L4$IELq{{rsdiEfa-!4Y(w;UrWb{JLiqJrQTnrbCPY#VFp>sRWsH83%d&%0 zQ!u)eFk^cn%KHd3_aHRYBs9k1AbTP#f8s3Sue%o9-HC)Wq3-UYmqHp#U(}dUn%Wpu z0=!BUv8!(tR0P8gGVbWpxnz0KJfJduv~tl>b7bD4qAN9^Y!y~3AO0_Q#jl>-`ab;8 zaB4QZd6@5w{6bN0=#7PYzLMco96jQON(N%6kO(P^f3mrt#QI$TS%&=$G{RL3$x(xn z>DU0E4ouTVGHfidszz(Wq>GY@`4*lS^nb84l|mlb%z*(M=GDUgf>iF%P>19%Zwj@| z>10Hn6yZoh6oDAx#6noZpKKL`S0}_oWZ{(vyueMS$Wq^WHa8t z34x0k46#;AR%N#L3eyE}E@?PkG<|QAAIIo!E3OkH&m#zwVhMy z?7M9E;@t?fxXOVq1G($|$)CU&0^XW5KoTs}P$#cD6+~(LzXnnXihbIQr&D~5>=hDP99jK$mq zl`yjI4Y`RcbHOeb6k<>=5ber{n1G#o@0h0n(1j@x3u$~cg{qn8C@*FRsYA;^(Lo7O zGvdNcXQKs+NZlEPFb=sYXkDzdkD~mVgXU8_FyArQ$5`BS5T7MLq!IQhy>GRv*WmfM~q~)m1S?F+G-3WfA;V6!Q4mb~HSJYAw z65gQh00R)UFf|^B(*c30)?e4^vc|+6i7{Mv(%~G%mAGq)i9F*74+W-;WKXO=G9-0K za}v1Ihp!2AS5xZB=)@)OAW37Vyo3+@fyC&S>Xymw2tp%ow!sioAWEv%sf!I6(|la( zoe#^cbWFf8xn7PSYbXwx2U1hq*NonlQqq>vjjRo{|#IUsv8iMv+aTK(IWifV*5Lv?z8R+ecO zdJe9^{c+2M83-LSE*{nDE%}7%Dte$K2iDY#wWfven;xnKGjQjJj2{-DJWzh=yyBz) z+h34*#qwXMt7DzYlM96I@5h?Ro88Z% z9!=9uT_8mWv?6GMxwSp-ClzHOFE|VpqX z4XQfgay6VrKpj1VNBRW)A9BEj6V~jqRB&g)bE1OG?fwQOIt1D$kRX)99C)~xGH`IJ zQ96=?i-O3p!}Qj!|55^IQ+T zFq;txY79gUVmpd`Ac&ESzA!__LVm+c5En{j+>ctBSYw8kScxMomol9RVlp3|B9tL5 z3tWL9$51ofcHrC#4JKK{VW+K};$+iu4L8vdaR_uF9Q_Q!LUepgVxwHnC}x_8D@gx; zXa`Zl$Z@211hItv(Vby`j`?nm--|5zSyBa7U)C;KS?U3cw^9bW9YvNWAsdAbVUC} zpEy#psNvzCgE7gL|6R8Pf8*z>S$Q;Iy-NTB5>|OQV``3 z`F5b+C@BC@R`e^U0!B!&J@+L*`VFJo8Cq+<5Bz~lLqiaY2Nt&IFBz>qL&vU^@ndpc z$w*!wV9aRg84B)PAO2#*PHlOIHTUFi4=iag7y>gCw17#1{|4qwv_-EU7rg7c*(kJv zS5~||b(*k29lfTdwu7zqHD#R82`PTaGGr+TL>UxE69}%B9Vf3FNw<)lZvN8(_{c`# zk^Zv-gx1IYRf3d=vGN)6tbt@5ud_h_`tXstLr0wbKtTPM-oq0&5@irsL6J%Qv z^HF9H_JahIF%6aevj)Cyk{#Jf6n5nkACX5s7T_h{hlo)V;x@MMPDD~2bvtcus&rhx zQsv66Vu+8VfoNOGq*T)ql~zncJna{04jvd^z?sY8$G;OGZxy-y@p9;mgqFF4`GfZ0 z7X(T`j4YGM#gBwM*5wR#If!PE%M1GSD;tC*HVZ`b*nU0}(PO{na5^C=79X_SIm!t= z+7S#r+m|%y*~Qlr;Q=N|{^qmb(L4xt>2OoP1L9P2m3igK79UifMCO)!7($=IFklQY z*R+xm0}K3%P=-^)m;nnD&f@P05-S>3tckg&Q!PV)UL}%cUwvdl=P;g zz;kd|SPYhU1!6${qBFKsrJEGj|u^)Ed?x%)1N{`%a!!+scTL<}^*QD!@A+*hXOBI%~;rP%X5@c#Y5|}s`u%WgodWv)y z1}RBWgVj_JPcU6_8KXg1zTATvY9)IA+==&W(ANDBKzxx@0 z%y4KyYvfP^9M;fpeL*%cXeuBE9PKiyTJxAL9PPKhtnmMXB^YBleyujor_YDQJVKr# zg&=zfT?O+#Lf$6npG)#9fru-YV;20ALLj&i(gZVE(yuWU2?1FA4?MrTrz^~ngSAb0 zVOs&%?hi5*V_+h%Oce#$o@kfXC+DXu#>|KUSMV|=Rk=fM!iqsx=X%wr&MqGz_{|{~ zwWg>p@5ba}2#FUJ^6W1fJhLRhKVWa4+g~f(K9AUERPixz{N`@V)P_Y}`2fv34H#I0 z$*_uX<5);s_C7XN$i=?PNT2{FHb3SOA0{QD%Mv1fotp-J?c8Ev9$%o8o5$r3vbcUy zg0^2{24e9cNuW8RdhG=ydFVym+uJir!t0OwA&~NM4jZz@{4~2y;Hv{yqoV+fU^)11 zS{^m(s$#|EHL&3TB&CRY5cxy|UiK`&MUl!M(8g3zKX2EEy6xG-w6UBu(xo0)OJa2R zbjPnQ9|A?;91xgng9?X$@;+Eo#^$z%*H}i psb_chalo_vect use psi_mod implicit none - type(psb_c_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_c_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - complex(psb_spk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_chalov' - info=psb_success_ + name = 'psb_chalo_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt=desc_a%get_context() @@ -129,39 +127,11 @@ subroutine psb_chalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(imode,czero,x%v,& - & desc_a,iwork,info,data=data_) + call psi_swapdata(imode,czero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,cone,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,cone,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -174,9 +144,6 @@ subroutine psb_chalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return @@ -196,7 +163,6 @@ end subroutine psb_chalo_vect ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - complex(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -207,36 +173,34 @@ end subroutine psb_chalo_vect ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_chalo_multivect(x,desc_a,info,work,tran,mode,data) +subroutine psb_chalo_multivect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_chalo_multivect use psi_mod implicit none - type(psb_c_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a + type(psb_c_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), target, optional, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - complex(psb_spk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_chalov' - info=psb_success_ + name = 'psb_chalo_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -285,39 +249,11 @@ subroutine psb_chalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(imode,czero,x%v,& - & desc_a,iwork,info,data=data_) + call psi_swapdata(imode,czero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,cone,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,cone,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -325,14 +261,11 @@ subroutine psb_chalo_multivect(x,desc_a,info,work,tran,mode,data) end if if (info /= psb_success_) then - ch_err='PSI_swapdata' + ch_err = 'PSI_swapdata' call psb_errpush(psb_err_from_subroutine_,name,a_err=ch_err) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_chalo_a.f90 b/base/comm/psb_chalo_a.f90 index 30d47ba08..d2e3480cb 100644 --- a/base/comm/psb_chalo_a.f90 +++ b/base/comm/psb_chalo_a.f90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: psb_chalo.f90 +! File: psb_chalo_a.f90 ! ! Subroutine: psb_chalom ! This subroutine performs the exchange of the halo elements in a @@ -52,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_chalom(x,desc_a,info,jx,ik,work,tran,mode,data) +subroutine psb_chalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_chalom use psi_mod implicit none diff --git a/base/comm/psb_covrl.f90 b/base/comm/psb_covrl.f90 index 6ae6ce9f7..913554159 100644 --- a/base/comm/psb_covrl.f90 +++ b/base/comm/psb_covrl.f90 @@ -42,7 +42,6 @@ ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - complex(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -63,7 +62,7 @@ ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_covrl_vect(x,desc_a,info,work,update,mode) +subroutine psb_covrl_vect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_covrl_vect use psi_mod implicit none @@ -71,27 +70,25 @@ subroutine psb_covrl_vect(x,desc_a,info,work,update,mode) type(psb_c_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), optional, target, intent(inout) :: work(:) integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - complex(psb_spk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_covrlv' - info=psb_success_ + name = 'psb_covrl_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -137,41 +134,15 @@ subroutine psb_covrl_vect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,cone,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,cone,x%v,desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') goto 9999 end if - - if (aliw) deallocate(iwork) - nullify(iwork) call psb_erractionrestore(err_act) return @@ -192,7 +163,6 @@ end subroutine psb_covrl_vect ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - complex(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -213,29 +183,27 @@ end subroutine psb_covrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_covrl_multivect(x,desc_a,info,work,update,mode) +subroutine psb_covrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_covrl_multivect use psi_mod implicit none type(psb_c_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - complex(psb_spk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_covrlv' - info=psb_success_ + name = 'psb_covrl_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -289,32 +257,9 @@ subroutine psb_covrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,cone,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,cone,x%v, desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -322,9 +267,6 @@ subroutine psb_covrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_covrl_a.f90 b/base/comm/psb_covrl_a.f90 index 2d389438d..d42bcd943 100644 --- a/base/comm/psb_covrl_a.f90 +++ b/base/comm/psb_covrl_a.f90 @@ -30,7 +30,7 @@ ! ! ! -! File: psb_covrl.f90 +! File: psb_covrl_a.f90 ! ! Subroutine: psb_covrlm ! This subroutine performs the exchange of the overlap elements in a diff --git a/base/comm/psb_dhalo.f90 b/base/comm/psb_dhalo.f90 index 4a585be6a..8a182d457 100644 --- a/base/comm/psb_dhalo.f90 +++ b/base/comm/psb_dhalo.f90 @@ -41,7 +41,6 @@ ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - real(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -52,7 +51,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) +subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalo_vect use psi_mod implicit none @@ -60,16 +59,14 @@ subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) type(psb_d_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran + integer(psb_ipk_), intent(in), optional :: mode,data ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode,data_ integer(psb_lpk_) :: m, n, ix, ijx - real(psb_dpk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw @@ -129,38 +126,12 @@ subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(flag=imode, info=info, y=x%v, beta=dzero, desc_a=desc_a, & - & data=data_, work=iwork) + call psi_swapdata(imode,dzero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,done,x%v,desc_a,iwork,info) + call psi_swaptran(imode,done,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -168,14 +139,11 @@ subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) end if if (info /= psb_success_) then - ch_err='PSI_swapdata' + ch_err = 'PSI_swapdata' call psb_errpush(psb_err_from_subroutine_,name,a_err=ch_err) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return @@ -195,7 +163,6 @@ end subroutine psb_dhalo_vect ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - real(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -206,36 +173,34 @@ end subroutine psb_dhalo_vect ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_dhalo_multivect(x,desc_a,info,work,tran,mode,data) +subroutine psb_dhalo_multivect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalo_multivect use psi_mod implicit none - type(psb_d_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_d_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + character, intent(in), optional :: tran + integer(psb_ipk_), intent(in), optional :: mode,data ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - real(psb_dpk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_dhalov' - info=psb_success_ + name = 'psb_dhalo_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -284,38 +249,11 @@ subroutine psb_dhalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(flag=imode, info=info, y=x%v, beta=dzero, desc_a=desc_a, data=data_, work=iwork) + call psi_swapdata(imode,dzero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,done,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,done,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -328,9 +266,6 @@ subroutine psb_dhalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_dhalo_a.f90 b/base/comm/psb_dhalo_a.f90 index d802ead5d..f068db270 100644 --- a/base/comm/psb_dhalo_a.f90 +++ b/base/comm/psb_dhalo_a.f90 @@ -52,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_dhalom(x,desc_a,info,jx,ik,work,tran,mode,data) +subroutine psb_dhalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalom use psi_mod implicit none diff --git a/base/comm/psb_dovrl.f90 b/base/comm/psb_dovrl.f90 index ccbcce6c6..a252d6582 100644 --- a/base/comm/psb_dovrl.f90 +++ b/base/comm/psb_dovrl.f90 @@ -42,7 +42,6 @@ ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - real(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -63,35 +62,33 @@ ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_dovrl_vect(x,desc_a,info,work,update,mode) +subroutine psb_dovrl_vect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_dovrl_vect use psi_mod implicit none - type(psb_d_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_d_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - real(psb_dpk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_dovrlv' - info=psb_success_ + name = 'psb_dovrl_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -137,41 +134,15 @@ subroutine psb_dovrl_vect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(flag=mode_, beta=done, y=x%v, desc_a=desc_a, & - & data=psb_comm_ovr_, info=info, work=iwork) + call psi_swapdata(mode_, done, x%v, desc_a, info, data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') goto 9999 end if - - if (aliw) deallocate(iwork) - nullify(iwork) call psb_erractionrestore(err_act) return @@ -192,7 +163,6 @@ end subroutine psb_dovrl_vect ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - real(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -213,29 +183,27 @@ end subroutine psb_dovrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_dovrl_multivect(x,desc_a,info,work,update,mode) +subroutine psb_dovrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_dovrl_multivect use psi_mod implicit none - type(psb_d_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_d_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - real(psb_dpk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_dovrlv' - info=psb_success_ + name = 'psb_dovrl_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -289,32 +257,9 @@ subroutine psb_dovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(flag=mode_, beta=done, y=x%v, desc_a=desc_a, & - & data=psb_comm_ovr_, info=info, work=iwork) + call psi_swapdata(mode_, done, x%v, desc_a, info, data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -322,9 +267,6 @@ subroutine psb_dovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_ehalo_a.f90 b/base/comm/psb_ehalo_a.f90 index d5431e691..712ae961f 100644 --- a/base/comm/psb_ehalo_a.f90 +++ b/base/comm/psb_ehalo_a.f90 @@ -52,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ehalom(x,desc_a,info,jx,ik,work,tran,mode,data) +subroutine psb_ehalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ehalom use psi_mod implicit none @@ -174,7 +174,7 @@ subroutine psb_ehalom(x,desc_a,info,jx,ik,work,tran,mode,data) & desc_a,iwork,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then call psi_swaptran(imode,k,eone,xp,& - &desc_a,iwork,info) + & desc_a,iwork,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -254,7 +254,7 @@ end subroutine psb_ehalom ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ehalov(x,desc_a,info,work,tran,mode,data) +subroutine psb_ehalov(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ehalov use psi_mod implicit none diff --git a/base/comm/psb_ihalo.f90 b/base/comm/psb_ihalo.f90 index 57e529584..9ca4080cd 100644 --- a/base/comm/psb_ihalo.f90 +++ b/base/comm/psb_ihalo.f90 @@ -41,7 +41,6 @@ ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - integer(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -52,36 +51,34 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ihalo_vect(x,desc_a,info,work,tran,mode,data) +subroutine psb_ihalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ihalo_vect use psi_mod implicit none type(psb_i_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode,data_ integer(psb_lpk_) :: m, n, ix, ijx - integer(psb_ipk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_ihalov' - info=psb_success_ + name = 'psb_ihalo_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -129,39 +126,11 @@ subroutine psb_ihalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(imode,izero,x%v,& - & desc_a,iwork,info,data=data_) + call psi_swapdata(imode,izero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,ione,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,ione,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -174,9 +143,6 @@ subroutine psb_ihalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return @@ -196,7 +162,6 @@ end subroutine psb_ihalo_vect ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - integer(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -207,36 +172,34 @@ end subroutine psb_ihalo_vect ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ihalo_multivect(x,desc_a,info,work,tran,mode,data) +subroutine psb_ihalo_multivect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ihalo_multivect use psi_mod implicit none - type(psb_i_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_i_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - integer(psb_ipk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_ihalov' - info=psb_success_ + name = 'psb_ihalo_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -285,39 +248,11 @@ subroutine psb_ihalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(imode,izero,x%v,& - & desc_a,iwork,info,data=data_) + call psi_swapdata(imode,izero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,ione,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,ione,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -330,9 +265,6 @@ subroutine psb_ihalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_iovrl.f90 b/base/comm/psb_iovrl.f90 index 3dd459f1e..f1b9767a4 100644 --- a/base/comm/psb_iovrl.f90 +++ b/base/comm/psb_iovrl.f90 @@ -42,7 +42,6 @@ ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - integer(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -63,35 +62,33 @@ ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_iovrl_vect(x,desc_a,info,work,update,mode) +subroutine psb_iovrl_vect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_iovrl_vect use psi_mod implicit none - type(psb_i_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_i_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - integer(psb_ipk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_iovrlv' - info=psb_success_ + name = 'psb_iovrl_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -137,41 +134,15 @@ subroutine psb_iovrl_vect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,ione,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,ione,x%v,desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') goto 9999 end if - - if (aliw) deallocate(iwork) - nullify(iwork) call psb_erractionrestore(err_act) return @@ -192,7 +163,6 @@ end subroutine psb_iovrl_vect ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - integer(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -213,35 +183,34 @@ end subroutine psb_iovrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_iovrl_multivect(x,desc_a,info,work,update,mode) +subroutine psb_iovrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_iovrl_multivect use psi_mod implicit none type(psb_i_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - integer(psb_ipk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_iovrlv' - info=psb_success_ + name = 'psb_iovrl_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -289,32 +258,9 @@ subroutine psb_iovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,ione,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,ione,x%v,desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -322,9 +268,6 @@ subroutine psb_iovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_lhalo.f90 b/base/comm/psb_lhalo.f90 index 3a1885619..322ba72ae 100644 --- a/base/comm/psb_lhalo.f90 +++ b/base/comm/psb_lhalo.f90 @@ -41,7 +41,6 @@ ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - integer(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -52,36 +51,35 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_lhalo_vect(x,desc_a,info,work,tran,mode,data) +subroutine psb_lhalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_lhalo_vect use psi_mod implicit none type(psb_l_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_lpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - integer(psb_lpk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_lhalov' - info=psb_success_ + name = 'psb_lhalo_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -124,44 +122,17 @@ subroutine psb_lhalo_vect(x,desc_a,info,work,tran,mode,data) if ((info == 0).and.(lldx= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(imode,lzero,x%v,& - & desc_a,iwork,info,data=data_) + call psi_swapdata(imode,lzero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,lone,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,lone,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -174,9 +145,6 @@ subroutine psb_lhalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return @@ -196,7 +164,6 @@ end subroutine psb_lhalo_vect ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - integer(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -207,36 +174,35 @@ end subroutine psb_lhalo_vect ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_lhalo_multivect(x,desc_a,info,work,tran,mode,data) +subroutine psb_lhalo_multivect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_lhalo_multivect use psi_mod implicit none - type(psb_l_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_lpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_l_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - integer(psb_lpk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_lhalov' - info=psb_success_ + name = 'psb_lhalo_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -285,39 +251,11 @@ subroutine psb_lhalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(imode,lzero,x%v,& - & desc_a,iwork,info,data=data_) + call psi_swapdata(imode,lzero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,lone,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,lone,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -330,9 +268,6 @@ subroutine psb_lhalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_lovrl.f90 b/base/comm/psb_lovrl.f90 index 43de77bb0..b669e31e0 100644 --- a/base/comm/psb_lovrl.f90 +++ b/base/comm/psb_lovrl.f90 @@ -42,7 +42,6 @@ ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - integer(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -63,35 +62,33 @@ ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_lovrl_vect(x,desc_a,info,work,update,mode) +subroutine psb_lovrl_vect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_lovrl_vect use psi_mod implicit none - type(psb_l_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_lpk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_l_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - integer(psb_lpk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_lovrlv' - info=psb_success_ + name = 'psb_lovrl_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -137,41 +134,15 @@ subroutine psb_lovrl_vect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,lone,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,lone,x%v,desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') goto 9999 end if - - if (aliw) deallocate(iwork) - nullify(iwork) call psb_erractionrestore(err_act) return @@ -192,7 +163,6 @@ end subroutine psb_lovrl_vect ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - integer(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -213,29 +183,27 @@ end subroutine psb_lovrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_lovrl_multivect(x,desc_a,info,work,update,mode) +subroutine psb_lovrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_lovrl_multivect use psi_mod implicit none - type(psb_l_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_lpk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_l_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - integer(psb_lpk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_lovrlv' - info=psb_success_ + name = 'psb_lovrl_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -289,32 +257,9 @@ subroutine psb_lovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,lone,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,lone,x%v,desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -322,9 +267,6 @@ subroutine psb_lovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_shalo.f90 b/base/comm/psb_shalo.f90 index a0671d4d6..366f3713f 100644 --- a/base/comm/psb_shalo.f90 +++ b/base/comm/psb_shalo.f90 @@ -41,7 +41,6 @@ ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - real(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -52,36 +51,34 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_shalo_vect(x,desc_a,info,work,tran,mode,data) +subroutine psb_shalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_shalo_vect use psi_mod implicit none type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_spk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - real(psb_spk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_shalov' - info=psb_success_ + name = 'psb_shalo_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -124,44 +121,17 @@ subroutine psb_shalo_vect(x,desc_a,info,work,tran,mode,data) if ((info == 0).and.(lldx= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(flag=imode, beta=szero, y=x%v, desc_a=desc_a, & - & data=data_, info=info, work=iwork) + call psi_swapdata(imode, szero, x%v, desc_a, info, data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(flag=imode, beta=sone, y=x%v, desc_a=desc_a, & - & info=info, work=iwork) + call psi_swaptran(imode, sone, x%v, desc_a, info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -174,9 +144,6 @@ subroutine psb_shalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return @@ -196,7 +163,6 @@ end subroutine psb_shalo_vect ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - real(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -207,36 +173,34 @@ end subroutine psb_shalo_vect ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_shalo_multivect(x,desc_a,info,work,tran,mode,data) +subroutine psb_shalo_multivect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_shalo_multivect use psi_mod implicit none - type(psb_s_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_spk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_s_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - real(psb_spk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_shalov' - info=psb_success_ + name = 'psb_shalo_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -285,37 +249,11 @@ subroutine psb_shalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(flag=imode, beta=szero, y=x%v, desc_a=desc_a, info=info, data=data_, work=iwork) + call psi_swapdata(imode, szero, x%v, desc_a, info, data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(flag=imode, beta=sone, y=x%v, desc_a=desc_a, info=info, work=iwork) + call psi_swaptran(imode, sone, x%v, desc_a, info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -328,9 +266,6 @@ subroutine psb_shalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_shalo_a.f90 b/base/comm/psb_shalo_a.f90 index 23cc464d8..21ec8e810 100644 --- a/base/comm/psb_shalo_a.f90 +++ b/base/comm/psb_shalo_a.f90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: psb_shalo.f90 +! File: psb_shalo_a.f90 ! ! Subroutine: psb_shalom ! This subroutine performs the exchange of the halo elements in a @@ -52,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_shalom(x,desc_a,info,jx,ik,work,tran,mode,data) +subroutine psb_shalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_shalom use psi_mod implicit none diff --git a/base/comm/psb_sovrl.f90 b/base/comm/psb_sovrl.f90 index b164b967a..9ca9c6b4e 100644 --- a/base/comm/psb_sovrl.f90 +++ b/base/comm/psb_sovrl.f90 @@ -42,7 +42,6 @@ ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - real(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -63,35 +62,33 @@ ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_sovrl_vect(x,desc_a,info,work,update,mode) +subroutine psb_sovrl_vect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_sovrl_vect use psi_mod implicit none - type(psb_s_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_spk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_s_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - real(psb_spk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_sovrlv' - info=psb_success_ + name = 'psb_sovrl_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -137,31 +134,9 @@ subroutine psb_sovrl_vect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(flag=mode_, beta=sone, y=x%v, desc_a=desc_a, info=info, data=psb_comm_ovr_, work=iwork) + call psi_swapdata(mode_, sone, x%v, desc_a, info, data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -169,9 +144,6 @@ subroutine psb_sovrl_vect(x,desc_a,info,work,update,mode) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return @@ -191,7 +163,6 @@ end subroutine psb_sovrl_vect ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - real(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -212,35 +183,33 @@ end subroutine psb_sovrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_sovrl_multivect(x,desc_a,info,work,update,mode) +subroutine psb_sovrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_sovrl_multivect use psi_mod implicit none type(psb_s_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_spk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - real(psb_spk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_sovrlv' - info=psb_success_ + name = 'psb_sovrl_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -288,32 +257,9 @@ subroutine psb_sovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,sone,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_, sone, x%v, desc_a, info, data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -321,9 +267,6 @@ subroutine psb_sovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_zhalo.f90 b/base/comm/psb_zhalo.f90 index 2bf1aef20..b3e37d027 100644 --- a/base/comm/psb_zhalo.f90 +++ b/base/comm/psb_zhalo.f90 @@ -41,7 +41,6 @@ ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - complex(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -52,36 +51,34 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_zhalo_vect(x,desc_a,info,work,tran,mode,data) +subroutine psb_zhalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_zhalo_vect use psi_mod implicit none type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - complex(psb_dpk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_zhalov' - info=psb_success_ + name = 'psb_zhalo_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -129,39 +126,11 @@ subroutine psb_zhalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(imode,zzero,x%v,& - & desc_a,iwork,info,data=data_) + call psi_swapdata(imode,zzero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,zone,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,zone,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -174,9 +143,6 @@ subroutine psb_zhalo_vect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return @@ -196,7 +162,6 @@ end subroutine psb_zhalo_vect ! info - integer. Return code ! jx - integer(optional). The starting column of the global matrix. ! ik - integer(optional). The number of columns to gather. -! work - complex(optional). Work area. ! tran - character(optional). Transpose exchange. ! mode - integer(optional). Communication mode (see Swapdata) ! data - integer Which index list in desc_a should be used @@ -207,36 +172,34 @@ end subroutine psb_zhalo_vect ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_zhalo_multivect(x,desc_a,info,work,tran,mode,data) +subroutine psb_zhalo_multivect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_zhalo_multivect use psi_mod implicit none - type(psb_z_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_z_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, liwork,data_ + & nrow, ncol, lldx, imode, data_ integer(psb_lpk_) :: m, n, ix, ijx - complex(psb_dpk_),pointer :: iwork(:) character :: tran_ character(len=20) :: name, ch_err logical :: aliw - name='psb_zhalov' - info=psb_success_ + name = 'psb_zhalo_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -285,39 +248,11 @@ subroutine psb_zhalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - liwork=nrow - if (present(work)) then - if(size(work) >= liwork) then - iwork => work - aliw=.false. - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - else - aliw=.true. - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - end if - ! exchange halo elements if(tran_ == 'N') then - call psi_swapdata(imode,zzero,x%v,& - & desc_a,iwork,info,data=data_) + call psi_swapdata(imode,zzero,x%v,desc_a,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then - call psi_swaptran(imode,zone,x%v,& - & desc_a,iwork,info) + call psi_swaptran(imode,zone,x%v,desc_a,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -330,9 +265,6 @@ subroutine psb_zhalo_multivect(x,desc_a,info,work,tran,mode,data) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/comm/psb_zovrl.f90 b/base/comm/psb_zovrl.f90 index 02a2a73d7..60a8a76ad 100644 --- a/base/comm/psb_zovrl.f90 +++ b/base/comm/psb_zovrl.f90 @@ -42,7 +42,6 @@ ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - complex(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -63,29 +62,27 @@ ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_zovrl_vect(x,desc_a,info,work,update,mode) +subroutine psb_zovrl_vect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_zovrl_vect use psi_mod implicit none - type(psb_z_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_z_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - complex(psb_dpk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_zovrlv' - info=psb_success_ + name = 'psb_zovrl_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -137,41 +134,15 @@ subroutine psb_zovrl_vect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,zone,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,zone,x%v,desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') goto 9999 end if - - if (aliw) deallocate(iwork) - nullify(iwork) call psb_erractionrestore(err_act) return @@ -192,7 +163,6 @@ end subroutine psb_zovrl_vect ! info - integer. Return code. ! jx - integer(optional). The starting column of the global matrix ! ik - integer(optional). The number of columns to gather. -! work - complex(optional). A work area. ! update - integer(optional). Type of update: ! psb_none_ do nothing ! psb_sum_ sum of overlaps @@ -213,35 +183,33 @@ end subroutine psb_zovrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_zovrl_multivect(x,desc_a,info,work,update,mode) +subroutine psb_zovrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_zovrl_multivect use psi_mod implicit none - type(psb_z_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), optional, target, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_z_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & - & nrow, ncol, ldx, liwork, data_, update_, mode_ + & nrow, ncol, ldx, data_, update_, mode_ integer(psb_lpk_) :: m, n, ix, ijx - complex(psb_dpk_),pointer :: iwork(:) logical :: do_swap character(len=20) :: name, ch_err logical :: aliw - name='psb_zovrlv' - info=psb_success_ + name = 'psb_zovrl_multivect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -289,32 +257,9 @@ subroutine psb_zovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - ! check for presence/size of a work area - liwork=ncol - if (present(work)) then - if(size(work) >= liwork) then - aliw=.false. - else - aliw=.true. - end if - else - aliw=.true. - end if - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - else - iwork => work - end if - ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,zone,x%v,& - & desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,zone,x%v,desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -322,9 +267,6 @@ subroutine psb_zovrl_multivect(x,desc_a,info,work,update,mode) goto 9999 end if - if (aliw) deallocate(iwork) - nullify(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/modules/comm/psb_c_comm_mod.f90 b/base/modules/comm/psb_c_comm_mod.f90 index 1bd461977..44126faae 100644 --- a/base/modules/comm/psb_c_comm_mod.f90 +++ b/base/modules/comm/psb_c_comm_mod.f90 @@ -37,52 +37,48 @@ module psb_c_comm_mod use psb_c_multivect_mod, only : psb_c_multivect_type, psb_c_base_multivect_type interface psb_ovrl - subroutine psb_covrl_vect(x,desc_a,info,work,update,mode) + subroutine psb_covrl_vect(x,desc_a,info,update,mode) import implicit none type(psb_c_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_covrl_vect - subroutine psb_covrl_multivect(x,desc_a,info,work,update,mode) + subroutine psb_covrl_multivect(x,desc_a,info,update,mode) import implicit none - type(psb_c_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_c_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_covrl_multivect end interface psb_ovrl interface psb_halo - subroutine psb_chalo_vect(x,desc_a,info,work,tran,mode,data) + subroutine psb_chalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_c_vect_type), intent(inout) :: x + type(psb_c_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_chalo_vect - subroutine psb_chalo_multivect(x,desc_a,info,work,tran,mode,data) + subroutine psb_chalo_multivect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_c_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_c_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_chalo_multivect end interface psb_halo interface psb_scatter - subroutine psb_cscatter_vect(globx, locx, desc_a, info, root, mold) + subroutine psb_cscatter_vect(globx, locx, desc_a, info, root, mold) import implicit none type(psb_c_vect_type), intent(inout) :: locx diff --git a/base/modules/comm/psb_c_linmap_mod.f90 b/base/modules/comm/psb_c_linmap_mod.f90 index 07257d881..4ccc8d55d 100644 --- a/base/modules/comm/psb_c_linmap_mod.f90 +++ b/base/modules/comm/psb_c_linmap_mod.f90 @@ -73,7 +73,7 @@ module psb_c_linmap_mod integer(psb_ipk_), intent(out) :: info complex(psb_spk_), optional :: work(:) end subroutine psb_c_map_U2V_a - subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) + subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_c_vect_mod, only : psb_c_vect_type import :: psb_ipk_, psb_spk_, psb_clinmap_type implicit none @@ -81,7 +81,6 @@ module psb_c_linmap_mod complex(psb_spk_), intent(in) :: alpha,beta type(psb_c_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), optional :: work(:) type(psb_c_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_c_map_U2V_v end interface @@ -97,7 +96,7 @@ module psb_c_linmap_mod integer(psb_ipk_), intent(out) :: info complex(psb_spk_), optional :: work(:) end subroutine psb_c_map_V2U_a - subroutine psb_c_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) + subroutine psb_c_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_c_vect_mod, only : psb_c_vect_type import :: psb_ipk_, psb_spk_, psb_clinmap_type implicit none @@ -105,7 +104,6 @@ module psb_c_linmap_mod complex(psb_spk_), intent(in) :: alpha,beta type(psb_c_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), optional :: work(:) type(psb_c_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_c_map_V2U_v end interface diff --git a/base/modules/comm/psb_d_comm_a_mod.f90 b/base/modules/comm/psb_d_comm_a_mod.f90 index 5fb410f2d..0190225f8 100644 --- a/base/modules/comm/psb_d_comm_a_mod.f90 +++ b/base/modules/comm/psb_d_comm_a_mod.f90 @@ -36,11 +36,11 @@ module psb_d_comm_a_mod subroutine psb_dovrlm(x,desc_a,info,jx,ik,work,update,mode) import implicit none - real(psb_dpk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info real(psb_dpk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode + integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode end subroutine psb_dovrlm subroutine psb_dovrlv(x,desc_a,info,work,update,mode) import @@ -57,22 +57,22 @@ module psb_d_comm_a_mod subroutine psb_dhalom(x,desc_a,info,jx,ik,work,tran,mode,data) import implicit none - real(psb_dpk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info real(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data - character, intent(in), optional :: tran + integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data + character, intent(in), optional :: tran end subroutine psb_dhalom subroutine psb_dhalov(x,desc_a,info,work,tran,mode,data) import implicit none - real(psb_dpk_), intent(inout) :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(inout) :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info real(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_dhalov end interface psb_halo diff --git a/base/modules/comm/psb_d_comm_mod.f90 b/base/modules/comm/psb_d_comm_mod.f90 index 013c76e2a..90cbfbc9d 100644 --- a/base/modules/comm/psb_d_comm_mod.f90 +++ b/base/modules/comm/psb_d_comm_mod.f90 @@ -37,46 +37,42 @@ module psb_d_comm_mod use psb_d_multivect_mod, only : psb_d_multivect_type, psb_d_base_multivect_type interface psb_ovrl - subroutine psb_dovrl_vect(x,desc_a,info,work,update,mode) + subroutine psb_dovrl_vect(x,desc_a,info,update,mode) import implicit none - type(psb_d_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_d_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_dovrl_vect - subroutine psb_dovrl_multivect(x,desc_a,info,work,update,mode) + subroutine psb_dovrl_multivect(x,desc_a,info,update,mode) import implicit none - type(psb_d_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_d_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_dovrl_multivect end interface psb_ovrl interface psb_halo - subroutine psb_dhalo_vect(x,desc_a,info,work,tran,mode,data) + subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_d_vect_type), intent(inout) :: x + type(psb_d_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info character, intent(in), optional :: tran + integer(psb_ipk_), intent(in), optional :: mode,data end subroutine psb_dhalo_vect - subroutine psb_dhalo_multivect(x,desc_a,info,work,tran,mode,data) + subroutine psb_dhalo_multivect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_d_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_d_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + character, intent(in), optional :: tran + integer(psb_ipk_), intent(in), optional :: mode,data end subroutine psb_dhalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_d_linmap_mod.f90 b/base/modules/comm/psb_d_linmap_mod.f90 index 744cad2d0..2bef33fd9 100644 --- a/base/modules/comm/psb_d_linmap_mod.f90 +++ b/base/modules/comm/psb_d_linmap_mod.f90 @@ -73,7 +73,7 @@ module psb_d_linmap_mod integer(psb_ipk_), intent(out) :: info real(psb_dpk_), optional :: work(:) end subroutine psb_d_map_U2V_a - subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) + subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_d_vect_mod, only : psb_d_vect_type import :: psb_ipk_, psb_dpk_, psb_dlinmap_type implicit none @@ -81,7 +81,6 @@ module psb_d_linmap_mod real(psb_dpk_), intent(in) :: alpha,beta type(psb_d_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), optional :: work(:) type(psb_d_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_d_map_U2V_v end interface @@ -97,7 +96,7 @@ module psb_d_linmap_mod integer(psb_ipk_), intent(out) :: info real(psb_dpk_), optional :: work(:) end subroutine psb_d_map_V2U_a - subroutine psb_d_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) + subroutine psb_d_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_d_vect_mod, only : psb_d_vect_type import :: psb_ipk_, psb_dpk_, psb_dlinmap_type implicit none @@ -105,7 +104,6 @@ module psb_d_linmap_mod real(psb_dpk_), intent(in) :: alpha,beta type(psb_d_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), optional :: work(:) type(psb_d_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_d_map_V2U_v end interface diff --git a/base/modules/comm/psb_i_comm_mod.f90 b/base/modules/comm/psb_i_comm_mod.f90 index 25d761ba8..a6f243278 100644 --- a/base/modules/comm/psb_i_comm_mod.f90 +++ b/base/modules/comm/psb_i_comm_mod.f90 @@ -36,46 +36,42 @@ module psb_i_comm_mod use psb_i_multivect_mod, only : psb_i_multivect_type, psb_i_base_multivect_type interface psb_ovrl - subroutine psb_iovrl_vect(x,desc_a,info,work,update,mode) + subroutine psb_iovrl_vect(x,desc_a,info,update,mode) import implicit none type(psb_i_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_iovrl_vect - subroutine psb_iovrl_multivect(x,desc_a,info,work,update,mode) + subroutine psb_iovrl_multivect(x,desc_a,info,update,mode) import implicit none - type(psb_i_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_i_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_iovrl_multivect end interface psb_ovrl interface psb_halo - subroutine psb_ihalo_vect(x,desc_a,info,work,tran,mode,data) + subroutine psb_ihalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_i_vect_type), intent(inout) :: x + type(psb_i_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_ihalo_vect - subroutine psb_ihalo_multivect(x,desc_a,info,work,tran,mode,data) + subroutine psb_ihalo_multivect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_i_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_i_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_ihalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_l_comm_mod.f90 b/base/modules/comm/psb_l_comm_mod.f90 index 2bba923dd..0f55c7b10 100644 --- a/base/modules/comm/psb_l_comm_mod.f90 +++ b/base/modules/comm/psb_l_comm_mod.f90 @@ -36,46 +36,42 @@ module psb_l_comm_mod use psb_l_multivect_mod, only : psb_l_multivect_type, psb_l_base_multivect_type interface psb_ovrl - subroutine psb_lovrl_vect(x,desc_a,info,work,update,mode) + subroutine psb_lovrl_vect(x,desc_a,info,update,mode) import implicit none type(psb_l_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_lpk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_lovrl_vect - subroutine psb_lovrl_multivect(x,desc_a,info,work,update,mode) + subroutine psb_lovrl_multivect(x,desc_a,info,update,mode) import implicit none - type(psb_l_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_lpk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_l_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_lovrl_multivect end interface psb_ovrl interface psb_halo - subroutine psb_lhalo_vect(x,desc_a,info,work,tran,mode,data) + subroutine psb_lhalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_l_vect_type), intent(inout) :: x + type(psb_l_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_lpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_lhalo_vect - subroutine psb_lhalo_multivect(x,desc_a,info,work,tran,mode,data) + subroutine psb_lhalo_multivect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_l_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_lpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_l_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_lhalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_s_comm_mod.f90 b/base/modules/comm/psb_s_comm_mod.f90 index a202b5b61..3430af4ce 100644 --- a/base/modules/comm/psb_s_comm_mod.f90 +++ b/base/modules/comm/psb_s_comm_mod.f90 @@ -37,46 +37,42 @@ module psb_s_comm_mod use psb_s_multivect_mod, only : psb_s_multivect_type, psb_s_base_multivect_type interface psb_ovrl - subroutine psb_sovrl_vect(x,desc_a,info,work,update,mode) + subroutine psb_sovrl_vect(x,desc_a,info,update,mode) import implicit none type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_spk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_sovrl_vect - subroutine psb_sovrl_multivect(x,desc_a,info,work,update,mode) + subroutine psb_sovrl_multivect(x,desc_a,info,update,mode) import implicit none - type(psb_s_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_spk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_s_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_sovrl_multivect end interface psb_ovrl interface psb_halo - subroutine psb_shalo_vect(x,desc_a,info,work,tran,mode,data) + subroutine psb_shalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_s_vect_type), intent(inout) :: x + type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_spk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_shalo_vect - subroutine psb_shalo_multivect(x,desc_a,info,work,tran,mode,data) + subroutine psb_shalo_multivect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_s_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - real(psb_spk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_s_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_shalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_s_linmap_mod.f90 b/base/modules/comm/psb_s_linmap_mod.f90 index 1ded2c596..7e248df88 100644 --- a/base/modules/comm/psb_s_linmap_mod.f90 +++ b/base/modules/comm/psb_s_linmap_mod.f90 @@ -73,7 +73,7 @@ module psb_s_linmap_mod integer(psb_ipk_), intent(out) :: info real(psb_spk_), optional :: work(:) end subroutine psb_s_map_U2V_a - subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) + subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_s_vect_mod, only : psb_s_vect_type import :: psb_ipk_, psb_spk_, psb_slinmap_type implicit none @@ -81,7 +81,6 @@ module psb_s_linmap_mod real(psb_spk_), intent(in) :: alpha,beta type(psb_s_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - real(psb_spk_), optional :: work(:) type(psb_s_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_s_map_U2V_v end interface @@ -97,7 +96,7 @@ module psb_s_linmap_mod integer(psb_ipk_), intent(out) :: info real(psb_spk_), optional :: work(:) end subroutine psb_s_map_V2U_a - subroutine psb_s_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) + subroutine psb_s_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_s_vect_mod, only : psb_s_vect_type import :: psb_ipk_, psb_spk_, psb_slinmap_type implicit none @@ -105,7 +104,6 @@ module psb_s_linmap_mod real(psb_spk_), intent(in) :: alpha,beta type(psb_s_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - real(psb_spk_), optional :: work(:) type(psb_s_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_s_map_V2U_v end interface diff --git a/base/modules/comm/psb_z_comm_mod.f90 b/base/modules/comm/psb_z_comm_mod.f90 index 304cdfb9b..cac47f452 100644 --- a/base/modules/comm/psb_z_comm_mod.f90 +++ b/base/modules/comm/psb_z_comm_mod.f90 @@ -37,46 +37,42 @@ module psb_z_comm_mod use psb_z_multivect_mod, only : psb_z_multivect_type, psb_z_base_multivect_type interface psb_ovrl - subroutine psb_zovrl_vect(x,desc_a,info,work,update,mode) + subroutine psb_zovrl_vect(x,desc_a,info,update,mode) import implicit none type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_zovrl_vect - subroutine psb_zovrl_multivect(x,desc_a,info,work,update,mode) + subroutine psb_zovrl_multivect(x,desc_a,info,update,mode) import implicit none - type(psb_z_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_z_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_zovrl_multivect end interface psb_ovrl interface psb_halo - subroutine psb_zhalo_vect(x,desc_a,info,work,tran,mode,data) + subroutine psb_zhalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_z_vect_type), intent(inout) :: x + type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data character, intent(in), optional :: tran end subroutine psb_zhalo_vect - subroutine psb_zhalo_multivect(x,desc_a,info,work,tran,mode,data) + subroutine psb_zhalo_multivect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_z_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_z_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_zhalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_z_linmap_mod.f90 b/base/modules/comm/psb_z_linmap_mod.f90 index 8fe61b0a8..24ec0db0c 100644 --- a/base/modules/comm/psb_z_linmap_mod.f90 +++ b/base/modules/comm/psb_z_linmap_mod.f90 @@ -73,7 +73,7 @@ module psb_z_linmap_mod integer(psb_ipk_), intent(out) :: info complex(psb_dpk_), optional :: work(:) end subroutine psb_z_map_U2V_a - subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) + subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_z_vect_mod, only : psb_z_vect_type import :: psb_ipk_, psb_dpk_, psb_zlinmap_type implicit none @@ -81,7 +81,6 @@ module psb_z_linmap_mod complex(psb_dpk_), intent(in) :: alpha,beta type(psb_z_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), optional :: work(:) type(psb_z_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_z_map_U2V_v end interface @@ -97,7 +96,7 @@ module psb_z_linmap_mod integer(psb_ipk_), intent(out) :: info complex(psb_dpk_), optional :: work(:) end subroutine psb_z_map_V2U_a - subroutine psb_z_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) + subroutine psb_z_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_z_vect_mod, only : psb_z_vect_type import :: psb_ipk_, psb_dpk_, psb_zlinmap_type implicit none @@ -105,7 +104,6 @@ module psb_z_linmap_mod complex(psb_dpk_), intent(in) :: alpha,beta type(psb_z_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), optional :: work(:) type(psb_z_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_z_map_V2U_v end interface diff --git a/base/modules/comm/psi_c_comm_v_mod.f90 b/base/modules/comm/psi_c_comm_v_mod.f90 index 9f7c87581..f6e7f3d09 100644 --- a/base/modules/comm/psi_c_comm_v_mod.f90 +++ b/base/modules/comm/psi_c_comm_v_mod.f90 @@ -36,43 +36,39 @@ module psi_c_comm_v_mod use psb_c_base_multivect_mod, only : psb_c_base_multivect_type interface psi_swapdata - module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_vect - module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_multivect module subroutine psi_cswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_cswap_vidx_vect module subroutine psi_cswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_cswap_vidx_multivect @@ -80,43 +76,39 @@ module psi_c_comm_v_mod interface psi_swaptran - module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_vect - module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_multivect module subroutine psi_ctran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_vect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ctran_vidx_vect module subroutine psi_ctran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type) :: y complex(psb_spk_) :: beta - complex(psb_spk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ctran_vidx_multivect diff --git a/base/modules/comm/psi_d_comm_a_mod.f90 b/base/modules/comm/psi_d_comm_a_mod.f90 index 46f021427..ca1aa9471 100644 --- a/base/modules/comm/psi_d_comm_a_mod.f90 +++ b/base/modules/comm/psi_d_comm_a_mod.f90 @@ -35,40 +35,44 @@ module psi_d_comm_a_mod interface psi_swapdata module subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + real(psb_dpk_),intent(in) :: beta + real(psb_dpk_),intent(inout) :: y(:,:) + type(psb_desc_type), target :: desc_a + real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_),target :: work(:) - type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdatam module subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_),intent(in) :: beta + real(psb_dpk_),intent(inout) :: y(:) + type(psb_desc_type), target :: desc_a + real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_),target :: work(:) - type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdatav module subroutine psi_dswapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + real(psb_dpk_),intent(in) :: beta + real(psb_dpk_),intent(inout) :: y(:,:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_),target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dswapidxm module subroutine psi_dswapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_),intent(in) :: beta + real(psb_dpk_),intent(inout) :: y(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_),target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dswapidxv end interface psi_swapdata @@ -77,38 +81,42 @@ module psi_d_comm_a_mod module subroutine psi_dswaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n + real(psb_dpk_),intent(in) :: beta + real(psb_dpk_),intent(inout) :: y(:,:) + type(psb_desc_type), target :: desc_a + real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_),target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), optional :: data !! TODO: Is this used in the code? If not, remove it. end subroutine psi_dswaptranm module subroutine psi_dswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_),intent(in) :: beta + real(psb_dpk_),intent(inout) :: y(:) + type(psb_desc_type), target :: desc_a + real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_),target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), optional :: data !! TODO: Is this used in the code? If not, remove it. end subroutine psi_dswaptranv module subroutine psi_dtranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + real(psb_dpk_),intent(in) :: beta + real(psb_dpk_),intent(inout) :: y(:,:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:,:), beta - real(psb_dpk_),target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dtranidxm module subroutine psi_dtranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_),intent(in) :: beta + real(psb_dpk_),intent(inout) :: y(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - real(psb_dpk_) :: y(:), beta - real(psb_dpk_),target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dtranidxv end interface psi_swaptran diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index 40ba09f25..e22ed0f5f 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -40,23 +40,21 @@ module psi_d_comm_v_mod ! Wrapper that calls different communications schemes depending on ! flag variable using communication buff obtained from desc_a%get_list_p ! --------------------------------------------------------------- - module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,info,data,work) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - real(psb_dpk_), optional, target :: work(:) + module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_vect - module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,info,data,work) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - real(psb_dpk_), optional, target :: work(:) + module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_multivect end interface psi_swapdata @@ -65,23 +63,21 @@ module psi_d_comm_v_mod ! --------------------------------------------------------------- ! Upper call in order to populate idx using desc_a%get_list_p ! --------------------------------------------------------------- - module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,work,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_),target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_vect - module subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_),target :: work(:) - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + module subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_multivect ! --------------------------------------------------------------- @@ -91,24 +87,22 @@ module psi_d_comm_v_mod ! flag variable ! --------------------------------------------------------------- module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) + class(psb_d_base_vect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_dtran_vidx_vect module subroutine psi_dtran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type) :: y - real(psb_dpk_) :: beta - real(psb_dpk_), target :: work(:) + class(psb_d_base_multivect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_dtran_vidx_multivect diff --git a/base/modules/comm/psi_i_comm_v_mod.f90 b/base/modules/comm/psi_i_comm_v_mod.f90 index 2bc8a0e96..6db43c15e 100644 --- a/base/modules/comm/psi_i_comm_v_mod.f90 +++ b/base/modules/comm/psi_i_comm_v_mod.f90 @@ -37,43 +37,39 @@ module psi_i_comm_v_mod use psb_i_base_multivect_mod, only : psb_i_base_multivect_type interface psi_swapdata - module subroutine psi_iswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_iswapdata_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_vect - module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_multivect module subroutine psi_iswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_iswap_vidx_vect module subroutine psi_iswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_iswap_vidx_multivect @@ -81,43 +77,39 @@ module psi_i_comm_v_mod interface psi_swaptran - module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_vect - module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_multivect module subroutine psi_itran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_vect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_itran_vidx_vect module subroutine psi_itran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type) :: y integer(psb_ipk_) :: beta - integer(psb_ipk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_itran_vidx_multivect diff --git a/base/modules/comm/psi_l_comm_v_mod.f90 b/base/modules/comm/psi_l_comm_v_mod.f90 index 92768d863..3d30ba410 100644 --- a/base/modules/comm/psi_l_comm_v_mod.f90 +++ b/base/modules/comm/psi_l_comm_v_mod.f90 @@ -38,43 +38,39 @@ module psi_l_comm_v_mod use psb_l_base_multivect_mod, only : psb_l_base_multivect_type interface psi_swapdata - module subroutine psi_lswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_lswapdata_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_vect - module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_multivect module subroutine psi_lswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_lswap_vidx_vect module subroutine psi_lswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_lswap_vidx_multivect @@ -82,43 +78,39 @@ module psi_l_comm_v_mod interface psi_swaptran - module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_vect - module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_multivect module subroutine psi_ltran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_vect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ltran_vidx_vect module subroutine psi_ltran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_l_base_multivect_type) :: y integer(psb_lpk_) :: beta - integer(psb_lpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ltran_vidx_multivect diff --git a/base/modules/comm/psi_s_comm_v_mod.f90 b/base/modules/comm/psi_s_comm_v_mod.f90 index d20c5ca30..7becf153a 100644 --- a/base/modules/comm/psi_s_comm_v_mod.f90 +++ b/base/modules/comm/psi_s_comm_v_mod.f90 @@ -36,68 +36,62 @@ module psi_s_comm_v_mod use psb_s_base_multivect_mod, only : psb_s_base_multivect_type interface psi_swapdata - module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,info,data,work) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - real(psb_spk_),target, optional :: work(:) + module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_sswapdata_vect - module subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,info,data,work) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - real(psb_spk_),target, optional :: work(:) + module subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_sswapdata_multivect end interface psi_swapdata interface psi_swaptran - module subroutine psi_sswaptran_vect(flag,beta,y,desc_a,info,data,work) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - real(psb_spk_),target, optional :: work(:) + module subroutine psi_sswaptran_vect(flag,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type), intent(inout) :: y + real(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data end subroutine psi_sswaptran_vect - module subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,info,data,work) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - real(psb_spk_),target, optional :: work(:) + module subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: flag + class(psb_s_base_multivect_type), intent(inout) :: y + real(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_sswaptran_multivect module subroutine psi_stran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_), target, optional :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + integer(psb_ipk_), intent(out) :: info end subroutine psi_stran_vidx_vect module subroutine psi_stran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_), intent(in) :: beta - real(psb_spk_), target, optional :: work(:) - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + integer(psb_ipk_), intent(out) :: info end subroutine psi_stran_vidx_multivect end interface psi_swaptran diff --git a/base/modules/comm/psi_z_comm_v_mod.f90 b/base/modules/comm/psi_z_comm_v_mod.f90 index 8c749f605..2421c59dd 100644 --- a/base/modules/comm/psi_z_comm_v_mod.f90 +++ b/base/modules/comm/psi_z_comm_v_mod.f90 @@ -36,43 +36,39 @@ module psi_z_comm_v_mod use psb_z_base_multivect_mod, only : psb_z_base_multivect_type interface psi_swapdata - module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type) :: y complex(psb_dpk_) :: beta - complex(psb_dpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_vect - module subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_multivect_type) :: y complex(psb_dpk_) :: beta - complex(psb_dpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_multivect module subroutine psi_zswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type) :: y complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_zswap_vidx_vect module subroutine psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_multivect_type) :: y complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_zswap_vidx_multivect @@ -80,43 +76,39 @@ module psi_z_comm_v_mod interface psi_swaptran - module subroutine psi_zswaptran_vect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_zswaptran_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type) :: y complex(psb_dpk_) :: beta - complex(psb_dpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_vect - module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data) + module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_multivect_type) :: y complex(psb_dpk_) :: beta - complex(psb_dpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_multivect module subroutine psi_ztran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_vect_type) :: y complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ztran_vidx_vect module subroutine psi_ztran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,work,info) + & totxch,totsnd,totrcv,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info class(psb_z_base_multivect_type) :: y complex(psb_dpk_) :: beta - complex(psb_dpk_), target :: work(:) class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv end subroutine psi_ztran_vidx_multivect diff --git a/base/modules/psblas/psb_c_psblas_mod.F90 b/base/modules/psblas/psb_c_psblas_mod.F90 index 130159bc0..e77a9325f 100644 --- a/base/modules/psblas/psb_c_psblas_mod.F90 +++ b/base/modules/psblas/psb_c_psblas_mod.F90 @@ -421,18 +421,17 @@ module psb_c_psblas_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_cspmv subroutine psb_cspmv_vect(alpha, a, x, beta, y,& - & desc_a, info, trans, work,doswap) + & desc_a, info, trans,doswap) import :: psb_desc_type, psb_spk_, psb_ipk_, & & psb_c_vect_type, psb_cspmat_type - type(psb_cspmat_type), intent(in) :: a - type(psb_c_vect_type), intent(inout) :: x - type(psb_c_vect_type), intent(inout) :: y - complex(psb_spk_), intent(in) :: alpha, beta - type(psb_desc_type), intent(in) :: desc_a - character, optional, intent(in) :: trans - complex(psb_spk_), optional, intent(inout),target :: work(:) - logical, optional, intent(in) :: doswap - integer(psb_ipk_), intent(out) :: info + type(psb_cspmat_type), intent(in) :: a + type(psb_c_vect_type), intent(inout) :: x + type(psb_c_vect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: alpha, beta + type(psb_desc_type), intent(in) :: desc_a + character, optional, intent(in) :: trans + logical, optional, intent(in) :: doswap + integer(psb_ipk_), intent(out) :: info end subroutine psb_cspmv_vect end interface @@ -472,7 +471,7 @@ module psb_c_psblas_mod end subroutine psb_cspsv subroutine psb_cspsv_vect(alpha, t, x, beta, y,& & desc_a, info, trans, scale, choice,& - & diag, work) + & diag) import :: psb_desc_type, psb_spk_, psb_ipk_, & & psb_c_vect_type, psb_cspmat_type type(psb_cspmat_type), intent(inout) :: t @@ -483,7 +482,6 @@ module psb_c_psblas_mod character, optional, intent(in) :: trans, scale integer(psb_ipk_), optional, intent(in) :: choice type(psb_c_vect_type), intent(inout), optional :: diag - complex(psb_spk_), optional, intent(inout), target :: work(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_cspsv_vect end interface diff --git a/base/modules/psblas/psb_d_psblas_mod.F90 b/base/modules/psblas/psb_d_psblas_mod.F90 index afc3acafa..095c46039 100644 --- a/base/modules/psblas/psb_d_psblas_mod.F90 +++ b/base/modules/psblas/psb_d_psblas_mod.F90 @@ -432,7 +432,7 @@ module psb_d_psblas_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_dspmv subroutine psb_dspmv_vect(alpha, a, x, beta, y,& - & desc_a, info, trans, work,doswap) + & desc_a, info, trans,doswap) import :: psb_desc_type, psb_dpk_, psb_ipk_, & & psb_d_vect_type, psb_dspmat_type type(psb_dspmat_type), intent(in) :: a @@ -441,7 +441,6 @@ module psb_d_psblas_mod real(psb_dpk_), intent(in) :: alpha, beta type(psb_desc_type), intent(in) :: desc_a character, optional, intent(in) :: trans - real(psb_dpk_), optional, intent(inout),target :: work(:) logical, optional, intent(in) :: doswap integer(psb_ipk_), intent(out) :: info end subroutine psb_dspmv_vect @@ -483,7 +482,7 @@ module psb_d_psblas_mod end subroutine psb_dspsv subroutine psb_dspsv_vect(alpha, t, x, beta, y,& & desc_a, info, trans, scale, choice,& - & diag, work) + & diag) import :: psb_desc_type, psb_dpk_, psb_ipk_, & & psb_d_vect_type, psb_dspmat_type type(psb_dspmat_type), intent(inout) :: t @@ -494,7 +493,6 @@ module psb_d_psblas_mod character, optional, intent(in) :: trans, scale integer(psb_ipk_), optional, intent(in) :: choice type(psb_d_vect_type), intent(inout), optional :: diag - real(psb_dpk_), optional, intent(inout), target :: work(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_dspsv_vect end interface diff --git a/base/modules/psblas/psb_s_psblas_mod.F90 b/base/modules/psblas/psb_s_psblas_mod.F90 index 6048d023e..330775c94 100644 --- a/base/modules/psblas/psb_s_psblas_mod.F90 +++ b/base/modules/psblas/psb_s_psblas_mod.F90 @@ -432,7 +432,7 @@ module psb_s_psblas_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_sspmv subroutine psb_sspmv_vect(alpha, a, x, beta, y,& - & desc_a, info, trans, work,doswap) + & desc_a, info, trans,doswap) import :: psb_desc_type, psb_spk_, psb_ipk_, & & psb_s_vect_type, psb_sspmat_type type(psb_sspmat_type), intent(in) :: a @@ -441,7 +441,6 @@ module psb_s_psblas_mod real(psb_spk_), intent(in) :: alpha, beta type(psb_desc_type), intent(in) :: desc_a character, optional, intent(in) :: trans - real(psb_spk_), optional, intent(inout),target :: work(:) logical, optional, intent(in) :: doswap integer(psb_ipk_), intent(out) :: info end subroutine psb_sspmv_vect @@ -483,7 +482,7 @@ module psb_s_psblas_mod end subroutine psb_sspsv subroutine psb_sspsv_vect(alpha, t, x, beta, y,& & desc_a, info, trans, scale, choice,& - & diag, work) + & diag) import :: psb_desc_type, psb_spk_, psb_ipk_, & & psb_s_vect_type, psb_sspmat_type type(psb_sspmat_type), intent(inout) :: t @@ -494,7 +493,6 @@ module psb_s_psblas_mod character, optional, intent(in) :: trans, scale integer(psb_ipk_), optional, intent(in) :: choice type(psb_s_vect_type), intent(inout), optional :: diag - real(psb_spk_), optional, intent(inout), target :: work(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_sspsv_vect end interface diff --git a/base/modules/psblas/psb_z_psblas_mod.F90 b/base/modules/psblas/psb_z_psblas_mod.F90 index fd0cc300d..e9d03f371 100644 --- a/base/modules/psblas/psb_z_psblas_mod.F90 +++ b/base/modules/psblas/psb_z_psblas_mod.F90 @@ -421,7 +421,7 @@ module psb_z_psblas_mod integer(psb_ipk_), intent(out) :: info end subroutine psb_zspmv subroutine psb_zspmv_vect(alpha, a, x, beta, y,& - & desc_a, info, trans, work,doswap) + & desc_a, info, trans,doswap) import :: psb_desc_type, psb_dpk_, psb_ipk_, & & psb_z_vect_type, psb_zspmat_type type(psb_zspmat_type), intent(in) :: a @@ -430,7 +430,6 @@ module psb_z_psblas_mod complex(psb_dpk_), intent(in) :: alpha, beta type(psb_desc_type), intent(in) :: desc_a character, optional, intent(in) :: trans - complex(psb_dpk_), optional, intent(inout),target :: work(:) logical, optional, intent(in) :: doswap integer(psb_ipk_), intent(out) :: info end subroutine psb_zspmv_vect @@ -472,7 +471,7 @@ module psb_z_psblas_mod end subroutine psb_zspsv subroutine psb_zspsv_vect(alpha, t, x, beta, y,& & desc_a, info, trans, scale, choice,& - & diag, work) + & diag) import :: psb_desc_type, psb_dpk_, psb_ipk_, & & psb_z_vect_type, psb_zspmat_type type(psb_zspmat_type), intent(inout) :: t @@ -483,7 +482,6 @@ module psb_z_psblas_mod character, optional, intent(in) :: trans, scale integer(psb_ipk_), optional, intent(in) :: choice type(psb_z_vect_type), intent(inout), optional :: diag - complex(psb_dpk_), optional, intent(inout), target :: work(:) integer(psb_ipk_), intent(out) :: info end subroutine psb_zspsv_vect end interface diff --git a/base/psblas/psb_cspmm.f90 b/base/psblas/psb_cspmm.f90 index 777ade06f..540ddde3e 100644 --- a/base/psblas/psb_cspmm.f90 +++ b/base/psblas/psb_cspmm.f90 @@ -51,11 +51,10 @@ ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code ! trans - character(optional). Whether A or A'. Default: 'N' -! work(:) - complex,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& - & trans, work, doswap) +subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& + & trans, doswap) use psb_base_mod, psb_protect_name => psb_cspmv_vect use psi_mod implicit none @@ -66,7 +65,6 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_cspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), optional, target, intent(inout) :: work(:) character, intent(in), optional :: trans logical, intent(in), optional :: doswap @@ -74,10 +72,10 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me,& & err_act, iix, jjx, iia, jja, nrow, ncol, lldx, lldy, & - & liwork, iiy, jjy, ib, ip, idx + & iiy, jjy, ib, ip, idx integer(psb_lpk_) :: ix, ijx, iy, ijy, m, n, ia, ja integer(psb_ipk_), parameter :: nb=4 - complex(psb_spk_), pointer :: iwork(:), xp(:), yp(:) + complex(psb_spk_), pointer :: xp(:), yp(:) complex(psb_spk_), allocatable :: xvsave(:) character :: trans_ character(len=20) :: name, ch_err @@ -87,8 +85,8 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_), save :: mv_phase1=-1, mv_phase2=-1, mv_phase3=-1, mv_phase4=-1 integer(psb_ipk_), save :: mv_phase11=-1, mv_phase12=-1 - name='psb_cspmv' - info=psb_success_ + name = 'psb_cspmv_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -157,38 +155,12 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy null() - ! check for presence/size of a work area - liwork= 2*ncol - - if (present(work)) then - if (size(work) >= liwork) then - aliw =.false. - else - aliw=.true. - endif - else - aliw=.true. - end if - - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='Allocate' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - else - iwork => work - endif - if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' Allocated work ', info @@ -202,14 +174,12 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(psb_swap_send_,& - & czero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_send_,czero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(psb_swap_recv_,& - & czero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_recv_,czero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,cone,y%v,info) @@ -224,8 +194,7 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase11) if (doswap_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & czero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),czero,x%v,desc_a,info,data=psb_comm_halo_) end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) @@ -268,10 +237,8 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& - & cone,y%v,desc_a,iwork,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & cone,y%v,desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),cone,y%v,desc_a,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),cone,y%v,desc_a,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -285,18 +252,6 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if - if (aliw) deallocate(iwork,stat=info) - if (debug_level >= psb_debug_comp_) & - & write(debug_unit,*) me,' ',trim(name),' deallocat ',aliw, info - if(info /= psb_success_) then - info = psb_err_from_subroutine_ - ch_err='Deallocate iwork' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - nullify(iwork) - call psb_erractionrestore(err_act) if (debug_level >= psb_debug_comp_) then call psb_barrier(ctxt) @@ -340,7 +295,7 @@ end subroutine psb_cspmv_vect ! work(:) - complex,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,& & trans, k, jx, jy, work, doswap) use psb_base_mod, psb_protect_name => psb_cspmm use psi_mod @@ -371,8 +326,8 @@ subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,& logical :: aliw, doswap_ integer(psb_ipk_) :: debug_level, debug_unit - name='psb_cspmm' - info=psb_success_ + name = 'psb_cspmm' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -689,7 +644,7 @@ end subroutine psb_cspmm ! work(:) - complex,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_cspmv(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_cspmv(alpha,a,x,beta,y,desc_a,info,& & trans, work, doswap) use psb_base_mod, psb_protect_name => psb_cspmv use psi_mod diff --git a/base/psblas/psb_cspsm.f90 b/base/psblas/psb_cspsm.f90 index 9787b2d88..cd5dd8416 100644 --- a/base/psblas/psb_cspsm.f90 +++ b/base/psblas/psb_cspsm.f90 @@ -64,10 +64,9 @@ ! the diagonal matrix D. ! choice - integer(optional). The kind of update to perform on overlap elements. ! d(:) - complex, optional Matrix for diagonal scaling. -! work(:) - complex, optional Working area. ! -subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& - & trans, scale, choice, diag, work) +subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& + & trans, scale, choice, diag) use psb_base_mod, psb_protect_name => psb_cspsv_vect use psi_mod implicit none @@ -79,7 +78,6 @@ subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info type(psb_c_vect_type), intent(inout), optional :: diag - complex(psb_spk_), optional, target, intent(inout) :: work(:) character, intent(in), optional :: trans, scale integer(psb_ipk_), intent(in), optional :: choice @@ -88,23 +86,23 @@ subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_) :: np, me, & & err_act, iix, jjx, ia, ja, iia, jja, lldx,lldy, choice_,& & ix, iy, ik, jx, jy, i, lld,& - & m, nrow, ncol, liwork, llwork, iiy, jjy, idx, ndm + & m, nrow, ncol, iiy, jjy, idx, ndm character :: lscale integer(psb_ipk_), parameter :: nb=4 - complex(psb_spk_),pointer :: iwork(:), xp(:), yp(:) + complex(psb_spk_),pointer :: xp(:), yp(:) character :: itrans character(len=20) :: name, ch_err logical :: aliw - name='psb_cspsv_vect' - info=psb_success_ + name = 'psb_cspsv_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then @@ -159,40 +157,12 @@ subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy null() - ! check for presence/size of a work area - liwork= 2*ncol - - if (present(work)) then - if (size(work) >= liwork) then - aliw =.false. - else - aliw=.true. - endif - else - aliw=.true. - end if - - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - else - iwork => work - endif - - iwork(1)=0.d0 - ! Perform local triangular system solve if (present(diag)) then call a%spsm(alpha,x,beta,y,info,scale=scale,d=diag,trans=trans) @@ -201,16 +171,14 @@ subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& end if if(info /= psb_success_) then info = psb_err_from_subroutine_ - ch_err='dcssm' + ch_err = 'dcssm' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if ! update overlap elements if (choice_ > 0) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & cone,y%v,desc_a,iwork,info,data=psb_comm_ovr_) - + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),cone,y%v,desc_a,info,data=psb_comm_ovr_) if (info == psb_success_) call psi_ovrl_upd(y%v,desc_a,choice_,info) if (info /= psb_success_) then @@ -219,8 +187,6 @@ subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& end if end if - if (aliw) deallocate(iwork) - call psb_erractionrestore(err_act) return @@ -271,7 +237,7 @@ end subroutine psb_cspsv_vect ! jy - integer(optional). The column offset for ( Y ). Default: 1 ! work(:) - complex, optional Working area. ! -subroutine psb_cspsm(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_cspsm(alpha,a,x,beta,y,desc_a,info,& & trans, scale, choice, diag, k, jx, jy, work) use psb_base_mod, psb_protect_name => psb_cspsm use psi_mod @@ -517,7 +483,7 @@ end subroutine psb_cspsm ! d(:) - complex, optional Matrix for diagonal scaling. ! work(:) - complex, optional Working area. ! -subroutine psb_cspsv(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_cspsv(alpha,a,x,beta,y,desc_a,info,& & trans, scale, choice, diag, work) use psb_base_mod, psb_protect_name => psb_cspsv use psi_mod diff --git a/base/psblas/psb_dspmm.f90 b/base/psblas/psb_dspmm.f90 index 6f2a87390..3ec5d0e0d 100644 --- a/base/psblas/psb_dspmm.f90 +++ b/base/psblas/psb_dspmm.f90 @@ -51,11 +51,10 @@ ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code ! trans - character(optional). Whether A or A'. Default: 'N' -! work(:) - real,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& - & trans, work, doswap) +subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& + & trans, doswap) use psb_base_mod, psb_protect_name => psb_dspmv_vect use psi_mod implicit none @@ -66,7 +65,6 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_dspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), optional, target, intent(inout) :: work(:) character, intent(in), optional :: trans logical, intent(in), optional :: doswap @@ -74,10 +72,10 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me,& & err_act, iix, jjx, iia, jja, nrow, ncol, lldx, lldy, & - & liwork, iiy, jjy, ib, ip, idx + & iiy, jjy, ib, ip, idx integer(psb_lpk_) :: ix, ijx, iy, ijy, m, n, ia, ja integer(psb_ipk_), parameter :: nb=4 - real(psb_dpk_), pointer :: iwork(:), xp(:), yp(:) + real(psb_dpk_), pointer :: xp(:), yp(:) real(psb_dpk_), allocatable :: xvsave(:) character :: trans_ character(len=20) :: name, ch_err @@ -87,8 +85,8 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_), save :: mv_phase1=-1, mv_phase2=-1, mv_phase3=-1, mv_phase4=-1 integer(psb_ipk_), save :: mv_phase11=-1, mv_phase12=-1 - name='psb_dspmv' - info=psb_success_ + name = 'psb_dspmv_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -96,7 +94,7 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then info = psb_err_context_error_ @@ -157,38 +155,12 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy null() - ! check for presence/size of a work area - liwork= 2*ncol - - if (present(work)) then - if (size(work) >= liwork) then - aliw =.false. - else - aliw=.true. - endif - else - aliw=.true. - end if - - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='Allocate' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - else - iwork => work - endif - if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' Allocated work ', info @@ -202,14 +174,12 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(flag=psb_swap_send_, beta=dzero, y=x%v, desc_a=desc_a, & - & data=psb_comm_halo_, info=info, work=iwork) + if (doswap_) call psi_swapdata(psb_swap_send_, dzero, x%v, desc_a, info, data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(flag=psb_swap_recv_, beta=dzero, y=x%v, desc_a=desc_a, & - & data=psb_comm_halo_, info=info, work=iwork) + if (doswap_) call psi_swapdata(psb_swap_recv_, dzero, x%v, desc_a, info, data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,done,y%v,info) @@ -224,8 +194,7 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase11) if (doswap_) then - call psi_swapdata(flag=ior(psb_swap_send_,psb_swap_recv_), beta=dzero, y=x%v, desc_a=desc_a, & - & data=psb_comm_halo_, info=info, work=iwork) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_), dzero, x%v, desc_a, info, data=psb_comm_halo_) end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) @@ -267,10 +236,11 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& goto 9999 end if - if (doswap_) then - call psi_swaptran(flag=ior(psb_swap_send_,psb_swap_recv_), beta=done, y=y%v, desc_a=desc_a, info=info, work=iwork) - if (info == psb_success_) call psi_swapdata(flag=ior(psb_swap_send_,psb_swap_recv_), beta=done, y=y%v, desc_a=desc_a, & - & data=psb_comm_ovr_, info=info, work=iwork) + if (doswap_) then + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_), done, y%v, desc_a, info) + if (info == psb_success_) then + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_), done, y%v, desc_a, info, data=psb_comm_ovr_) + end if if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -284,18 +254,6 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if - if (aliw) deallocate(iwork,stat=info) - if (debug_level >= psb_debug_comp_) & - & write(debug_unit,*) me,' ',trim(name),' deallocat ',aliw, info - if(info /= psb_success_) then - info = psb_err_from_subroutine_ - ch_err='Deallocate iwork' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - nullify(iwork) - call psb_erractionrestore(err_act) if (debug_level >= psb_debug_comp_) then call psb_barrier(ctxt) @@ -339,7 +297,7 @@ end subroutine psb_dspmv_vect ! work(:) - real,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& & trans, k, jx, jy, work, doswap) use psb_base_mod, psb_protect_name => psb_dspmm use psi_mod @@ -370,8 +328,8 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& logical :: aliw, doswap_ integer(psb_ipk_) :: debug_level, debug_unit - name='psb_dspmm' - info=psb_success_ + name = 'psb_dspmm' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -506,9 +464,9 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& if (doswap_.and.(np>1)) then ib1=min(nb,lik) xp => x(iix:lldx,jjx:jjx+ib1-1) - if (doswap_)& - & call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & ib1,dzero,xp,desc_a,iwork,info) + if (doswap_) & + & call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & ib1,dzero,xp,desc_a,iwork,info) blk: do i=1, lik, nb @@ -594,18 +552,18 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& call psb_errpush(info,name,a_err=ch_err) goto 9999 end if + if (info == psb_success_) call psi_ovrl_restore(x,xvsave,desc_a,info) - if (doswap_) then - call psi_swapdata(flag=ior(psb_swap_send_,psb_swap_recv_), beta=dzero, & - & y=x(:,1:lik), desc_a=desc_a, data=psb_comm_halo_, info=info, work=iwork) - end if - call psi_swaptran(flag=ior(psb_swap_send_,psb_swap_recv_), beta=done, & - & y=y(:,1:ik), desc_a=desc_a, info=info, work=iwork) - if (info == psb_success_) then - call psi_swapdata(flag=ior(psb_swap_send_,psb_swap_recv_), beta=done, & - & y=y(:,1:ik), desc_a=desc_a, data=psb_comm_ovr_, info=info, work=iwork) - end if + + + if (doswap_)then + ik = lik ! This should not be an issue, we are expecting the values + ! to be small, within PSB_IPK + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& + & ik,done,y(:,1:ik),desc_a,iwork,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & ik,done,y(:,1:ik),desc_a,iwork,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -691,7 +649,7 @@ end subroutine psb_dspmm ! work(:) - real,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& & trans, work, doswap) use psb_base_mod, psb_protect_name => psb_dspmv use psi_mod @@ -721,8 +679,8 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& logical :: aliw, doswap_ integer(psb_ipk_) :: debug_level, debug_unit - name='psb_dspmv' - info=psb_success_ + name = 'psb_dspmv' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 diff --git a/base/psblas/psb_dspsm.f90 b/base/psblas/psb_dspsm.f90 index e4010b015..317a3d7b8 100644 --- a/base/psblas/psb_dspsm.f90 +++ b/base/psblas/psb_dspsm.f90 @@ -64,10 +64,9 @@ ! the diagonal matrix D. ! choice - integer(optional). The kind of update to perform on overlap elements. ! d(:) - real, optional Matrix for diagonal scaling. -! work(:) - real, optional Working area. ! -subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& - & trans, scale, choice, diag, work) +subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& + & trans, scale, choice, diag) use psb_base_mod, psb_protect_name => psb_dspsv_vect use psi_mod implicit none @@ -79,7 +78,6 @@ subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info type(psb_d_vect_type), intent(inout), optional :: diag - real(psb_dpk_), optional, target, intent(inout) :: work(:) character, intent(in), optional :: trans, scale integer(psb_ipk_), intent(in), optional :: choice @@ -88,23 +86,23 @@ subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_) :: np, me, & & err_act, iix, jjx, ia, ja, iia, jja, lldx,lldy, choice_,& & ix, iy, ik, jx, jy, i, lld,& - & m, nrow, ncol, liwork, llwork, iiy, jjy, idx, ndm + & m, nrow, ncol, iiy, jjy, idx, ndm character :: lscale integer(psb_ipk_), parameter :: nb=4 - real(psb_dpk_),pointer :: iwork(:), xp(:), yp(:) + real(psb_dpk_),pointer :: xp(:), yp(:) character :: itrans character(len=20) :: name, ch_err logical :: aliw - name='psb_dspsv_vect' - info=psb_success_ + name = 'psb_dspsv_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then @@ -159,40 +157,12 @@ subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy null() - ! check for presence/size of a work area - liwork= 2*ncol - - if (present(work)) then - if (size(work) >= liwork) then - aliw =.false. - else - aliw=.true. - endif - else - aliw=.true. - end if - - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - else - iwork => work - endif - - iwork(1)=0.d0 - ! Perform local triangular system solve if (present(diag)) then call a%spsm(alpha,x,beta,y,info,scale=scale,d=diag,trans=trans) @@ -201,15 +171,14 @@ subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& end if if(info /= psb_success_) then info = psb_err_from_subroutine_ - ch_err='dcssm' + ch_err = 'dcssm' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if ! update overlap elements if (choice_ > 0) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & done,y%v,desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),done,y%v,desc_a,info,data=psb_comm_ovr_) if (info == psb_success_) call psi_ovrl_upd(y%v,desc_a,choice_,info) @@ -219,8 +188,6 @@ subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& end if end if - if (aliw) deallocate(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/psblas/psb_sspmm.f90 b/base/psblas/psb_sspmm.f90 index 7f680934c..e660c3e61 100644 --- a/base/psblas/psb_sspmm.f90 +++ b/base/psblas/psb_sspmm.f90 @@ -51,11 +51,10 @@ ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code ! trans - character(optional). Whether A or A'. Default: 'N' -! work(:) - real,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& - & trans, work, doswap) +subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& + & trans, doswap) use psb_base_mod, psb_protect_name => psb_sspmv_vect use psi_mod implicit none @@ -66,7 +65,6 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_sspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - real(psb_spk_), optional, target, intent(inout) :: work(:) character, intent(in), optional :: trans logical, intent(in), optional :: doswap @@ -77,7 +75,7 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& & liwork, iiy, jjy, ib, ip, idx integer(psb_lpk_) :: ix, ijx, iy, ijy, m, n, ia, ja integer(psb_ipk_), parameter :: nb=4 - real(psb_spk_), pointer :: iwork(:), xp(:), yp(:) + real(psb_spk_), pointer :: xp(:), yp(:) real(psb_spk_), allocatable :: xvsave(:) character :: trans_ character(len=20) :: name, ch_err @@ -87,8 +85,8 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_), save :: mv_phase1=-1, mv_phase2=-1, mv_phase3=-1, mv_phase4=-1 integer(psb_ipk_), save :: mv_phase11=-1, mv_phase12=-1 - name='psb_sspmv' - info=psb_success_ + name = 'psb_sspmv_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -96,7 +94,7 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then info = psb_err_context_error_ @@ -157,38 +155,12 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy null() - ! check for presence/size of a work area - liwork= 2*ncol - - if (present(work)) then - if (size(work) >= liwork) then - aliw =.false. - else - aliw=.true. - endif - else - aliw=.true. - end if - - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='Allocate' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - else - iwork => work - endif - if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' Allocated work ', info @@ -202,14 +174,12 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(psb_swap_send_,& - & szero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_send_,szero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(psb_swap_recv_,& - & szero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_recv_,szero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,sone,y%v,info) @@ -224,8 +194,7 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase11) if (doswap_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & szero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),szero,x%v,desc_a,info,data=psb_comm_halo_) end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) @@ -268,10 +237,8 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& - & sone,y%v,desc_a,iwork,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & sone,y%v,desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),sone,y%v,desc_a,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),sone,y%v,desc_a,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -285,18 +252,6 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if - if (aliw) deallocate(iwork,stat=info) - if (debug_level >= psb_debug_comp_) & - & write(debug_unit,*) me,' ',trim(name),' deallocat ',aliw, info - if(info /= psb_success_) then - info = psb_err_from_subroutine_ - ch_err='Deallocate iwork' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - nullify(iwork) - call psb_erractionrestore(err_act) if (debug_level >= psb_debug_comp_) then call psb_barrier(ctxt) diff --git a/base/psblas/psb_sspsm.f90 b/base/psblas/psb_sspsm.f90 index c354569ba..0299cdfa8 100644 --- a/base/psblas/psb_sspsm.f90 +++ b/base/psblas/psb_sspsm.f90 @@ -64,10 +64,9 @@ ! the diagonal matrix D. ! choice - integer(optional). The kind of update to perform on overlap elements. ! d(:) - real, optional Matrix for diagonal scaling. -! work(:) - real, optional Working area. ! -subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& - & trans, scale, choice, diag, work) +subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& + & trans, scale, choice, diag) use psb_base_mod, psb_protect_name => psb_sspsv_vect use psi_mod implicit none @@ -79,7 +78,6 @@ subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info type(psb_s_vect_type), intent(inout), optional :: diag - real(psb_spk_), optional, target, intent(inout) :: work(:) character, intent(in), optional :: trans, scale integer(psb_ipk_), intent(in), optional :: choice @@ -88,23 +86,23 @@ subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_) :: np, me, & & err_act, iix, jjx, ia, ja, iia, jja, lldx,lldy, choice_,& & ix, iy, ik, jx, jy, i, lld,& - & m, nrow, ncol, liwork, llwork, iiy, jjy, idx, ndm + & m, nrow, ncol, iiy, jjy, idx, ndm character :: lscale integer(psb_ipk_), parameter :: nb=4 - real(psb_spk_),pointer :: iwork(:), xp(:), yp(:) + real(psb_spk_),pointer :: xp(:), yp(:) character :: itrans character(len=20) :: name, ch_err logical :: aliw - name='psb_sspsv_vect' - info=psb_success_ + name = 'psb_sspsv_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then @@ -165,34 +163,6 @@ subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& goto 9999 end if - iwork => null() - ! check for presence/size of a work area - liwork= 2*ncol - - if (present(work)) then - if (size(work) >= liwork) then - aliw =.false. - else - aliw=.true. - endif - else - aliw=.true. - end if - - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - else - iwork => work - endif - - iwork(1)=0.d0 - ! Perform local triangular system solve if (present(diag)) then call a%spsm(alpha,x,beta,y,info,scale=scale,d=diag,trans=trans) @@ -208,8 +178,7 @@ subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& ! update overlap elements if (choice_ > 0) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & sone,y%v,desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),sone,y%v,desc_a,info,data=psb_comm_ovr_) if (info == psb_success_) call psi_ovrl_upd(y%v,desc_a,choice_,info) @@ -219,8 +188,6 @@ subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& end if end if - if (aliw) deallocate(iwork) - call psb_erractionrestore(err_act) return @@ -271,7 +238,7 @@ end subroutine psb_sspsv_vect ! jy - integer(optional). The column offset for ( Y ). Default: 1 ! work(:) - real, optional Working area. ! -subroutine psb_sspsm(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_sspsm(alpha,a,x,beta,y,desc_a,info,& & trans, scale, choice, diag, k, jx, jy, work) use psb_base_mod, psb_protect_name => psb_sspsm use psi_mod diff --git a/base/psblas/psb_zspmm.f90 b/base/psblas/psb_zspmm.f90 index b7fc5cc6c..8055a7d01 100644 --- a/base/psblas/psb_zspmm.f90 +++ b/base/psblas/psb_zspmm.f90 @@ -51,11 +51,10 @@ ! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. Return code ! trans - character(optional). Whether A or A'. Default: 'N' -! work(:) - complex,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& - & trans, work, doswap) +subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& + & trans, doswap) use psb_base_mod, psb_protect_name => psb_zspmv_vect use psi_mod implicit none @@ -66,7 +65,6 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_zspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), optional, target, intent(inout) :: work(:) character, intent(in), optional :: trans logical, intent(in), optional :: doswap @@ -77,7 +75,7 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& & liwork, iiy, jjy, ib, ip, idx integer(psb_lpk_) :: ix, ijx, iy, ijy, m, n, ia, ja integer(psb_ipk_), parameter :: nb=4 - complex(psb_dpk_), pointer :: iwork(:), xp(:), yp(:) + complex(psb_dpk_), pointer :: xp(:), yp(:) complex(psb_dpk_), allocatable :: xvsave(:) character :: trans_ character(len=20) :: name, ch_err @@ -87,8 +85,8 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_), save :: mv_phase1=-1, mv_phase2=-1, mv_phase3=-1, mv_phase4=-1 integer(psb_ipk_), save :: mv_phase11=-1, mv_phase12=-1 - name='psb_zspmv' - info=psb_success_ + name = 'psb_zspmv_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -96,7 +94,7 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then info = psb_err_context_error_ @@ -157,38 +155,12 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy null() - ! check for presence/size of a work area - liwork= 2*ncol - - if (present(work)) then - if (size(work) >= liwork) then - aliw =.false. - else - aliw=.true. - endif - else - aliw=.true. - end if - - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='Allocate' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - else - iwork => work - endif - if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' Allocated work ', info @@ -202,14 +174,12 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(psb_swap_send_,& - & zzero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_send_,zzero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(psb_swap_recv_,& - & zzero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_recv_,zzero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,zone,y%v,info) @@ -224,8 +194,7 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase11) if (doswap_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & zzero,x%v,desc_a,iwork,info,data=psb_comm_halo_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),zzero,x%v,desc_a,info,data=psb_comm_halo_) end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) @@ -262,16 +231,14 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (info == psb_success_) call psi_ovrl_restore(x%v,xvsave,desc_a,info) if (info /= psb_success_) then info = psb_err_from_subroutine_ - ch_err='psb_csmm' + ch_err = 'psb_csmm' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if if (doswap_) then - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& - & zone,y%v,desc_a,iwork,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & zone,y%v,desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),zone,y%v,desc_a,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),zone,y%v,desc_a,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -285,18 +252,6 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if - if (aliw) deallocate(iwork,stat=info) - if (debug_level >= psb_debug_comp_) & - & write(debug_unit,*) me,' ',trim(name),' deallocat ',aliw, info - if(info /= psb_success_) then - info = psb_err_from_subroutine_ - ch_err='Deallocate iwork' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - nullify(iwork) - call psb_erractionrestore(err_act) if (debug_level >= psb_debug_comp_) then call psb_barrier(ctxt) diff --git a/base/psblas/psb_zspsm.f90 b/base/psblas/psb_zspsm.f90 index 3cb06b021..d48ca3a45 100644 --- a/base/psblas/psb_zspsm.f90 +++ b/base/psblas/psb_zspsm.f90 @@ -64,10 +64,9 @@ ! the diagonal matrix D. ! choice - integer(optional). The kind of update to perform on overlap elements. ! d(:) - complex, optional Matrix for diagonal scaling. -! work(:) - complex, optional Working area. ! -subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& - & trans, scale, choice, diag, work) +subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& + & trans, scale, choice, diag) use psb_base_mod, psb_protect_name => psb_zspsv_vect use psi_mod implicit none @@ -79,7 +78,6 @@ subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info type(psb_z_vect_type), intent(inout), optional :: diag - complex(psb_dpk_), optional, target, intent(inout) :: work(:) character, intent(in), optional :: trans, scale integer(psb_ipk_), intent(in), optional :: choice @@ -88,23 +86,24 @@ subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_) :: np, me, & & err_act, iix, jjx, ia, ja, iia, jja, lldx,lldy, choice_,& & ix, iy, ik, jx, jy, i, lld,& - & m, nrow, ncol, liwork, llwork, iiy, jjy, idx, ndm + & m, nrow, ncol, iiy, jjy, idx, ndm character :: lscale integer(psb_ipk_), parameter :: nb=4 - complex(psb_dpk_),pointer :: iwork(:), xp(:), yp(:) + complex(psb_dpk_),pointer :: xp(:), yp(:) character :: itrans character(len=20) :: name, ch_err logical :: aliw - name='psb_zspsv_vect' - info=psb_success_ + name = 'psb_zspsv_vect' + info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then @@ -159,40 +158,12 @@ subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy null() - ! check for presence/size of a work area - liwork= 2*ncol - - if (present(work)) then - if (size(work) >= liwork) then - aliw =.false. - else - aliw=.true. - endif - else - aliw=.true. - end if - - if (aliw) then - allocate(iwork(liwork),stat=info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='psb_realloc' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - else - iwork => work - endif - - iwork(1)=0.d0 - ! Perform local triangular system solve if (present(diag)) then call a%spsm(alpha,x,beta,y,info,scale=scale,d=diag,trans=trans) @@ -208,8 +179,7 @@ subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& ! update overlap elements if (choice_ > 0) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & zone,y%v,desc_a,iwork,info,data=psb_comm_ovr_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),zone,y%v,desc_a,info,data=psb_comm_ovr_) if (info == psb_success_) call psi_ovrl_upd(y%v,desc_a,choice_,info) @@ -219,8 +189,6 @@ subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& end if end if - if (aliw) deallocate(iwork) - call psb_erractionrestore(err_act) return diff --git a/base/tools/psb_c_map.f90 b/base/tools/psb_c_map.f90 index 1cfb92723..40ca3fe8c 100644 --- a/base/tools/psb_c_map.f90 +++ b/base/tools/psb_c_map.f90 @@ -71,7 +71,7 @@ subroutine psb_c_map_U2V_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_V%get_global_rows() nc2 = map%p_desc_V%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work) if (info == psb_success_) call psb_csmm(cone,map%mat_U2V,x,czero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -91,7 +91,7 @@ subroutine psb_c_map_U2V_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_V%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work=work) + if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work) if (info == psb_success_) call psb_csmm(cone,map%mat_U2V,xt,czero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -112,14 +112,13 @@ subroutine psb_c_map_U2V_a(alpha,x,beta,y,map,info,work) end subroutine psb_c_map_U2V_a -subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) +subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_c_map_U2V_v implicit none class(psb_clinmap_type), intent(in) :: map complex(psb_spk_), intent(in) :: alpha,beta type(psb_c_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), optional :: work(:) type(psb_c_vect_type), optional, target, intent(inout) :: vtx,vty ! Local type(psb_c_vect_type), target :: xt, yt @@ -152,7 +151,7 @@ subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geasb(yt,map%p_desc_V,info,scratch=.true.,mold=x%v) pty => yt end if - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info) if (info == psb_success_) call psb_csmm(cone,map%mat_U2V,x,czero,pty,info) if ((info == psb_success_) .and. map%p_desc_V%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -186,7 +185,7 @@ subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) end if call psb_geaxpby(cone,x,czero,ptx,map%desc_U,info) - if (info == psb_success_) call psb_halo(ptx,map%desc_U,info,work=work) + if (info == psb_success_) call psb_halo(ptx,map%desc_U,info) if (info == psb_success_) call psb_csmm(cone,map%mat_U2V,ptx,czero,pty,info) if ((info == psb_success_) .and. map%desc_V%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -254,7 +253,7 @@ subroutine psb_c_map_V2U_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_U%get_global_rows() nc2 = map%p_desc_U%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work) if (info == psb_success_) call psb_csmm(cone,map%mat_V2U,x,czero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -274,7 +273,7 @@ subroutine psb_c_map_V2U_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_U%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work=work) + if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work) if (info == psb_success_) call psb_csmm(cone,map%mat_V2U,xt,czero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -294,14 +293,13 @@ subroutine psb_c_map_V2U_a(alpha,x,beta,y,map,info,work) end subroutine psb_c_map_V2U_a -subroutine psb_c_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) +subroutine psb_c_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_c_map_V2U_v implicit none class(psb_clinmap_type), intent(in) :: map complex(psb_spk_), intent(in) :: alpha,beta type(psb_c_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - complex(psb_spk_), optional :: work(:) type(psb_c_vect_type), optional, target, intent(inout) :: vtx,vty ! Local type(psb_c_vect_type), target :: xt, yt @@ -334,7 +332,7 @@ subroutine psb_c_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geasb(yt,map%p_desc_U,info,scratch=.true.,mold=x%v) pty => yt end if - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info) if (info == psb_success_) call psb_csmm(cone,map%mat_V2U,x,czero,pty,info) if ((info == psb_success_) .and. map%p_desc_U%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -369,7 +367,7 @@ subroutine psb_c_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geaxpby(cone,x,czero,ptx,map%desc_V,info) - if (info == psb_success_) call psb_halo(ptx,map%desc_V,info,work=work) + if (info == psb_success_) call psb_halo(ptx,map%desc_V,info) if (info == psb_success_) call psb_csmm(cone,map%mat_V2U,ptx,czero,pty,info) if ((info == psb_success_) .and. map%desc_U%is_repl().and.(np>1)) then yta = pty%get_vect() diff --git a/base/tools/psb_d_map.f90 b/base/tools/psb_d_map.f90 index d1a02fdf5..a36c07b36 100644 --- a/base/tools/psb_d_map.f90 +++ b/base/tools/psb_d_map.f90 @@ -71,7 +71,7 @@ subroutine psb_d_map_U2V_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_V%get_global_rows() nc2 = map%p_desc_V%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work) if (info == psb_success_) call psb_csmm(done,map%mat_U2V,x,dzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -91,7 +91,7 @@ subroutine psb_d_map_U2V_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_V%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work=work) + if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work) if (info == psb_success_) call psb_csmm(done,map%mat_U2V,xt,dzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -112,14 +112,13 @@ subroutine psb_d_map_U2V_a(alpha,x,beta,y,map,info,work) end subroutine psb_d_map_U2V_a -subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) +subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_d_map_U2V_v implicit none class(psb_dlinmap_type), intent(in) :: map real(psb_dpk_), intent(in) :: alpha,beta type(psb_d_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), optional :: work(:) type(psb_d_vect_type), optional, target, intent(inout) :: vtx,vty ! Local type(psb_d_vect_type), target :: xt, yt @@ -152,7 +151,7 @@ subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geasb(yt,map%p_desc_V,info,scratch=.true.,mold=x%v) pty => yt end if - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info) if (info == psb_success_) call psb_csmm(done,map%mat_U2V,x,dzero,pty,info) if ((info == psb_success_) .and. map%p_desc_V%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -186,7 +185,7 @@ subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) end if call psb_geaxpby(done,x,dzero,ptx,map%desc_U,info) - if (info == psb_success_) call psb_halo(ptx,map%desc_U,info,work=work) + if (info == psb_success_) call psb_halo(ptx,map%desc_U,info) if (info == psb_success_) call psb_csmm(done,map%mat_U2V,ptx,dzero,pty,info) if ((info == psb_success_) .and. map%desc_V%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -254,7 +253,7 @@ subroutine psb_d_map_V2U_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_U%get_global_rows() nc2 = map%p_desc_U%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work) if (info == psb_success_) call psb_csmm(done,map%mat_V2U,x,dzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -274,7 +273,7 @@ subroutine psb_d_map_V2U_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_U%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work=work) + if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work) if (info == psb_success_) call psb_csmm(done,map%mat_V2U,xt,dzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -294,14 +293,13 @@ subroutine psb_d_map_V2U_a(alpha,x,beta,y,map,info,work) end subroutine psb_d_map_V2U_a -subroutine psb_d_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) +subroutine psb_d_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_d_map_V2U_v implicit none class(psb_dlinmap_type), intent(in) :: map real(psb_dpk_), intent(in) :: alpha,beta type(psb_d_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - real(psb_dpk_), optional :: work(:) type(psb_d_vect_type), optional, target, intent(inout) :: vtx,vty ! Local type(psb_d_vect_type), target :: xt, yt @@ -334,7 +332,7 @@ subroutine psb_d_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geasb(yt,map%p_desc_U,info,scratch=.true.,mold=x%v) pty => yt end if - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info) if (info == psb_success_) call psb_csmm(done,map%mat_V2U,x,dzero,pty,info) if ((info == psb_success_) .and. map%p_desc_U%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -369,7 +367,7 @@ subroutine psb_d_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geaxpby(done,x,dzero,ptx,map%desc_V,info) - if (info == psb_success_) call psb_halo(ptx,map%desc_V,info,work=work) + if (info == psb_success_) call psb_halo(ptx,map%desc_V,info) if (info == psb_success_) call psb_csmm(done,map%mat_V2U,ptx,dzero,pty,info) if ((info == psb_success_) .and. map%desc_U%is_repl().and.(np>1)) then yta = pty%get_vect() diff --git a/base/tools/psb_s_map.f90 b/base/tools/psb_s_map.f90 index e6c6d445c..47faf8c7a 100644 --- a/base/tools/psb_s_map.f90 +++ b/base/tools/psb_s_map.f90 @@ -71,7 +71,7 @@ subroutine psb_s_map_U2V_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_V%get_global_rows() nc2 = map%p_desc_V%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work) if (info == psb_success_) call psb_csmm(sone,map%mat_U2V,x,szero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -91,7 +91,7 @@ subroutine psb_s_map_U2V_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_V%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work=work) + if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work) if (info == psb_success_) call psb_csmm(sone,map%mat_U2V,xt,szero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -112,14 +112,13 @@ subroutine psb_s_map_U2V_a(alpha,x,beta,y,map,info,work) end subroutine psb_s_map_U2V_a -subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) +subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_s_map_U2V_v implicit none class(psb_slinmap_type), intent(in) :: map real(psb_spk_), intent(in) :: alpha,beta type(psb_s_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - real(psb_spk_), optional :: work(:) type(psb_s_vect_type), optional, target, intent(inout) :: vtx,vty ! Local type(psb_s_vect_type), target :: xt, yt @@ -152,7 +151,7 @@ subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geasb(yt,map%p_desc_V,info,scratch=.true.,mold=x%v) pty => yt end if - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info) if (info == psb_success_) call psb_csmm(sone,map%mat_U2V,x,szero,pty,info) if ((info == psb_success_) .and. map%p_desc_V%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -186,7 +185,7 @@ subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) end if call psb_geaxpby(sone,x,szero,ptx,map%desc_U,info) - if (info == psb_success_) call psb_halo(ptx,map%desc_U,info,work=work) + if (info == psb_success_) call psb_halo(ptx,map%desc_U,info) if (info == psb_success_) call psb_csmm(sone,map%mat_U2V,ptx,szero,pty,info) if ((info == psb_success_) .and. map%desc_V%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -254,7 +253,7 @@ subroutine psb_s_map_V2U_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_U%get_global_rows() nc2 = map%p_desc_U%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work) if (info == psb_success_) call psb_csmm(sone,map%mat_V2U,x,szero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -274,7 +273,7 @@ subroutine psb_s_map_V2U_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_U%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work=work) + if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work) if (info == psb_success_) call psb_csmm(sone,map%mat_V2U,xt,szero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -294,14 +293,13 @@ subroutine psb_s_map_V2U_a(alpha,x,beta,y,map,info,work) end subroutine psb_s_map_V2U_a -subroutine psb_s_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) +subroutine psb_s_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_s_map_V2U_v implicit none class(psb_slinmap_type), intent(in) :: map real(psb_spk_), intent(in) :: alpha,beta type(psb_s_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - real(psb_spk_), optional :: work(:) type(psb_s_vect_type), optional, target, intent(inout) :: vtx,vty ! Local type(psb_s_vect_type), target :: xt, yt @@ -334,7 +332,7 @@ subroutine psb_s_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geasb(yt,map%p_desc_U,info,scratch=.true.,mold=x%v) pty => yt end if - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info) if (info == psb_success_) call psb_csmm(sone,map%mat_V2U,x,szero,pty,info) if ((info == psb_success_) .and. map%p_desc_U%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -369,7 +367,7 @@ subroutine psb_s_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geaxpby(sone,x,szero,ptx,map%desc_V,info) - if (info == psb_success_) call psb_halo(ptx,map%desc_V,info,work=work) + if (info == psb_success_) call psb_halo(ptx,map%desc_V,info) if (info == psb_success_) call psb_csmm(sone,map%mat_V2U,ptx,szero,pty,info) if ((info == psb_success_) .and. map%desc_U%is_repl().and.(np>1)) then yta = pty%get_vect() diff --git a/base/tools/psb_z_map.f90 b/base/tools/psb_z_map.f90 index 0aba3e3eb..55500f583 100644 --- a/base/tools/psb_z_map.f90 +++ b/base/tools/psb_z_map.f90 @@ -71,7 +71,7 @@ subroutine psb_z_map_U2V_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_V%get_global_rows() nc2 = map%p_desc_V%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work) if (info == psb_success_) call psb_csmm(zone,map%mat_U2V,x,zzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -91,7 +91,7 @@ subroutine psb_z_map_U2V_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_V%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work=work) + if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work) if (info == psb_success_) call psb_csmm(zone,map%mat_U2V,xt,zzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -112,14 +112,13 @@ subroutine psb_z_map_U2V_a(alpha,x,beta,y,map,info,work) end subroutine psb_z_map_U2V_a -subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) +subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_z_map_U2V_v implicit none class(psb_zlinmap_type), intent(in) :: map complex(psb_dpk_), intent(in) :: alpha,beta type(psb_z_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), optional :: work(:) type(psb_z_vect_type), optional, target, intent(inout) :: vtx,vty ! Local type(psb_z_vect_type), target :: xt, yt @@ -152,7 +151,7 @@ subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geasb(yt,map%p_desc_V,info,scratch=.true.,mold=x%v) pty => yt end if - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info) if (info == psb_success_) call psb_csmm(zone,map%mat_U2V,x,zzero,pty,info) if ((info == psb_success_) .and. map%p_desc_V%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -186,7 +185,7 @@ subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,work,vtx,vty) end if call psb_geaxpby(zone,x,zzero,ptx,map%desc_U,info) - if (info == psb_success_) call psb_halo(ptx,map%desc_U,info,work=work) + if (info == psb_success_) call psb_halo(ptx,map%desc_U,info) if (info == psb_success_) call psb_csmm(zone,map%mat_U2V,ptx,zzero,pty,info) if ((info == psb_success_) .and. map%desc_V%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -254,7 +253,7 @@ subroutine psb_z_map_V2U_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_U%get_global_rows() nc2 = map%p_desc_U%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work) if (info == psb_success_) call psb_csmm(zone,map%mat_V2U,x,zzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -274,7 +273,7 @@ subroutine psb_z_map_V2U_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_U%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work=work) + if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work) if (info == psb_success_) call psb_csmm(zone,map%mat_V2U,xt,zzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -294,14 +293,13 @@ subroutine psb_z_map_V2U_a(alpha,x,beta,y,map,info,work) end subroutine psb_z_map_V2U_a -subroutine psb_z_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) +subroutine psb_z_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_z_map_V2U_v implicit none class(psb_zlinmap_type), intent(in) :: map complex(psb_dpk_), intent(in) :: alpha,beta type(psb_z_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_), optional :: work(:) type(psb_z_vect_type), optional, target, intent(inout) :: vtx,vty ! Local type(psb_z_vect_type), target :: xt, yt @@ -334,7 +332,7 @@ subroutine psb_z_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geasb(yt,map%p_desc_U,info,scratch=.true.,mold=x%v) pty => yt end if - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info) if (info == psb_success_) call psb_csmm(zone,map%mat_V2U,x,zzero,pty,info) if ((info == psb_success_) .and. map%p_desc_U%is_repl().and.(np>1)) then yta = pty%get_vect() @@ -369,7 +367,7 @@ subroutine psb_z_map_V2U_v(alpha,x,beta,y,map,info,work,vtx,vty) call psb_geaxpby(zone,x,zzero,ptx,map%desc_V,info) - if (info == psb_success_) call psb_halo(ptx,map%desc_V,info,work=work) + if (info == psb_success_) call psb_halo(ptx,map%desc_V,info) if (info == psb_success_) call psb_csmm(zone,map%mat_V2U,ptx,zzero,pty,info) if ((info == psb_success_) .and. map%desc_U%is_repl().and.(np>1)) then yta = pty%get_vect() diff --git a/linsolve/impl/psb_cbicg.f90 b/linsolve/impl/psb_cbicg.f90 index c357054b1..2bfe0dbbe 100644 --- a/linsolve/impl/psb_cbicg.f90 +++ b/linsolve/impl/psb_cbicg.f90 @@ -112,11 +112,10 @@ subroutine psb_cbicg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), optional, intent(out) :: iter real(psb_spk_), optional, intent(out) :: err ! !$ local data - complex(psb_spk_), allocatable, target :: aux(:) type(psb_c_vect_type), allocatable, target :: wwrk(:) type(psb_c_vect_type), pointer :: ww, q, r, p,& & zt, pt, z, rt, qt - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col, istop_, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -188,14 +187,11 @@ subroutine psb_cbicg_vect(a,prec,b,x,eps,desc_a,info,& end if - naux=4*n_col - - allocate(aux(naux),stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v) if(info /= psb_success_) then - info=psb_err_from_subroutine_non_ - ch_err='psb_asb' + info = psb_err_from_subroutine_non_ + ch_err = 'psb_asb' err=info call psb_errpush(info,name,a_err=ch_err) goto 9999 @@ -239,7 +235,7 @@ subroutine psb_cbicg_vect(a,prec,b,x,eps,desc_a,info,& if (itx >= itmax_) exit restart it = 0 call psb_geaxpby(cone,b,czero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info) if (debug_level >= psb_debug_ext_)& & write(debug_unit,*) me,' ',trim(name),' Done spmm',info if (info == psb_success_) call psb_geaxpby(cone,r,czero,rt,desc_a,info) @@ -265,8 +261,8 @@ subroutine psb_cbicg_vect(a,prec,b,x,eps,desc_a,info,& if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),'iteration: ',itx - call prec%apply(r,z,desc_a,info,work=aux) - if (info == psb_success_) call prec%apply(rt,zt,desc_a,info,trans='c',work=aux) + call prec%apply(r,z,desc_a,info) + if (info == psb_success_) call prec%apply(rt,zt,desc_a,info,trans='c') rho_old = rho rho = psb_gedot(rt,z,desc_a,info) @@ -286,10 +282,8 @@ subroutine psb_cbicg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(cone,zt,beta,pt,desc_a,info) end if - call psb_spmm(cone,a,p,czero,q,desc_a,info,& - & work=aux) - call psb_spmm(cone,a,pt,czero,qt,desc_a,info,& - & work=aux,trans='c') + call psb_spmm(cone,a,p,czero,q,desc_a,info) + call psb_spmm(cone,a,pt,czero,qt,desc_a,info,trans='c') sigma = psb_gedot(pt,q,desc_a,info) if (sigma == czero) then @@ -319,7 +313,6 @@ subroutine psb_cbicg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_ccg.F90 b/linsolve/impl/psb_ccg.F90 index 0ba1b5fc2..2a384304e 100644 --- a/linsolve/impl/psb_ccg.F90 +++ b/linsolve/impl/psb_ccg.F90 @@ -113,12 +113,12 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err,cond ! = Local data - complex(psb_spk_), allocatable, target :: aux(:),td(:),tu(:),eig(:),ewrk(:) + complex(psb_spk_), allocatable, target :: td(:),tu(:),eig(:),ewrk(:) integer(psb_mpk_), allocatable :: ibl(:), ispl(:), iwrk(:) type(psb_c_vect_type), allocatable, target :: wwrk(:) type(psb_c_vect_type), pointer :: q, p, r, z, w complex(psb_spk_) :: alpha, beta, rho, rho_old, sigma,alpha_old,beta_old - integer(psb_ipk_) :: itmax_, istop_, naux, it, itx, itrace_,& + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,err_act, ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -171,8 +171,6 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then @@ -215,7 +213,7 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& it = 0 call psb_geaxpby(cone,b,czero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -235,7 +233,7 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& it = it + 1 itx = itx + 1 - call prec%apply(r,z,desc_a,info,work=aux) + call prec%apply(r,z,desc_a,info) rho_old = rho rho = psb_gedot(r,z,desc_a,info) @@ -252,7 +250,7 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(cone,z,beta,p,desc_a,info) end if - call psb_spmm(cone,a,p,czero,q,desc_a,info,work=aux) + call psb_spmm(cone,a,p,czero,q,desc_a,info) sigma = psb_gedot(p,q,desc_a,info) if (sigma == czero) then if (debug_level >= psb_debug_ext_)& @@ -285,7 +283,6 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_ccgs.f90 b/linsolve/impl/psb_ccgs.f90 index f7808c0d0..ee4a3e5a3 100644 --- a/linsolve/impl/psb_ccgs.f90 +++ b/linsolve/impl/psb_ccgs.f90 @@ -110,11 +110,10 @@ Subroutine psb_ccgs_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err ! = local data - complex(psb_spk_), allocatable, target :: aux(:) type(psb_c_vect_type), allocatable, target :: wwrk(:) type(psb_c_vect_type), pointer :: ww, q, r, p, v,& & s, z, f, rt, qt, uv - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col,istop_, itx, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt @@ -165,8 +164,6 @@ Subroutine psb_ccgs_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - Allocate(aux(naux),stat=info) if (info == psb_success_) Call psb_geall(wwrk,desc_a,info,n=11_psb_ipk_) if (info == psb_success_) Call psb_geasb(wwrk,desc_a,info,mold=x%v) if (info /= psb_success_) Then @@ -215,7 +212,7 @@ Subroutine psb_ccgs_vect(a,prec,b,x,eps,desc_a,info,& if (itx >= itmax_) exit restart it = 0 call psb_geaxpby(cone,b,czero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info) if (info == psb_success_) call psb_geaxpby(cone,r,czero,rt,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -260,10 +257,9 @@ Subroutine psb_ccgs_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geaxpby(cone,uv,beta,p,desc_a,info) end if - if (info == psb_success_) call prec%apply(p,f,desc_a,info,work=aux) + if (info == psb_success_) call prec%apply(p,f,desc_a,info) - if (info == psb_success_) call psb_spmm(cone,a,f,czero,v,desc_a,info,& - & work=aux) + if (info == psb_success_) call psb_spmm(cone,a,f,czero,v,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='First loop part ') @@ -285,12 +281,11 @@ Subroutine psb_ccgs_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geaxpby(cone,uv,czero,s,desc_a,info) if (info == psb_success_) call psb_geaxpby(cone,q,cone,s,desc_a,info) - if (info == psb_success_) call prec%apply(s,z,desc_a,info,work=aux) + if (info == psb_success_) call prec%apply(s,z,desc_a,info) if (info == psb_success_) call psb_geaxpby(alpha,z,cone,x,desc_a,info) - if (info == psb_success_) call psb_spmm(cone,a,z,czero,qt,desc_a,info,& - & work=aux) + if (info == psb_success_) call psb_spmm(cone,a,z,czero,qt,desc_a,info) if (info == psb_success_) call psb_geaxpby(-alpha,qt,cone,r,desc_a,info) @@ -312,7 +307,6 @@ Subroutine psb_ccgs_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_ccgstab.f90 b/linsolve/impl/psb_ccgstab.f90 index 4ccbaf7a8..78d10eb83 100644 --- a/linsolve/impl/psb_ccgstab.f90 +++ b/linsolve/impl/psb_ccgstab.f90 @@ -110,10 +110,10 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err ! = Local data - complex(psb_spk_), allocatable, target :: aux(:),wwrk(:,:) + complex(psb_spk_), allocatable, target :: wwrk(:,:) type(psb_c_vect_type) :: q, r, p, v, s, t, z, f - integer(psb_ipk_) :: itmax_, naux, it,itrace_,& + integer(psb_ipk_) :: itmax_, it,itrace_,& & n_row, n_col integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -179,8 +179,6 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_errpush(info,name,a_err='psb_chkvect on B') goto 9999 end if - naux=6*n_col - if (info == psb_success_) allocate(aux(naux),stat=info) if (info /= psb_success_) then info=psb_err_alloc_dealloc_ call psb_errpush(info,name) @@ -230,7 +228,7 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist it = 0 call psb_geaxpby(cone,b,czero,r,desc_a,info) - call psb_spmm(-cone,a,x,cone,r,desc_a,info,work=aux) + call psb_spmm(-cone,a,x,cone,r,desc_a,info) call psb_geaxpby(cone,r,czero,q,desc_a,info) ! Perhaps we already satisfy the convergence criterion... @@ -279,10 +277,9 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_geaxpby(cone,r,beta,p,desc_a,info) End If - call prec%apply(p,f,desc_a,info,work=aux) + call prec%apply(p,f,desc_a,info) - call psb_spmm(cone,a,f,czero,v,desc_a,info,& - & work=aux) + call psb_spmm(cone,a,f,czero,v,desc_a,info) sigma = psb_gedot(q,v,desc_a,info) @@ -316,8 +313,8 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist end if - call prec%apply(s,z,desc_a,info,work=aux) - Call psb_spmm(cone,a,z,czero,t,desc_a,info,work=aux) + call prec%apply(s,z,desc_a,info) + Call psb_spmm(cone,a,z,czero,t,desc_a,info) if(psb_errstatus_fatal()) then call psb_errpush(psb_err_from_subroutine_,name,a_err='precaply/spmm') @@ -367,7 +364,6 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr - deallocate(aux,stat=info) call x%sync() call psb_gefree(q,desc_a,info) diff --git a/linsolve/impl/psb_ccgstabl.f90 b/linsolve/impl/psb_ccgstabl.f90 index f1463b83d..d0c3dc537 100644 --- a/linsolve/impl/psb_ccgstabl.f90 +++ b/linsolve/impl/psb_ccgstabl.f90 @@ -121,13 +121,13 @@ Subroutine psb_ccgstabl_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err ! = local data - complex(psb_spk_), allocatable, target :: aux(:), gamma(:),& + complex(psb_spk_), allocatable, target :: gamma(:),& & gamma1(:), gamma2(:), taum(:,:), sigma(:) type(psb_c_vect_type), allocatable, target :: wwrk(:),uh(:), rh(:) type(psb_c_vect_type), Pointer :: ww, q, r, rt0, p, v, & & s, t, z, f - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col, nl, err_act integer(psb_lpk_) :: mglob Logical, Parameter :: exchange=.True., noexchange=.False. @@ -213,10 +213,6 @@ Subroutine psb_ccgstabl_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux),gamma(0:nl),gamma1(nl),& - &gamma2(nl),taum(nl,nl),sigma(nl), stat=info) - if (info /= psb_success_) then info=psb_err_alloc_dealloc_ call psb_errpush(info,name) @@ -263,7 +259,7 @@ Subroutine psb_ccgstabl_vect(a,prec,b,x,eps,desc_a,info,& it = 0 call psb_geaxpby(cone,b,czero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info) if (info == psb_success_) call prec%apply(r,desc_a,info) @@ -318,7 +314,7 @@ Subroutine psb_ccgstabl_vect(a,prec,b,x,eps,desc_a,info,& ! = call psb_geaxpby(cone,rh(:,0:j),-beta,uh(:,0:j),desc_a,info) call psb_geaxpby(cone,rh(k),-beta,uh(k),desc_a,info) end do - call psb_spmm(cone,a,uh(j),czero,uh(j+1),desc_a,info,work=aux) + call psb_spmm(cone,a,uh(j),czero,uh(j+1),desc_a,info) call prec%apply(uh(j+1),desc_a,info) @@ -340,7 +336,7 @@ Subroutine psb_ccgstabl_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(-alpha,uh(k+1),cone,rh(k),desc_a,info) end do call psb_geaxpby(alpha,uh(0),cone,x,desc_a,info) - call psb_spmm(cone,a,rh(j),czero,rh(j+1),desc_a,info,work=aux) + call psb_spmm(cone,a,rh(j),czero,rh(j+1),desc_a,info) call prec%apply(rh(j+1),desc_a,info) @@ -403,7 +399,6 @@ Subroutine psb_ccgstabl_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(uh,desc_a,info) if (info == psb_success_) call psb_gefree(rh,desc_a,info) if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_cfcg.F90 b/linsolve/impl/psb_cfcg.F90 index f28db7dea..4c1b1ae18 100644 --- a/linsolve/impl/psb_cfcg.F90 +++ b/linsolve/impl/psb_cfcg.F90 @@ -125,12 +125,11 @@ subroutine psb_cfcg_vect(a,prec,b,x,eps,desc_a,info,& complex(psb_spk_) :: alpha, beta, delta, gamma, theta real(psb_dpk_) :: derr integer(psb_ipk_) :: i, idx, nc2l, it, itx, istop_, itmax_, itrace_ - integer(psb_ipk_) :: n_col, naux, err_act + integer(psb_ipk_) :: n_col, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me - complex(psb_spk_), allocatable, target :: aux(:) complex(psb_spk_) :: vres(3) character(len=20) :: name type(psb_itconv_type) :: stopdat @@ -177,9 +176,6 @@ subroutine psb_cfcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) - if (present(itmax)) then itmax_ = itmax @@ -234,7 +230,7 @@ subroutine psb_cfcg_vect(a,prec,b,x,eps,desc_a,info,& ! Apply the preconditioner v=Pr ! Compute w = Av - call prec%apply(r,v,desc_a,info,work=aux) + call prec%apply(r,v,desc_a,info) if (info == psb_success_) call psb_spmm(cone,a,v,czero,w,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,& @@ -289,7 +285,7 @@ subroutine psb_cfcg_vect(a,prec,b,x,eps,desc_a,info,& ! Apply the preconditioner v = Pr ! Compute w = Av - call prec%apply(r,v,desc_a,info,work=aux) + call prec%apply(r,v,desc_a,info) if (info == psb_success_) call psb_spmm(cone,a,v,czero,w,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,& diff --git a/linsolve/impl/psb_cgcr.f90 b/linsolve/impl/psb_cgcr.f90 index 5120b102f..360c7db9d 100644 --- a/linsolve/impl/psb_cgcr.f90 +++ b/linsolve/impl/psb_cgcr.f90 @@ -130,14 +130,13 @@ subroutine psb_cgcr_vect(a,prec,b,x,eps,desc_a,info,& type(psb_c_vect_type) :: r real(psb_dpk_) :: r_norm, b_norm, a_norm, derr - integer(psb_ipk_) :: n_col, naux, err_act + integer(psb_ipk_) :: n_col, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me integer(psb_ipk_) :: i, j, it, itx, istop_, itmax_, itrace_, nl, m, nrst complex(psb_spk_) :: hjj - complex(psb_spk_), allocatable, target :: aux(:) character(len=20) :: name type(psb_itconv_type) :: stopdat character(len=*), parameter :: methdname='GCR' @@ -223,10 +222,6 @@ subroutine psb_cgcr_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 endif - naux=4*n_col - allocate(aux(naux),h(nl+1,nl+1),& - &c_scale(nl+1),c(nl+1),z(nl+1), alpha(nl+1), stat=info) - h = czero if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -261,7 +256,7 @@ subroutine psb_cgcr_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(cone, b, czero, r, desc_a, info) - call psb_spmm(-cone,a,x,cone,r,desc_a,info,work=aux) + call psb_spmm(-cone,a,x,cone,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -278,9 +273,9 @@ subroutine psb_cgcr_vect(a,prec,b,x,eps,desc_a,info,& it = it + 1 j = it !Apply preconditioner - call prec%apply(r,z(j),desc_a,info,work=aux) + call prec%apply(r,z(j),desc_a,info) - call psb_spmm(cone,a,z(j),czero,c(1),desc_a,info,work=aux) + call psb_spmm(cone,a,z(j),czero,c(1),desc_a,info) do i =1, j - 1 h(i,j) = psb_gedot(c_scale(i), c(i), desc_a, info) @@ -347,7 +342,6 @@ subroutine psb_cgcr_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(c(i),desc_a,info) end do - if (info == psb_success_) deallocate(aux,h,c_scale,z,c,alpha,stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_crgmres.f90 b/linsolve/impl/psb_crgmres.f90 index e0c0b38da..f03e1881b 100644 --- a/linsolve/impl/psb_crgmres.f90 +++ b/linsolve/impl/psb_crgmres.f90 @@ -124,13 +124,12 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err ! = local data - complex(psb_spk_), allocatable :: aux(:) complex(psb_spk_), allocatable :: c(:), s(:), h(:,:), rs(:), rst(:) type(psb_c_vect_type), allocatable :: v(:) type(psb_c_vect_type) :: w, w1, xt real(psb_spk_) :: tmp complex(psb_spk_) :: scal, gm, rti, rti1 - integer(psb_ipk_) ::litmax, naux, it, k, itrace_,& + integer(psb_ipk_) ::litmax, it, k, itrace_,& & n_row, n_col, nl integer(psb_lpk_) :: mglob Logical, Parameter :: exchange=.True., noexchange=.False., use_srot=.true. @@ -230,10 +229,6 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& end if - naux=4*n_col - allocate(aux(naux),h(nl+1,nl+1),& - &c(nl+1),s(nl+1),rs(nl+1), rst(nl+1),stat=info) - if (info == psb_success_) call psb_geall(v,desc_a,info,n=nl+1) if (info == psb_success_) call psb_geall(w,desc_a,info) if (info == psb_success_) call psb_geall(w1,desc_a,info) @@ -266,7 +261,7 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - call psb_spmm(-cone,a,x,cone,v(1),desc_a,info,work=aux) + call psb_spmm(-cone,a,x,cone,v(1),desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -301,7 +296,7 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - call psb_spmm(-cone,a,x,cone,v(1),desc_a,info,work=aux) + call psb_spmm(-cone,a,x,cone,v(1),desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -358,7 +353,7 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& itx = itx + 1 call prec%apply(v(i),w1,desc_a,info) - call psb_spmm(cone,a,w1,czero,w,desc_a,info,work=aux) + call psb_spmm(cone,a,w1,czero,w,desc_a,info) ! do k = 1, i @@ -397,7 +392,7 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& call prec%apply(xt,desc_a,info) call psb_geaxpby(cone,x,cone,xt,desc_a,info) call psb_geaxpby(cone,b,czero,w1,desc_a,info) - call psb_spmm(-cone,a,xt,cone,w1,desc_a,info,work=aux) + call psb_spmm(-cone,a,xt,cone,w1,desc_a,info) rni = psb_geamax(w1,desc_a,info) xni = psb_geamax(xt,desc_a,info) errnum = rni @@ -490,7 +485,6 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(w,desc_a,info) if (info == psb_success_) call psb_gefree(w1,desc_a,info) if (info == psb_success_) call psb_gefree(xt,desc_a,info) - if (info == psb_success_) deallocate(aux,h,c,s,rs,rst, stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_crichardson.f90 b/linsolve/impl/psb_crichardson.f90 index 3eb4c2634..d92e0ce3d 100644 --- a/linsolve/impl/psb_crichardson.f90 +++ b/linsolve/impl/psb_crichardson.f90 @@ -91,11 +91,10 @@ Subroutine psb_crichardson_vect(a,prec,b,x,eps,desc_a,info,& logical :: do_alloc_wrk type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: me,np,err_act - complex(psb_spk_), allocatable, target :: aux(:) type(psb_c_vect_type), allocatable, target :: wwrk(:) type(psb_c_vect_type), pointer :: q, p, r, z, w real(psb_dpk_) :: derr - integer(psb_ipk_) :: itmax_, istop_, naux, it, itx, itrace_,& + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -155,12 +154,10 @@ Subroutine psb_crichardson_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then - info=psb_err_from_subroutine_non_ + info = psb_err_from_subroutine_non_ call psb_errpush(info,name) goto 9999 end if @@ -171,9 +168,9 @@ Subroutine psb_crichardson_vect(a,prec,b,x,eps,desc_a,info,& w => wwrk(5) call psb_geaxpby(cone,b,czero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info) if (info /= psb_success_) then - info=psb_err_from_subroutine_non_ + info = psb_err_from_subroutine_non_ call psb_errpush(info,name) goto 9999 end if @@ -186,17 +183,16 @@ Subroutine psb_crichardson_vect(a,prec,b,x,eps,desc_a,info,& End If loop: do itx=1,itmax_ - call prec%apply(r,z,desc_a,info,work=aux) + call prec%apply(r,z,desc_a,info) call psb_geaxpby(cone,z,cone,x,desc_a,info) call psb_geaxpby(cone,b,czero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info) if (psb_check_conv(methdname,itx,x,r,desc_a,stopdat,info)) exit loop end do loop call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if ((info==psb_success_).and.do_alloc_wrk) call prec%free_wrk(info) if(info /= psb_success_) then diff --git a/linsolve/impl/psb_dbicg.f90 b/linsolve/impl/psb_dbicg.f90 index ebcc8eb90..e717a7831 100644 --- a/linsolve/impl/psb_dbicg.f90 +++ b/linsolve/impl/psb_dbicg.f90 @@ -112,11 +112,10 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), optional, intent(out) :: iter real(psb_dpk_), optional, intent(out) :: err ! !$ local data - real(psb_dpk_), allocatable, target :: aux(:) type(psb_d_vect_type), allocatable, target :: wwrk(:) type(psb_d_vect_type), pointer :: ww, q, r, p,& & zt, pt, z, rt, qt - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col, istop_, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -188,9 +187,7 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& end if - naux=4*n_col - allocate(aux(naux),stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v) if(info /= psb_success_) then @@ -239,7 +236,7 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& if (itx >= itmax_) exit restart it = 0 call psb_geaxpby(done,b,dzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info) if (debug_level >= psb_debug_ext_)& & write(debug_unit,*) me,' ',trim(name),' Done spmm',info if (info == psb_success_) call psb_geaxpby(done,r,dzero,rt,desc_a,info) @@ -265,8 +262,8 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),'iteration: ',itx - call prec%apply(r,z,desc_a,info,work=aux) - if (info == psb_success_) call prec%apply(rt,zt,desc_a,info,trans='c',work=aux) + call prec%apply(r,z,desc_a,info) + if (info == psb_success_) call prec%apply(rt,zt,desc_a,info,trans='c') rho_old = rho rho = psb_gedot(rt,z,desc_a,info) @@ -286,10 +283,8 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(done,zt,beta,pt,desc_a,info) end if - call psb_spmm(done,a,p,dzero,q,desc_a,info,& - & work=aux) - call psb_spmm(done,a,pt,dzero,qt,desc_a,info,& - & work=aux,trans='c') + call psb_spmm(done,a,p,dzero,q,desc_a,info) + call psb_spmm(done,a,pt,dzero,qt,desc_a,info,trans='c') sigma = psb_gedot(pt,q,desc_a,info) if (sigma == dzero) then @@ -319,7 +314,6 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_dcg.F90 b/linsolve/impl/psb_dcg.F90 index a59937310..63914940e 100644 --- a/linsolve/impl/psb_dcg.F90 +++ b/linsolve/impl/psb_dcg.F90 @@ -113,12 +113,12 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err,cond ! = Local data - real(psb_dpk_), allocatable, target :: aux(:),td(:),tu(:),eig(:),ewrk(:) + real(psb_dpk_), allocatable, target :: td(:),tu(:),eig(:),ewrk(:) integer(psb_mpk_), allocatable :: ibl(:), ispl(:), iwrk(:) type(psb_d_vect_type), allocatable, target :: wwrk(:) type(psb_d_vect_type), pointer :: q, p, r, z, w real(psb_dpk_) :: alpha, beta, rho, rho_old, sigma,alpha_old,beta_old - integer(psb_ipk_) :: itmax_, istop_, naux, it, itx, itrace_,& + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,err_act, ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -171,8 +171,6 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then @@ -223,7 +221,7 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& it = 0 call psb_geaxpby(done,b,dzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -243,7 +241,7 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& it = it + 1 itx = itx + 1 - call prec%apply(r,z,desc_a,info,work=aux) + call prec%apply(r,z,desc_a,info) rho_old = rho rho = psb_gedot(r,z,desc_a,info) @@ -260,7 +258,7 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(done,z,beta,p,desc_a,info) end if - call psb_spmm(done,a,p,dzero,q,desc_a,info,work=aux) + call psb_spmm(done,a,p,dzero,q,desc_a,info) sigma = psb_gedot(p,q,desc_a,info) if (sigma == dzero) then if (debug_level >= psb_debug_ext_)& @@ -318,7 +316,6 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_dcgs.f90 b/linsolve/impl/psb_dcgs.f90 index 5c2401d1a..970aa26de 100644 --- a/linsolve/impl/psb_dcgs.f90 +++ b/linsolve/impl/psb_dcgs.f90 @@ -110,11 +110,10 @@ Subroutine psb_dcgs_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err ! = local data - real(psb_dpk_), allocatable, target :: aux(:) type(psb_d_vect_type), allocatable, target :: wwrk(:) type(psb_d_vect_type), pointer :: ww, q, r, p, v,& & s, z, f, rt, qt, uv - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col,istop_, itx, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt @@ -165,8 +164,6 @@ Subroutine psb_dcgs_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - Allocate(aux(naux),stat=info) if (info == psb_success_) Call psb_geall(wwrk,desc_a,info,n=11_psb_ipk_) if (info == psb_success_) Call psb_geasb(wwrk,desc_a,info,mold=x%v) if (info /= psb_success_) Then @@ -215,7 +212,7 @@ Subroutine psb_dcgs_vect(a,prec,b,x,eps,desc_a,info,& if (itx >= itmax_) exit restart it = 0 call psb_geaxpby(done,b,dzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info) if (info == psb_success_) call psb_geaxpby(done,r,dzero,rt,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -260,10 +257,9 @@ Subroutine psb_dcgs_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geaxpby(done,uv,beta,p,desc_a,info) end if - if (info == psb_success_) call prec%apply(p,f,desc_a,info,work=aux) + if (info == psb_success_) call prec%apply(p,f,desc_a,info) - if (info == psb_success_) call psb_spmm(done,a,f,dzero,v,desc_a,info,& - & work=aux) + if (info == psb_success_) call psb_spmm(done,a,f,dzero,v,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='First loop part ') @@ -285,12 +281,11 @@ Subroutine psb_dcgs_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geaxpby(done,uv,dzero,s,desc_a,info) if (info == psb_success_) call psb_geaxpby(done,q,done,s,desc_a,info) - if (info == psb_success_) call prec%apply(s,z,desc_a,info,work=aux) + if (info == psb_success_) call prec%apply(s,z,desc_a,info) if (info == psb_success_) call psb_geaxpby(alpha,z,done,x,desc_a,info) - if (info == psb_success_) call psb_spmm(done,a,z,dzero,qt,desc_a,info,& - & work=aux) + if (info == psb_success_) call psb_spmm(done,a,z,dzero,qt,desc_a,info) if (info == psb_success_) call psb_geaxpby(-alpha,qt,done,r,desc_a,info) @@ -312,7 +307,6 @@ Subroutine psb_dcgs_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_dcgstab.f90 b/linsolve/impl/psb_dcgstab.f90 index 749015d75..746ff0085 100644 --- a/linsolve/impl/psb_dcgstab.f90 +++ b/linsolve/impl/psb_dcgstab.f90 @@ -110,11 +110,10 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err ! = Local data - real(psb_dpk_), allocatable, target :: aux(:),wwrk(:,:) + real(psb_dpk_), allocatable, target :: wwrk(:,:) type(psb_d_vect_type) :: q, r, p, v, s, t, z, f - integer(psb_ipk_) :: itmax_, naux, it,itrace_,& - & n_row, n_col + integer(psb_ipk_) :: itmax_, it, itrace_, n_row, n_col integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit Logical, Parameter :: exchange=.True., noexchange=.False., debug1 = .False. @@ -179,8 +178,7 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_errpush(info,name,a_err='psb_chkvect on B') goto 9999 end if - naux=6*n_col - if (info == psb_success_) allocate(aux(naux),stat=info) + if (info /= psb_success_) then info=psb_err_alloc_dealloc_ call psb_errpush(info,name) @@ -230,7 +228,7 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist it = 0 call psb_geaxpby(done,b,dzero,r,desc_a,info) - call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) + call psb_spmm(-done,a,x,done,r,desc_a,info) call psb_geaxpby(done,r,dzero,q,desc_a,info) ! Perhaps we already satisfy the convergence criterion... @@ -279,10 +277,9 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_geaxpby(done,r,beta,p,desc_a,info) End If - call prec%apply(p,f,desc_a,info,work=aux) + call prec%apply(p,f,desc_a,info) - call psb_spmm(done,a,f,dzero,v,desc_a,info,& - & work=aux) + call psb_spmm(done,a,f,dzero,v,desc_a,info) sigma = psb_gedot(q,v,desc_a,info) @@ -316,8 +313,8 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist end if - call prec%apply(s,z,desc_a,info,work=aux) - Call psb_spmm(done,a,z,dzero,t,desc_a,info,work=aux) + call prec%apply(s,z,desc_a,info) + Call psb_spmm(done,a,z,dzero,t,desc_a,info) if(psb_errstatus_fatal()) then call psb_errpush(psb_err_from_subroutine_,name,a_err='precaply/spmm') @@ -367,7 +364,6 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr - deallocate(aux,stat=info) call x%sync() call psb_gefree(q,desc_a,info) diff --git a/linsolve/impl/psb_dcgstabl.f90 b/linsolve/impl/psb_dcgstabl.f90 index a2ae6164b..ea1467739 100644 --- a/linsolve/impl/psb_dcgstabl.f90 +++ b/linsolve/impl/psb_dcgstabl.f90 @@ -121,13 +121,13 @@ Subroutine psb_dcgstabl_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err ! = local data - real(psb_dpk_), allocatable, target :: aux(:), gamma(:),& + real(psb_dpk_), allocatable, target :: gamma(:),& & gamma1(:), gamma2(:), taum(:,:), sigma(:) type(psb_d_vect_type), allocatable, target :: wwrk(:),uh(:), rh(:) type(psb_d_vect_type), Pointer :: ww, q, r, rt0, p, v, & & s, t, z, f - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col, nl, err_act integer(psb_lpk_) :: mglob Logical, Parameter :: exchange=.True., noexchange=.False. @@ -213,10 +213,6 @@ Subroutine psb_dcgstabl_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux),gamma(0:nl),gamma1(nl),& - &gamma2(nl),taum(nl,nl),sigma(nl), stat=info) - if (info /= psb_success_) then info=psb_err_alloc_dealloc_ call psb_errpush(info,name) @@ -263,7 +259,7 @@ Subroutine psb_dcgstabl_vect(a,prec,b,x,eps,desc_a,info,& it = 0 call psb_geaxpby(done,b,dzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info) if (info == psb_success_) call prec%apply(r,desc_a,info) @@ -318,7 +314,7 @@ Subroutine psb_dcgstabl_vect(a,prec,b,x,eps,desc_a,info,& ! = call psb_geaxpby(done,rh(:,0:j),-beta,uh(:,0:j),desc_a,info) call psb_geaxpby(done,rh(k),-beta,uh(k),desc_a,info) end do - call psb_spmm(done,a,uh(j),dzero,uh(j+1),desc_a,info,work=aux) + call psb_spmm(done,a,uh(j),dzero,uh(j+1),desc_a,info) call prec%apply(uh(j+1),desc_a,info) @@ -340,7 +336,7 @@ Subroutine psb_dcgstabl_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(-alpha,uh(k+1),done,rh(k),desc_a,info) end do call psb_geaxpby(alpha,uh(0),done,x,desc_a,info) - call psb_spmm(done,a,rh(j),dzero,rh(j+1),desc_a,info,work=aux) + call psb_spmm(done,a,rh(j),dzero,rh(j+1),desc_a,info) call prec%apply(rh(j+1),desc_a,info) @@ -403,7 +399,6 @@ Subroutine psb_dcgstabl_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(uh,desc_a,info) if (info == psb_success_) call psb_gefree(rh,desc_a,info) if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_dfcg.F90 b/linsolve/impl/psb_dfcg.F90 index cb741795a..5cdb6a9d1 100644 --- a/linsolve/impl/psb_dfcg.F90 +++ b/linsolve/impl/psb_dfcg.F90 @@ -125,12 +125,11 @@ subroutine psb_dfcg_vect(a,prec,b,x,eps,desc_a,info,& real(psb_dpk_) :: alpha, beta, delta, gamma, theta real(psb_dpk_) :: derr integer(psb_ipk_) :: i, idx, nc2l, it, itx, istop_, itmax_, itrace_ - integer(psb_ipk_) :: n_col, naux, err_act + integer(psb_ipk_) :: n_col, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me - real(psb_dpk_), allocatable, target :: aux(:) real(psb_dpk_) :: vres(3) character(len=20) :: name type(psb_itconv_type) :: stopdat @@ -177,9 +176,6 @@ subroutine psb_dfcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) - if (present(itmax)) then itmax_ = itmax @@ -234,7 +230,7 @@ subroutine psb_dfcg_vect(a,prec,b,x,eps,desc_a,info,& ! Apply the preconditioner v=Pr ! Compute w = Av - call prec%apply(r,v,desc_a,info,work=aux) + call prec%apply(r,v,desc_a,info) if (info == psb_success_) call psb_spmm(done,a,v,dzero,w,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,& @@ -289,7 +285,7 @@ subroutine psb_dfcg_vect(a,prec,b,x,eps,desc_a,info,& ! Apply the preconditioner v = Pr ! Compute w = Av - call prec%apply(r,v,desc_a,info,work=aux) + call prec%apply(r,v,desc_a,info) if (info == psb_success_) call psb_spmm(done,a,v,dzero,w,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,& diff --git a/linsolve/impl/psb_dgcr.f90 b/linsolve/impl/psb_dgcr.f90 index cf2e2b0eb..9bcd456e9 100644 --- a/linsolve/impl/psb_dgcr.f90 +++ b/linsolve/impl/psb_dgcr.f90 @@ -130,14 +130,13 @@ subroutine psb_dgcr_vect(a,prec,b,x,eps,desc_a,info,& type(psb_d_vect_type) :: r real(psb_dpk_) :: r_norm, b_norm, a_norm, derr - integer(psb_ipk_) :: n_col, naux, err_act + integer(psb_ipk_) :: n_col, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me integer(psb_ipk_) :: i, j, it, itx, istop_, itmax_, itrace_, nl, m, nrst real(psb_dpk_) :: hjj - real(psb_dpk_), allocatable, target :: aux(:) character(len=20) :: name type(psb_itconv_type) :: stopdat character(len=*), parameter :: methdname='GCR' @@ -223,10 +222,6 @@ subroutine psb_dgcr_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 endif - naux=4*n_col - allocate(aux(naux),h(nl+1,nl+1),& - &c_scale(nl+1),c(nl+1),z(nl+1), alpha(nl+1), stat=info) - h = dzero if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -261,7 +256,7 @@ subroutine psb_dgcr_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(done, b, dzero, r, desc_a, info) - call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) + call psb_spmm(-done,a,x,done,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -278,9 +273,9 @@ subroutine psb_dgcr_vect(a,prec,b,x,eps,desc_a,info,& it = it + 1 j = it !Apply preconditioner - call prec%apply(r,z(j),desc_a,info,work=aux) + call prec%apply(r,z(j),desc_a,info) - call psb_spmm(done,a,z(j),dzero,c(1),desc_a,info,work=aux) + call psb_spmm(done,a,z(j),dzero,c(1),desc_a,info) do i =1, j - 1 h(i,j) = psb_gedot(c_scale(i), c(i), desc_a, info) @@ -347,7 +342,7 @@ subroutine psb_dgcr_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(c(i),desc_a,info) end do - if (info == psb_success_) deallocate(aux,h,c_scale,z,c,alpha,stat=info) + if (info == psb_success_) deallocate(h,c_scale,z,c,alpha,stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_drgmres.f90 b/linsolve/impl/psb_drgmres.f90 index e0d783822..5ca9aeb94 100644 --- a/linsolve/impl/psb_drgmres.f90 +++ b/linsolve/impl/psb_drgmres.f90 @@ -124,13 +124,12 @@ subroutine psb_drgmres_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err ! = local data - real(psb_dpk_), allocatable :: aux(:) real(psb_dpk_), allocatable :: c(:), s(:), h(:,:), rs(:), rst(:) type(psb_d_vect_type), allocatable :: v(:) type(psb_d_vect_type) :: w, w1, xt real(psb_dpk_) :: tmp real(psb_dpk_) :: scal, gm, rti, rti1 - integer(psb_ipk_) ::litmax, naux, it, k, itrace_,& + integer(psb_ipk_) ::litmax, it, k, itrace_,& & n_row, n_col, nl integer(psb_lpk_) :: mglob Logical, Parameter :: exchange=.True., noexchange=.False., use_srot=.true. @@ -229,11 +228,6 @@ subroutine psb_drgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - - naux=4*n_col - allocate(aux(naux),h(nl+1,nl+1),& - &c(nl+1),s(nl+1),rs(nl+1), rst(nl+1),stat=info) - if (info == psb_success_) call psb_geall(v,desc_a,info,n=nl+1) if (info == psb_success_) call psb_geall(w,desc_a,info) if (info == psb_success_) call psb_geall(w1,desc_a,info) @@ -266,7 +260,7 @@ subroutine psb_drgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - call psb_spmm(-done,a,x,done,v(1),desc_a,info,work=aux) + call psb_spmm(-done,a,x,done,v(1),desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -301,7 +295,7 @@ subroutine psb_drgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - call psb_spmm(-done,a,x,done,v(1),desc_a,info,work=aux) + call psb_spmm(-done,a,x,done,v(1),desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -358,7 +352,7 @@ subroutine psb_drgmres_vect(a,prec,b,x,eps,desc_a,info,& itx = itx + 1 call prec%apply(v(i),w1,desc_a,info) - call psb_spmm(done,a,w1,dzero,w,desc_a,info,work=aux) + call psb_spmm(done,a,w1,dzero,w,desc_a,info) ! do k = 1, i @@ -397,7 +391,7 @@ subroutine psb_drgmres_vect(a,prec,b,x,eps,desc_a,info,& call prec%apply(xt,desc_a,info) call psb_geaxpby(done,x,done,xt,desc_a,info) call psb_geaxpby(done,b,dzero,w1,desc_a,info) - call psb_spmm(-done,a,xt,done,w1,desc_a,info,work=aux) + call psb_spmm(-done,a,xt,done,w1,desc_a,info) rni = psb_geamax(w1,desc_a,info) xni = psb_geamax(xt,desc_a,info) errnum = rni @@ -490,7 +484,7 @@ subroutine psb_drgmres_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(w,desc_a,info) if (info == psb_success_) call psb_gefree(w1,desc_a,info) if (info == psb_success_) call psb_gefree(xt,desc_a,info) - if (info == psb_success_) deallocate(aux,h,c,s,rs,rst, stat=info) + if (info == psb_success_) deallocate(h,c,s,rs,rst, stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_drichardson.f90 b/linsolve/impl/psb_drichardson.f90 index b0a53a4b2..df08f8a8c 100644 --- a/linsolve/impl/psb_drichardson.f90 +++ b/linsolve/impl/psb_drichardson.f90 @@ -91,12 +91,11 @@ Subroutine psb_drichardson_vect(a,prec,b,x,eps,desc_a,info,& logical :: do_alloc_wrk type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: me,np,err_act - real(psb_dpk_), allocatable, target :: aux(:) type(psb_d_vect_type), allocatable, target :: wwrk(:) type(psb_d_vect_type), pointer :: q, p, r, z, w real(psb_dpk_) :: derr - integer(psb_ipk_) :: itmax_, istop_, naux, it, itx, itrace_,& - & n_col, n_row,ieg,nspl, istebz + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& + & n_col, n_row,ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_itconv_type) :: stopdat @@ -155,8 +154,6 @@ Subroutine psb_drichardson_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then @@ -171,7 +168,7 @@ Subroutine psb_drichardson_vect(a,prec,b,x,eps,desc_a,info,& w => wwrk(5) call psb_geaxpby(done,b,dzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -186,17 +183,16 @@ Subroutine psb_drichardson_vect(a,prec,b,x,eps,desc_a,info,& End If loop: do itx=1,itmax_ - call prec%apply(r,z,desc_a,info,work=aux) + call prec%apply(r,z,desc_a,info) call psb_geaxpby(done,z,done,x,desc_a,info) call psb_geaxpby(done,b,dzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info) if (psb_check_conv(methdname,itx,x,r,desc_a,stopdat,info)) exit loop end do loop call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if ((info==psb_success_).and.do_alloc_wrk) call prec%free_wrk(info) if(info /= psb_success_) then diff --git a/linsolve/impl/psb_sbicg.f90 b/linsolve/impl/psb_sbicg.f90 index 1b5f1fb89..d981e42d5 100644 --- a/linsolve/impl/psb_sbicg.f90 +++ b/linsolve/impl/psb_sbicg.f90 @@ -112,11 +112,10 @@ subroutine psb_sbicg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), optional, intent(out) :: iter real(psb_spk_), optional, intent(out) :: err ! !$ local data - real(psb_spk_), allocatable, target :: aux(:) type(psb_s_vect_type), allocatable, target :: wwrk(:) type(psb_s_vect_type), pointer :: ww, q, r, p,& & zt, pt, z, rt, qt - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col, istop_, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -187,10 +186,6 @@ subroutine psb_sbicg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - - naux=4*n_col - - allocate(aux(naux),stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v) if(info /= psb_success_) then @@ -239,7 +234,7 @@ subroutine psb_sbicg_vect(a,prec,b,x,eps,desc_a,info,& if (itx >= itmax_) exit restart it = 0 call psb_geaxpby(sone,b,szero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info) if (debug_level >= psb_debug_ext_)& & write(debug_unit,*) me,' ',trim(name),' Done spmm',info if (info == psb_success_) call psb_geaxpby(sone,r,szero,rt,desc_a,info) @@ -265,8 +260,8 @@ subroutine psb_sbicg_vect(a,prec,b,x,eps,desc_a,info,& if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),'iteration: ',itx - call prec%apply(r,z,desc_a,info,work=aux) - if (info == psb_success_) call prec%apply(rt,zt,desc_a,info,trans='c',work=aux) + call prec%apply(r,z,desc_a,info) + if (info == psb_success_) call prec%apply(rt,zt,desc_a,info,trans='c') rho_old = rho rho = psb_gedot(rt,z,desc_a,info) @@ -286,10 +281,8 @@ subroutine psb_sbicg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(sone,zt,beta,pt,desc_a,info) end if - call psb_spmm(sone,a,p,szero,q,desc_a,info,& - & work=aux) - call psb_spmm(sone,a,pt,szero,qt,desc_a,info,& - & work=aux,trans='c') + call psb_spmm(sone,a,p,szero,q,desc_a,info) + call psb_spmm(sone,a,pt,szero,qt,desc_a,info,trans='c') sigma = psb_gedot(pt,q,desc_a,info) if (sigma == szero) then @@ -319,7 +312,6 @@ subroutine psb_sbicg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_scg.F90 b/linsolve/impl/psb_scg.F90 index c116edc4e..187fe7f41 100644 --- a/linsolve/impl/psb_scg.F90 +++ b/linsolve/impl/psb_scg.F90 @@ -113,12 +113,12 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err,cond ! = Local data - real(psb_spk_), allocatable, target :: aux(:),td(:),tu(:),eig(:),ewrk(:) + real(psb_spk_), allocatable, target :: td(:),tu(:),eig(:),ewrk(:) integer(psb_mpk_), allocatable :: ibl(:), ispl(:), iwrk(:) type(psb_s_vect_type), allocatable, target :: wwrk(:) type(psb_s_vect_type), pointer :: q, p, r, z, w real(psb_spk_) :: alpha, beta, rho, rho_old, sigma,alpha_old,beta_old - integer(psb_ipk_) :: itmax_, istop_, naux, it, itx, itrace_,& + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,err_act, ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -171,8 +171,6 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then @@ -223,7 +221,7 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& it = 0 call psb_geaxpby(sone,b,szero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -243,7 +241,7 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& it = it + 1 itx = itx + 1 - call prec%apply(r,z,desc_a,info,work=aux) + call prec%apply(r,z,desc_a,info) rho_old = rho rho = psb_gedot(r,z,desc_a,info) @@ -260,7 +258,7 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(sone,z,beta,p,desc_a,info) end if - call psb_spmm(sone,a,p,szero,q,desc_a,info,work=aux) + call psb_spmm(sone,a,p,szero,q,desc_a,info) sigma = psb_gedot(p,q,desc_a,info) if (sigma == szero) then if (debug_level >= psb_debug_ext_)& @@ -318,7 +316,6 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_scgs.f90 b/linsolve/impl/psb_scgs.f90 index 4034283e6..e57abda1b 100644 --- a/linsolve/impl/psb_scgs.f90 +++ b/linsolve/impl/psb_scgs.f90 @@ -110,11 +110,10 @@ Subroutine psb_scgs_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err ! = local data - real(psb_spk_), allocatable, target :: aux(:) type(psb_s_vect_type), allocatable, target :: wwrk(:) type(psb_s_vect_type), pointer :: ww, q, r, p, v,& & s, z, f, rt, qt, uv - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col,istop_, itx, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt @@ -165,8 +164,6 @@ Subroutine psb_scgs_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - Allocate(aux(naux),stat=info) if (info == psb_success_) Call psb_geall(wwrk,desc_a,info,n=11_psb_ipk_) if (info == psb_success_) Call psb_geasb(wwrk,desc_a,info,mold=x%v) if (info /= psb_success_) Then @@ -215,7 +212,7 @@ Subroutine psb_scgs_vect(a,prec,b,x,eps,desc_a,info,& if (itx >= itmax_) exit restart it = 0 call psb_geaxpby(sone,b,szero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info) if (info == psb_success_) call psb_geaxpby(sone,r,szero,rt,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -260,10 +257,9 @@ Subroutine psb_scgs_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geaxpby(sone,uv,beta,p,desc_a,info) end if - if (info == psb_success_) call prec%apply(p,f,desc_a,info,work=aux) + if (info == psb_success_) call prec%apply(p,f,desc_a,info) - if (info == psb_success_) call psb_spmm(sone,a,f,szero,v,desc_a,info,& - & work=aux) + if (info == psb_success_) call psb_spmm(sone,a,f,szero,v,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='First loop part ') @@ -285,12 +281,11 @@ Subroutine psb_scgs_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geaxpby(sone,uv,szero,s,desc_a,info) if (info == psb_success_) call psb_geaxpby(sone,q,sone,s,desc_a,info) - if (info == psb_success_) call prec%apply(s,z,desc_a,info,work=aux) + if (info == psb_success_) call prec%apply(s,z,desc_a,info) if (info == psb_success_) call psb_geaxpby(alpha,z,sone,x,desc_a,info) - if (info == psb_success_) call psb_spmm(sone,a,z,szero,qt,desc_a,info,& - & work=aux) + if (info == psb_success_) call psb_spmm(sone,a,z,szero,qt,desc_a,info) if (info == psb_success_) call psb_geaxpby(-alpha,qt,sone,r,desc_a,info) @@ -312,7 +307,6 @@ Subroutine psb_scgs_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_scgstab.f90 b/linsolve/impl/psb_scgstab.f90 index a0b57fa8d..d822cf8ad 100644 --- a/linsolve/impl/psb_scgstab.f90 +++ b/linsolve/impl/psb_scgstab.f90 @@ -110,10 +110,10 @@ Subroutine psb_scgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err ! = Local data - real(psb_spk_), allocatable, target :: aux(:),wwrk(:,:) + real(psb_spk_), allocatable, target :: wwrk(:,:) type(psb_s_vect_type) :: q, r, p, v, s, t, z, f - integer(psb_ipk_) :: itmax_, naux, it,itrace_,& + integer(psb_ipk_) :: itmax_, it,itrace_,& & n_row, n_col integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -179,14 +179,6 @@ Subroutine psb_scgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_errpush(info,name,a_err='psb_chkvect on B') goto 9999 end if - naux=6*n_col - if (info == psb_success_) allocate(aux(naux),stat=info) - if (info /= psb_success_) then - info=psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - End If - call psb_geasb(q,desc_a,info,mold=x%v,scratch=.true.) call psb_geasb(r,desc_a,info,mold=x%v,scratch=.true.) @@ -230,7 +222,7 @@ Subroutine psb_scgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist it = 0 call psb_geaxpby(sone,b,szero,r,desc_a,info) - call psb_spmm(-sone,a,x,sone,r,desc_a,info,work=aux) + call psb_spmm(-sone,a,x,sone,r,desc_a,info) call psb_geaxpby(sone,r,szero,q,desc_a,info) ! Perhaps we already satisfy the convergence criterion... @@ -279,10 +271,9 @@ Subroutine psb_scgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_geaxpby(sone,r,beta,p,desc_a,info) End If - call prec%apply(p,f,desc_a,info,work=aux) + call prec%apply(p,f,desc_a,info) - call psb_spmm(sone,a,f,szero,v,desc_a,info,& - & work=aux) + call psb_spmm(sone,a,f,szero,v,desc_a,info) sigma = psb_gedot(q,v,desc_a,info) @@ -316,8 +307,8 @@ Subroutine psb_scgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist end if - call prec%apply(s,z,desc_a,info,work=aux) - Call psb_spmm(sone,a,z,szero,t,desc_a,info,work=aux) + call prec%apply(s,z,desc_a,info) + Call psb_spmm(sone,a,z,szero,t,desc_a,info) if(psb_errstatus_fatal()) then call psb_errpush(psb_err_from_subroutine_,name,a_err='precaply/spmm') @@ -367,8 +358,6 @@ Subroutine psb_scgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr - deallocate(aux,stat=info) - call x%sync() call psb_gefree(q,desc_a,info) call psb_gefree(r,desc_a,info) diff --git a/linsolve/impl/psb_scgstabl.f90 b/linsolve/impl/psb_scgstabl.f90 index e55d27467..e5ca2103d 100644 --- a/linsolve/impl/psb_scgstabl.f90 +++ b/linsolve/impl/psb_scgstabl.f90 @@ -121,13 +121,13 @@ Subroutine psb_scgstabl_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err ! = local data - real(psb_spk_), allocatable, target :: aux(:), gamma(:),& + real(psb_spk_), allocatable, target :: gamma(:),& & gamma1(:), gamma2(:), taum(:,:), sigma(:) type(psb_s_vect_type), allocatable, target :: wwrk(:),uh(:), rh(:) type(psb_s_vect_type), Pointer :: ww, q, r, rt0, p, v, & & s, t, z, f - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col, nl, err_act integer(psb_lpk_) :: mglob Logical, Parameter :: exchange=.True., noexchange=.False. @@ -213,10 +213,6 @@ Subroutine psb_scgstabl_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux),gamma(0:nl),gamma1(nl),& - &gamma2(nl),taum(nl,nl),sigma(nl), stat=info) - if (info /= psb_success_) then info=psb_err_alloc_dealloc_ call psb_errpush(info,name) @@ -263,7 +259,7 @@ Subroutine psb_scgstabl_vect(a,prec,b,x,eps,desc_a,info,& it = 0 call psb_geaxpby(sone,b,szero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info) if (info == psb_success_) call prec%apply(r,desc_a,info) @@ -318,7 +314,7 @@ Subroutine psb_scgstabl_vect(a,prec,b,x,eps,desc_a,info,& ! = call psb_geaxpby(sone,rh(:,0:j),-beta,uh(:,0:j),desc_a,info) call psb_geaxpby(sone,rh(k),-beta,uh(k),desc_a,info) end do - call psb_spmm(sone,a,uh(j),szero,uh(j+1),desc_a,info,work=aux) + call psb_spmm(sone,a,uh(j),szero,uh(j+1),desc_a,info) call prec%apply(uh(j+1),desc_a,info) @@ -340,7 +336,7 @@ Subroutine psb_scgstabl_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(-alpha,uh(k+1),sone,rh(k),desc_a,info) end do call psb_geaxpby(alpha,uh(0),sone,x,desc_a,info) - call psb_spmm(sone,a,rh(j),szero,rh(j+1),desc_a,info,work=aux) + call psb_spmm(sone,a,rh(j),szero,rh(j+1),desc_a,info) call prec%apply(rh(j+1),desc_a,info) @@ -403,7 +399,6 @@ Subroutine psb_scgstabl_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(uh,desc_a,info) if (info == psb_success_) call psb_gefree(rh,desc_a,info) if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_sfcg.F90 b/linsolve/impl/psb_sfcg.F90 index 449942cd6..ca5fee9cd 100644 --- a/linsolve/impl/psb_sfcg.F90 +++ b/linsolve/impl/psb_sfcg.F90 @@ -125,12 +125,11 @@ subroutine psb_sfcg_vect(a,prec,b,x,eps,desc_a,info,& real(psb_spk_) :: alpha, beta, delta, gamma, theta real(psb_dpk_) :: derr integer(psb_ipk_) :: i, idx, nc2l, it, itx, istop_, itmax_, itrace_ - integer(psb_ipk_) :: n_col, naux, err_act + integer(psb_ipk_) :: n_col, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me - real(psb_spk_), allocatable, target :: aux(:) real(psb_spk_) :: vres(3) character(len=20) :: name type(psb_itconv_type) :: stopdat @@ -177,9 +176,6 @@ subroutine psb_sfcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) - if (present(itmax)) then itmax_ = itmax @@ -234,7 +230,7 @@ subroutine psb_sfcg_vect(a,prec,b,x,eps,desc_a,info,& ! Apply the preconditioner v=Pr ! Compute w = Av - call prec%apply(r,v,desc_a,info,work=aux) + call prec%apply(r,v,desc_a,info) if (info == psb_success_) call psb_spmm(sone,a,v,szero,w,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,& @@ -289,7 +285,7 @@ subroutine psb_sfcg_vect(a,prec,b,x,eps,desc_a,info,& ! Apply the preconditioner v = Pr ! Compute w = Av - call prec%apply(r,v,desc_a,info,work=aux) + call prec%apply(r,v,desc_a,info) if (info == psb_success_) call psb_spmm(sone,a,v,szero,w,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,& diff --git a/linsolve/impl/psb_sgcr.f90 b/linsolve/impl/psb_sgcr.f90 index b2d09d3e7..d0668d7d2 100644 --- a/linsolve/impl/psb_sgcr.f90 +++ b/linsolve/impl/psb_sgcr.f90 @@ -130,14 +130,13 @@ subroutine psb_sgcr_vect(a,prec,b,x,eps,desc_a,info,& type(psb_s_vect_type) :: r real(psb_dpk_) :: r_norm, b_norm, a_norm, derr - integer(psb_ipk_) :: n_col, naux, err_act + integer(psb_ipk_) :: n_col, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me integer(psb_ipk_) :: i, j, it, itx, istop_, itmax_, itrace_, nl, m, nrst real(psb_spk_) :: hjj - real(psb_spk_), allocatable, target :: aux(:) character(len=20) :: name type(psb_itconv_type) :: stopdat character(len=*), parameter :: methdname='GCR' @@ -223,17 +222,9 @@ subroutine psb_sgcr_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 endif - naux=4*n_col - allocate(aux(naux),h(nl+1,nl+1),& - &c_scale(nl+1),c(nl+1),z(nl+1), alpha(nl+1), stat=info) h = szero - if (info /= psb_success_) then - info=psb_err_from_subroutine_non_ - call psb_errpush(info,name) - goto 9999 - end if - + call psb_geasb(r, desc_a,info, scratch=.true.,mold=x%v) do i =1,nl+1 @@ -261,7 +252,7 @@ subroutine psb_sgcr_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(sone, b, szero, r, desc_a, info) - call psb_spmm(-sone,a,x,sone,r,desc_a,info,work=aux) + call psb_spmm(-sone,a,x,sone,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -278,9 +269,9 @@ subroutine psb_sgcr_vect(a,prec,b,x,eps,desc_a,info,& it = it + 1 j = it !Apply preconditioner - call prec%apply(r,z(j),desc_a,info,work=aux) + call prec%apply(r,z(j),desc_a,info) - call psb_spmm(sone,a,z(j),szero,c(1),desc_a,info,work=aux) + call psb_spmm(sone,a,z(j),szero,c(1),desc_a,info) do i =1, j - 1 h(i,j) = psb_gedot(c_scale(i), c(i), desc_a, info) @@ -347,7 +338,7 @@ subroutine psb_sgcr_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(c(i),desc_a,info) end do - if (info == psb_success_) deallocate(aux,h,c_scale,z,c,alpha,stat=info) + if (info == psb_success_) deallocate(h,c_scale,z,c,alpha,stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_srgmres.f90 b/linsolve/impl/psb_srgmres.f90 index 32129e35e..4a57da7bf 100644 --- a/linsolve/impl/psb_srgmres.f90 +++ b/linsolve/impl/psb_srgmres.f90 @@ -124,13 +124,12 @@ subroutine psb_srgmres_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err ! = local data - real(psb_spk_), allocatable :: aux(:) real(psb_spk_), allocatable :: c(:), s(:), h(:,:), rs(:), rst(:) type(psb_s_vect_type), allocatable :: v(:) type(psb_s_vect_type) :: w, w1, xt real(psb_spk_) :: tmp real(psb_spk_) :: scal, gm, rti, rti1 - integer(psb_ipk_) ::litmax, naux, it, k, itrace_,& + integer(psb_ipk_) ::litmax, it, k, itrace_,& & n_row, n_col, nl integer(psb_lpk_) :: mglob Logical, Parameter :: exchange=.True., noexchange=.False., use_srot=.true. @@ -229,11 +228,6 @@ subroutine psb_srgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - - naux=4*n_col - allocate(aux(naux),h(nl+1,nl+1),& - &c(nl+1),s(nl+1),rs(nl+1), rst(nl+1),stat=info) - if (info == psb_success_) call psb_geall(v,desc_a,info,n=nl+1) if (info == psb_success_) call psb_geall(w,desc_a,info) if (info == psb_success_) call psb_geall(w1,desc_a,info) @@ -266,7 +260,7 @@ subroutine psb_srgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - call psb_spmm(-sone,a,x,sone,v(1),desc_a,info,work=aux) + call psb_spmm(-sone,a,x,sone,v(1),desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -301,7 +295,7 @@ subroutine psb_srgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - call psb_spmm(-sone,a,x,sone,v(1),desc_a,info,work=aux) + call psb_spmm(-sone,a,x,sone,v(1),desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -358,7 +352,7 @@ subroutine psb_srgmres_vect(a,prec,b,x,eps,desc_a,info,& itx = itx + 1 call prec%apply(v(i),w1,desc_a,info) - call psb_spmm(sone,a,w1,szero,w,desc_a,info,work=aux) + call psb_spmm(sone,a,w1,szero,w,desc_a,info) ! do k = 1, i @@ -397,7 +391,7 @@ subroutine psb_srgmres_vect(a,prec,b,x,eps,desc_a,info,& call prec%apply(xt,desc_a,info) call psb_geaxpby(sone,x,sone,xt,desc_a,info) call psb_geaxpby(sone,b,szero,w1,desc_a,info) - call psb_spmm(-sone,a,xt,sone,w1,desc_a,info,work=aux) + call psb_spmm(-sone,a,xt,sone,w1,desc_a,info) rni = psb_geamax(w1,desc_a,info) xni = psb_geamax(xt,desc_a,info) errnum = rni @@ -490,7 +484,7 @@ subroutine psb_srgmres_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(w,desc_a,info) if (info == psb_success_) call psb_gefree(w1,desc_a,info) if (info == psb_success_) call psb_gefree(xt,desc_a,info) - if (info == psb_success_) deallocate(aux,h,c,s,rs,rst, stat=info) + if (info == psb_success_) deallocate(h,c,s,rs,rst, stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_srichardson.f90 b/linsolve/impl/psb_srichardson.f90 index 660778fcc..3801c8ad3 100644 --- a/linsolve/impl/psb_srichardson.f90 +++ b/linsolve/impl/psb_srichardson.f90 @@ -91,11 +91,10 @@ Subroutine psb_srichardson_vect(a,prec,b,x,eps,desc_a,info,& logical :: do_alloc_wrk type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: me,np,err_act - real(psb_spk_), allocatable, target :: aux(:) type(psb_s_vect_type), allocatable, target :: wwrk(:) type(psb_s_vect_type), pointer :: q, p, r, z, w real(psb_dpk_) :: derr - integer(psb_ipk_) :: itmax_, istop_, naux, it, itx, itrace_,& + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -155,8 +154,6 @@ Subroutine psb_srichardson_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then @@ -171,7 +168,7 @@ Subroutine psb_srichardson_vect(a,prec,b,x,eps,desc_a,info,& w => wwrk(5) call psb_geaxpby(sone,b,szero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -186,17 +183,16 @@ Subroutine psb_srichardson_vect(a,prec,b,x,eps,desc_a,info,& End If loop: do itx=1,itmax_ - call prec%apply(r,z,desc_a,info,work=aux) + call prec%apply(r,z,desc_a,info) call psb_geaxpby(sone,z,sone,x,desc_a,info) call psb_geaxpby(sone,b,szero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-sone,a,x,sone,r,desc_a,info) if (psb_check_conv(methdname,itx,x,r,desc_a,stopdat,info)) exit loop end do loop call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if ((info==psb_success_).and.do_alloc_wrk) call prec%free_wrk(info) if(info /= psb_success_) then diff --git a/linsolve/impl/psb_zbicg.f90 b/linsolve/impl/psb_zbicg.f90 index 6a3e02154..be2bb9694 100644 --- a/linsolve/impl/psb_zbicg.f90 +++ b/linsolve/impl/psb_zbicg.f90 @@ -112,11 +112,10 @@ subroutine psb_zbicg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), optional, intent(out) :: iter real(psb_dpk_), optional, intent(out) :: err ! !$ local data - complex(psb_dpk_), allocatable, target :: aux(:) type(psb_z_vect_type), allocatable, target :: wwrk(:) type(psb_z_vect_type), pointer :: ww, q, r, p,& & zt, pt, z, rt, qt - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col, istop_, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -188,9 +187,6 @@ subroutine psb_zbicg_vect(a,prec,b,x,eps,desc_a,info,& end if - naux=4*n_col - - allocate(aux(naux),stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v) if(info /= psb_success_) then @@ -239,7 +235,7 @@ subroutine psb_zbicg_vect(a,prec,b,x,eps,desc_a,info,& if (itx >= itmax_) exit restart it = 0 call psb_geaxpby(zone,b,zzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info) if (debug_level >= psb_debug_ext_)& & write(debug_unit,*) me,' ',trim(name),' Done spmm',info if (info == psb_success_) call psb_geaxpby(zone,r,zzero,rt,desc_a,info) @@ -265,8 +261,8 @@ subroutine psb_zbicg_vect(a,prec,b,x,eps,desc_a,info,& if (debug_level >= psb_debug_ext_) & & write(debug_unit,*) me,' ',trim(name),'iteration: ',itx - call prec%apply(r,z,desc_a,info,work=aux) - if (info == psb_success_) call prec%apply(rt,zt,desc_a,info,trans='c',work=aux) + call prec%apply(r,z,desc_a,info) + if (info == psb_success_) call prec%apply(rt,zt,desc_a,info,trans='c') rho_old = rho rho = psb_gedot(rt,z,desc_a,info) @@ -286,10 +282,8 @@ subroutine psb_zbicg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(zone,zt,beta,pt,desc_a,info) end if - call psb_spmm(zone,a,p,zzero,q,desc_a,info,& - & work=aux) - call psb_spmm(zone,a,pt,zzero,qt,desc_a,info,& - & work=aux,trans='c') + call psb_spmm(zone,a,p,zzero,q,desc_a,info) + call psb_spmm(zone,a,pt,zzero,qt,desc_a,info,trans='c') sigma = psb_gedot(pt,q,desc_a,info) if (sigma == zzero) then @@ -319,7 +313,6 @@ subroutine psb_zbicg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_zcg.F90 b/linsolve/impl/psb_zcg.F90 index 6ca5909c1..01ce57f85 100644 --- a/linsolve/impl/psb_zcg.F90 +++ b/linsolve/impl/psb_zcg.F90 @@ -113,12 +113,12 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err,cond ! = Local data - complex(psb_dpk_), allocatable, target :: aux(:),td(:),tu(:),eig(:),ewrk(:) + complex(psb_dpk_), allocatable, target :: td(:),tu(:),eig(:),ewrk(:) integer(psb_mpk_), allocatable :: ibl(:), ispl(:), iwrk(:) type(psb_z_vect_type), allocatable, target :: wwrk(:) type(psb_z_vect_type), pointer :: q, p, r, z, w complex(psb_dpk_) :: alpha, beta, rho, rho_old, sigma,alpha_old,beta_old - integer(psb_ipk_) :: itmax_, istop_, naux, it, itx, itrace_,& + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,err_act, ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -171,8 +171,6 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then @@ -215,7 +213,7 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& it = 0 call psb_geaxpby(zone,b,zzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -235,7 +233,7 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& it = it + 1 itx = itx + 1 - call prec%apply(r,z,desc_a,info,work=aux) + call prec%apply(r,z,desc_a,info) rho_old = rho rho = psb_gedot(r,z,desc_a,info) @@ -252,7 +250,7 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(zone,z,beta,p,desc_a,info) end if - call psb_spmm(zone,a,p,zzero,q,desc_a,info,work=aux) + call psb_spmm(zone,a,p,zzero,q,desc_a,info) sigma = psb_gedot(p,q,desc_a,info) if (sigma == zzero) then if (debug_level >= psb_debug_ext_)& @@ -285,7 +283,6 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_zcgs.f90 b/linsolve/impl/psb_zcgs.f90 index c51405452..7819e7206 100644 --- a/linsolve/impl/psb_zcgs.f90 +++ b/linsolve/impl/psb_zcgs.f90 @@ -110,11 +110,10 @@ Subroutine psb_zcgs_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err ! = local data - complex(psb_dpk_), allocatable, target :: aux(:) type(psb_z_vect_type), allocatable, target :: wwrk(:) type(psb_z_vect_type), pointer :: ww, q, r, p, v,& & s, z, f, rt, qt, uv - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col,istop_, itx, err_act integer(psb_lpk_) :: mglob type(psb_ctxt_type) :: ctxt @@ -165,8 +164,6 @@ Subroutine psb_zcgs_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - Allocate(aux(naux),stat=info) if (info == psb_success_) Call psb_geall(wwrk,desc_a,info,n=11_psb_ipk_) if (info == psb_success_) Call psb_geasb(wwrk,desc_a,info,mold=x%v) if (info /= psb_success_) Then @@ -215,7 +212,7 @@ Subroutine psb_zcgs_vect(a,prec,b,x,eps,desc_a,info,& if (itx >= itmax_) exit restart it = 0 call psb_geaxpby(zone,b,zzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info) if (info == psb_success_) call psb_geaxpby(zone,r,zzero,rt,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -260,10 +257,9 @@ Subroutine psb_zcgs_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geaxpby(zone,uv,beta,p,desc_a,info) end if - if (info == psb_success_) call prec%apply(p,f,desc_a,info,work=aux) + if (info == psb_success_) call prec%apply(p,f,desc_a,info) - if (info == psb_success_) call psb_spmm(zone,a,f,zzero,v,desc_a,info,& - & work=aux) + if (info == psb_success_) call psb_spmm(zone,a,f,zzero,v,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='First loop part ') @@ -285,12 +281,11 @@ Subroutine psb_zcgs_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geaxpby(zone,uv,zzero,s,desc_a,info) if (info == psb_success_) call psb_geaxpby(zone,q,zone,s,desc_a,info) - if (info == psb_success_) call prec%apply(s,z,desc_a,info,work=aux) + if (info == psb_success_) call prec%apply(s,z,desc_a,info) if (info == psb_success_) call psb_geaxpby(alpha,z,zone,x,desc_a,info) - if (info == psb_success_) call psb_spmm(zone,a,z,zzero,qt,desc_a,info,& - & work=aux) + if (info == psb_success_) call psb_spmm(zone,a,z,zzero,qt,desc_a,info) if (info == psb_success_) call psb_geaxpby(-alpha,qt,zone,r,desc_a,info) @@ -312,7 +307,6 @@ Subroutine psb_zcgs_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_zcgstab.f90 b/linsolve/impl/psb_zcgstab.f90 index e04cd7c40..0b4cb0113 100644 --- a/linsolve/impl/psb_zcgstab.f90 +++ b/linsolve/impl/psb_zcgstab.f90 @@ -110,10 +110,10 @@ Subroutine psb_zcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err ! = Local data - complex(psb_dpk_), allocatable, target :: aux(:),wwrk(:,:) + complex(psb_dpk_), allocatable, target :: wwrk(:,:) type(psb_z_vect_type) :: q, r, p, v, s, t, z, f - integer(psb_ipk_) :: itmax_, naux, it,itrace_,& + integer(psb_ipk_) :: itmax_, it,itrace_,& & n_row, n_col integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -179,13 +179,6 @@ Subroutine psb_zcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_errpush(info,name,a_err='psb_chkvect on B') goto 9999 end if - naux=6*n_col - if (info == psb_success_) allocate(aux(naux),stat=info) - if (info /= psb_success_) then - info=psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - End If call psb_geasb(q,desc_a,info,mold=x%v,scratch=.true.) @@ -230,7 +223,7 @@ Subroutine psb_zcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist it = 0 call psb_geaxpby(zone,b,zzero,r,desc_a,info) - call psb_spmm(-zone,a,x,zone,r,desc_a,info,work=aux) + call psb_spmm(-zone,a,x,zone,r,desc_a,info) call psb_geaxpby(zone,r,zzero,q,desc_a,info) ! Perhaps we already satisfy the convergence criterion... @@ -279,10 +272,9 @@ Subroutine psb_zcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_geaxpby(zone,r,beta,p,desc_a,info) End If - call prec%apply(p,f,desc_a,info,work=aux) + call prec%apply(p,f,desc_a,info) - call psb_spmm(zone,a,f,zzero,v,desc_a,info,& - & work=aux) + call psb_spmm(zone,a,f,zzero,v,desc_a,info) sigma = psb_gedot(q,v,desc_a,info) @@ -316,8 +308,8 @@ Subroutine psb_zcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist end if - call prec%apply(s,z,desc_a,info,work=aux) - Call psb_spmm(zone,a,z,zzero,t,desc_a,info,work=aux) + call prec%apply(s,z,desc_a,info) + Call psb_spmm(zone,a,z,zzero,t,desc_a,info) if(psb_errstatus_fatal()) then call psb_errpush(psb_err_from_subroutine_,name,a_err='precaply/spmm') @@ -367,8 +359,6 @@ Subroutine psb_zcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr - deallocate(aux,stat=info) - call x%sync() call psb_gefree(q,desc_a,info) call psb_gefree(r,desc_a,info) diff --git a/linsolve/impl/psb_zcgstabl.f90 b/linsolve/impl/psb_zcgstabl.f90 index 93abd0561..62faafcaf 100644 --- a/linsolve/impl/psb_zcgstabl.f90 +++ b/linsolve/impl/psb_zcgstabl.f90 @@ -121,13 +121,13 @@ Subroutine psb_zcgstabl_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err ! = local data - complex(psb_dpk_), allocatable, target :: aux(:), gamma(:),& + complex(psb_dpk_), allocatable, target :: gamma(:),& & gamma1(:), gamma2(:), taum(:,:), sigma(:) type(psb_z_vect_type), allocatable, target :: wwrk(:),uh(:), rh(:) type(psb_z_vect_type), Pointer :: ww, q, r, rt0, p, v, & & s, t, z, f - integer(psb_ipk_) :: itmax_, naux, it, itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col, nl, err_act integer(psb_lpk_) :: mglob Logical, Parameter :: exchange=.True., noexchange=.False. @@ -213,10 +213,6 @@ Subroutine psb_zcgstabl_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux),gamma(0:nl),gamma1(nl),& - &gamma2(nl),taum(nl,nl),sigma(nl), stat=info) - if (info /= psb_success_) then info=psb_err_alloc_dealloc_ call psb_errpush(info,name) @@ -263,7 +259,7 @@ Subroutine psb_zcgstabl_vect(a,prec,b,x,eps,desc_a,info,& it = 0 call psb_geaxpby(zone,b,zzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info) if (info == psb_success_) call prec%apply(r,desc_a,info) @@ -318,7 +314,7 @@ Subroutine psb_zcgstabl_vect(a,prec,b,x,eps,desc_a,info,& ! = call psb_geaxpby(zone,rh(:,0:j),-beta,uh(:,0:j),desc_a,info) call psb_geaxpby(zone,rh(k),-beta,uh(k),desc_a,info) end do - call psb_spmm(zone,a,uh(j),zzero,uh(j+1),desc_a,info,work=aux) + call psb_spmm(zone,a,uh(j),zzero,uh(j+1),desc_a,info) call prec%apply(uh(j+1),desc_a,info) @@ -340,7 +336,7 @@ Subroutine psb_zcgstabl_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(-alpha,uh(k+1),zone,rh(k),desc_a,info) end do call psb_geaxpby(alpha,uh(0),zone,x,desc_a,info) - call psb_spmm(zone,a,rh(j),zzero,rh(j+1),desc_a,info,work=aux) + call psb_spmm(zone,a,rh(j),zzero,rh(j+1),desc_a,info) call prec%apply(rh(j+1),desc_a,info) @@ -403,7 +399,6 @@ Subroutine psb_zcgstabl_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(uh,desc_a,info) if (info == psb_success_) call psb_gefree(rh,desc_a,info) if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if (info /= psb_success_) then call psb_errpush(info,name) goto 9999 diff --git a/linsolve/impl/psb_zfcg.F90 b/linsolve/impl/psb_zfcg.F90 index 1ab036feb..a11fec1db 100644 --- a/linsolve/impl/psb_zfcg.F90 +++ b/linsolve/impl/psb_zfcg.F90 @@ -125,12 +125,11 @@ subroutine psb_zfcg_vect(a,prec,b,x,eps,desc_a,info,& complex(psb_dpk_) :: alpha, beta, delta, gamma, theta real(psb_dpk_) :: derr integer(psb_ipk_) :: i, idx, nc2l, it, itx, istop_, itmax_, itrace_ - integer(psb_ipk_) :: n_col, naux, err_act + integer(psb_ipk_) :: n_col, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me - complex(psb_dpk_), allocatable, target :: aux(:) complex(psb_dpk_) :: vres(3) character(len=20) :: name type(psb_itconv_type) :: stopdat @@ -177,10 +176,6 @@ subroutine psb_zfcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) - - if (present(itmax)) then itmax_ = itmax else @@ -234,7 +229,7 @@ subroutine psb_zfcg_vect(a,prec,b,x,eps,desc_a,info,& ! Apply the preconditioner v=Pr ! Compute w = Av - call prec%apply(r,v,desc_a,info,work=aux) + call prec%apply(r,v,desc_a,info) if (info == psb_success_) call psb_spmm(zone,a,v,zzero,w,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,& @@ -289,7 +284,7 @@ subroutine psb_zfcg_vect(a,prec,b,x,eps,desc_a,info,& ! Apply the preconditioner v = Pr ! Compute w = Av - call prec%apply(r,v,desc_a,info,work=aux) + call prec%apply(r,v,desc_a,info) if (info == psb_success_) call psb_spmm(zone,a,v,zzero,w,desc_a,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,& diff --git a/linsolve/impl/psb_zgcr.f90 b/linsolve/impl/psb_zgcr.f90 index e48fc4c1d..9743f63c5 100644 --- a/linsolve/impl/psb_zgcr.f90 +++ b/linsolve/impl/psb_zgcr.f90 @@ -130,14 +130,13 @@ subroutine psb_zgcr_vect(a,prec,b,x,eps,desc_a,info,& type(psb_z_vect_type) :: r real(psb_dpk_) :: r_norm, b_norm, a_norm, derr - integer(psb_ipk_) :: n_col, naux, err_act + integer(psb_ipk_) :: n_col, err_act integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me integer(psb_ipk_) :: i, j, it, itx, istop_, itmax_, itrace_, nl, m, nrst complex(psb_dpk_) :: hjj - complex(psb_dpk_), allocatable, target :: aux(:) character(len=20) :: name type(psb_itconv_type) :: stopdat character(len=*), parameter :: methdname='GCR' @@ -223,16 +222,7 @@ subroutine psb_zgcr_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 endif - naux=4*n_col - allocate(aux(naux),h(nl+1,nl+1),& - &c_scale(nl+1),c(nl+1),z(nl+1), alpha(nl+1), stat=info) - h = zzero - if (info /= psb_success_) then - info=psb_err_from_subroutine_non_ - call psb_errpush(info,name) - goto 9999 - end if call psb_geasb(r, desc_a,info, scratch=.true.,mold=x%v) @@ -261,7 +251,7 @@ subroutine psb_zgcr_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(zone, b, zzero, r, desc_a, info) - call psb_spmm(-zone,a,x,zone,r,desc_a,info,work=aux) + call psb_spmm(-zone,a,x,zone,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -278,9 +268,9 @@ subroutine psb_zgcr_vect(a,prec,b,x,eps,desc_a,info,& it = it + 1 j = it !Apply preconditioner - call prec%apply(r,z(j),desc_a,info,work=aux) + call prec%apply(r,z(j),desc_a,info) - call psb_spmm(zone,a,z(j),zzero,c(1),desc_a,info,work=aux) + call psb_spmm(zone,a,z(j),zzero,c(1),desc_a,info) do i =1, j - 1 h(i,j) = psb_gedot(c_scale(i), c(i), desc_a, info) @@ -347,7 +337,7 @@ subroutine psb_zgcr_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(c(i),desc_a,info) end do - if (info == psb_success_) deallocate(aux,h,c_scale,z,c,alpha,stat=info) + if (info == psb_success_) deallocate(h,c_scale,z,c,alpha,stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_zrgmres.f90 b/linsolve/impl/psb_zrgmres.f90 index c6bcc0189..56bc3a294 100644 --- a/linsolve/impl/psb_zrgmres.f90 +++ b/linsolve/impl/psb_zrgmres.f90 @@ -124,13 +124,12 @@ subroutine psb_zrgmres_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err ! = local data - complex(psb_dpk_), allocatable :: aux(:) complex(psb_dpk_), allocatable :: c(:), s(:), h(:,:), rs(:), rst(:) type(psb_z_vect_type), allocatable :: v(:) type(psb_z_vect_type) :: w, w1, xt real(psb_dpk_) :: tmp complex(psb_dpk_) :: scal, gm, rti, rti1 - integer(psb_ipk_) ::litmax, naux, it, k, itrace_,& + integer(psb_ipk_) ::litmax, it, k, itrace_,& & n_row, n_col, nl integer(psb_lpk_) :: mglob Logical, Parameter :: exchange=.True., noexchange=.False., use_srot=.true. @@ -229,11 +228,6 @@ subroutine psb_zrgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - - naux=4*n_col - allocate(aux(naux),h(nl+1,nl+1),& - &c(nl+1),s(nl+1),rs(nl+1), rst(nl+1),stat=info) - if (info == psb_success_) call psb_geall(v,desc_a,info,n=nl+1) if (info == psb_success_) call psb_geall(w,desc_a,info) if (info == psb_success_) call psb_geall(w1,desc_a,info) @@ -266,7 +260,7 @@ subroutine psb_zrgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - call psb_spmm(-zone,a,x,zone,v(1),desc_a,info,work=aux) + call psb_spmm(-zone,a,x,zone,v(1),desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -301,7 +295,7 @@ subroutine psb_zrgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - call psb_spmm(-zone,a,x,zone,v(1),desc_a,info,work=aux) + call psb_spmm(-zone,a,x,zone,v(1),desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -358,7 +352,7 @@ subroutine psb_zrgmres_vect(a,prec,b,x,eps,desc_a,info,& itx = itx + 1 call prec%apply(v(i),w1,desc_a,info) - call psb_spmm(zone,a,w1,zzero,w,desc_a,info,work=aux) + call psb_spmm(zone,a,w1,zzero,w,desc_a,info) ! do k = 1, i @@ -397,7 +391,7 @@ subroutine psb_zrgmres_vect(a,prec,b,x,eps,desc_a,info,& call prec%apply(xt,desc_a,info) call psb_geaxpby(zone,x,zone,xt,desc_a,info) call psb_geaxpby(zone,b,zzero,w1,desc_a,info) - call psb_spmm(-zone,a,xt,zone,w1,desc_a,info,work=aux) + call psb_spmm(-zone,a,xt,zone,w1,desc_a,info) rni = psb_geamax(w1,desc_a,info) xni = psb_geamax(xt,desc_a,info) errnum = rni @@ -490,7 +484,7 @@ subroutine psb_zrgmres_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(w,desc_a,info) if (info == psb_success_) call psb_gefree(w1,desc_a,info) if (info == psb_success_) call psb_gefree(xt,desc_a,info) - if (info == psb_success_) deallocate(aux,h,c,s,rs,rst, stat=info) + if (info == psb_success_) deallocate(h,c,s,rs,rst, stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_zrichardson.f90 b/linsolve/impl/psb_zrichardson.f90 index 4c2bc5674..1cbba3706 100644 --- a/linsolve/impl/psb_zrichardson.f90 +++ b/linsolve/impl/psb_zrichardson.f90 @@ -91,11 +91,10 @@ Subroutine psb_zrichardson_vect(a,prec,b,x,eps,desc_a,info,& logical :: do_alloc_wrk type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: me,np,err_act - complex(psb_dpk_), allocatable, target :: aux(:) type(psb_z_vect_type), allocatable, target :: wwrk(:) type(psb_z_vect_type), pointer :: q, p, r, z, w real(psb_dpk_) :: derr - integer(psb_ipk_) :: itmax_, istop_, naux, it, itx, itrace_,& + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -155,8 +154,6 @@ Subroutine psb_zrichardson_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - naux=4*n_col - allocate(aux(naux), stat=info) if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then @@ -171,7 +168,7 @@ Subroutine psb_zrichardson_vect(a,prec,b,x,eps,desc_a,info,& w => wwrk(5) call psb_geaxpby(zone,b,zzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -186,17 +183,16 @@ Subroutine psb_zrichardson_vect(a,prec,b,x,eps,desc_a,info,& End If loop: do itx=1,itmax_ - call prec%apply(r,z,desc_a,info,work=aux) + call prec%apply(r,z,desc_a,info) call psb_geaxpby(zone,z,zone,x,desc_a,info) call psb_geaxpby(zone,b,zzero,r,desc_a,info) - if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info,work=aux) + if (info == psb_success_) call psb_spmm(-zone,a,x,zone,r,desc_a,info) if (psb_check_conv(methdname,itx,x,r,desc_a,stopdat,info)) exit loop end do loop call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info == psb_success_) deallocate(aux,stat=info) if ((info==psb_success_).and.do_alloc_wrk) call prec%free_wrk(info) if(info /= psb_success_) then diff --git a/log.txt b/log.txt index ae2ce3aa2..8ae9e16ab 100644 --- a/log.txt +++ b/log.txt @@ -4,8 +4,200 @@ make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base make -C modules objs F90="" F90COPT=" " (if test ! -d include ; then mkdir include; fi; /usr/bin/install -c -p -m 644 Make.inc include/Make.inc.psblas) make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_const_mod.F90 -o psb_const_mod.o (if test ! -d modules ; then mkdir modules; fi;) +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cbind_const_mod.F90 -o psb_cbind_const_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_mod.F90 -o psb_error_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_string_mod.f90 -o auxil/psb_string_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_m_serial_mod.f90 -o auxil/psi_m_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_e_serial_mod.f90 -o auxil/psi_e_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_s_serial_mod.f90 -o auxil/psi_s_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_d_serial_mod.f90 -o auxil/psi_d_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_c_serial_mod.f90 -o auxil/psi_c_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_z_serial_mod.f90 -o auxil/psi_z_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_acx_mod.f90 -o auxil/psi_acx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_alcx_mod.f90 -o auxil/psi_alcx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_lcx_mod.f90 -o auxil/psi_lcx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_realloc_mod.F90 -o auxil/psb_m_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_realloc_mod.F90 -o auxil/psb_e_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_realloc_mod.F90 -o auxil/psb_s_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_realloc_mod.F90 -o auxil/psb_d_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_realloc_mod.F90 -o auxil/psb_c_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_realloc_mod.F90 -o auxil/psb_z_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_realloc_mod.F90 -o psb_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_serial_mod.f90 -o auxil/psi_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c desc/psb_desc_const_mod.f90 -o desc/psb_desc_const_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_hsort_mod.f90 -o auxil/psb_m_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_isort_mod.f90 -o auxil/psb_m_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_msort_mod.f90 -o auxil/psb_m_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_qsort_mod.f90 -o auxil/psb_m_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_hsort_mod.f90 -o auxil/psb_e_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_isort_mod.f90 -o auxil/psb_e_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_msort_mod.f90 -o auxil/psb_e_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_qsort_mod.f90 -o auxil/psb_e_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_mod.f90 -o auxil/psb_s_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_isort_mod.f90 -o auxil/psb_s_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_msort_mod.f90 -o auxil/psb_s_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_qsort_mod.f90 -o auxil/psb_s_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_mod.f90 -o auxil/psb_d_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_isort_mod.f90 -o auxil/psb_d_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_msort_mod.f90 -o auxil/psb_d_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_qsort_mod.f90 -o auxil/psb_d_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_mod.f90 -o auxil/psb_c_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_isort_mod.f90 -o auxil/psb_c_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_msort_mod.f90 -o auxil/psb_c_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_qsort_mod.f90 -o auxil/psb_c_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_mod.f90 -o auxil/psb_z_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_isort_mod.f90 -o auxil/psb_z_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_msort_mod.f90 -o auxil/psb_z_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_qsort_mod.f90 -o auxil/psb_z_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_i_hsort_x_mod.f90 -o auxil/psb_i_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_l_hsort_x_mod.f90 -o auxil/psb_l_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_x_mod.f90 -o auxil/psb_s_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_ip_reord_mod.F90 -o auxil/psb_m_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_ip_reord_mod.F90 -o auxil/psb_e_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_ip_reord_mod.F90 -o auxil/psb_s_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_ip_reord_mod.F90 -o auxil/psb_d_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_ip_reord_mod.F90 -o auxil/psb_c_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_ip_reord_mod.F90 -o auxil/psb_z_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_mod.F90 -o desc/psb_hash_mod.o +mpicc -g -O3 -I. -c desc/psb_hashval.c -o desc/psb_hashval.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/psb_neighbor_topology_mod.F90 -o comm/psb_neighbor_topology_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_x_mod.f90 -o auxil/psb_d_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_x_mod.f90 -o auxil/psb_c_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_base_vect_mod.F90 -o serial/psb_i_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_base_mat_mod.F90 -o serial/psb_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_x_mod.f90 -o auxil/psb_z_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_ip_reord_mod.F90 -o auxil/psb_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_sort_mod.f90 -o auxil/psb_sort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_vect_mod.F90 -o serial/psb_i_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_base_vect_mod.F90 -o serial/psb_l_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_vect_mod.F90 -o serial/psb_l_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_vect_mod.F90 -o serial/psb_d_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_vect_mod.F90 -o serial/psb_s_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_vect_mod.F90 -o serial/psb_c_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_vect_mod.F90 -o serial/psb_z_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_vect_mod.F90 -o serial/psb_z_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_mat_mod.F90 -o serial/psb_z_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_vect_mod.F90 -o serial/psb_d_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_mat_mod.F90 -o serial/psb_d_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_vect_mod.F90 -o serial/psb_s_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_mat_mod.F90 -o serial/psb_s_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csr_mat_mod.f90 -o serial/psb_z_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csc_mat_mod.f90 -o serial/psb_z_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csr_mat_mod.f90 -o serial/psb_d_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csc_mat_mod.f90 -o serial/psb_d_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_vect_mod.F90 -o serial/psb_c_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_mat_mod.F90 -o serial/psb_c_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csr_mat_mod.f90 -o serial/psb_s_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csc_mat_mod.f90 -o serial/psb_s_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_rb_idx_tree_mod.f90 -o auxil/psb_z_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_rb_idx_tree_mod.f90 -o auxil/psb_d_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csr_mat_mod.f90 -o serial/psb_c_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csc_mat_mod.f90 -o serial/psb_c_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_rb_idx_tree_mod.f90 -o auxil/psb_s_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_mat_mod.F90 -o serial/psb_z_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_rb_idx_tree_mod.f90 -o auxil/psb_c_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_mat_mod.F90 -o serial/psb_d_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_rb_idx_tree_mod.f90 -o auxil/psb_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_mat_mod.F90 -o serial/psb_s_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_vect_mod.f90 -o serial/psb_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_mat_mod.F90 -o serial/psb_c_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_mat_mod.f90 -o serial/psb_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_serial_mod.f90 -o serial/psb_s_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_serial_mod.f90 -o serial/psb_d_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_serial_mod.f90 -o serial/psb_c_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_serial_mod.f90 -o serial/psb_z_serial_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_penv_mod.F90 -o penv/psi_penv_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_p2p_mod.F90 -o penv/psi_i2_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_p2p_mod.F90 -o penv/psi_m_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_p2p_mod.F90 -o penv/psi_e_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_p2p_mod.F90 -o penv/psi_s_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_p2p_mod.F90 -o penv/psi_d_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_p2p_mod.F90 -o penv/psi_c_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_p2p_mod.F90 -o penv/psi_z_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_collective_mod.F90 -o penv/psi_i2_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_collective_mod.F90 -o penv/psi_e_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_collective_mod.F90 -o penv/psi_m_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_collective_mod.F90 -o penv/psi_s_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_collective_mod.F90 -o penv/psi_d_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_collective_mod.F90 -o penv/psi_c_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_collective_mod.F90 -o penv/psi_z_collective_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_p2p_mod.F90 -o penv/psi_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_serial_mod.f90 -o serial/psb_serial_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_collective_mod.F90 -o penv/psi_collective_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c psb_penv_mod.F90 -o psb_penv_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_indx_map_mod.F90 -o desc/psb_indx_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_timers_mod.f90 -o psb_timers_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_impl.F90 -o psb_error_impl.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_map_mod.F90 -o desc/psb_hash_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_list_map_mod.F90 -o desc/psb_list_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_repl_map_mod.F90 -o desc/psb_repl_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_gen_block_map_mod.F90 -o desc/psb_gen_block_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_glist_map_mod.F90 -o desc/psb_glist_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_desc_mod.F90 -o desc/psb_desc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_e_comm_a_mod.f90 -o comm/psi_e_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_m_comm_a_mod.f90 -o comm/psi_m_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_a_mod.f90 -o comm/psi_s_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_a_mod.f90 -o comm/psi_d_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_a_mod.f90 -o comm/psi_c_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_a_mod.f90 -o comm/psi_z_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i_comm_mod.f90 -o comm/psb_i_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_l_comm_mod.f90 -o comm/psb_l_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_mod.f90 -o comm/psb_s_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_mod.f90 -o comm/psb_d_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_mod.f90 -o comm/psb_c_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_mod.f90 -o comm/psb_z_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_m_comm_a_mod.f90 -o comm/psb_m_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_e_comm_a_mod.f90 -o comm/psb_e_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_a_mod.f90 -o comm/psb_s_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_a_mod.f90 -o comm/psb_d_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_a_mod.f90 -o comm/psb_c_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_a_mod.f90 -o comm/psb_z_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_s_psblas_mod.F90 -o psblas/psb_s_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_c_psblas_mod.F90 -o psblas/psb_c_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_d_psblas_mod.F90 -o psblas/psb_d_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_z_psblas_mod.F90 -o psblas/psb_z_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_check_mod.f90 -o psb_check_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_v_mod.f90 -o comm/psi_d_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_v_mod.f90 -o comm/psi_s_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_v_mod.f90 -o comm/psi_z_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_v_mod.f90 -o comm/psi_c_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_i_comm_v_mod.f90 -o comm/psi_i_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_l_comm_v_mod.f90 -o comm/psi_l_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_i_mod.F90 -o psi_i_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_mod.F90 -o psi_s_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_mod.F90 -o psi_z_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_mod.F90 -o psi_d_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_mod.F90 -o psi_c_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_l_mod.F90 -o psi_l_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psblas/psb_psblas_mod.f90 -o psblas/psb_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psi_mod.f90 -o psi_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_comm_mod.f90 -o comm/psb_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_cd_tools_mod.F90 -o tools/psb_cd_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_m_tools_a_mod.f90 -o tools/psb_m_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_e_tools_a_mod.f90 -o tools/psb_e_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_s_tools_mod.F90 -o tools/psb_s_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_d_tools_mod.F90 -o tools/psb_d_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_c_tools_mod.F90 -o tools/psb_c_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_z_tools_mod.F90 -o tools/psb_z_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_s_tools_a_mod.f90 -o tools/psb_s_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_d_tools_a_mod.f90 -o tools/psb_d_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_c_tools_a_mod.f90 -o tools/psb_c_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_z_tools_a_mod.f90 -o tools/psb_z_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_i_tools_mod.F90 -o tools/psb_i_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_l_tools_mod.F90 -o tools/psb_l_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_tools_mod.f90 -o tools/psb_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_base_linmap_mod.f90 -o comm/psb_base_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_linmap_mod.f90 -o comm/psb_s_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_linmap_mod.f90 -o comm/psb_d_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_linmap_mod.f90 -o comm/psb_c_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_linmap_mod.f90 -o comm/psb_z_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_linmap_mod.f90 -o comm/psb_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c error.f90 -o error.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_base_mod.f90 -o psb_base_mod.o +mpicc -g -O3 -I. -c cutil.c -o cutil.o +/usr/bin/install -c -p -p *.mod ../../modules /usr/bin/install -c -p -p psb_config.h psb_types.h ../../include make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» @@ -14,18 +206,1230 @@ make -C prec mods make -C ext mods make -C base objs make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_blockpart_mod.f90 -o psb_blockpart_mod.o +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_const_mod.f90 -o psb_prec_const_mod.o +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +mpicc -g -O3 -I. -I../include -c psb_metis_int.c -o psb_metis_int.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_ell_mat_mod.f90 -o psb_d_ell_mat_mod.o make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» make -C modules objs F90="" F90COPT=" " +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_i_ext_util_mod.f90 -o psi_i_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_partidx_mod.F90 -o psb_partidx_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_tools_mod.f90 -o psb_c_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_s_ext_util_mod.f90 -o psi_s_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_hbio_mod.f90 -o psb_hbio_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_tools_mod.f90 -o psb_d_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_c_ext_util_mod.f90 -o psi_c_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_tools_mod.f90 -o psb_s_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mmio_mod.F90 -o psb_mmio_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_d_ext_util_mod.f90 -o psi_d_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_mod.f90 -o psb_s_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_tools_mod.f90 -o psb_z_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_z_ext_util_mod.f90 -o psi_z_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_mod.f90 -o psb_d_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_ell_mat_mod.f90 -o psb_s_ell_mat_mod.o +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +/usr/bin/install -c -p -p *.mod ../../modules +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_mod.f90 -o psb_c_mat_dist_mod.o +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make -C serial objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C impl objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_base_mat_impl.f90 -o psb_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_ell_mat_mod.f90 -o psb_c_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_mod.f90 -o psb_z_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_ell_mat_mod.f90 -o psb_z_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_renum_mod.f90 -o psb_s_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_renum_mod.f90 -o psb_d_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_renum_mod.f90 -o psb_c_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_renum_mod.f90 -o psb_z_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dns_mat_mod.f90 -o psb_s_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dns_mat_mod.f90 -o psb_d_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dns_mat_mod.f90 -o psb_c_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o +make -C comm objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C internals objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata.F90 -o psi_dswapdata.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_restr.f90 -o psi_iovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_save.f90 -o psi_iovrl_save.o +make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter.F90 -o psb_dscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_base_prec_mod.f90 -o psb_s_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_base_prec_mod.f90 -o psb_d_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_mat_dist_mod.f90 -o psb_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_upd.f90 -o psi_iovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_base_prec_mod.f90 -o psb_c_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dns_mat_mod.f90 -o psb_z_dns_mat_mod.o +make -C sort objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_hsort_impl.f90 -o psb_s_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_ext_util_mod.f90 -o psi_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter.F90 -o psb_zscatter.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_isort_impl.f90 -o psb_s_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_msort_impl.f90 -o psb_s_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_base_prec_mod.f90 -o psb_z_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ilu_fact_mod.f90 -o psb_d_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lsame.f90 -o psb_lsame.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather.f90 -o psb_dgather.o +make -C auxil objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_desc_index.F90 -o psi_desc_index.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_qsort_impl.f90 -o psb_s_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_hsort_impl.f90 -o psb_d_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_isort_impl.f90 -o psb_d_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_msort_impl.f90 -o psb_d_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hll_mat_mod.f90 -o psb_d_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_iscatter.F90 -o psb_iscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_lscatter.F90 -o psb_lscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter.F90 -o psb_cscatter.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran.F90 -o psi_dswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_fnd_owner.F90 -o psi_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_qsort_impl.f90 -o psb_d_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hll_mat_mod.f90 -o psb_s_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_hsort_impl.f90 -o psb_c_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_ainv_tools_mod.f90 -o psb_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_bnd_elem.f90 -o psi_crea_bnd_elem.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter.F90 -o psb_sscatter.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hll_mat_mod.f90 -o psb_c_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter_a.F90 -o psb_dscatter_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_isort_impl.f90 -o psb_c_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter_a.F90 -o psb_zscatter_a.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hll_mat_mod.f90 -o psb_z_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_msort_impl.f90 -o psb_c_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather.f90 -o psb_sgather.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_qsort_impl.f90 -o psb_c_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dia_mat_mod.f90 -o psb_d_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata.F90 -o psi_sswapdata.o +make -C psblas objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddot.f90 -o psb_ddot.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hdia_mat_mod.f90 -o psb_d_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dia_mat_mod.f90 -o psb_s_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hdia_mat_mod.f90 -o psb_s_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mscatter_a.F90 -o psb_mscatter_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dia_mat_mod.f90 -o psb_c_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hdia_mat_mod.f90 -o psb_c_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dia_mat_mod.f90 -o psb_z_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hdia_mat_mod.f90 -o psb_z_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_a2a_fnd_owner.F90 -o psi_a2a_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ext_mod.F90 -o psb_ext_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_restr.f90 -o psi_lovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_hsort_impl.f90 -o psb_z_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ilu_fact_mod.f90 -o psb_s_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_isort_impl.f90 -o psb_z_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_fact_mod.f90 -o psb_s_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ilu_fact_mod.f90 -o psb_c_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_msort_impl.f90 -o psb_z_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_qsort_impl.f90 -o psb_z_qsort_impl.o +make -C tools objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_icdasb.F90 -o psb_icdasb.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran.F90 -o psi_sswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_igather.f90 -o psb_igather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_escatter_a.F90 -o psb_escatter_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_hsort_impl.f90 -o psb_m_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter_a.F90 -o psb_cscatter_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_isort_impl.f90 -o psb_m_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter_a.F90 -o psb_sscatter_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_msort_impl.f90 -o psb_m_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_fact_mod.f90 -o psb_c_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspgather.F90 -o psb_dspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdall.f90 -o psb_cdall.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_qsort_impl.f90 -o psb_m_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ihalo.f90 -o psb_ihalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_graph_fnd_owner.F90 -o psi_graph_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_hsort_impl.f90 -o psb_e_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssphalo.F90 -o psb_ssphalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswapdata.F90 -o psi_iswapdata.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_isort_impl.f90 -o psb_e_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_index.f90 -o psi_crea_index.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_msort_impl.f90 -o psb_e_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax.f90 -o psb_damax.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invk_fact_mod.f90 -o psb_c_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum.f90 -o psb_dasum.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save.f90 -o psi_sovrl_save.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdals.f90 -o psb_cdals.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd.f90 -o psi_sovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csc_impl.F90 -o psb_s_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_m_serial_impl.F90 -o psi_m_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswaptran.F90 -o psi_iswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invt_fact_mod.f90 -o psb_c_invt_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daxpby.f90 -o psb_daxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrm2.f90 -o psb_dnrm2.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrmi.f90 -o psb_dnrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_mat_impl.F90 -o psb_s_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_ovr_elem.f90 -o psi_crea_ovr_elem.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmpovrl.f90 -o psi_bld_tmpovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspgather.F90 -o psb_sspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ilu_fact_mod.f90 -o psb_z_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdalv.f90 -o psb_cdalv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_inloc.f90 -o psb_cd_inloc.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_util_mod.f90 -o psb_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspgather.F90 -o psb_zspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsphalo.F90 -o psb_dsphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_fact_mod.f90 -o psb_z_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invk_fact_mod.f90 -o psb_z_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invt_fact_mod.f90 -o psb_z_invt_fact_mod.o +/bin/cp -p *.mod ../modules +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdins.F90 -o psb_cdins.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr.f90 -o psi_dovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save.f90 -o psi_dovrl_save.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd.f90 -o psi_dovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata.F90 -o psi_cswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_rb_idx_tree_impl.F90 -o psb_s_rb_idx_tree_impl.o +make -C ext objs make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» /bin/cp -p *.mod ../modules -mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_from_coo.f90 -o psb_s_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_to_coo.f90 -o psb_s_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_biconjg_mod.F90 -o psb_c_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr.f90 -o psi_covrl_restr.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lgather.f90 -o psb_lgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lhalo.f90 -o psb_lhalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lovrl.f90 -o psb_lovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspgather.F90 -o psb_cspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmphalo.f90 -o psi_bld_tmphalo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_coo.f90 -o psb_s_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_fmt.f90 -o psb_s_cp_ell_from_fmt.o +/usr/bin/install -c -p -p *.mod ../modules +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_sort_dl.f90 -o psi_sort_dl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csphalo.F90 -o psb_csphalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran.F90 -o psi_cswaptran.o +make -C util objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +/usr/bin/install -c -p -p *.mod ../modules +mpicc -g -O3 -I. -I../include -c psb_amd_order.c -o psb_amd_order.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_hbio_impl.f90 -o psb_s_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_hbio_impl.f90 -o psb_d_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_biconjg_mod.F90 -o psb_d_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save.f90 -o psi_covrl_save.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_biconjg_mod.F90 -o psb_s_biconjg_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_coo.f90 -o psb_s_cp_ell_to_coo.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather.f90 -o psb_cgather.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata.F90 -o psi_zswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspnrm1.f90 -o psb_sspnrm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_fmt.f90 -o psb_s_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_hbio_impl.f90 -o psb_c_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_e_serial_impl.F90 -o psi_e_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_indx_map_fnd_owner.F90 -o psi_indx_map_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_desc_impl.f90 -o psi_desc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_biconjg_mod.F90 -o psb_z_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspnrm1.f90 -o psb_dspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdprt.f90 -o psb_cdprt.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd.f90 -o psi_covrl_upd.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_from_coo.f90 -o psb_s_cp_hdia_from_coo.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr.f90 -o psi_zovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save.f90 -o psi_zovrl_save.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran.F90 -o psi_zswaptran.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_to_coo.f90 -o psb_s_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csr_impl.F90 -o psb_d_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdren.f90 -o psb_cdren.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_coo_impl.F90 -o psb_d_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd.f90 -o psi_zovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_serial_impl.F90 -o psi_s_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspnrm1.f90 -o psb_cspnrm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_coo.f90 -o psb_s_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_fmt.f90 -o psb_s_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_hash_impl.f90 -o psi_hash_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_srtlist.f90 -o psi_srtlist.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsphalo.F90 -o psb_zsphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_type.f90 -o psb_s_prec_type.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csc_impl.F90 -o psb_d_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata_a.F90 -o psi_dswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspnrm1.f90 -o psb_zspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdrep.f90 -o psb_cdrep.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_get_overlap.f90 -o psb_get_overlap.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_serial_impl.F90 -o psi_d_serial_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_coo.f90 -o psb_s_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_bld_glb_dep_list.F90 -o psi_bld_glb_dep_list.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_xtr_loc_dl.F90 -o psi_xtr_loc_dl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_hbio_impl.f90 -o psb_z_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mmio_impl.f90 -o psb_s_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax.f90 -o psb_zamax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum.f90 -o psb_zasum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_serial_impl.F90 -o psi_c_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_type.f90 -o psb_d_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_type.f90 -o psb_c_prec_type.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_fmt.f90 -o psb_s_cp_hll_to_fmt.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_restr_a.f90 -o psi_movrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_save_a.f90 -o psi_movrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaxpby.f90 -o psb_zaxpby.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_aclsum.f90 -o psb_s_dia_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_allocate_mnnz.f90 -o psb_s_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_arwsum.f90 -o psb_s_dia_arwsum.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mmio_impl.f90 -o psb_d_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcdbldext.F90 -o psb_dcdbldext.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_colsum.f90 -o psb_s_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetptn.f90 -o psb_s_dia_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_mat_impl.F90 -o psb_d_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetrow.f90 -o psb_s_dia_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmm.f90 -o psb_s_dia_csmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_lstext.f90 -o psb_cd_lstext.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mmio_impl.f90 -o psb_c_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_remap.F90 -o psb_cd_remap.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_serial_impl.F90 -o psi_z_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcdbldext.F90 -o psb_zcdbldext.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmv.f90 -o psb_s_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_get_diag.f90 -o psb_s_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_maxval.f90 -o psb_s_dia_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_mold.f90 -o psb_s_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_print.f90 -o psb_s_dia_print.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_type.f90 -o psb_z_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mmio_impl.f90 -o psb_z_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_rb_idx_tree_impl.F90 -o psb_d_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csr_impl.F90 -o psb_c_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_coo_impl.F90 -o psb_c_coo_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reallocate_nz.f90 -o psb_s_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_upd_a.f90 -o psi_movrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scdbldext.F90 -o psb_scdbldext.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_restr_a.f90 -o psi_eovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_save_a.f90 -o psi_eovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdot.f90 -o psb_zdot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrm2.f90 -o psb_znrm2.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reinit.f90 -o psb_s_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_rowsum.f90 -o psb_s_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scal.f90 -o psb_s_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scals.f90 -o psb_s_dia_scals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo.f90 -o psb_chalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csc_impl.F90 -o psb_c_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccdbldext.F90 -o psb_ccdbldext.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswaptran_a.F90 -o psi_mswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_mat_impl.F90 -o psb_c_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdcpy.F90 -o psb_cdcpy.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_reinit.f90 -o psb_cd_reinit.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_switch_ovl_indxmap.f90 -o psb_cd_switch_ovl_indxmap.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_aclsum.f90 -o psb_s_ell_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_renum_block.F90 -o psb_cd_renum_block.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_fact_mod.f90 -o psb_d_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_allocate_mnnz.f90 -o psb_s_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_arwsum.f90 -o psb_s_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_colsum.f90 -o psb_s_ell_colsum.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetblk.f90 -o psb_s_ell_csgetblk.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrmi.f90 -o psb_znrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invk_fact_mod.f90 -o psb_d_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl.f90 -o psb_covrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invt_fact_mod.f90 -o psb_d_invt_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invk_fact_mod.f90 -o psb_s_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather.f90 -o psb_zgather.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_i_mmio_impl.F90 -o psb_i_mmio_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetptn.f90 -o psb_s_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetrow.f90 -o psb_s_ell_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspalloc.f90 -o psb_dspalloc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspasb.f90 -o psb_dspasb.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmm.f90 -o psb_s_ell_csmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remap.F90 -o psb_d_remap.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo.f90 -o psb_zhalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_rb_idx_tree_impl.F90 -o psb_c_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_mat.F90 -o psb_z_remote_mat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl.f90 -o psb_zovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csr_impl.F90 -o psb_z_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspfree.f90 -o psb_dspfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_coo_impl.F90 -o psb_z_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invt_fact_mod.f90 -o psb_s_invt_fact_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmv.f90 -o psb_s_ell_csmv.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata_a.F90 -o psi_cswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csc_impl.F90 -o psb_z_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_vect.F90 -o psb_s_remote_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_biconjg_mod.F90 -o psb_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_mat_impl.F90 -o psb_z_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_srwextd.f90 -o psb_srwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_impl.f90 -o psb_s_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather_a.f90 -o psb_dgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_vect.F90 -o psb_d_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnm1.f90 -o psb_s_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnmi.f90 -o psb_s_ell_csnmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo_a.f90 -o psb_dhalo_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran_a.F90 -o psi_cswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_type.f90 -o psb_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_vect.F90 -o psb_c_remote_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dsprn.f90 -o psb_dsprn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csput.f90 -o psb_s_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssm.f90 -o psb_s_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssv.f90 -o psb_s_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_get_diag.f90 -o psb_s_ell_get_diag.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_vect.F90 -o psb_z_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_maxval.f90 -o psb_s_ell_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_drwextd.f90 -o psb_drwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl_a.f90 -o psb_dovrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather_a.f90 -o psb_sgather_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_mold.f90 -o psb_s_ell_mold.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_upd_a.f90 -o psi_eovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_mod.f90 -o psb_s_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata_a.F90 -o psi_zswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_e_remote_vect.F90 -o psb_e_remote_vect.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr_a.f90 -o psi_sovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_crwextd.f90 -o psb_crwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_mod.f90 -o psb_d_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_mod.f90 -o psb_c_prec_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_print.f90 -o psb_s_ell_print.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_m_remote_vect.F90 -o psb_m_remote_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_mod.f90 -o psb_z_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save_a.f90 -o psi_sovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_rb_idx_tree_impl.F90 -o psb_z_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo_a.f90 -o psb_shalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl_a.f90 -o psb_sovrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_impl.f90 -o psb_d_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_impl.f90 -o psb_c_mat_dist_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reallocate_nz.f90 -o psb_s_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mgather_a.f90 -o psb_mgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mhalo_a.f90 -o psb_mhalo_a.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_movrl_a.f90 -o psb_movrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrm2.f90 -o psb_snrm2.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran_a.F90 -o psi_zswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspalloc.f90 -o psb_sspalloc.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_impl.f90 -o psb_z_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd_a.f90 -o psi_sovrl_upd_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reinit.f90 -o psb_s_ell_reinit.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrmi.f90 -o psb_snrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspasb.f90 -o psb_sspasb.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_mod.f90 -o psb_prec_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_rowsum.f90 -o psb_s_ell_rowsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspmm.f90 -o psb_sspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_egather_a.f90 -o psb_egather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ehalo_a.f90 -o psb_ehalo_a.o +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_eovrl_a.f90 -o psb_eovrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather_a.f90 -o psb_cgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_diagprec.f90 -o psb_d_diagprec.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr_a.f90 -o psi_dovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save_a.f90 -o psi_dovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_nullprec.f90 -o psb_d_nullprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remap.F90 -o psb_s_remap.o mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_bjacprec.f90 -o psb_d_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd_a.f90 -o psi_dovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspsm.f90 -o psb_sspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax.f90 -o psb_camax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zrwextd.f90 -o psb_zrwextd.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scal.f90 -o psb_s_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scals.f90 -o psb_s_ell_scals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo_a.f90 -o psb_chalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl_a.f90 -o psb_covrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspfree.f90 -o psb_sspfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspins.F90 -o psb_sspins.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_diagprec.f90 -o psb_s_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather_a.f90 -o psb_zgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_renum_impl.F90 -o psb_s_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo_a.f90 -o psb_zhalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum.f90 -o psb_casum.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr_a.f90 -o psi_covrl_restr_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_trim.f90 -o psb_s_ell_trim.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caxpby.f90 -o psb_caxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdot.f90 -o psb_cdot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrm2.f90 -o psb_cnrm2.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_nullprec.f90 -o psb_s_nullprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl_a.f90 -o psb_zovrl_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save_a.f90 -o psi_covrl_save_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_allocate_mnnz.f90 -o psb_s_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd_a.f90 -o psi_covrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrmi.f90 -o psb_cnrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspmm.f90 -o psb_cspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspsm.f90 -o psb_cspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ssprn.f90 -o psb_ssprn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_glob_to_loc.f90 -o psb_glob_to_loc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cmlt_vect.f90 -o psb_cmlt_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_csmv.f90 -o psb_s_hdia_csmv.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspspmm.F90 -o psb_sspspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspspmm.F90 -o psb_dspspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspspmm.F90 -o psb_cspspmm.o mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_bjacprec.f90 -o psb_s_bjacprec.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr_a.f90 -o psi_zovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_diagprec.f90 -o psb_c_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_nullprec.f90 -o psb_c_nullprec.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_mold.f90 -o psb_s_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_print.f90 -o psb_s_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_aclsum.f90 -o psb_s_hll_aclsum.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save_a.f90 -o psi_zovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspspmm.F90 -o psb_zspspmm.o mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_bjacprec.f90 -o psb_c_bjacprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_diagprec.f90 -o psb_z_diagprec.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_allocate_mnnz.f90 -o psb_s_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_arwsum.f90 -o psb_s_hll_arwsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ssymbmm.f90 -o psb_ssymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dmlt_vect.f90 -o psb_dmlt_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zmlt_vect.f90 -o psb_zmlt_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_loc_to_glob.f90 -o psb_loc_to_glob.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd_a.f90 -o psi_zovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_renum_impl.F90 -o psb_d_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_nullprec.f90 -o psb_z_nullprec.o mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_bjacprec.f90 -o psb_z_bjacprec.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_colsum.f90 -o psb_s_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetblk.f90 -o psb_s_hll_csgetblk.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iallc.f90 -o psb_iallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iasb.f90 -o psb_iasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_smlt_vect.f90 -o psb_smlt_vect.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdiv_vect.f90 -o psb_cdiv_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetptn.f90 -o psb_s_hll_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dsymbmm.f90 -o psb_dsymbmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetrow.f90 -o psb_s_hll_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddiv_vect.f90 -o psb_ddiv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdiv_vect.f90 -o psb_zdiv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ifree.f90 -o psb_ifree.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmm.f90 -o psb_s_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmv.f90 -o psb_s_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnm1.f90 -o psb_s_hll_csnm1.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_renum_impl.F90 -o psb_c_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_renum_impl.F90 -o psb_z_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdiv_vect.f90 -o psb_sdiv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cinv_vect.f90 -o psb_cinv_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnmi.f90 -o psb_s_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csput.f90 -o psb_s_hll_csput.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iins.f90 -o psb_iins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_csymbmm.f90 -o psb_csymbmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssm.f90 -o psb_s_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssv.f90 -o psb_s_hll_cssv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dinv_vect.f90 -o psb_dinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zinv_vect.f90 -o psb_zinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lallc.f90 -o psb_lallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sinv_vect.f90 -o psb_sinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dcmp_vect.f90 -o psb_dcmp_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_get_diag.f90 -o psb_s_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_maxval.f90 -o psb_s_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_mold.f90 -o psb_s_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_print.f90 -o psb_s_hll_print.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zsymbmm.f90 -o psb_zsymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_scmp_vect.f90 -o psb_scmp_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ccmp_vect.f90 -o psb_ccmp_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zcmp_vect.f90 -o psb_zcmp_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reallocate_nz.f90 -o psb_s_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cabs_vect.f90 -o psb_cabs_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snumbmm.f90 -o psb_snumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dabs_vect.f90 -o psb_dabs_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sabs_vect.f90 -o psb_sabs_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lasb.f90 -o psb_lasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zabs_vect.f90 -o psb_zabs_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reinit.f90 -o psb_s_hll_reinit.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cgetmatinfo.F90 -o psb_cgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dgetmatinfo.F90 -o psb_dgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sgetmatinfo.F90 -o psb_sgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnumbmm.f90 -o psb_dnumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zgetmatinfo.F90 -o psb_zgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lfree.f90 -o psb_lfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnumbmm.f90 -o psb_cnumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_rowsum.f90 -o psb_s_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scal.f90 -o psb_s_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scals.f90 -o psb_s_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_dia_from_coo.f90 -o psb_s_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_build_mtpart.F90 -o psi_build_mtpart.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_coo.f90 -o psb_s_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree.f90 -o psb_sfree.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_fmt.f90 -o psb_s_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znumbmm.f90 -o psb_znumbmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_coo.f90 -o psb_s_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_fmt.f90 -o psb_s_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_from_coo.f90 -o psb_s_mv_hdia_from_coo.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c smmp.f90 -o smmp.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c lsmmp.f90 -o lsmmp.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_to_coo.f90 -o psb_s_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_coo.f90 -o psb_s_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgeprt.f90 -o psb_dgeprt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins.f90 -o psb_sins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_fmt.f90 -o psb_s_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_coo.f90 -o psb_s_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_fmt.f90 -o psb_s_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_from_coo.f90 -o psb_c_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgeprt.f90 -o psb_cgeprt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_to_coo.f90 -o psb_c_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc.f90 -o psb_dallc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_coo.f90 -o psb_c_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_fmt.f90 -o psb_c_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_coo.f90 -o psb_c_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_fmt.f90 -o psb_c_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spdot_srtd.f90 -o psb_spdot_srtd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb.f90 -o psb_dasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_aspxpby.f90 -o psb_aspxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree.f90 -o psb_dfree.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_from_coo.f90 -o psb_c_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins.f90 -o psb_dins.o +/usr/bin/install -c -p -p *.mod ../modules +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spge_dot.f90 -o psb_spge_dot.o +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saplusat.f90 -o psb_saplusat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daplusat.f90 -o psb_daplusat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caplusat.f90 -o psb_caplusat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaplusat.f90 -o psb_zaplusat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax_s.f90 -o psb_samax_s.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_to_coo.f90 -o psb_c_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax_s.f90 -o psb_damax_s.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_coo.f90 -o psb_c_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax_s.f90 -o psb_camax_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax_s.f90 -o psb_zamax_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc.f90 -o psb_callc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb.f90 -o psb_casb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum_s.f90 -o psb_sasum_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum_s.f90 -o psb_dasum_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree.f90 -o psb_cfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum_s.f90 -o psb_casum_s.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_fmt.f90 -o psb_c_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_coo.f90 -o psb_c_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum_s.f90 -o psb_zasum_s.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_fmt.f90 -o psb_c_cp_hll_to_fmt.o +make -C linsolve mods +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_base_linsolve_conv_mod.f90 -o psb_base_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_linsolve_mod.f90 -o psb_linsolve_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_aclsum.f90 -o psb_c_dia_aclsum.o +make -C prec objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_prec_type_impl.f90 -o psb_s_prec_type_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins.f90 -o psb_cins.o +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_prec_type_impl.f90 -o psb_d_prec_type_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_allocate_mnnz.f90 -o psb_c_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_prec_type_impl.f90 -o psb_c_prec_type_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc.f90 -o psb_zallc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_arwsum.f90 -o psb_c_dia_arwsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb.f90 -o psb_zasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree.f90 -o psb_zfree.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_linsolve_conv_mod.f90 -o psb_s_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins.f90 -o psb_zins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mallc_a.f90 -o psb_mallc_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_colsum.f90 -o psb_c_dia_colsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_masb_a.f90 -o psb_masb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mfree_a.f90 -o psb_mfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetptn.f90 -o psb_c_dia_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mins_a.f90 -o psb_mins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eallc_a.f90 -o psb_eallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_easb_a.f90 -o psb_easb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_efree_a.f90 -o psb_efree_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eins_a.f90 -o psb_eins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc_a.f90 -o psb_sallc_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetrow.f90 -o psb_c_dia_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_linsolve_conv_mod.f90 -o psb_c_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb_a.f90 -o psb_sasb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree_a.f90 -o psb_sfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmm.f90 -o psb_c_dia_csmm.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_linsolve_conv_mod.f90 -o psb_d_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_linsolve_conv_mod.f90 -o psb_z_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_prec_type_impl.f90 -o psb_z_prec_type_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins_a.f90 -o psb_sins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc_a.f90 -o psb_dallc_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_diagprec_impl.f90 -o psb_d_diagprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb_a.f90 -o psb_dasb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree_a.f90 -o psb_dfree_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins_a.f90 -o psb_dins_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmv.f90 -o psb_c_dia_csmv.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc_a.f90 -o psb_callc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb_a.f90 -o psb_casb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_get_diag.f90 -o psb_c_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_bjacprec_impl.f90 -o psb_d_bjacprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree_a.f90 -o psb_cfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_maxval.f90 -o psb_c_dia_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins_a.f90 -o psb_cins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc_a.f90 -o psb_zallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb_a.f90 -o psb_zasb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree_a.f90 -o psb_zfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_mold.f90 -o psb_c_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_nullprec_impl.f90 -o psb_d_nullprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins_a.f90 -o psb_zins_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilu0_fact.f90 -o psb_d_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_print.f90 -o psb_c_dia_print.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspalloc.f90 -o psb_zspalloc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reallocate_nz.f90 -o psb_c_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_iluk_fact.f90 -o psb_d_iluk_fact.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspasb.f90 -o psb_zspasb.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reinit.f90 -o psb_c_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_rowsum.f90 -o psb_c_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scal.f90 -o psb_c_dia_scal.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remap.F90 -o psb_z_remap.o +/usr/bin/install -c -p -p *.mod ../modules +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilut_fact.f90 -o psb_d_ilut_fact.o +make -C cbind objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_objhandle_mod.F90 -o psb_objhandle_mod.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_base.c -o psb_c_base.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sbase.c -o psb_c_sbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dbase.c -o psb_c_dbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cbase.c -o psb_c_cbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zbase.c -o psb_c_zbase.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspfree.f90 -o psb_zspfree.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_scomm.c -o psb_c_scomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dcomm.c -o psb_c_dcomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_ccomm.c -o psb_c_ccomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zcomm.c -o psb_c_zcomm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspins.F90 -o psb_zspins.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zsprn.f90 -o psb_zsprn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecbld.f90 -o psb_dprecbld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scals.f90 -o psb_c_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecinit.f90 -o psb_dprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_aclsum.f90 -o psb_c_ell_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspalloc.f90 -o psb_cspalloc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspasb.f90 -o psb_cspasb.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_diagprec_impl.f90 -o psb_s_diagprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remap.F90 -o psb_c_remap.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspfree.f90 -o psb_cspfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspins.F90 -o psb_cspins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_csprn.f90 -o psb_csprn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_set_bld.f90 -o psb_cd_set_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_bjacprec_impl.f90 -o psb_s_bjacprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_allocate_mnnz.f90 -o psb_c_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_map.f90 -o psb_s_map.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_map.f90 -o psb_d_map.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_arwsum.f90 -o psb_c_ell_arwsum.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_base_tools_cbind_mod.F90 -o psb_base_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_map.f90 -o psb_c_map.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_nullprec_impl.f90 -o psb_s_nullprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilu0_fact.f90 -o psb_s_ilu0_fact.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_map.f90 -o psb_z_map.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_par_csr_spspmm.f90 -o psb_s_par_csr_spspmm.o +make -C linsolve objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dkrylov.f90 -o psb_dkrylov.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_colsum.f90 -o psb_c_ell_colsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_par_csr_spspmm.f90 -o psb_d_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_iluk_fact.f90 -o psb_s_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_skrylov.f90 -o psb_skrylov.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilut_fact.f90 -o psb_s_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetblk.f90 -o psb_c_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetptn.f90 -o psb_c_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetrow.f90 -o psb_c_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ckrylov.f90 -o psb_ckrylov.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_psblas_cbind_mod.f90 -o psb_s_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_psblas_cbind_mod.f90 -o psb_d_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_psblas_cbind_mod.f90 -o psb_c_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zkrylov.f90 -o psb_zkrylov.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecbld.f90 -o psb_sprecbld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecinit.f90 -o psb_sprecinit.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_psblas_cbind_mod.f90 -o psb_z_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmm.f90 -o psb_c_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_diagprec_impl.f90 -o psb_c_diagprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_par_csr_spspmm.f90 -o psb_c_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_par_csr_spspmm.f90 -o psb_z_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drichardson.f90 -o psb_drichardson.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_glob_transpose.F90 -o psb_s_glob_transpose.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srichardson.f90 -o psb_srichardson.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_tools_cbind_mod.F90 -o psb_s_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmv.f90 -o psb_c_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_bjacprec_impl.f90 -o psb_c_bjacprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crichardson.f90 -o psb_crichardson.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrichardson.f90 -o psb_zrichardson.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_serial_cbind_mod.F90 -o psb_s_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_tools_cbind_mod.F90 -o psb_d_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_serial_cbind_mod.F90 -o psb_d_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstab.f90 -o psb_dcgstab.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcg.F90 -o psb_dcg.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_glob_transpose.F90 -o psb_d_glob_transpose.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_tools_cbind_mod.F90 -o psb_c_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_serial_cbind_mod.F90 -o psb_c_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnm1.f90 -o psb_c_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dfcg.F90 -o psb_dfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_nullprec_impl.f90 -o psb_c_nullprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_glob_transpose.F90 -o psb_c_glob_transpose.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dgcr.f90 -o psb_dgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgs.f90 -o psb_dcgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnmi.f90 -o psb_c_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilu0_fact.f90 -o psb_c_ilu0_fact.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_tools_cbind_mod.F90 -o psb_z_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_serial_cbind_mod.F90 -o psb_z_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_iluk_fact.f90 -o psb_c_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilut_fact.f90 -o psb_c_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csput.f90 -o psb_c_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dbicg.f90 -o psb_dbicg.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_comm_cbind_mod.f90 -o psb_s_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssm.f90 -o psb_c_ell_cssm.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_comm_cbind_mod.f90 -o psb_d_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstabl.f90 -o psb_dcgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecbld.f90 -o psb_cprecbld.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_comm_cbind_mod.f90 -o psb_c_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecinit.f90 -o psb_cprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drgmres.f90 -o psb_drgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssv.f90 -o psb_c_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstab.f90 -o psb_scgstab.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_glob_transpose.F90 -o psb_z_glob_transpose.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cgetelem.f90 -o psb_cgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_diagprec_impl.f90 -o psb_z_diagprec_impl.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_comm_cbind_mod.f90 -o psb_z_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_bjacprec_impl.f90 -o psb_z_bjacprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_nullprec_impl.f90 -o psb_z_nullprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scg.F90 -o psb_scg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_get_diag.f90 -o psb_c_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sfcg.F90 -o psb_sfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sgcr.f90 -o psb_sgcr.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_psblas_cbind_mod.f90 -o psb_base_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dgetelem.f90 -o psb_dgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilu0_fact.f90 -o psb_z_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgs.f90 -o psb_scgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sbicg.f90 -o psb_sbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_maxval.f90 -o psb_c_ell_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sgetelem.f90 -o psb_sgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstabl.f90 -o psb_scgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srgmres.f90 -o psb_srgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstab.f90 -o psb_ccgstab.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zgetelem.f90 -o psb_zgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_iluk_fact.f90 -o psb_z_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccg.F90 -o psb_ccg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilut_fact.f90 -o psb_z_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecbld.f90 -o psb_zprecbld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_mold.f90 -o psb_c_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cfcg.F90 -o psb_cfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cgcr.f90 -o psb_cgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgs.f90 -o psb_ccgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cbicg.f90 -o psb_cbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstabl.f90 -o psb_ccgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_print.f90 -o psb_c_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crgmres.f90 -o psb_crgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reallocate_nz.f90 -o psb_c_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reinit.f90 -o psb_c_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecinit.f90 -o psb_zprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_rowsum.f90 -o psb_c_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scal.f90 -o psb_c_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstab.f90 -o psb_zcgstab.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcg.F90 -o psb_zcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scals.f90 -o psb_c_ell_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zfcg.F90 -o psb_zfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zgcr.f90 -o psb_zgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sparsify.f90 -o psb_c_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgs.f90 -o psb_zcgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_trim.f90 -o psb_c_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_allocate_mnnz.f90 -o psb_c_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zbicg.f90 -o psb_zbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sparsify.f90 -o psb_d_sparsify.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sparsify.f90 -o psb_s_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstabl.f90 -o psb_zcgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrgmres.f90 -o psb_zrgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sparsify.f90 -o psb_z_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_csmv.f90 -o psb_c_hdia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_mold.f90 -o psb_c_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crwclip.f90 -o psb_crwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_print.f90 -o psb_c_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_aclsum.f90 -o psb_c_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drwclip.f90 -o psb_drwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srwclip.f90 -o psb_srwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_allocate_mnnz.f90 -o psb_c_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_arwsum.f90 -o psb_c_hll_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrwclip.f90 -o psb_zrwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sp_drop.f90 -o psb_c_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_colsum.f90 -o psb_c_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetblk.f90 -o psb_c_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sp_drop.f90 -o psb_d_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sp_drop.f90 -o psb_s_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sp_drop.f90 -o psb_z_sp_drop.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk_noth.F90 -o psb_dsparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetptn.f90 -o psb_c_hll_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetrow.f90 -o psb_c_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmm.f90 -o psb_c_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk.F90 -o psb_dsparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_mlk.F90 -o psb_dsparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmv.f90 -o psb_c_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnm1.f90 -o psb_c_hll_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_ft_llk.F90 -o psb_dsparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_llk.F90 -o psb_dsparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk_noth.F90 -o psb_csparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk.F90 -o psb_csparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_mlk.F90 -o psb_csparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnmi.f90 -o psb_c_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csput.f90 -o psb_c_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_ft_llk.F90 -o psb_csparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssm.f90 -o psb_c_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_llk.F90 -o psb_csparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_cbind_mod.f90 -o psb_base_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssv.f90 -o psb_c_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk_noth.F90 -o psb_zsparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_get_diag.f90 -o psb_c_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_maxval.f90 -o psb_c_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_mold.f90 -o psb_c_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk.F90 -o psb_zsparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_print.f90 -o psb_c_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_mlk.F90 -o psb_zsparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_ft_llk.F90 -o psb_zsparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_llk.F90 -o psb_zsparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk_noth.F90 -o psb_ssparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reallocate_nz.f90 -o psb_c_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reinit.f90 -o psb_c_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_rowsum.f90 -o psb_c_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scal.f90 -o psb_c_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk.F90 -o psb_ssparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_mlk.F90 -o psb_ssparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scals.f90 -o psb_c_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_dia_from_coo.f90 -o psb_c_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_ft_llk.F90 -o psb_ssparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_coo.f90 -o psb_c_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_llk.F90 -o psb_ssparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_fmt.f90 -o psb_c_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_coo.f90 -o psb_c_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ainv_bld.f90 -o psb_d_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_fmt.f90 -o psb_c_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_from_coo.f90 -o psb_c_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_to_coo.f90 -o psb_c_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_coo.f90 -o psb_c_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_fmt.f90 -o psb_c_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ainv_bld.f90 -o psb_c_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ainv_bld.f90 -o psb_s_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_coo.f90 -o psb_c_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ainv_bld.f90 -o psb_z_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invt_fact.f90 -o psb_c_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_fmt.f90 -o psb_c_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invt_fact.f90 -o psb_d_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_from_coo.f90 -o psb_d_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_to_coo.f90 -o psb_d_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_coo.f90 -o psb_d_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_fmt.f90 -o psb_d_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invt_fact.f90 -o psb_s_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_coo.f90 -o psb_d_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invt_fact.f90 -o psb_z_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_fmt.f90 -o psb_d_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invk_fact.f90 -o psb_c_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_from_coo.f90 -o psb_d_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_to_coo.f90 -o psb_d_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invk_fact.f90 -o psb_d_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_coo.f90 -o psb_d_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_fmt.f90 -o psb_d_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_coo.f90 -o psb_d_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_fmt.f90 -o psb_d_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_aclsum.f90 -o psb_d_dia_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invk_fact.f90 -o psb_s_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_allocate_mnnz.f90 -o psb_d_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_arwsum.f90 -o psb_d_dia_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_colsum.f90 -o psb_d_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetptn.f90 -o psb_d_dia_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invk_fact.f90 -o psb_z_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetrow.f90 -o psb_d_dia_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmm.f90 -o psb_d_dia_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmv.f90 -o psb_d_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_get_diag.f90 -o psb_d_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_maxval.f90 -o psb_d_dia_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_mold.f90 -o psb_d_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_print.f90 -o psb_d_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reallocate_nz.f90 -o psb_d_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reinit.f90 -o psb_d_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_rowsum.f90 -o psb_d_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scal.f90 -o psb_d_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scals.f90 -o psb_d_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_aclsum.f90 -o psb_d_ell_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_allocate_mnnz.f90 -o psb_d_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_arwsum.f90 -o psb_d_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_colsum.f90 -o psb_d_ell_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetblk.f90 -o psb_d_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetptn.f90 -o psb_d_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetrow.f90 -o psb_d_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmm.f90 -o psb_d_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmv.f90 -o psb_d_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnm1.f90 -o psb_d_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnmi.f90 -o psb_d_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csput.f90 -o psb_d_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssm.f90 -o psb_d_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssv.f90 -o psb_d_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_get_diag.f90 -o psb_d_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_maxval.f90 -o psb_d_ell_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_mold.f90 -o psb_d_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_print.f90 -o psb_d_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reallocate_nz.f90 -o psb_d_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reinit.f90 -o psb_d_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_rowsum.f90 -o psb_d_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scal.f90 -o psb_d_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scals.f90 -o psb_d_ell_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_trim.f90 -o psb_d_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_allocate_mnnz.f90 -o psb_d_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_csmv.f90 -o psb_d_hdia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_mold.f90 -o psb_d_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_print.f90 -o psb_d_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_aclsum.f90 -o psb_d_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_allocate_mnnz.f90 -o psb_d_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_arwsum.f90 -o psb_d_hll_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_colsum.f90 -o psb_d_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetblk.f90 -o psb_d_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetptn.f90 -o psb_d_hll_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetrow.f90 -o psb_d_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmm.f90 -o psb_d_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmv.f90 -o psb_d_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnm1.f90 -o psb_d_hll_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnmi.f90 -o psb_d_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csput.f90 -o psb_d_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssm.f90 -o psb_d_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssv.f90 -o psb_d_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_get_diag.f90 -o psb_d_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_maxval.f90 -o psb_d_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_mold.f90 -o psb_d_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_print.f90 -o psb_d_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reallocate_nz.f90 -o psb_d_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reinit.f90 -o psb_d_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_rowsum.f90 -o psb_d_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scal.f90 -o psb_d_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scals.f90 -o psb_d_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_dia_from_coo.f90 -o psb_d_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_coo.f90 -o psb_d_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_fmt.f90 -o psb_d_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_coo.f90 -o psb_d_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_fmt.f90 -o psb_d_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_from_coo.f90 -o psb_d_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_to_coo.f90 -o psb_d_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_coo.f90 -o psb_d_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_fmt.f90 -o psb_d_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_coo.f90 -o psb_d_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_fmt.f90 -o psb_d_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_from_coo.f90 -o psb_z_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_to_coo.f90 -o psb_z_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_coo.f90 -o psb_z_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_fmt.f90 -o psb_z_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_coo.f90 -o psb_z_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_fmt.f90 -o psb_z_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_from_coo.f90 -o psb_z_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_to_coo.f90 -o psb_z_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_coo.f90 -o psb_z_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_fmt.f90 -o psb_z_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_coo.f90 -o psb_z_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_fmt.f90 -o psb_z_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_aclsum.f90 -o psb_z_dia_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_allocate_mnnz.f90 -o psb_z_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_arwsum.f90 -o psb_z_dia_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_colsum.f90 -o psb_z_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetptn.f90 -o psb_z_dia_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetrow.f90 -o psb_z_dia_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmm.f90 -o psb_z_dia_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmv.f90 -o psb_z_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_get_diag.f90 -o psb_z_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_maxval.f90 -o psb_z_dia_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_mold.f90 -o psb_z_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_print.f90 -o psb_z_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reallocate_nz.f90 -o psb_z_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reinit.f90 -o psb_z_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_rowsum.f90 -o psb_z_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scal.f90 -o psb_z_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scals.f90 -o psb_z_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_aclsum.f90 -o psb_z_ell_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_allocate_mnnz.f90 -o psb_z_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_arwsum.f90 -o psb_z_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_colsum.f90 -o psb_z_ell_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetblk.f90 -o psb_z_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetptn.f90 -o psb_z_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetrow.f90 -o psb_z_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmm.f90 -o psb_z_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmv.f90 -o psb_z_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnm1.f90 -o psb_z_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnmi.f90 -o psb_z_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csput.f90 -o psb_z_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssm.f90 -o psb_z_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssv.f90 -o psb_z_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_get_diag.f90 -o psb_z_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_maxval.f90 -o psb_z_ell_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_mold.f90 -o psb_z_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_print.f90 -o psb_z_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reallocate_nz.f90 -o psb_z_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reinit.f90 -o psb_z_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_rowsum.f90 -o psb_z_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scal.f90 -o psb_z_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scals.f90 -o psb_z_ell_scals.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_trim.f90 -o psb_z_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_allocate_mnnz.f90 -o psb_z_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_csmv.f90 -o psb_z_hdia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_mold.f90 -o psb_z_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_print.f90 -o psb_z_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_aclsum.f90 -o psb_z_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_allocate_mnnz.f90 -o psb_z_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_arwsum.f90 -o psb_z_hll_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_colsum.f90 -o psb_z_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetblk.f90 -o psb_z_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetptn.f90 -o psb_z_hll_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetrow.f90 -o psb_z_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmm.f90 -o psb_z_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmv.f90 -o psb_z_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnm1.f90 -o psb_z_hll_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnmi.f90 -o psb_z_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csput.f90 -o psb_z_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssm.f90 -o psb_z_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssv.f90 -o psb_z_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_get_diag.f90 -o psb_z_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_maxval.f90 -o psb_z_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_mold.f90 -o psb_z_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_print.f90 -o psb_z_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reallocate_nz.f90 -o psb_z_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reinit.f90 -o psb_z_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_rowsum.f90 -o psb_z_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scal.f90 -o psb_z_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scals.f90 -o psb_z_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_dia_from_coo.f90 -o psb_z_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_coo.f90 -o psb_z_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_fmt.f90 -o psb_z_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_coo.f90 -o psb_z_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_fmt.f90 -o psb_z_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_from_coo.f90 -o psb_z_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_to_coo.f90 -o psb_z_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_coo.f90 -o psb_z_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_fmt.f90 -o psb_z_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_coo.f90 -o psb_z_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_fmt.f90 -o psb_z_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_ell_from_coo.f90 -o psi_s_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_ell_from_coo.f90 -o psi_c_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_ell_from_coo.f90 -o psi_d_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_ell_from_coo.f90 -o psi_z_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_ell_from_coo.f90 -o psi_s_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_ell_from_coo.f90 -o psi_c_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_ell_from_coo.f90 -o psi_d_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_ell_from_coo.f90 -o psi_z_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_hll_from_coo.f90 -o psi_s_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_hll_from_coo.f90 -o psi_c_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_hll_from_coo.f90 -o psi_d_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_hll_from_coo.f90 -o psi_z_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_dia_from_coo.f90 -o psi_s_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_dia_from_coo.f90 -o psi_c_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_dia_from_coo.f90 -o psi_d_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_dia_from_coo.f90 -o psi_z_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_coo_from_dia.f90 -o psi_s_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_coo_from_dia.f90 -o psi_d_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_coo_from_dia.f90 -o psi_c_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_coo_from_dia.f90 -o psi_z_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_dia_from_coo.f90 -o psi_s_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_dia_from_coo.f90 -o psi_c_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_dia_from_coo.f90 -o psi_d_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_dia_from_coo.f90 -o psi_z_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dns_mat_impl.f90 -o psb_s_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dns_mat_impl.f90 -o psb_d_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dns_mat_impl.f90 -o psb_c_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dns_mat_impl.f90 -o psb_z_dns_mat_impl.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_sprec_cbind_mod.f90 -o psb_sprec_cbind_mod.o +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_util_cbind_mod.f90 -o psb_c_util_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dprec_cbind_mod.f90 -o psb_dprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_util_cbind_mod.f90 -o psb_d_util_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cprec_cbind_mod.f90 -o psb_cprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_util_cbind_mod.f90 -o psb_s_util_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zprec_cbind_mod.f90 -o psb_zprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_util_cbind_mod.f90 -o psb_z_util_cbind_mod.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sprec.c -o psb_c_sprec.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dprec.c -o psb_c_dprec.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cprec.c -o psb_c_cprec.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zprec.c -o psb_c_zprec.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_prec_cbind_mod.f90 -o psb_prec_cbind_mod.o +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_linsolve_cbind_mod.f90 -o psb_base_linsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_slinsolve_cbind_mod.f90 -o psb_slinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dlinsolve_cbind_mod.f90 -o psb_dlinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_clinsolve_cbind_mod.f90 -o psb_clinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zlinsolve_cbind_mod.f90 -o psb_zlinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_util_cbind_mod.f90 -o psb_util_cbind_mod.o +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C cbind objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C base lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C modules objs F90="" F90COPT=" " make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» /usr/bin/install -c -p -p *.mod ../../modules /usr/bin/install -c -p -p psb_config.h psb_types.h ../../include @@ -40,34 +1444,139 @@ make -C impl objs make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» make -C internals objs make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make -C sort objs (make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") +make -C sort objs make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» (make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» (make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[3]: «psb_dscatter.o» è aggiornato. +make[3]: «psi_desc_index.o» è aggiornato. +make[3]: «psb_zscatter.o» è aggiornato. +make[3]: «psi_fnd_owner.o» è aggiornato. +make[3]: «psb_iscatter.o» è aggiornato. +make[3]: «psi_a2a_fnd_owner.o» è aggiornato. +make[3]: «psb_lscatter.o» è aggiornato. +make[3]: «psi_graph_fnd_owner.o» è aggiornato. +make[3]: «psb_cscatter.o» è aggiornato. +make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. +make[3]: «psb_sscatter.o» è aggiornato. +make[3]: «psi_symm_dep_list.o» è aggiornato. +make[3]: «psb_dscatter_a.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: «psb_zscatter_a.o» è aggiornato. +make[3]: «psb_mscatter_a.o» è aggiornato. +make[3]: «psb_escatter_a.o» è aggiornato. +make[3]: «psb_cscatter_a.o» è aggiornato. +make[3]: «psb_sscatter_a.o» è aggiornato. +make[3]: «psb_dspgather.o» è aggiornato. +make[3]: «psb_sspgather.o» è aggiornato. +make[3]: «psb_zspgather.o» è aggiornato. +make[3]: «psb_cspgather.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: «psb_icdasb.o» è aggiornato. +make[3]: «psb_ssphalo.o» è aggiornato. +make[3]: «psb_dsphalo.o» è aggiornato. +make[3]: «psb_csphalo.o» è aggiornato. +make[3]: «psb_zsphalo.o» è aggiornato. +make[3]: «psb_dcdbldext.o» è aggiornato. +make[3]: «psb_zcdbldext.o» è aggiornato. +make[3]: «psb_scdbldext.o» è aggiornato. +make[3]: «psb_ccdbldext.o» è aggiornato. +make[3]: «psb_s_remote_mat.o» è aggiornato. +make[3]: «psb_d_remote_mat.o» è aggiornato. +make[3]: «psb_c_remote_mat.o» è aggiornato. +make[3]: «psb_z_remote_mat.o» è aggiornato. +make[3]: «psb_s_remote_vect.o» è aggiornato. +make[3]: «psb_d_remote_vect.o» è aggiornato. +make[3]: «psb_c_remote_vect.o» è aggiornato. +make[3]: «psb_z_remote_vect.o» è aggiornato. +make[3]: «psb_e_remote_vect.o» è aggiornato. +make[3]: «psb_m_remote_vect.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C modules lib LIBNAME=libpsb_base.a F90="" F90COPT=" " +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +/usr/bin/install -c -p -p *.mod ../../modules +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +ar -cDr ..//libpsb_base.a psb_const_mod.o psb_cbind_const_mod.o psb_error_mod.o psb_realloc_mod.o auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o serial/psb_serial_mod.o comm/psb_neighbor_topology_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o serial/psb_vect_mod.o auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o auxil/psb_ip_reord_mod.o auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o auxil/psb_d_msort_mod.o auxil/psb_d_qsort_mod.o auxil/psb_c_hsort_mod.o auxil/psb_c_isort_mod.o auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o auxil/psb_i_hsort_x_mod.o auxil/psb_l_hsort_x_mod.o auxil/psb_s_hsort_x_mod.o auxil/psb_d_hsort_x_mod.o auxil/psb_c_hsort_x_mod.o auxil/psb_z_hsort_x_mod.o auxil/psb_s_rb_idx_tree_mod.o auxil/psb_d_rb_idx_tree_mod.o auxil/psb_c_rb_idx_tree_mod.o auxil/psb_z_rb_idx_tree_mod.o auxil/psb_rb_idx_tree_mod.o serial/psb_base_mat_mod.o serial/psb_mat_mod.o serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_glist_map_mod.o desc/psb_hash_map_mod.o desc/psb_hashval.o desc/psb_desc_mod.o auxil/psb_sort_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o tools/psb_tools_mod.o psb_penv_mod.o penv/psi_penv_mod.o penv/psi_p2p_mod.o penv/psi_m_p2p_mod.o penv/psi_i2_p2p_mod.o penv/psi_e_p2p_mod.o penv/psi_s_p2p_mod.o penv/psi_d_p2p_mod.o penv/psi_c_p2p_mod.o penv/psi_z_p2p_mod.o penv/psi_collective_mod.o penv/psi_i2_collective_mod.o penv/psi_e_collective_mod.o penv/psi_m_collective_mod.o penv/psi_s_collective_mod.o penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_mod.o psb_error_impl.o psb_timers_mod.o comm/psb_base_linmap_mod.o comm/psb_linmap_mod.o comm/psb_s_linmap_mod.o comm/psb_d_linmap_mod.o comm/psb_c_linmap_mod.o comm/psb_z_linmap_mod.o comm/psb_comm_mod.o comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o comm/psi_s_comm_v_mod.o comm/psi_d_comm_v_mod.o comm/psi_c_comm_v_mod.o comm/psi_z_comm_v_mod.o psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o psblas/psb_psblas_mod.o psb_check_mod.o desc/psb_hash_mod.o error.o psb_base_mod.o cutil.o +ranlib ..//libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make -C serial lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C impl objs +make -C sort objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make -C impl lib +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +ar -cDr ../../libpsb_base.a psb_base_mat_impl.o psb_s_base_mat_impl.o psb_d_base_mat_impl.o psb_c_base_mat_impl.o psb_z_base_mat_impl.o psb_s_csr_impl.o psb_s_coo_impl.o psb_s_csc_impl.o psb_s_mat_impl.o psb_s_rb_idx_tree_impl.o psb_d_csr_impl.o psb_d_coo_impl.o psb_d_csc_impl.o psb_d_mat_impl.o psb_d_rb_idx_tree_impl.o psb_c_csr_impl.o psb_c_coo_impl.o psb_c_csc_impl.o psb_c_mat_impl.o psb_c_rb_idx_tree_impl.o psb_z_csr_impl.o psb_z_coo_impl.o psb_z_csc_impl.o psb_z_mat_impl.o psb_z_rb_idx_tree_impl.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make -C sort lib +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +ar -cDr ../../libpsb_base.a psb_s_hsort_impl.o psb_s_isort_impl.o psb_s_msort_impl.o psb_s_qsort_impl.o psb_d_hsort_impl.o psb_d_isort_impl.o psb_d_msort_impl.o psb_d_qsort_impl.o psb_c_hsort_impl.o psb_c_isort_impl.o psb_c_msort_impl.o psb_c_qsort_impl.o psb_z_hsort_impl.o psb_z_isort_impl.o psb_z_msort_impl.o psb_z_qsort_impl.o psb_m_hsort_impl.o psb_m_isort_impl.o psb_m_msort_impl.o psb_m_qsort_impl.o psb_e_hsort_impl.o psb_e_isort_impl.o psb_e_msort_impl.o psb_e_qsort_impl.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +ar -cDr ../libpsb_base.a psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o psi_s_serial_impl.o psi_d_serial_impl.o psi_c_serial_impl.o psi_z_serial_impl.o psb_srwextd.o psb_drwextd.o psb_crwextd.o psb_zrwextd.o psb_sspspmm.o psb_dspspmm.o psb_cspspmm.o psb_zspspmm.o psb_ssymbmm.o psb_dsymbmm.o psb_csymbmm.o psb_zsymbmm.o psb_snumbmm.o psb_dnumbmm.o psb_cnumbmm.o psb_znumbmm.o smmp.o lsmmp.o psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C comm lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C internals objs +make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» make[3]: «psb_dscatter.o» è aggiornato. make[3]: «psb_zscatter.o» è aggiornato. @@ -86,9 +1595,75 @@ make[3]: «psb_sspgather.o» è aggiornato. make[3]: «psb_zspgather.o» è aggiornato. make[3]: «psb_cspgather.o» è aggiornato. make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make -C internals lib LIBNAME=libpsb_base.a +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +ar -cDr ../../libpsb_base.a psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o psi_iovrl_restr.o psi_iovrl_save.o psi_iovrl_upd.o psi_lovrl_restr.o psi_lovrl_save.o psi_lovrl_upd.o psi_sovrl_restr.o psi_sovrl_save.o psi_sovrl_upd.o psi_dovrl_restr.o psi_dovrl_save.o psi_dovrl_upd.o psi_covrl_restr.o psi_covrl_save.o psi_covrl_upd.o psi_zovrl_restr.o psi_zovrl_save.o psi_zovrl_upd.o psi_movrl_restr_a.o psi_movrl_save_a.o psi_movrl_upd_a.o psi_eovrl_restr_a.o psi_eovrl_save_a.o psi_eovrl_upd_a.o psi_sovrl_restr_a.o psi_sovrl_save_a.o psi_sovrl_upd_a.o psi_dovrl_restr_a.o psi_dovrl_save_a.o psi_dovrl_upd_a.o psi_covrl_restr_a.o psi_covrl_save_a.o psi_covrl_upd_a.o psi_zovrl_restr_a.o psi_zovrl_save_a.o psi_zovrl_upd_a.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +ar -cDr ../libpsb_base.a psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o psb_dgather.o psb_dhalo.o psb_dovrl.o psb_sgather.o psb_shalo.o psb_sovrl.o psb_igather.o psb_ihalo.o psb_iovrl.o psb_lgather.o psb_lhalo.o psb_lovrl.o psb_cgather.o psb_chalo.o psb_covrl.o psb_zgather.o psb_zhalo.o psb_zovrl.o psb_dgather_a.o psb_dhalo_a.o psb_dovrl_a.o psb_sgather_a.o psb_shalo_a.o psb_sovrl_a.o psb_mgather_a.o psb_mhalo_a.o psb_movrl_a.o psb_egather_a.o psb_ehalo_a.o psb_eovrl_a.o psb_cgather_a.o psb_chalo_a.o psb_covrl_a.o psb_zgather_a.o psb_zhalo_a.o psb_zovrl_a.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C auxil lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o make[3]: «psi_desc_index.o» è aggiornato. make[3]: «psi_fnd_owner.o» è aggiornato. make[3]: «psi_a2a_fnd_owner.o» è aggiornato. @@ -96,14 +1671,21 @@ make[3]: «psi_graph_fnd_owner.o» è aggiornato. make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. make[3]: «psi_symm_dep_list.o» è aggiornato. make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +ar -cDr ../libpsb_base.a psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o psi_crea_bnd_elem.o psi_crea_index.o psi_crea_ovr_elem.o psi_bld_tmpovrl.o psi_bld_tmphalo.o psi_sort_dl.o psi_indx_map_fnd_owner.o psi_desc_impl.o psi_hash_impl.o psi_srtlist.o psi_bld_glb_dep_list.o psi_xtr_loc_dl.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make -C psblas lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +ar -cDr ../libpsb_base.a psb_ddot.o psb_damax.o psb_dasum.o psb_daxpby.o psb_dnrm2.o psb_dnrmi.o psb_dspmm.o psb_dspsm.o psb_sspnrm1.o psb_dspnrm1.o psb_cspnrm1.o psb_zspnrm1.o psb_zamax.o psb_zasum.o psb_zaxpby.o psb_zdot.o psb_znrm2.o psb_znrmi.o psb_zspmm.o psb_zspsm.o psb_saxpby.o psb_sdot.o psb_sasum.o psb_samax.o psb_snrm2.o psb_snrmi.o psb_sspmm.o psb_sspsm.o psb_camax.o psb_casum.o psb_caxpby.o psb_cdot.o psb_cnrm2.o psb_cnrmi.o psb_cspmm.o psb_cspsm.o psb_cmlt_vect.o psb_dmlt_vect.o psb_zmlt_vect.o psb_smlt_vect.o psb_cdiv_vect.o psb_ddiv_vect.o psb_zdiv_vect.o psb_sdiv_vect.o psb_cinv_vect.o psb_dinv_vect.o psb_zinv_vect.o psb_sinv_vect.o psb_dcmp_vect.o psb_scmp_vect.o psb_ccmp_vect.o psb_zcmp_vect.o psb_cabs_vect.o psb_dabs_vect.o psb_sabs_vect.o psb_zabs_vect.o psb_cgetmatinfo.o psb_dgetmatinfo.o psb_sgetmatinfo.o psb_zgetmatinfo.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +make -C tools lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» make[3]: «psb_icdasb.o» è aggiornato. -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» make[3]: «psb_ssphalo.o» è aggiornato. -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. make[3]: «psb_dsphalo.o» è aggiornato. make[3]: «psb_csphalo.o» è aggiornato. make[3]: «psb_zsphalo.o» è aggiornato. @@ -111,96 +1693,127 @@ make[3]: «psb_dcdbldext.o» è aggiornato. make[3]: «psb_zcdbldext.o» è aggiornato. make[3]: «psb_scdbldext.o» è aggiornato. make[3]: «psb_ccdbldext.o» è aggiornato. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o +make[3]: «psb_s_remote_mat.o» è aggiornato. +make[3]: «psb_d_remote_mat.o» è aggiornato. +make[3]: «psb_c_remote_mat.o» è aggiornato. +make[3]: «psb_z_remote_mat.o» è aggiornato. +make[3]: «psb_s_remote_vect.o» è aggiornato. +make[3]: «psb_d_remote_vect.o» è aggiornato. +make[3]: «psb_c_remote_vect.o» è aggiornato. +make[3]: «psb_z_remote_vect.o» è aggiornato. +make[3]: «psb_e_remote_vect.o» è aggiornato. +make[3]: «psb_m_remote_vect.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +ar -cDr ../libpsb_base.a psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o psb_cdall.o psb_cdals.o psb_cdalv.o psb_cd_inloc.o psb_cdins.o psb_cdprt.o psb_cdren.o psb_cdrep.o psb_get_overlap.o psb_cd_lstext.o psb_cd_remap.o psb_cdcpy.o psb_cd_reinit.o psb_cd_switch_ovl_indxmap.o psb_cd_renum_block.o psb_dspalloc.o psb_dspasb.o psb_d_remap.o psb_dspfree.o psb_dspins.o psb_dsprn.o psb_sspalloc.o psb_sspasb.o psb_s_remap.o psb_sspfree.o psb_sspins.o psb_ssprn.o psb_glob_to_loc.o psb_loc_to_glob.o psb_iallc.o psb_iasb.o psb_ifree.o psb_iins.o psb_lallc.o psb_lasb.o psb_lfree.o psb_lins.o psb_sallc.o psb_sasb.o psb_sfree.o psb_sins.o psb_dallc.o psb_dasb.o psb_dfree.o psb_dins.o psb_callc.o psb_casb.o psb_cfree.o psb_cins.o psb_zallc.o psb_zasb.o psb_zfree.o psb_zins.o psb_mallc_a.o psb_masb_a.o psb_mfree_a.o psb_mins_a.o psb_eallc_a.o psb_easb_a.o psb_efree_a.o psb_eins_a.o psb_sallc_a.o psb_sasb_a.o psb_sfree_a.o psb_sins_a.o psb_dallc_a.o psb_dasb_a.o psb_dfree_a.o psb_dins_a.o psb_callc_a.o psb_casb_a.o psb_cfree_a.o psb_cins_a.o psb_zallc_a.o psb_zasb_a.o psb_zfree_a.o psb_zins_a.o psb_zspalloc.o psb_zspasb.o psb_z_remap.o psb_zspfree.o psb_zspins.o psb_zsprn.o psb_cspalloc.o psb_cspasb.o psb_c_remap.o psb_cspfree.o psb_cspins.o psb_csprn.o psb_cd_set_bld.o psb_s_map.o psb_d_map.o psb_c_map.o psb_z_map.o psb_s_par_csr_spspmm.o psb_d_par_csr_spspmm.o psb_c_par_csr_spspmm.o psb_z_par_csr_spspmm.o psb_s_glob_transpose.o psb_d_glob_transpose.o psb_c_glob_transpose.o psb_z_glob_transpose.o psb_cgetelem.o psb_dgetelem.o psb_sgetelem.o psb_zgetelem.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +/bin/cp -p ./libpsb_base.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C prec lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make -C impl lib +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +ar -cDr ../libpsb_prec.a psb_s_prec_type_impl.o psb_d_prec_type_impl.o psb_c_prec_type_impl.o psb_z_prec_type_impl.o psb_d_diagprec_impl.o psb_d_bjacprec_impl.o psb_d_nullprec_impl.o psb_d_ilu0_fact.o psb_d_iluk_fact.o psb_d_ilut_fact.o psb_dprecbld.o psb_dprecinit.o psb_s_diagprec_impl.o psb_s_bjacprec_impl.o psb_s_nullprec_impl.o psb_s_ilu0_fact.o psb_s_iluk_fact.o psb_s_ilut_fact.o psb_sprecbld.o psb_sprecinit.o psb_c_diagprec_impl.o psb_c_bjacprec_impl.o psb_c_nullprec_impl.o psb_c_ilu0_fact.o psb_c_iluk_fact.o psb_c_ilut_fact.o psb_cprecbld.o psb_cprecinit.o psb_z_diagprec_impl.o psb_z_bjacprec_impl.o psb_z_nullprec_impl.o psb_z_ilu0_fact.o psb_z_iluk_fact.o psb_z_ilut_fact.o psb_zprecbld.o psb_zprecinit.o psb_c_sparsify.o psb_d_sparsify.o psb_s_sparsify.o psb_z_sparsify.o psb_crwclip.o psb_drwclip.o psb_srwclip.o psb_zrwclip.o psb_c_sp_drop.o psb_d_sp_drop.o psb_s_sp_drop.o psb_z_sp_drop.o psb_dsparse_biconjg_llk_noth.o psb_dsparse_biconjg_llk.o psb_dsparse_biconjg_mlk.o psb_dsparse_biconjg_s_ft_llk.o psb_dsparse_biconjg_s_llk.o psb_csparse_biconjg_llk_noth.o psb_csparse_biconjg_llk.o psb_csparse_biconjg_mlk.o psb_csparse_biconjg_s_ft_llk.o psb_csparse_biconjg_s_llk.o psb_zsparse_biconjg_llk_noth.o psb_zsparse_biconjg_llk.o psb_zsparse_biconjg_mlk.o psb_zsparse_biconjg_s_ft_llk.o psb_zsparse_biconjg_s_llk.o psb_ssparse_biconjg_llk_noth.o psb_ssparse_biconjg_llk.o psb_ssparse_biconjg_mlk.o psb_ssparse_biconjg_s_ft_llk.o psb_ssparse_biconjg_s_llk.o psb_d_ainv_bld.o psb_c_ainv_bld.o psb_s_ainv_bld.o psb_z_ainv_bld.o psb_c_invt_fact.o psb_d_invt_fact.o psb_s_invt_fact.o psb_z_invt_fact.o psb_c_invk_fact.o psb_d_invk_fact.o psb_s_invk_fact.o psb_z_invk_fact.o +ranlib ../libpsb_prec.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +ar -cDr ./libpsb_prec.a psb_prec_const_mod.o psb_s_prec_type.o psb_d_prec_type.o psb_c_prec_type.o psb_z_prec_type.o psb_s_base_prec_mod.o psb_d_base_prec_mod.o psb_c_base_prec_mod.o psb_z_base_prec_mod.o psb_prec_type.o psb_prec_mod.o psb_s_prec_mod.o psb_d_prec_mod.o psb_c_prec_mod.o psb_z_prec_mod.o psb_d_diagprec.o psb_d_nullprec.o psb_d_bjacprec.o psb_s_ilu_fact_mod.o psb_s_diagprec.o psb_s_nullprec.o psb_s_bjacprec.o psb_d_ilu_fact_mod.o psb_c_diagprec.o psb_c_nullprec.o psb_c_bjacprec.o psb_c_ilu_fact_mod.o psb_z_diagprec.o psb_z_nullprec.o psb_z_bjacprec.o psb_z_ilu_fact_mod.o psb_c_ainv_fact_mod.o psb_d_ainv_fact_mod.o psb_s_ainv_fact_mod.o psb_z_ainv_fact_mod.o psb_c_ainv_tools_mod.o psb_d_ainv_tools_mod.o psb_s_ainv_tools_mod.o psb_z_ainv_tools_mod.o psb_ainv_tools_mod.o psb_biconjg_mod.o psb_c_biconjg_mod.o psb_d_biconjg_mod.o psb_s_biconjg_mod.o psb_z_biconjg_mod.o psb_c_invt_fact_mod.o psb_d_invt_fact_mod.o psb_s_invt_fact_mod.o psb_z_invt_fact_mod.o psb_c_invk_fact_mod.o psb_d_invk_fact_mod.o psb_s_invk_fact_mod.o psb_z_invk_fact_mod.o +ranlib ./libpsb_prec.a +/bin/cp -p ./libpsb_prec.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +make -C linsolve lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make -C impl lib +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +ar -cDr ../libpsb_linsolve.a psb_dkrylov.o psb_skrylov.o psb_ckrylov.o psb_zkrylov.o psb_drichardson.o psb_srichardson.o psb_crichardson.o psb_zrichardson.o psb_dcgstab.o psb_dcg.o psb_dfcg.o psb_dgcr.o psb_dcgs.o psb_dbicg.o psb_dcgstabl.o psb_drgmres.o psb_scgstab.o psb_scg.o psb_sfcg.o psb_sgcr.o psb_scgs.o psb_sbicg.o psb_scgstabl.o psb_srgmres.o psb_ccgstab.o psb_ccg.o psb_cfcg.o psb_cgcr.o psb_ccgs.o psb_cbicg.o psb_ccgstabl.o psb_crgmres.o psb_zcgstab.o psb_zcg.o psb_zfcg.o psb_zgcr.o psb_zcgs.o psb_zbicg.o psb_zcgstabl.o psb_zrgmres.o +ranlib ../libpsb_linsolve.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +ar -cDr ./libpsb_linsolve.a psb_base_linsolve_conv_mod.o psb_s_linsolve_conv_mod.o psb_c_linsolve_conv_mod.o psb_d_linsolve_conv_mod.o psb_z_linsolve_conv_mod.o psb_linsolve_mod.o +ranlib ./libpsb_linsolve.a +/bin/cp -p ./libpsb_linsolve.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +make -C util lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +/usr/bin/install -c -p -p *.mod ../modules +ar -cDr ./libpsb_util.a psb_metis_int.o psb_amd_order.o psb_util_mod.o psb_blockpart_mod.o psb_metispart_mod.o psb_partidx_mod.o psb_hbio_mod.o psb_mmio_mod.o psb_mat_dist_mod.o psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o psb_renum_mod.o psb_gps_mod.o psb_s_renum_mod.o psb_d_renum_mod.o psb_c_renum_mod.o psb_z_renum_mod.o psb_s_hbio_impl.o psb_d_hbio_impl.o psb_c_hbio_impl.o psb_z_hbio_impl.o psb_s_mmio_impl.o psb_d_mmio_impl.o psb_c_mmio_impl.o psb_z_mmio_impl.o psb_i_mmio_impl.o psb_s_mat_dist_impl.o psb_d_mat_dist_impl.o psb_c_mat_dist_impl.o psb_z_mat_dist_impl.o psb_s_renum_impl.o psb_d_renum_impl.o psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o +ranlib ./libpsb_util.a +/bin/cp -p ./libpsb_util.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +make -C cbind lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +cd base && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +ar -cDr ../libpsb_cbind.a psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o psb_c_scomm.o psb_c_dcomm.o psb_c_ccomm.o psb_c_zcomm.o +ranlib ../libpsb_cbind.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +ar -cDr ../libpsb_cbind.a psb_prec_cbind_mod.o psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o psb_c_sprec.o psb_c_dprec.o psb_c_cprec.o psb_c_zprec.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +ar -cDr ../libpsb_cbind.a psb_base_linsolve_cbind_mod.o psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +cd util && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +ar -cDr ../libpsb_cbind.a psb_util_cbind_mod.o psb_c_util_cbind_mod.o psb_d_util_cbind_mod.o psb_s_util_cbind_mod.o psb_z_util_cbind_mod.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p ./libpsb_cbind.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C ext lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +/bin/cp -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make -C impl lib LIBNAME=libpsb_ext.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +ar -cDr ../libpsb_ext.a psb_s_cp_dia_from_coo.o psb_s_cp_dia_to_coo.o psb_s_cp_ell_from_coo.o psb_s_cp_ell_from_fmt.o psb_s_cp_ell_to_coo.o psb_s_cp_ell_to_fmt.o psb_s_cp_hdia_from_coo.o psb_s_cp_hdia_to_coo.o psb_s_cp_hll_from_coo.o psb_s_cp_hll_from_fmt.o psb_s_cp_hll_to_coo.o psb_s_cp_hll_to_fmt.o psb_s_dia_aclsum.o psb_s_dia_allocate_mnnz.o psb_s_dia_arwsum.o psb_s_dia_colsum.o psb_s_dia_csgetptn.o psb_s_dia_csgetrow.o psb_s_dia_csmm.o psb_s_dia_csmv.o psb_s_dia_get_diag.o psb_s_dia_maxval.o psb_s_dia_mold.o psb_s_dia_print.o psb_s_dia_reallocate_nz.o psb_s_dia_reinit.o psb_s_dia_rowsum.o psb_s_dia_scal.o psb_s_dia_scals.o psb_s_ell_aclsum.o psb_s_ell_allocate_mnnz.o psb_s_ell_arwsum.o psb_s_ell_colsum.o psb_s_ell_csgetblk.o psb_s_ell_csgetptn.o psb_s_ell_csgetrow.o psb_s_ell_csmm.o psb_s_ell_csmv.o psb_s_ell_csnm1.o psb_s_ell_csnmi.o psb_s_ell_csput.o psb_s_ell_cssm.o psb_s_ell_cssv.o psb_s_ell_get_diag.o psb_s_ell_maxval.o psb_s_ell_mold.o psb_s_ell_print.o psb_s_ell_reallocate_nz.o psb_s_ell_reinit.o psb_s_ell_rowsum.o psb_s_ell_scal.o psb_s_ell_scals.o psb_s_ell_trim.o psb_s_hdia_allocate_mnnz.o psb_s_hdia_csmv.o psb_s_hdia_mold.o psb_s_hdia_print.o psb_s_hll_aclsum.o psb_s_hll_allocate_mnnz.o psb_s_hll_arwsum.o psb_s_hll_colsum.o psb_s_hll_csgetblk.o psb_s_hll_csgetptn.o psb_s_hll_csgetrow.o psb_s_hll_csmm.o psb_s_hll_csmv.o psb_s_hll_csnm1.o psb_s_hll_csnmi.o psb_s_hll_csput.o psb_s_hll_cssm.o psb_s_hll_cssv.o psb_s_hll_get_diag.o psb_s_hll_maxval.o psb_s_hll_mold.o psb_s_hll_print.o psb_s_hll_reallocate_nz.o psb_s_hll_reinit.o psb_s_hll_rowsum.o psb_s_hll_scal.o psb_s_hll_scals.o psb_s_mv_dia_from_coo.o psb_s_mv_ell_from_coo.o psb_s_mv_ell_from_fmt.o psb_s_mv_ell_to_coo.o psb_s_mv_ell_to_fmt.o psb_s_mv_hdia_from_coo.o psb_s_mv_hdia_to_coo.o psb_s_mv_hll_from_coo.o psb_s_mv_hll_from_fmt.o psb_s_mv_hll_to_coo.o psb_s_mv_hll_to_fmt.o psb_c_cp_dia_from_coo.o psb_c_cp_dia_to_coo.o psb_c_cp_ell_from_coo.o psb_c_cp_ell_from_fmt.o psb_c_cp_ell_to_coo.o psb_c_cp_ell_to_fmt.o psb_c_cp_hdia_from_coo.o psb_c_cp_hdia_to_coo.o psb_c_cp_hll_from_coo.o psb_c_cp_hll_from_fmt.o psb_c_cp_hll_to_coo.o psb_c_cp_hll_to_fmt.o psb_c_dia_aclsum.o psb_c_dia_allocate_mnnz.o psb_c_dia_arwsum.o psb_c_dia_colsum.o psb_c_dia_csgetptn.o psb_c_dia_csgetrow.o psb_c_dia_csmm.o psb_c_dia_csmv.o psb_c_dia_get_diag.o psb_c_dia_maxval.o psb_c_dia_mold.o psb_c_dia_print.o psb_c_dia_reallocate_nz.o psb_c_dia_reinit.o psb_c_dia_rowsum.o psb_c_dia_scal.o psb_c_dia_scals.o psb_c_ell_aclsum.o psb_c_ell_allocate_mnnz.o psb_c_ell_arwsum.o psb_c_ell_colsum.o psb_c_ell_csgetblk.o psb_c_ell_csgetptn.o psb_c_ell_csgetrow.o psb_c_ell_csmm.o psb_c_ell_csmv.o psb_c_ell_csnm1.o psb_c_ell_csnmi.o psb_c_ell_csput.o psb_c_ell_cssm.o psb_c_ell_cssv.o psb_c_ell_get_diag.o psb_c_ell_maxval.o psb_c_ell_mold.o psb_c_ell_print.o psb_c_ell_reallocate_nz.o psb_c_ell_reinit.o psb_c_ell_rowsum.o psb_c_ell_scal.o psb_c_ell_scals.o psb_c_ell_trim.o psb_c_hdia_allocate_mnnz.o psb_c_hdia_csmv.o psb_c_hdia_mold.o psb_c_hdia_print.o psb_c_hll_aclsum.o psb_c_hll_allocate_mnnz.o psb_c_hll_arwsum.o psb_c_hll_colsum.o psb_c_hll_csgetblk.o psb_c_hll_csgetptn.o psb_c_hll_csgetrow.o psb_c_hll_csmm.o psb_c_hll_csmv.o psb_c_hll_csnm1.o psb_c_hll_csnmi.o psb_c_hll_csput.o psb_c_hll_cssm.o psb_c_hll_cssv.o psb_c_hll_get_diag.o psb_c_hll_maxval.o psb_c_hll_mold.o psb_c_hll_print.o psb_c_hll_reallocate_nz.o psb_c_hll_reinit.o psb_c_hll_rowsum.o psb_c_hll_scal.o psb_c_hll_scals.o psb_c_mv_dia_from_coo.o psb_c_mv_ell_from_coo.o psb_c_mv_ell_from_fmt.o psb_c_mv_ell_to_coo.o psb_c_mv_ell_to_fmt.o psb_c_mv_hdia_from_coo.o psb_c_mv_hdia_to_coo.o psb_c_mv_hll_from_coo.o psb_c_mv_hll_from_fmt.o psb_c_mv_hll_to_coo.o psb_c_mv_hll_to_fmt.o psb_d_cp_dia_from_coo.o psb_d_cp_dia_to_coo.o psb_d_cp_ell_from_coo.o psb_d_cp_ell_from_fmt.o psb_d_cp_ell_to_coo.o psb_d_cp_ell_to_fmt.o psb_d_cp_hdia_from_coo.o psb_d_cp_hdia_to_coo.o psb_d_cp_hll_from_coo.o psb_d_cp_hll_from_fmt.o psb_d_cp_hll_to_coo.o psb_d_cp_hll_to_fmt.o psb_d_dia_aclsum.o psb_d_dia_allocate_mnnz.o psb_d_dia_arwsum.o psb_d_dia_colsum.o psb_d_dia_csgetptn.o psb_d_dia_csgetrow.o psb_d_dia_csmm.o psb_d_dia_csmv.o psb_d_dia_get_diag.o psb_d_dia_maxval.o psb_d_dia_mold.o psb_d_dia_print.o psb_d_dia_reallocate_nz.o psb_d_dia_reinit.o psb_d_dia_rowsum.o psb_d_dia_scal.o psb_d_dia_scals.o psb_d_ell_aclsum.o psb_d_ell_allocate_mnnz.o psb_d_ell_arwsum.o psb_d_ell_colsum.o psb_d_ell_csgetblk.o psb_d_ell_csgetptn.o psb_d_ell_csgetrow.o psb_d_ell_csmm.o psb_d_ell_csmv.o psb_d_ell_csnm1.o psb_d_ell_csnmi.o psb_d_ell_csput.o psb_d_ell_cssm.o psb_d_ell_cssv.o psb_d_ell_get_diag.o psb_d_ell_maxval.o psb_d_ell_mold.o psb_d_ell_print.o psb_d_ell_reallocate_nz.o psb_d_ell_reinit.o psb_d_ell_rowsum.o psb_d_ell_scal.o psb_d_ell_scals.o psb_d_ell_trim.o psb_d_hdia_allocate_mnnz.o psb_d_hdia_csmv.o psb_d_hdia_mold.o psb_d_hdia_print.o psb_d_hll_aclsum.o psb_d_hll_allocate_mnnz.o psb_d_hll_arwsum.o psb_d_hll_colsum.o psb_d_hll_csgetblk.o psb_d_hll_csgetptn.o psb_d_hll_csgetrow.o psb_d_hll_csmm.o psb_d_hll_csmv.o psb_d_hll_csnm1.o psb_d_hll_csnmi.o psb_d_hll_csput.o psb_d_hll_cssm.o psb_d_hll_cssv.o psb_d_hll_get_diag.o psb_d_hll_maxval.o psb_d_hll_mold.o psb_d_hll_print.o psb_d_hll_reallocate_nz.o psb_d_hll_reinit.o psb_d_hll_rowsum.o psb_d_hll_scal.o psb_d_hll_scals.o psb_d_mv_dia_from_coo.o psb_d_mv_ell_from_coo.o psb_d_mv_ell_from_fmt.o psb_d_mv_ell_to_coo.o psb_d_mv_ell_to_fmt.o psb_d_mv_hdia_from_coo.o psb_d_mv_hdia_to_coo.o psb_d_mv_hll_from_coo.o psb_d_mv_hll_from_fmt.o psb_d_mv_hll_to_coo.o psb_d_mv_hll_to_fmt.o psb_z_cp_dia_from_coo.o psb_z_cp_dia_to_coo.o psb_z_cp_ell_from_coo.o psb_z_cp_ell_from_fmt.o psb_z_cp_ell_to_coo.o psb_z_cp_ell_to_fmt.o psb_z_cp_hdia_from_coo.o psb_z_cp_hdia_to_coo.o psb_z_cp_hll_from_coo.o psb_z_cp_hll_from_fmt.o psb_z_cp_hll_to_coo.o psb_z_cp_hll_to_fmt.o psb_z_dia_aclsum.o psb_z_dia_allocate_mnnz.o psb_z_dia_arwsum.o psb_z_dia_colsum.o psb_z_dia_csgetptn.o psb_z_dia_csgetrow.o psb_z_dia_csmm.o psb_z_dia_csmv.o psb_z_dia_get_diag.o psb_z_dia_maxval.o psb_z_dia_mold.o psb_z_dia_print.o psb_z_dia_reallocate_nz.o psb_z_dia_reinit.o psb_z_dia_rowsum.o psb_z_dia_scal.o psb_z_dia_scals.o psb_z_ell_aclsum.o psb_z_ell_allocate_mnnz.o psb_z_ell_arwsum.o psb_z_ell_colsum.o psb_z_ell_csgetblk.o psb_z_ell_csgetptn.o psb_z_ell_csgetrow.o psb_z_ell_csmm.o psb_z_ell_csmv.o psb_z_ell_csnm1.o psb_z_ell_csnmi.o psb_z_ell_csput.o psb_z_ell_cssm.o psb_z_ell_cssv.o psb_z_ell_get_diag.o psb_z_ell_maxval.o psb_z_ell_mold.o psb_z_ell_print.o psb_z_ell_reallocate_nz.o psb_z_ell_reinit.o psb_z_ell_rowsum.o psb_z_ell_scal.o psb_z_ell_scals.o psb_z_ell_trim.o psb_z_hdia_allocate_mnnz.o psb_z_hdia_csmv.o psb_z_hdia_mold.o psb_z_hdia_print.o psb_z_hll_aclsum.o psb_z_hll_allocate_mnnz.o psb_z_hll_arwsum.o psb_z_hll_colsum.o psb_z_hll_csgetblk.o psb_z_hll_csgetptn.o psb_z_hll_csgetrow.o psb_z_hll_csmm.o psb_z_hll_csmv.o psb_z_hll_csnm1.o psb_z_hll_csnmi.o psb_z_hll_csput.o psb_z_hll_cssm.o psb_z_hll_cssv.o psb_z_hll_get_diag.o psb_z_hll_maxval.o psb_z_hll_mold.o psb_z_hll_print.o psb_z_hll_reallocate_nz.o psb_z_hll_reinit.o psb_z_hll_rowsum.o psb_z_hll_scal.o psb_z_hll_scals.o psb_z_mv_dia_from_coo.o psb_z_mv_ell_from_coo.o psb_z_mv_ell_from_fmt.o psb_z_mv_ell_to_coo.o psb_z_mv_ell_to_fmt.o psb_z_mv_hdia_from_coo.o psb_z_mv_hdia_to_coo.o psb_z_mv_hll_from_coo.o psb_z_mv_hll_from_fmt.o psb_z_mv_hll_to_coo.o psb_z_mv_hll_to_fmt.o psi_s_xtr_ell_from_coo.o psi_c_xtr_ell_from_coo.o psi_d_xtr_ell_from_coo.o psi_z_xtr_ell_from_coo.o psi_s_convert_ell_from_coo.o psi_c_convert_ell_from_coo.o psi_d_convert_ell_from_coo.o psi_z_convert_ell_from_coo.o psi_s_convert_hll_from_coo.o psi_c_convert_hll_from_coo.o psi_d_convert_hll_from_coo.o psi_z_convert_hll_from_coo.o psi_s_xtr_dia_from_coo.o psi_c_xtr_dia_from_coo.o psi_d_xtr_dia_from_coo.o psi_z_xtr_dia_from_coo.o psi_s_xtr_coo_from_dia.o psi_d_xtr_coo_from_dia.o psi_c_xtr_coo_from_dia.o psi_z_xtr_coo_from_dia.o psi_s_convert_dia_from_coo.o psi_c_convert_dia_from_coo.o psi_d_convert_dia_from_coo.o psi_z_convert_dia_from_coo.o psb_s_dns_mat_impl.o psb_d_dns_mat_impl.o psb_c_dns_mat_impl.o psb_z_dns_mat_impl.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +ar -cDr libpsb_ext.a psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o psb_s_hll_mat_mod.o psb_s_ell_mat_mod.o psb_c_hll_mat_mod.o psb_c_ell_mat_mod.o psb_z_hll_mat_mod.o psb_z_ell_mat_mod.o psb_d_dia_mat_mod.o psb_d_hdia_mat_mod.o psb_s_dia_mat_mod.o psb_s_hdia_mat_mod.o psb_c_dia_mat_mod.o psb_c_hdia_mat_mod.o psb_z_dia_mat_mod.o psb_z_hdia_mat_mod.o psb_s_dns_mat_mod.o psb_d_dns_mat_mod.o psb_c_dns_mat_mod.o psb_z_dns_mat_mod.o psi_ext_util_mod.o psi_i_ext_util_mod.o psi_s_ext_util_mod.o psi_c_ext_util_mod.o psi_d_ext_util_mod.o psi_z_ext_util_mod.o psb_ext_mod.o +/bin/cp -p libpsb_ext.a ../lib make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o -psb_dspmm.f90:600:88: - - 600 | call psi_swapdata(flag=ior(psb_swap_send_,psb_swap_recv_), beta=dzero, y=x%v, desc_a=desc_a, & - | 1 -Error: Unexpected â€%’ for nonderived-type variable â€x’ at (1) -psb_dspmm.f90:618:5: - - 618 | end if - | 1 -Error: Expecting END SUBROUTINE statement at (1) -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o -psb_sovrl.f90:316:48: - - 316 | & desc_a,iwork,info,data=psb_comm_ovr_) - | 1 -Error: There is no specific subroutine for the generic â€psi_swapdata’ at (1) -make[2]: *** [../../Make.inc:114: psb_sovrl.o] Errore 1 -make[2]: *** Attesa per i processi non terminati.... -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o -psb_dspsm.f90:212:57: - - 212 | & done,y%v,desc_a,iwork,info,data=psb_comm_ovr_) - | 1 -Error: There is no specific subroutine for the generic â€psi_swapdata’ at (1) -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o -make[2]: *** [../../Make.inc:114: psb_samax.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_dspsm.o] Interruzione -make[1]: *** [../Make.inc:116: psb_metispart_mod.o] Interruzione -make[3]: *** [../../../Make.inc:116: psb_s_base_mat_impl.o] Interruzione -make[3]: *** [../../../Make.inc:116: psb_d_base_mat_impl.o] Interruzione -make[3]: *** [../../../Make.inc:116: psb_c_base_mat_impl.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_lins.o] Interruzione -make[3]: *** [../../../Make.inc:116: psb_z_base_mat_impl.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_sasb.o] Interruzione -make[3]: *** [../../../Make.inc:116: psb_s_csr_impl.o] Interruzione -make[3]: *** [../../../Make.inc:116: psb_s_coo_impl.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_dspmm.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_zspmm.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_saxpby.o] Interruzione -make[4]: *** wait: Nessun processo figlio. Arresto. -make[4]: *** Attesa per i processi non terminati.... -make[4]: *** wait: Nessun processo figlio. Arresto. -make[2]: *** [../../Make.inc:114: psb_sallc.o] Interruzione -make[3]: *** [../../../Make.inc:114: psi_sovrl_restr.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_zspsm.o] Interruzione -make[2]: *** [../../Make.inc:116: psb_dspins.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_sdot.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_sasum.o] Interruzione -make[3]: *** [../../Make.inc:116: psb_c_remote_mat.o] Interruzione -make[1]: *** [../Make.inc:114: psb_s_bjacprec.o] Interruzione -make[2]: *** [../../Make.inc:114: psb_zgeprt.o] Interruzione -make[2]: *** [Makefile:34: impld] Interruzione -make[2]: *** wait: Nessun processo figlio. Arresto. -make[2]: *** Attesa per i processi non terminati.... -make[1]: *** [../Make.inc:114: psb_gps_mod.o] Interruzione -make[2]: *** wait: Nessun processo figlio. Arresto. -make[1]: *** [../Make.inc:114: psb_c_bjacprec.o] Interruzione -make[1]: *** wait: Nessun processo figlio. Arresto. -make[1]: *** Attesa per i processi non terminati.... -make[1]: *** wait: Nessun processo figlio. Arresto. -make[1]: *** [Makefile:31: pb] Interruzione -make[3]: *** [Makefile:41: mpfobjs] Errore 2 -make[1]: *** [../Make.inc:114: psb_z_bjacprec.o] Interruzione -make[1]: *** wait: Nessun processo figlio. Arresto. -make[1]: *** Attesa per i processi non terminati.... -make[1]: *** wait: Nessun processo figlio. Arresto. -make[1]: *** [Makefile:25: sr] Errore 2 -make: *** [Makefile:21: utilmods] Errore 2 -make[2]: *** [Makefile:51: mpfobjs] Interruzione -make: *** [Makefile:17: precmods] Errore 2 -make[1]: *** [Makefile:33: tl] Interruzione -make[2]: *** [Makefile:38: interns] Interruzione -make[1]: *** [Makefile:27: cm] Interruzione -make: *** [Makefile:56: based] Interruzione +===================================== +PSBLAS libraries Compilation Successful. diff --git a/prec/impl/psb_c_bjacprec_impl.f90 b/prec/impl/psb_c_bjacprec_impl.f90 index 32baf385c..2810565c9 100644 --- a/prec/impl/psb_c_bjacprec_impl.f90 +++ b/prec/impl/psb_c_bjacprec_impl.f90 @@ -71,7 +71,7 @@ subroutine psb_c_bjac_dump(prec,info,prefix,head) end subroutine psb_c_bjac_dump -subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_c_bjacprec, psb_protect_name => psb_c_bjac_apply_vect implicit none @@ -82,11 +82,10 @@ subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_c_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) ! Local variables integer(psb_ipk_) :: n_row,n_col - complex(psb_spk_), pointer :: ww(:), aux(:) + complex(psb_spk_), pointer :: ww(:) type(psb_c_vect_type) :: wv, wv1 type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me @@ -140,17 +139,7 @@ subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) end if - if (n_col <= size(work)) then - ww => work(1:n_col) - if ((4*n_col+n_col) <= size(work)) then - aux => work(n_col+1:) - else - allocate(aux(4*n_col),stat=info) - - endif - else - allocate(ww(n_col),aux(4*n_col),stat=info) - endif + allocate(ww(n_col),stat=info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Allocate') @@ -168,28 +157,28 @@ subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spsm(cone,prec%av(psb_l_pr_),x,czero,wv,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_,work=aux) + & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_u_pr_),wv,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_) case('T') call psb_spsm(cone,prec%av(psb_u_pr_),x,czero,wv,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_, work=aux) + & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),wv,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_) case('C') call psb_spsm(cone,prec%av(psb_u_pr_),x,czero,wv,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_) call wv1%mlt(cone,prec%dv,wv,czero,info,conjgx=trans_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),wv1,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_) end select if (info /= psb_success_) then @@ -203,20 +192,20 @@ subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spmm(cone,prec%av(psb_l_pr_),x,czero,wv,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false.) if (info == psb_success_) call wv1%mlt(cone,prec%dv,wv,czero,info) if(info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1,& - & beta,y,desc_data,info, trans=trans_, work=aux,doswap=.false.) + & beta,y,desc_data,info, trans=trans_,doswap=.false.) case('T','C') call psb_spmm(cone,prec%av(psb_l_pr_),x,czero,wv,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false.) if (info == psb_success_) call wv1%mlt(cone,prec%dv,wv,czero,info) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1, & - & beta,y,desc_data,info,trans=trans_,work=aux,doswap=.false.) + & beta,y,desc_data,info,trans=trans_,doswap=.false.) end select if (info /= psb_success_) then @@ -235,15 +224,8 @@ subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) call psb_halo(y,desc_data,info,data=psb_comm_mov_) if (do_alloc_wrk) call prec%free_wrk(info) - if (n_col <= size(work)) then - if ((4*n_col+n_col) <= size(work)) then - else - deallocate(aux) - endif - else - deallocate(ww,aux) - endif + deallocate(ww) call psb_erractionrestore(err_act) return diff --git a/prec/impl/psb_c_diagprec_impl.f90 b/prec/impl/psb_c_diagprec_impl.f90 index c16f94658..53b3ad7a3 100644 --- a/prec/impl/psb_c_diagprec_impl.f90 +++ b/prec/impl/psb_c_diagprec_impl.f90 @@ -65,7 +65,7 @@ subroutine psb_c_diag_dump(prec,info,prefix,head) end subroutine psb_c_diag_dump -subroutine psb_c_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_c_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_c_diagprec, psb_protect_name => psb_c_diag_apply_vect implicit none @@ -76,7 +76,6 @@ subroutine psb_c_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_c_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) integer(psb_ipk_) :: err_act, nrow, ierr(5) character(len=20) :: name='c_diag_prec_apply' complex(psb_spk_), pointer :: ww(:) diff --git a/prec/impl/psb_c_nullprec_impl.f90 b/prec/impl/psb_c_nullprec_impl.f90 index 9d87522ad..136eba2b2 100644 --- a/prec/impl/psb_c_nullprec_impl.f90 +++ b/prec/impl/psb_c_nullprec_impl.f90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -subroutine psb_c_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_c_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_c_nullprec, psb_protect_name => psb_c_null_apply_vect implicit none @@ -40,7 +40,6 @@ subroutine psb_c_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_c_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) integer(psb_ipk_) :: err_act, nrow, ierr(5) character(len=20) :: name='c_null_prec_apply' diff --git a/prec/impl/psb_c_prec_type_impl.f90 b/prec/impl/psb_c_prec_type_impl.f90 index e82d7dca0..64dccd5f3 100644 --- a/prec/impl/psb_c_prec_type_impl.f90 +++ b/prec/impl/psb_c_prec_type_impl.f90 @@ -62,7 +62,7 @@ !!$ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans,work) +subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_c_prec_type, psb_protect_name => psb_c_apply2_vect implicit none @@ -72,7 +72,6 @@ subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans,work) type(psb_c_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) character :: trans_ complex(psb_spk_), pointer :: work_(:) @@ -94,36 +93,13 @@ subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") goto 9999 end if - call prec%prec%apply(cone,x,czero,y,desc_data,info,& - & trans=trans_,work=work_) - - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if + call prec%prec%apply(cone,x,czero,y,desc_data,info,trans=trans_) call psb_erractionrestore(err_act) return @@ -133,20 +109,18 @@ subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans,work) end subroutine psb_c_apply2_vect -subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans,work) +subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans) use psb_base_mod use psb_c_prec_type, psb_protect_name => psb_c_apply1_vect implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_cprec_type), intent(inout) :: prec - type(psb_c_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_cprec_type), intent(inout) :: prec + type(psb_c_vect_type),intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans type(psb_c_vect_type) :: ww character :: trans_ - complex(psb_spk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -165,18 +139,6 @@ subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") @@ -184,19 +146,9 @@ subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans,work) end if call psb_geasb(ww,desc_data,info,mold=x%v,scratch=.true.) - if (info == 0) call prec%prec%apply(cone,x,czero,ww,desc_data,info,& - & trans=trans_,work=work_) + if (info == 0) call prec%prec%apply(cone,x,czero,ww,desc_data,info,trans=trans_) if (info == 0) call psb_geaxpby(cone,ww,czero,x,desc_data,info) call psb_gefree(ww,desc_data,info) - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if call psb_erractionrestore(err_act) return diff --git a/prec/impl/psb_d_bjacprec_impl.f90 b/prec/impl/psb_d_bjacprec_impl.f90 index ec866dbe1..3664704c1 100644 --- a/prec/impl/psb_d_bjacprec_impl.f90 +++ b/prec/impl/psb_d_bjacprec_impl.f90 @@ -71,7 +71,7 @@ subroutine psb_d_bjac_dump(prec,info,prefix,head) end subroutine psb_d_bjac_dump -subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_d_bjacprec, psb_protect_name => psb_d_bjac_apply_vect implicit none @@ -82,11 +82,10 @@ subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) ! Local variables integer(psb_ipk_) :: n_row,n_col - real(psb_dpk_), pointer :: ww(:), aux(:) + real(psb_dpk_), pointer :: ww(:) type(psb_d_vect_type) :: wv, wv1 type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me @@ -140,17 +139,7 @@ subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) end if - if (n_col <= size(work)) then - ww => work(1:n_col) - if ((4*n_col+n_col) <= size(work)) then - aux => work(n_col+1:) - else - allocate(aux(4*n_col),stat=info) - - endif - else - allocate(ww(n_col),aux(4*n_col),stat=info) - endif + allocate(ww(n_col),stat=info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Allocate') @@ -168,28 +157,28 @@ subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spsm(done,prec%av(psb_l_pr_),x,dzero,wv,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_,work=aux) + & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_u_pr_),wv,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_) case('T') call psb_spsm(done,prec%av(psb_u_pr_),x,dzero,wv,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_, work=aux) + & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),wv,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_) case('C') call psb_spsm(done,prec%av(psb_u_pr_),x,dzero,wv,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_) call wv1%mlt(done,prec%dv,wv,dzero,info,conjgx=trans_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),wv1,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_) end select if (info /= psb_success_) then @@ -203,20 +192,20 @@ subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spmm(done,prec%av(psb_l_pr_),x,dzero,wv,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false.) if (info == psb_success_) call wv1%mlt(done,prec%dv,wv,dzero,info) if(info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1,& - & beta,y,desc_data,info, trans=trans_, work=aux,doswap=.false.) + & beta,y,desc_data,info, trans=trans_,doswap=.false.) case('T','C') call psb_spmm(done,prec%av(psb_l_pr_),x,dzero,wv,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false.) if (info == psb_success_) call wv1%mlt(done,prec%dv,wv,dzero,info) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1, & - & beta,y,desc_data,info,trans=trans_,work=aux,doswap=.false.) + & beta,y,desc_data,info,trans=trans_,doswap=.false.) end select if (info /= psb_success_) then @@ -234,16 +223,7 @@ subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) call psb_halo(y,desc_data,info,data=psb_comm_mov_) - if (do_alloc_wrk) call prec%free_wrk(info) - if (n_col <= size(work)) then - if ((4*n_col+n_col) <= size(work)) then - else - deallocate(aux) - endif - else - deallocate(ww,aux) - endif - + deallocate(ww) call psb_erractionrestore(err_act) return @@ -350,7 +330,7 @@ subroutine psb_d_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spsm(done,prec%av(psb_l_pr_),x,dzero,ww,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_,work=aux) + & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_, work=aux) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_u_pr_),ww,& & beta,y,desc_data,info,& & trans=trans_,scale='U',choice=psb_none_, work=aux) @@ -360,7 +340,7 @@ subroutine psb_d_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_, work=aux) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),ww,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_, work=aux) case('C') @@ -369,7 +349,7 @@ subroutine psb_d_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) ww(1:n_row) = ww(1:n_row)*(prec%dv%v%v(1:n_row)) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),ww,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_, work=aux) end select if (info /= psb_success_) then @@ -384,27 +364,26 @@ subroutine psb_d_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) case('N') call psb_spmm(done,prec%av(psb_l_pr_),x,dzero,ww,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false., work=aux) ww(1:n_row) = ww(1:n_row) * prec%dv%v%v(1:n_row) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false., work=aux) case('T') call psb_spmm(done,prec%av(psb_u_pr_),x,dzero,ww,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false., work=aux) ww(1:n_row) = ww(1:n_row) * prec%dv%v%v(1:n_row) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) - + & trans=trans_,doswap=.false., work=aux) case('C') call psb_spmm(done,prec%av(psb_u_pr_),x,dzero,ww,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false., work=aux) ww(1:n_row) = ww(1:n_row) * (prec%dv%v%v(1:n_row)) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false., work=aux) end select diff --git a/prec/impl/psb_d_diagprec_impl.f90 b/prec/impl/psb_d_diagprec_impl.f90 index 3a6e32f9e..2300c571b 100644 --- a/prec/impl/psb_d_diagprec_impl.f90 +++ b/prec/impl/psb_d_diagprec_impl.f90 @@ -65,7 +65,7 @@ subroutine psb_d_diag_dump(prec,info,prefix,head) end subroutine psb_d_diag_dump -subroutine psb_d_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_d_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_d_diagprec, psb_protect_name => psb_d_diag_apply_vect implicit none @@ -76,7 +76,6 @@ subroutine psb_d_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) integer(psb_ipk_) :: err_act, nrow, ierr(5) character(len=20) :: name='d_diag_prec_apply' real(psb_dpk_), pointer :: ww(:) diff --git a/prec/impl/psb_d_nullprec_impl.f90 b/prec/impl/psb_d_nullprec_impl.f90 index b98229328..7bcdf127a 100644 --- a/prec/impl/psb_d_nullprec_impl.f90 +++ b/prec/impl/psb_d_nullprec_impl.f90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -subroutine psb_d_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_d_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_d_nullprec, psb_protect_name => psb_d_null_apply_vect implicit none @@ -40,7 +40,6 @@ subroutine psb_d_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) integer(psb_ipk_) :: err_act, nrow, ierr(5) character(len=20) :: name='c_null_prec_apply' diff --git a/prec/impl/psb_d_prec_type_impl.f90 b/prec/impl/psb_d_prec_type_impl.f90 index 69e480797..617156769 100644 --- a/prec/impl/psb_d_prec_type_impl.f90 +++ b/prec/impl/psb_d_prec_type_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -45,7 +45,7 @@ !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -62,7 +62,7 @@ !!$ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans,work) +subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_d_prec_type, psb_protect_name => psb_d_apply2_vect implicit none @@ -72,10 +72,8 @@ subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans,work) type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) character :: trans_ - real(psb_dpk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -94,36 +92,13 @@ subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") goto 9999 end if - call prec%prec%apply(done,x,dzero,y,desc_data,info,& - & trans=trans_,work=work_) - - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if + call prec%prec%apply(done,x,dzero,y,desc_data,info,trans=trans_) call psb_erractionrestore(err_act) return @@ -133,7 +108,7 @@ subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans,work) end subroutine psb_d_apply2_vect -subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans,work) +subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans) use psb_base_mod use psb_d_prec_type, psb_protect_name => psb_d_apply1_vect implicit none @@ -142,11 +117,9 @@ subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans,work) type(psb_d_vect_type),intent(inout) :: x integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) type(psb_d_vect_type) :: ww character :: trans_ - real(psb_dpk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -165,18 +138,6 @@ subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") @@ -184,19 +145,9 @@ subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans,work) end if call psb_geasb(ww,desc_data,info,mold=x%v,scratch=.true.) - if (info == 0) call prec%prec%apply(done,x,dzero,ww,desc_data,info,& - & trans=trans_,work=work_) + if (info == 0) call prec%prec%apply(done,x,dzero,ww,desc_data,info,trans=trans_) if (info == 0) call psb_geaxpby(done,ww,dzero,x,desc_data,info) call psb_gefree(ww,desc_data,info) - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if call psb_erractionrestore(err_act) return diff --git a/prec/impl/psb_s_bjacprec_impl.f90 b/prec/impl/psb_s_bjacprec_impl.f90 index d4a4fd171..5c4140602 100644 --- a/prec/impl/psb_s_bjacprec_impl.f90 +++ b/prec/impl/psb_s_bjacprec_impl.f90 @@ -71,7 +71,7 @@ subroutine psb_s_bjac_dump(prec,info,prefix,head) end subroutine psb_s_bjac_dump -subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_s_bjacprec, psb_protect_name => psb_s_bjac_apply_vect implicit none @@ -82,11 +82,10 @@ subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_s_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) ! Local variables integer(psb_ipk_) :: n_row,n_col - real(psb_spk_), pointer :: ww(:), aux(:) + real(psb_spk_), pointer :: ww(:) type(psb_s_vect_type) :: wv, wv1 type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me @@ -139,18 +138,7 @@ subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) goto 9999 end if - - if (n_col <= size(work)) then - ww => work(1:n_col) - if ((4*n_col+n_col) <= size(work)) then - aux => work(n_col+1:) - else - allocate(aux(4*n_col),stat=info) - - endif - else - allocate(ww(n_col),aux(4*n_col),stat=info) - endif + allocate(ww(n_col),stat=info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Allocate') @@ -168,28 +156,28 @@ subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spsm(sone,prec%av(psb_l_pr_),x,szero,wv,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_,work=aux) + & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_u_pr_),wv,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_) case('T') call psb_spsm(sone,prec%av(psb_u_pr_),x,szero,wv,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_, work=aux) + & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),wv,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_) case('C') call psb_spsm(sone,prec%av(psb_u_pr_),x,szero,wv,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_) call wv1%mlt(sone,prec%dv,wv,szero,info,conjgx=trans_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),wv1,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_) end select if (info /= psb_success_) then @@ -203,20 +191,20 @@ subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spmm(sone,prec%av(psb_l_pr_),x,szero,wv,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false.) if (info == psb_success_) call wv1%mlt(sone,prec%dv,wv,szero,info) if(info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1,& - & beta,y,desc_data,info, trans=trans_, work=aux,doswap=.false.) + & beta,y,desc_data,info, trans=trans_,doswap=.false.) case('T','C') call psb_spmm(sone,prec%av(psb_l_pr_),x,szero,wv,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false.) if (info == psb_success_) call wv1%mlt(sone,prec%dv,wv,szero,info) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1, & - & beta,y,desc_data,info,trans=trans_,work=aux,doswap=.false.) + & beta,y,desc_data,info,trans=trans_,doswap=.false.) end select if (info /= psb_success_) then @@ -235,15 +223,8 @@ subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) call psb_halo(y,desc_data,info,data=psb_comm_mov_) if (do_alloc_wrk) call prec%free_wrk(info) - if (n_col <= size(work)) then - if ((4*n_col+n_col) <= size(work)) then - else - deallocate(aux) - endif - else - deallocate(ww,aux) - endif + deallocate(ww) call psb_erractionrestore(err_act) return @@ -350,7 +331,7 @@ subroutine psb_s_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spsm(sone,prec%av(psb_l_pr_),x,szero,ww,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_,work=aux) + & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_, work=aux) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_u_pr_),ww,& & beta,y,desc_data,info,& & trans=trans_,scale='U',choice=psb_none_, work=aux) @@ -360,7 +341,7 @@ subroutine psb_s_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_, work=aux) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),ww,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_, work=aux) case('C') @@ -369,7 +350,7 @@ subroutine psb_s_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) ww(1:n_row) = ww(1:n_row)*(prec%dv%v%v(1:n_row)) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),ww,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_, work=aux) end select if (info /= psb_success_) then @@ -384,28 +365,25 @@ subroutine psb_s_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) case('N') call psb_spmm(sone,prec%av(psb_l_pr_),x,szero,ww,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false., work=aux) ww(1:n_row) = ww(1:n_row) * prec%dv%v%v(1:n_row) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) - + & trans=trans_,doswap=.false., work=aux) case('T') call psb_spmm(sone,prec%av(psb_u_pr_),x,szero,ww,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false., work=aux) ww(1:n_row) = ww(1:n_row) * prec%dv%v%v(1:n_row) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) - + & trans=trans_,doswap=.false., work=aux) case('C') call psb_spmm(sone,prec%av(psb_u_pr_),x,szero,ww,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false., work=aux) ww(1:n_row) = ww(1:n_row) * (prec%dv%v%v(1:n_row)) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) - + & trans=trans_,doswap=.false., work=aux) end select diff --git a/prec/impl/psb_s_diagprec_impl.f90 b/prec/impl/psb_s_diagprec_impl.f90 index 4074cbff9..cd145576d 100644 --- a/prec/impl/psb_s_diagprec_impl.f90 +++ b/prec/impl/psb_s_diagprec_impl.f90 @@ -65,7 +65,7 @@ subroutine psb_s_diag_dump(prec,info,prefix,head) end subroutine psb_s_diag_dump -subroutine psb_s_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_s_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_s_diagprec, psb_protect_name => psb_s_diag_apply_vect implicit none @@ -76,7 +76,6 @@ subroutine psb_s_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_s_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) integer(psb_ipk_) :: err_act, nrow, ierr(5) character(len=20) :: name='s_diag_prec_apply' real(psb_spk_), pointer :: ww(:) diff --git a/prec/impl/psb_s_nullprec_impl.f90 b/prec/impl/psb_s_nullprec_impl.f90 index f95c34fd2..ebb3eda4a 100644 --- a/prec/impl/psb_s_nullprec_impl.f90 +++ b/prec/impl/psb_s_nullprec_impl.f90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -subroutine psb_s_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_s_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_s_nullprec, psb_protect_name => psb_s_null_apply_vect implicit none @@ -40,7 +40,6 @@ subroutine psb_s_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_s_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) integer(psb_ipk_) :: err_act, nrow, ierr(5) character(len=20) :: name='c_null_prec_apply' diff --git a/prec/impl/psb_s_prec_type_impl.f90 b/prec/impl/psb_s_prec_type_impl.f90 index 4272ba753..ab7e5d8e1 100644 --- a/prec/impl/psb_s_prec_type_impl.f90 +++ b/prec/impl/psb_s_prec_type_impl.f90 @@ -62,7 +62,7 @@ !!$ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans,work) +subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_s_prec_type, psb_protect_name => psb_s_apply2_vect implicit none @@ -72,10 +72,8 @@ subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans,work) type(psb_s_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) character :: trans_ - real(psb_spk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -94,36 +92,13 @@ subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") goto 9999 end if - call prec%prec%apply(sone,x,szero,y,desc_data,info,& - & trans=trans_,work=work_) - - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if + call prec%prec%apply(sone,x,szero,y,desc_data,info,trans=trans_) call psb_erractionrestore(err_act) return @@ -133,7 +108,7 @@ subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans,work) end subroutine psb_s_apply2_vect -subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans,work) +subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans) use psb_base_mod use psb_s_prec_type, psb_protect_name => psb_s_apply1_vect implicit none @@ -142,11 +117,9 @@ subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans,work) type(psb_s_vect_type),intent(inout) :: x integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) type(psb_s_vect_type) :: ww character :: trans_ - real(psb_spk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -165,18 +138,6 @@ subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") @@ -184,19 +145,9 @@ subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans,work) end if call psb_geasb(ww,desc_data,info,mold=x%v,scratch=.true.) - if (info == 0) call prec%prec%apply(sone,x,szero,ww,desc_data,info,& - & trans=trans_,work=work_) + if (info == 0) call prec%prec%apply(sone,x,szero,ww,desc_data,info,trans=trans_) if (info == 0) call psb_geaxpby(sone,ww,szero,x,desc_data,info) call psb_gefree(ww,desc_data,info) - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if call psb_erractionrestore(err_act) return diff --git a/prec/impl/psb_z_bjacprec_impl.f90 b/prec/impl/psb_z_bjacprec_impl.f90 index 3533f1e31..03d6329f7 100644 --- a/prec/impl/psb_z_bjacprec_impl.f90 +++ b/prec/impl/psb_z_bjacprec_impl.f90 @@ -71,7 +71,7 @@ subroutine psb_z_bjac_dump(prec,info,prefix,head) end subroutine psb_z_bjac_dump -subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_z_bjacprec, psb_protect_name => psb_z_bjac_apply_vect implicit none @@ -82,11 +82,10 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_z_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) ! Local variables integer(psb_ipk_) :: n_row,n_col - complex(psb_dpk_), pointer :: ww(:), aux(:) + complex(psb_dpk_), pointer :: ww(:) type(psb_z_vect_type) :: wv, wv1 type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me @@ -140,17 +139,7 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) end if - if (n_col <= size(work)) then - ww => work(1:n_col) - if ((4*n_col+n_col) <= size(work)) then - aux => work(n_col+1:) - else - allocate(aux(4*n_col),stat=info) - - endif - else - allocate(ww(n_col),aux(4*n_col),stat=info) - endif + allocate(ww(n_col),stat=info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Allocate') @@ -168,28 +157,28 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spsm(zone,prec%av(psb_l_pr_),x,zzero,wv,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_,work=aux) + & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_u_pr_),wv,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_) case('T') call psb_spsm(zone,prec%av(psb_u_pr_),x,zzero,wv,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_, work=aux) + & trans=trans_,scale='L',diag=prec%dv,choice=psb_none_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),wv,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_) case('C') call psb_spsm(zone,prec%av(psb_u_pr_),x,zzero,wv,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_) call wv1%mlt(zone,prec%dv,wv,zzero,info,conjgx=trans_) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),wv1,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_,work=aux) + & trans=trans_,scale='U',choice=psb_none_) end select if (info /= psb_success_) then @@ -203,20 +192,20 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spmm(zone,prec%av(psb_l_pr_),x,zzero,wv,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false.) if (info == psb_success_) call wv1%mlt(zone,prec%dv,wv,zzero,info) if(info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1,& - & beta,y,desc_data,info, trans=trans_, work=aux,doswap=.false.) + & beta,y,desc_data,info, trans=trans_, doswap=.false.) case('T','C') call psb_spmm(zone,prec%av(psb_l_pr_),x,zzero,wv,desc_data,info,& - & trans=trans_,work=aux,doswap=.false.) + & trans=trans_,doswap=.false.) if (info == psb_success_) call wv1%mlt(zone,prec%dv,wv,zzero,info) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1, & - & beta,y,desc_data,info,trans=trans_,work=aux,doswap=.false.) + & beta,y,desc_data,info,trans=trans_,doswap=.false.) end select if (info /= psb_success_) then @@ -235,14 +224,8 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) call psb_halo(y,desc_data,info,data=psb_comm_mov_) if (do_alloc_wrk) call prec%free_wrk(info) - if (n_col <= size(work)) then - if ((4*n_col+n_col) <= size(work)) then - else - deallocate(aux) - endif - else - deallocate(ww,aux) - endif + + deallocate(ww) call psb_erractionrestore(err_act) @@ -397,7 +380,6 @@ subroutine psb_z_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& & trans=trans_,work=aux,doswap=.false.) - case('C') call psb_spmm(zone,prec%av(psb_u_pr_),x,zzero,ww,desc_data,info,& & trans=trans_,work=aux,doswap=.false.) @@ -405,7 +387,6 @@ subroutine psb_z_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& & trans=trans_,work=aux,doswap=.false.) - end select diff --git a/prec/impl/psb_z_diagprec_impl.f90 b/prec/impl/psb_z_diagprec_impl.f90 index 15776b526..d501401ea 100644 --- a/prec/impl/psb_z_diagprec_impl.f90 +++ b/prec/impl/psb_z_diagprec_impl.f90 @@ -65,7 +65,7 @@ subroutine psb_z_diag_dump(prec,info,prefix,head) end subroutine psb_z_diag_dump -subroutine psb_z_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_z_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_z_diagprec, psb_protect_name => psb_z_diag_apply_vect implicit none @@ -76,7 +76,6 @@ subroutine psb_z_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_z_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) integer(psb_ipk_) :: err_act, nrow, ierr(5) character(len=20) :: name='z_diag_prec_apply' complex(psb_dpk_), pointer :: ww(:) diff --git a/prec/impl/psb_z_nullprec_impl.f90 b/prec/impl/psb_z_nullprec_impl.f90 index 0306f35dc..9cb1a2080 100644 --- a/prec/impl/psb_z_nullprec_impl.f90 +++ b/prec/impl/psb_z_nullprec_impl.f90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -subroutine psb_z_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) +subroutine psb_z_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_z_nullprec, psb_protect_name => psb_z_null_apply_vect implicit none @@ -40,7 +40,6 @@ subroutine psb_z_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) type(psb_z_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) integer(psb_ipk_) :: err_act, nrow, ierr(5) character(len=20) :: name='c_null_prec_apply' diff --git a/prec/impl/psb_z_prec_type_impl.f90 b/prec/impl/psb_z_prec_type_impl.f90 index 00f0b05e1..7f5ae39e1 100644 --- a/prec/impl/psb_z_prec_type_impl.f90 +++ b/prec/impl/psb_z_prec_type_impl.f90 @@ -75,7 +75,6 @@ subroutine psb_z_apply2_vect(prec,x,y,desc_data,info,trans,work) complex(psb_dpk_),intent(inout), optional, target :: work(:) character :: trans_ - complex(psb_dpk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -94,36 +93,13 @@ subroutine psb_z_apply2_vect(prec,x,y,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") goto 9999 end if - call prec%prec%apply(zone,x,zzero,y,desc_data,info,& - & trans=trans_,work=work_) - - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if + call prec%prec%apply(zone,x,zzero,y,desc_data,info,trans=trans_) call psb_erractionrestore(err_act) return @@ -146,7 +122,6 @@ subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans,work) type(psb_z_vect_type) :: ww character :: trans_ - complex(psb_dpk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -165,18 +140,6 @@ subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") @@ -184,19 +147,9 @@ subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans,work) end if call psb_geasb(ww,desc_data,info,mold=x%v,scratch=.true.) - if (info == 0) call prec%prec%apply(zone,x,zzero,ww,desc_data,info,& - & trans=trans_,work=work_) + if (info == 0) call prec%prec%apply(zone,x,zzero,ww,desc_data,info,trans=trans_) if (info == 0) call psb_geaxpby(zone,ww,zzero,x,desc_data,info) call psb_gefree(ww,desc_data,info) - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if call psb_erractionrestore(err_act) return diff --git a/prec/psb_c_base_prec_mod.f90 b/prec/psb_c_base_prec_mod.f90 index 4358d5c2a..8af17a7df 100644 --- a/prec/psb_c_base_prec_mod.f90 +++ b/prec/psb_c_base_prec_mod.f90 @@ -78,7 +78,7 @@ module psb_c_base_prec_mod & psb_c_base_get_nzeros abstract interface - subroutine psb_c_base_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_c_base_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import psb_ipk_, psb_spk_, psb_desc_type, psb_c_vect_type, & & psb_c_base_vect_type, psb_cspmat_type, psb_c_base_prec_type,& & psb_c_base_sparse_mat @@ -90,7 +90,6 @@ module psb_c_base_prec_mod type(psb_c_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_c_base_apply_vect end interface diff --git a/prec/psb_c_bjacprec.f90 b/prec/psb_c_bjacprec.f90 index 8d6893522..c26e7d767 100644 --- a/prec/psb_c_bjacprec.f90 +++ b/prec/psb_c_bjacprec.f90 @@ -77,7 +77,7 @@ module psb_c_bjacprec end interface interface - subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_c_bjac_prec_type, psb_c_vect_type, psb_spk_ type(psb_desc_type),intent(in) :: desc_data class(psb_c_bjac_prec_type), intent(inout) :: prec @@ -86,7 +86,7 @@ module psb_c_bjacprec type(psb_c_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) + end subroutine psb_c_bjac_apply_vect end interface diff --git a/prec/psb_c_diagprec.f90 b/prec/psb_c_diagprec.f90 index 9af9e2f97..5ef6aa1a4 100644 --- a/prec/psb_c_diagprec.f90 +++ b/prec/psb_c_diagprec.f90 @@ -56,7 +56,7 @@ module psb_c_diagprec interface - subroutine psb_c_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_c_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_c_diag_prec_type, psb_c_vect_type, psb_spk_ type(psb_desc_type),intent(in) :: desc_data class(psb_c_diag_prec_type), intent(inout) :: prec @@ -65,7 +65,6 @@ module psb_c_diagprec type(psb_c_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_c_diag_apply_vect end interface diff --git a/prec/psb_c_nullprec.f90 b/prec/psb_c_nullprec.f90 index 56bbca583..4d8e828a1 100644 --- a/prec/psb_c_nullprec.f90 +++ b/prec/psb_c_nullprec.f90 @@ -51,7 +51,7 @@ module psb_c_nullprec interface - subroutine psb_c_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_c_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_c_null_prec_type, psb_c_vect_type, psb_spk_ type(psb_desc_type),intent(in) :: desc_data class(psb_c_null_prec_type), intent(inout) :: prec @@ -60,7 +60,6 @@ module psb_c_nullprec type(psb_c_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_c_null_apply_vect end interface diff --git a/prec/psb_c_prec_type.f90 b/prec/psb_c_prec_type.f90 index 9c5e1cdc8..220f3e5ab 100644 --- a/prec/psb_c_prec_type.f90 +++ b/prec/psb_c_prec_type.f90 @@ -108,27 +108,25 @@ module psb_c_prec_type end interface interface - subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans,work) + subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_cprec_type, psb_c_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_cprec_type), intent(inout) :: prec - type(psb_c_vect_type),intent(inout) :: x - type(psb_c_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_cprec_type), intent(inout) :: prec + type(psb_c_vect_type),intent(inout) :: x + type(psb_c_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_apply2_vect end interface interface - subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans,work) + subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_cprec_type, psb_c_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_cprec_type), intent(inout) :: prec - type(psb_c_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_cprec_type), intent(inout) :: prec + type(psb_c_vect_type),intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_apply1_vect end interface diff --git a/prec/psb_d_base_prec_mod.f90 b/prec/psb_d_base_prec_mod.f90 index e38691939..dbc8d1f1d 100644 --- a/prec/psb_d_base_prec_mod.f90 +++ b/prec/psb_d_base_prec_mod.f90 @@ -78,7 +78,7 @@ module psb_d_base_prec_mod & psb_d_base_get_nzeros abstract interface - subroutine psb_d_base_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_d_base_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import psb_ipk_, psb_dpk_, psb_desc_type, psb_d_vect_type, & & psb_d_base_vect_type, psb_dspmat_type, psb_d_base_prec_type,& & psb_d_base_sparse_mat @@ -90,8 +90,6 @@ module psb_d_base_prec_mod type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) - end subroutine psb_d_base_apply_vect end interface diff --git a/prec/psb_d_bjacprec.f90 b/prec/psb_d_bjacprec.f90 index 6ca35ec8c..92ae0c695 100644 --- a/prec/psb_d_bjacprec.f90 +++ b/prec/psb_d_bjacprec.f90 @@ -77,7 +77,7 @@ module psb_d_bjacprec end interface interface - subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_d_bjac_prec_type, psb_d_vect_type, psb_dpk_ type(psb_desc_type),intent(in) :: desc_data class(psb_d_bjac_prec_type), intent(inout) :: prec @@ -86,7 +86,6 @@ module psb_d_bjacprec type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) end subroutine psb_d_bjac_apply_vect end interface diff --git a/prec/psb_d_diagprec.f90 b/prec/psb_d_diagprec.f90 index 268b104c4..133763b01 100644 --- a/prec/psb_d_diagprec.f90 +++ b/prec/psb_d_diagprec.f90 @@ -56,7 +56,7 @@ module psb_d_diagprec interface - subroutine psb_d_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_d_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_d_diag_prec_type, psb_d_vect_type, psb_dpk_ type(psb_desc_type),intent(in) :: desc_data class(psb_d_diag_prec_type), intent(inout) :: prec @@ -65,7 +65,6 @@ module psb_d_diagprec type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) end subroutine psb_d_diag_apply_vect end interface diff --git a/prec/psb_d_nullprec.f90 b/prec/psb_d_nullprec.f90 index 7e94e0ef6..b37af8b77 100644 --- a/prec/psb_d_nullprec.f90 +++ b/prec/psb_d_nullprec.f90 @@ -51,7 +51,7 @@ module psb_d_nullprec interface - subroutine psb_d_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_d_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_d_null_prec_type, psb_d_vect_type, psb_dpk_ type(psb_desc_type),intent(in) :: desc_data class(psb_d_null_prec_type), intent(inout) :: prec @@ -60,7 +60,6 @@ module psb_d_nullprec type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) end subroutine psb_d_null_apply_vect end interface diff --git a/prec/psb_d_prec_type.f90 b/prec/psb_d_prec_type.f90 index 708b33f33..55baaad69 100644 --- a/prec/psb_d_prec_type.f90 +++ b/prec/psb_d_prec_type.f90 @@ -108,7 +108,7 @@ module psb_d_prec_type end interface interface - subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans,work) + subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_dprec_type, psb_d_vect_type, psb_dpk_ type(psb_desc_type),intent(in) :: desc_data class(psb_dprec_type), intent(inout) :: prec @@ -116,19 +116,17 @@ module psb_d_prec_type type(psb_d_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) end subroutine psb_d_apply2_vect end interface interface - subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans,work) + subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_dprec_type, psb_d_vect_type, psb_dpk_ type(psb_desc_type),intent(in) :: desc_data class(psb_dprec_type), intent(inout) :: prec type(psb_d_vect_type),intent(inout) :: x integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) end subroutine psb_d_apply1_vect end interface diff --git a/prec/psb_s_base_prec_mod.f90 b/prec/psb_s_base_prec_mod.f90 index 36af2787a..5f2bc2177 100644 --- a/prec/psb_s_base_prec_mod.f90 +++ b/prec/psb_s_base_prec_mod.f90 @@ -78,19 +78,18 @@ module psb_s_base_prec_mod & psb_s_base_get_nzeros abstract interface - subroutine psb_s_base_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_s_base_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import psb_ipk_, psb_spk_, psb_desc_type, psb_s_vect_type, & & psb_s_base_vect_type, psb_sspmat_type, psb_s_base_prec_type,& & psb_s_base_sparse_mat implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_s_base_prec_type), intent(inout) :: prec - real(psb_spk_),intent(in) :: alpha, beta - type(psb_s_vect_type),intent(inout) :: x - type(psb_s_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) + real(psb_spk_),intent(in) :: alpha, beta + type(psb_s_vect_type),intent(inout) :: x + type(psb_s_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_s_base_apply_vect end interface @@ -101,14 +100,14 @@ module psb_s_base_prec_mod & psb_s_base_vect_type, psb_sspmat_type, psb_s_base_prec_type,& & psb_s_base_sparse_mat implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_s_base_prec_type), intent(inout) :: prec - real(psb_spk_),intent(in) :: alpha, beta - real(psb_spk_),intent(inout) :: x(:) - real(psb_spk_),intent(inout) :: y(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_s_base_prec_type), intent(inout) :: prec + real(psb_spk_),intent(in) :: alpha, beta + real(psb_spk_),intent(inout) :: x(:) + real(psb_spk_),intent(inout) :: y(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans + real(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_s_base_apply end interface diff --git a/prec/psb_s_bjacprec.f90 b/prec/psb_s_bjacprec.f90 index 5173ddd20..645cea044 100644 --- a/prec/psb_s_bjacprec.f90 +++ b/prec/psb_s_bjacprec.f90 @@ -77,7 +77,7 @@ module psb_s_bjacprec end interface interface - subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_s_bjac_prec_type, psb_s_vect_type, psb_spk_ type(psb_desc_type),intent(in) :: desc_data class(psb_s_bjac_prec_type), intent(inout) :: prec @@ -85,8 +85,7 @@ module psb_s_bjacprec type(psb_s_vect_type),intent(inout) :: x type(psb_s_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) + character(len=1), optional :: trans end subroutine psb_s_bjac_apply_vect end interface diff --git a/prec/psb_s_diagprec.f90 b/prec/psb_s_diagprec.f90 index 022d831d5..41c02a377 100644 --- a/prec/psb_s_diagprec.f90 +++ b/prec/psb_s_diagprec.f90 @@ -56,7 +56,7 @@ module psb_s_diagprec interface - subroutine psb_s_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_s_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_s_diag_prec_type, psb_s_vect_type, psb_spk_ type(psb_desc_type),intent(in) :: desc_data class(psb_s_diag_prec_type), intent(inout) :: prec @@ -65,7 +65,6 @@ module psb_s_diagprec type(psb_s_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_s_diag_apply_vect end interface diff --git a/prec/psb_s_nullprec.f90 b/prec/psb_s_nullprec.f90 index 9907eb7ab..c6fba7725 100644 --- a/prec/psb_s_nullprec.f90 +++ b/prec/psb_s_nullprec.f90 @@ -51,7 +51,7 @@ module psb_s_nullprec interface - subroutine psb_s_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_s_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_s_null_prec_type, psb_s_vect_type, psb_spk_ type(psb_desc_type),intent(in) :: desc_data class(psb_s_null_prec_type), intent(inout) :: prec @@ -60,7 +60,6 @@ module psb_s_nullprec type(psb_s_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_s_null_apply_vect end interface diff --git a/prec/psb_s_prec_type.f90 b/prec/psb_s_prec_type.f90 index 9b6ee231b..8ee1c0059 100644 --- a/prec/psb_s_prec_type.f90 +++ b/prec/psb_s_prec_type.f90 @@ -108,7 +108,7 @@ module psb_s_prec_type end interface interface - subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans,work) + subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_sprec_type, psb_s_vect_type, psb_spk_ type(psb_desc_type),intent(in) :: desc_data class(psb_sprec_type), intent(inout) :: prec @@ -116,19 +116,17 @@ module psb_s_prec_type type(psb_s_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_s_apply2_vect end interface interface - subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans,work) + subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_sprec_type, psb_s_vect_type, psb_spk_ type(psb_desc_type),intent(in) :: desc_data class(psb_sprec_type), intent(inout) :: prec type(psb_s_vect_type),intent(inout) :: x integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_s_apply1_vect end interface diff --git a/prec/psb_z_base_prec_mod.f90 b/prec/psb_z_base_prec_mod.f90 index ddf67630d..4b73740e4 100644 --- a/prec/psb_z_base_prec_mod.f90 +++ b/prec/psb_z_base_prec_mod.f90 @@ -78,7 +78,7 @@ module psb_z_base_prec_mod & psb_z_base_get_nzeros abstract interface - subroutine psb_z_base_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_z_base_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import psb_ipk_, psb_dpk_, psb_desc_type, psb_z_vect_type, & & psb_z_base_vect_type, psb_zspmat_type, psb_z_base_prec_type,& & psb_z_base_sparse_mat @@ -90,8 +90,6 @@ module psb_z_base_prec_mod type(psb_z_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) - end subroutine psb_z_base_apply_vect end interface diff --git a/prec/psb_z_bjacprec.f90 b/prec/psb_z_bjacprec.f90 index d8ff09bba..0bfbe3c27 100644 --- a/prec/psb_z_bjacprec.f90 +++ b/prec/psb_z_bjacprec.f90 @@ -77,7 +77,7 @@ module psb_z_bjacprec end interface interface - subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_z_bjac_prec_type, psb_z_vect_type, psb_dpk_ type(psb_desc_type),intent(in) :: desc_data class(psb_z_bjac_prec_type), intent(inout) :: prec @@ -86,7 +86,6 @@ module psb_z_bjacprec type(psb_z_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) end subroutine psb_z_bjac_apply_vect end interface diff --git a/prec/psb_z_diagprec.f90 b/prec/psb_z_diagprec.f90 index 26ae3c383..b70f57daa 100644 --- a/prec/psb_z_diagprec.f90 +++ b/prec/psb_z_diagprec.f90 @@ -56,7 +56,7 @@ module psb_z_diagprec interface - subroutine psb_z_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_z_diag_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_z_diag_prec_type, psb_z_vect_type, psb_dpk_ type(psb_desc_type),intent(in) :: desc_data class(psb_z_diag_prec_type), intent(inout) :: prec @@ -65,7 +65,6 @@ module psb_z_diagprec type(psb_z_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) end subroutine psb_z_diag_apply_vect end interface diff --git a/prec/psb_z_nullprec.f90 b/prec/psb_z_nullprec.f90 index 56b5329ff..433fe10a9 100644 --- a/prec/psb_z_nullprec.f90 +++ b/prec/psb_z_nullprec.f90 @@ -51,7 +51,7 @@ module psb_z_nullprec interface - subroutine psb_z_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans,work) + subroutine psb_z_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_z_null_prec_type, psb_z_vect_type, psb_dpk_ type(psb_desc_type),intent(in) :: desc_data class(psb_z_null_prec_type), intent(inout) :: prec @@ -60,7 +60,6 @@ module psb_z_nullprec type(psb_z_vect_type),intent(inout) :: y integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) end subroutine psb_z_null_apply_vect end interface diff --git a/test/torture/psb_s_mvsv_tester.f90 b/test/torture/psb_s_mvsv_tester.f90 index cfa3388a6..0f1a7a756 100644 --- a/test/torture/psb_s_mvsv_tester.f90 +++ b/test/torture/psb_s_mvsv_tester.f90 @@ -23,8 +23,8 @@ contains integer(psb_ipk_) :: nnz=3 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(3)=(/1, 1, 2/) - integer(psb_ipk_) :: JA(3)=(/1, 2, 2/) + integer(psb_lpk_) :: IA(3)=(/1, 1, 2/) + integer(psb_lpk_) :: JA(3)=(/1, 2, 2/) real*4 :: VA(3)=(/1, 1, 1/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/9, 6/)! reference cy after @@ -100,8 +100,8 @@ contains integer(psb_ipk_) :: nnz=2 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(2)=(/1, 2/) - integer(psb_ipk_) :: JA(2)=(/1, 1/) + integer(psb_lpk_) :: IA(2)=(/1, 2/) + integer(psb_lpk_) :: JA(2)=(/1, 1/) real*4 :: VA(2)=(/1, 1/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/9, 3/)! reference cy after @@ -177,8 +177,8 @@ contains integer(psb_ipk_) :: nnz=3 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(3)=(/1, 1, 2/) - integer(psb_ipk_) :: JA(3)=(/1, 2, 2/) + integer(psb_lpk_) :: IA(3)=(/1, 1, 2/) + integer(psb_lpk_) :: JA(3)=(/1, 2, 2/) real*4 :: VA(3)=(/1, 2, 6/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/6, 27/)! reference cy after @@ -254,8 +254,8 @@ contains integer(psb_ipk_) :: nnz=2 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(2)=(/1, 1/) - integer(psb_ipk_) :: JA(2)=(/1, 2/) + integer(psb_lpk_) :: IA(2)=(/1, 1/) + integer(psb_lpk_) :: JA(2)=(/1, 2/) real*4 :: VA(2)=(/1, 2/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/9, 0/)! reference cy after @@ -331,8 +331,8 @@ contains integer(psb_ipk_) :: nnz=3 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(3)=(/1, 1, 2/) - integer(psb_ipk_) :: JA(3)=(/1, 2, 1/) + integer(psb_lpk_) :: IA(3)=(/1, 1, 2/) + integer(psb_lpk_) :: JA(3)=(/1, 2, 1/) real*4 :: VA(3)=(/1, 3, 2/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/9, 9/)! reference cy after @@ -408,8 +408,8 @@ contains integer(psb_ipk_) :: nnz=2 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(2)=(/1, 2/) - integer(psb_ipk_) :: JA(2)=(/1, 1/) + integer(psb_lpk_) :: IA(2)=(/1, 2/) + integer(psb_lpk_) :: JA(2)=(/1, 1/) real*4 :: VA(2)=(/1, 1/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/6, 0/)! reference cy after @@ -485,8 +485,8 @@ contains integer(psb_ipk_) :: nnz=1 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(1)=(/1/) - integer(psb_ipk_) :: JA(1)=(/1/) + integer(psb_lpk_) :: IA(1)=(/1/) + integer(psb_lpk_) :: JA(1)=(/1/) real*4 :: VA(1)=(/1/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/4, 3/)! reference cy after @@ -562,8 +562,8 @@ contains integer(psb_ipk_) :: nnz=2 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(2)=(/1, 2/) - integer(psb_ipk_) :: JA(2)=(/1, 1/) + integer(psb_lpk_) :: IA(2)=(/1, 2/) + integer(psb_lpk_) :: JA(2)=(/1, 1/) real*4 :: VA(2)=(/1, 1/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/5, 3/)! reference cy after @@ -639,8 +639,8 @@ contains integer(psb_ipk_) :: nnz=4 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(4)=(/1, 1, 2, 2/) - integer(psb_ipk_) :: JA(4)=(/1, 2, 1, 2/) + integer(psb_lpk_) :: IA(4)=(/1, 1, 2, 2/) + integer(psb_lpk_) :: JA(4)=(/1, 2, 1, 2/) real*4 :: VA(4)=(/1, 2, 5, 1/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/9, 6/)! reference cy after @@ -716,8 +716,8 @@ contains integer(psb_ipk_) :: nnz=3 integer(psb_ipk_) :: m=2 integer(psb_ipk_) :: k=2 - integer(psb_ipk_) :: IA(3)=(/1, 1, 2/) - integer(psb_ipk_) :: JA(3)=(/1, 2, 1/) + integer(psb_lpk_) :: IA(3)=(/1, 1, 2/) + integer(psb_lpk_) :: JA(3)=(/1, 2, 1/) real*4 :: VA(3)=(/1, 1, 2/) real*4 :: x(2)=(/1, 1/)! reference x real*4 :: cy(2)=(/2, 2/)! reference cy after From 43d66ece059c73415fcb8245c63861dd4f8c8307 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 20 Mar 2026 10:00:31 +0100 Subject: [PATCH 129/175] Add .gitattributes --- .gitattributes | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..999de8cf5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,36 @@ +*.a export-ignore +*.o export-ignore +*.mod export-ignore +*.smod export-ignore +*~ export-ignore +.git* export-ignore +rsb export-ignore +rsb/ export-ignore +rsb/** export-ignore + + +Make.inc export-ignore +config export-ignore +config/ export-ignore +config/** export-ignore +configure.ac export-ignore +config.log export-ignore +config.status export-ignore +aclocal.m4 export-ignore +autogen.sh export-ignore +autom4te.cache export-ignore +Dockerfile export-ignore +.travis.yml export-ignore +# generated folder +./include/** export-ignore +./modules/** export-ignore +docs/src export-ignore +docs/doxypsb export-ignore +docs/Makefile export-ignore + +# the executable from tests +test/computational_routines export-ignore +test/computational_routines export-ignore +test/omp export-ignore +test/openacc export-ignore +test/torture export-ignore From ca458870b16e378ed7f1f43293143c3ab8bb7130 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 20 Mar 2026 13:55:17 +0100 Subject: [PATCH 130/175] Fix intent in precbld to align with AMG --- base/modules/serial/psb_c_base_vect_mod.F90 | 2 -- base/modules/serial/psb_d_base_vect_mod.F90 | 2 -- base/modules/serial/psb_s_base_vect_mod.F90 | 2 -- base/modules/serial/psb_z_base_vect_mod.F90 | 2 -- prec/impl/psb_cprecbld.f90 | 8 ++++---- prec/impl/psb_dprecbld.f90 | 8 ++++---- prec/impl/psb_sprecbld.f90 | 8 ++++---- prec/impl/psb_zprecbld.f90 | 8 ++++---- prec/psb_c_prec_type.f90 | 2 +- prec/psb_d_prec_type.f90 | 2 +- prec/psb_s_prec_type.f90 | 2 +- prec/psb_z_prec_type.f90 | 2 +- 12 files changed, 20 insertions(+), 28 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index 9542e3ed4..54ab05087 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -426,8 +426,6 @@ contains integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ - - info = 0 if (present(clear)) then clear_ = clear diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 567161066..999257e16 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -434,8 +434,6 @@ contains logical, intent(in), optional :: clear logical :: clear_ - info = 0 - if (present(clear)) then clear_ = clear else diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index fcaead015..d94e03fff 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -434,8 +434,6 @@ contains logical, intent(in), optional :: clear logical :: clear_ - info = 0 - if (present(clear)) then clear_ = clear else diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 823113aad..bdd2e57ba 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -427,8 +427,6 @@ contains logical, intent(in), optional :: clear logical :: clear_ - info = 0 - if (present(clear)) then clear_ = clear else diff --git a/prec/impl/psb_cprecbld.f90 b/prec/impl/psb_cprecbld.f90 index a9e9f7d72..1a93dd187 100644 --- a/prec/impl/psb_cprecbld.f90 +++ b/prec/impl/psb_cprecbld.f90 @@ -35,10 +35,10 @@ subroutine psb_cprecbld(a,desc_a,p,info,amold,vmold,imold) use psb_c_prec_type, psb_protect_name => psb_cprecbld Implicit None - type(psb_cspmat_type), intent(in), target :: a - type(psb_desc_type), intent(inout), target :: desc_a - class(psb_cprec_type),intent(inout), target :: p - integer(psb_ipk_), intent(out) :: info + type(psb_cspmat_type), intent(inout), target :: a + type(psb_desc_type), intent(inout), target :: desc_a + class(psb_cprec_type),intent(inout), target :: p + integer(psb_ipk_), intent(out) :: info class(psb_c_base_sparse_mat), intent(in), optional :: amold class(psb_c_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold diff --git a/prec/impl/psb_dprecbld.f90 b/prec/impl/psb_dprecbld.f90 index 4413ddc9a..b663694e3 100644 --- a/prec/impl/psb_dprecbld.f90 +++ b/prec/impl/psb_dprecbld.f90 @@ -35,10 +35,10 @@ subroutine psb_dprecbld(a,desc_a,p,info,amold,vmold,imold) use psb_d_prec_type, psb_protect_name => psb_dprecbld Implicit None - type(psb_dspmat_type), intent(in), target :: a - type(psb_desc_type), intent(inout), target :: desc_a - class(psb_dprec_type),intent(inout), target :: p - integer(psb_ipk_), intent(out) :: info + type(psb_dspmat_type), intent(inout), target :: a + type(psb_desc_type), intent(inout), target :: desc_a + class(psb_dprec_type),intent(inout), target :: p + integer(psb_ipk_), intent(out) :: info class(psb_d_base_sparse_mat), intent(in), optional :: amold class(psb_d_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold diff --git a/prec/impl/psb_sprecbld.f90 b/prec/impl/psb_sprecbld.f90 index 5a8df3f87..77c2143c5 100644 --- a/prec/impl/psb_sprecbld.f90 +++ b/prec/impl/psb_sprecbld.f90 @@ -35,10 +35,10 @@ subroutine psb_sprecbld(a,desc_a,p,info,amold,vmold,imold) use psb_s_prec_type, psb_protect_name => psb_sprecbld Implicit None - type(psb_sspmat_type), intent(in), target :: a - type(psb_desc_type), intent(inout), target :: desc_a - class(psb_sprec_type),intent(inout), target :: p - integer(psb_ipk_), intent(out) :: info + type(psb_sspmat_type), intent(inout), target :: a + type(psb_desc_type), intent(inout), target :: desc_a + class(psb_sprec_type),intent(inout), target :: p + integer(psb_ipk_), intent(out) :: info class(psb_s_base_sparse_mat), intent(in), optional :: amold class(psb_s_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold diff --git a/prec/impl/psb_zprecbld.f90 b/prec/impl/psb_zprecbld.f90 index d1ef268fb..4e324cfe5 100644 --- a/prec/impl/psb_zprecbld.f90 +++ b/prec/impl/psb_zprecbld.f90 @@ -35,10 +35,10 @@ subroutine psb_zprecbld(a,desc_a,p,info,amold,vmold,imold) use psb_z_prec_type, psb_protect_name => psb_zprecbld Implicit None - type(psb_zspmat_type), intent(in), target :: a - type(psb_desc_type), intent(inout), target :: desc_a - class(psb_zprec_type),intent(inout), target :: p - integer(psb_ipk_), intent(out) :: info + type(psb_zspmat_type), intent(inout), target :: a + type(psb_desc_type), intent(inout), target :: desc_a + class(psb_zprec_type),intent(inout), target :: p + integer(psb_ipk_), intent(out) :: info class(psb_z_base_sparse_mat), intent(in), optional :: amold class(psb_z_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold diff --git a/prec/psb_c_prec_type.f90 b/prec/psb_c_prec_type.f90 index 3a4c05569..9f248da98 100644 --- a/prec/psb_c_prec_type.f90 +++ b/prec/psb_c_prec_type.f90 @@ -85,7 +85,7 @@ module psb_c_prec_type & psb_c_base_sparse_mat, psb_spk_, psb_c_base_vect_type, & & psb_cprec_type, psb_i_base_vect_type implicit none - type(psb_cspmat_type), intent(in), target :: a + type(psb_cspmat_type), intent(inout), target :: a type(psb_desc_type), intent(inout), target :: desc_a class(psb_cprec_type), intent(inout), target :: prec integer(psb_ipk_), intent(out) :: info diff --git a/prec/psb_d_prec_type.f90 b/prec/psb_d_prec_type.f90 index 8d9cb8d70..de8991dd3 100644 --- a/prec/psb_d_prec_type.f90 +++ b/prec/psb_d_prec_type.f90 @@ -85,7 +85,7 @@ module psb_d_prec_type & psb_d_base_sparse_mat, psb_dpk_, psb_d_base_vect_type, & & psb_dprec_type, psb_i_base_vect_type implicit none - type(psb_dspmat_type), intent(in), target :: a + type(psb_dspmat_type), intent(inout), target :: a type(psb_desc_type), intent(inout), target :: desc_a class(psb_dprec_type), intent(inout), target :: prec integer(psb_ipk_), intent(out) :: info diff --git a/prec/psb_s_prec_type.f90 b/prec/psb_s_prec_type.f90 index 236ffe83d..726ed9a1a 100644 --- a/prec/psb_s_prec_type.f90 +++ b/prec/psb_s_prec_type.f90 @@ -85,7 +85,7 @@ module psb_s_prec_type & psb_s_base_sparse_mat, psb_spk_, psb_s_base_vect_type, & & psb_sprec_type, psb_i_base_vect_type implicit none - type(psb_sspmat_type), intent(in), target :: a + type(psb_sspmat_type), intent(inout), target :: a type(psb_desc_type), intent(inout), target :: desc_a class(psb_sprec_type), intent(inout), target :: prec integer(psb_ipk_), intent(out) :: info diff --git a/prec/psb_z_prec_type.f90 b/prec/psb_z_prec_type.f90 index f159df680..6cb998bc4 100644 --- a/prec/psb_z_prec_type.f90 +++ b/prec/psb_z_prec_type.f90 @@ -85,7 +85,7 @@ module psb_z_prec_type & psb_z_base_sparse_mat, psb_dpk_, psb_z_base_vect_type, & & psb_zprec_type, psb_i_base_vect_type implicit none - type(psb_zspmat_type), intent(in), target :: a + type(psb_zspmat_type), intent(inout), target :: a type(psb_desc_type), intent(inout), target :: desc_a class(psb_zprec_type), intent(inout), target :: prec integer(psb_ipk_), intent(out) :: info From c990dc68401507d6deab6013891a77e4c9ec74ce Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 20 Mar 2026 13:55:33 +0100 Subject: [PATCH 131/175] Fix info in %reinit --- base/modules/serial/psb_c_base_vect_mod.F90 | 2 ++ base/modules/serial/psb_d_base_vect_mod.F90 | 2 ++ base/modules/serial/psb_i_base_vect_mod.F90 | 2 ++ base/modules/serial/psb_l_base_vect_mod.F90 | 2 ++ base/modules/serial/psb_s_base_vect_mod.F90 | 2 ++ base/modules/serial/psb_z_base_vect_mod.F90 | 2 ++ 6 files changed, 12 insertions(+) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index 54ab05087..b27ed1604 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -427,6 +427,7 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -2728,6 +2729,7 @@ contains class(psb_c_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = czero diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 999257e16..ad1f5867d 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -434,6 +434,7 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -2907,6 +2908,7 @@ contains class(psb_d_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = dzero diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 6b4d84bb0..704da9207 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -360,6 +360,7 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -1653,6 +1654,7 @@ contains class(psb_i_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = izero diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index d5d0912ff..afa690edd 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -361,6 +361,7 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -1654,6 +1655,7 @@ contains class(psb_l_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = lzero diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index d94e03fff..797cc4900 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -434,6 +434,7 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -2907,6 +2908,7 @@ contains class(psb_s_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = szero diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index bdd2e57ba..ff01e3631 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -427,6 +427,7 @@ contains logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -2728,6 +2729,7 @@ contains class(psb_z_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = zzero From dc1d730acf477a9361d122ba5568bb202989e5cf Mon Sep 17 00:00:00 2001 From: gnumlab Date: Fri, 20 Mar 2026 14:55:25 +0100 Subject: [PATCH 132/175] fix metis real type and IPK/LPK interaction --- CMakeLists.txt | 81 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 70 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a536991e7..f6cae3feb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -427,6 +427,7 @@ find_package(METIS) if(METIS_FOUND) + include(CheckTypeSize) message(STATUS "METIS PATH ${METIS_INCLUDES} and metis libraries ${METIS_LIBRARIES}") # Make sure this path is correct # set(METISINCFILE "metis.h") # Adjust this to your actual path @@ -444,6 +445,9 @@ if(METIS_FOUND) # Check for real sizes using try_compile include(CheckCSourceCompiles) + + +#[=====[ # Function to check the size of a type function(check_metis_real_type type_name) set(source_code " @@ -455,25 +459,42 @@ if(METIS_FOUND) }") # Create a temporary source file - file(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/test_size.c" "${source_code}") + #file(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/test_size.c" "${source_code}") # Try to compile it - try_compile(COMPILER_RESULT "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp" - "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/test_size.c") + #try_compile(COMPILER_RESULT "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp" + # "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/test_size.c") # Check the result and read the output - if (COMPILER_RESULT) + + set(test_file "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/test_metis_size.c") + file(WRITE "${test_file}" "${source_code}") + + # Use try_run to compile AND execute + try_run(RUN_RESULT COMPILE_RESULT + "${CMAKE_BINARY_DIR}" + "${test_file}" + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${METIS_INCLUDES}" + RUN_OUTPUT_VARIABLE type_size + COMPILE_OUTPUT_VARIABLE compile_log + ) + + if(COMPILE_RESULT AND (RUN_RESULT EQUAL 0)) + # if (COMPILER_RESULT) execute_process(COMMAND "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/test_size" OUTPUT_VARIABLE type_size) string(STRIP "${type_size}" type_size) + message(STATUS "Metis ?: ${type_size};") if (type_name STREQUAL "float") set(PSB_METIS_REAL_32 "${type_size}" PARENT_SCOPE) + message(STATUS "Metis 32: ${type_size}") # add_definitions(-DPSB_METIS_REAL_32) set(CREALMETIS "#define PSB_METIS_REAL_32" PARENT_SCOPE) elseif (type_name STREQUAL "double") set(PSB_METIS_REAL_64 "${type_size}" PARENT_SCOPE) #add_definitions(-DPSB_METIS_REAL_64) - set(CREALMETIS "#define PSB_METIS_REAL_64" PARENT_SCOPE) + set(CREALMETIS "#define PSB_METIS_REAL_64" PARENT_SCOPE) + message(STATUS "Metis 64: ${type_size}") endif() else() message(WARNING "Failed to compile test for type size: ${type_name}") @@ -483,26 +504,64 @@ if(METIS_FOUND) # Check for both float and double check_metis_real_type(float) check_metis_real_type(double) - +#]=====] # Set HAVE_METIS if METIS is found #add_compile_options(-DPSB_HAVE_METIS) # set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DPSB_HAVE_METIS") + # 1. Tell CMake where to find metis.h for the check +set(CMAKE_EXTRA_INCLUDE_FILES "${METIS_INCLUDES}/metis.h") + +# 2. Check the size of Metis's own type: real_t +# This replaces checking 'float' and 'double' separately +check_type_size("real_t" METIS_REAL_SIZE) + +# 3. Handle the result +if(METIS_REAL_SIZE) + if(METIS_REAL_SIZE EQUAL 4) + set(METIS_INDEX 32) + set(CREALMETIS "#define PSB_METIS_REAL_32") + message(STATUS "Metis detected as 32-bit (real_t is 4 bytes)") + elseif(METIS_REAL_SIZE EQUAL 8) + set(METIS_INDEX 64) + set(CREALMETIS "#define PSB_METIS_REAL_64") + message(STATUS "Metis detected as 64-bit (real_t is 8 bytes)") + endif() +else() + message(WARNING "Could not determine size of real_t from metis.h. Check METIS_INCLUDES.") +endif() - - - +# clean the variable +set(CMAKE_EXTRA_INCLUDE_FILES "") + +# Mismatch Logic Below +if(LPK_SIZE STREQUAL "4" AND METIS_INDEX EQUAL 64) + message(WARNING "Mismatch: Metis is 64-bit but PSBLAS LPK is 32-bit") + set(METIS_FOUND FALSE) + set(CREALMETIS "") +endif() + +if(LPK_SIZE STREQUAL "8" AND METIS_INDEX EQUAL 32) + set(METIS_FOUND FALSE) + set(CREALMETIS "") + message(WARNING "Mismatch: Metis is 32-bit but PSBLAS LPK is 64-bit") +endif() + +#[=====[ # Determine METIS_INDEX based on real type sizes if(DEFINED PSB_METIS_REAL_32) set(METIS_INDEX 32) + message(WARNING "Metis 32: ${METIS_INDEX}") elseif(DEFINED PSB_METIS_REAL_64) set(METIS_INDEX 64) + message(STATUS "Metis 64: ${METIS_INDEX}") else() - message(WARNING "Neither METIS_REAL_32 nor METIS_REAL_64 is defined.") + message(STATUS "Neither METIS_REAL_32 nor METIS_REAL_64 is defined.") set(METIS_INDEX 64) # Default to 64 if not defined endif() + # Check conditions for LPK_SIZE and METIS_INDEX if(LPK_SIZE STREQUAL "4") if(METIS_INDEX STREQUAL "64") @@ -519,7 +578,7 @@ if(METIS_FOUND) set(METIS_FOUND FALSE) endif() endif() - +#]=====] if(METIS_FOUND) # Make sure this path is correct From 4bd601dab2996f92e9ed97f6a752c831c530cde9 Mon Sep 17 00:00:00 2001 From: gnumlab Date: Fri, 20 Mar 2026 15:36:11 +0100 Subject: [PATCH 133/175] hot fix idx_t for metis other than real_t is now analyzed --- CMakeLists.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f6cae3feb..43e364a16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -516,7 +516,20 @@ set(CMAKE_EXTRA_INCLUDE_FILES "${METIS_INCLUDES}/metis.h") # 2. Check the size of Metis's own type: real_t # This replaces checking 'float' and 'double' separately check_type_size("real_t" METIS_REAL_SIZE) +check_type_size("idx_t" METIS_IDX_SIZE) +# 3. Handle the result +if(METIS_IDX_SIZE) + if(METIS_IDX_SIZE EQUAL 4) + set(CINTMETIS "#define PSB_METIS_32") + message(STATUS "Metis detected as 32-bit (idx_t is 4 bytes)") + elseif(METIS_IDX_SIZE EQUAL 8) + set(CINTMETIS "#define PSB_METIS_64") + message(STATUS "Metis detected as 64-bit (idx_t is 8 bytes)") + endif() +else() + message(WARNING "Could not determine size of idx_t from metis.h. Check METIS_INCLUDES.") +endif() # 3. Handle the result if(METIS_REAL_SIZE) if(METIS_REAL_SIZE EQUAL 4) From adbf7454aad074ed77cfd61387c5e15a847b87f9 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 20 Mar 2026 15:44:30 +0100 Subject: [PATCH 134/175] Update cmakelists --- CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43e364a16..a781278f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -533,11 +533,9 @@ endif() # 3. Handle the result if(METIS_REAL_SIZE) if(METIS_REAL_SIZE EQUAL 4) - set(METIS_INDEX 32) set(CREALMETIS "#define PSB_METIS_REAL_32") message(STATUS "Metis detected as 32-bit (real_t is 4 bytes)") elseif(METIS_REAL_SIZE EQUAL 8) - set(METIS_INDEX 64) set(CREALMETIS "#define PSB_METIS_REAL_64") message(STATUS "Metis detected as 64-bit (real_t is 8 bytes)") endif() @@ -563,10 +561,11 @@ endif() #[=====[ # Determine METIS_INDEX based on real type sizes - if(DEFINED PSB_METIS_REAL_32) + if(METIS_IDX_SIZE EQUAL 4) + set(METIS_INDEX 32) message(WARNING "Metis 32: ${METIS_INDEX}") - elseif(DEFINED PSB_METIS_REAL_64) + elseif(METIS_IDX_SIZE EQUAL 8) set(METIS_INDEX 64) message(STATUS "Metis 64: ${METIS_INDEX}") else() From 55b063d452d88e8a9e4ceba0cf4bde192bb9775e Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 20 Mar 2026 15:52:11 +0100 Subject: [PATCH 135/175] Fix cmakelists --- CMakeLists.txt | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a781278f4..99a1433e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -523,9 +523,11 @@ if(METIS_IDX_SIZE) if(METIS_IDX_SIZE EQUAL 4) set(CINTMETIS "#define PSB_METIS_32") message(STATUS "Metis detected as 32-bit (idx_t is 4 bytes)") + set(METIS_INDEX 32) elseif(METIS_IDX_SIZE EQUAL 8) set(CINTMETIS "#define PSB_METIS_64") message(STATUS "Metis detected as 64-bit (idx_t is 8 bytes)") + set(METIS_INDEX 64) endif() else() message(WARNING "Could not determine size of idx_t from metis.h. Check METIS_INCLUDES.") @@ -560,19 +562,6 @@ if(LPK_SIZE STREQUAL "8" AND METIS_INDEX EQUAL 32) endif() #[=====[ - # Determine METIS_INDEX based on real type sizes - if(METIS_IDX_SIZE EQUAL 4) - - set(METIS_INDEX 32) - message(WARNING "Metis 32: ${METIS_INDEX}") - elseif(METIS_IDX_SIZE EQUAL 8) - set(METIS_INDEX 64) - message(STATUS "Metis 64: ${METIS_INDEX}") - else() - message(STATUS "Neither METIS_REAL_32 nor METIS_REAL_64 is defined.") - set(METIS_INDEX 64) # Default to 64 if not defined - endif() - # Check conditions for LPK_SIZE and METIS_INDEX if(LPK_SIZE STREQUAL "4") From 322b8a95380ce0a8ef8bb62610578fcf030af286 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 20 Mar 2026 16:05:30 +0100 Subject: [PATCH 136/175] Fix cmakelists --- CMakeLists.txt | 36 +++++++++--------------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99a1433e8..91005a799 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -550,37 +550,19 @@ set(CMAKE_EXTRA_INCLUDE_FILES "") # Mismatch Logic Below if(LPK_SIZE STREQUAL "4" AND METIS_INDEX EQUAL 64) - message(WARNING "Mismatch: Metis is 64-bit but PSBLAS LPK is 32-bit") + message(WARNING "Mismatch: Metis IDX is 64-bit but PSBLAS LPK is 32-bit") set(METIS_FOUND FALSE) - set(CREALMETIS "") -endif() - -if(LPK_SIZE STREQUAL "8" AND METIS_INDEX EQUAL 32) + set(CREALMETIS "") + set(CINTMETIS "") +elseif(LPK_SIZE STREQUAL "8" AND METIS_INDEX EQUAL 32) set(METIS_FOUND FALSE) + message(WARNING "Mismatch: Metis IDX is 32-bit but PSBLAS LPK is 64-bit") set(CREALMETIS "") - message(WARNING "Mismatch: Metis is 32-bit but PSBLAS LPK is 64-bit") + set(CINTMETIS "") endif() - -#[=====[ - - # Check conditions for LPK_SIZE and METIS_INDEX - if(LPK_SIZE STREQUAL "4") - if(METIS_INDEX STREQUAL "64") - # Mismatch between METIS size and PSBLAS LPK - message(FATAL " Mismatch between metis ${METIS_INDEX} size and psblas LPK size ${LPK_SIZE}") - set(METIS_FOUND FALSE) - endif() - endif() - if(LPK_SIZE STREQUAL "8") - if(METIS_INDEX STREQUAL "32") - # Mismatch between METIS size and PSBLAS LPK - message(FATAL " Mismatch between metis ${METIS_INDEX} size and psblas LPK size ${LPK_SIZE}") - set(METIS_FOUND FALSE) - endif() - endif() -#]=====] - if(METIS_FOUND) + +if(METIS_FOUND) # Make sure this path is correct set(METISINCFILE "metis.h") # Adjust this to your actual path @@ -599,7 +581,7 @@ endif() set(CHAVEMETIS "#define PSB_HAVE_METIS") - set(CINTMETIS "#define PSB_METIS_${METIS_INDEX}") +# set(CINTMETIS "#define PSB_METIS_${METIS_INDEX}") # set(CREALMETIS "#define PSB_METIS_REAL_${LPK_SIZE}") # Configure the header file configure_file(${HEADER_TEMPLATE} ${HEADER_OUTPUT} @ONLY) From 02f1ef741cc50092cb8543b09d13e6d21254f3ac Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Mon, 23 Mar 2026 11:00:35 +0100 Subject: [PATCH 137/175] [] --- base/comm/internals/psi_cswapdata.F90 | 564 +++-- base/comm/internals/psi_cswaptran.F90 | 526 ++++- base/comm/internals/psi_dswapdata.F90 | 34 +- base/comm/internals/psi_dswaptran.F90 | 518 ++++- base/comm/internals/psi_iswapdata.F90 | 665 ++++-- base/comm/internals/psi_iswaptran.F90 | 577 ++++-- base/comm/internals/psi_lswapdata.F90 | 587 ++++-- base/comm/internals/psi_lswaptran.F90 | 619 ++++-- base/comm/internals/psi_sswapdata.F90 | 20 +- base/comm/internals/psi_sswaptran.F90 | 576 ++++-- base/comm/internals/psi_zswapdata.F90 | 468 ++++- base/comm/internals/psi_zswaptran.F90 | 618 ++++-- base/modules/Makefile | 2 +- base/modules/comm/psi_c_comm_v_mod.f90 | 88 +- base/modules/comm/psi_d_comm_v_mod.f90 | 31 +- base/modules/comm/psi_i_comm_v_mod.f90 | 88 +- base/modules/comm/psi_l_comm_v_mod.f90 | 88 +- base/modules/comm/psi_s_comm_v_mod.f90 | 20 - base/modules/comm/psi_z_comm_v_mod.f90 | 88 +- base/modules/serial/psb_c_base_vect_mod.F90 | 74 + base/modules/serial/psb_i_base_vect_mod.F90 | 83 +- base/modules/serial/psb_l_base_vect_mod.F90 | 90 +- base/modules/serial/psb_z_base_vect_mod.F90 | 74 + log.txt | 1819 ----------------- .../geaxpby/psblas_geaxpby_test.log | 1013 +++------ .../gedot/psblas_gedot_test.log | 1 + .../psblas_test_results.log | 712 +++++++ test/computational_routines/test.sh | 58 +- 28 files changed, 6017 insertions(+), 4084 deletions(-) delete mode 100644 log.txt diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index 657c9de6c..cf6733223 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -89,9 +89,10 @@ ! ! submodule (psi_c_comm_v_mod) psi_c_swapdata_impl + use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod contains - subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -101,34 +102,38 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_c_base_vect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + character(len=30) :: name info = psb_success_ name = 'psi_cswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -140,14 +145,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') + goto 9999 + end if + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + if (baseline) then + call psi_cswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_cswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -158,22 +194,8 @@ contains end subroutine psi_cswapdata_vect - ! - ! - ! Subroutine: psi_cswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_cswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) - + subroutine psi_cswap_baseline_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -182,13 +204,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me @@ -196,15 +218,15 @@ contains & iret, nesd, nerv integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti, n logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_cswap_vidx_vect' + info = psb_success_ + name = 'psi_cswap_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -222,8 +244,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() if (debug) write(*,*) me,'Internal buffer' @@ -240,12 +262,12 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -266,7 +288,7 @@ contains ! Then gather for sending. ! pnti = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ @@ -290,7 +312,7 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -323,12 +345,12 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -367,7 +389,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -407,7 +429,149 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_cswap_vidx_vect + end subroutine psi_cswap_baseline_vect + + + subroutine psi_cswap_neighbor_topology_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_cswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_cswap_neighbor_topology_vect ! ! @@ -426,34 +590,36 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_cswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -465,14 +631,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') + goto 9999 + end if + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + if (baseline) then + call psi_cswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_cswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -483,22 +680,8 @@ contains end subroutine psi_cswapdata_multivect - ! - ! - ! Subroutine: psi_cswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_cswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) - + subroutine psi_cswap_baseline_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -506,21 +689,20 @@ contains #ifdef PSB_MPI_H include 'mpif.h' #endif - - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_) :: beta + class(psb_c_base_multivect_type) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -547,8 +729,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -566,14 +748,14 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -594,9 +776,9 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ @@ -617,10 +799,10 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -652,14 +834,14 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -695,9 +877,9 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -737,6 +919,150 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_cswap_vidx_multivect + end subroutine psi_cswap_baseline_multivect + + + subroutine psi_cswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_cswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_cswap_neighbor_topology_multivect + + end submodule psi_c_swapdata_impl diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index 569852644..8c233e17e 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -103,22 +103,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_cswaptran_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -142,14 +146,46 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ctran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_ctran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -172,9 +208,8 @@ contains ! ! ! - module subroutine psi_ctran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - + module subroutine psi_ctran_baseline_vect(ctxt,flag,beta,y,idx,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -183,28 +218,28 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ctran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -222,8 +257,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -241,13 +276,13 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -270,7 +305,7 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ @@ -296,7 +331,7 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -329,12 +364,12 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -373,7 +408,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -414,9 +449,152 @@ contains return - end subroutine psi_ctran_vidx_vect + end subroutine psi_ctran_baseline_vect + + + + subroutine psi_ctran_neighbor_topology_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_cswap_trn_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_neighbor_topology_vect + ! ! ! @@ -437,22 +615,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_cswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -476,14 +658,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ctran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_ctran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -507,8 +720,8 @@ contains ! ! ! - module subroutine psi_ctran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + module subroutine psi_ctran_baseline_multivect(ctxt,flag,beta,y,idx,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -518,20 +731,20 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -558,8 +771,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -577,15 +790,15 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -606,9 +819,9 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ @@ -629,10 +842,10 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -665,14 +878,14 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -708,9 +921,9 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -753,6 +966,151 @@ contains return - end subroutine psi_ctran_vidx_multivect + end subroutine psi_ctran_baseline_multivect + + + + subroutine psi_ctran_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_ctran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ctran_neighbor_topology_multivect end submodule psi_c_swaptran_impl + + diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 4ed8cb48d..c21c2bbfe 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -109,18 +109,17 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name + integer(psb_ipk_) :: err_act + character(len=30) :: name info = psb_success_ name = 'psi_dswapdata_vect' @@ -448,8 +447,8 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - real(psb_dpk_), intent(in) :: beta integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv @@ -466,7 +465,7 @@ contains info = psb_success_ - name = 'psi_dswap_nbr_vect' + name = 'psi_dswap_neighbor_topology_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -622,16 +621,17 @@ contains integer(psb_ipk_), optional :: data ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=30) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name + info = psb_success_ name = 'psi_dswapdata_multivect' call psb_erractionsave(err_act) diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index 75e18f2a1..ec6e6d2e3 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -111,12 +111,17 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ name = 'psi_dswaptran_vect' call psb_erractionsave(err_act) @@ -142,14 +147,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_dtran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dtran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -161,7 +197,7 @@ contains ! ! - ! Subroutine: psi_dtran_vidx_vect + ! Subroutine: psi_dtran_baseline_vect ! Data exchange among processes. ! ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods @@ -172,8 +208,8 @@ contains ! ! ! - module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + module subroutine psi_dtran_baseline_vect(ctxt,flag,beta,y,idx,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -188,7 +224,7 @@ contains real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv integer(psb_ipk_), intent(out) :: info ! locals @@ -196,7 +232,7 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -204,7 +240,7 @@ contains character(len=20) :: name info = psb_success_ - name = 'psi_dtran_vidx_vect' + name = 'psi_dtran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -222,8 +258,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -241,13 +277,13 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -270,7 +306,7 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ @@ -296,7 +332,7 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -329,12 +365,12 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -373,7 +409,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -414,7 +450,169 @@ contains return - end subroutine psi_dtran_vidx_vect + end subroutine psi_dtran_baseline_vect + + + + + subroutine psi_dtran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_dtran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_dtran_neighbor_topology_vect + + ! @@ -445,21 +643,26 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + - info=psb_success_ - name='psi_swap_tranv' + info = psb_success_ + name = 'psi_dswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -476,14 +679,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_dtran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dtran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -493,22 +727,8 @@ contains return end subroutine psi_dswaptran_multivect - - ! - ! - ! Subroutine: psi_dtran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_dtran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_dtran_baseline_multivect(ctxt,flag,beta,y,idx,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -524,14 +744,14 @@ contains class(psb_d_base_multivect_type), intent(inout) :: y real(psb_dpk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -558,8 +778,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -577,15 +797,15 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -606,9 +826,9 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ @@ -629,10 +849,10 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -665,14 +885,14 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -708,9 +928,9 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -753,6 +973,166 @@ contains return - end subroutine psi_dtran_vidx_multivect + end subroutine psi_dtran_baseline_multivect + + + subroutine psi_dtran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_dtran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_dtran_neighbor_topology_multivect + + end submodule psi_d_swaptran_impl diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index 8d659f9b1..4d749ce62 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -100,22 +100,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(out) :: info ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_iswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -128,7 +132,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ + info = psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -139,14 +143,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_iswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_iswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -157,21 +192,8 @@ contains end subroutine psi_iswapdata_vect - ! - ! - ! Subroutine: psi_iswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_iswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_iswap_baseline_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -181,13 +203,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me @@ -221,9 +243,9 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() + totrcv_ = total_recv * n + totsnd_ = total_send * n + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -238,16 +260,16 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) @@ -265,13 +287,13 @@ contains ! Then gather for sending. ! pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) + call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -289,10 +311,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -322,15 +344,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -366,17 +388,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) + call y%sct(rcv_pt,nerv,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -406,16 +428,174 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_iswap_vidx_vect - - ! - ! - ! Subroutine: psi_iswapdata_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! + end subroutine psi_iswap_baseline_vect + + + + subroutine psi_iswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_iswap_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_iswap_neighbor_topology_vect + + + + + + + + module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -425,35 +605,39 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_iswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ + info = psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -464,14 +648,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_iswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -482,21 +697,8 @@ contains end subroutine psi_iswapdata_multivect - ! - ! - ! Subroutine: psi_iswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_iswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_iswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -506,13 +708,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -526,8 +728,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_iswap_baseline_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -546,10 +748,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -564,18 +766,18 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt @@ -595,11 +797,11 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -619,10 +821,10 @@ contains snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if ((nesd>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(snd_pt),n*nesd,& @@ -651,17 +853,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nesd>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -696,15 +898,15 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -736,6 +938,173 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_iswap_vidx_multivect + end subroutine psi_iswap_baseline_multivect + + + + + + +subroutine psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_iswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_iswap_neighbor_topology_multivect + + + + + end submodule psi_i_swapdata_impl diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index 0454bc1e6..2e540bb39 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -80,7 +80,6 @@ ! beta - integer Choose overwrite or sum. ! y - type(psb_i_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -90,7 +89,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -submodule (psi_i_comm_v_mod) psi_i_swaptran_impl +submodule (psi_i_comm_v_mod) psi_i_swaptran_impl use psb_base_mod contains module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,info,data) @@ -103,19 +102,21 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + character(len=20) :: name info = psb_success_ name = 'psi_iswaptran_vect' @@ -142,14 +143,33 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + ! choose baseline or neighbor-topology algorithm + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start= iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if (baseline) then + call psi_itran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_itran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + call psb_errpush(psb_err_mpi_error_,name,a_err='Incompatible flag settings') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -172,8 +192,8 @@ contains ! ! ! - module subroutine psi_itran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_itran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -183,13 +203,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -203,12 +223,12 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_itran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -222,10 +242,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -240,17 +260,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -270,14 +290,14 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) + call y%gth(idx_pt,nerv,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -296,10 +316,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -329,15 +349,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -373,17 +393,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) + call y%sct(snd_pt,nesd,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -414,19 +434,149 @@ contains return - end subroutine psi_itran_vidx_vect + end subroutine psi_itran_baseline_vect + + + subroutine psi_itran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_itran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran: gathering send data,', topology_total_send,' elems' + ! For tran we gather from recv_indexes (swap of roles) + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran: scattering recv data,', topology_total_recv,' elems' + ! For tran we scatter into send_indexes (swap of roles) + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_itran_neighbor_topology_vect + - ! - ! - ! - ! - ! Subroutine: psi_iswaptran_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD @@ -437,22 +587,27 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_tranv' + ! local variables for communication + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_iswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -476,14 +631,32 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start= iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if (baseline) then + call psi_itran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_itran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + call psb_errpush(psb_err_mpi_error_,name,a_err='Incompatible flag settings') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -494,21 +667,8 @@ contains end subroutine psi_iswaptran_multivect - ! - ! - ! Subroutine: psi_itran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_itran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + module subroutine psi_itran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -518,13 +678,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -538,12 +698,12 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_itran_baseline_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -558,10 +718,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -576,19 +736,19 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt @@ -608,11 +768,11 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) + call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -632,10 +792,10 @@ contains snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then @@ -665,17 +825,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -710,15 +870,15 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) + call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -753,6 +913,145 @@ contains return - end subroutine psi_itran_vidx_multivect + end subroutine psi_itran_baseline_multivect + + + subroutine psi_itran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_itran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_mv: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_mv: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_mv: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_mv: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_mv: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_mv: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_mv: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_itran_neighbor_topology_multivect + end submodule psi_i_swaptran_impl diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index 46b607dfc..11327e343 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -87,7 +87,7 @@ ! ! ! -submodule (psi_l_comm_v_mod) psi_l_swapdata_impl +submodule (psi_l_comm_v_mod) psi_l_swapdata_impl use psb_base_mod contains subroutine psi_lswapdata_vect(flag,beta,y,desc_a,info,data) @@ -100,22 +100,30 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! Decide which communication scheme to use: baseline (point-to-point / alltoallv) + ! or neighbor alltoallv topology (MPI >= 3.0). Follow conventions used in other + ! swapdata implementations: baseline when any of swap_mpi/swap_sync/swap_send/swap_recv + ! is set; neighbor topology when swap_start or swap_wait is set. + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + + info = psb_success_ + name = 'psi_lswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -139,14 +147,40 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_lswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_lswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -157,21 +191,8 @@ contains end subroutine psi_lswapdata_vect - ! - ! - ! Subroutine: psi_lswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_lswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_lswap_baseline_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -181,13 +202,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me @@ -202,8 +223,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_lswap_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -221,9 +242,9 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() + totrcv_ = total_recv * n + totsnd_ = total_send * n + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -238,16 +259,16 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) @@ -265,13 +286,13 @@ contains ! Then gather for sending. ! pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) + call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -289,10 +310,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -322,15 +343,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -366,17 +387,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) + call y%sct(rcv_pt,nerv,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -406,7 +427,7 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_lswap_vidx_vect + end subroutine psi_lswap_baseline_vect ! ! @@ -425,22 +446,27 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + ! Decide which communication scheme to use: baseline (point-to-point / alltoallv) + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + + info = psb_success_ + name = 'psi_lswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -464,14 +490,39 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_lswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_lswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -482,21 +533,8 @@ contains end subroutine psi_lswapdata_multivect - ! - ! - ! Subroutine: psi_lswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_lswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_lswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -509,10 +547,10 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + class(psb_l_base_multivect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -546,10 +584,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -564,18 +602,18 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt @@ -595,11 +633,11 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -619,10 +657,10 @@ contains snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if ((nesd>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(snd_pt),n*nesd,& @@ -651,17 +689,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nesd>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -696,15 +734,15 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -736,6 +774,281 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_lswap_vidx_multivect + end subroutine psi_lswap_baseline_multivect + + subroutine psi_lswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_lswap_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_swap: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_swap: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_swap: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_swap: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_lpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_swap: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_swap: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_swap: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_lswap_neighbor_topology_vect + + + subroutine psi_lswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_lswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_mv: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_mv: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_mv: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_mv: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_lpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_mv: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_mv: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_mv: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_lswap_neighbor_topology_multivect end submodule psi_l_swapdata_impl diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index ff7d34005..8dc032399 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -102,22 +102,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_tranv' + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + + info = psb_success_ + name = 'psi_lswaptran_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -130,7 +134,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ + info = psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -141,14 +145,39 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ltran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_ltran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -158,21 +187,9 @@ contains return end subroutine psi_lswaptran_vect - ! - ! - ! Subroutine: psi_ltran_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ltran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + + subroutine psi_ltran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -182,32 +199,32 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ltran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -221,10 +238,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -239,17 +256,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -269,14 +286,14 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) + call y%gth(idx_pt,nerv,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -295,10 +312,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -328,15 +345,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -372,17 +389,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) + call y%sct(snd_pt,nesd,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -413,21 +430,10 @@ contains return - end subroutine psi_ltran_vidx_vect - + end subroutine psi_ltran_baseline_vect - ! - ! - ! - ! - ! Subroutine: psi_lswaptran_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! - module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) + subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -436,22 +442,25 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_tranv' + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_lswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -475,14 +484,39 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ltran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_ltran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -493,21 +527,8 @@ contains end subroutine psi_lswaptran_multivect - ! - ! - ! Subroutine: psi_ltran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ltran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_ltran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -517,28 +538,28 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ltran_baseline_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -557,10 +578,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -575,19 +596,19 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt @@ -605,13 +626,13 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) + call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -628,13 +649,13 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then @@ -664,17 +685,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -707,17 +728,17 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) + call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -752,6 +773,282 @@ contains return - end subroutine psi_ltran_vidx_multivect + end subroutine psi_ltran_baseline_multivect + + + subroutine psi_ltran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type) :: y + integer(psb_lpk_) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_lpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ltran_neighbor_topology_vect + + + subroutine psi_ltran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: y + integer(psb_lpk_) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_mv: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_mv: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_mv: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_mv: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_lpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_mv: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_mv: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_mv: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ltran_neighbor_topology_multivect end submodule psi_l_swaptran_impl diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index 87bc2718a..c023724a5 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -103,26 +103,26 @@ contains #endif integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type), intent(inout) :: y real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name + integer(psb_ipk_) :: err_act + integer(psb_mpk_) :: me, np + character(len=30) :: name info = psb_success_ diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index 8d739dcbe..452e31924 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -80,7 +80,6 @@ ! beta - real Choose overwrite or sum. ! y - type(psb_s_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -111,11 +110,15 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av info = psb_success_ name = 'psi_sswaptran_vect' @@ -131,7 +134,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ + info = psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -142,14 +145,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_stran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_stran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -159,21 +193,9 @@ contains return end subroutine psi_sswaptran_vect - ! - ! - ! Subroutine: psi_stran_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_stran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + + module subroutine psi_stran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -185,18 +207,18 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info + real(psb_spk_), intent(in) :: beta class(psb_s_base_vect_type), intent(inout) :: y - real(psb_spk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -204,7 +226,7 @@ contains character(len=20) :: name info=psb_success_ - name='psi_swap_tran' + name='psi_stran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -222,10 +244,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -240,17 +262,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -270,14 +292,14 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) + call y%gth(idx_pt,nerv,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -296,10 +318,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -329,15 +351,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -373,17 +395,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) + call y%sct(snd_pt,nesd,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -414,7 +436,155 @@ contains return - end subroutine psi_stran_vidx_vect + end subroutine psi_stran_baseline_vect + + + + subroutine psi_stran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_stran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_spk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_stran_neighbor_topology_vect + + + + + + ! @@ -445,11 +615,15 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av info = psb_success_ name = 'psi_sswaptran_multivect' @@ -476,14 +650,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_stran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_stran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -494,21 +699,8 @@ contains end subroutine psi_sswaptran_multivect - ! - ! - ! Subroutine: psi_stran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_stran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_stran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -522,8 +714,8 @@ contains integer(psb_ipk_), intent(in) :: flag real(psb_spk_), intent(in) :: beta class(psb_s_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd,totrcv + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv integer(psb_ipk_), intent(out) :: info @@ -532,7 +724,7 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -559,10 +751,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -577,19 +769,19 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt @@ -607,13 +799,13 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) + call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -630,13 +822,13 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then @@ -666,17 +858,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -709,17 +901,17 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) + call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -754,6 +946,150 @@ contains return - end subroutine psi_stran_vidx_multivect + end subroutine psi_stran_baseline_multivect + + + + subroutine psi_stran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_stran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_spk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_stran_neighbor_topology_multivect + + end submodule psi_s_swaptran_impl diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index e525a45dc..601bc391a 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -88,9 +88,10 @@ ! ! submodule (psi_z_comm_v_mod) psi_z_swapdata_impl + use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod contains - subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -100,34 +101,37 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_z_base_vect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name - info=psb_success_ - name='psi_swap_datav' + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_zswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -139,14 +143,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_zswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_zswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -157,6 +192,163 @@ contains end subroutine psi_zswapdata_vect + subroutine psi_zswap_baseline_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + implicit none + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + call psi_zswap_vidx_vect(ctxt,flag,beta,y,idx,num_neighbors,total_send,total_recv,info) + end subroutine psi_zswap_baseline_vect + + + subroutine psi_zswap_neighbor_topology_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_zswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_zswap_neighbor_topology_vect + + ! ! ! Subroutine: psi_zswap_vidx_vect @@ -425,34 +617,36 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_z_base_multivect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_zswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -464,14 +658,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_zswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_zswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -482,6 +707,163 @@ contains end subroutine psi_zswapdata_multivect + subroutine psi_zswap_baseline_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + implicit none + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + call psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx,num_neighbors,total_send,total_recv,info) + end subroutine psi_zswap_baseline_multivect + + + subroutine psi_zswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_zswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_zswap_neighbor_topology_multivect + + ! ! ! Subroutine: psi_zswap_vidx_multivect diff --git a/base/comm/internals/psi_zswaptran.F90 b/base/comm/internals/psi_zswaptran.F90 index 7011cf391..308d19be8 100644 --- a/base/comm/internals/psi_zswaptran.F90 +++ b/base/comm/internals/psi_zswaptran.F90 @@ -102,22 +102,27 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av - info=psb_success_ - name='psi_swap_tranv' + + info = psb_success_ + name = 'psi_zswaptran_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -141,14 +146,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ztran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_ztran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -158,21 +194,8 @@ contains return end subroutine psi_zswaptran_vect - ! - ! - ! Subroutine: psi_ztran_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ztran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_ztran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -182,13 +205,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -202,8 +225,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ztran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -221,10 +244,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -239,17 +262,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -269,14 +292,14 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) + call y%gth(idx_pt,nerv,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -295,10 +318,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -328,15 +351,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -372,17 +395,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) + call y%sct(snd_pt,nesd,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -413,19 +436,151 @@ contains return - end subroutine psi_ztran_vidx_vect + end subroutine psi_ztran_baseline_vect + + + subroutine psi_ztran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_ztran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ztran_neighbor_topology_vect + - ! - ! - ! - ! - ! Subroutine: psi_zswaptran_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD @@ -436,22 +591,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_zswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -475,14 +634,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ztran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_ztran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) return @@ -493,21 +683,8 @@ contains end subroutine psi_zswaptran_multivect - ! - ! - ! Subroutine: psi_ztran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ztran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + module subroutine psi_ztran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -517,13 +694,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -537,8 +714,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ztran_baseline_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -557,10 +734,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -575,19 +752,19 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt @@ -607,11 +784,11 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) + call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -631,10 +808,10 @@ contains snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then @@ -664,17 +841,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -709,15 +886,15 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) + call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -752,6 +929,149 @@ contains return - end subroutine psi_ztran_vidx_multivect + end subroutine psi_ztran_baseline_multivect + + + + + subroutine psi_ztran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_ztran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ztran_neighbor_topology_multivect end submodule psi_z_swaptran_impl diff --git a/base/modules/Makefile b/base/modules/Makefile index 0f2ff5bba..3fd14a423 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -264,7 +264,7 @@ serial/psb_c_base_mat_mod.o: serial/psb_c_base_vect_mod.o serial/psb_z_base_mat_mod.o: serial/psb_z_base_vect_mod.o serial/psb_l_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o comm/psb_neighbor_topology_mod.o -serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: auxil/psi_serial_mod.o psb_realloc_mod.o +serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: auxil/psi_serial_mod.o psb_realloc_mod.o comm/psb_neighbor_topology_mod.o serial/psb_s_mat_mod.o: serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_vect_mod.o \ serial/psb_i_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_mat_mod.o: serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_vect_mod.o \ diff --git a/base/modules/comm/psi_c_comm_v_mod.f90 b/base/modules/comm/psi_c_comm_v_mod.f90 index f6e7f3d09..9c573e7cf 100644 --- a/base/modules/comm/psi_c_comm_v_mod.f90 +++ b/base/modules/comm/psi_c_comm_v_mod.f90 @@ -37,81 +37,41 @@ module psi_c_comm_v_mod interface psi_swapdata module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_vect module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_c_base_multivect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_multivect - module subroutine psi_cswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_cswap_vidx_vect - module subroutine psi_cswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_cswap_vidx_multivect end interface psi_swapdata interface psi_swaptran module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_vect module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_multivect - module subroutine psi_ctran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ctran_vidx_vect - module subroutine psi_ctran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ctran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index e22ed0f5f..19380e288 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -61,7 +61,9 @@ module psi_d_comm_v_mod interface psi_swaptran ! --------------------------------------------------------------- - ! Upper call in order to populate idx using desc_a%get_list_p + ! Upper call in order to populate idx using desc_a%get_list_p + ! and then call different communications schemes depending + ! on flag variable ! --------------------------------------------------------------- module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag @@ -79,33 +81,6 @@ module psi_d_comm_v_mod integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_multivect - - ! --------------------------------------------------------------- - - ! --------------------------------------------------------------- - ! Wrapper that calls different communications schemes depending on - ! flag variable - ! --------------------------------------------------------------- - module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type), intent(inout) :: y - real(psb_dpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_dtran_vidx_vect - module subroutine psi_dtran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type), intent(inout) :: y - real(psb_dpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_dtran_vidx_multivect ! --------------------------------------------------------------- end interface psi_swaptran diff --git a/base/modules/comm/psi_i_comm_v_mod.f90 b/base/modules/comm/psi_i_comm_v_mod.f90 index 6db43c15e..b729ece67 100644 --- a/base/modules/comm/psi_i_comm_v_mod.f90 +++ b/base/modules/comm/psi_i_comm_v_mod.f90 @@ -38,81 +38,41 @@ module psi_i_comm_v_mod interface psi_swapdata module subroutine psi_iswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_vect module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_multivect - module subroutine psi_iswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_iswap_vidx_vect - module subroutine psi_iswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_iswap_vidx_multivect end interface psi_swapdata interface psi_swaptran module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_vect module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_multivect - module subroutine psi_itran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_itran_vidx_vect - module subroutine psi_itran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_itran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/comm/psi_l_comm_v_mod.f90 b/base/modules/comm/psi_l_comm_v_mod.f90 index 3d30ba410..bcc33a2c8 100644 --- a/base/modules/comm/psi_l_comm_v_mod.f90 +++ b/base/modules/comm/psi_l_comm_v_mod.f90 @@ -39,81 +39,41 @@ module psi_l_comm_v_mod interface psi_swapdata module subroutine psi_lswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_vect module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_multivect - module subroutine psi_lswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_lswap_vidx_vect - module subroutine psi_lswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_lswap_vidx_multivect end interface psi_swapdata interface psi_swaptran module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_vect module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_multivect - module subroutine psi_ltran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ltran_vidx_vect - module subroutine psi_ltran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ltran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/comm/psi_s_comm_v_mod.f90 b/base/modules/comm/psi_s_comm_v_mod.f90 index 7becf153a..65cb904fc 100644 --- a/base/modules/comm/psi_s_comm_v_mod.f90 +++ b/base/modules/comm/psi_s_comm_v_mod.f90 @@ -73,26 +73,6 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data end subroutine psi_sswaptran_multivect - module subroutine psi_stran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta - class(psb_s_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - integer(psb_ipk_), intent(out) :: info - end subroutine psi_stran_vidx_vect - module subroutine psi_stran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta - class(psb_s_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - integer(psb_ipk_), intent(out) :: info - end subroutine psi_stran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/comm/psi_z_comm_v_mod.f90 b/base/modules/comm/psi_z_comm_v_mod.f90 index 2421c59dd..745d45318 100644 --- a/base/modules/comm/psi_z_comm_v_mod.f90 +++ b/base/modules/comm/psi_z_comm_v_mod.f90 @@ -37,81 +37,41 @@ module psi_z_comm_v_mod interface psi_swapdata module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_vect module subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_multivect - module subroutine psi_zswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_zswap_vidx_vect - module subroutine psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_zswap_vidx_multivect end interface psi_swapdata interface psi_swaptran module subroutine psi_zswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_vect module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_multivect - module subroutine psi_ztran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ztran_vidx_vect - module subroutine psi_ztran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ztran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index a30e25470..dc16f63b2 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -49,6 +49,7 @@ module psb_c_base_vect_mod use psb_realloc_mod use psb_i_base_vect_mod use psb_l_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_c_base_vect_type !! The psb_c_base_vect_type @@ -65,6 +66,7 @@ module psb_c_base_vect_mod complex(psb_spk_), allocatable :: v(:) complex(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -77,6 +79,8 @@ module psb_c_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -241,6 +245,10 @@ module psb_c_base_vect_mod procedure, pass(z) :: addconst_v2 => c_base_addconst_v2 generic, public :: addconst => addconst_a2,addconst_v2 + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => c_base_init_topology + procedure, pass(x) :: free_topology => c_base_free_topology + end type psb_c_base_vect_type @@ -2430,6 +2438,35 @@ contains if (x%is_dev()) call x%sync() call z%addconst(x%v,b,info) end subroutine c_base_addconst_v2 + + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine c_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine c_base_init_topology + + subroutine c_base_free_topology(x, info) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine c_base_free_topology + ! -------------------------------------------------------------------- end module psb_c_base_vect_mod @@ -2439,6 +2476,7 @@ module psb_c_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_c_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_c_base_vect_type !! The psb_c_base_vect_type @@ -2458,6 +2496,7 @@ module psb_c_base_multivect_mod complex(psb_spk_), allocatable :: v(:,:) complex(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2470,6 +2509,8 @@ module psb_c_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -2595,6 +2636,10 @@ module psb_c_base_multivect_mod procedure, pass(y) :: sctb_x => c_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => c_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => c_base_mlv_init_topology + procedure, pass(x) :: free_topology => c_base_mlv_free_topology end type psb_c_base_multivect_type interface psb_c_base_multivect @@ -4118,4 +4163,33 @@ contains end subroutine c_base_mlv_device_wait + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine c_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_c_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine c_base_mlv_init_topology + + subroutine c_base_mlv_free_topology(x, info) + implicit none + class(psb_c_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine c_base_mlv_free_topology + ! -------------------------------------------------------------------- + end module psb_c_base_multivect_mod diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 21413168b..92fa7d9db 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -47,6 +47,7 @@ module psb_i_base_vect_mod use psb_const_mod use psb_error_mod use psb_realloc_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_i_base_vect_type !! The psb_i_base_vect_type @@ -62,7 +63,9 @@ module psb_i_base_vect_mod !> Values. integer(psb_ipk_), allocatable :: v(:) integer(psb_ipk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -75,6 +78,9 @@ module psb_i_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -170,9 +176,9 @@ module psb_i_base_vect_mod procedure, pass(x) :: check_addr => i_base_check_addr - - - + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => i_base_init_topology + procedure, pass(x) :: free_topology => i_base_free_topology end type psb_i_base_vect_type @@ -1387,6 +1393,33 @@ contains end subroutine i_base_sctb_buf + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine i_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine i_base_init_topology + + subroutine i_base_free_topology(x, info) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine i_base_free_topology + ! -------------------------------------------------------------------- end module psb_i_base_vect_mod @@ -1397,6 +1430,7 @@ module psb_i_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_i_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_i_base_vect_type !! The psb_i_base_vect_type @@ -1415,7 +1449,9 @@ module psb_i_base_multivect_mod !> Values. integer(psb_ipk_), allocatable :: v(:,:) integer(psb_ipk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -1428,6 +1464,9 @@ module psb_i_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -1520,6 +1559,11 @@ module psb_i_base_multivect_mod procedure, pass(y) :: sctb_x => i_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => i_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => i_base_mlv_init_topology + procedure, pass(x) :: free_topology => i_base_mlv_free_topology + end type psb_i_base_multivect_type interface psb_i_base_multivect @@ -2561,4 +2605,33 @@ contains end subroutine i_base_mlv_device_wait + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine i_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_i_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine i_base_mlv_init_topology + + subroutine i_base_mlv_free_topology(x, info) + implicit none + class(psb_i_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine i_base_mlv_free_topology + ! -------------------------------------------------------------------- + end module psb_i_base_multivect_mod diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index 874c097cf..b7668495b 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -48,6 +48,7 @@ module psb_l_base_vect_mod use psb_error_mod use psb_realloc_mod use psb_i_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_l_base_vect_type !! The psb_l_base_vect_type @@ -63,7 +64,9 @@ module psb_l_base_vect_mod !> Values. integer(psb_lpk_), allocatable :: v(:) integer(psb_lpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -76,6 +79,10 @@ module psb_l_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -172,9 +179,9 @@ module psb_l_base_vect_mod procedure, pass(x) :: check_addr => l_base_check_addr - - - + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => l_base_init_topology + procedure, pass(x) :: free_topology => l_base_free_topology end type psb_l_base_vect_type @@ -1388,6 +1395,34 @@ contains end subroutine l_base_sctb_buf + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine l_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine l_base_init_topology + + subroutine l_base_free_topology(x, info) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine l_base_free_topology + ! -------------------------------------------------------------------- + end module psb_l_base_vect_mod @@ -1398,6 +1433,7 @@ module psb_l_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_l_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_l_base_vect_type !! The psb_l_base_vect_type @@ -1416,7 +1452,9 @@ module psb_l_base_multivect_mod !> Values. integer(psb_lpk_), allocatable :: v(:,:) integer(psb_lpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -1429,6 +1467,9 @@ module psb_l_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -1521,6 +1562,12 @@ module psb_l_base_multivect_mod procedure, pass(y) :: sctb_x => l_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => l_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => l_base_mlv_init_topology + procedure, pass(x) :: free_topology => l_base_mlv_free_topology + end type psb_l_base_multivect_type interface psb_l_base_multivect @@ -2562,4 +2609,37 @@ contains end subroutine l_base_mlv_device_wait + + + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine l_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_l_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine l_base_mlv_init_topology + + subroutine l_base_mlv_free_topology(x, info) + implicit none + class(psb_l_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine l_base_mlv_free_topology + ! -------------------------------------------------------------------- + + + end module psb_l_base_multivect_mod diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 141974086..7b08c25ee 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -49,6 +49,7 @@ module psb_z_base_vect_mod use psb_realloc_mod use psb_i_base_vect_mod use psb_l_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_z_base_vect_type !! The psb_z_base_vect_type @@ -65,6 +66,7 @@ module psb_z_base_vect_mod complex(psb_dpk_), allocatable :: v(:) complex(psb_dpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -77,6 +79,8 @@ module psb_z_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -241,6 +245,10 @@ module psb_z_base_vect_mod procedure, pass(z) :: addconst_v2 => z_base_addconst_v2 generic, public :: addconst => addconst_a2,addconst_v2 + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => z_base_init_topology + procedure, pass(x) :: free_topology => z_base_free_topology + end type psb_z_base_vect_type @@ -2430,6 +2438,35 @@ contains if (x%is_dev()) call x%sync() call z%addconst(x%v,b,info) end subroutine z_base_addconst_v2 + + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine z_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine z_base_init_topology + + subroutine z_base_free_topology(x, info) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine z_base_free_topology + ! -------------------------------------------------------------------- end module psb_z_base_vect_mod @@ -2439,6 +2476,7 @@ module psb_z_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_z_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_z_base_vect_type !! The psb_z_base_vect_type @@ -2458,6 +2496,7 @@ module psb_z_base_multivect_mod complex(psb_dpk_), allocatable :: v(:,:) complex(psb_dpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2470,6 +2509,8 @@ module psb_z_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -2595,6 +2636,10 @@ module psb_z_base_multivect_mod procedure, pass(y) :: sctb_x => z_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => z_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => z_base_mlv_init_topology + procedure, pass(x) :: free_topology => z_base_mlv_free_topology end type psb_z_base_multivect_type interface psb_z_base_multivect @@ -4118,4 +4163,33 @@ contains end subroutine z_base_mlv_device_wait + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine z_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_z_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine z_base_mlv_init_topology + + subroutine z_base_mlv_free_topology(x, info) + implicit none + class(psb_z_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine z_base_mlv_free_topology + ! -------------------------------------------------------------------- + end module psb_z_base_multivect_mod diff --git a/log.txt b/log.txt deleted file mode 100644 index 8ae9e16ab..000000000 --- a/log.txt +++ /dev/null @@ -1,1819 +0,0 @@ -(if test ! -d lib ; then mkdir lib; fi) -make -C base mods -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " -(if test ! -d include ; then mkdir include; fi; /usr/bin/install -c -p -m 644 Make.inc include/Make.inc.psblas) -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_const_mod.F90 -o psb_const_mod.o -(if test ! -d modules ; then mkdir modules; fi;) -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cbind_const_mod.F90 -o psb_cbind_const_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_mod.F90 -o psb_error_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_string_mod.f90 -o auxil/psb_string_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_m_serial_mod.f90 -o auxil/psi_m_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_e_serial_mod.f90 -o auxil/psi_e_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_s_serial_mod.f90 -o auxil/psi_s_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_d_serial_mod.f90 -o auxil/psi_d_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_c_serial_mod.f90 -o auxil/psi_c_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_z_serial_mod.f90 -o auxil/psi_z_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_acx_mod.f90 -o auxil/psi_acx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_alcx_mod.f90 -o auxil/psi_alcx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_lcx_mod.f90 -o auxil/psi_lcx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_realloc_mod.F90 -o auxil/psb_m_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_realloc_mod.F90 -o auxil/psb_e_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_realloc_mod.F90 -o auxil/psb_s_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_realloc_mod.F90 -o auxil/psb_d_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_realloc_mod.F90 -o auxil/psb_c_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_realloc_mod.F90 -o auxil/psb_z_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_realloc_mod.F90 -o psb_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_serial_mod.f90 -o auxil/psi_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c desc/psb_desc_const_mod.f90 -o desc/psb_desc_const_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_hsort_mod.f90 -o auxil/psb_m_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_isort_mod.f90 -o auxil/psb_m_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_msort_mod.f90 -o auxil/psb_m_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_qsort_mod.f90 -o auxil/psb_m_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_hsort_mod.f90 -o auxil/psb_e_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_isort_mod.f90 -o auxil/psb_e_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_msort_mod.f90 -o auxil/psb_e_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_qsort_mod.f90 -o auxil/psb_e_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_mod.f90 -o auxil/psb_s_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_isort_mod.f90 -o auxil/psb_s_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_msort_mod.f90 -o auxil/psb_s_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_qsort_mod.f90 -o auxil/psb_s_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_mod.f90 -o auxil/psb_d_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_isort_mod.f90 -o auxil/psb_d_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_msort_mod.f90 -o auxil/psb_d_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_qsort_mod.f90 -o auxil/psb_d_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_mod.f90 -o auxil/psb_c_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_isort_mod.f90 -o auxil/psb_c_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_msort_mod.f90 -o auxil/psb_c_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_qsort_mod.f90 -o auxil/psb_c_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_mod.f90 -o auxil/psb_z_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_isort_mod.f90 -o auxil/psb_z_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_msort_mod.f90 -o auxil/psb_z_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_qsort_mod.f90 -o auxil/psb_z_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_i_hsort_x_mod.f90 -o auxil/psb_i_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_l_hsort_x_mod.f90 -o auxil/psb_l_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_x_mod.f90 -o auxil/psb_s_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_ip_reord_mod.F90 -o auxil/psb_m_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_ip_reord_mod.F90 -o auxil/psb_e_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_ip_reord_mod.F90 -o auxil/psb_s_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_ip_reord_mod.F90 -o auxil/psb_d_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_ip_reord_mod.F90 -o auxil/psb_c_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_ip_reord_mod.F90 -o auxil/psb_z_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_mod.F90 -o desc/psb_hash_mod.o -mpicc -g -O3 -I. -c desc/psb_hashval.c -o desc/psb_hashval.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/psb_neighbor_topology_mod.F90 -o comm/psb_neighbor_topology_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_x_mod.f90 -o auxil/psb_d_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_x_mod.f90 -o auxil/psb_c_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_base_vect_mod.F90 -o serial/psb_i_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_base_mat_mod.F90 -o serial/psb_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_x_mod.f90 -o auxil/psb_z_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_ip_reord_mod.F90 -o auxil/psb_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_sort_mod.f90 -o auxil/psb_sort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_vect_mod.F90 -o serial/psb_i_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_base_vect_mod.F90 -o serial/psb_l_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_vect_mod.F90 -o serial/psb_l_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_vect_mod.F90 -o serial/psb_d_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_vect_mod.F90 -o serial/psb_s_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_vect_mod.F90 -o serial/psb_c_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_vect_mod.F90 -o serial/psb_z_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_vect_mod.F90 -o serial/psb_z_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_mat_mod.F90 -o serial/psb_z_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_vect_mod.F90 -o serial/psb_d_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_mat_mod.F90 -o serial/psb_d_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_vect_mod.F90 -o serial/psb_s_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_mat_mod.F90 -o serial/psb_s_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csr_mat_mod.f90 -o serial/psb_z_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csc_mat_mod.f90 -o serial/psb_z_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csr_mat_mod.f90 -o serial/psb_d_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csc_mat_mod.f90 -o serial/psb_d_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_vect_mod.F90 -o serial/psb_c_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_mat_mod.F90 -o serial/psb_c_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csr_mat_mod.f90 -o serial/psb_s_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csc_mat_mod.f90 -o serial/psb_s_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_rb_idx_tree_mod.f90 -o auxil/psb_z_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_rb_idx_tree_mod.f90 -o auxil/psb_d_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csr_mat_mod.f90 -o serial/psb_c_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csc_mat_mod.f90 -o serial/psb_c_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_rb_idx_tree_mod.f90 -o auxil/psb_s_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_mat_mod.F90 -o serial/psb_z_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_rb_idx_tree_mod.f90 -o auxil/psb_c_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_mat_mod.F90 -o serial/psb_d_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_rb_idx_tree_mod.f90 -o auxil/psb_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_mat_mod.F90 -o serial/psb_s_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_vect_mod.f90 -o serial/psb_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_mat_mod.F90 -o serial/psb_c_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_mat_mod.f90 -o serial/psb_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_serial_mod.f90 -o serial/psb_s_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_serial_mod.f90 -o serial/psb_d_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_serial_mod.f90 -o serial/psb_c_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_serial_mod.f90 -o serial/psb_z_serial_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_penv_mod.F90 -o penv/psi_penv_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_p2p_mod.F90 -o penv/psi_i2_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_p2p_mod.F90 -o penv/psi_m_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_p2p_mod.F90 -o penv/psi_e_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_p2p_mod.F90 -o penv/psi_s_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_p2p_mod.F90 -o penv/psi_d_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_p2p_mod.F90 -o penv/psi_c_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_p2p_mod.F90 -o penv/psi_z_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_collective_mod.F90 -o penv/psi_i2_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_collective_mod.F90 -o penv/psi_e_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_collective_mod.F90 -o penv/psi_m_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_collective_mod.F90 -o penv/psi_s_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_collective_mod.F90 -o penv/psi_d_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_collective_mod.F90 -o penv/psi_c_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_collective_mod.F90 -o penv/psi_z_collective_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_p2p_mod.F90 -o penv/psi_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_serial_mod.f90 -o serial/psb_serial_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_collective_mod.F90 -o penv/psi_collective_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c psb_penv_mod.F90 -o psb_penv_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_indx_map_mod.F90 -o desc/psb_indx_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_timers_mod.f90 -o psb_timers_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_impl.F90 -o psb_error_impl.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_map_mod.F90 -o desc/psb_hash_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_list_map_mod.F90 -o desc/psb_list_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_repl_map_mod.F90 -o desc/psb_repl_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_gen_block_map_mod.F90 -o desc/psb_gen_block_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_glist_map_mod.F90 -o desc/psb_glist_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_desc_mod.F90 -o desc/psb_desc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_e_comm_a_mod.f90 -o comm/psi_e_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_m_comm_a_mod.f90 -o comm/psi_m_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_a_mod.f90 -o comm/psi_s_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_a_mod.f90 -o comm/psi_d_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_a_mod.f90 -o comm/psi_c_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_a_mod.f90 -o comm/psi_z_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i_comm_mod.f90 -o comm/psb_i_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_l_comm_mod.f90 -o comm/psb_l_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_mod.f90 -o comm/psb_s_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_mod.f90 -o comm/psb_d_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_mod.f90 -o comm/psb_c_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_mod.f90 -o comm/psb_z_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_m_comm_a_mod.f90 -o comm/psb_m_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_e_comm_a_mod.f90 -o comm/psb_e_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_a_mod.f90 -o comm/psb_s_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_a_mod.f90 -o comm/psb_d_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_a_mod.f90 -o comm/psb_c_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_a_mod.f90 -o comm/psb_z_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_s_psblas_mod.F90 -o psblas/psb_s_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_c_psblas_mod.F90 -o psblas/psb_c_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_d_psblas_mod.F90 -o psblas/psb_d_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_z_psblas_mod.F90 -o psblas/psb_z_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_check_mod.f90 -o psb_check_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_v_mod.f90 -o comm/psi_d_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_v_mod.f90 -o comm/psi_s_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_v_mod.f90 -o comm/psi_z_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_v_mod.f90 -o comm/psi_c_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_i_comm_v_mod.f90 -o comm/psi_i_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_l_comm_v_mod.f90 -o comm/psi_l_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_i_mod.F90 -o psi_i_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_mod.F90 -o psi_s_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_mod.F90 -o psi_z_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_mod.F90 -o psi_d_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_mod.F90 -o psi_c_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_l_mod.F90 -o psi_l_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psblas/psb_psblas_mod.f90 -o psblas/psb_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psi_mod.f90 -o psi_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_comm_mod.f90 -o comm/psb_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_cd_tools_mod.F90 -o tools/psb_cd_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_m_tools_a_mod.f90 -o tools/psb_m_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_e_tools_a_mod.f90 -o tools/psb_e_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_s_tools_mod.F90 -o tools/psb_s_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_d_tools_mod.F90 -o tools/psb_d_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_c_tools_mod.F90 -o tools/psb_c_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_z_tools_mod.F90 -o tools/psb_z_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_s_tools_a_mod.f90 -o tools/psb_s_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_d_tools_a_mod.f90 -o tools/psb_d_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_c_tools_a_mod.f90 -o tools/psb_c_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_z_tools_a_mod.f90 -o tools/psb_z_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_i_tools_mod.F90 -o tools/psb_i_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_l_tools_mod.F90 -o tools/psb_l_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_tools_mod.f90 -o tools/psb_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_base_linmap_mod.f90 -o comm/psb_base_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_linmap_mod.f90 -o comm/psb_s_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_linmap_mod.f90 -o comm/psb_d_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_linmap_mod.f90 -o comm/psb_c_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_linmap_mod.f90 -o comm/psb_z_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_linmap_mod.f90 -o comm/psb_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c error.f90 -o error.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_base_mod.f90 -o psb_base_mod.o -mpicc -g -O3 -I. -c cutil.c -o cutil.o -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C util mods -make -C prec mods -make -C ext mods -make -C base objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_blockpart_mod.f90 -o psb_blockpart_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_const_mod.f90 -o psb_prec_const_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpicc -g -O3 -I. -I../include -c psb_metis_int.c -o psb_metis_int.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_ell_mat_mod.f90 -o psb_d_ell_mat_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_i_ext_util_mod.f90 -o psi_i_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_partidx_mod.F90 -o psb_partidx_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_tools_mod.f90 -o psb_c_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_s_ext_util_mod.f90 -o psi_s_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_hbio_mod.f90 -o psb_hbio_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_tools_mod.f90 -o psb_d_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_c_ext_util_mod.f90 -o psi_c_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_tools_mod.f90 -o psb_s_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mmio_mod.F90 -o psb_mmio_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_d_ext_util_mod.f90 -o psi_d_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_mod.f90 -o psb_s_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_tools_mod.f90 -o psb_z_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_z_ext_util_mod.f90 -o psi_z_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_mod.f90 -o psb_d_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_ell_mat_mod.f90 -o psb_s_ell_mat_mod.o -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_mod.f90 -o psb_c_mat_dist_mod.o -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_base_mat_impl.f90 -o psb_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_ell_mat_mod.f90 -o psb_c_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_mod.f90 -o psb_z_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_ell_mat_mod.f90 -o psb_z_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_renum_mod.f90 -o psb_s_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_renum_mod.f90 -o psb_d_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_renum_mod.f90 -o psb_c_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_renum_mod.f90 -o psb_z_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dns_mat_mod.f90 -o psb_s_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dns_mat_mod.f90 -o psb_d_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dns_mat_mod.f90 -o psb_c_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o -make -C comm objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata.F90 -o psi_dswapdata.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_restr.f90 -o psi_iovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_save.f90 -o psi_iovrl_save.o -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter.F90 -o psb_dscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_base_prec_mod.f90 -o psb_s_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_base_prec_mod.f90 -o psb_d_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_mat_dist_mod.f90 -o psb_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_upd.f90 -o psi_iovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_base_prec_mod.f90 -o psb_c_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dns_mat_mod.f90 -o psb_z_dns_mat_mod.o -make -C sort objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_hsort_impl.f90 -o psb_s_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_ext_util_mod.f90 -o psi_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter.F90 -o psb_zscatter.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_isort_impl.f90 -o psb_s_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_msort_impl.f90 -o psb_s_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_base_prec_mod.f90 -o psb_z_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ilu_fact_mod.f90 -o psb_d_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lsame.f90 -o psb_lsame.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather.f90 -o psb_dgather.o -make -C auxil objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_desc_index.F90 -o psi_desc_index.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_qsort_impl.f90 -o psb_s_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_hsort_impl.f90 -o psb_d_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_isort_impl.f90 -o psb_d_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_msort_impl.f90 -o psb_d_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hll_mat_mod.f90 -o psb_d_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_iscatter.F90 -o psb_iscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_lscatter.F90 -o psb_lscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter.F90 -o psb_cscatter.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran.F90 -o psi_dswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_fnd_owner.F90 -o psi_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_qsort_impl.f90 -o psb_d_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hll_mat_mod.f90 -o psb_s_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_hsort_impl.f90 -o psb_c_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_ainv_tools_mod.f90 -o psb_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_bnd_elem.f90 -o psi_crea_bnd_elem.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter.F90 -o psb_sscatter.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hll_mat_mod.f90 -o psb_c_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter_a.F90 -o psb_dscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_isort_impl.f90 -o psb_c_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter_a.F90 -o psb_zscatter_a.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hll_mat_mod.f90 -o psb_z_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_msort_impl.f90 -o psb_c_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather.f90 -o psb_sgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_qsort_impl.f90 -o psb_c_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dia_mat_mod.f90 -o psb_d_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata.F90 -o psi_sswapdata.o -make -C psblas objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddot.f90 -o psb_ddot.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hdia_mat_mod.f90 -o psb_d_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dia_mat_mod.f90 -o psb_s_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hdia_mat_mod.f90 -o psb_s_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mscatter_a.F90 -o psb_mscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dia_mat_mod.f90 -o psb_c_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hdia_mat_mod.f90 -o psb_c_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dia_mat_mod.f90 -o psb_z_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hdia_mat_mod.f90 -o psb_z_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_a2a_fnd_owner.F90 -o psi_a2a_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ext_mod.F90 -o psb_ext_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_restr.f90 -o psi_lovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_hsort_impl.f90 -o psb_z_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ilu_fact_mod.f90 -o psb_s_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_isort_impl.f90 -o psb_z_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_fact_mod.f90 -o psb_s_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ilu_fact_mod.f90 -o psb_c_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_msort_impl.f90 -o psb_z_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_qsort_impl.f90 -o psb_z_qsort_impl.o -make -C tools objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_icdasb.F90 -o psb_icdasb.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran.F90 -o psi_sswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_igather.f90 -o psb_igather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_escatter_a.F90 -o psb_escatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_hsort_impl.f90 -o psb_m_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter_a.F90 -o psb_cscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_isort_impl.f90 -o psb_m_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter_a.F90 -o psb_sscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_msort_impl.f90 -o psb_m_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_fact_mod.f90 -o psb_c_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspgather.F90 -o psb_dspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdall.f90 -o psb_cdall.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_qsort_impl.f90 -o psb_m_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ihalo.f90 -o psb_ihalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_graph_fnd_owner.F90 -o psi_graph_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_hsort_impl.f90 -o psb_e_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssphalo.F90 -o psb_ssphalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswapdata.F90 -o psi_iswapdata.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_isort_impl.f90 -o psb_e_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_index.f90 -o psi_crea_index.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_msort_impl.f90 -o psb_e_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax.f90 -o psb_damax.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invk_fact_mod.f90 -o psb_c_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum.f90 -o psb_dasum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save.f90 -o psi_sovrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdals.f90 -o psb_cdals.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd.f90 -o psi_sovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csc_impl.F90 -o psb_s_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_m_serial_impl.F90 -o psi_m_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswaptran.F90 -o psi_iswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invt_fact_mod.f90 -o psb_c_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daxpby.f90 -o psb_daxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrm2.f90 -o psb_dnrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrmi.f90 -o psb_dnrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_mat_impl.F90 -o psb_s_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_ovr_elem.f90 -o psi_crea_ovr_elem.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmpovrl.f90 -o psi_bld_tmpovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspgather.F90 -o psb_sspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ilu_fact_mod.f90 -o psb_z_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdalv.f90 -o psb_cdalv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_inloc.f90 -o psb_cd_inloc.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_util_mod.f90 -o psb_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspgather.F90 -o psb_zspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsphalo.F90 -o psb_dsphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_fact_mod.f90 -o psb_z_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invk_fact_mod.f90 -o psb_z_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invt_fact_mod.f90 -o psb_z_invt_fact_mod.o -/bin/cp -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdins.F90 -o psb_cdins.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr.f90 -o psi_dovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save.f90 -o psi_dovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd.f90 -o psi_dovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata.F90 -o psi_cswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_rb_idx_tree_impl.F90 -o psb_s_rb_idx_tree_impl.o -make -C ext objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_from_coo.f90 -o psb_s_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_to_coo.f90 -o psb_s_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_biconjg_mod.F90 -o psb_c_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr.f90 -o psi_covrl_restr.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lgather.f90 -o psb_lgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lhalo.f90 -o psb_lhalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lovrl.f90 -o psb_lovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspgather.F90 -o psb_cspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmphalo.f90 -o psi_bld_tmphalo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_coo.f90 -o psb_s_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_fmt.f90 -o psb_s_cp_ell_from_fmt.o -/usr/bin/install -c -p -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_sort_dl.f90 -o psi_sort_dl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csphalo.F90 -o psb_csphalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran.F90 -o psi_cswaptran.o -make -C util objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -/usr/bin/install -c -p -p *.mod ../modules -mpicc -g -O3 -I. -I../include -c psb_amd_order.c -o psb_amd_order.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_hbio_impl.f90 -o psb_s_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_hbio_impl.f90 -o psb_d_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_biconjg_mod.F90 -o psb_d_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save.f90 -o psi_covrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_biconjg_mod.F90 -o psb_s_biconjg_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_coo.f90 -o psb_s_cp_ell_to_coo.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather.f90 -o psb_cgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata.F90 -o psi_zswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspnrm1.f90 -o psb_sspnrm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_fmt.f90 -o psb_s_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_hbio_impl.f90 -o psb_c_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_e_serial_impl.F90 -o psi_e_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_indx_map_fnd_owner.F90 -o psi_indx_map_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_desc_impl.f90 -o psi_desc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_biconjg_mod.F90 -o psb_z_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspnrm1.f90 -o psb_dspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdprt.f90 -o psb_cdprt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd.f90 -o psi_covrl_upd.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_from_coo.f90 -o psb_s_cp_hdia_from_coo.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr.f90 -o psi_zovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save.f90 -o psi_zovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran.F90 -o psi_zswaptran.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_to_coo.f90 -o psb_s_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csr_impl.F90 -o psb_d_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdren.f90 -o psb_cdren.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_coo_impl.F90 -o psb_d_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd.f90 -o psi_zovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_serial_impl.F90 -o psi_s_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspnrm1.f90 -o psb_cspnrm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_coo.f90 -o psb_s_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_fmt.f90 -o psb_s_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_hash_impl.f90 -o psi_hash_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_srtlist.f90 -o psi_srtlist.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsphalo.F90 -o psb_zsphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_type.f90 -o psb_s_prec_type.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csc_impl.F90 -o psb_d_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata_a.F90 -o psi_dswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspnrm1.f90 -o psb_zspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdrep.f90 -o psb_cdrep.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_get_overlap.f90 -o psb_get_overlap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_serial_impl.F90 -o psi_d_serial_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_coo.f90 -o psb_s_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_bld_glb_dep_list.F90 -o psi_bld_glb_dep_list.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_xtr_loc_dl.F90 -o psi_xtr_loc_dl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_hbio_impl.f90 -o psb_z_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mmio_impl.f90 -o psb_s_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax.f90 -o psb_zamax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum.f90 -o psb_zasum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_serial_impl.F90 -o psi_c_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_type.f90 -o psb_d_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_type.f90 -o psb_c_prec_type.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_fmt.f90 -o psb_s_cp_hll_to_fmt.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_restr_a.f90 -o psi_movrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_save_a.f90 -o psi_movrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaxpby.f90 -o psb_zaxpby.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_aclsum.f90 -o psb_s_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_allocate_mnnz.f90 -o psb_s_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_arwsum.f90 -o psb_s_dia_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mmio_impl.f90 -o psb_d_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcdbldext.F90 -o psb_dcdbldext.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_colsum.f90 -o psb_s_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetptn.f90 -o psb_s_dia_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_mat_impl.F90 -o psb_d_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetrow.f90 -o psb_s_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmm.f90 -o psb_s_dia_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_lstext.f90 -o psb_cd_lstext.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mmio_impl.f90 -o psb_c_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_remap.F90 -o psb_cd_remap.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_serial_impl.F90 -o psi_z_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcdbldext.F90 -o psb_zcdbldext.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmv.f90 -o psb_s_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_get_diag.f90 -o psb_s_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_maxval.f90 -o psb_s_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_mold.f90 -o psb_s_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_print.f90 -o psb_s_dia_print.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_type.f90 -o psb_z_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mmio_impl.f90 -o psb_z_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_rb_idx_tree_impl.F90 -o psb_d_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csr_impl.F90 -o psb_c_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_coo_impl.F90 -o psb_c_coo_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reallocate_nz.f90 -o psb_s_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_upd_a.f90 -o psi_movrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scdbldext.F90 -o psb_scdbldext.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_restr_a.f90 -o psi_eovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_save_a.f90 -o psi_eovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdot.f90 -o psb_zdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrm2.f90 -o psb_znrm2.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reinit.f90 -o psb_s_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_rowsum.f90 -o psb_s_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scal.f90 -o psb_s_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scals.f90 -o psb_s_dia_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo.f90 -o psb_chalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csc_impl.F90 -o psb_c_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccdbldext.F90 -o psb_ccdbldext.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswaptran_a.F90 -o psi_mswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_mat_impl.F90 -o psb_c_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdcpy.F90 -o psb_cdcpy.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_reinit.f90 -o psb_cd_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_switch_ovl_indxmap.f90 -o psb_cd_switch_ovl_indxmap.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_aclsum.f90 -o psb_s_ell_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_renum_block.F90 -o psb_cd_renum_block.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_fact_mod.f90 -o psb_d_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_allocate_mnnz.f90 -o psb_s_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_arwsum.f90 -o psb_s_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_colsum.f90 -o psb_s_ell_colsum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetblk.f90 -o psb_s_ell_csgetblk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrmi.f90 -o psb_znrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invk_fact_mod.f90 -o psb_d_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl.f90 -o psb_covrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invt_fact_mod.f90 -o psb_d_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invk_fact_mod.f90 -o psb_s_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather.f90 -o psb_zgather.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_i_mmio_impl.F90 -o psb_i_mmio_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetptn.f90 -o psb_s_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetrow.f90 -o psb_s_ell_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspalloc.f90 -o psb_dspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspasb.f90 -o psb_dspasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmm.f90 -o psb_s_ell_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remap.F90 -o psb_d_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo.f90 -o psb_zhalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_rb_idx_tree_impl.F90 -o psb_c_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_mat.F90 -o psb_z_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl.f90 -o psb_zovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csr_impl.F90 -o psb_z_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspfree.f90 -o psb_dspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_coo_impl.F90 -o psb_z_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invt_fact_mod.f90 -o psb_s_invt_fact_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmv.f90 -o psb_s_ell_csmv.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata_a.F90 -o psi_cswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csc_impl.F90 -o psb_z_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_vect.F90 -o psb_s_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_biconjg_mod.F90 -o psb_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_mat_impl.F90 -o psb_z_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_srwextd.f90 -o psb_srwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_impl.f90 -o psb_s_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather_a.f90 -o psb_dgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_vect.F90 -o psb_d_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnm1.f90 -o psb_s_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnmi.f90 -o psb_s_ell_csnmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo_a.f90 -o psb_dhalo_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran_a.F90 -o psi_cswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_type.f90 -o psb_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_vect.F90 -o psb_c_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dsprn.f90 -o psb_dsprn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csput.f90 -o psb_s_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssm.f90 -o psb_s_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssv.f90 -o psb_s_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_get_diag.f90 -o psb_s_ell_get_diag.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_vect.F90 -o psb_z_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_maxval.f90 -o psb_s_ell_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_drwextd.f90 -o psb_drwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl_a.f90 -o psb_dovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather_a.f90 -o psb_sgather_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_mold.f90 -o psb_s_ell_mold.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_upd_a.f90 -o psi_eovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_mod.f90 -o psb_s_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata_a.F90 -o psi_zswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_e_remote_vect.F90 -o psb_e_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr_a.f90 -o psi_sovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_crwextd.f90 -o psb_crwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_mod.f90 -o psb_d_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_mod.f90 -o psb_c_prec_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_print.f90 -o psb_s_ell_print.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_m_remote_vect.F90 -o psb_m_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_mod.f90 -o psb_z_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save_a.f90 -o psi_sovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_rb_idx_tree_impl.F90 -o psb_z_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo_a.f90 -o psb_shalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl_a.f90 -o psb_sovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_impl.f90 -o psb_d_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_impl.f90 -o psb_c_mat_dist_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reallocate_nz.f90 -o psb_s_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mgather_a.f90 -o psb_mgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mhalo_a.f90 -o psb_mhalo_a.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_movrl_a.f90 -o psb_movrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrm2.f90 -o psb_snrm2.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran_a.F90 -o psi_zswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspalloc.f90 -o psb_sspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_impl.f90 -o psb_z_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd_a.f90 -o psi_sovrl_upd_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reinit.f90 -o psb_s_ell_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrmi.f90 -o psb_snrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspasb.f90 -o psb_sspasb.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_mod.f90 -o psb_prec_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_rowsum.f90 -o psb_s_ell_rowsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspmm.f90 -o psb_sspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_egather_a.f90 -o psb_egather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ehalo_a.f90 -o psb_ehalo_a.o -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_eovrl_a.f90 -o psb_eovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather_a.f90 -o psb_cgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_diagprec.f90 -o psb_d_diagprec.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr_a.f90 -o psi_dovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save_a.f90 -o psi_dovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_nullprec.f90 -o psb_d_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remap.F90 -o psb_s_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_bjacprec.f90 -o psb_d_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd_a.f90 -o psi_dovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspsm.f90 -o psb_sspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax.f90 -o psb_camax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zrwextd.f90 -o psb_zrwextd.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scal.f90 -o psb_s_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scals.f90 -o psb_s_ell_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo_a.f90 -o psb_chalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl_a.f90 -o psb_covrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspfree.f90 -o psb_sspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspins.F90 -o psb_sspins.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_diagprec.f90 -o psb_s_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather_a.f90 -o psb_zgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_renum_impl.F90 -o psb_s_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo_a.f90 -o psb_zhalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum.f90 -o psb_casum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr_a.f90 -o psi_covrl_restr_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_trim.f90 -o psb_s_ell_trim.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caxpby.f90 -o psb_caxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdot.f90 -o psb_cdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrm2.f90 -o psb_cnrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_nullprec.f90 -o psb_s_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl_a.f90 -o psb_zovrl_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save_a.f90 -o psi_covrl_save_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_allocate_mnnz.f90 -o psb_s_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd_a.f90 -o psi_covrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrmi.f90 -o psb_cnrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspmm.f90 -o psb_cspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspsm.f90 -o psb_cspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ssprn.f90 -o psb_ssprn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_glob_to_loc.f90 -o psb_glob_to_loc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cmlt_vect.f90 -o psb_cmlt_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_csmv.f90 -o psb_s_hdia_csmv.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspspmm.F90 -o psb_sspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspspmm.F90 -o psb_dspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspspmm.F90 -o psb_cspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_bjacprec.f90 -o psb_s_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr_a.f90 -o psi_zovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_diagprec.f90 -o psb_c_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_nullprec.f90 -o psb_c_nullprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_mold.f90 -o psb_s_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_print.f90 -o psb_s_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_aclsum.f90 -o psb_s_hll_aclsum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save_a.f90 -o psi_zovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspspmm.F90 -o psb_zspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_bjacprec.f90 -o psb_c_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_diagprec.f90 -o psb_z_diagprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_allocate_mnnz.f90 -o psb_s_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_arwsum.f90 -o psb_s_hll_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ssymbmm.f90 -o psb_ssymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dmlt_vect.f90 -o psb_dmlt_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zmlt_vect.f90 -o psb_zmlt_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_loc_to_glob.f90 -o psb_loc_to_glob.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd_a.f90 -o psi_zovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_renum_impl.F90 -o psb_d_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_nullprec.f90 -o psb_z_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_bjacprec.f90 -o psb_z_bjacprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_colsum.f90 -o psb_s_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetblk.f90 -o psb_s_hll_csgetblk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iallc.f90 -o psb_iallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iasb.f90 -o psb_iasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_smlt_vect.f90 -o psb_smlt_vect.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdiv_vect.f90 -o psb_cdiv_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetptn.f90 -o psb_s_hll_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dsymbmm.f90 -o psb_dsymbmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetrow.f90 -o psb_s_hll_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddiv_vect.f90 -o psb_ddiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdiv_vect.f90 -o psb_zdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ifree.f90 -o psb_ifree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmm.f90 -o psb_s_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmv.f90 -o psb_s_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnm1.f90 -o psb_s_hll_csnm1.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_renum_impl.F90 -o psb_c_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_renum_impl.F90 -o psb_z_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdiv_vect.f90 -o psb_sdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cinv_vect.f90 -o psb_cinv_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnmi.f90 -o psb_s_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csput.f90 -o psb_s_hll_csput.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iins.f90 -o psb_iins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_csymbmm.f90 -o psb_csymbmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssm.f90 -o psb_s_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssv.f90 -o psb_s_hll_cssv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dinv_vect.f90 -o psb_dinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zinv_vect.f90 -o psb_zinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lallc.f90 -o psb_lallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sinv_vect.f90 -o psb_sinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dcmp_vect.f90 -o psb_dcmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_get_diag.f90 -o psb_s_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_maxval.f90 -o psb_s_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_mold.f90 -o psb_s_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_print.f90 -o psb_s_hll_print.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zsymbmm.f90 -o psb_zsymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_scmp_vect.f90 -o psb_scmp_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ccmp_vect.f90 -o psb_ccmp_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zcmp_vect.f90 -o psb_zcmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reallocate_nz.f90 -o psb_s_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cabs_vect.f90 -o psb_cabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snumbmm.f90 -o psb_snumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dabs_vect.f90 -o psb_dabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sabs_vect.f90 -o psb_sabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lasb.f90 -o psb_lasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zabs_vect.f90 -o psb_zabs_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reinit.f90 -o psb_s_hll_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cgetmatinfo.F90 -o psb_cgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dgetmatinfo.F90 -o psb_dgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sgetmatinfo.F90 -o psb_sgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnumbmm.f90 -o psb_dnumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zgetmatinfo.F90 -o psb_zgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lfree.f90 -o psb_lfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnumbmm.f90 -o psb_cnumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_rowsum.f90 -o psb_s_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scal.f90 -o psb_s_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scals.f90 -o psb_s_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_dia_from_coo.f90 -o psb_s_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_build_mtpart.F90 -o psi_build_mtpart.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_coo.f90 -o psb_s_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree.f90 -o psb_sfree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_fmt.f90 -o psb_s_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znumbmm.f90 -o psb_znumbmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_coo.f90 -o psb_s_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_fmt.f90 -o psb_s_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_from_coo.f90 -o psb_s_mv_hdia_from_coo.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c smmp.f90 -o smmp.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c lsmmp.f90 -o lsmmp.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_to_coo.f90 -o psb_s_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_coo.f90 -o psb_s_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgeprt.f90 -o psb_dgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins.f90 -o psb_sins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_fmt.f90 -o psb_s_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_coo.f90 -o psb_s_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_fmt.f90 -o psb_s_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_from_coo.f90 -o psb_c_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgeprt.f90 -o psb_cgeprt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_to_coo.f90 -o psb_c_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc.f90 -o psb_dallc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_coo.f90 -o psb_c_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_fmt.f90 -o psb_c_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_coo.f90 -o psb_c_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_fmt.f90 -o psb_c_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spdot_srtd.f90 -o psb_spdot_srtd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb.f90 -o psb_dasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_aspxpby.f90 -o psb_aspxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree.f90 -o psb_dfree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_from_coo.f90 -o psb_c_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins.f90 -o psb_dins.o -/usr/bin/install -c -p -p *.mod ../modules -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spge_dot.f90 -o psb_spge_dot.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saplusat.f90 -o psb_saplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daplusat.f90 -o psb_daplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caplusat.f90 -o psb_caplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaplusat.f90 -o psb_zaplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax_s.f90 -o psb_samax_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_to_coo.f90 -o psb_c_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax_s.f90 -o psb_damax_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_coo.f90 -o psb_c_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax_s.f90 -o psb_camax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax_s.f90 -o psb_zamax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc.f90 -o psb_callc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb.f90 -o psb_casb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum_s.f90 -o psb_sasum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum_s.f90 -o psb_dasum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree.f90 -o psb_cfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum_s.f90 -o psb_casum_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_fmt.f90 -o psb_c_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_coo.f90 -o psb_c_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum_s.f90 -o psb_zasum_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_fmt.f90 -o psb_c_cp_hll_to_fmt.o -make -C linsolve mods -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_base_linsolve_conv_mod.f90 -o psb_base_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_linsolve_mod.f90 -o psb_linsolve_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_aclsum.f90 -o psb_c_dia_aclsum.o -make -C prec objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_prec_type_impl.f90 -o psb_s_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins.f90 -o psb_cins.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_prec_type_impl.f90 -o psb_d_prec_type_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_allocate_mnnz.f90 -o psb_c_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_prec_type_impl.f90 -o psb_c_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc.f90 -o psb_zallc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_arwsum.f90 -o psb_c_dia_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb.f90 -o psb_zasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree.f90 -o psb_zfree.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_linsolve_conv_mod.f90 -o psb_s_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins.f90 -o psb_zins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mallc_a.f90 -o psb_mallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_colsum.f90 -o psb_c_dia_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_masb_a.f90 -o psb_masb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mfree_a.f90 -o psb_mfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetptn.f90 -o psb_c_dia_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mins_a.f90 -o psb_mins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eallc_a.f90 -o psb_eallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_easb_a.f90 -o psb_easb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_efree_a.f90 -o psb_efree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eins_a.f90 -o psb_eins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc_a.f90 -o psb_sallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetrow.f90 -o psb_c_dia_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_linsolve_conv_mod.f90 -o psb_c_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb_a.f90 -o psb_sasb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree_a.f90 -o psb_sfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmm.f90 -o psb_c_dia_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_linsolve_conv_mod.f90 -o psb_d_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_linsolve_conv_mod.f90 -o psb_z_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_prec_type_impl.f90 -o psb_z_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins_a.f90 -o psb_sins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc_a.f90 -o psb_dallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_diagprec_impl.f90 -o psb_d_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb_a.f90 -o psb_dasb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree_a.f90 -o psb_dfree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins_a.f90 -o psb_dins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmv.f90 -o psb_c_dia_csmv.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc_a.f90 -o psb_callc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb_a.f90 -o psb_casb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_get_diag.f90 -o psb_c_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_bjacprec_impl.f90 -o psb_d_bjacprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree_a.f90 -o psb_cfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_maxval.f90 -o psb_c_dia_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins_a.f90 -o psb_cins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc_a.f90 -o psb_zallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb_a.f90 -o psb_zasb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree_a.f90 -o psb_zfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_mold.f90 -o psb_c_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_nullprec_impl.f90 -o psb_d_nullprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins_a.f90 -o psb_zins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilu0_fact.f90 -o psb_d_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_print.f90 -o psb_c_dia_print.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspalloc.f90 -o psb_zspalloc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reallocate_nz.f90 -o psb_c_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_iluk_fact.f90 -o psb_d_iluk_fact.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspasb.f90 -o psb_zspasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reinit.f90 -o psb_c_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_rowsum.f90 -o psb_c_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scal.f90 -o psb_c_dia_scal.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remap.F90 -o psb_z_remap.o -/usr/bin/install -c -p -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilut_fact.f90 -o psb_d_ilut_fact.o -make -C cbind objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_objhandle_mod.F90 -o psb_objhandle_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_base.c -o psb_c_base.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sbase.c -o psb_c_sbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dbase.c -o psb_c_dbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cbase.c -o psb_c_cbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zbase.c -o psb_c_zbase.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspfree.f90 -o psb_zspfree.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_scomm.c -o psb_c_scomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dcomm.c -o psb_c_dcomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_ccomm.c -o psb_c_ccomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zcomm.c -o psb_c_zcomm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspins.F90 -o psb_zspins.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zsprn.f90 -o psb_zsprn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecbld.f90 -o psb_dprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scals.f90 -o psb_c_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecinit.f90 -o psb_dprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_aclsum.f90 -o psb_c_ell_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspalloc.f90 -o psb_cspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspasb.f90 -o psb_cspasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_diagprec_impl.f90 -o psb_s_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remap.F90 -o psb_c_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspfree.f90 -o psb_cspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspins.F90 -o psb_cspins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_csprn.f90 -o psb_csprn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_set_bld.f90 -o psb_cd_set_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_bjacprec_impl.f90 -o psb_s_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_allocate_mnnz.f90 -o psb_c_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_map.f90 -o psb_s_map.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_map.f90 -o psb_d_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_arwsum.f90 -o psb_c_ell_arwsum.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_base_tools_cbind_mod.F90 -o psb_base_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_map.f90 -o psb_c_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_nullprec_impl.f90 -o psb_s_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilu0_fact.f90 -o psb_s_ilu0_fact.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_map.f90 -o psb_z_map.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_par_csr_spspmm.f90 -o psb_s_par_csr_spspmm.o -make -C linsolve objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dkrylov.f90 -o psb_dkrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_colsum.f90 -o psb_c_ell_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_par_csr_spspmm.f90 -o psb_d_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_iluk_fact.f90 -o psb_s_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_skrylov.f90 -o psb_skrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilut_fact.f90 -o psb_s_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetblk.f90 -o psb_c_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetptn.f90 -o psb_c_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetrow.f90 -o psb_c_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ckrylov.f90 -o psb_ckrylov.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_psblas_cbind_mod.f90 -o psb_s_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_psblas_cbind_mod.f90 -o psb_d_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_psblas_cbind_mod.f90 -o psb_c_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zkrylov.f90 -o psb_zkrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecbld.f90 -o psb_sprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecinit.f90 -o psb_sprecinit.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_psblas_cbind_mod.f90 -o psb_z_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmm.f90 -o psb_c_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_diagprec_impl.f90 -o psb_c_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_par_csr_spspmm.f90 -o psb_c_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_par_csr_spspmm.f90 -o psb_z_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drichardson.f90 -o psb_drichardson.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_glob_transpose.F90 -o psb_s_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srichardson.f90 -o psb_srichardson.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_tools_cbind_mod.F90 -o psb_s_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmv.f90 -o psb_c_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_bjacprec_impl.f90 -o psb_c_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crichardson.f90 -o psb_crichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrichardson.f90 -o psb_zrichardson.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_serial_cbind_mod.F90 -o psb_s_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_tools_cbind_mod.F90 -o psb_d_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_serial_cbind_mod.F90 -o psb_d_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstab.f90 -o psb_dcgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcg.F90 -o psb_dcg.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_glob_transpose.F90 -o psb_d_glob_transpose.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_tools_cbind_mod.F90 -o psb_c_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_serial_cbind_mod.F90 -o psb_c_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnm1.f90 -o psb_c_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dfcg.F90 -o psb_dfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_nullprec_impl.f90 -o psb_c_nullprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_glob_transpose.F90 -o psb_c_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dgcr.f90 -o psb_dgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgs.f90 -o psb_dcgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnmi.f90 -o psb_c_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilu0_fact.f90 -o psb_c_ilu0_fact.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_tools_cbind_mod.F90 -o psb_z_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_serial_cbind_mod.F90 -o psb_z_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_iluk_fact.f90 -o psb_c_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilut_fact.f90 -o psb_c_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csput.f90 -o psb_c_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dbicg.f90 -o psb_dbicg.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_comm_cbind_mod.f90 -o psb_s_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssm.f90 -o psb_c_ell_cssm.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_comm_cbind_mod.f90 -o psb_d_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstabl.f90 -o psb_dcgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecbld.f90 -o psb_cprecbld.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_comm_cbind_mod.f90 -o psb_c_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecinit.f90 -o psb_cprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drgmres.f90 -o psb_drgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssv.f90 -o psb_c_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstab.f90 -o psb_scgstab.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_glob_transpose.F90 -o psb_z_glob_transpose.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cgetelem.f90 -o psb_cgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_diagprec_impl.f90 -o psb_z_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_comm_cbind_mod.f90 -o psb_z_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_bjacprec_impl.f90 -o psb_z_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_nullprec_impl.f90 -o psb_z_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scg.F90 -o psb_scg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_get_diag.f90 -o psb_c_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sfcg.F90 -o psb_sfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sgcr.f90 -o psb_sgcr.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_psblas_cbind_mod.f90 -o psb_base_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dgetelem.f90 -o psb_dgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilu0_fact.f90 -o psb_z_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgs.f90 -o psb_scgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sbicg.f90 -o psb_sbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_maxval.f90 -o psb_c_ell_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sgetelem.f90 -o psb_sgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstabl.f90 -o psb_scgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srgmres.f90 -o psb_srgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstab.f90 -o psb_ccgstab.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zgetelem.f90 -o psb_zgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_iluk_fact.f90 -o psb_z_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccg.F90 -o psb_ccg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilut_fact.f90 -o psb_z_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecbld.f90 -o psb_zprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_mold.f90 -o psb_c_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cfcg.F90 -o psb_cfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cgcr.f90 -o psb_cgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgs.f90 -o psb_ccgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cbicg.f90 -o psb_cbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstabl.f90 -o psb_ccgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_print.f90 -o psb_c_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crgmres.f90 -o psb_crgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reallocate_nz.f90 -o psb_c_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reinit.f90 -o psb_c_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecinit.f90 -o psb_zprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_rowsum.f90 -o psb_c_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scal.f90 -o psb_c_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstab.f90 -o psb_zcgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcg.F90 -o psb_zcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scals.f90 -o psb_c_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zfcg.F90 -o psb_zfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zgcr.f90 -o psb_zgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sparsify.f90 -o psb_c_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgs.f90 -o psb_zcgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_trim.f90 -o psb_c_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_allocate_mnnz.f90 -o psb_c_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zbicg.f90 -o psb_zbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sparsify.f90 -o psb_d_sparsify.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sparsify.f90 -o psb_s_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstabl.f90 -o psb_zcgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrgmres.f90 -o psb_zrgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sparsify.f90 -o psb_z_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_csmv.f90 -o psb_c_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_mold.f90 -o psb_c_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crwclip.f90 -o psb_crwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_print.f90 -o psb_c_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_aclsum.f90 -o psb_c_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drwclip.f90 -o psb_drwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srwclip.f90 -o psb_srwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_allocate_mnnz.f90 -o psb_c_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_arwsum.f90 -o psb_c_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrwclip.f90 -o psb_zrwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sp_drop.f90 -o psb_c_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_colsum.f90 -o psb_c_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetblk.f90 -o psb_c_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sp_drop.f90 -o psb_d_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sp_drop.f90 -o psb_s_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sp_drop.f90 -o psb_z_sp_drop.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk_noth.F90 -o psb_dsparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetptn.f90 -o psb_c_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetrow.f90 -o psb_c_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmm.f90 -o psb_c_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk.F90 -o psb_dsparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_mlk.F90 -o psb_dsparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmv.f90 -o psb_c_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnm1.f90 -o psb_c_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_ft_llk.F90 -o psb_dsparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_llk.F90 -o psb_dsparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk_noth.F90 -o psb_csparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk.F90 -o psb_csparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_mlk.F90 -o psb_csparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnmi.f90 -o psb_c_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csput.f90 -o psb_c_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_ft_llk.F90 -o psb_csparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssm.f90 -o psb_c_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_llk.F90 -o psb_csparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_cbind_mod.f90 -o psb_base_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssv.f90 -o psb_c_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk_noth.F90 -o psb_zsparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_get_diag.f90 -o psb_c_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_maxval.f90 -o psb_c_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_mold.f90 -o psb_c_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk.F90 -o psb_zsparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_print.f90 -o psb_c_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_mlk.F90 -o psb_zsparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_ft_llk.F90 -o psb_zsparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_llk.F90 -o psb_zsparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk_noth.F90 -o psb_ssparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reallocate_nz.f90 -o psb_c_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reinit.f90 -o psb_c_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_rowsum.f90 -o psb_c_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scal.f90 -o psb_c_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk.F90 -o psb_ssparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_mlk.F90 -o psb_ssparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scals.f90 -o psb_c_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_dia_from_coo.f90 -o psb_c_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_ft_llk.F90 -o psb_ssparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_coo.f90 -o psb_c_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_llk.F90 -o psb_ssparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_fmt.f90 -o psb_c_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_coo.f90 -o psb_c_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ainv_bld.f90 -o psb_d_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_fmt.f90 -o psb_c_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_from_coo.f90 -o psb_c_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_to_coo.f90 -o psb_c_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_coo.f90 -o psb_c_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_fmt.f90 -o psb_c_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ainv_bld.f90 -o psb_c_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ainv_bld.f90 -o psb_s_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_coo.f90 -o psb_c_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ainv_bld.f90 -o psb_z_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invt_fact.f90 -o psb_c_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_fmt.f90 -o psb_c_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invt_fact.f90 -o psb_d_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_from_coo.f90 -o psb_d_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_to_coo.f90 -o psb_d_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_coo.f90 -o psb_d_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_fmt.f90 -o psb_d_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invt_fact.f90 -o psb_s_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_coo.f90 -o psb_d_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invt_fact.f90 -o psb_z_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_fmt.f90 -o psb_d_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invk_fact.f90 -o psb_c_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_from_coo.f90 -o psb_d_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_to_coo.f90 -o psb_d_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invk_fact.f90 -o psb_d_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_coo.f90 -o psb_d_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_fmt.f90 -o psb_d_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_coo.f90 -o psb_d_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_fmt.f90 -o psb_d_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_aclsum.f90 -o psb_d_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invk_fact.f90 -o psb_s_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_allocate_mnnz.f90 -o psb_d_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_arwsum.f90 -o psb_d_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_colsum.f90 -o psb_d_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetptn.f90 -o psb_d_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invk_fact.f90 -o psb_z_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetrow.f90 -o psb_d_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmm.f90 -o psb_d_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmv.f90 -o psb_d_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_get_diag.f90 -o psb_d_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_maxval.f90 -o psb_d_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_mold.f90 -o psb_d_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_print.f90 -o psb_d_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reallocate_nz.f90 -o psb_d_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reinit.f90 -o psb_d_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_rowsum.f90 -o psb_d_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scal.f90 -o psb_d_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scals.f90 -o psb_d_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_aclsum.f90 -o psb_d_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_allocate_mnnz.f90 -o psb_d_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_arwsum.f90 -o psb_d_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_colsum.f90 -o psb_d_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetblk.f90 -o psb_d_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetptn.f90 -o psb_d_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetrow.f90 -o psb_d_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmm.f90 -o psb_d_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmv.f90 -o psb_d_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnm1.f90 -o psb_d_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnmi.f90 -o psb_d_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csput.f90 -o psb_d_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssm.f90 -o psb_d_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssv.f90 -o psb_d_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_get_diag.f90 -o psb_d_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_maxval.f90 -o psb_d_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_mold.f90 -o psb_d_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_print.f90 -o psb_d_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reallocate_nz.f90 -o psb_d_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reinit.f90 -o psb_d_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_rowsum.f90 -o psb_d_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scal.f90 -o psb_d_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scals.f90 -o psb_d_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_trim.f90 -o psb_d_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_allocate_mnnz.f90 -o psb_d_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_csmv.f90 -o psb_d_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_mold.f90 -o psb_d_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_print.f90 -o psb_d_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_aclsum.f90 -o psb_d_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_allocate_mnnz.f90 -o psb_d_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_arwsum.f90 -o psb_d_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_colsum.f90 -o psb_d_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetblk.f90 -o psb_d_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetptn.f90 -o psb_d_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetrow.f90 -o psb_d_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmm.f90 -o psb_d_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmv.f90 -o psb_d_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnm1.f90 -o psb_d_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnmi.f90 -o psb_d_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csput.f90 -o psb_d_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssm.f90 -o psb_d_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssv.f90 -o psb_d_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_get_diag.f90 -o psb_d_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_maxval.f90 -o psb_d_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_mold.f90 -o psb_d_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_print.f90 -o psb_d_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reallocate_nz.f90 -o psb_d_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reinit.f90 -o psb_d_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_rowsum.f90 -o psb_d_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scal.f90 -o psb_d_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scals.f90 -o psb_d_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_dia_from_coo.f90 -o psb_d_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_coo.f90 -o psb_d_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_fmt.f90 -o psb_d_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_coo.f90 -o psb_d_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_fmt.f90 -o psb_d_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_from_coo.f90 -o psb_d_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_to_coo.f90 -o psb_d_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_coo.f90 -o psb_d_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_fmt.f90 -o psb_d_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_coo.f90 -o psb_d_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_fmt.f90 -o psb_d_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_from_coo.f90 -o psb_z_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_to_coo.f90 -o psb_z_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_coo.f90 -o psb_z_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_fmt.f90 -o psb_z_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_coo.f90 -o psb_z_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_fmt.f90 -o psb_z_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_from_coo.f90 -o psb_z_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_to_coo.f90 -o psb_z_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_coo.f90 -o psb_z_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_fmt.f90 -o psb_z_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_coo.f90 -o psb_z_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_fmt.f90 -o psb_z_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_aclsum.f90 -o psb_z_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_allocate_mnnz.f90 -o psb_z_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_arwsum.f90 -o psb_z_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_colsum.f90 -o psb_z_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetptn.f90 -o psb_z_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetrow.f90 -o psb_z_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmm.f90 -o psb_z_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmv.f90 -o psb_z_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_get_diag.f90 -o psb_z_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_maxval.f90 -o psb_z_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_mold.f90 -o psb_z_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_print.f90 -o psb_z_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reallocate_nz.f90 -o psb_z_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reinit.f90 -o psb_z_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_rowsum.f90 -o psb_z_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scal.f90 -o psb_z_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scals.f90 -o psb_z_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_aclsum.f90 -o psb_z_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_allocate_mnnz.f90 -o psb_z_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_arwsum.f90 -o psb_z_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_colsum.f90 -o psb_z_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetblk.f90 -o psb_z_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetptn.f90 -o psb_z_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetrow.f90 -o psb_z_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmm.f90 -o psb_z_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmv.f90 -o psb_z_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnm1.f90 -o psb_z_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnmi.f90 -o psb_z_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csput.f90 -o psb_z_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssm.f90 -o psb_z_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssv.f90 -o psb_z_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_get_diag.f90 -o psb_z_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_maxval.f90 -o psb_z_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_mold.f90 -o psb_z_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_print.f90 -o psb_z_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reallocate_nz.f90 -o psb_z_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reinit.f90 -o psb_z_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_rowsum.f90 -o psb_z_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scal.f90 -o psb_z_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scals.f90 -o psb_z_ell_scals.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_trim.f90 -o psb_z_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_allocate_mnnz.f90 -o psb_z_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_csmv.f90 -o psb_z_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_mold.f90 -o psb_z_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_print.f90 -o psb_z_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_aclsum.f90 -o psb_z_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_allocate_mnnz.f90 -o psb_z_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_arwsum.f90 -o psb_z_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_colsum.f90 -o psb_z_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetblk.f90 -o psb_z_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetptn.f90 -o psb_z_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetrow.f90 -o psb_z_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmm.f90 -o psb_z_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmv.f90 -o psb_z_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnm1.f90 -o psb_z_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnmi.f90 -o psb_z_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csput.f90 -o psb_z_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssm.f90 -o psb_z_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssv.f90 -o psb_z_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_get_diag.f90 -o psb_z_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_maxval.f90 -o psb_z_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_mold.f90 -o psb_z_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_print.f90 -o psb_z_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reallocate_nz.f90 -o psb_z_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reinit.f90 -o psb_z_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_rowsum.f90 -o psb_z_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scal.f90 -o psb_z_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scals.f90 -o psb_z_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_dia_from_coo.f90 -o psb_z_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_coo.f90 -o psb_z_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_fmt.f90 -o psb_z_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_coo.f90 -o psb_z_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_fmt.f90 -o psb_z_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_from_coo.f90 -o psb_z_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_to_coo.f90 -o psb_z_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_coo.f90 -o psb_z_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_fmt.f90 -o psb_z_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_coo.f90 -o psb_z_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_fmt.f90 -o psb_z_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_ell_from_coo.f90 -o psi_s_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_ell_from_coo.f90 -o psi_c_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_ell_from_coo.f90 -o psi_d_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_ell_from_coo.f90 -o psi_z_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_ell_from_coo.f90 -o psi_s_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_ell_from_coo.f90 -o psi_c_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_ell_from_coo.f90 -o psi_d_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_ell_from_coo.f90 -o psi_z_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_hll_from_coo.f90 -o psi_s_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_hll_from_coo.f90 -o psi_c_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_hll_from_coo.f90 -o psi_d_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_hll_from_coo.f90 -o psi_z_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_dia_from_coo.f90 -o psi_s_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_dia_from_coo.f90 -o psi_c_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_dia_from_coo.f90 -o psi_d_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_dia_from_coo.f90 -o psi_z_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_coo_from_dia.f90 -o psi_s_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_coo_from_dia.f90 -o psi_d_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_coo_from_dia.f90 -o psi_c_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_coo_from_dia.f90 -o psi_z_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_dia_from_coo.f90 -o psi_s_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_dia_from_coo.f90 -o psi_c_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_dia_from_coo.f90 -o psi_d_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_dia_from_coo.f90 -o psi_z_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dns_mat_impl.f90 -o psb_s_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dns_mat_impl.f90 -o psb_d_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dns_mat_impl.f90 -o psb_c_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dns_mat_impl.f90 -o psb_z_dns_mat_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_sprec_cbind_mod.f90 -o psb_sprec_cbind_mod.o -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_util_cbind_mod.f90 -o psb_c_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dprec_cbind_mod.f90 -o psb_dprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_util_cbind_mod.f90 -o psb_d_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cprec_cbind_mod.f90 -o psb_cprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_util_cbind_mod.f90 -o psb_s_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zprec_cbind_mod.f90 -o psb_zprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_util_cbind_mod.f90 -o psb_z_util_cbind_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sprec.c -o psb_c_sprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dprec.c -o psb_c_dprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cprec.c -o psb_c_cprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zprec.c -o psb_c_zprec.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_prec_cbind_mod.f90 -o psb_prec_cbind_mod.o -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_linsolve_cbind_mod.f90 -o psb_base_linsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_slinsolve_cbind_mod.f90 -o psb_slinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dlinsolve_cbind_mod.f90 -o psb_dlinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_clinsolve_cbind_mod.f90 -o psb_clinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zlinsolve_cbind_mod.f90 -o psb_zlinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_util_cbind_mod.f90 -o psb_util_cbind_mod.o -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C cbind objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C base lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial objs -make -C comm objs -make -C auxil objs -make -C psblas objs -make -C tools objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make -C sort objs -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: «psb_dscatter.o» è aggiornato. -make[3]: «psi_desc_index.o» è aggiornato. -make[3]: «psb_zscatter.o» è aggiornato. -make[3]: «psi_fnd_owner.o» è aggiornato. -make[3]: «psb_iscatter.o» è aggiornato. -make[3]: «psi_a2a_fnd_owner.o» è aggiornato. -make[3]: «psb_lscatter.o» è aggiornato. -make[3]: «psi_graph_fnd_owner.o» è aggiornato. -make[3]: «psb_cscatter.o» è aggiornato. -make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. -make[3]: «psb_sscatter.o» è aggiornato. -make[3]: «psi_symm_dep_list.o» è aggiornato. -make[3]: «psb_dscatter_a.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: «psb_zscatter_a.o» è aggiornato. -make[3]: «psb_mscatter_a.o» è aggiornato. -make[3]: «psb_escatter_a.o» è aggiornato. -make[3]: «psb_cscatter_a.o» è aggiornato. -make[3]: «psb_sscatter_a.o» è aggiornato. -make[3]: «psb_dspgather.o» è aggiornato. -make[3]: «psb_sspgather.o» è aggiornato. -make[3]: «psb_zspgather.o» è aggiornato. -make[3]: «psb_cspgather.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psb_icdasb.o» è aggiornato. -make[3]: «psb_ssphalo.o» è aggiornato. -make[3]: «psb_dsphalo.o» è aggiornato. -make[3]: «psb_csphalo.o» è aggiornato. -make[3]: «psb_zsphalo.o» è aggiornato. -make[3]: «psb_dcdbldext.o» è aggiornato. -make[3]: «psb_zcdbldext.o» è aggiornato. -make[3]: «psb_scdbldext.o» è aggiornato. -make[3]: «psb_ccdbldext.o» è aggiornato. -make[3]: «psb_s_remote_mat.o» è aggiornato. -make[3]: «psb_d_remote_mat.o» è aggiornato. -make[3]: «psb_c_remote_mat.o» è aggiornato. -make[3]: «psb_z_remote_mat.o» è aggiornato. -make[3]: «psb_s_remote_vect.o» è aggiornato. -make[3]: «psb_d_remote_vect.o» è aggiornato. -make[3]: «psb_c_remote_vect.o» è aggiornato. -make[3]: «psb_z_remote_vect.o» è aggiornato. -make[3]: «psb_e_remote_vect.o» è aggiornato. -make[3]: «psb_m_remote_vect.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C modules lib LIBNAME=libpsb_base.a F90="" F90COPT=" " -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -ar -cDr ..//libpsb_base.a psb_const_mod.o psb_cbind_const_mod.o psb_error_mod.o psb_realloc_mod.o auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o serial/psb_serial_mod.o comm/psb_neighbor_topology_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o serial/psb_vect_mod.o auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o auxil/psb_ip_reord_mod.o auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o auxil/psb_d_msort_mod.o auxil/psb_d_qsort_mod.o auxil/psb_c_hsort_mod.o auxil/psb_c_isort_mod.o auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o auxil/psb_i_hsort_x_mod.o auxil/psb_l_hsort_x_mod.o auxil/psb_s_hsort_x_mod.o auxil/psb_d_hsort_x_mod.o auxil/psb_c_hsort_x_mod.o auxil/psb_z_hsort_x_mod.o auxil/psb_s_rb_idx_tree_mod.o auxil/psb_d_rb_idx_tree_mod.o auxil/psb_c_rb_idx_tree_mod.o auxil/psb_z_rb_idx_tree_mod.o auxil/psb_rb_idx_tree_mod.o serial/psb_base_mat_mod.o serial/psb_mat_mod.o serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_glist_map_mod.o desc/psb_hash_map_mod.o desc/psb_hashval.o desc/psb_desc_mod.o auxil/psb_sort_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o tools/psb_tools_mod.o psb_penv_mod.o penv/psi_penv_mod.o penv/psi_p2p_mod.o penv/psi_m_p2p_mod.o penv/psi_i2_p2p_mod.o penv/psi_e_p2p_mod.o penv/psi_s_p2p_mod.o penv/psi_d_p2p_mod.o penv/psi_c_p2p_mod.o penv/psi_z_p2p_mod.o penv/psi_collective_mod.o penv/psi_i2_collective_mod.o penv/psi_e_collective_mod.o penv/psi_m_collective_mod.o penv/psi_s_collective_mod.o penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_mod.o psb_error_impl.o psb_timers_mod.o comm/psb_base_linmap_mod.o comm/psb_linmap_mod.o comm/psb_s_linmap_mod.o comm/psb_d_linmap_mod.o comm/psb_c_linmap_mod.o comm/psb_z_linmap_mod.o comm/psb_comm_mod.o comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o comm/psi_s_comm_v_mod.o comm/psi_d_comm_v_mod.o comm/psi_c_comm_v_mod.o comm/psi_z_comm_v_mod.o psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o psblas/psb_psblas_mod.o psb_check_mod.o desc/psb_hash_mod.o error.o psb_base_mod.o cutil.o -ranlib ..//libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make -C sort objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make -C impl lib -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -ar -cDr ../../libpsb_base.a psb_base_mat_impl.o psb_s_base_mat_impl.o psb_d_base_mat_impl.o psb_c_base_mat_impl.o psb_z_base_mat_impl.o psb_s_csr_impl.o psb_s_coo_impl.o psb_s_csc_impl.o psb_s_mat_impl.o psb_s_rb_idx_tree_impl.o psb_d_csr_impl.o psb_d_coo_impl.o psb_d_csc_impl.o psb_d_mat_impl.o psb_d_rb_idx_tree_impl.o psb_c_csr_impl.o psb_c_coo_impl.o psb_c_csc_impl.o psb_c_mat_impl.o psb_c_rb_idx_tree_impl.o psb_z_csr_impl.o psb_z_coo_impl.o psb_z_csc_impl.o psb_z_mat_impl.o psb_z_rb_idx_tree_impl.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make -C sort lib -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -ar -cDr ../../libpsb_base.a psb_s_hsort_impl.o psb_s_isort_impl.o psb_s_msort_impl.o psb_s_qsort_impl.o psb_d_hsort_impl.o psb_d_isort_impl.o psb_d_msort_impl.o psb_d_qsort_impl.o psb_c_hsort_impl.o psb_c_isort_impl.o psb_c_msort_impl.o psb_c_qsort_impl.o psb_z_hsort_impl.o psb_z_isort_impl.o psb_z_msort_impl.o psb_z_qsort_impl.o psb_m_hsort_impl.o psb_m_isort_impl.o psb_m_msort_impl.o psb_m_qsort_impl.o psb_e_hsort_impl.o psb_e_isort_impl.o psb_e_msort_impl.o psb_e_qsort_impl.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -ar -cDr ../libpsb_base.a psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o psi_s_serial_impl.o psi_d_serial_impl.o psi_c_serial_impl.o psi_z_serial_impl.o psb_srwextd.o psb_drwextd.o psb_crwextd.o psb_zrwextd.o psb_sspspmm.o psb_dspspmm.o psb_cspspmm.o psb_zspspmm.o psb_ssymbmm.o psb_dsymbmm.o psb_csymbmm.o psb_zsymbmm.o psb_snumbmm.o psb_dnumbmm.o psb_cnumbmm.o psb_znumbmm.o smmp.o lsmmp.o psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C comm lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: «psb_dscatter.o» è aggiornato. -make[3]: «psb_zscatter.o» è aggiornato. -make[3]: «psb_iscatter.o» è aggiornato. -make[3]: «psb_lscatter.o» è aggiornato. -make[3]: «psb_cscatter.o» è aggiornato. -make[3]: «psb_sscatter.o» è aggiornato. -make[3]: «psb_dscatter_a.o» è aggiornato. -make[3]: «psb_zscatter_a.o» è aggiornato. -make[3]: «psb_mscatter_a.o» è aggiornato. -make[3]: «psb_escatter_a.o» è aggiornato. -make[3]: «psb_cscatter_a.o» è aggiornato. -make[3]: «psb_sscatter_a.o» è aggiornato. -make[3]: «psb_dspgather.o» è aggiornato. -make[3]: «psb_sspgather.o» è aggiornato. -make[3]: «psb_zspgather.o» è aggiornato. -make[3]: «psb_cspgather.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make -C internals lib LIBNAME=libpsb_base.a -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -ar -cDr ../../libpsb_base.a psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o psi_iovrl_restr.o psi_iovrl_save.o psi_iovrl_upd.o psi_lovrl_restr.o psi_lovrl_save.o psi_lovrl_upd.o psi_sovrl_restr.o psi_sovrl_save.o psi_sovrl_upd.o psi_dovrl_restr.o psi_dovrl_save.o psi_dovrl_upd.o psi_covrl_restr.o psi_covrl_save.o psi_covrl_upd.o psi_zovrl_restr.o psi_zovrl_save.o psi_zovrl_upd.o psi_movrl_restr_a.o psi_movrl_save_a.o psi_movrl_upd_a.o psi_eovrl_restr_a.o psi_eovrl_save_a.o psi_eovrl_upd_a.o psi_sovrl_restr_a.o psi_sovrl_save_a.o psi_sovrl_upd_a.o psi_dovrl_restr_a.o psi_dovrl_save_a.o psi_dovrl_upd_a.o psi_covrl_restr_a.o psi_covrl_save_a.o psi_covrl_upd_a.o psi_zovrl_restr_a.o psi_zovrl_save_a.o psi_zovrl_upd_a.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -ar -cDr ../libpsb_base.a psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o psb_dgather.o psb_dhalo.o psb_dovrl.o psb_sgather.o psb_shalo.o psb_sovrl.o psb_igather.o psb_ihalo.o psb_iovrl.o psb_lgather.o psb_lhalo.o psb_lovrl.o psb_cgather.o psb_chalo.o psb_covrl.o psb_zgather.o psb_zhalo.o psb_zovrl.o psb_dgather_a.o psb_dhalo_a.o psb_dovrl_a.o psb_sgather_a.o psb_shalo_a.o psb_sovrl_a.o psb_mgather_a.o psb_mhalo_a.o psb_movrl_a.o psb_egather_a.o psb_ehalo_a.o psb_eovrl_a.o psb_cgather_a.o psb_chalo_a.o psb_covrl_a.o psb_zgather_a.o psb_zhalo_a.o psb_zovrl_a.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C auxil lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psi_desc_index.o» è aggiornato. -make[3]: «psi_fnd_owner.o» è aggiornato. -make[3]: «psi_a2a_fnd_owner.o» è aggiornato. -make[3]: «psi_graph_fnd_owner.o» è aggiornato. -make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. -make[3]: «psi_symm_dep_list.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -ar -cDr ../libpsb_base.a psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o psi_crea_bnd_elem.o psi_crea_index.o psi_crea_ovr_elem.o psi_bld_tmpovrl.o psi_bld_tmphalo.o psi_sort_dl.o psi_indx_map_fnd_owner.o psi_desc_impl.o psi_hash_impl.o psi_srtlist.o psi_bld_glb_dep_list.o psi_xtr_loc_dl.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make -C psblas lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -ar -cDr ../libpsb_base.a psb_ddot.o psb_damax.o psb_dasum.o psb_daxpby.o psb_dnrm2.o psb_dnrmi.o psb_dspmm.o psb_dspsm.o psb_sspnrm1.o psb_dspnrm1.o psb_cspnrm1.o psb_zspnrm1.o psb_zamax.o psb_zasum.o psb_zaxpby.o psb_zdot.o psb_znrm2.o psb_znrmi.o psb_zspmm.o psb_zspsm.o psb_saxpby.o psb_sdot.o psb_sasum.o psb_samax.o psb_snrm2.o psb_snrmi.o psb_sspmm.o psb_sspsm.o psb_camax.o psb_casum.o psb_caxpby.o psb_cdot.o psb_cnrm2.o psb_cnrmi.o psb_cspmm.o psb_cspsm.o psb_cmlt_vect.o psb_dmlt_vect.o psb_zmlt_vect.o psb_smlt_vect.o psb_cdiv_vect.o psb_ddiv_vect.o psb_zdiv_vect.o psb_sdiv_vect.o psb_cinv_vect.o psb_dinv_vect.o psb_zinv_vect.o psb_sinv_vect.o psb_dcmp_vect.o psb_scmp_vect.o psb_ccmp_vect.o psb_zcmp_vect.o psb_cabs_vect.o psb_dabs_vect.o psb_sabs_vect.o psb_zabs_vect.o psb_cgetmatinfo.o psb_dgetmatinfo.o psb_sgetmatinfo.o psb_zgetmatinfo.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make -C tools lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psb_icdasb.o» è aggiornato. -make[3]: «psb_ssphalo.o» è aggiornato. -make[3]: «psb_dsphalo.o» è aggiornato. -make[3]: «psb_csphalo.o» è aggiornato. -make[3]: «psb_zsphalo.o» è aggiornato. -make[3]: «psb_dcdbldext.o» è aggiornato. -make[3]: «psb_zcdbldext.o» è aggiornato. -make[3]: «psb_scdbldext.o» è aggiornato. -make[3]: «psb_ccdbldext.o» è aggiornato. -make[3]: «psb_s_remote_mat.o» è aggiornato. -make[3]: «psb_d_remote_mat.o» è aggiornato. -make[3]: «psb_c_remote_mat.o» è aggiornato. -make[3]: «psb_z_remote_mat.o» è aggiornato. -make[3]: «psb_s_remote_vect.o» è aggiornato. -make[3]: «psb_d_remote_vect.o» è aggiornato. -make[3]: «psb_c_remote_vect.o» è aggiornato. -make[3]: «psb_z_remote_vect.o» è aggiornato. -make[3]: «psb_e_remote_vect.o» è aggiornato. -make[3]: «psb_m_remote_vect.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -ar -cDr ../libpsb_base.a psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o psb_cdall.o psb_cdals.o psb_cdalv.o psb_cd_inloc.o psb_cdins.o psb_cdprt.o psb_cdren.o psb_cdrep.o psb_get_overlap.o psb_cd_lstext.o psb_cd_remap.o psb_cdcpy.o psb_cd_reinit.o psb_cd_switch_ovl_indxmap.o psb_cd_renum_block.o psb_dspalloc.o psb_dspasb.o psb_d_remap.o psb_dspfree.o psb_dspins.o psb_dsprn.o psb_sspalloc.o psb_sspasb.o psb_s_remap.o psb_sspfree.o psb_sspins.o psb_ssprn.o psb_glob_to_loc.o psb_loc_to_glob.o psb_iallc.o psb_iasb.o psb_ifree.o psb_iins.o psb_lallc.o psb_lasb.o psb_lfree.o psb_lins.o psb_sallc.o psb_sasb.o psb_sfree.o psb_sins.o psb_dallc.o psb_dasb.o psb_dfree.o psb_dins.o psb_callc.o psb_casb.o psb_cfree.o psb_cins.o psb_zallc.o psb_zasb.o psb_zfree.o psb_zins.o psb_mallc_a.o psb_masb_a.o psb_mfree_a.o psb_mins_a.o psb_eallc_a.o psb_easb_a.o psb_efree_a.o psb_eins_a.o psb_sallc_a.o psb_sasb_a.o psb_sfree_a.o psb_sins_a.o psb_dallc_a.o psb_dasb_a.o psb_dfree_a.o psb_dins_a.o psb_callc_a.o psb_casb_a.o psb_cfree_a.o psb_cins_a.o psb_zallc_a.o psb_zasb_a.o psb_zfree_a.o psb_zins_a.o psb_zspalloc.o psb_zspasb.o psb_z_remap.o psb_zspfree.o psb_zspins.o psb_zsprn.o psb_cspalloc.o psb_cspasb.o psb_c_remap.o psb_cspfree.o psb_cspins.o psb_csprn.o psb_cd_set_bld.o psb_s_map.o psb_d_map.o psb_c_map.o psb_z_map.o psb_s_par_csr_spspmm.o psb_d_par_csr_spspmm.o psb_c_par_csr_spspmm.o psb_z_par_csr_spspmm.o psb_s_glob_transpose.o psb_d_glob_transpose.o psb_c_glob_transpose.o psb_z_glob_transpose.o psb_cgetelem.o psb_dgetelem.o psb_sgetelem.o psb_zgetelem.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -/bin/cp -p ./libpsb_base.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C prec lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make -C impl lib -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -ar -cDr ../libpsb_prec.a psb_s_prec_type_impl.o psb_d_prec_type_impl.o psb_c_prec_type_impl.o psb_z_prec_type_impl.o psb_d_diagprec_impl.o psb_d_bjacprec_impl.o psb_d_nullprec_impl.o psb_d_ilu0_fact.o psb_d_iluk_fact.o psb_d_ilut_fact.o psb_dprecbld.o psb_dprecinit.o psb_s_diagprec_impl.o psb_s_bjacprec_impl.o psb_s_nullprec_impl.o psb_s_ilu0_fact.o psb_s_iluk_fact.o psb_s_ilut_fact.o psb_sprecbld.o psb_sprecinit.o psb_c_diagprec_impl.o psb_c_bjacprec_impl.o psb_c_nullprec_impl.o psb_c_ilu0_fact.o psb_c_iluk_fact.o psb_c_ilut_fact.o psb_cprecbld.o psb_cprecinit.o psb_z_diagprec_impl.o psb_z_bjacprec_impl.o psb_z_nullprec_impl.o psb_z_ilu0_fact.o psb_z_iluk_fact.o psb_z_ilut_fact.o psb_zprecbld.o psb_zprecinit.o psb_c_sparsify.o psb_d_sparsify.o psb_s_sparsify.o psb_z_sparsify.o psb_crwclip.o psb_drwclip.o psb_srwclip.o psb_zrwclip.o psb_c_sp_drop.o psb_d_sp_drop.o psb_s_sp_drop.o psb_z_sp_drop.o psb_dsparse_biconjg_llk_noth.o psb_dsparse_biconjg_llk.o psb_dsparse_biconjg_mlk.o psb_dsparse_biconjg_s_ft_llk.o psb_dsparse_biconjg_s_llk.o psb_csparse_biconjg_llk_noth.o psb_csparse_biconjg_llk.o psb_csparse_biconjg_mlk.o psb_csparse_biconjg_s_ft_llk.o psb_csparse_biconjg_s_llk.o psb_zsparse_biconjg_llk_noth.o psb_zsparse_biconjg_llk.o psb_zsparse_biconjg_mlk.o psb_zsparse_biconjg_s_ft_llk.o psb_zsparse_biconjg_s_llk.o psb_ssparse_biconjg_llk_noth.o psb_ssparse_biconjg_llk.o psb_ssparse_biconjg_mlk.o psb_ssparse_biconjg_s_ft_llk.o psb_ssparse_biconjg_s_llk.o psb_d_ainv_bld.o psb_c_ainv_bld.o psb_s_ainv_bld.o psb_z_ainv_bld.o psb_c_invt_fact.o psb_d_invt_fact.o psb_s_invt_fact.o psb_z_invt_fact.o psb_c_invk_fact.o psb_d_invk_fact.o psb_s_invk_fact.o psb_z_invk_fact.o -ranlib ../libpsb_prec.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -ar -cDr ./libpsb_prec.a psb_prec_const_mod.o psb_s_prec_type.o psb_d_prec_type.o psb_c_prec_type.o psb_z_prec_type.o psb_s_base_prec_mod.o psb_d_base_prec_mod.o psb_c_base_prec_mod.o psb_z_base_prec_mod.o psb_prec_type.o psb_prec_mod.o psb_s_prec_mod.o psb_d_prec_mod.o psb_c_prec_mod.o psb_z_prec_mod.o psb_d_diagprec.o psb_d_nullprec.o psb_d_bjacprec.o psb_s_ilu_fact_mod.o psb_s_diagprec.o psb_s_nullprec.o psb_s_bjacprec.o psb_d_ilu_fact_mod.o psb_c_diagprec.o psb_c_nullprec.o psb_c_bjacprec.o psb_c_ilu_fact_mod.o psb_z_diagprec.o psb_z_nullprec.o psb_z_bjacprec.o psb_z_ilu_fact_mod.o psb_c_ainv_fact_mod.o psb_d_ainv_fact_mod.o psb_s_ainv_fact_mod.o psb_z_ainv_fact_mod.o psb_c_ainv_tools_mod.o psb_d_ainv_tools_mod.o psb_s_ainv_tools_mod.o psb_z_ainv_tools_mod.o psb_ainv_tools_mod.o psb_biconjg_mod.o psb_c_biconjg_mod.o psb_d_biconjg_mod.o psb_s_biconjg_mod.o psb_z_biconjg_mod.o psb_c_invt_fact_mod.o psb_d_invt_fact_mod.o psb_s_invt_fact_mod.o psb_z_invt_fact_mod.o psb_c_invk_fact_mod.o psb_d_invk_fact_mod.o psb_s_invk_fact_mod.o psb_z_invk_fact_mod.o -ranlib ./libpsb_prec.a -/bin/cp -p ./libpsb_prec.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -make -C linsolve lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make -C impl lib -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -ar -cDr ../libpsb_linsolve.a psb_dkrylov.o psb_skrylov.o psb_ckrylov.o psb_zkrylov.o psb_drichardson.o psb_srichardson.o psb_crichardson.o psb_zrichardson.o psb_dcgstab.o psb_dcg.o psb_dfcg.o psb_dgcr.o psb_dcgs.o psb_dbicg.o psb_dcgstabl.o psb_drgmres.o psb_scgstab.o psb_scg.o psb_sfcg.o psb_sgcr.o psb_scgs.o psb_sbicg.o psb_scgstabl.o psb_srgmres.o psb_ccgstab.o psb_ccg.o psb_cfcg.o psb_cgcr.o psb_ccgs.o psb_cbicg.o psb_ccgstabl.o psb_crgmres.o psb_zcgstab.o psb_zcg.o psb_zfcg.o psb_zgcr.o psb_zcgs.o psb_zbicg.o psb_zcgstabl.o psb_zrgmres.o -ranlib ../libpsb_linsolve.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -ar -cDr ./libpsb_linsolve.a psb_base_linsolve_conv_mod.o psb_s_linsolve_conv_mod.o psb_c_linsolve_conv_mod.o psb_d_linsolve_conv_mod.o psb_z_linsolve_conv_mod.o psb_linsolve_mod.o -ranlib ./libpsb_linsolve.a -/bin/cp -p ./libpsb_linsolve.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -make -C util lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -/usr/bin/install -c -p -p *.mod ../modules -ar -cDr ./libpsb_util.a psb_metis_int.o psb_amd_order.o psb_util_mod.o psb_blockpart_mod.o psb_metispart_mod.o psb_partidx_mod.o psb_hbio_mod.o psb_mmio_mod.o psb_mat_dist_mod.o psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o psb_renum_mod.o psb_gps_mod.o psb_s_renum_mod.o psb_d_renum_mod.o psb_c_renum_mod.o psb_z_renum_mod.o psb_s_hbio_impl.o psb_d_hbio_impl.o psb_c_hbio_impl.o psb_z_hbio_impl.o psb_s_mmio_impl.o psb_d_mmio_impl.o psb_c_mmio_impl.o psb_z_mmio_impl.o psb_i_mmio_impl.o psb_s_mat_dist_impl.o psb_d_mat_dist_impl.o psb_c_mat_dist_impl.o psb_z_mat_dist_impl.o psb_s_renum_impl.o psb_d_renum_impl.o psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o -ranlib ./libpsb_util.a -/bin/cp -p ./libpsb_util.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -make -C cbind lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -cd base && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -ar -cDr ../libpsb_cbind.a psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o psb_c_scomm.o psb_c_dcomm.o psb_c_ccomm.o psb_c_zcomm.o -ranlib ../libpsb_cbind.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -ar -cDr ../libpsb_cbind.a psb_prec_cbind_mod.o psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o psb_c_sprec.o psb_c_dprec.o psb_c_cprec.o psb_c_zprec.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -ar -cDr ../libpsb_cbind.a psb_base_linsolve_cbind_mod.o psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -cd util && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -ar -cDr ../libpsb_cbind.a psb_util_cbind_mod.o psb_c_util_cbind_mod.o psb_d_util_cbind_mod.o psb_s_util_cbind_mod.o psb_z_util_cbind_mod.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p ./libpsb_cbind.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C ext lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make -C impl lib LIBNAME=libpsb_ext.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -ar -cDr ../libpsb_ext.a psb_s_cp_dia_from_coo.o psb_s_cp_dia_to_coo.o psb_s_cp_ell_from_coo.o psb_s_cp_ell_from_fmt.o psb_s_cp_ell_to_coo.o psb_s_cp_ell_to_fmt.o psb_s_cp_hdia_from_coo.o psb_s_cp_hdia_to_coo.o psb_s_cp_hll_from_coo.o psb_s_cp_hll_from_fmt.o psb_s_cp_hll_to_coo.o psb_s_cp_hll_to_fmt.o psb_s_dia_aclsum.o psb_s_dia_allocate_mnnz.o psb_s_dia_arwsum.o psb_s_dia_colsum.o psb_s_dia_csgetptn.o psb_s_dia_csgetrow.o psb_s_dia_csmm.o psb_s_dia_csmv.o psb_s_dia_get_diag.o psb_s_dia_maxval.o psb_s_dia_mold.o psb_s_dia_print.o psb_s_dia_reallocate_nz.o psb_s_dia_reinit.o psb_s_dia_rowsum.o psb_s_dia_scal.o psb_s_dia_scals.o psb_s_ell_aclsum.o psb_s_ell_allocate_mnnz.o psb_s_ell_arwsum.o psb_s_ell_colsum.o psb_s_ell_csgetblk.o psb_s_ell_csgetptn.o psb_s_ell_csgetrow.o psb_s_ell_csmm.o psb_s_ell_csmv.o psb_s_ell_csnm1.o psb_s_ell_csnmi.o psb_s_ell_csput.o psb_s_ell_cssm.o psb_s_ell_cssv.o psb_s_ell_get_diag.o psb_s_ell_maxval.o psb_s_ell_mold.o psb_s_ell_print.o psb_s_ell_reallocate_nz.o psb_s_ell_reinit.o psb_s_ell_rowsum.o psb_s_ell_scal.o psb_s_ell_scals.o psb_s_ell_trim.o psb_s_hdia_allocate_mnnz.o psb_s_hdia_csmv.o psb_s_hdia_mold.o psb_s_hdia_print.o psb_s_hll_aclsum.o psb_s_hll_allocate_mnnz.o psb_s_hll_arwsum.o psb_s_hll_colsum.o psb_s_hll_csgetblk.o psb_s_hll_csgetptn.o psb_s_hll_csgetrow.o psb_s_hll_csmm.o psb_s_hll_csmv.o psb_s_hll_csnm1.o psb_s_hll_csnmi.o psb_s_hll_csput.o psb_s_hll_cssm.o psb_s_hll_cssv.o psb_s_hll_get_diag.o psb_s_hll_maxval.o psb_s_hll_mold.o psb_s_hll_print.o psb_s_hll_reallocate_nz.o psb_s_hll_reinit.o psb_s_hll_rowsum.o psb_s_hll_scal.o psb_s_hll_scals.o psb_s_mv_dia_from_coo.o psb_s_mv_ell_from_coo.o psb_s_mv_ell_from_fmt.o psb_s_mv_ell_to_coo.o psb_s_mv_ell_to_fmt.o psb_s_mv_hdia_from_coo.o psb_s_mv_hdia_to_coo.o psb_s_mv_hll_from_coo.o psb_s_mv_hll_from_fmt.o psb_s_mv_hll_to_coo.o psb_s_mv_hll_to_fmt.o psb_c_cp_dia_from_coo.o psb_c_cp_dia_to_coo.o psb_c_cp_ell_from_coo.o psb_c_cp_ell_from_fmt.o psb_c_cp_ell_to_coo.o psb_c_cp_ell_to_fmt.o psb_c_cp_hdia_from_coo.o psb_c_cp_hdia_to_coo.o psb_c_cp_hll_from_coo.o psb_c_cp_hll_from_fmt.o psb_c_cp_hll_to_coo.o psb_c_cp_hll_to_fmt.o psb_c_dia_aclsum.o psb_c_dia_allocate_mnnz.o psb_c_dia_arwsum.o psb_c_dia_colsum.o psb_c_dia_csgetptn.o psb_c_dia_csgetrow.o psb_c_dia_csmm.o psb_c_dia_csmv.o psb_c_dia_get_diag.o psb_c_dia_maxval.o psb_c_dia_mold.o psb_c_dia_print.o psb_c_dia_reallocate_nz.o psb_c_dia_reinit.o psb_c_dia_rowsum.o psb_c_dia_scal.o psb_c_dia_scals.o psb_c_ell_aclsum.o psb_c_ell_allocate_mnnz.o psb_c_ell_arwsum.o psb_c_ell_colsum.o psb_c_ell_csgetblk.o psb_c_ell_csgetptn.o psb_c_ell_csgetrow.o psb_c_ell_csmm.o psb_c_ell_csmv.o psb_c_ell_csnm1.o psb_c_ell_csnmi.o psb_c_ell_csput.o psb_c_ell_cssm.o psb_c_ell_cssv.o psb_c_ell_get_diag.o psb_c_ell_maxval.o psb_c_ell_mold.o psb_c_ell_print.o psb_c_ell_reallocate_nz.o psb_c_ell_reinit.o psb_c_ell_rowsum.o psb_c_ell_scal.o psb_c_ell_scals.o psb_c_ell_trim.o psb_c_hdia_allocate_mnnz.o psb_c_hdia_csmv.o psb_c_hdia_mold.o psb_c_hdia_print.o psb_c_hll_aclsum.o psb_c_hll_allocate_mnnz.o psb_c_hll_arwsum.o psb_c_hll_colsum.o psb_c_hll_csgetblk.o psb_c_hll_csgetptn.o psb_c_hll_csgetrow.o psb_c_hll_csmm.o psb_c_hll_csmv.o psb_c_hll_csnm1.o psb_c_hll_csnmi.o psb_c_hll_csput.o psb_c_hll_cssm.o psb_c_hll_cssv.o psb_c_hll_get_diag.o psb_c_hll_maxval.o psb_c_hll_mold.o psb_c_hll_print.o psb_c_hll_reallocate_nz.o psb_c_hll_reinit.o psb_c_hll_rowsum.o psb_c_hll_scal.o psb_c_hll_scals.o psb_c_mv_dia_from_coo.o psb_c_mv_ell_from_coo.o psb_c_mv_ell_from_fmt.o psb_c_mv_ell_to_coo.o psb_c_mv_ell_to_fmt.o psb_c_mv_hdia_from_coo.o psb_c_mv_hdia_to_coo.o psb_c_mv_hll_from_coo.o psb_c_mv_hll_from_fmt.o psb_c_mv_hll_to_coo.o psb_c_mv_hll_to_fmt.o psb_d_cp_dia_from_coo.o psb_d_cp_dia_to_coo.o psb_d_cp_ell_from_coo.o psb_d_cp_ell_from_fmt.o psb_d_cp_ell_to_coo.o psb_d_cp_ell_to_fmt.o psb_d_cp_hdia_from_coo.o psb_d_cp_hdia_to_coo.o psb_d_cp_hll_from_coo.o psb_d_cp_hll_from_fmt.o psb_d_cp_hll_to_coo.o psb_d_cp_hll_to_fmt.o psb_d_dia_aclsum.o psb_d_dia_allocate_mnnz.o psb_d_dia_arwsum.o psb_d_dia_colsum.o psb_d_dia_csgetptn.o psb_d_dia_csgetrow.o psb_d_dia_csmm.o psb_d_dia_csmv.o psb_d_dia_get_diag.o psb_d_dia_maxval.o psb_d_dia_mold.o psb_d_dia_print.o psb_d_dia_reallocate_nz.o psb_d_dia_reinit.o psb_d_dia_rowsum.o psb_d_dia_scal.o psb_d_dia_scals.o psb_d_ell_aclsum.o psb_d_ell_allocate_mnnz.o psb_d_ell_arwsum.o psb_d_ell_colsum.o psb_d_ell_csgetblk.o psb_d_ell_csgetptn.o psb_d_ell_csgetrow.o psb_d_ell_csmm.o psb_d_ell_csmv.o psb_d_ell_csnm1.o psb_d_ell_csnmi.o psb_d_ell_csput.o psb_d_ell_cssm.o psb_d_ell_cssv.o psb_d_ell_get_diag.o psb_d_ell_maxval.o psb_d_ell_mold.o psb_d_ell_print.o psb_d_ell_reallocate_nz.o psb_d_ell_reinit.o psb_d_ell_rowsum.o psb_d_ell_scal.o psb_d_ell_scals.o psb_d_ell_trim.o psb_d_hdia_allocate_mnnz.o psb_d_hdia_csmv.o psb_d_hdia_mold.o psb_d_hdia_print.o psb_d_hll_aclsum.o psb_d_hll_allocate_mnnz.o psb_d_hll_arwsum.o psb_d_hll_colsum.o psb_d_hll_csgetblk.o psb_d_hll_csgetptn.o psb_d_hll_csgetrow.o psb_d_hll_csmm.o psb_d_hll_csmv.o psb_d_hll_csnm1.o psb_d_hll_csnmi.o psb_d_hll_csput.o psb_d_hll_cssm.o psb_d_hll_cssv.o psb_d_hll_get_diag.o psb_d_hll_maxval.o psb_d_hll_mold.o psb_d_hll_print.o psb_d_hll_reallocate_nz.o psb_d_hll_reinit.o psb_d_hll_rowsum.o psb_d_hll_scal.o psb_d_hll_scals.o psb_d_mv_dia_from_coo.o psb_d_mv_ell_from_coo.o psb_d_mv_ell_from_fmt.o psb_d_mv_ell_to_coo.o psb_d_mv_ell_to_fmt.o psb_d_mv_hdia_from_coo.o psb_d_mv_hdia_to_coo.o psb_d_mv_hll_from_coo.o psb_d_mv_hll_from_fmt.o psb_d_mv_hll_to_coo.o psb_d_mv_hll_to_fmt.o psb_z_cp_dia_from_coo.o psb_z_cp_dia_to_coo.o psb_z_cp_ell_from_coo.o psb_z_cp_ell_from_fmt.o psb_z_cp_ell_to_coo.o psb_z_cp_ell_to_fmt.o psb_z_cp_hdia_from_coo.o psb_z_cp_hdia_to_coo.o psb_z_cp_hll_from_coo.o psb_z_cp_hll_from_fmt.o psb_z_cp_hll_to_coo.o psb_z_cp_hll_to_fmt.o psb_z_dia_aclsum.o psb_z_dia_allocate_mnnz.o psb_z_dia_arwsum.o psb_z_dia_colsum.o psb_z_dia_csgetptn.o psb_z_dia_csgetrow.o psb_z_dia_csmm.o psb_z_dia_csmv.o psb_z_dia_get_diag.o psb_z_dia_maxval.o psb_z_dia_mold.o psb_z_dia_print.o psb_z_dia_reallocate_nz.o psb_z_dia_reinit.o psb_z_dia_rowsum.o psb_z_dia_scal.o psb_z_dia_scals.o psb_z_ell_aclsum.o psb_z_ell_allocate_mnnz.o psb_z_ell_arwsum.o psb_z_ell_colsum.o psb_z_ell_csgetblk.o psb_z_ell_csgetptn.o psb_z_ell_csgetrow.o psb_z_ell_csmm.o psb_z_ell_csmv.o psb_z_ell_csnm1.o psb_z_ell_csnmi.o psb_z_ell_csput.o psb_z_ell_cssm.o psb_z_ell_cssv.o psb_z_ell_get_diag.o psb_z_ell_maxval.o psb_z_ell_mold.o psb_z_ell_print.o psb_z_ell_reallocate_nz.o psb_z_ell_reinit.o psb_z_ell_rowsum.o psb_z_ell_scal.o psb_z_ell_scals.o psb_z_ell_trim.o psb_z_hdia_allocate_mnnz.o psb_z_hdia_csmv.o psb_z_hdia_mold.o psb_z_hdia_print.o psb_z_hll_aclsum.o psb_z_hll_allocate_mnnz.o psb_z_hll_arwsum.o psb_z_hll_colsum.o psb_z_hll_csgetblk.o psb_z_hll_csgetptn.o psb_z_hll_csgetrow.o psb_z_hll_csmm.o psb_z_hll_csmv.o psb_z_hll_csnm1.o psb_z_hll_csnmi.o psb_z_hll_csput.o psb_z_hll_cssm.o psb_z_hll_cssv.o psb_z_hll_get_diag.o psb_z_hll_maxval.o psb_z_hll_mold.o psb_z_hll_print.o psb_z_hll_reallocate_nz.o psb_z_hll_reinit.o psb_z_hll_rowsum.o psb_z_hll_scal.o psb_z_hll_scals.o psb_z_mv_dia_from_coo.o psb_z_mv_ell_from_coo.o psb_z_mv_ell_from_fmt.o psb_z_mv_ell_to_coo.o psb_z_mv_ell_to_fmt.o psb_z_mv_hdia_from_coo.o psb_z_mv_hdia_to_coo.o psb_z_mv_hll_from_coo.o psb_z_mv_hll_from_fmt.o psb_z_mv_hll_to_coo.o psb_z_mv_hll_to_fmt.o psi_s_xtr_ell_from_coo.o psi_c_xtr_ell_from_coo.o psi_d_xtr_ell_from_coo.o psi_z_xtr_ell_from_coo.o psi_s_convert_ell_from_coo.o psi_c_convert_ell_from_coo.o psi_d_convert_ell_from_coo.o psi_z_convert_ell_from_coo.o psi_s_convert_hll_from_coo.o psi_c_convert_hll_from_coo.o psi_d_convert_hll_from_coo.o psi_z_convert_hll_from_coo.o psi_s_xtr_dia_from_coo.o psi_c_xtr_dia_from_coo.o psi_d_xtr_dia_from_coo.o psi_z_xtr_dia_from_coo.o psi_s_xtr_coo_from_dia.o psi_d_xtr_coo_from_dia.o psi_c_xtr_coo_from_dia.o psi_z_xtr_coo_from_dia.o psi_s_convert_dia_from_coo.o psi_c_convert_dia_from_coo.o psi_d_convert_dia_from_coo.o psi_z_convert_dia_from_coo.o psb_s_dns_mat_impl.o psb_d_dns_mat_impl.o psb_c_dns_mat_impl.o psb_z_dns_mat_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -ar -cDr libpsb_ext.a psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o psb_s_hll_mat_mod.o psb_s_ell_mat_mod.o psb_c_hll_mat_mod.o psb_c_ell_mat_mod.o psb_z_hll_mat_mod.o psb_z_ell_mat_mod.o psb_d_dia_mat_mod.o psb_d_hdia_mat_mod.o psb_s_dia_mat_mod.o psb_s_hdia_mat_mod.o psb_c_dia_mat_mod.o psb_c_hdia_mat_mod.o psb_z_dia_mat_mod.o psb_z_hdia_mat_mod.o psb_s_dns_mat_mod.o psb_d_dns_mat_mod.o psb_c_dns_mat_mod.o psb_z_dns_mat_mod.o psi_ext_util_mod.o psi_i_ext_util_mod.o psi_s_ext_util_mod.o psi_c_ext_util_mod.o psi_d_ext_util_mod.o psi_z_ext_util_mod.o psb_ext_mod.o -/bin/cp -p libpsb_ext.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -===================================== -PSBLAS libraries Compilation Successful. diff --git a/test/computational_routines/geaxpby/psblas_geaxpby_test.log b/test/computational_routines/geaxpby/psblas_geaxpby_test.log index deefe624e..182bbbc54 100644 --- a/test/computational_routines/geaxpby/psblas_geaxpby_test.log +++ b/test/computational_routines/geaxpby/psblas_geaxpby_test.log @@ -2,730 +2,293 @@ Welcome to PSBLAS version: 3.9.1 This is the psb_geaxpby_test sample program Number of processes used in this computation: 1 -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -Welcome to PSBLAS version: 3.9.1 -This is the psb_geaxpby_test sample program -Number of processes used in this computation: 20 - -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] - -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -Comparison between serial/sol_x1_y1_a1_b1.mtx and parallel/sol_x1_y1_a1_b1.mtx: 0 differences -Comparison between serial/sol_x1_y1_a1_b2.mtx and parallel/sol_x1_y1_a1_b2.mtx: 0 differences -Comparison between serial/sol_x1_y1_a1_b3.mtx and parallel/sol_x1_y1_a1_b3.mtx: 0 differences -Comparison between serial/sol_x1_y1_a2_b1.mtx and parallel/sol_x1_y1_a2_b1.mtx: 0 differences -Comparison between serial/sol_x1_y1_a2_b2.mtx and parallel/sol_x1_y1_a2_b2.mtx: 0 differences -Comparison between serial/sol_x1_y1_a2_b3.mtx and parallel/sol_x1_y1_a2_b3.mtx: 0 differences -Comparison between serial/sol_x1_y1_a3_b1.mtx and parallel/sol_x1_y1_a3_b1.mtx: 0 differences -Comparison between serial/sol_x1_y1_a3_b2.mtx and parallel/sol_x1_y1_a3_b2.mtx: 0 differences -Comparison between serial/sol_x1_y1_a3_b3.mtx and parallel/sol_x1_y1_a3_b3.mtx: 0 differences -Comparison between serial/sol_x1_y2_a1_b1.mtx and parallel/sol_x1_y2_a1_b1.mtx: 0 differences -Comparison between serial/sol_x1_y2_a1_b2.mtx and parallel/sol_x1_y2_a1_b2.mtx: 0 differences -Comparison between serial/sol_x1_y2_a1_b3.mtx and parallel/sol_x1_y2_a1_b3.mtx: 0 differences -Comparison between serial/sol_x1_y2_a2_b1.mtx and parallel/sol_x1_y2_a2_b1.mtx: 0 differences -Comparison between serial/sol_x1_y2_a2_b2.mtx and parallel/sol_x1_y2_a2_b2.mtx: 0 differences -Comparison between serial/sol_x1_y2_a2_b3.mtx and parallel/sol_x1_y2_a2_b3.mtx: 0 differences -Comparison between serial/sol_x1_y2_a3_b1.mtx and parallel/sol_x1_y2_a3_b1.mtx: 0 differences -Comparison between serial/sol_x1_y2_a3_b2.mtx and parallel/sol_x1_y2_a3_b2.mtx: 0 differences -Comparison between serial/sol_x1_y2_a3_b3.mtx and parallel/sol_x1_y2_a3_b3.mtx: 0 differences -Comparison between serial/sol_x1_y3_a1_b1.mtx and parallel/sol_x1_y3_a1_b1.mtx: 0 differences -Comparison between serial/sol_x1_y3_a1_b2.mtx and parallel/sol_x1_y3_a1_b2.mtx: 0 differences -Comparison between serial/sol_x1_y3_a1_b3.mtx and parallel/sol_x1_y3_a1_b3.mtx: 0 differences -Comparison between serial/sol_x1_y3_a2_b1.mtx and parallel/sol_x1_y3_a2_b1.mtx: 0 differences -Comparison between serial/sol_x1_y3_a2_b2.mtx and parallel/sol_x1_y3_a2_b2.mtx: 0 differences -Comparison between serial/sol_x1_y3_a2_b3.mtx and parallel/sol_x1_y3_a2_b3.mtx: 0 differences -Comparison between serial/sol_x1_y3_a3_b1.mtx and parallel/sol_x1_y3_a3_b1.mtx: 0 differences -Comparison between serial/sol_x1_y3_a3_b2.mtx and parallel/sol_x1_y3_a3_b2.mtx: 0 differences -Comparison between serial/sol_x1_y3_a3_b3.mtx and parallel/sol_x1_y3_a3_b3.mtx: 0 differences -Comparison between serial/sol_x1_y4_a1_b1.mtx and parallel/sol_x1_y4_a1_b1.mtx: 0 differences -Comparison between serial/sol_x1_y4_a1_b2.mtx and parallel/sol_x1_y4_a1_b2.mtx: 0 differences -Comparison between serial/sol_x1_y4_a1_b3.mtx and parallel/sol_x1_y4_a1_b3.mtx: 0 differences -Comparison between serial/sol_x1_y4_a2_b1.mtx and parallel/sol_x1_y4_a2_b1.mtx: 0 differences -Comparison between serial/sol_x1_y4_a2_b2.mtx and parallel/sol_x1_y4_a2_b2.mtx: 0 differences -Comparison between serial/sol_x1_y4_a2_b3.mtx and parallel/sol_x1_y4_a2_b3.mtx: 0 differences -Comparison between serial/sol_x1_y4_a3_b1.mtx and parallel/sol_x1_y4_a3_b1.mtx: 0 differences -Comparison between serial/sol_x1_y4_a3_b2.mtx and parallel/sol_x1_y4_a3_b2.mtx: 0 differences -Comparison between serial/sol_x1_y4_a3_b3.mtx and parallel/sol_x1_y4_a3_b3.mtx: 0 differences -Comparison between serial/sol_x2_y1_a1_b1.mtx and parallel/sol_x2_y1_a1_b1.mtx: 0 differences -Comparison between serial/sol_x2_y1_a1_b2.mtx and parallel/sol_x2_y1_a1_b2.mtx: 0 differences -Comparison between serial/sol_x2_y1_a1_b3.mtx and parallel/sol_x2_y1_a1_b3.mtx: 0 differences -Comparison between serial/sol_x2_y1_a2_b1.mtx and parallel/sol_x2_y1_a2_b1.mtx: 0 differences -Comparison between serial/sol_x2_y1_a2_b2.mtx and parallel/sol_x2_y1_a2_b2.mtx: 0 differences -Comparison between serial/sol_x2_y1_a2_b3.mtx and parallel/sol_x2_y1_a2_b3.mtx: 0 differences -Comparison between serial/sol_x2_y1_a3_b1.mtx and parallel/sol_x2_y1_a3_b1.mtx: 0 differences -Comparison between serial/sol_x2_y1_a3_b2.mtx and parallel/sol_x2_y1_a3_b2.mtx: 0 differences -Comparison between serial/sol_x2_y1_a3_b3.mtx and parallel/sol_x2_y1_a3_b3.mtx: 0 differences -Comparison between serial/sol_x2_y2_a1_b1.mtx and parallel/sol_x2_y2_a1_b1.mtx: 0 differences -Comparison between serial/sol_x2_y2_a1_b2.mtx and parallel/sol_x2_y2_a1_b2.mtx: 0 differences -Comparison between serial/sol_x2_y2_a1_b3.mtx and parallel/sol_x2_y2_a1_b3.mtx: 0 differences -Comparison between serial/sol_x2_y2_a2_b1.mtx and parallel/sol_x2_y2_a2_b1.mtx: 0 differences -Comparison between serial/sol_x2_y2_a2_b2.mtx and parallel/sol_x2_y2_a2_b2.mtx: 0 differences -Comparison between serial/sol_x2_y2_a2_b3.mtx and parallel/sol_x2_y2_a2_b3.mtx: 0 differences -Comparison between serial/sol_x2_y2_a3_b1.mtx and parallel/sol_x2_y2_a3_b1.mtx: 0 differences -Comparison between serial/sol_x2_y2_a3_b2.mtx and parallel/sol_x2_y2_a3_b2.mtx: 0 differences -Comparison between serial/sol_x2_y2_a3_b3.mtx and parallel/sol_x2_y2_a3_b3.mtx: 0 differences -Comparison between serial/sol_x2_y3_a1_b1.mtx and parallel/sol_x2_y3_a1_b1.mtx: 0 differences -Comparison between serial/sol_x2_y3_a1_b2.mtx and parallel/sol_x2_y3_a1_b2.mtx: 0 differences -Comparison between serial/sol_x2_y3_a1_b3.mtx and parallel/sol_x2_y3_a1_b3.mtx: 0 differences -Comparison between serial/sol_x2_y3_a2_b1.mtx and parallel/sol_x2_y3_a2_b1.mtx: 0 differences -Comparison between serial/sol_x2_y3_a2_b2.mtx and parallel/sol_x2_y3_a2_b2.mtx: 0 differences -Comparison between serial/sol_x2_y3_a2_b3.mtx and parallel/sol_x2_y3_a2_b3.mtx: 0 differences -Comparison between serial/sol_x2_y3_a3_b1.mtx and parallel/sol_x2_y3_a3_b1.mtx: 0 differences -Comparison between serial/sol_x2_y3_a3_b2.mtx and parallel/sol_x2_y3_a3_b2.mtx: 0 differences -Comparison between serial/sol_x2_y3_a3_b3.mtx and parallel/sol_x2_y3_a3_b3.mtx: 0 differences -Comparison between serial/sol_x2_y4_a1_b1.mtx and parallel/sol_x2_y4_a1_b1.mtx: 0 differences -Comparison between serial/sol_x2_y4_a1_b2.mtx and parallel/sol_x2_y4_a1_b2.mtx: 0 differences -Comparison between serial/sol_x2_y4_a1_b3.mtx and parallel/sol_x2_y4_a1_b3.mtx: 0 differences -Comparison between serial/sol_x2_y4_a2_b1.mtx and parallel/sol_x2_y4_a2_b1.mtx: 0 differences -Comparison between serial/sol_x2_y4_a2_b2.mtx and parallel/sol_x2_y4_a2_b2.mtx: 0 differences -Comparison between serial/sol_x2_y4_a2_b3.mtx and parallel/sol_x2_y4_a2_b3.mtx: 0 differences -Comparison between serial/sol_x2_y4_a3_b1.mtx and parallel/sol_x2_y4_a3_b1.mtx: 0 differences -Comparison between serial/sol_x2_y4_a3_b2.mtx and parallel/sol_x2_y4_a3_b2.mtx: 0 differences -Comparison between serial/sol_x2_y4_a3_b3.mtx and parallel/sol_x2_y4_a3_b3.mtx: 0 differences -Comparison between serial/sol_x3_y1_a1_b1.mtx and parallel/sol_x3_y1_a1_b1.mtx: 0 differences -Comparison between serial/sol_x3_y1_a1_b2.mtx and parallel/sol_x3_y1_a1_b2.mtx: 0 differences -Comparison between serial/sol_x3_y1_a1_b3.mtx and parallel/sol_x3_y1_a1_b3.mtx: 0 differences -Comparison between serial/sol_x3_y1_a2_b1.mtx and parallel/sol_x3_y1_a2_b1.mtx: 0 differences -Comparison between serial/sol_x3_y1_a2_b2.mtx and parallel/sol_x3_y1_a2_b2.mtx: 0 differences -Comparison between serial/sol_x3_y1_a2_b3.mtx and parallel/sol_x3_y1_a2_b3.mtx: 0 differences -Comparison between serial/sol_x3_y1_a3_b1.mtx and parallel/sol_x3_y1_a3_b1.mtx: 0 differences -Comparison between serial/sol_x3_y1_a3_b2.mtx and parallel/sol_x3_y1_a3_b2.mtx: 0 differences -Comparison between serial/sol_x3_y1_a3_b3.mtx and parallel/sol_x3_y1_a3_b3.mtx: 0 differences -Comparison between serial/sol_x3_y2_a1_b1.mtx and parallel/sol_x3_y2_a1_b1.mtx: 0 differences -Comparison between serial/sol_x3_y2_a1_b2.mtx and parallel/sol_x3_y2_a1_b2.mtx: 0 differences -Comparison between serial/sol_x3_y2_a1_b3.mtx and parallel/sol_x3_y2_a1_b3.mtx: 0 differences -Comparison between serial/sol_x3_y2_a2_b1.mtx and parallel/sol_x3_y2_a2_b1.mtx: 0 differences -Comparison between serial/sol_x3_y2_a2_b2.mtx and parallel/sol_x3_y2_a2_b2.mtx: 0 differences -Comparison between serial/sol_x3_y2_a2_b3.mtx and parallel/sol_x3_y2_a2_b3.mtx: 0 differences -Comparison between serial/sol_x3_y2_a3_b1.mtx and parallel/sol_x3_y2_a3_b1.mtx: 0 differences -Comparison between serial/sol_x3_y2_a3_b2.mtx and parallel/sol_x3_y2_a3_b2.mtx: 0 differences -Comparison between serial/sol_x3_y2_a3_b3.mtx and parallel/sol_x3_y2_a3_b3.mtx: 0 differences -Comparison between serial/sol_x3_y3_a1_b1.mtx and parallel/sol_x3_y3_a1_b1.mtx: 0 differences -Comparison between serial/sol_x3_y3_a1_b2.mtx and parallel/sol_x3_y3_a1_b2.mtx: 0 differences -Comparison between serial/sol_x3_y3_a1_b3.mtx and parallel/sol_x3_y3_a1_b3.mtx: 0 differences -Comparison between serial/sol_x3_y3_a2_b1.mtx and parallel/sol_x3_y3_a2_b1.mtx: 0 differences -Comparison between serial/sol_x3_y3_a2_b2.mtx and parallel/sol_x3_y3_a2_b2.mtx: 0 differences -Comparison between serial/sol_x3_y3_a2_b3.mtx and parallel/sol_x3_y3_a2_b3.mtx: 0 differences -Comparison between serial/sol_x3_y3_a3_b1.mtx and parallel/sol_x3_y3_a3_b1.mtx: 0 differences -Comparison between serial/sol_x3_y3_a3_b2.mtx and parallel/sol_x3_y3_a3_b2.mtx: 0 differences -Comparison between serial/sol_x3_y3_a3_b3.mtx and parallel/sol_x3_y3_a3_b3.mtx: 0 differences -Comparison between serial/sol_x3_y4_a1_b1.mtx and parallel/sol_x3_y4_a1_b1.mtx: 0 differences -Comparison between serial/sol_x3_y4_a1_b2.mtx and parallel/sol_x3_y4_a1_b2.mtx: 0 differences -Comparison between serial/sol_x3_y4_a1_b3.mtx and parallel/sol_x3_y4_a1_b3.mtx: 0 differences -Comparison between serial/sol_x3_y4_a2_b1.mtx and parallel/sol_x3_y4_a2_b1.mtx: 0 differences -Comparison between serial/sol_x3_y4_a2_b2.mtx and parallel/sol_x3_y4_a2_b2.mtx: 0 differences -Comparison between serial/sol_x3_y4_a2_b3.mtx and parallel/sol_x3_y4_a2_b3.mtx: 0 differences -Comparison between serial/sol_x3_y4_a3_b1.mtx and parallel/sol_x3_y4_a3_b1.mtx: 0 differences -Comparison between serial/sol_x3_y4_a3_b2.mtx and parallel/sol_x3_y4_a3_b2.mtx: 0 differences -Comparison between serial/sol_x3_y4_a3_b3.mtx and parallel/sol_x3_y4_a3_b3.mtx: 0 differences -Comparison between serial/sol_x4_y1_a1_b1.mtx and parallel/sol_x4_y1_a1_b1.mtx: 0 differences -Comparison between serial/sol_x4_y1_a1_b2.mtx and parallel/sol_x4_y1_a1_b2.mtx: 0 differences -Comparison between serial/sol_x4_y1_a1_b3.mtx and parallel/sol_x4_y1_a1_b3.mtx: 0 differences -Comparison between serial/sol_x4_y1_a2_b1.mtx and parallel/sol_x4_y1_a2_b1.mtx: 0 differences -Comparison between serial/sol_x4_y1_a2_b2.mtx and parallel/sol_x4_y1_a2_b2.mtx: 0 differences -Comparison between serial/sol_x4_y1_a2_b3.mtx and parallel/sol_x4_y1_a2_b3.mtx: 0 differences -Comparison between serial/sol_x4_y1_a3_b1.mtx and parallel/sol_x4_y1_a3_b1.mtx: 0 differences -Comparison between serial/sol_x4_y1_a3_b2.mtx and parallel/sol_x4_y1_a3_b2.mtx: 0 differences -Comparison between serial/sol_x4_y1_a3_b3.mtx and parallel/sol_x4_y1_a3_b3.mtx: 0 differences -Comparison between serial/sol_x4_y2_a1_b1.mtx and parallel/sol_x4_y2_a1_b1.mtx: 0 differences -Comparison between serial/sol_x4_y2_a1_b2.mtx and parallel/sol_x4_y2_a1_b2.mtx: 0 differences -Comparison between serial/sol_x4_y2_a1_b3.mtx and parallel/sol_x4_y2_a1_b3.mtx: 0 differences -Comparison between serial/sol_x4_y2_a2_b1.mtx and parallel/sol_x4_y2_a2_b1.mtx: 0 differences -Comparison between serial/sol_x4_y2_a2_b2.mtx and parallel/sol_x4_y2_a2_b2.mtx: 0 differences -Comparison between serial/sol_x4_y2_a2_b3.mtx and parallel/sol_x4_y2_a2_b3.mtx: 0 differences -Comparison between serial/sol_x4_y2_a3_b1.mtx and parallel/sol_x4_y2_a3_b1.mtx: 0 differences -Comparison between serial/sol_x4_y2_a3_b2.mtx and parallel/sol_x4_y2_a3_b2.mtx: 0 differences -Comparison between serial/sol_x4_y2_a3_b3.mtx and parallel/sol_x4_y2_a3_b3.mtx: 0 differences -Comparison between serial/sol_x4_y3_a1_b1.mtx and parallel/sol_x4_y3_a1_b1.mtx: 0 differences -Comparison between serial/sol_x4_y3_a1_b2.mtx and parallel/sol_x4_y3_a1_b2.mtx: 0 differences -Comparison between serial/sol_x4_y3_a1_b3.mtx and parallel/sol_x4_y3_a1_b3.mtx: 0 differences -Comparison between serial/sol_x4_y3_a2_b1.mtx and parallel/sol_x4_y3_a2_b1.mtx: 0 differences -Comparison between serial/sol_x4_y3_a2_b2.mtx and parallel/sol_x4_y3_a2_b2.mtx: 0 differences -Comparison between serial/sol_x4_y3_a2_b3.mtx and parallel/sol_x4_y3_a2_b3.mtx: 0 differences -Comparison between serial/sol_x4_y3_a3_b1.mtx and parallel/sol_x4_y3_a3_b1.mtx: 0 differences -Comparison between serial/sol_x4_y3_a3_b2.mtx and parallel/sol_x4_y3_a3_b2.mtx: 0 differences -Comparison between serial/sol_x4_y3_a3_b3.mtx and parallel/sol_x4_y3_a3_b3.mtx: 0 differences -Comparison between serial/sol_x4_y4_a1_b1.mtx and parallel/sol_x4_y4_a1_b1.mtx: 0 differences -Comparison between serial/sol_x4_y4_a1_b2.mtx and parallel/sol_x4_y4_a1_b2.mtx: 0 differences -Comparison between serial/sol_x4_y4_a1_b3.mtx and parallel/sol_x4_y4_a1_b3.mtx: 0 differences -Comparison between serial/sol_x4_y4_a2_b1.mtx and parallel/sol_x4_y4_a2_b1.mtx: 0 differences -Comparison between serial/sol_x4_y4_a2_b2.mtx and parallel/sol_x4_y4_a2_b2.mtx: 0 differences -Comparison between serial/sol_x4_y4_a2_b3.mtx and parallel/sol_x4_y4_a2_b3.mtx: 0 differences -Comparison between serial/sol_x4_y4_a3_b1.mtx and parallel/sol_x4_y4_a3_b1.mtx: 0 differences -Comparison between serial/sol_x4_y4_a3_b2.mtx and parallel/sol_x4_y4_a3_b2.mtx: 0 differences -Comparison between serial/sol_x4_y4_a3_b3.mtx and parallel/sol_x4_y4_a3_b3.mtx: 0 differences diff --git a/test/computational_routines/gedot/psblas_gedot_test.log b/test/computational_routines/gedot/psblas_gedot_test.log index 1f2aef93d..8f64b2ebd 100644 --- a/test/computational_routines/gedot/psblas_gedot_test.log +++ b/test/computational_routines/gedot/psblas_gedot_test.log @@ -413,3 +413,4 @@ Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 difference Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences + diff --git a/test/computational_routines/psblas_test_results.log b/test/computational_routines/psblas_test_results.log index db918e715..87bd86267 100644 --- a/test/computational_routines/psblas_test_results.log +++ b/test/computational_routines/psblas_test_results.log @@ -9536,3 +9536,715 @@ Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 difference Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.1 +This is the psb_geaxpby_test sample program +Number of processes used in this computation: 1 + +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] + +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] + + +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 1 + +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y4.mtx 16/144 [OK] +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:28:20] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:28:20] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:32:44] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:32:44] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:35:32] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:35:32] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:37:18] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences + + diff --git a/test/computational_routines/test.sh b/test/computational_routines/test.sh index 5f3b4d45c..263c564c5 100755 --- a/test/computational_routines/test.sh +++ b/test/computational_routines/test.sh @@ -39,35 +39,35 @@ echo -e "${BLUE}[INFO]\t Starting environment check for required modules...${RE # Check and load required modules -required_modules=("gnu/12.2.1-sys" "mpich/4.2.2" "cuda/12.5") - -for module in "${required_modules[@]}"; do - if ! module list 2>&1 | grep -q "$module"; then - echo -e "${YELLOW}[WARNING] Module not found, loading $module${RESET}" - module load "$module" - flag=1 - if ! grep -q "module load $module" "$HOME/.bashrc"; then - echo -e "[INFO]\t Adding 'module load $module' to $bashrc..." - echo "module load $module" >> "$HOME/.bashrc" - # else - # echo "'module load $module' is already present in $bashrc." - fi - else - echo -e "[INFO]\t Found module $module." - fi -done - -# Update .bashrc if necessary -if [ $flag -eq 1 ]; then - echo -e "[INFO]\t Reloading $HOME/.bashrc..." - source ~/.bashrc -fi - -# Inform the user about environment persistence -if [ "$$" -eq "$PPID" ]; then - echo -e "${YELLOW}[WARNING] Modules loaded in this script will not persist after the script finishes.${RESET}" - echo -e "${YELLOW}[WARNING] Run the script using 'source autotest.sh' to make the changes persist.${RESET}" -fi +# required_modules=("gnu/12.2.1-sys" "mpich/4.2.2" "cuda/12.5") + +# for module in "${required_modules[@]}"; do +# if ! module list 2>&1 | grep -q "$module"; then +# echo -e "${YELLOW}[WARNING] Module not found, loading $module${RESET}" +# module load "$module" +# flag=1 +# if ! grep -q "module load $module" "$HOME/.bashrc"; then +# echo -e "[INFO]\t Adding 'module load $module' to $bashrc..." +# echo "module load $module" >> "$HOME/.bashrc" +# # else +# # echo "'module load $module' is already present in $bashrc." +# fi +# else +# echo -e "[INFO]\t Found module $module." +# fi +# done +# +# # Update .bashrc if necessary +# if [ $flag -eq 1 ]; then +# echo -e "[INFO]\t Reloading $HOME/.bashrc..." +# source ~/.bashrc +# fi +# +# # Inform the user about environment persistence +# if [ "$$" -eq "$PPID" ]; then +# echo -e "${YELLOW}[WARNING] Modules loaded in this script will not persist after the script finishes.${RESET}" +# echo -e "${YELLOW}[WARNING] Run the script using 'source autotest.sh' to make the changes persist.${RESET}" +# fi echo -e "${BLUE}[INFO]\t Environment check for required modules completed.${RESET}" echo "" From 2d388ce45e8b52178790ed5774f5c5e016ace5e2 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Tue, 24 Mar 2026 07:49:06 +0100 Subject: [PATCH 138/175] [FIX] Fixed compilation dependencies resulting in race condition when compiling using many threads. The problem was encountered usingg make -j30, now it compiles. --- base/comm/internals/Makefile | 10 ++++++++-- base/modules/comm/psi_i2_comm_a_mod.f90 | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/base/comm/internals/Makefile b/base/comm/internals/Makefile index f80555446..734ca1d72 100644 --- a/base/comm/internals/Makefile +++ b/base/comm/internals/Makefile @@ -37,8 +37,14 @@ lib: objs $(RANLIB) $(LIBDIR)/$(LIBNAME) $(FOBJS) $(FBOJS2): $(MODDIR)/psi_mod.o -mpfobjs: - (make $(MPFOBJS) FC="$(MPFC)" ) +mpfobjs: $(MODDIR)/comm/psi_m_comm_a_mod.o \ + $(MODDIR)/comm/psi_s_comm_a_mod.o \ + $(MODDIR)/comm/psi_d_comm_a_mod.o \ + $(MODDIR)/comm/psi_c_comm_a_mod.o \ + $(MODDIR)/comm/psi_z_comm_a_mod.o \ + $(MODDIR)/comm/psi_e_comm_a_mod.o \ + $(MODDIR)/comm/psi_i2_comm_a_mod.o + (make $(MPFOBJS) FC="$(MPFC)" ) clean: /bin/rm -f $(MPFOBJS) $(FOBJS) $(COBJS) $(FOBJS2) $(MPFOBJS2) *$(.mod) *.smod diff --git a/base/modules/comm/psi_i2_comm_a_mod.f90 b/base/modules/comm/psi_i2_comm_a_mod.f90 index a76ca9b37..bb268c2da 100644 --- a/base/modules/comm/psi_i2_comm_a_mod.f90 +++ b/base/modules/comm/psi_i2_comm_a_mod.f90 @@ -31,7 +31,7 @@ ! module psi_i2_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_, psb_i2pk_ interface psi_swapdata module subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) From e1ab2bddf62e67c1c09a0b1f1c3d35413a4d8909 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 24 Mar 2026 09:05:51 +0100 Subject: [PATCH 139/175] Fix import and build dependencies --- base/modules/Makefile | 4 ++-- base/modules/comm/psi_c_comm_a_mod.f90 | 3 ++- base/modules/comm/psi_d_comm_a_mod.f90 | 3 ++- base/modules/comm/psi_e_comm_a_mod.f90 | 3 ++- base/modules/comm/psi_i2_comm_a_mod.f90 | 3 ++- base/modules/comm/psi_m_comm_a_mod.f90 | 3 ++- base/modules/comm/psi_s_comm_a_mod.f90 | 3 ++- base/modules/comm/psi_z_comm_a_mod.f90 | 3 ++- 8 files changed, 16 insertions(+), 9 deletions(-) diff --git a/base/modules/Makefile b/base/modules/Makefile index b582b8b76..89fc1b71e 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -305,9 +305,9 @@ desc/psb_desc_mod.o: psb_penv_mod.o psb_realloc_mod.o\ desc/psb_indx_map_mod.o serial/psb_i_vect_mod.o psi_i_mod.o: desc/psb_desc_mod.o serial/psb_i_vect_mod.o comm/psi_e_comm_a_mod.o \ - comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o + comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_i2_comm_a_mod.o psi_l_mod.o: desc/psb_desc_mod.o serial/psb_l_vect_mod.o comm/psi_e_comm_a_mod.o \ - comm/psi_m_comm_a_mod.o comm/psi_l_comm_v_mod.o + comm/psi_m_comm_a_mod.o comm/psi_l_comm_v_mod.o comm/psi_i2_comm_a_mod.o psi_s_mod.o: desc/psb_desc_mod.o serial/psb_s_vect_mod.o comm/psi_s_comm_a_mod.o \ comm/psi_s_comm_v_mod.o psi_d_mod.o: desc/psb_desc_mod.o serial/psb_d_vect_mod.o comm/psi_d_comm_a_mod.o \ diff --git a/base/modules/comm/psi_c_comm_a_mod.f90 b/base/modules/comm/psi_c_comm_a_mod.f90 index 9289c6bd9..7e8cc0c63 100644 --- a/base/modules/comm/psi_c_comm_a_mod.f90 +++ b/base/modules/comm/psi_c_comm_a_mod.f90 @@ -31,7 +31,8 @@ ! module psi_c_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_spk_, psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_spk_, psb_i_base_vect_type interface psi_swapdata module subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) diff --git a/base/modules/comm/psi_d_comm_a_mod.f90 b/base/modules/comm/psi_d_comm_a_mod.f90 index f27378087..599ed160e 100644 --- a/base/modules/comm/psi_d_comm_a_mod.f90 +++ b/base/modules/comm/psi_d_comm_a_mod.f90 @@ -31,7 +31,8 @@ ! module psi_d_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_dpk_, psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_dpk_, psb_i_base_vect_type interface psi_swapdata module subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) diff --git a/base/modules/comm/psi_e_comm_a_mod.f90 b/base/modules/comm/psi_e_comm_a_mod.f90 index d3108e8b9..85a6ed1ff 100644 --- a/base/modules/comm/psi_e_comm_a_mod.f90 +++ b/base/modules/comm/psi_e_comm_a_mod.f90 @@ -31,7 +31,8 @@ ! module psi_e_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_epk_, psb_i2pk_ interface psi_swapdata module subroutine psi_eswapdatam(flag,n,beta,y,desc_a,work,info,data) diff --git a/base/modules/comm/psi_i2_comm_a_mod.f90 b/base/modules/comm/psi_i2_comm_a_mod.f90 index bb268c2da..41c94c2d1 100644 --- a/base/modules/comm/psi_i2_comm_a_mod.f90 +++ b/base/modules/comm/psi_i2_comm_a_mod.f90 @@ -31,7 +31,8 @@ ! module psi_i2_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_, psb_i2pk_ + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_epk_, psb_i2pk_ interface psi_swapdata module subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) diff --git a/base/modules/comm/psi_m_comm_a_mod.f90 b/base/modules/comm/psi_m_comm_a_mod.f90 index 8950ed6ff..b0e35b1b2 100644 --- a/base/modules/comm/psi_m_comm_a_mod.f90 +++ b/base/modules/comm/psi_m_comm_a_mod.f90 @@ -31,7 +31,8 @@ ! module psi_m_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_epk_, psb_i2pk_ interface psi_swapdata module subroutine psi_mswapdatam(flag,n,beta,y,desc_a,work,info,data) diff --git a/base/modules/comm/psi_s_comm_a_mod.f90 b/base/modules/comm/psi_s_comm_a_mod.f90 index 50fc6986f..a518ce098 100644 --- a/base/modules/comm/psi_s_comm_a_mod.f90 +++ b/base/modules/comm/psi_s_comm_a_mod.f90 @@ -31,7 +31,8 @@ ! module psi_s_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_spk_, psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_spk_, psb_i_base_vect_type interface psi_swapdata module subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) diff --git a/base/modules/comm/psi_z_comm_a_mod.f90 b/base/modules/comm/psi_z_comm_a_mod.f90 index d86c796a1..1e7369df5 100644 --- a/base/modules/comm/psi_z_comm_a_mod.f90 +++ b/base/modules/comm/psi_z_comm_a_mod.f90 @@ -31,7 +31,8 @@ ! module psi_z_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_dpk_, psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_dpk_, psb_i_base_vect_type interface psi_swapdata module subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) From eeeb450f0b9e02cbac218922f9803c88701dedc9 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 24 Mar 2026 09:22:08 +0100 Subject: [PATCH 140/175] Simplified build fix --- base/comm/internals/Makefile | 8 +------- base/modules/Makefile | 3 ++- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/base/comm/internals/Makefile b/base/comm/internals/Makefile index 734ca1d72..6e3a9e762 100644 --- a/base/comm/internals/Makefile +++ b/base/comm/internals/Makefile @@ -37,13 +37,7 @@ lib: objs $(RANLIB) $(LIBDIR)/$(LIBNAME) $(FOBJS) $(FBOJS2): $(MODDIR)/psi_mod.o -mpfobjs: $(MODDIR)/comm/psi_m_comm_a_mod.o \ - $(MODDIR)/comm/psi_s_comm_a_mod.o \ - $(MODDIR)/comm/psi_d_comm_a_mod.o \ - $(MODDIR)/comm/psi_c_comm_a_mod.o \ - $(MODDIR)/comm/psi_z_comm_a_mod.o \ - $(MODDIR)/comm/psi_e_comm_a_mod.o \ - $(MODDIR)/comm/psi_i2_comm_a_mod.o +mpfobjs: $(MODDIR)/psi_mod.o (make $(MPFOBJS) FC="$(MPFC)" ) clean: diff --git a/base/modules/Makefile b/base/modules/Makefile index 89fc1b71e..86870bc5d 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -101,6 +101,7 @@ UTIL_MODS = desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o\ comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\ comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o \ comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o \ + comm/psi_i2_comm_a_mod.o \ comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o \ comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o \ comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o \ @@ -364,7 +365,7 @@ comm/psi_d_comm_v_mod.o: serial/psb_d_vect_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_v_mod.o: serial/psb_c_vect_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_v_mod.o: serial/psb_z_vect_mod.o comm/psi_z_comm_a_mod.o -comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o \ +comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_i2_comm_a_mod.o \ comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o \ comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o: desc/psb_desc_mod.o From 769c2f65bf314ef9c2bde5a646e10b923ed9c710 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 24 Mar 2026 09:51:10 +0100 Subject: [PATCH 141/175] Prepare i2 --- base/modules/psi_i_mod.F90 | 4 +++- base/modules/psi_l_mod.F90 | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/base/modules/psi_i_mod.F90 b/base/modules/psi_i_mod.F90 index ad08b3094..aa44e9ffd 100644 --- a/base/modules/psi_i_mod.F90 +++ b/base/modules/psi_i_mod.F90 @@ -31,9 +31,11 @@ ! module psi_i_mod - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, psb_lpk_ + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, & + & psb_lpk_, psb_i2pk_ use psi_m_comm_a_mod use psi_e_comm_a_mod + use psi_i2_comm_a_mod use psb_i_base_vect_mod, only : psb_i_base_vect_type use psb_i_base_multivect_mod, only : psb_i_base_multivect_type use psi_i_comm_v_mod diff --git a/base/modules/psi_l_mod.F90 b/base/modules/psi_l_mod.F90 index 58686b6df..c1e38189e 100644 --- a/base/modules/psi_l_mod.F90 +++ b/base/modules/psi_l_mod.F90 @@ -31,9 +31,11 @@ ! module psi_l_mod - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, psb_lpk_ + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, & + & psb_lpk_, psb_i2pk_ use psi_m_comm_a_mod use psi_e_comm_a_mod + use psi_i2_comm_a_mod use psb_l_base_vect_mod, only : psb_l_base_vect_type use psb_l_base_multivect_mod, only : psb_l_base_multivect_type use psi_l_comm_v_mod From 80c02af47a45bfd0f1ca5a51701eab45df92d339 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 24 Mar 2026 11:31:13 +0100 Subject: [PATCH 142/175] Fix CMakeLists i2 --- base/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt index f2b83f913..5371b5304 100644 --- a/base/CMakeLists.txt +++ b/base/CMakeLists.txt @@ -434,7 +434,7 @@ set(PSB_base_source_files modules/comm/psb_m_comm_a_mod.f90 modules/comm/psb_z_linmap_mod.f90 modules/comm/psi_s_comm_a_mod.f90 -# modules/comm/psi_i2_comm_a_mod.f90 + modules/comm/psi_i2_comm_a_mod.f90 modules/comm/psi_m_comm_a_mod.f90 modules/comm/psi_l_comm_v_mod.f90 modules/comm/psb_comm_mod.f90 From a223c7eaf31e8f8e550654822e7c1330fcbc459e Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 24 Mar 2026 15:42:12 +0100 Subject: [PATCH 143/175] Rebuild I2 supprot --- base/comm/Makefile | 3 +- base/comm/internals/Makefile | 2 + base/modules/Makefile | 61 +- base/modules/auxil/psb_i2_hsort_x_mod.f90 | 312 +++ base/modules/auxil/psb_i_hsort_x_mod.f90 | 1 + base/modules/auxil/psb_ip_reord_mod.F90 | 1 + base/modules/auxil/psb_l_hsort_x_mod.f90 | 1 + base/modules/auxil/psb_sort_mod.f90 | 8 +- base/modules/auxil/psi_c_serial_mod.f90 | 37 +- base/modules/auxil/psi_d_serial_mod.f90 | 37 +- base/modules/auxil/psi_e_serial_mod.f90 | 39 +- base/modules/auxil/psi_i2_serial_mod.f90 | 39 +- base/modules/auxil/psi_m_serial_mod.f90 | 39 +- base/modules/auxil/psi_s_serial_mod.f90 | 37 +- base/modules/auxil/psi_serial_mod.f90 | 1 + base/modules/auxil/psi_z_serial_mod.f90 | 37 +- base/modules/comm/psb_comm_mod.f90 | 1 + base/modules/comm/psb_i2_comm_mod.f90 | 117 + base/modules/comm/psb_i_comm_mod.f90 | 2 +- base/modules/comm/psb_l_comm_mod.f90 | 2 +- base/modules/comm/psi_i2_comm_v_mod.f90 | 173 ++ base/modules/penv/psi_collective_mod.F90 | 1 + base/modules/penv/psi_p2p_mod.F90 | 1 + base/modules/psb_realloc_mod.F90 | 1 + base/modules/psi_i2_mod.F90 | 44 + base/modules/psi_i_mod.F90 | 2 +- base/modules/psi_l_mod.F90 | 2 +- base/modules/psi_mod.f90 | 1 + base/modules/serial/psb_i2_base_vect_mod.F90 | 2567 ++++++++++++++++++ base/modules/serial/psb_i2_vect_mod.F90 | 1271 +++++++++ base/modules/serial/psb_vect_mod.f90 | 1 + base/modules/tools/psb_tools_mod.f90 | 1 + base/serial/Makefile | 2 +- base/serial/sort/Makefile | 3 +- base/serial/sort/psb_i2_hsort_impl.f90 | 721 +++++ base/serial/sort/psb_i2_isort_impl.f90 | 378 +++ base/serial/sort/psb_i2_msort_impl.f90 | 667 +++++ base/serial/sort/psb_i2_qsort_impl.f90 | 1472 ++++++++++ base/tools/Makefile | 3 +- 39 files changed, 7925 insertions(+), 163 deletions(-) create mode 100644 base/modules/auxil/psb_i2_hsort_x_mod.f90 create mode 100644 base/modules/comm/psb_i2_comm_mod.f90 create mode 100644 base/modules/comm/psi_i2_comm_v_mod.f90 create mode 100644 base/modules/psi_i2_mod.F90 create mode 100644 base/modules/serial/psb_i2_base_vect_mod.F90 create mode 100644 base/modules/serial/psb_i2_vect_mod.F90 create mode 100644 base/serial/sort/psb_i2_hsort_impl.f90 create mode 100644 base/serial/sort/psb_i2_isort_impl.f90 create mode 100644 base/serial/sort/psb_i2_msort_impl.f90 create mode 100644 base/serial/sort/psb_i2_qsort_impl.f90 diff --git a/base/comm/Makefile b/base/comm/Makefile index dfa1bed8b..b7fcdeeab 100644 --- a/base/comm/Makefile +++ b/base/comm/Makefile @@ -8,6 +8,7 @@ OBJS = psb_dgather.o psb_dhalo.o psb_dovrl.o \ psb_zgather.o psb_zhalo.o psb_zovrl.o \ psb_dgather_a.o psb_dhalo_a.o psb_dovrl_a.o \ psb_sgather_a.o psb_shalo_a.o psb_sovrl_a.o \ + psb_i2gather_a.o psb_i2halo_a.o psb_i2ovrl_a.o \ psb_mgather_a.o psb_mhalo_a.o psb_movrl_a.o \ psb_egather_a.o psb_ehalo_a.o psb_eovrl_a.o \ psb_cgather_a.o psb_chalo_a.o psb_covrl_a.o \ @@ -18,7 +19,7 @@ MPFOBJS=psb_dscatter.o psb_zscatter.o \ psb_iscatter.o psb_lscatter.o \ psb_cscatter.o psb_sscatter.o \ psb_dscatter_a.o psb_zscatter_a.o \ - psb_mscatter_a.o psb_escatter_a.o \ + psb_mscatter_a.o psb_escatter_a.o psb_i2scatter_a.o \ psb_cscatter_a.o psb_sscatter_a.o \ psb_dspgather.o psb_sspgather.o \ psb_zspgather.o psb_cspgather.o diff --git a/base/comm/internals/Makefile b/base/comm/internals/Makefile index 6e3a9e762..b3aaf3088 100644 --- a/base/comm/internals/Makefile +++ b/base/comm/internals/Makefile @@ -6,6 +6,7 @@ FOBJS = psi_iovrl_restr.o psi_iovrl_save.o psi_iovrl_upd.o \ psi_dovrl_restr.o psi_dovrl_save.o psi_dovrl_upd.o \ psi_covrl_restr.o psi_covrl_save.o psi_covrl_upd.o \ psi_zovrl_restr.o psi_zovrl_save.o psi_zovrl_upd.o \ + psi_i2ovrl_restr_a.o psi_i2ovrl_save_a.o psi_i2ovrl_upd_a.o \ psi_movrl_restr_a.o psi_movrl_save_a.o psi_movrl_upd_a.o \ psi_eovrl_restr_a.o psi_eovrl_save_a.o psi_eovrl_upd_a.o \ psi_sovrl_restr_a.o psi_sovrl_save_a.o psi_sovrl_upd_a.o \ @@ -21,6 +22,7 @@ MPFOBJS = psi_dswapdata.o psi_dswaptran.o\ psi_zswapdata.o psi_zswaptran.o \ psi_dswapdata_a.o psi_dswaptran_a.o \ psi_sswapdata_a.o psi_sswaptran_a.o \ + psi_i2swapdata_a.o psi_i2swaptran_a.o \ psi_mswapdata_a.o psi_mswaptran_a.o \ psi_eswapdata_a.o psi_eswaptran_a.o \ psi_cswapdata_a.o psi_cswaptran_a.o \ diff --git a/base/modules/Makefile b/base/modules/Makefile index 86870bc5d..ba665b57c 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -28,6 +28,7 @@ COMMINT= penv/psi_penv_mod.o \ SERIAL_MODS=serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o \ serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o \ serial/psb_serial_mod.o \ + serial/psb_i2_base_vect_mod.o serial/psb_i2_vect_mod.o\ serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o\ serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o\ serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o\ @@ -35,15 +36,19 @@ SERIAL_MODS=serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o \ serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o\ serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o\ serial/psb_vect_mod.o\ - auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o \ + auxil/psi_serial_mod.o \ + auxil/psi_i2_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o \ auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o \ auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o \ - psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o\ + psi_mod.o psi_i2_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o\ auxil/psb_ip_reord_mod.o\ auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o \ + auxil/psb_i2_ip_reord_mod.o \ auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o \ auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o \ auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o \ + auxil/psb_i2_hsort_mod.o auxil/psb_i2_isort_mod.o \ + auxil/psb_i2_msort_mod.o auxil/psb_i2_qsort_mod.o \ auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o \ auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o \ auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o \ @@ -56,6 +61,7 @@ SERIAL_MODS=serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o \ auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o \ auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o \ auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o \ + auxil/psb_i2_hsort_x_mod.o \ auxil/psb_i_hsort_x_mod.o \ auxil/psb_l_hsort_x_mod.o \ auxil/psb_s_hsort_x_mod.o \ @@ -85,7 +91,7 @@ UTIL_MODS = desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o\ tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o \ tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o\ tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o \ - tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o \ + tools/psb_i2_tools_a_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o \ tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o\ tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o \ tools/psb_tools_mod.o \ @@ -101,7 +107,7 @@ UTIL_MODS = desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o\ comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\ comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o \ comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o \ - comm/psi_i2_comm_a_mod.o \ + comm/psi_i2_comm_a_mod.o comm/psi_i2_comm_v_mod.o \ comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o \ comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o \ comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o \ @@ -136,6 +142,7 @@ $(LIBDIR)/$(LIBNAME): objs $(OBJS): $(MODULES) psb_error_mod.o: psb_const_mod.o psb_realloc_mod.o \ + auxil/psb_i2_realloc_mod.o \ auxil/psb_m_realloc_mod.o \ auxil/psb_e_realloc_mod.o \ auxil/psb_s_realloc_mod.o \ @@ -148,6 +155,7 @@ penv/psi_collective_mod.o penv/psi_p2p_mod.o: penv/psi_penv_mod.o psb_realloc_mod.o: auxil/psb_m_realloc_mod.o \ auxil/psb_e_realloc_mod.o \ + auxil/psb_i2_realloc_mod.o \ auxil/psb_s_realloc_mod.o \ auxil/psb_d_realloc_mod.o \ auxil/psb_c_realloc_mod.o \ @@ -178,7 +186,8 @@ penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_m auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o \ -auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o \ +auxil/psb_string_mod.o auxil/psb_i2_realloc_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o \ +auxil/psb_s_realloc_mod.o \ auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o \ desc/psb_desc_const_mod.o psi_penv_mod.o: psb_const_mod.o @@ -192,6 +201,8 @@ auxil/psb_sort_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o \ auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o \ auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o \ auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o \ + auxil/psb_i2_hsort_mod.o auxil/psb_i2_isort_mod.o \ + auxil/psb_i2_msort_mod.o auxil/psb_i2_qsort_mod.o \ auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o \ auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o \ auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o \ @@ -200,6 +211,7 @@ auxil/psb_sort_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o \ auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o \ auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o \ auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o \ + auxil/psb_i2_hsort_x_mod.o \ auxil/psb_i_hsort_x_mod.o \ auxil/psb_l_hsort_x_mod.o \ auxil/psb_s_hsort_x_mod.o \ @@ -213,6 +225,8 @@ auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o \ auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o \ auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o \ auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o \ +auxil/psb_i2_hsort_mod.o auxil/psb_i2_isort_mod.o \ +auxil/psb_i2_msort_mod.o auxil/psb_i2_qsort_mod.o \ auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o \ auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o \ auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o \ @@ -221,17 +235,19 @@ auxil/psb_c_hsort_mod.o auxil/psb_c_isort_mod.o \ auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o \ auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o \ auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o \ +auxil/psb_i2_hsort_x_mod.o \ auxil/psb_i_hsort_x_mod.o \ auxil/psb_l_hsort_x_mod.o \ auxil/psb_s_hsort_x_mod.o \ auxil/psb_d_hsort_x_mod.o \ auxil/psb_c_hsort_x_mod.o \ auxil/psb_z_hsort_x_mod.o \ -auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o \ +auxil/psb_i2_ip_reord_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o \ auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o \ auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o : psb_realloc_mod.o psb_const_mod.o +auxil/psb_i_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_i2_hsort_mod.o auxil/psb_i_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_l_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_s_hsort_x_mod.o: auxil/psb_s_hsort_mod.o @@ -239,14 +255,14 @@ auxil/psb_d_hsort_x_mod.o: auxil/psb_d_hsort_mod.o auxil/psb_c_hsort_x_mod.o: auxil/psb_c_hsort_mod.o auxil/psb_z_hsort_x_mod.o: auxil/psb_z_hsort_mod.o -auxil/psi_serial_mod.o: auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o \ +auxil/psi_serial_mod.o: auxil/psi_i2_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o \ auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o\ auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o \ auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o -auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o: psb_const_mod.o +auxil/psi_i2_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o: psb_const_mod.o -auxil/psb_ip_reord_mod.o: auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o \ +auxil/psb_ip_reord_mod.o: auxil/psb_i2_ip_reord_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o \ auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o \ auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o @@ -261,7 +277,8 @@ serial/psb_d_base_mat_mod.o: serial/psb_d_base_vect_mod.o #serial/psb_ld_base_mat_mod.o: serial/psb_d_base_vect_mod.o serial/psb_c_base_mat_mod.o: serial/psb_c_base_vect_mod.o serial/psb_z_base_mat_mod.o: serial/psb_z_base_vect_mod.o -serial/psb_l_base_vect_mod.o: serial/psb_i_base_vect_mod.o +serial/psb_l_base_vect_mod.o: serial/psb_i_base_vect_mod.o +serial/psb_i2_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: auxil/psi_serial_mod.o psb_realloc_mod.o serial/psb_s_mat_mod.o: serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_vect_mod.o \ @@ -279,6 +296,7 @@ serial/psb_z_csc_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_lz_csr_mat_mod. serial/psb_mat_mod.o: serial/psb_vect_mod.o serial/psb_s_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_mat_mod.o serial/psb_serial_mod.o: serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o auxil/psi_serial_mod.o +serial/psb_i2_vect_mod.o: serial/psb_i2_base_vect_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_vect_mod.o: serial/psb_l_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_s_vect_mod.o: serial/psb_s_base_vect_mod.o serial/psb_i_vect_mod.o @@ -305,10 +323,12 @@ desc/psb_desc_mod.o: psb_penv_mod.o psb_realloc_mod.o\ desc/psb_repl_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_desc_const_mod.o\ desc/psb_indx_map_mod.o serial/psb_i_vect_mod.o +psi_i2_mod.o: desc/psb_desc_mod.o serial/psb_i2_vect_mod.o comm/psi_e_comm_a_mod.o \ + comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_i2_comm_a_mod.o comm/psi_i2_comm_v_mod.o psi_i_mod.o: desc/psb_desc_mod.o serial/psb_i_vect_mod.o comm/psi_e_comm_a_mod.o \ - comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_i2_comm_a_mod.o + comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_i2_comm_a_mod.o comm/psi_i2_comm_v_mod.o psi_l_mod.o: desc/psb_desc_mod.o serial/psb_l_vect_mod.o comm/psi_e_comm_a_mod.o \ - comm/psi_m_comm_a_mod.o comm/psi_l_comm_v_mod.o comm/psi_i2_comm_a_mod.o + comm/psi_m_comm_a_mod.o comm/psi_l_comm_v_mod.o comm/psi_i2_comm_a_mod.o comm/psi_i2_comm_v_mod.o psi_s_mod.o: desc/psb_desc_mod.o serial/psb_s_vect_mod.o comm/psi_s_comm_a_mod.o \ comm/psi_s_comm_v_mod.o psi_d_mod.o: desc/psb_desc_mod.o serial/psb_d_vect_mod.o comm/psi_d_comm_a_mod.o \ @@ -318,7 +338,7 @@ psi_c_mod.o: desc/psb_desc_mod.o serial/psb_c_vect_mod.o comm/psi_c_comm_a_mod.o psi_z_mod.o: desc/psb_desc_mod.o serial/psb_z_vect_mod.o comm/psi_z_comm_a_mod.o \ comm/psi_z_comm_v_mod.o psi_mod.o: psb_penv_mod.o desc/psb_desc_mod.o auxil/psi_serial_mod.o serial/psb_serial_mod.o\ - psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o + psi_i2_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o desc/psb_indx_map_mod.o: desc/psb_desc_const_mod.o psb_error_mod.o psb_penv_mod.o psb_realloc_mod.o auxil/psb_sort_mod.o desc/psb_hash_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_gen_block_map_mod.o:\ @@ -338,24 +358,28 @@ comm/psb_c_linmap_mod.o: comm/psb_base_linmap_mod.o serial/psb_c_mat_mod.o seria comm/psb_z_linmap_mod.o: comm/psb_base_linmap_mod.o serial/psb_z_mat_mod.o serial/psb_z_vect_mod.o comm/psb_base_linmap_mod.o: desc/psb_desc_mod.o serial/psb_serial_mod.o comm/psb_comm_mod.o comm/psb_comm_mod.o: desc/psb_desc_mod.o serial/psb_mat_mod.o -comm/psb_comm_mod.o: comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o \ +comm/psb_comm_mod.o: comm/psb_i2_comm_mod.o comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o \ comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o \ comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o \ + comm/psb_i2_comm_a_mod.o \ comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o \ comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\ comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o -comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o \ +comm/psb_i2_comm_a_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o \ comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\ comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o: desc/psb_desc_mod.o -comm/psb_i_comm_mod.o: serial/psb_i_vect_mod.o desc/psb_desc_mod.o +comm/psb_i2_comm_mod.o: serial/psb_i2_vect_mod.o desc/psb_desc_mod.o +comm/psb_i_comm_mod.o: serial/psb_i_vect_mod.o desc/psb_desc_mod.o comm/psb_l_comm_mod.o: serial/psb_l_vect_mod.o desc/psb_desc_mod.o comm/psb_s_comm_mod.o: serial/psb_s_vect_mod.o desc/psb_desc_mod.o serial/psb_mat_mod.o comm/psb_d_comm_mod.o: serial/psb_d_vect_mod.o desc/psb_desc_mod.o serial/psb_mat_mod.o comm/psb_c_comm_mod.o: serial/psb_c_vect_mod.o desc/psb_desc_mod.o serial/psb_mat_mod.o comm/psb_z_comm_mod.o: serial/psb_z_vect_mod.o desc/psb_desc_mod.o serial/psb_mat_mod.o +comm/psi_i2_comm_v_mod.o: serial/psb_i2_vect_mod.o comm/psi_i2_comm_a_mod.o \ + comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o: serial/psb_i_vect_mod.o comm/psi_e_comm_a_mod.o \ comm/psi_m_comm_a_mod.o comm/psi_l_comm_v_mod.o: serial/psb_l_vect_mod.o comm/psi_e_comm_a_mod.o \ @@ -374,14 +398,15 @@ comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o: desc/psb_desc_mod.o tools/psb_tools_mod.o: tools/psb_cd_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o\ tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o \ tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o \ - tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o \ + tools/psb_i2_tools_a_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o \ tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o\ tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o \ tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o \ -tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o \ +tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o \ +tools/psb_i2_tools_a_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o \ tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o\ tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o: desc/psb_desc_mod.o psi_mod.o serial/psb_mat_mod.o diff --git a/base/modules/auxil/psb_i2_hsort_x_mod.f90 b/base/modules/auxil/psb_i2_hsort_x_mod.f90 new file mode 100644 index 000000000..1c4d0ea8e --- /dev/null +++ b/base/modules/auxil/psb_i2_hsort_x_mod.f90 @@ -0,0 +1,312 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! Sorting routines +! References: +! D. Knuth +! The Art of Computer Programming, vol. 3 +! Addison-Wesley +! +! Aho, Hopcroft, Ullman +! Data Structures and Algorithms +! Addison-Wesley +! +module psb_i2_hsort_x_mod + use psb_const_mod + use psb_e_hsort_mod + use psb_m_hsort_mod + use psb_i2_hsort_mod + + type psb_i2_heap + integer(psb_ipk_) :: dir + integer(psb_ipk_) :: last + integer(psb_i2pk_), allocatable :: keys(:) + contains + procedure, pass(heap) :: init => psb_i2_init_heap + procedure, pass(heap) :: howmany => psb_i2_howmany + procedure, pass(heap) :: insert => psb_i2_insert_heap + procedure, pass(heap) :: get_first => psb_i2_heap_get_first + procedure, pass(heap) :: dump => psb_i2_dump_heap + procedure, pass(heap) :: free => psb_i2_free_heap + end type psb_i2_heap + + type psb_i2_idx_heap + integer(psb_ipk_) :: dir + integer(psb_ipk_) :: last + integer(psb_i2pk_), allocatable :: keys(:) + integer(psb_ipk_), allocatable :: idxs(:) + contains + procedure, pass(heap) :: init => psb_i2_idx_init_heap + procedure, pass(heap) :: howmany => psb_i2_idx_howmany + procedure, pass(heap) :: insert => psb_i2_idx_insert_heap + procedure, pass(heap) :: get_first => psb_i2_idx_heap_get_first + procedure, pass(heap) :: dump => psb_i2_idx_dump_heap + procedure, pass(heap) :: free => psb_i2_idx_free_heap + end type psb_i2_idx_heap + + +contains + + subroutine psb_i2_init_heap(heap,info,dir) + use psb_realloc_mod, only : psb_ensure_size + implicit none + class(psb_i2_heap), intent(inout) :: heap + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: dir + + info = psb_success_ + heap%last=0 + if (present(dir)) then + heap%dir = dir + else + heap%dir = psb_sort_up_ + endif + select case(heap%dir) + case (psb_sort_up_,psb_sort_down_,psb_asort_up_,psb_asort_down_) + ! ok, do nothing + case default + write(psb_err_unit,*) 'Invalid direction, defaulting to psb_sort_up_' + heap%dir = psb_sort_up_ + end select + call psb_ensure_size(psb_heap_resize,heap%keys,info) + + return + end subroutine psb_i2_init_heap + + + function psb_i2_howmany(heap) result(res) + implicit none + class(psb_i2_heap), intent(in) :: heap + integer(psb_ipk_) :: res + res = heap%last + end function psb_i2_howmany + + subroutine psb_i2_insert_heap(key,heap,info) + use psb_realloc_mod, only : psb_ensure_size + implicit none + + integer(psb_i2pk_), intent(in) :: key + class(psb_i2_heap), intent(inout) :: heap + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + if (heap%last < 0) then + write(psb_err_unit,*) 'Invalid last in heap ',heap%last + info = heap%last + return + endif + + call psb_ensure_size(heap%last+1,heap%keys,info) + if (info /= psb_success_) then + write(psb_err_unit,*) 'Memory allocation failure in heap_insert' + info = -5 + return + end if + call psi_insert_heap(key,& + & heap%last,heap%keys,heap%dir,info) + + return + end subroutine psb_i2_insert_heap + + subroutine psb_i2_heap_get_first(key,heap,info) + implicit none + + class(psb_i2_heap), intent(inout) :: heap + integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_), intent(out) :: key + + + info = psb_success_ + + call psi_heap_get_first(key,& + & heap%last,heap%keys,heap%dir,info) + + return + end subroutine psb_i2_heap_get_first + + subroutine psb_i2_dump_heap(iout,heap,info) + + implicit none + class(psb_i2_heap), intent(in) :: heap + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: iout + + info = psb_success_ + if (iout < 0) then + write(psb_err_unit,*) 'Invalid file ' + info =-1 + return + end if + + write(iout,*) 'Heap direction ',heap%dir + write(iout,*) 'Heap size ',heap%last + if ((heap%last > 0).and.((.not.allocated(heap%keys)).or.& + & (size(heap%keys) 0).and.((.not.allocated(heap%keys)).or.& + & (size(heap%keys) 0).and.((.not.allocated(heap%idxs)).or.& + & (size(heap%idxs) \namespace psb_base_mod \class psb_i2_base_vect_type + !! The psb_i2_base_vect_type + !! defines a middle level integer(psb_i2pk_) encapsulated dense vector. + !! The encapsulation is needed, in place of a simple array, to allow + !! for complicated situations, such as GPU programming, where the memory + !! area we are interested in is not easily accessible from the host/Fortran + !! side. It is also meant to be encapsulated in an outer type, to allow + !! runtime switching as per the STATE design pattern, similar to the + !! sparse matrix types. + !! + type psb_i2_base_vect_type + !> Values. + integer(psb_i2pk_), allocatable :: v(:) + integer(psb_i2pk_), allocatable :: combuf(:) + integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) + contains + ! + ! Constructors/allocators + ! + procedure, pass(x) :: bld_x => i2_base_bld_x + procedure, pass(x) :: bld_mn => i2_base_bld_mn + procedure, pass(x) :: bld_en => i2_base_bld_en + generic, public :: bld => bld_x, bld_mn, bld_en + procedure, pass(x) :: all => i2_base_all + procedure, pass(x) :: mold => i2_base_mold + ! + ! Insert/set. Assembly and free. + ! Assembly does almost nothing here, but is important + ! in derived classes. + ! + procedure, pass(x) :: ins_a => i2_base_ins_a + procedure, pass(x) :: ins_v => i2_base_ins_v + generic, public :: ins => ins_a, ins_v + procedure, pass(x) :: zero => i2_base_zero + procedure, pass(x) :: asb_m => i2_base_asb_m + procedure, pass(x) :: asb_e => i2_base_asb_e + generic, public :: asb => asb_m, asb_e + procedure, pass(x) :: free => i2_base_free + procedure, pass(x) :: reinit => i2_base_reinit + procedure, pass(x) :: set_ncfs => i2_base_set_ncfs + procedure, pass(x) :: get_ncfs => i2_base_get_ncfs + procedure, pass(x) :: set_dupl => i2_base_set_dupl + procedure, pass(x) :: get_dupl => i2_base_get_dupl + procedure, pass(x) :: set_state => i2_base_set_state + procedure, pass(x) :: set_null => i2_base_set_null + procedure, pass(x) :: set_bld => i2_base_set_bld + procedure, pass(x) :: set_upd => i2_base_set_upd + procedure, pass(x) :: set_asb => i2_base_set_asb + procedure, pass(x) :: get_state => i2_base_get_state + procedure, pass(x) :: is_null => i2_base_is_null + procedure, pass(x) :: is_bld => i2_base_is_bld + procedure, pass(x) :: is_upd => i2_base_is_upd + procedure, pass(x) :: is_asb => i2_base_is_asb + procedure, pass(x) :: base_cpy => i2_base_cpy + ! + ! Sync: centerpiece of handling of external storage. + ! Any derived class having extra storage upon sync + ! will guarantee that both fortran/host side and + ! external side contain the same data. The base + ! version is only a placeholder. + ! + procedure, pass(x) :: sync => i2_base_sync + procedure, pass(x) :: is_host => i2_base_is_host + procedure, pass(x) :: is_dev => i2_base_is_dev + procedure, pass(x) :: is_sync => i2_base_is_sync + procedure, pass(x) :: set_host => i2_base_set_host + procedure, pass(x) :: set_dev => i2_base_set_dev + procedure, pass(x) :: set_sync => i2_base_set_sync + + ! + ! These are for handling gather/scatter in new + ! comm internals implementation. + ! + procedure, nopass :: use_buffer => i2_base_use_buffer + procedure, pass(x) :: new_buffer => i2_base_new_buffer + procedure, nopass :: device_wait => i2_base_device_wait + procedure, pass(x) :: maybe_free_buffer => i2_base_maybe_free_buffer + procedure, pass(x) :: free_buffer => i2_base_free_buffer + procedure, pass(x) :: new_comid => i2_base_new_comid + procedure, pass(x) :: free_comid => i2_base_free_comid + + ! + ! Basic info + procedure, pass(x) :: get_nrows => i2_base_get_nrows + procedure, pass(x) :: sizeof => i2_base_sizeof + procedure, nopass :: get_fmt => i2_base_get_fmt + ! + ! Set/get data from/to an external array; also + ! overload assignment. + ! + procedure, pass(x) :: get_vect => i2_base_get_vect + procedure, pass(x) :: set_scal => i2_base_set_scal + procedure, pass(x) :: set_vect => i2_base_set_vect + generic, public :: set => set_vect, set_scal + ! + ! Gather/scatter. These are needed for MPI interfacing. + ! May have to be reworked. + ! + procedure, pass(x) :: gthab => i2_base_gthab + procedure, pass(x) :: gthzv => i2_base_gthzv + procedure, pass(x) :: gthzv_x => i2_base_gthzv_x + procedure, pass(x) :: gthzbuf => i2_base_gthzbuf + generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf + procedure, pass(y) :: sctb => i2_base_sctb + procedure, pass(y) :: sctb_x => i2_base_sctb_x + procedure, pass(y) :: sctb_buf => i2_base_sctb_buf + generic, public :: sct => sctb, sctb_x, sctb_buf + + procedure, pass(x) :: check_addr => i2_base_check_addr + + + + + + + end type psb_i2_base_vect_type + + public :: psb_i2_base_vect + private :: constructor, size_const + interface psb_i2_base_vect + module procedure constructor, size_const + end interface psb_i2_base_vect + +contains + + ! + ! Constructors. + ! + + !> Function constructor: + !! \brief Constructor from an array + !! \param x(:) input array to be copied + !! + function constructor(x) result(this) + integer(psb_i2pk_) :: x(:) + type(psb_i2_base_vect_type) :: this + integer(psb_ipk_) :: info + + this%v = x + call this%asb(size(x,kind=psb_ipk_),info) + end function constructor + + + !> Function constructor: + !! \brief Constructor from size + !! \param n Size of vector to be built. + !! + function size_const(n) result(this) + integer(psb_ipk_), intent(in) :: n + type(psb_i2_base_vect_type) :: this + integer(psb_ipk_) :: info + + call this%asb(n,info) + + end function size_const + + ! + ! Build from a sample + ! + + !> Function bld_x: + !! \memberof psb_i2_base_vect_type + !! \brief Build method from an array + !! \param x(:) input array to be copied + !! + subroutine i2_base_bld_x(x,this,scratch) + use psb_realloc_mod + implicit none + integer(psb_i2pk_), intent(in) :: this(:) + class(psb_i2_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + integer(psb_ipk_) :: i + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + call psb_realloc(size(this),x%v,info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,'base_vect_bld') + return + end if +#if defined (PSB_OPENMP) + !$omp parallel do private(i) + do i = 1, size(this) + x%v(i) = this(i) + end do +#else + x%v(:) = this(:) +#endif + end subroutine i2_base_bld_x + + ! + ! Create with size, but no initialization + ! + + !> Function bld_mn: + !! \memberof psb_i2_base_vect_type + !! \brief Build method with size (uninitialized data) + !! \param n size to be allocated. + !! + subroutine i2_base_bld_mn(x,n,scratch) + use psb_realloc_mod + implicit none + integer(psb_mpk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + call psb_realloc(n,x%v,info) + call x%asb(n,info,scratch=scratch_) + + end subroutine i2_base_bld_mn + + !> Function bld_en: + !! \memberof psb_i2_base_vect_type + !! \brief Build method with size (uninitialized data) + !! \param n size to be allocated. + !! + subroutine i2_base_bld_en(x,n,scratch) + use psb_realloc_mod + implicit none + integer(psb_epk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + call psb_realloc(n,x%v,info) + call x%asb(n,info,scratch=scratch_) + + end subroutine i2_base_bld_en + + !> Function base_all: + !! \memberof psb_i2_base_vect_type + !! \brief Build method with size (uninitialized data) and + !! allocation return code. + !! \param n size to be allocated. + !! \param info return code + !! + subroutine i2_base_all(n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + call psb_realloc(n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if + + end subroutine i2_base_all + + !> Function base_mold: + !! \memberof psb_i2_base_vect_type + !! \brief Mold method: return a variable with the same dynamic type + !! \param y returned variable + !! \param info return code + !! + subroutine i2_base_mold(x, y, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + class(psb_i2_base_vect_type), intent(out), allocatable :: y + integer(psb_ipk_), intent(out) :: info + + allocate(psb_i2_base_vect_type :: y, stat=info) + + end subroutine i2_base_mold + + subroutine i2_base_reinit(x, info,clear) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + logical :: clear_ + + info = 0 + if (present(clear)) then + clear_ = clear + else + clear_ = .true. + end if + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + if (clear_) x%v(:) = i2zero + call x%set_host() + call x%set_upd() + end if + + end subroutine i2_base_reinit + + ! + ! Insert a bunch of values at specified positions. + ! + !> Function base_ins: + !! \memberof psb_i2_base_vect_type + !! \brief Insert coefficients. + !! + !! + !! Given a list of N pairs + !! (IRL(i),VAL(i)) + !! record a new coefficient in X such that + !! X(IRL(1:N)) = VAL(1:N). + !! + !! - the update operation will perform either + !! X(IRL(1:n)) = VAL(1:N) + !! or + !! X(IRL(1:n)) = X(IRL(1:n))+VAL(1:N) + !! according to the value of DUPLICATE. + !! + !! + !! \param n number of pairs in input + !! \param irl(:) the input row indices + !! \param val(:) the input coefficients + !! \param dupl how to treat duplicate entries + !! \param info return code + !! + ! + subroutine i2_base_ins_a(n,irl,val,dupl,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl, maxr + integer(psb_ipk_), intent(in) :: irl(:) + integer(psb_i2pk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, isz, dupl_, ncfs_, k + + info = 0 + if (psb_errstatus_fatal()) return + + if (try_newins) then + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 + ! this row belongs to me + ! copy i-th row of block val in x + x%v(k) = val(i) + x%iv(k) = irl(i) + end if + enddo + call x%set_ncfs(k) + + else if (x%is_upd()) then + + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + end if + call x%set_host() + if (info /= 0) then + call psb_errpush(info,'base_vect_ins') + return + end if + + end subroutine i2_base_ins_a + + subroutine i2_base_ins_v(n,irl,val,dupl,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl, maxr + class(psb_i_base_vect_type), intent(inout) :: irl + class(psb_i2_base_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: isz + + info = 0 + if (psb_errstatus_fatal()) return + + if (irl%is_dev()) call irl%sync() + if (val%is_dev()) call val%sync() + if (x%is_dev()) call x%sync() + call x%ins(n,irl%v,val%v,dupl,maxr,info) + + if (info /= 0) then + call psb_errpush(info,'base_vect_ins') + return + end if + + end subroutine i2_base_ins_v + + + ! + !> Function base_zero + !! \memberof psb_i2_base_vect_type + !! \brief Zero out contents + !! + ! + subroutine i2_base_zero(x) + use psi_serial_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + if (allocated(x%v)) then + !$omp workshare + x%v(:)=i2zero + !$omp end workshare + end if + call x%set_host() + end subroutine i2_base_zero + + + ! + ! Assembly. + ! For derived classes: after this the vector + ! storage is supposed to be in sync. + ! + !> Function base_asb: + !! \memberof psb_i2_base_vect_type + !! \brief Assemble vector: reallocate as necessary. + !! + !! \param n final size + !! \param info return code + !! + ! + + subroutine i2_base_asb_m(n, x, info, scratch) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_mpk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_i2pk_), allocatable :: vv(:) + + info = 0 + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(n,vv,info) + vv(:) = i2zero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (vv(x%iv(i)).ne. i2zero) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.x%is_asb().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if + call x%set_host() + call x%set_asb() + call x%sync() + end subroutine i2_base_asb_m + + ! + ! Assembly. + ! For derived classes: after this the vector + ! storage is supposed to be in sync. + ! + !> Function base_asb: + !! \memberof psb_i2_base_vect_type + !! \brief Assemble vector: reallocate as necessary. + !! + !! \param n final size + !! \param info return code + !! + ! + + subroutine i2_base_asb_e(n, x, info, scratch) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_epk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_i2pk_), allocatable :: vv(:) + + info = 0 + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') + if (x%is_bld()) then + call psb_realloc(n,vv,info) + vv(:) = i2zero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,x%get_ncfs() + if (vv(x%iv(i)).ne. i2zero) then + call psb_errpush(psb_err_duplicate_coo,'vect_asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.x%is_asb().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if + call x%set_host() + call x%set_asb() + call x%sync() + end subroutine i2_base_asb_e + + ! + !> Function base_free: + !! \memberof psb_i2_base_vect_type + !! \brief Free vector + !! + !! \param info return code + !! + ! + subroutine i2_base_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) deallocate(x%v, stat=info) + if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) + if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if (info /= 0) call & + & psb_errpush(psb_err_alloc_dealloc_,'vect_free') + call x%set_null() + end subroutine i2_base_free + + ! + !> Function base_free_buffer: + !! \memberof psb_i2_base_vect_type + !! \brief Free aux buffer + !! + !! \param info return code + !! + ! + subroutine i2_base_free_buffer(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%combuf)) & + & deallocate(x%combuf,stat=info) + end subroutine i2_base_free_buffer + + ! + !> Function base_maybe_free_buffer: + !! \memberof psb_i2_base_vect_type + !! \brief Conditionally Free aux buffer. + !! In some derived classes, e.g. GPU, + !! does not really frees to avoid runtime + !! costs + !! + !! \param info return code + !! + ! + subroutine i2_base_maybe_free_buffer(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (psb_get_maybe_free_buffer())& + & call x%free_buffer(info) + + end subroutine i2_base_maybe_free_buffer + + ! + !> Function base_free_comid: + !! \memberof psb_i2_base_vect_type + !! \brief Free aux MPI communication id buffer + !! + !! \param info return code + !! + ! + subroutine i2_base_free_comid(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%comid)) & + & deallocate(x%comid,stat=info) + end subroutine i2_base_free_comid + + function i2_base_get_ncfs(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function i2_base_get_ncfs + + function i2_base_get_dupl(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function i2_base_get_dupl + + function i2_base_get_state(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function i2_base_get_state + + function i2_base_is_null(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function i2_base_is_null + + function i2_base_is_bld(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function i2_base_is_bld + + function i2_base_is_upd(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function i2_base_is_upd + + function i2_base_is_asb(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function i2_base_is_asb + + subroutine i2_base_set_ncfs(n,x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine i2_base_set_ncfs + + subroutine i2_base_set_dupl(n,x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine i2_base_set_dupl + + subroutine i2_base_set_state(n,x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine i2_base_set_state + + subroutine i2_base_set_null(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine i2_base_set_null + + subroutine i2_base_set_bld(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine i2_base_set_bld + + subroutine i2_base_set_upd(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine i2_base_set_upd + + subroutine i2_base_set_asb(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_asb_ + end subroutine i2_base_set_asb + + ! + ! The base version of SYNC & friends does nothing, it's just + ! a placeholder. + ! + ! + !> Function base_sync: + !! \memberof psb_i2_base_vect_type + !! \brief Sync: base version is a no-op. + !! + ! + subroutine i2_base_sync(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + end subroutine i2_base_sync + + ! + !> Function base_set_host: + !! \memberof psb_i2_base_vect_type + !! \brief Set_host: base version is a no-op. + !! + ! + subroutine i2_base_set_host(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + end subroutine i2_base_set_host + + ! + !> Function base_set_dev: + !! \memberof psb_i2_base_vect_type + !! \brief Set_dev: base version is a no-op. + !! + ! + subroutine i2_base_set_dev(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + end subroutine i2_base_set_dev + + ! + !> Function base_set_sync: + !! \memberof psb_i2_base_vect_type + !! \brief Set_sync: base version is a no-op. + !! + ! + subroutine i2_base_set_sync(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + end subroutine i2_base_set_sync + + ! + !> Function base_is_dev: + !! \memberof psb_i2_base_vect_type + !! \brief Is vector on external device . + !! + ! + function i2_base_is_dev(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + + res = .false. + end function i2_base_is_dev + + ! + !> Function base_is_host + !! \memberof psb_i2_base_vect_type + !! \brief Is vector on standard memory . + !! + ! + function i2_base_is_host(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + + res = .true. + end function i2_base_is_host + + ! + !> Function base_is_sync + !! \memberof psb_i2_base_vect_type + !! \brief Is vector on sync . + !! + ! + function i2_base_is_sync(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + + res = .true. + end function i2_base_is_sync + + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine i2_base_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + class(psb_i2_base_vect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine i2_base_cpy + + ! + ! Size info. + ! + ! + !> Function base_get_nrows + !! \memberof psb_i2_base_vect_type + !! \brief Number of entries + !! + ! + function i2_base_get_nrows(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + + res = 0 + if (allocated(x%v)) res = size(x%v) + + end function i2_base_get_nrows + + ! + !> Function base_get_sizeof + !! \memberof psb_i2_base_vect_type + !! \brief Size in bytes + !! + ! + function i2_base_sizeof(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_epk_) :: res + + ! Force 8-byte integers. + res = (1_psb_epk_ * psb_sizeof_i2p) * x%get_nrows() + + end function i2_base_sizeof + + ! + !> Function base_get_fmt + !! \memberof psb_i2_base_vect_type + !! \brief Format + !! + ! + function i2_base_get_fmt() result(res) + implicit none + character(len=5) :: res + res = 'BASE' + end function i2_base_get_fmt + + + ! + ! + ! + !> Function base_get_vect + !! \memberof psb_i2_base_vect_type + !! \brief Extract a copy of the contents + !! + ! + function i2_base_get_vect(x,n) result(res) + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_i2pk_), allocatable :: res(:) + integer(psb_ipk_) :: info + integer(psb_ipk_), optional :: n + ! Local variables + integer(psb_ipk_) :: isz, i + + if (.not.allocated(x%v)) return + if (.not.x%is_host()) call x%sync() + isz = x%get_nrows() + if (present(n)) isz = max(0,min(isz,n)) + allocate(res(isz),stat=info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,'base_get_vect') + return + end if + if (.false.) then + res(1:isz) = x%v(1:isz) + else + !$omp parallel do private(i) + do i=1, isz + res(i) = x%v(i) + end do + end if + + end function i2_base_get_vect + + ! + ! Reset all values + ! + ! + !> Function base_set_scal + !! \memberof psb_i2_base_vect_type + !! \brief Set all entries + !! \param val The value to set + !! + subroutine i2_base_set_scal(x,val,first,last) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: first_, last_, i + + first_=1 + last_=size(x%v) + if (present(first)) first_ = max(1,first) + if (present(last)) last_ = min(last,last_) + + if (x%is_dev()) call x%sync() +#if defined(PSB_OPENMP) + !$omp parallel do private(i) + do i = first_, last_ + x%v(i) = val + end do +#else + x%v(first_:last_) = val +#endif + call x%set_host() + + end subroutine i2_base_set_scal + + + ! + !> Function base_set_vect + !! \memberof psb_i2_base_vect_type + !! \brief Set all entries + !! \param val(:) The vector to be copied in + !! + subroutine i2_base_set_vect(x,val,first,last) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: first_, last_, i, info + + if (.not.allocated(x%v)) then + call psb_realloc(size(val),x%v,info) + end if + + first_ = 1 + if (present(first)) first_ = max(1,first) + last_ = min(psb_size(x%v),first_+size(val)-1) + if (present(last)) last_ = min(last,last_) + + if (x%is_dev()) call x%sync() + +#if defined(PSB_OPENMP) + !$omp parallel do private(i) + do i = first_, last_ + x%v(i) = val(i-first_+1) + end do +#else + x%v(first_:last_) = val(1:last_-first_+1) +#endif + call x%set_host() + + end subroutine i2_base_set_vect + + subroutine i2_base_check_addr(x) + class(psb_i2_base_vect_type), intent(inout) :: x + + write(0,*) 'Check addr: base version, do nothing' + + end subroutine i2_base_check_addr + + + + ! + ! Gather: Y = beta * Y + alpha * X(IDX(:)) + ! + ! + !> Function base_gthab + !! \memberof psb_i2_base_vect_type + !! \brief gather into an array + !! Y = beta * Y + alpha * X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + !! \param alpha + !! \param beta + subroutine i2_base_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: alpha, beta, y(:) + class(psb_i2_base_vect_type) :: x + + if (x%is_dev()) call x%sync() + call psi_gth(n,idx,alpha,x%v,beta,y) + + end subroutine i2_base_gthab + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_gthzv + !! \memberof psb_i2_base_vect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_gthzv_x(i,n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_ipk_) :: i + integer(psb_mpk_) :: n + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: y(:) + class(psb_i2_base_vect_type) :: x + + if (idx%is_dev()) call idx%sync() + call x%gth(n,idx%v(i:),y) + + end subroutine i2_base_gthzv_x + + ! + ! New comm internals impl. + ! + subroutine i2_base_gthzbuf(i,n,idx,x) + use psi_serial_mod + implicit none + integer(psb_ipk_) :: i + integer(psb_mpk_) :: n + class(psb_i_base_vect_type) :: idx + class(psb_i2_base_vect_type) :: x + + if (.not.allocated(x%combuf)) then + call psb_errpush(psb_err_alloc_dealloc_,'gthzbuf') + return + end if + if (idx%is_dev()) call idx%sync() + if (x%is_dev()) call x%sync() + call x%gth(n,idx%v(i:),x%combuf(i:)) + + end subroutine i2_base_gthzbuf + ! + !> Function base_device_wait: + !! \memberof psb_i2_base_vect_type + !! \brief device_wait: base version is a no-op. + !! + ! + subroutine i2_base_device_wait() + implicit none + + end subroutine i2_base_device_wait + + function i2_base_use_buffer() result(res) + logical :: res + + res = .true. + end function i2_base_use_buffer + + subroutine i2_base_new_buffer(n,x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + + call psb_realloc(n,x%combuf,info) + end subroutine i2_base_new_buffer + + subroutine i2_base_new_comid(n,x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + + call psb_realloc(n,2_psb_ipk_,x%comid,info) + end subroutine i2_base_new_comid + + + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_gthzv + !! \memberof psb_i2_base_vect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_gthzv(n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:) + class(psb_i2_base_vect_type) :: x + + if (x%is_dev()) call x%sync() + call psi_gth(n,idx,x%v,y) + + end subroutine i2_base_gthzv + + ! + ! Scatter: + ! Y(IDX(:)) = beta*Y(IDX(:)) + X(:) + ! + ! + !> Function base_sctb + !! \memberof psb_i2_base_vect_type + !! \brief scatter into a class(base_vect) + !! Y(IDX(:)) = beta * Y(IDX(:)) + X(:) + !! \param n how many entries to consider + !! \param idx(:) indices + !! \param beta + !! \param x(:) + subroutine i2_base_sctb(n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_base_vect_type) :: y + + if (y%is_dev()) call y%sync() + call psi_sct(n,idx,x,beta,y%v) + call y%set_host() + + end subroutine i2_base_sctb + + subroutine i2_base_sctb_x(i,n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_base_vect_type) :: y + + if (idx%is_dev()) call idx%sync() + call y%sct(n,idx%v(i:),x,beta) + call y%set_host() + + end subroutine i2_base_sctb_x + + subroutine i2_base_sctb_buf(i,n,idx,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: beta + class(psb_i2_base_vect_type) :: y + + + if (.not.allocated(y%combuf)) then + call psb_errpush(psb_err_alloc_dealloc_,'sctb_buf') + return + end if + if (y%is_dev()) call y%sync() + if (idx%is_dev()) call idx%sync() + call y%sct(n,idx%v(i:),y%combuf(i:),beta) + call y%set_host() + + end subroutine i2_base_sctb_buf + + +end module psb_i2_base_vect_mod + + +module psb_i2_base_multivect_mod + + use psb_const_mod + use psb_error_mod + use psb_realloc_mod + use psb_i2_base_vect_mod + + !> \namespace psb_base_mod \class psb_i2_base_vect_type + !! The psb_i2_base_vect_type + !! defines a middle level integer(psb_ipk_) encapsulated dense vector. + !! The encapsulation is needed, in place of a simple array, to allow + !! for complicated situations, such as GPU programming, where the memory + !! area we are interested in is not easily accessible from the host/Fortran + !! side. It is also meant to be encapsulated in an outer type, to allow + !! runtime switching as per the STATE design pattern, similar to the + !! sparse matrix types. + !! + private + public :: psb_i2_base_multivect, psb_i2_base_multivect_type + + type psb_i2_base_multivect_type + !> Values. + integer(psb_i2pk_), allocatable :: v(:,:) + integer(psb_i2pk_), allocatable :: combuf(:) + integer(psb_mpk_), allocatable :: comid(:,:) + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) + contains + ! + ! Constructors/allocators + ! + procedure, pass(x) :: bld_x => i2_base_mlv_bld_x + procedure, pass(x) :: bld_n => i2_base_mlv_bld_n + generic, public :: bld => bld_x, bld_n + procedure, pass(x) :: all => i2_base_mlv_all + procedure, pass(x) :: mold => i2_base_mlv_mold + ! + ! Insert/set. Assembly and free. + ! Assembly does almost nothing here, but is important + ! in derived classes. + ! + procedure, pass(x) :: ins => i2_base_mlv_ins + procedure, pass(x) :: zero => i2_base_mlv_zero + procedure, pass(x) :: asb => i2_base_mlv_asb + procedure, pass(x) :: free => i2_base_mlv_free + procedure, pass(x) :: reinit => i2_base_mlv_reinit + procedure, pass(x) :: set_ncfs => i2_base_mlv_set_ncfs + procedure, pass(x) :: get_ncfs => i2_base_mlv_get_ncfs + procedure, pass(x) :: set_dupl => i2_base_mlv_set_dupl + procedure, pass(x) :: get_dupl => i2_base_mlv_get_dupl + procedure, pass(x) :: set_state => i2_base_mlv_set_state + procedure, pass(x) :: set_null => i2_base_mlv_set_null + procedure, pass(x) :: set_bld => i2_base_mlv_set_bld + procedure, pass(x) :: set_upd => i2_base_mlv_set_upd + procedure, pass(x) :: set_asb => i2_base_mlv_set_asb + procedure, pass(x) :: get_state => i2_base_mlv_get_state + procedure, pass(x) :: is_null => i2_base_mlv_is_null + procedure, pass(x) :: is_bld => i2_base_mlv_is_bld + procedure, pass(x) :: is_upd => i2_base_mlv_is_upd + procedure, pass(x) :: is_asb => i2_base_mlv_is_asb + procedure, pass(x) :: base_cpy => i2_base_mlv_cpy + ! + ! Sync: centerpiece of handling of external storage. + ! Any derived class having extra storage upon sync + ! will guarantee that both fortran/host side and + ! external side contain the same data. The base + ! version is only a placeholder. + ! + procedure, pass(x) :: sync => i2_base_mlv_sync + procedure, pass(x) :: is_host => i2_base_mlv_is_host + procedure, pass(x) :: is_dev => i2_base_mlv_is_dev + procedure, pass(x) :: is_sync => i2_base_mlv_is_sync + procedure, pass(x) :: set_host => i2_base_mlv_set_host + procedure, pass(x) :: set_dev => i2_base_mlv_set_dev + procedure, pass(x) :: set_sync => i2_base_mlv_set_sync + + ! + ! Basic info + procedure, pass(x) :: get_nrows => i2_base_mlv_get_nrows + procedure, pass(x) :: get_ncols => i2_base_mlv_get_ncols + procedure, pass(x) :: sizeof => i2_base_mlv_sizeof + procedure, nopass :: get_fmt => i2_base_mlv_get_fmt + ! + ! Set/get data from/to an external array; also + ! overload assignment. + ! + procedure, pass(x) :: get_vect => i2_base_mlv_get_vect + procedure, pass(x) :: set_scal => i2_base_mlv_set_scal + procedure, pass(x) :: set_vect => i2_base_mlv_set_vect + generic, public :: set => set_vect, set_scal + + + ! + ! These are for handling gather/scatter in new + ! comm internals implementation. + ! + procedure, nopass :: use_buffer => i2_base_mlv_use_buffer + procedure, pass(x) :: new_buffer => i2_base_mlv_new_buffer + procedure, nopass :: device_wait => i2_base_mlv_device_wait + procedure, pass(x) :: maybe_free_buffer => i2_base_mlv_maybe_free_buffer + procedure, pass(x) :: free_buffer => i2_base_mlv_free_buffer + procedure, pass(x) :: new_comid => i2_base_mlv_new_comid + procedure, pass(x) :: free_comid => i2_base_mlv_free_comid + + ! + ! Gather/scatter. These are needed for MPI interfacing. + ! May have to be reworked. + ! + procedure, pass(x) :: gthab => i2_base_mlv_gthab + procedure, pass(x) :: gthzv => i2_base_mlv_gthzv + procedure, pass(x) :: gthzm => i2_base_mlv_gthzm + procedure, pass(x) :: gthzv_x => i2_base_mlv_gthzv_x + procedure, pass(x) :: gthzbuf => i2_base_mlv_gthzbuf + generic, public :: gth => gthab, gthzv, gthzm, gthzv_x, gthzbuf + procedure, pass(y) :: sctb => i2_base_mlv_sctb + procedure, pass(y) :: sctbr2 => i2_base_mlv_sctbr2 + procedure, pass(y) :: sctb_x => i2_base_mlv_sctb_x + procedure, pass(y) :: sctb_buf => i2_base_mlv_sctb_buf + generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + end type psb_i2_base_multivect_type + + interface psb_i2_base_multivect + module procedure constructor, size_const + end interface psb_i2_base_multivect + +contains + + ! + ! Constructors. + ! + + !> Function constructor: + !! \brief Constructor from an array + !! \param x(:) input array to be copied + !! + function constructor(x) result(this) + integer(psb_i2pk_) :: x(:,:) + type(psb_i2_base_multivect_type) :: this + integer(psb_ipk_) :: info + + this%v = x + call this%asb(size(x,dim=1,kind=psb_ipk_),& + & size(x,dim=2,kind=psb_ipk_),info) + end function constructor + + + !> Function constructor: + !! \brief Constructor from size + !! \param n Size of vector to be built. + !! + function size_const(m,n) result(this) + integer(psb_ipk_), intent(in) :: m,n + type(psb_i2_base_multivect_type) :: this + integer(psb_ipk_) :: info + + call this%asb(m,n,info) + + end function size_const + + ! + ! Build from a sample + ! + + !> Function bld_x: + !! \memberof psb_i2_base_multivect_type + !! \brief Build method from an array + !! \param x(:) input array to be copied + !! + subroutine i2_base_mlv_bld_x(x,this) + use psb_realloc_mod + integer(psb_i2pk_), intent(in) :: this(:,:) + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_) :: info + + call psb_realloc(size(this,1),size(this,2),x%v,info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,'base_mlv_vect_bld') + return + end if + x%v(:,:) = this(:,:) + + end subroutine i2_base_mlv_bld_x + + ! + ! Create with size, but no initialization + ! + + !> Function bld_n: + !! \memberof psb_i2_base_multivect_type + !! \brief Build method with size (uninitialized data) + !! \param n size to be allocated. + !! + subroutine i2_base_mlv_bld_n(x,m,n,scratch) + use psb_realloc_mod + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + call psb_realloc(m,n,x%v,info) + call x%asb(m,n,info,scratch) + + end subroutine i2_base_mlv_bld_n + + !> Function base_mlv_all: + !! \memberof psb_i2_base_multivect_type + !! \brief Build method with size (uninitialized data) and + !! allocation return code. + !! \param n size to be allocated. + !! \param info return code + !! + subroutine i2_base_mlv_all(m,n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + call psb_realloc(m,n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if + + end subroutine i2_base_mlv_all + + !> Function base_mlv_mold: + !! \memberof psb_i2_base_multivect_type + !! \brief Mold method: return a variable with the same dynamic type + !! \param y returned variable + !! \param info return code + !! + subroutine i2_base_mlv_mold(x, y, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + class(psb_i2_base_multivect_type), intent(out), allocatable :: y + integer(psb_ipk_), intent(out) :: info + + allocate(psb_i2_base_multivect_type :: y, stat=info) + + end subroutine i2_base_mlv_mold + + subroutine i2_base_mlv_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%sync() + x%v(:,:) = i2zero + call x%set_host() + call x%set_upd() + end if + + end subroutine i2_base_mlv_reinit + + ! + ! Insert a bunch of values at specified positions. + ! + !> Function base_mlv_ins: + !! \memberof psb_i2_base_multivect_type + !! \brief Insert coefficients. + !! + !! + !! Given a list of N pairs + !! (IRL(i),VAL(i)) + !! record a new coefficient in X such that + !! X(IRL(1:N)) = VAL(1:N). + !! + !! - the update operation will perform either + !! X(IRL(1:n)) = VAL(1:N) + !! or + !! X(IRL(1:n)) = X(IRL(1:n))+VAL(1:N) + !! according to the value of DUPLICATE. + !! + !! + !! \param n number of pairs in input + !! \param irl(:) the input row indices + !! \param val(:) the input coefficients + !! \param dupl how to treat duplicate entries + !! \param info return code + !! + ! + subroutine i2_base_mlv_ins(n,irl,val,dupl,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl,maxr + integer(psb_ipk_), intent(in) :: irl(:) + integer(psb_i2pk_), intent(in) :: val(:,:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, isz, nc, dupl_, ncfs_, k + + info = 0 + if (psb_errstatus_fatal()) return + + if (try_newins) then + if (x%is_bld()) then + nc = size(x%v,2) + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_realloc(isz,nc,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 + ! this row belongs to me + ! copy i-th row of block val in x + x%v(k,:) = val(i,:) + x%iv(k) = irl(i) + end if + enddo + call x%set_ncfs(k) + + else if (x%is_upd()) then + + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + end if + call x%set_host() + if (info /= 0) then + call psb_errpush(info,'base_mlv_vect_ins') + return + end if + + end subroutine i2_base_mlv_ins + + ! + !> Function base_mlv_zero + !! \memberof psb_i2_base_multivect_type + !! \brief Zero out contents + !! + ! + subroutine i2_base_mlv_zero(x) + use psi_serial_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + if (allocated(x%v)) x%v=i2zero + call x%set_host() + + end subroutine i2_base_mlv_zero + + + ! + ! Assembly. + ! For derived classes: after this the vector + ! storage is supposed to be in sync. + ! + !> Function base_mlv_asb: + !! \memberof psb_i2_base_multivect_type + !! \brief Assemble vector: reallocate as necessary. + !! + !! \param n final size + !! \param info return code + !! + ! + + subroutine i2_base_mlv_asb(m,n, x, info, scratch) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_i2pk_), allocatable :: vv(:,:) + + info = 0 + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(m,n,vv,info) + vv(:,:) = i2zero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i),:) = vv(x%iv(i),:) + x%v(i,:) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i),:) = x%v(i,:) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (any(vv(x%iv(i),:).ne.i2zero)) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i),:) = x%v(i,:) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.x%is_asb().or.scratch_) then + if (x%get_nrows() < m) & + & call psb_realloc(m,n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if ((x%get_nrows() < m).or.(x%get_ncols() Function base_mlv_free: + !! \memberof psb_i2_base_multivect_type + !! \brief Free vector + !! + !! \param info return code + !! + ! + subroutine i2_base_mlv_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) deallocate(x%v, stat=info) + if (info /= 0) call & + & psb_errpush(psb_err_alloc_dealloc_,'vect_free') + + end subroutine i2_base_mlv_free + + function i2_base_mlv_get_ncfs(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function i2_base_mlv_get_ncfs + + function i2_base_mlv_get_dupl(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function i2_base_mlv_get_dupl + + function i2_base_mlv_get_state(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function i2_base_mlv_get_state + + function i2_base_mlv_is_null(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function i2_base_mlv_is_null + + function i2_base_mlv_is_bld(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function i2_base_mlv_is_bld + + function i2_base_mlv_is_upd(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function i2_base_mlv_is_upd + + function i2_base_mlv_is_asb(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function i2_base_mlv_is_asb + + subroutine i2_base_mlv_set_ncfs(n,x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine i2_base_mlv_set_ncfs + + subroutine i2_base_mlv_set_dupl(n,x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine i2_base_mlv_set_dupl + + subroutine i2_base_mlv_set_state(n,x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine i2_base_mlv_set_state + + subroutine i2_base_mlv_set_null(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine i2_base_mlv_set_null + + subroutine i2_base_mlv_set_bld(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine i2_base_mlv_set_bld + + subroutine i2_base_mlv_set_upd(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine i2_base_mlv_set_upd + + subroutine i2_base_mlv_set_asb(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + x%bldstate = psb_vect_asb_ + end subroutine i2_base_mlv_set_asb + + + ! + ! The base version of SYNC & friends does nothing, it's just + ! a placeholder. + ! + ! + !> Function base_mlv_sync: + !! \memberof psb_i2_base_multivect_type + !! \brief Sync: base version is a no-op. + !! + ! + subroutine i2_base_mlv_sync(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + end subroutine i2_base_mlv_sync + + ! + !> Function base_mlv_set_host: + !! \memberof psb_i2_base_multivect_type + !! \brief Set_host: base version is a no-op. + !! + ! + subroutine i2_base_mlv_set_host(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + end subroutine i2_base_mlv_set_host + + ! + !> Function base_mlv_set_dev: + !! \memberof psb_i2_base_multivect_type + !! \brief Set_dev: base version is a no-op. + !! + ! + subroutine i2_base_mlv_set_dev(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + end subroutine i2_base_mlv_set_dev + + ! + !> Function base_mlv_set_sync: + !! \memberof psb_i2_base_multivect_type + !! \brief Set_sync: base version is a no-op. + !! + ! + subroutine i2_base_mlv_set_sync(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + end subroutine i2_base_mlv_set_sync + + ! + !> Function base_mlv_is_dev: + !! \memberof psb_i2_base_multivect_type + !! \brief Is vector on external device . + !! + ! + function i2_base_mlv_is_dev(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + + res = .false. + end function i2_base_mlv_is_dev + + ! + !> Function base_mlv_is_host + !! \memberof psb_i2_base_multivect_type + !! \brief Is vector on standard memory . + !! + ! + function i2_base_mlv_is_host(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + + res = .true. + end function i2_base_mlv_is_host + + ! + !> Function base_mlv_is_sync + !! \memberof psb_i2_base_multivect_type + !! \brief Is vector on sync . + !! + ! + function i2_base_mlv_is_sync(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + + res = .true. + end function i2_base_mlv_is_sync + + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine i2_base_mlv_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + class(psb_i2_base_multivect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine i2_base_mlv_cpy + + + ! + ! Size info. + ! + ! + !> Function base_mlv_get_nrows + !! \memberof psb_i2_base_multivect_type + !! \brief Number of entries + !! + ! + function i2_base_mlv_get_nrows(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + + res = 0 + if (allocated(x%v)) res = size(x%v,1) + + end function i2_base_mlv_get_nrows + + function i2_base_mlv_get_ncols(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + + res = 0 + if (allocated(x%v)) res = size(x%v,2) + + end function i2_base_mlv_get_ncols + + ! + !> Function base_mlv_get_sizeof + !! \memberof psb_i2_base_multivect_type + !! \brief Size in bytesa + !! + ! + function i2_base_mlv_sizeof(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_epk_) :: res + + ! Force 8-byte integers. + res = (1_psb_epk_ * psb_sizeof_i2p) * x%get_nrows() * x%get_ncols() + + end function i2_base_mlv_sizeof + + ! + !> Function base_mlv_get_fmt + !! \memberof psb_i2_base_multivect_type + !! \brief Format + !! + ! + function i2_base_mlv_get_fmt() result(res) + implicit none + character(len=5) :: res + res = 'BASE' + end function i2_base_mlv_get_fmt + + + ! + ! + ! + !> Function base_mlv_get_vect + !! \memberof psb_i2_base_multivect_type + !! \brief Extract a copy of the contents + !! + ! + function i2_base_mlv_get_vect(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_i2pk_), allocatable :: res(:,:) + integer(psb_ipk_) :: info,m,n + m = x%get_nrows() + n = x%get_ncols() + if (.not.allocated(x%v)) return + call x%sync() + allocate(res(m,n),stat=info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,'base_mlv_get_vect') + return + end if + res(1:m,1:n) = x%v(1:m,1:n) + end function i2_base_mlv_get_vect + + ! + ! Reset all values + ! + ! + !> Function base_mlv_set_scal + !! \memberof psb_i2_base_multivect_type + !! \brief Set all entries + !! \param val The value to set + !! + subroutine i2_base_mlv_set_scal(x,val) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val + + integer(psb_ipk_) :: info + x%v = val + + end subroutine i2_base_mlv_set_scal + + ! + !> Function base_mlv_set_vect + !! \memberof psb_i2_base_multivect_type + !! \brief Set all entries + !! \param val(:) The vector to be copied in + !! + subroutine i2_base_mlv_set_vect(x,val) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val(:,:) + integer(psb_ipk_) :: nr, nc + integer(psb_ipk_) :: info + + if (allocated(x%v)) then + nr = min(size(x%v,1),size(val,1)) + nc = min(size(x%v,2),size(val,2)) + + x%v(1:nr,1:nc) = val(1:nr,1:nc) + else + x%v = val + end if + + end subroutine i2_base_mlv_set_vect + + + function i2_base_mlv_use_buffer() result(res) + implicit none + logical :: res + + res = .true. + end function i2_base_mlv_use_buffer + + subroutine i2_base_mlv_new_buffer(n,x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: nc + nc = x%get_ncols() + call psb_realloc(n*nc,x%combuf,info) + end subroutine i2_base_mlv_new_buffer + + subroutine i2_base_mlv_new_comid(n,x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + + call psb_realloc(n,2_psb_ipk_,x%comid,info) + end subroutine i2_base_mlv_new_comid + + + subroutine i2_base_mlv_maybe_free_buffer(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + + info = 0 + if (psb_get_maybe_free_buffer())& + & call x%free_buffer(info) + + end subroutine i2_base_mlv_maybe_free_buffer + + subroutine i2_base_mlv_free_buffer(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%combuf)) & + & deallocate(x%combuf,stat=info) + end subroutine i2_base_mlv_free_buffer + + subroutine i2_base_mlv_free_comid(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%comid)) & + & deallocate(x%comid,stat=info) + end subroutine i2_base_mlv_free_comid + + + ! + ! Gather: Y = beta * Y + alpha * X(IDX(:)) + ! + ! + !> Function base_mlv_gthab + !! \memberof psb_i2_base_multivect_type + !! \brief gather into an array + !! Y = beta * Y + alpha * X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + !! \param alpha + !! \param beta + subroutine i2_base_mlv_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: alpha, beta, y(:) + class(psb_i2_base_multivect_type) :: x + integer(psb_mpk_) :: nc + + if (x%is_dev()) call x%sync() + if (.not.allocated(x%v)) then + return + end if + nc = psb_size(x%v,2_psb_ipk_) + call psi_gth(n,nc,idx,alpha,x%v,beta,y) + + end subroutine i2_base_mlv_gthab + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_mlv_gthzv + !! \memberof psb_i2_base_multivect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_mlv_gthzv_x(i,n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: y(:) + class(psb_i2_base_multivect_type) :: x + + if (x%is_dev()) call x%sync() + call x%gth(n,idx%v(i:),y) + + end subroutine i2_base_mlv_gthzv_x + + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_mlv_gthzv + !! \memberof psb_i2_base_multivect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_mlv_gthzv(n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:) + class(psb_i2_base_multivect_type) :: x + integer(psb_mpk_) :: nc + + if (x%is_dev()) call x%sync() + if (.not.allocated(x%v)) then + return + end if + nc = psb_size(x%v,2_psb_ipk_) + + call psi_gth(n,nc,idx,x%v,y) + + end subroutine i2_base_mlv_gthzv + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_mlv_gthzv + !! \memberof psb_i2_base_multivect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_mlv_gthzm(n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:,:) + class(psb_i2_base_multivect_type) :: x + integer(psb_mpk_) :: nc + + if (x%is_dev()) call x%sync() + if (.not.allocated(x%v)) then + return + end if + nc = psb_size(x%v,2_psb_ipk_) + + call psi_gth(n,nc,idx,x%v,y) + + end subroutine i2_base_mlv_gthzm + + ! + ! New comm internals impl. + ! + subroutine i2_base_mlv_gthzbuf(i,ixb,n,idx,x) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i, ixb + class(psb_i_base_vect_type) :: idx + class(psb_i2_base_multivect_type) :: x + integer(psb_ipk_) :: nc + + if (.not.allocated(x%combuf)) then + call psb_errpush(psb_err_alloc_dealloc_,'gthzbuf') + return + end if + if (idx%is_dev()) call idx%sync() + if (x%is_dev()) call x%sync() + nc = x%get_ncols() + call x%gth(n,idx%v(i:),x%combuf(ixb:)) + + end subroutine i2_base_mlv_gthzbuf + + ! + ! Scatter: + ! Y(IDX(:),:) = beta*Y(IDX(:),:) + X(:) + ! + ! + !> Function base_mlv_sctb + !! \memberof psb_i2_base_multivect_type + !! \brief scatter into a class(base_mlv_vect) + !! Y(IDX(:)) = beta * Y(IDX(:)) + X(:) + !! \param n how many entries to consider + !! \param idx(:) indices + !! \param beta + !! \param x(:) + subroutine i2_base_mlv_sctb(n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_base_multivect_type) :: y + integer(psb_mpk_) :: nc + + if (y%is_dev()) call y%sync() + nc = psb_size(y%v,2_psb_ipk_) + call psi_sct(n,nc,idx,x,beta,y%v) + call y%set_host() + + end subroutine i2_base_mlv_sctb + + subroutine i2_base_mlv_sctbr2(n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:,:) + class(psb_i2_base_multivect_type) :: y + integer(psb_mpk_) :: nc + + if (y%is_dev()) call y%sync() + nc = y%get_ncols() + call psi_sct(n,nc,idx,x,beta,y%v) + call y%set_host() + + end subroutine i2_base_mlv_sctbr2 + + subroutine i2_base_mlv_sctb_x(i,n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer( psb_i2pk_) :: beta, x(:) + class(psb_i2_base_multivect_type) :: y + + call y%sct(n,idx%v(i:),x,beta) + + end subroutine i2_base_mlv_sctb_x + + subroutine i2_base_mlv_sctb_buf(i,iyb,n,idx,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i, iyb + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: beta + class(psb_i2_base_multivect_type) :: y + integer(psb_ipk_) :: nc + + if (.not.allocated(y%combuf)) then + call psb_errpush(psb_err_alloc_dealloc_,'sctb_buf') + return + end if + if (y%is_dev()) call y%sync() + if (idx%is_dev()) call idx%sync() + nc = y%get_ncols() + call y%sct(n,idx%v(i:),y%combuf(iyb:),beta) + call y%set_host() + + end subroutine i2_base_mlv_sctb_buf + + ! + !> Function base_device_wait: + !! \memberof psb_i2_base_vect_type + !! \brief device_wait: base version is a no-op. + !! + ! + subroutine i2_base_mlv_device_wait() + implicit none + + end subroutine i2_base_mlv_device_wait + +end module psb_i2_base_multivect_mod diff --git a/base/modules/serial/psb_i2_vect_mod.F90 b/base/modules/serial/psb_i2_vect_mod.F90 new file mode 100644 index 000000000..db3e43184 --- /dev/null +++ b/base/modules/serial/psb_i2_vect_mod.F90 @@ -0,0 +1,1271 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! package: psb_i2_vect_mod +! +! This module contains the definition of the psb_i2_vect type which +! is the outer container for dense vectors. +! Therefore all methods simply invoke the corresponding methods of the +! inner component. +! +module psb_i2_vect_mod + + use psb_realloc_mod + use psb_i2_base_vect_mod + use psb_i_vect_mod + + type psb_i2_vect_type + class(psb_i2_base_vect_type), allocatable :: v + integer(psb_ipk_) :: nrmv = 0 + integer(psb_ipk_) :: remote_build=psb_matbld_noremote_ + integer(psb_ipk_) :: dupl = psb_dupl_add_ + integer(psb_i2pk_), allocatable :: rmtv(:) + integer(psb_lpk_), allocatable :: rmidx(:) + contains + procedure, pass(x) :: get_nrows => i2_vect_get_nrows + procedure, pass(x) :: sizeof => i2_vect_sizeof + procedure, pass(x) :: get_fmt => i2_vect_get_fmt + procedure, pass(x) :: is_remote_build => i2_vect_is_remote_build + procedure, pass(x) :: set_remote_build => i2_vect_set_remote_build + procedure, pass(x) :: get_nrmv => i2_vect_get_nrmv + procedure, pass(x) :: set_nrmv => i2_vect_set_nrmv + procedure, pass(x) :: all => i2_vect_all + procedure, pass(x) :: reall => i2_vect_reall + procedure, pass(x) :: zero => i2_vect_zero + procedure, pass(x) :: asb => i2_vect_asb + procedure, pass(x) :: set_dupl => i2_vect_set_dupl + procedure, pass(x) :: get_dupl => i2_vect_get_dupl + procedure, pass(x) :: set_ncfs => i2_vect_set_ncfs + procedure, pass(x) :: get_ncfs => i2_vect_get_ncfs + procedure, pass(x) :: set_state => i2_vect_set_state + procedure, pass(x) :: set_null => i2_vect_set_null + procedure, pass(x) :: set_bld => i2_vect_set_bld + procedure, pass(x) :: set_upd => i2_vect_set_upd + procedure, pass(x) :: set_asb => i2_vect_set_asb + procedure, pass(x) :: get_state => i2_vect_get_state + procedure, pass(x) :: is_null => i2_vect_is_null + procedure, pass(x) :: is_bld => i2_vect_is_bld + procedure, pass(x) :: is_upd => i2_vect_is_upd + procedure, pass(x) :: is_asb => i2_vect_is_asb + procedure, pass(x) :: reinit => i2_vect_reinit + + procedure, pass(x) :: gthab => i2_vect_gthab + procedure, pass(x) :: gthzv => i2_vect_gthzv + generic, public :: gth => gthab, gthzv + procedure, pass(y) :: sctb => i2_vect_sctb + generic, public :: sct => sctb + procedure, pass(x) :: free => i2_vect_free + procedure, pass(x) :: ins_a => i2_vect_ins_a + procedure, pass(x) :: ins_v => i2_vect_ins_v + generic, public :: ins => ins_v, ins_a + procedure, pass(x) :: bld_x => i2_vect_bld_x + procedure, pass(x) :: bld_mn => i2_vect_bld_mn + procedure, pass(x) :: bld_en => i2_vect_bld_en + generic, public :: bld => bld_x, bld_mn, bld_en + procedure, pass(x) :: get_vect => i2_vect_get_vect + procedure, pass(x) :: cnv => i2_vect_cnv + procedure, pass(x) :: set_scal => i2_vect_set_scal + procedure, pass(x) :: set_vect => i2_vect_set_vect + generic, public :: set => set_vect, set_scal + procedure, pass(x) :: clone => i2_vect_clone + + procedure, pass(x) :: sync => i2_vect_sync + procedure, pass(x) :: is_host => i2_vect_is_host + procedure, pass(x) :: is_dev => i2_vect_is_dev + procedure, pass(x) :: is_sync => i2_vect_is_sync + procedure, pass(x) :: set_host => i2_vect_set_host + procedure, pass(x) :: set_dev => i2_vect_set_dev + procedure, pass(x) :: set_sync => i2_vect_set_sync + procedure, pass(x) :: check_addr => i2_vect_check_addr + + + + end type psb_i2_vect_type + + public :: psb_i2_vect + private :: constructor, size_const + interface psb_i2_vect + module procedure constructor, size_const + end interface psb_i2_vect + + private :: i2_vect_get_nrows, i2_vect_sizeof, i2_vect_get_fmt, & + & i2_vect_all, i2_vect_reall, i2_vect_zero, i2_vect_asb, & + & i2_vect_gthab, i2_vect_gthzv, i2_vect_sctb, & + & i2_vect_free, i2_vect_ins_a, i2_vect_ins_v, i2_vect_bld_x, & + & i2_vect_bld_mn, i2_vect_bld_en, i2_vect_get_vect, & + & i2_vect_cnv, i2_vect_set_scal, & + & i2_vect_set_vect, i2_vect_clone, i2_vect_sync, i2_vect_is_host, & + & i2_vect_is_dev, i2_vect_is_sync, i2_vect_set_host, & + & i2_vect_set_dev, i2_vect_set_sync, & + & i2_vect_set_remote_build, i2_is_remote_build, & + & i2_vect_set_dupl, i2_get_dupl, i2_vect_set_nrmv, i2_get_nrmv + + + class(psb_i2_base_vect_type), allocatable, target,& + & save, private :: psb_i2_base_vect_default + + interface psb_set_vect_default + module procedure psb_i2_set_vect_default + end interface psb_set_vect_default + + interface psb_get_vect_default + module procedure psb_i2_get_vect_default + end interface psb_get_vect_default + + +contains + + function i2_vect_get_dupl(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_dupl() + else + res = psb_dupl_null_ + end if + end function i2_vect_get_dupl + + subroutine i2_vect_set_dupl(x,val) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_dupl(val) + else + call x%v%set_dupl(psb_dupl_def_) + end if + end if + end subroutine i2_vect_set_dupl + + function i2_vect_get_ncfs(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_ncfs() + else + res = 0 + end if + end function i2_vect_get_ncfs + + subroutine i2_vect_set_ncfs(x,val) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_ncfs(val) + else + call x%v%set_ncfs(0) + end if + end if + end subroutine i2_vect_set_ncfs + + function i2_vect_get_state(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if + end function i2_vect_get_state + + function i2_vect_is_null(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_null_) + end function i2_vect_is_null + + function i2_vect_is_bld(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_bld_) + end function i2_vect_is_bld + + function i2_vect_is_upd(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_upd_) + end function i2_vect_is_upd + + function i2_vect_is_asb(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_asb_) + end function i2_vect_is_asb + + subroutine i2_vect_set_state(n,x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + if (allocated(x%v)) then + call x%v%set_state(n) + end if + end subroutine i2_vect_set_state + + + subroutine i2_vect_set_null(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_null_) + end subroutine i2_vect_set_null + + subroutine i2_vect_set_bld(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_bld_) + end subroutine i2_vect_set_bld + + subroutine i2_vect_set_upd(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_upd_) + end subroutine i2_vect_set_upd + + subroutine i2_vect_set_asb(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_asb_) + end subroutine i2_vect_set_asb + + function i2_vect_get_nrmv(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%nrmv + end function i2_vect_get_nrmv + + subroutine i2_vect_set_nrmv(x,val) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: val + + x%nrmv = val + end subroutine i2_vect_set_nrmv + + function i2_vect_is_remote_build(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%remote_build == psb_matbld_remote_) + end function i2_vect_is_remote_build + + subroutine i2_vect_set_remote_build(x,val) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (present(val)) then + x%remote_build = val + else + x%remote_build = psb_matbld_remote_ + end if + end subroutine i2_vect_set_remote_build + + subroutine psb_i2_set_vect_default(v) + implicit none + class(psb_i2_base_vect_type), intent(in) :: v + + if (allocated(psb_i2_base_vect_default)) then + deallocate(psb_i2_base_vect_default) + end if + allocate(psb_i2_base_vect_default, mold=v) + + end subroutine psb_i2_set_vect_default + + function psb_i2_get_vect_default(v) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: v + class(psb_i2_base_vect_type), pointer :: res + + res => psb_i2_get_base_vect_default() + + end function psb_i2_get_vect_default + + subroutine psb_i2_clear_vect_default() + implicit none + + if (allocated(psb_i2_base_vect_default)) then + deallocate(psb_i2_base_vect_default) + end if + + end subroutine psb_i2_clear_vect_default + + function psb_i2_get_base_vect_default() result(res) + implicit none + class(psb_i2_base_vect_type), pointer :: res + + if (.not.allocated(psb_i2_base_vect_default)) then + allocate(psb_i2_base_vect_type :: psb_i2_base_vect_default) + end if + + res => psb_i2_base_vect_default + + end function psb_i2_get_base_vect_default + + subroutine i2_vect_clone(x,y,info) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_vect_type), intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + call y%free(info) + if ((info==0).and.allocated(x%v)) then + ! + ! Using sourced allocation here creates + ! problems with handling of memory allocated + ! elsewhere (e.g. accelerators), hence delegation + ! to %bld method + ! + call y%bld(x%get_vect(),mold=x%v) + end if + end subroutine i2_vect_clone + + subroutine i2_vect_bld_x(x,invect,mold,scratch) + integer(psb_i2pk_), intent(in) :: invect(:) + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + + info = psb_success_ + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_vect_default()) + endif + + if (info == psb_success_) call x%v%bld(invect,scratch=scratch_) + + end subroutine i2_vect_bld_x + + + subroutine i2_vect_bld_mn(x,n,mold,scratch) + integer(psb_mpk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + class(psb_i2_base_vect_type), pointer :: mld + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + + info = psb_success_ + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_vect_default()) + endif + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) + + end subroutine i2_vect_bld_mn + + subroutine i2_vect_bld_en(x,n,mold,scratch) + integer(psb_epk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + + info = psb_success_ + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_vect_default()) + endif + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) + + end subroutine i2_vect_bld_en + + function i2_vect_get_vect(x,n) result(res) + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_i2pk_), allocatable :: res(:) + integer(psb_ipk_) :: info + integer(psb_ipk_), optional :: n + + if (allocated(x%v)) then + res = x%v%get_vect(n) + end if + end function i2_vect_get_vect + + subroutine i2_vect_set_scal(x,val,first,last) + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%set(val,first,last) + + end subroutine i2_vect_set_scal + + subroutine i2_vect_set_vect(x,val,first,last) + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%set(val,first,last) + + end subroutine i2_vect_set_vect + + subroutine i2_vect_check_addr(x) + class(psb_i2_vect_type), intent(inout) :: x + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%check_addr() + + end subroutine i2_vect_check_addr + + function constructor(x) result(this) + integer(psb_i2pk_) :: x(:) + type(psb_i2_vect_type) :: this + integer(psb_ipk_) :: info + + call this%bld(x) + call this%asb(size(x,kind=psb_ipk_),info) + + end function constructor + + + function size_const(n) result(this) + integer(psb_ipk_), intent(in) :: n + type(psb_i2_vect_type) :: this + integer(psb_ipk_) :: info + + call this%bld(n) + call this%asb(n,info) + + end function size_const + + function i2_vect_get_nrows(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%get_nrows() + end function i2_vect_get_nrows + + function i2_vect_sizeof(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_epk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%sizeof() + end function i2_vect_sizeof + + function i2_vect_get_fmt(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + character(len=5) :: res + res = 'NULL' + if (allocated(x%v)) res = x%v%get_fmt() + end function i2_vect_get_fmt + + subroutine i2_vect_all(n, x, info, mold) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + class(psb_i2_base_vect_type), intent(in), optional :: mold + + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(psb_i2_base_vect_type :: x%v,stat=info) + endif + if (info == 0) then + call x%v%all(n,info) + else + info = psb_err_alloc_dealloc_ + end if + call x%set_bld() + end subroutine i2_vect_all + + subroutine i2_vect_reinit(x, info, clear) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + + if (allocated(x%v)) call x%v%reinit(info,clear) + call x%set_upd() + + end subroutine i2_vect_reinit + + subroutine i2_vect_reall(n, x, info) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not.allocated(x%v)) & + & call x%all(n,info) + if (info == 0) & + & call x%asb(n,info) + + end subroutine i2_vect_reall + + subroutine i2_vect_zero(x) + use psi_serial_mod + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) call x%v%zero() + + end subroutine i2_vect_zero + + subroutine i2_vect_asb(n, x, info, scratch) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + if (allocated(x%v)) then + call x%v%asb(n,info,scratch=scratch) + call x%set_asb() + end if + end subroutine i2_vect_asb + + subroutine i2_vect_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: alpha, beta, y(:) + class(psb_i2_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,alpha,beta,y) + + end subroutine i2_vect_gthab + + subroutine i2_vect_gthzv(n,idx,x,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:) + class(psb_i2_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,y) + + end subroutine i2_vect_gthzv + + subroutine i2_vect_sctb(n,idx,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_vect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(n,idx,x,beta) + + end subroutine i2_vect_sctb + + subroutine i2_vect_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%v%free(info) + if (info == 0) deallocate(x%v,stat=info) + end if + + end subroutine i2_vect_free + + subroutine i2_vect_ins_a(n,irl,val,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, maxr + integer(psb_ipk_), intent(in) :: irl(:) + integer(psb_i2pk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, dupl + + info = 0 + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + return + end if + dupl = x%get_dupl() + call x%v%ins(n,irl,val,dupl,maxr,info) + + end subroutine i2_vect_ins_a + + subroutine i2_vect_ins_v(n,irl,val,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, maxr + class(psb_i_vect_type), intent(inout) :: irl + class(psb_i2_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, dupl + + info = 0 + if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then + info = psb_err_invalid_vect_state_ + return + end if + dupl = x%get_dupl() + call x%v%ins(n,irl%v,val%v,dupl,maxr,info) + + end subroutine i2_vect_ins_v + + + subroutine i2_vect_cnv(x,mold) + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_base_vect_type), intent(in), optional :: mold + class(psb_i2_base_vect_type), allocatable :: tmp + + integer(psb_ipk_) :: info + + info = psb_success_ + if (present(mold)) then + allocate(tmp,stat=info,mold=mold) + else + allocate(tmp,stat=info,mold=psb_i2_get_base_vect_default()) + end if + if (allocated(x%v)) then + if (allocated(x%v%v)) then + call x%v%sync() + if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%base_cpy(tmp) + call x%v%free(info) + endif + end if + call move_alloc(tmp,x%v) + + end subroutine i2_vect_cnv + + + subroutine i2_vect_sync(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%sync() + + end subroutine i2_vect_sync + + subroutine i2_vect_set_sync(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%set_sync() + + end subroutine i2_vect_set_sync + + subroutine i2_vect_set_host(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%set_host() + + end subroutine i2_vect_set_host + + subroutine i2_vect_set_dev(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%set_dev() + + end subroutine i2_vect_set_dev + + function i2_vect_is_sync(x) result(res) + implicit none + logical :: res + class(psb_i2_vect_type), intent(inout) :: x + + res = .true. + if (allocated(x%v)) & + & res = x%v%is_sync() + + end function i2_vect_is_sync + + function i2_vect_is_host(x) result(res) + implicit none + logical :: res + class(psb_i2_vect_type), intent(inout) :: x + + res = .true. + if (allocated(x%v)) & + & res = x%v%is_host() + + end function i2_vect_is_host + + function i2_vect_is_dev(x) result(res) + implicit none + logical :: res + class(psb_i2_vect_type), intent(inout) :: x + + res = .false. + if (allocated(x%v)) & + & res = x%v%is_dev() + + end function i2_vect_is_dev + + + + +end module psb_i2_vect_mod + + +module psb_i2_multivect_mod + + use psb_i2_base_multivect_mod + use psb_const_mod + use psb_i_vect_mod + + + !private + + type psb_i2_multivect_type + class(psb_i2_base_multivect_type), allocatable :: v + integer(psb_ipk_) :: nrmv = 0 + integer(psb_ipk_) :: remote_build=psb_matbld_noremote_ + integer(psb_ipk_) :: dupl = psb_dupl_add_ + integer(psb_i2pk_), allocatable :: rmtv(:,:) + contains + procedure, pass(x) :: get_nrows => i2_mvect_get_nrows + procedure, pass(x) :: get_ncols => i2_mvect_get_ncols + procedure, pass(x) :: sizeof => i2_mvect_sizeof + procedure, pass(x) :: get_fmt => i2_mvect_get_fmt + procedure, pass(x) :: is_remote_build => i2_mvect_is_remote_build + procedure, pass(x) :: set_remote_build => i2_mvect_set_remote_build + procedure, pass(x) :: get_dupl => i2_mvect_get_dupl + procedure, pass(x) :: set_dupl => i2_mvect_set_dupl + + procedure, pass(x) :: all => i2_mvect_all + procedure, pass(x) :: reall => i2_mvect_reall + procedure, pass(x) :: zero => i2_mvect_zero + procedure, pass(x) :: asb => i2_mvect_asb + procedure, pass(x) :: sync => i2_mvect_sync + procedure, pass(x) :: free => i2_mvect_free + procedure, pass(x) :: ins => i2_mvect_ins + procedure, pass(x) :: bld_x => i2_mvect_bld_x + procedure, pass(x) :: bld_n => i2_mvect_bld_n + generic, public :: bld => bld_x, bld_n + procedure, pass(x) :: get_vect => i2_mvect_get_vect + procedure, pass(x) :: cnv => i2_mvect_cnv + procedure, pass(x) :: set_scal => i2_mvect_set_scal + procedure, pass(x) :: set_vect => i2_mvect_set_vect + generic, public :: set => set_vect, set_scal + procedure, pass(x) :: clone => i2_mvect_clone + procedure, pass(x) :: gthab => i2_mvect_gthab + procedure, pass(x) :: gthzv => i2_mvect_gthzv + procedure, pass(x) :: gthzv_x => i2_mvect_gthzv_x + generic, public :: gth => gthab, gthzv + procedure, pass(y) :: sctb => i2_mvect_sctb + procedure, pass(y) :: sctb_x => i2_mvect_sctb_x + generic, public :: sct => sctb, sctb_x + end type psb_i2_multivect_type + + public :: psb_i2_multivect, psb_i2_multivect_type,& + & psb_set_multivect_default, psb_get_multivect_default, & + & psb_i2_base_multivect_type + + private + interface psb_i2_multivect + module procedure constructor, size_const + end interface psb_i2_multivect + + class(psb_i2_base_multivect_type), allocatable, target,& + & save, private :: psb_i2_base_multivect_default + + interface psb_set_multivect_default + module procedure psb_i2_set_multivect_default + end interface psb_set_multivect_default + + interface psb_get_multivect_default + module procedure psb_i2_get_multivect_default + end interface psb_get_multivect_default + + +contains + + + function i2_mvect_get_dupl(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function i2_mvect_get_dupl + + subroutine i2_mvect_set_dupl(x,val) + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (present(val)) then + x%dupl = val + else + x%dupl = psb_dupl_def_ + end if + end subroutine i2_mvect_set_dupl + + + function i2_mvect_is_remote_build(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + logical :: res + res = (x%remote_build == psb_matbld_remote_) + end function i2_mvect_is_remote_build + + subroutine i2_mvect_set_remote_build(x,val) + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (present(val)) then + x%remote_build = val + else + x%remote_build = psb_matbld_remote_ + end if + end subroutine i2_mvect_set_remote_build + + + subroutine psb_i2_set_multivect_default(v) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: v + + if (allocated(psb_i2_base_multivect_default)) then + deallocate(psb_i2_base_multivect_default) + end if + allocate(psb_i2_base_multivect_default, mold=v) + + end subroutine psb_i2_set_multivect_default + + function psb_i2_get_multivect_default(v) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: v + class(psb_i2_base_multivect_type), pointer :: res + + res => psb_i2_get_base_multivect_default() + + end function psb_i2_get_multivect_default + + + function psb_i2_get_base_multivect_default() result(res) + implicit none + class(psb_i2_base_multivect_type), pointer :: res + + if (.not.allocated(psb_i2_base_multivect_default)) then + allocate(psb_i2_base_multivect_type :: psb_i2_base_multivect_default) + end if + + res => psb_i2_base_multivect_default + + end function psb_i2_get_base_multivect_default + + + subroutine i2_mvect_clone(x,y,info) + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + class(psb_i2_multivect_type), intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + call y%free(info) + if ((info==0).and.allocated(x%v)) then + call y%bld_x(x%get_vect(),mold=x%v) + end if + end subroutine i2_mvect_clone + + subroutine i2_mvect_bld_x(x,invect,mold) + integer(psb_i2pk_), intent(in) :: invect(:,:) + class(psb_i2_multivect_type), intent(out) :: x + class(psb_i2_base_multivect_type), intent(in), optional :: mold + integer(psb_ipk_) :: info + class(psb_i2_base_multivect_type), pointer :: mld + + info = psb_success_ + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_multivect_default()) + endif + + if (info == psb_success_) call x%v%bld(invect) + + end subroutine i2_mvect_bld_x + + + subroutine i2_mvect_bld_n(x,m,n,mold) + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_multivect_type), intent(out) :: x + class(psb_i2_base_multivect_type), intent(in), optional :: mold + integer(psb_ipk_) :: info + + info = psb_success_ + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_multivect_default()) + endif + if (info == psb_success_) call x%v%bld(m,n) + + end subroutine i2_mvect_bld_n + + function i2_mvect_get_vect(x) result(res) + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_i2pk_), allocatable :: res(:,:) + integer(psb_ipk_) :: info + + if (allocated(x%v)) then + res = x%v%get_vect() + end if + end function i2_mvect_get_vect + + subroutine i2_mvect_set_scal(x,val) + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%set(val) + + end subroutine i2_mvect_set_scal + + subroutine i2_mvect_set_vect(x,val) + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val(:,:) + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%set(val) + + end subroutine i2_mvect_set_vect + + + function constructor(x) result(this) + integer(psb_i2pk_) :: x(:,:) + type(psb_i2_multivect_type) :: this + integer(psb_ipk_) :: info + + call this%bld_x(x) + call this%asb(size(x,dim=1,kind=psb_ipk_),size(x,dim=2,kind=psb_ipk_),info) + + end function constructor + + + function size_const(m,n) result(this) + integer(psb_ipk_), intent(in) :: m,n + type(psb_i2_multivect_type) :: this + integer(psb_ipk_) :: info + + call this%bld_n(m,n) + call this%asb(m,n,info) + + end function size_const + + function i2_mvect_get_nrows(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%get_nrows() + end function i2_mvect_get_nrows + + function i2_mvect_get_ncols(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%get_ncols() + end function i2_mvect_get_ncols + + function i2_mvect_sizeof(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + integer(psb_epk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%sizeof() + end function i2_mvect_sizeof + + function i2_mvect_get_fmt(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + character(len=5) :: res + res = 'NULL' + if (allocated(x%v)) res = x%v%get_fmt() + end function i2_mvect_get_fmt + + subroutine i2_mvect_all(m,n, x, info, mold) + + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_multivect_type), intent(out) :: x + class(psb_i2_base_multivect_type), intent(in), optional :: mold + integer(psb_ipk_), intent(out) :: info + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(psb_i2_base_multivect_type :: x%v,stat=info) + endif + if (info == 0) then + call x%v%all(m,n,info) + else + info = psb_err_alloc_dealloc_ + end if + + end subroutine i2_mvect_all + + subroutine i2_mvect_reall(m,n, x, info) + + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not.allocated(x%v)) & + & call x%all(m,n,info) + if (info == 0) & + & call x%asb(m,n,info) + + end subroutine i2_mvect_reall + + subroutine i2_mvect_zero(x) + use psi_serial_mod + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + + if (allocated(x%v)) call x%v%zero() + + end subroutine i2_mvect_zero + + subroutine i2_mvect_asb(m,n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%v%asb(m,n,info) + + end subroutine i2_mvect_asb + + subroutine i2_mvect_sync(x) + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%sync() + + end subroutine i2_mvect_sync + + subroutine i2_mvect_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: alpha, beta, y(:) + class(psb_i2_multivect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,alpha,beta,y) + + end subroutine i2_mvect_gthab + + subroutine i2_mvect_gthzv(n,idx,x,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:) + class(psb_i2_multivect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,y) + + end subroutine i2_mvect_gthzv + + subroutine i2_mvect_gthzv_x(i,n,idx,x,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: y(:) + class(psb_i2_multivect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(i,n,idx,y) + + end subroutine i2_mvect_gthzv_x + + subroutine i2_mvect_sctb(n,idx,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_multivect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(n,idx,x,beta) + + end subroutine i2_mvect_sctb + + subroutine i2_mvect_sctb_x(i,n,idx,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_multivect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(i,n,idx,x,beta) + + end subroutine i2_mvect_sctb_x + + subroutine i2_mvect_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%v%free(info) + if (info == 0) deallocate(x%v,stat=info) + end if + + end subroutine i2_mvect_free + + subroutine i2_mvect_ins(n,irl,val,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n,maxr + integer(psb_ipk_), intent(in) :: irl(:) + integer(psb_i2pk_), intent(in) :: val(:,:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, dupl + + info = 0 + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + return + end if + dupl = x%get_dupl() + call x%v%ins(n,irl,val,dupl,maxr,info) + + end subroutine i2_mvect_ins + + + subroutine i2_mvect_cnv(x,mold) + class(psb_i2_multivect_type), intent(inout) :: x + class(psb_i2_base_multivect_type), intent(in), optional :: mold + class(psb_i2_base_multivect_type), allocatable :: tmp + integer(psb_ipk_) :: info + + if (present(mold)) then + allocate(tmp,stat=info,mold=mold) + else + allocate(tmp,stat=info, mold=psb_i2_get_base_multivect_default()) + endif + if (allocated(x%v)) then + call x%v%sync() + if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%free(info) + end if + call move_alloc(tmp,x%v) + end subroutine i2_mvect_cnv + + +end module psb_i2_multivect_mod diff --git a/base/modules/serial/psb_vect_mod.f90 b/base/modules/serial/psb_vect_mod.f90 index 80e7da773..d82eeffb5 100644 --- a/base/modules/serial/psb_vect_mod.f90 +++ b/base/modules/serial/psb_vect_mod.f90 @@ -1,4 +1,5 @@ module psb_vect_mod + use psb_i2_vect_mod use psb_i_vect_mod use psb_l_vect_mod use psb_s_vect_mod diff --git a/base/modules/tools/psb_tools_mod.f90 b/base/modules/tools/psb_tools_mod.f90 index 1fdd30572..ca2020ee7 100644 --- a/base/modules/tools/psb_tools_mod.f90 +++ b/base/modules/tools/psb_tools_mod.f90 @@ -31,6 +31,7 @@ ! module psb_tools_mod use psb_cd_tools_mod + use psb_i2_tools_a_mod use psb_e_tools_a_mod use psb_m_tools_a_mod use psb_s_tools_a_mod diff --git a/base/serial/Makefile b/base/serial/Makefile index 57e4bfa10..7e0431aaa 100644 --- a/base/serial/Makefile +++ b/base/serial/Makefile @@ -1,7 +1,7 @@ include ../../Make.inc -FOBJS = psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o \ +FOBJS = psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o psi_i2_serial_impl.o \ psi_s_serial_impl.o psi_d_serial_impl.o \ psi_c_serial_impl.o psi_z_serial_impl.o \ psb_srwextd.o psb_drwextd.o psb_crwextd.o psb_zrwextd.o \ diff --git a/base/serial/sort/Makefile b/base/serial/sort/Makefile index ff8fd6201..9a4628398 100644 --- a/base/serial/sort/Makefile +++ b/base/serial/sort/Makefile @@ -3,6 +3,7 @@ include ../../../Make.inc # # The object files # +I2OBJS=psb_i2_hsort_impl.o psb_i2_isort_impl.o psb_i2_msort_impl.o psb_i2_qsort_impl.o IOBJS=psb_m_hsort_impl.o psb_m_isort_impl.o psb_m_msort_impl.o psb_m_qsort_impl.o LOBJS=psb_e_hsort_impl.o psb_e_isort_impl.o psb_e_msort_impl.o psb_e_qsort_impl.o SOBJS=psb_s_hsort_impl.o psb_s_isort_impl.o psb_s_msort_impl.o psb_s_qsort_impl.o @@ -10,7 +11,7 @@ DOBJS=psb_d_hsort_impl.o psb_d_isort_impl.o psb_d_msort_impl.o psb_d_qsort_impl. COBJS=psb_c_hsort_impl.o psb_c_isort_impl.o psb_c_msort_impl.o psb_c_qsort_impl.o ZOBJS=psb_z_hsort_impl.o psb_z_isort_impl.o psb_z_msort_impl.o psb_z_qsort_impl.o -OBJS=$(SOBJS) $(DOBJS) $(COBJS) $(ZOBJS) $(IOBJS) $(LOBJS) +OBJS=$(SOBJS) $(DOBJS) $(COBJS) $(ZOBJS) $(I2OBJS) $(IOBJS) $(LOBJS) # # Where the library should go, and how it is called. diff --git a/base/serial/sort/psb_i2_hsort_impl.f90 b/base/serial/sort/psb_i2_hsort_impl.f90 new file mode 100644 index 000000000..06fff6bae --- /dev/null +++ b/base/serial/sort/psb_i2_hsort_impl.f90 @@ -0,0 +1,721 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! The merge-sort and quicksort routines are implemented in the +! serial/aux directory +! References: +! D. Knuth +! The Art of Computer Programming, vol. 3 +! Addison-Wesley +! +! Aho, Hopcroft, Ullman +! Data Structures and Algorithms +! Addison-Wesley +! +subroutine psb_i2hsort(x,ix,dir,flag,reord) + use psb_sort_mod, psb_protect_name => psb_i2hsort + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord + integer(psb_ipk_), optional, intent(inout) :: ix(:) + + integer(psb_ipk_) :: flag_, err_act, info, reord_ + integer(psb_ipk_) :: n, i, l, dir_ + integer(psb_i2pk_) :: key + integer(psb_ipk_) :: index + integer(psb_i2pk_), allocatable :: tx(:) + + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_hsort' + call psb_erractionsave(err_act) + + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + + if (present(flag)) then + flag_ = flag + else + flag_ = psb_sort_ovw_idx_ + end if + select case(flag_) + case( psb_sort_ovw_idx_, psb_sort_keep_idx_) + ! OK keep going + case default + ierr(1) = 4; ierr(2) = flag_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + if (present(dir)) then + dir_ = dir + else + dir_= psb_sort_up_ + end if + + select case(dir_) + case(psb_sort_up_,psb_sort_down_) + ! OK + case (psb_asort_up_,psb_asort_down_) + ! OK + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + n = size(x) + + ! + ! Dirty trick to sort with heaps: if we want + ! to sort in place upwards, first we set up a heap so that + ! we can easily get the LARGEST element, then we take it out + ! and put it in the last entry, and so on. + ! So, we invert dir_ + ! + dir_ = -dir_ + + if (present(ix)) then + if (size(ix) < n) then + ierr(1) = 2; ierr(2) = size(ix); + call psb_errpush(psb_err_input_asize_invalid_i_,name,i_err=ierr) + goto 9999 + end if + if (flag_ == psb_sort_ovw_idx_) then + do i=1, n + ix(i) = i + end do + end if + select case(reord_) + case (psb_sort_reord_x_) + + l = 0 + do i=1, n + key = x(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + ix(i) = index + end do + case(psb_sort_noreord_x_) + tx = x + + l = 0 + do i=1, n + key = tx(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + tx(i) = key + ix(i) = index + end do + end select + else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + l = 0 + do i=1, n + key = x(i) + call psi_insert_heap(key,l,x,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ',l,i + end if + end do + do i=n, 2, -1 + call psi_i2_heap_get_first(key,l,x,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + end do + end if + + + return + +9999 call psb_error_handler(err_act) + + return +end subroutine psb_i2hsort + + + +! +! These are packaged so that they can be used to implement +! a heapsort. +! +! +! Programming note: +! In the implementation of the heap_get_first function +! we have code like this +! +! if ( ( heap(2*i) < heap(2*i+1) ) .or.& +! & (2*i == last)) then +! j = 2*i +! else +! j = 2*i + 1 +! end if +! +! It looks like the 2*i+1 could overflow the array, but this +! is not true because there is a guard statement +! if (i>last/2) exit +! and because last has just been reduced by 1 when defining the return value, +! therefore 2*i+1 may be greater than the current value of last, +! but cannot be greater than the value of last when the routine was entered +! hence it is safe. +! +! +! + +subroutine psi_i2_insert_heap(key,last,heap,dir,info) + use psb_sort_mod, psb_protect_name => psi_i2_insert_heap + implicit none + + ! + ! Input: + ! key: the new value + ! last: pointer to the last occupied element in heap + ! heap: the heap + ! dir: sorting direction + + integer(psb_i2pk_), intent(in) :: key + integer(psb_ipk_), intent(in) :: dir + integer(psb_i2pk_), intent(inout) :: heap(:) + integer(psb_ipk_), intent(inout) :: last + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, i2 + integer(psb_i2pk_) :: temp + + info = psb_success_ + if (last < 0) then + write(psb_err_unit,*) 'Invalid last in heap ',last + info = last + return + endif + last = last + 1 + if (last > size(heap)) then + write(psb_err_unit,*) 'out of bounds ' + info = -1 + return + end if + i = last + heap(i) = key + + select case(dir) + case (psb_sort_up_) + + do + if (i<=1) exit + i2 = i/2 + if (heap(i) < heap(i2)) then + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case (psb_sort_down_) + + do + if (i<=1) exit + i2 = i/2 + if (heap(i) > heap(i2)) then + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + case (psb_asort_up_) + + do + if (i<=1) exit + i2 = i/2 + if (abs(heap(i)) < abs(heap(i2))) then + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case (psb_asort_down_) + + do + if (i<=1) exit + i2 = i/2 + if (abs(heap(i)) > abs(heap(i2))) then + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case default + write(psb_err_unit,*) 'Invalid direction in heap ',dir + end select + + return +end subroutine psi_i2_insert_heap + + +subroutine psi_i2_heap_get_first(key,last,heap,dir,info) + use psb_sort_mod, psb_protect_name => psi_i2_heap_get_first + implicit none + + integer(psb_i2pk_), intent(inout) :: key + integer(psb_ipk_), intent(inout) :: last + integer(psb_ipk_), intent(in) :: dir + integer(psb_i2pk_), intent(inout) :: heap(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, j + integer(psb_i2pk_) :: temp + + + info = psb_success_ + if (last <= 0) then + key = 0 + info = -1 + return + endif + + key = heap(1) + heap(1) = heap(last) + last = last - 1 + + select case(dir) + case (psb_sort_up_) + + i = 1 + do + if (i > (last/2)) exit + if ( (heap(2*i) < heap(2*i+1)) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (heap(i) > heap(j)) then + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + + case (psb_sort_down_) + + i = 1 + do + if (i > (last/2)) exit + if ( (heap(2*i) > heap(2*i+1)) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (heap(i) < heap(j)) then + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + case (psb_asort_up_) + + i = 1 + do + if (i > (last/2)) exit + if ( (abs(heap(2*i)) < abs(heap(2*i+1))) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (abs(heap(i)) > abs(heap(j))) then + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + + case (psb_asort_down_) + + i = 1 + do + if (i > (last/2)) exit + if ( (abs(heap(2*i)) > abs(heap(2*i+1))) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (abs(heap(i)) < abs(heap(j))) then + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + case default + write(psb_err_unit,*) 'Invalid direction in heap ',dir + end select + + return +end subroutine psi_i2_heap_get_first + + +subroutine psi_i2_idx_insert_heap(key,index,last,heap,idxs,dir,info) + use psb_sort_mod, psb_protect_name => psi_i2_idx_insert_heap + + implicit none + ! + ! Input: + ! key: the new value + ! index: the new index + ! last: pointer to the last occupied element in heap + ! heap: the heap + ! idxs: the indices + ! dir: sorting direction + + integer(psb_i2pk_), intent(in) :: key + integer(psb_ipk_), intent(in) :: index,dir + integer(psb_i2pk_), intent(inout) :: heap(:) + integer(psb_ipk_), intent(inout) :: idxs(:),last + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, i2, itemp + integer(psb_i2pk_) :: temp + + info = psb_success_ + if (last < 0) then + write(psb_err_unit,*) 'Invalid last in heap ',last + info = last + return + endif + + last = last + 1 + if (last > size(heap)) then + write(psb_err_unit,*) 'out of bounds ' + info = -1 + return + end if + + i = last + heap(i) = key + idxs(i) = index + + select case(dir) + case (psb_sort_up_) + + do + if (i<=1) exit + i2 = i/2 + if (heap(i) < heap(i2)) then + itemp = idxs(i) + idxs(i) = idxs(i2) + idxs(i2) = itemp + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case (psb_sort_down_) + + do + if (i<=1) exit + i2 = i/2 + if (heap(i) > heap(i2)) then + itemp = idxs(i) + idxs(i) = idxs(i2) + idxs(i2) = itemp + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + case (psb_asort_up_) + + do + if (i<=1) exit + i2 = i/2 + if (abs(heap(i)) < abs(heap(i2))) then + itemp = idxs(i) + idxs(i) = idxs(i2) + idxs(i2) = itemp + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case (psb_asort_down_) + + do + if (i<=1) exit + i2 = i/2 + if (abs(heap(i)) > abs(heap(i2))) then + itemp = idxs(i) + idxs(i) = idxs(i2) + idxs(i2) = itemp + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case default + write(psb_err_unit,*) 'Invalid direction in heap ',dir + end select + + return +end subroutine psi_i2_idx_insert_heap + +subroutine psi_i2_idx_heap_get_first(key,index,last,heap,idxs,dir,info) + use psb_sort_mod, psb_protect_name => psi_i2_idx_heap_get_first + implicit none + + integer(psb_i2pk_), intent(inout) :: key + integer(psb_i2pk_), intent(inout) :: heap(:) + integer(psb_ipk_), intent(out) :: index + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(inout) :: last,idxs(:) + integer(psb_ipk_), intent(in) :: dir + + integer(psb_ipk_) :: i, j,itemp + integer(psb_i2pk_) :: temp + + info = psb_success_ + if (last <= 0) then + key = 0 + index = 0 + info = -1 + return + endif + + key = heap(1) + index = idxs(1) + heap(1) = heap(last) + idxs(1) = idxs(last) + last = last - 1 + + select case(dir) + case (psb_sort_up_) + + i = 1 + do + if (i > (last/2)) exit + if ( (heap(2*i) < heap(2*i+1)) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (heap(i) > heap(j)) then + itemp = idxs(i) + idxs(i) = idxs(j) + idxs(j) = itemp + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + + case (psb_sort_down_) + + i = 1 + do + if (i > (last/2)) exit + if ( (heap(2*i) > heap(2*i+1)) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (heap(i) < heap(j)) then + itemp = idxs(i) + idxs(i) = idxs(j) + idxs(j) = itemp + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + case (psb_asort_up_) + + i = 1 + do + if (i > (last/2)) exit + if ( (abs(heap(2*i)) < abs(heap(2*i+1))) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (abs(heap(i)) > abs(heap(j))) then + itemp = idxs(i) + idxs(i) = idxs(j) + idxs(j) = itemp + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + + case (psb_asort_down_) + + i = 1 + do + if (i > (last/2)) exit + if ( (abs(heap(2*i)) > abs(heap(2*i+1))) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (abs(heap(i)) < abs(heap(j))) then + itemp = idxs(i) + idxs(i) = idxs(j) + idxs(j) = itemp + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + case default + write(psb_err_unit,*) 'Invalid direction in heap ',dir + end select + + return +end subroutine psi_i2_idx_heap_get_first + + + + diff --git a/base/serial/sort/psb_i2_isort_impl.f90 b/base/serial/sort/psb_i2_isort_impl.f90 new file mode 100644 index 000000000..f582d2689 --- /dev/null +++ b/base/serial/sort/psb_i2_isort_impl.f90 @@ -0,0 +1,378 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! The insertion sort routines +! References: +! D. Knuth +! The Art of Computer Programming, vol. 3 +! Addison-Wesley +! +! Aho, Hopcroft, Ullman +! Data Structures and Algorithms +! Addison-Wesley +! +subroutine psb_i2isort(x,ix,dir,flag,reord) + use psb_sort_mod, psb_protect_name => psb_i2isort + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord + integer(psb_ipk_), optional, intent(inout) :: ix(:) + + integer(psb_ipk_) :: dir_, flag_, err_act, reord_ + integer(psb_ipk_) :: n, i + integer(psb_i2pk_), allocatable :: tx(:) + + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_i2isort' + call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + + if (present(flag)) then + flag_ = flag + else + flag_ = psb_sort_ovw_idx_ + end if + select case(flag_) + case( psb_sort_ovw_idx_, psb_sort_keep_idx_) + ! OK keep going + case default + ierr(1) = 4; ierr(2) = flag_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + if (present(dir)) then + dir_ = dir + else + dir_= psb_sort_up_ + end if + + n = size(x) + + if (present(ix)) then + if (size(ix) < n) then + ierr(1) = 2; ierr(2) = size(ix); + call psb_errpush(psb_err_input_asize_invalid_i_,name,i_err=ierr) + goto 9999 + end if + if (flag_==psb_sort_ovw_idx_) then + do i=1,n + ix(i) = i + end do + end if + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_i2isrx_up(n,x,ix) + case (psb_sort_down_) + call psi_i2isrx_dw(n,x,ix) + case (psb_asort_up_) + call psi_i2aisrx_up(n,x,ix) + case (psb_asort_down_) + call psi_i2aisrx_dw(n,x,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_i2isrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_i2isrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_i2aisrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_i2aisrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + select case(dir_) + case (psb_sort_up_) + call psi_i2isr_up(n,x) + case (psb_sort_down_) + call psi_i2isr_dw(n,x) + case (psb_asort_up_) + call psi_i2aisr_up(n,x) + case (psb_asort_down_) + call psi_i2aisr_dw(n,x) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + end if + + return + +9999 call psb_error_handler(err_act) + + return +end subroutine psb_i2isort + +subroutine psi_i2isrx_up(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2isrx_up + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j,ix + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (x(j+1) < x(j)) then + xx = x(j) + ix = idx(j) + i=j+1 + do + x(i-1) = x(i) + idx(i-1) = idx(i) + i = i+1 + if (i>n) exit + if (x(i) >= xx) exit + end do + x(i-1) = xx + idx(i-1) = ix + endif + enddo +end subroutine psi_i2isrx_up + +subroutine psi_i2isrx_dw(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2isrx_dw + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j,ix + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (x(j+1) > x(j)) then + xx = x(j) + ix = idx(j) + i=j+1 + do + x(i-1) = x(i) + idx(i-1) = idx(i) + i = i+1 + if (i>n) exit + if (x(i) <= xx) exit + end do + x(i-1) = xx + idx(i-1) = ix + endif + enddo +end subroutine psi_i2isrx_dw + + +subroutine psi_i2isr_up(n,x) + use psb_sort_mod, psb_protect_name => psi_i2isr_up + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (x(j+1) < x(j)) then + xx = x(j) + i=j+1 + do + x(i-1) = x(i) + i = i+1 + if (i>n) exit + if (x(i) >= xx) exit + end do + x(i-1) = xx + endif + enddo +end subroutine psi_i2isr_up + +subroutine psi_i2isr_dw(n,x) + use psb_sort_mod, psb_protect_name => psi_i2isr_dw + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (x(j+1) > x(j)) then + xx = x(j) + i=j+1 + do + x(i-1) = x(i) + i = i+1 + if (i>n) exit + if (x(i) <= xx) exit + end do + x(i-1) = xx + endif + enddo +end subroutine psi_i2isr_dw + +subroutine psi_i2aisrx_up(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2aisrx_up + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j,ix + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (abs(x(j+1)) < abs(x(j))) then + xx = x(j) + ix = idx(j) + i=j+1 + do + x(i-1) = x(i) + idx(i-1) = idx(i) + i = i+1 + if (i>n) exit + if (abs(x(i)) >= abs(xx)) exit + end do + x(i-1) = xx + idx(i-1) = ix + endif + enddo +end subroutine psi_i2aisrx_up + +subroutine psi_i2aisrx_dw(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2aisrx_dw + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j,ix + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (abs(x(j+1)) > abs(x(j))) then + xx = x(j) + ix = idx(j) + i=j+1 + do + x(i-1) = x(i) + idx(i-1) = idx(i) + i = i+1 + if (i>n) exit + if (abs(x(i)) <= abs(xx)) exit + end do + x(i-1) = xx + idx(i-1) = ix + endif + enddo +end subroutine psi_i2aisrx_dw + +subroutine psi_i2aisr_up(n,x) + use psb_sort_mod, psb_protect_name => psi_i2aisr_up + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (abs(x(j+1)) < abs(x(j))) then + xx = x(j) + i=j+1 + do + x(i-1) = x(i) + i = i+1 + if (i>n) exit + if (abs(x(i)) >= abs(xx)) exit + end do + x(i-1) = xx + endif + enddo +end subroutine psi_i2aisr_up + +subroutine psi_i2aisr_dw(n,x) + use psb_sort_mod, psb_protect_name => psi_i2aisr_dw + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (abs(x(j+1)) > abs(x(j))) then + xx = x(j) + i=j+1 + do + x(i-1) = x(i) + i = i+1 + if (i>n) exit + if (abs(x(i)) <= abs(xx)) exit + end do + x(i-1) = xx + endif + enddo +end subroutine psi_i2aisr_dw + diff --git a/base/serial/sort/psb_i2_msort_impl.f90 b/base/serial/sort/psb_i2_msort_impl.f90 new file mode 100644 index 000000000..67835351d --- /dev/null +++ b/base/serial/sort/psb_i2_msort_impl.f90 @@ -0,0 +1,667 @@ + ! + ! Parallel Sparse BLAS version 3.5 + ! (C) Copyright 2006-2018 + ! Salvatore Filippone + ! Alfredo Buttari + ! + ! Redistribution and use in source and binary forms, with or without + ! modification, are permitted provided that the following conditions + ! are met: + ! 1. Redistributions of source code must retain the above copyright + ! notice, this list of conditions and the following disclaimer. + ! 2. Redistributions in binary form must reproduce the above copyright + ! notice, this list of conditions, and the following disclaimer in the + ! documentation and/or other materials provided with the distribution. + ! 3. The name of the PSBLAS group or the names of its contributors may + ! not be used to endorse or promote products derived from this + ! software without specific prior written permission. + ! + ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + ! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS + ! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ! POSSIBILITY OF SUCH DAMAGE. + ! + ! + ! + ! The merge-sort routines + ! References: + ! D. Knuth + ! The Art of Computer Programming, vol. 3 + ! Addison-Wesley + ! + ! Aho, Hopcroft, Ullman + ! Data Structures and Algorithms + ! Addison-Wesley + ! +logical function psb_i2isaperm(n,eip) + use psb_sort_mod, psb_protect_name => psb_i2isaperm + implicit none + + integer(psb_i2pk_), intent(in) :: n + integer(psb_i2pk_), intent(in) :: eip(n) + integer(psb_i2pk_), allocatable :: ip(:) + integer(psb_i2pk_) :: i,j,m, info + + + psb_i2isaperm = .true. + if (n <= 0) return + allocate(ip(n), stat=info) + if (info /= psb_success_) return + ! + ! sanity check first + ! + do i=1, n + ip(i) = eip(i) + if ((ip(i) < 1).or.(ip(i) > n)) then + write(psb_err_unit,*) 'Out of bounds in isaperm' ,ip(i), n + psb_i2isaperm = .false. + return + endif + enddo + + ! + ! now work through the cycles, by marking each successive item as negative. + ! no cycle should intersect with any other, hence the >= 1 check. + ! + do m = 1, n + i = ip(m) + if (i < 0) then + ip(m) = -i + else if (i /= m) then + j = ip(i) + ip(i) = -j + i = j + do while ((j >= 1).and.(j /= m)) + j = ip(i) + ip(i) = -j + i = j + enddo + ip(m) = abs(ip(m)) + if (j /= m) then + psb_i2isaperm = .false. + goto 9999 + endif + end if + enddo +9999 continue + + return +end function psb_i2isaperm + + +subroutine psb_i2msort_u(x,nout,dir) + use psb_sort_mod, psb_protect_name => psb_i2msort_u + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: nout + integer(psb_ipk_), optional, intent(in) :: dir + + integer(psb_ipk_) :: n, k + integer(psb_ipk_) :: err_act + + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_msort_u' + call psb_erractionsave(err_act) + + n = size(x) + + call psb_msort(x,dir=dir) + nout = min(1,n) + do k=2,n + if (x(k) /= x(nout)) then + nout = nout + 1 + x(nout) = x(k) + endif + enddo + + return + +9999 call psb_error_handler(err_act) + + return +end subroutine psb_i2msort_u + +subroutine psb_i2msort(x,ix,dir,flag,reord) + use psb_sort_mod, psb_protect_name => psb_i2msort + use psb_error_mod + use psb_ip_reord_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord + integer(psb_ipk_), optional, intent(inout) :: ix(:) + + integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_ + + integer(psb_ipk_), allocatable :: iaux(:) + integer(psb_ipk_) :: iret, info, i + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_i2msort' + call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(dir)) then + dir_ = dir + else + dir_= psb_sort_up_ + end if + select case(dir_) + case( psb_sort_up_, psb_sort_down_, psb_asort_up_, psb_asort_down_) + ! OK keep going + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + n = size(x) + + if (present(ix)) then + if (size(ix) < n) then + ierr(1) = 2; ierr(2) = size(ix); + call psb_errpush(psb_err_input_asize_invalid_i_,name,i_err=ierr) + goto 9999 + end if + if (present(flag)) then + flag_ = flag + else + flag_ = psb_sort_ovw_idx_ + end if + select case(flag_) + case(psb_sort_ovw_idx_) + do i=1,n + ix(i) = i + end do + case (psb_sort_keep_idx_) + ! OK keep going + case default + ierr(1) = 4; ierr(2) = flag_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + end if + + allocate(iaux(0:n+1),stat=info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,r_name='psb_i2_msort') + goto 9999 + endif + + select case(dir_) + case (psb_sort_up_) + call psi_i2_msort_up(n,x,iaux,iret) + case (psb_sort_down_) + call psi_i2_msort_dw(n,x,iaux,iret) + case (psb_asort_up_) + call psi_i2_amsort_up(n,x,iaux,iret) + case (psb_asort_down_) + call psi_i2_amsort_dw(n,x,iaux,iret) + end select + ! + ! Do the actual reordering, since the inner routines + ! only provide linked pointers. + ! + if (iret == 0 ) then + select case(reord_) + case(psb_sort_reord_x_) + if (present(ix)) then + call psb_ip_reord(n,x,ix,iaux) + else + call psb_ip_reord(n,x,iaux) + end if + case(psb_sort_noreord_x_) + if (present(ix)) then + call psb_ip_reord(n,ix,iaux) + else + call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix") + goto 9999 + end if + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end if + + return + +9999 call psb_error_handler(err_act) + + return + + +end subroutine psb_i2msort + +subroutine psi_i2_msort_up(n,k,l,iret) + use psb_const_mod + implicit none + integer(psb_ipk_) :: n, iret + integer(psb_i2pk_) :: k(n) + integer(psb_ipk_) :: l(0:n+1) + ! + integer(psb_ipk_) :: p,q,s,t + ! .. + iret = 0 + ! first step: we are preparing ordered sublists, exploiting + ! what order was already in the input data; negative links + ! mark the end of the sublists + l(0) = 1 + t = n + 1 + do p = 1,n - 1 + if (k(p) <= k(p+1)) then + l(p) = p + 1 + else + l(t) = - (p+1) + t = p + end if + end do + l(t) = 0 + l(n) = 0 + ! see if the input was already sorted + if (l(n+1) == 0) then + iret = 1 + return + else + l(n+1) = abs(l(n+1)) + end if + + mergepass: do + ! otherwise, begin a pass through the list. + ! throughout all the subroutine we have: + ! p, q: pointing to the sublists being merged + ! s: pointing to the most recently processed record + ! t: pointing to the end of previously completed sublist + s = 0 + t = n + 1 + p = l(s) + q = l(t) + if (q == 0) exit mergepass + + outer: do + + if (k(p) > k(q)) then + + l(s) = sign(q,l(s)) + s = q + q = l(q) + if (q > 0) then + do + if (k(p) <= k(q)) cycle outer + s = q + q = l(q) + if (q <= 0) exit + end do + end if + l(s) = p + s = t + do + t = p + p = l(p) + if (p <= 0) exit + end do + + else + + l(s) = sign(p,l(s)) + s = p + p = l(p) + if (p>0) then + do + if (k(p) > k(q)) cycle outer + s = p + p = l(p) + if (p <= 0) exit + end do + end if + ! otherwise, one sublist ended, and we append to it the rest + ! of the other one. + l(s) = q + s = t + do + t = q + q = l(q) + if (q <= 0) exit + end do + end if + + p = -p + q = -q + if (q == 0) then + l(s) = sign(p,l(s)) + l(t) = 0 + exit outer + end if + end do outer + end do mergepass + +end subroutine psi_i2_msort_up + +subroutine psi_i2_msort_dw(n,k,l,iret) + use psb_const_mod + implicit none + integer(psb_ipk_) :: n, iret + integer(psb_i2pk_) :: k(n) + integer(psb_ipk_) :: l(0:n+1) + ! + integer(psb_ipk_) :: p,q,s,t + ! .. + iret = 0 + ! first step: we are preparing ordered sublists, exploiting + ! what order was already in the input data; negative links + ! mark the end of the sublists + l(0) = 1 + t = n + 1 + do p = 1,n - 1 + if (k(p) >= k(p+1)) then + l(p) = p + 1 + else + l(t) = - (p+1) + t = p + end if + end do + l(t) = 0 + l(n) = 0 + ! see if the input was already sorted + if (l(n+1) == 0) then + iret = 1 + return + else + l(n+1) = abs(l(n+1)) + end if + + mergepass: do + ! otherwise, begin a pass through the list. + ! throughout all the subroutine we have: + ! p, q: pointing to the sublists being merged + ! s: pointing to the most recently processed record + ! t: pointing to the end of previously completed sublist + s = 0 + t = n + 1 + p = l(s) + q = l(t) + if (q == 0) exit mergepass + + outer: do + + if (k(p) < k(q)) then + + l(s) = sign(q,l(s)) + s = q + q = l(q) + if (q > 0) then + do + if (k(p) >= k(q)) cycle outer + s = q + q = l(q) + if (q <= 0) exit + end do + end if + l(s) = p + s = t + do + t = p + p = l(p) + if (p <= 0) exit + end do + + else + + l(s) = sign(p,l(s)) + s = p + p = l(p) + if (p>0) then + do + if (k(p) < k(q)) cycle outer + s = p + p = l(p) + if (p <= 0) exit + end do + end if + ! otherwise, one sublist ended, and we append to it the rest + ! of the other one. + l(s) = q + s = t + do + t = q + q = l(q) + if (q <= 0) exit + end do + end if + + p = -p + q = -q + if (q == 0) then + l(s) = sign(p,l(s)) + l(t) = 0 + exit outer + end if + end do outer + end do mergepass + +end subroutine psi_i2_msort_dw + +subroutine psi_i2_amsort_up(n,k,l,iret) + use psb_const_mod + implicit none + integer(psb_ipk_) :: n, iret + integer(psb_i2pk_) :: k(n) + integer(psb_ipk_) :: l(0:n+1) + ! + integer(psb_ipk_) :: p,q,s,t + ! .. + iret = 0 + ! first step: we are preparing ordered sublists, exploiting + ! what order was already in the input data; negative links + ! mark the end of the sublists + l(0) = 1 + t = n + 1 + do p = 1,n - 1 + if (abs(k(p)) <= abs(k(p+1))) then + l(p) = p + 1 + else + l(t) = - (p+1) + t = p + end if + end do + l(t) = 0 + l(n) = 0 + ! see if the input was already sorted + if (l(n+1) == 0) then + iret = 1 + return + else + l(n+1) = abs(l(n+1)) + end if + + mergepass: do + ! otherwise, begin a pass through the list. + ! throughout all the subroutine we have: + ! p, q: pointing to the sublists being merged + ! s: pointing to the most recently processed record + ! t: pointing to the end of previously completed sublist + s = 0 + t = n + 1 + p = l(s) + q = l(t) + if (q == 0) exit mergepass + + outer: do + + if (abs(k(p)) > abs(k(q))) then + + l(s) = sign(q,l(s)) + s = q + q = l(q) + if (q > 0) then + do + if (abs(k(p)) <= abs(k(q))) cycle outer + s = q + q = l(q) + if (q <= 0) exit + end do + end if + l(s) = p + s = t + do + t = p + p = l(p) + if (p <= 0) exit + end do + + else + + l(s) = sign(p,l(s)) + s = p + p = l(p) + if (p>0) then + do + if (abs(k(p)) > abs(k(q))) cycle outer + s = p + p = l(p) + if (p <= 0) exit + end do + end if + ! otherwise, one sublist ended, and we append to it the rest + ! of the other one. + l(s) = q + s = t + do + t = q + q = l(q) + if (q <= 0) exit + end do + end if + + p = -p + q = -q + if (q == 0) then + l(s) = sign(p,l(s)) + l(t) = 0 + exit outer + end if + end do outer + end do mergepass + +end subroutine psi_i2_amsort_up + +subroutine psi_i2_amsort_dw(n,k,l,iret) + use psb_const_mod + implicit none + integer(psb_ipk_) :: n, iret + integer(psb_i2pk_) :: k(n) + integer(psb_ipk_) :: l(0:n+1) + ! + integer(psb_ipk_) :: p,q,s,t + ! .. + iret = 0 + ! first step: we are preparing ordered sublists, exploiting + ! what order was already in the input data; negative links + ! mark the end of the sublists + l(0) = 1 + t = n + 1 + do p = 1,n - 1 + if (abs(k(p)) >= abs(k(p+1))) then + l(p) = p + 1 + else + l(t) = - (p+1) + t = p + end if + end do + l(t) = 0 + l(n) = 0 + ! see if the input was already sorted + if (l(n+1) == 0) then + iret = 1 + return + else + l(n+1) = abs(l(n+1)) + end if + + mergepass: do + ! otherwise, begin a pass through the list. + ! throughout all the subroutine we have: + ! p, q: pointing to the sublists being merged + ! s: pointing to the most recently processed record + ! t: pointing to the end of previously completed sublist + s = 0 + t = n + 1 + p = l(s) + q = l(t) + if (q == 0) exit mergepass + + outer: do + + if (abs(k(p)) < abs(k(q))) then + + l(s) = sign(q,l(s)) + s = q + q = l(q) + if (q > 0) then + do + if (abs(k(p)) >= abs(k(q))) cycle outer + s = q + q = l(q) + if (q <= 0) exit + end do + end if + l(s) = p + s = t + do + t = p + p = l(p) + if (p <= 0) exit + end do + + else + + l(s) = sign(p,l(s)) + s = p + p = l(p) + if (p>0) then + do + if (abs(k(p)) < abs(k(q))) cycle outer + s = p + p = l(p) + if (p <= 0) exit + end do + end if + ! otherwise, one sublist ended, and we append to it the rest + ! of the other one. + l(s) = q + s = t + do + t = q + q = l(q) + if (q <= 0) exit + end do + end if + + p = -p + q = -q + if (q == 0) then + l(s) = sign(p,l(s)) + l(t) = 0 + exit outer + end if + end do outer + end do mergepass + +end subroutine psi_i2_amsort_dw + + diff --git a/base/serial/sort/psb_i2_qsort_impl.f90 b/base/serial/sort/psb_i2_qsort_impl.f90 new file mode 100644 index 000000000..cc0ee95bb --- /dev/null +++ b/base/serial/sort/psb_i2_qsort_impl.f90 @@ -0,0 +1,1472 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! The quicksort routines +! References: +! D. Knuth +! The Art of Computer Programming, vol. 3 +! Addison-Wesley +! +! Aho, Hopcroft, Ullman +! Data Structures and Algorithms +! Addison-Wesley +! +function psb_i2bsrch(key,n,v,dir,find) result(ipos) + use psb_sort_mod, psb_protect_name => psb_i2bsrch + implicit none + integer(psb_ipk_) :: ipos, n + integer(psb_i2pk_) :: key + integer(psb_i2pk_) :: v(:) + integer(psb_ipk_), optional :: dir, find + + integer(psb_ipk_) :: lb, ub, m, i, k, dir_, find_ + + if (present(dir)) then + dir_ = dir + else + dir_ = psb_sort_up_ + end if + if (present(find)) then + find_ = find + else + find_ = psb_find_any_ + end if + + ipos = -1 + if (dir_ == psb_sort_up_) then + if (n<=5) then + do m=1,n + if (key == v(m)) then + ipos = m + exit + end if + enddo + + else + + lb = 1 + ub = n + + do while (lb.le.ub) + m = (lb+ub)/2 + if (key.eq.v(m)) then + ipos = m + exit + else if (key < v(m)) then + ub = m-1 + else + lb = m + 1 + end if + enddo + end if + select case(find_) + case (psb_find_any_ ) + ! do nothing + case (psb_find_last_le_ ) + if ((m>n) .or. (m<1)) then + m = n + do while (m>=1) + if (v(m)<=key) exit + m = m - 1 + end do + else + do while (mn) .or. (m<1)) then + m = 1 + do while (m<=n) + if (v(m)>=key) exit + m = m + 1 + end do + else + do while (m>1) + if (v(m-1)>=key) then + m=m-1 + else + exit + end if + end do + end if + ipos = max(m,1) + + case default + write(0,*) 'Wrong FIND' + end select + + + else if (dir_ == psb_sort_down_) then + write(0,*) ' bsrch on sort down not implemented' + else + write(0,*) ' bsrch wrong DIR ',dir_,psb_sort_up_,psb_sort_down_ + end if + return +end function psb_i2bsrch + +function psb_i2ssrch(key,n,v) result(ipos) + use psb_sort_mod, psb_protect_name => psb_i2ssrch + implicit none + integer(psb_ipk_) :: ipos, n + integer(psb_i2pk_) :: key + integer(psb_i2pk_) :: v(:) + + integer(psb_ipk_) :: i + + ipos = -1 + do i=1,n + if (key.eq.v(i)) then + ipos = i + return + end if + enddo + + return +end function psb_i2ssrch + +subroutine psb_i2qsort(x,ix,dir,flag,reord) + use psb_sort_mod, psb_protect_name => psb_i2qsort + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord + integer(psb_ipk_), optional, intent(inout) :: ix(:) + + integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_ + integer(psb_ipk_) :: n + integer(psb_i2pk_), allocatable :: tx(:) + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_i2qsort' + call psb_erractionsave(err_act) + + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then + flag_ = flag + else + flag_ = psb_sort_ovw_idx_ + end if + select case(flag_) + case( psb_sort_ovw_idx_, psb_sort_keep_idx_) + ! OK keep going + case default + ierr(1) = 4; ierr(2) = flag_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + if (present(dir)) then + dir_ = dir + else + dir_= psb_sort_up_ + end if + + n = size(x) + + if (present(ix)) then + if (size(ix) < n) then + ierr(1) = 2; ierr(2) = size(ix); + call psb_errpush(psb_err_input_asize_invalid_i_,name,i_err=ierr) + goto 9999 + end if + if (flag_==psb_sort_ovw_idx_) then + do i=1,n + ix(i) = i + end do + end if + + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_i2qsrx_up(n,x,ix) + case (psb_sort_down_) + call psi_i2qsrx_dw(n,x,ix) + case (psb_asort_up_) + call psi_i2aqsrx_up(n,x,ix) + case (psb_asort_down_) + call psi_i2aqsrx_dw(n,x,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_i2qsrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_i2qsrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_i2aqsrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_i2aqsrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + select case(dir_) + case (psb_sort_up_) + call psi_i2qsr_up(n,x) + case (psb_sort_down_) + call psi_i2qsr_dw(n,x) + case (psb_asort_up_) + call psi_i2aqsr_up(n,x) + case (psb_asort_down_) + call psi_i2aqsr_dw(n,x) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + end if + + return + +9999 call psb_error_handler(err_act) + + return +end subroutine psb_i2qsort + +subroutine psi_i2qsrx_up(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2qsrx_up + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk, xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = x(lpiv) + if (piv < x(i)) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + if (piv > x(j)) then + xt = x(j) + ixt = idx(j) + x(j) = x(lpiv) + idx(j) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + if (piv < x(i)) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + ! + ! now piv is correct; place it into first location + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + + i = ilx - 1 + j = iux + 1 + + outer_up: do + in_up1: do + i = i + 1 + xk = x(i) + if (xk >= piv) exit in_up1 + end do in_up1 + ! + ! Ensure finite termination for next loop + ! + xt = xk + x(i) = piv + in_up2:do + j = j - 1 + xk = x(j) + if (xk <= piv) exit in_up2 + end do in_up2 + x(i) = xt + + if (j > i) then + xt = x(i) + ixt = idx(i) + x(i) = x(j) + idx(i) = idx(j) + x(j) = xt + idx(j) = ixt + else + exit outer_up + end if + end do outer_up + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2qsrx',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isrx_up(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isrx_up(n2,x(i:iux),idx(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isrx_up(n2,x(i:iux),idx(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isrx_up(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + endif + enddo + else + call psi_i2isrx_up(n,x,idx) + endif +end subroutine psi_i2qsrx_up + +subroutine psi_i2qsrx_dw(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2qsrx_dw + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk, xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = x(lpiv) + if (piv > x(i)) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + if (piv < x(j)) then + xt = x(j) + ixt = idx(j) + x(j) = x(lpiv) + idx(j) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + if (piv > x(i)) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + ! + ! now piv is correct; place it into first location + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + + i = ilx - 1 + j = iux + 1 + + outer_dw: do + in_dw1: do + i = i + 1 + xk = x(i) + if (xk <= piv) exit in_dw1 + end do in_dw1 + ! + ! Ensure finite termination for next loop + ! + xt = xk + x(i) = piv + in_dw2:do + j = j - 1 + xk = x(j) + if (xk >= piv) exit in_dw2 + end do in_dw2 + x(i) = xt + + if (j > i) then + xt = x(i) + ixt = idx(i) + x(i) = x(j) + idx(i) = idx(j) + x(j) = xt + idx(j) = ixt + else + exit outer_dw + end if + end do outer_dw + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2qsrx',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isrx_dw(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isrx_dw(n2,x(i:iux),idx(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isrx_dw(n2,x(i:iux),idx(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isrx_dw(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + endif + enddo + else + call psi_i2isrx_dw(n,x,idx) + endif + +end subroutine psi_i2qsrx_dw + +subroutine psi_i2qsr_up(n,x) + use psb_sort_mod, psb_protect_name => psi_i2qsr_up + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + ! .. + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xt, xk + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = x(lpiv) + if (piv < x(i)) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + if (piv > x(j)) then + xt = x(j) + x(j) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + if (piv < x(i)) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + ! + ! now piv is correct; place it into first location + + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + + i = ilx - 1 + j = iux + 1 + + outer_up: do + in_up1: do + i = i + 1 + xk = x(i) + if (xk >= piv) exit in_up1 + end do in_up1 + ! + ! Ensure finite termination for next loop + ! + xt = xk + x(i) = piv + in_up2:do + j = j - 1 + xk = x(j) + if (xk <= piv) exit in_up2 + end do in_up2 + x(i) = xt + + if (j > i) then + xt = x(i) + x(i) = x(j) + x(j) = xt + else + exit outer_up + end if + end do outer_up + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2qsr',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isr_up(n1,x(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isr_up(n2,x(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isr_up(n2,x(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isr_up(n1,x(ilx:i-1)) + endif + endif + enddo + else + call psi_i2isr_up(n,x) + endif + +end subroutine psi_i2qsr_up + +subroutine psi_i2qsr_dw(n,x) + use psb_sort_mod, psb_protect_name => psi_i2qsr_dw + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + ! .. + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xt, xk + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = x(lpiv) + if (piv > x(i)) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + if (piv < x(j)) then + xt = x(j) + x(j) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + if (piv > x(i)) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + ! + ! now piv is correct; place it into first location + + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + + i = ilx - 1 + j = iux + 1 + + outer_dw: do + in_dw1: do + i = i + 1 + xk = x(i) + if (xk <= piv) exit in_dw1 + end do in_dw1 + ! + ! Ensure finite termination for next loop + ! + xt = xk + x(i) = piv + in_dw2:do + j = j - 1 + xk = x(j) + if (xk >= piv) exit in_dw2 + end do in_dw2 + x(i) = xt + + if (j > i) then + xt = x(i) + x(i) = x(j) + x(j) = xt + else + exit outer_dw + end if + end do outer_dw + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_, & + & r_name='psi_i2qsr',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isr_dw(n1,x(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isr_dw(n2,x(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isr_dw(n2,x(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isr_dw(n1,x(ilx:i-1)) + endif + endif + enddo + else + call psi_i2isr_dw(n,x) + endif + +end subroutine psi_i2qsr_dw + +subroutine psi_i2aqsrx_up(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2aqsrx_up + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk + integer(psb_i2pk_) :: xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = abs(x(lpiv)) + if (piv < abs(x(i))) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + if (piv > abs(x(j))) then + xt = x(j) + ixt = idx(j) + x(j) = x(lpiv) + idx(j) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + if (piv < abs(x(i))) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + ! + ! now piv is correct; place it into first location + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + + i = ilx - 1 + j = iux + 1 + + outer_up: do + in_up1: do + i = i + 1 + xk = abs(x(i)) + if (xk >= piv) exit in_up1 + end do in_up1 + ! + ! Ensure finite termination for next loop + ! + xt = x(i) + x(i) = piv + in_up2:do + j = j - 1 + xk = abs(x(j)) + if (xk <= piv) exit in_up2 + end do in_up2 + x(i) = xt + + if (j > i) then + xt = x(i) + ixt = idx(i) + x(i) = x(j) + idx(i) = idx(j) + x(j) = xt + idx(j) = ixt + else + exit outer_up + end if + end do outer_up + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_, & + & r_name='psi_i2aqsrx',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisrx_up(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisrx_up(n2,x(i:iux),idx(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisrx_up(n2,x(i:iux),idx(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisrx_up(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + endif + enddo + else + call psi_i2aisrx_up(n,x,idx) + endif + + +end subroutine psi_i2aqsrx_up + +subroutine psi_i2aqsrx_dw(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2aqsrx_dw + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk + integer(psb_i2pk_) :: xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = abs(x(lpiv)) + if (piv > abs(x(i))) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + if (piv < abs(x(j))) then + xt = x(j) + ixt = idx(j) + x(j) = x(lpiv) + idx(j) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + if (piv > abs(x(i))) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + ! + ! now piv is correct; place it into first location + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + + i = ilx - 1 + j = iux + 1 + + outer_dw: do + in_dw1: do + i = i + 1 + xk = abs(x(i)) + if (xk <= piv) exit in_dw1 + end do in_dw1 + ! + ! Ensure finite termination for next loop + ! + xt = x(i) + x(i) = piv + in_dw2:do + j = j - 1 + xk = abs(x(j)) + if (xk >= piv) exit in_dw2 + end do in_dw2 + x(i) = xt + + if (j > i) then + xt = x(i) + ixt = idx(i) + x(i) = x(j) + idx(i) = idx(j) + x(j) = xt + idx(j) = ixt + else + exit outer_dw + end if + end do outer_dw + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2aqsrx',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisrx_dw(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisrx_dw(n2,x(i:iux),idx(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisrx_dw(n2,x(i:iux),idx(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisrx_dw(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + endif + enddo + else + call psi_i2aisrx_dw(n,x,idx) + endif + +end subroutine psi_i2aqsrx_dw + +subroutine psi_i2aqsr_up(n,x) + use psb_sort_mod, psb_protect_name => psi_i2aqsr_up + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk + integer(psb_i2pk_) :: xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = abs(x(lpiv)) + if (piv < abs(x(i))) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + if (piv > abs(x(j))) then + xt = x(j) + x(j) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + if (piv < abs(x(i))) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + ! + ! now piv is correct; place it into first location + + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + + i = ilx - 1 + j = iux + 1 + + outer_up: do + in_up1: do + i = i + 1 + xk = abs(x(i)) + if (xk >= piv) exit in_up1 + end do in_up1 + ! + ! Ensure finite termination for next loop + ! + xt = x(i) + x(i) = piv + in_up2:do + j = j - 1 + xk = abs(x(j)) + if (xk <= piv) exit in_up2 + end do in_up2 + x(i) = xt + + if (j > i) then + xt = x(i) + x(i) = x(j) + x(j) = xt + else + exit outer_up + end if + end do outer_up + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_, & + & r_name='psi_i2qasr',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisr_up(n1,x(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisr_up(n2,x(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisr_up(n2,x(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisr_up(n1,x(ilx:i-1)) + endif + endif + enddo + else + call psi_i2aisr_up(n,x) + endif + +end subroutine psi_i2aqsr_up + +subroutine psi_i2aqsr_dw(n,x) + use psb_sort_mod, psb_protect_name => psi_i2aqsr_dw + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk + integer(psb_i2pk_) :: xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = abs(x(lpiv)) + if (piv > abs(x(i))) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + if (piv < abs(x(j))) then + xt = x(j) + x(j) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + if (piv > abs(x(i))) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + ! + ! now piv is correct; place it into first location + + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + + i = ilx - 1 + j = iux + 1 + + outer_dw: do + in_dw1: do + i = i + 1 + xk = abs(x(i)) + if (xk <= piv) exit in_dw1 + end do in_dw1 + ! + ! Ensure finite termination for next loop + ! + xt = x(i) + x(i) = piv + in_dw2:do + j = j - 1 + xk = abs(x(j)) + if (xk >= piv) exit in_dw2 + end do in_dw2 + x(i) = xt + + if (j > i) then + xt = x(i) + x(i) = x(j) + x(j) = xt + else + exit outer_dw + end if + end do outer_dw + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2qasr',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisr_dw(n1,x(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisr_dw(n2,x(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisr_dw(n2,x(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisr_dw(n1,x(ilx:i-1)) + endif + endif + enddo + else + call psi_i2aisr_dw(n,x) + endif + +end subroutine psi_i2aqsr_dw + + diff --git a/base/tools/Makefile b/base/tools/Makefile index 771e85fc4..1cd67af5b 100644 --- a/base/tools/Makefile +++ b/base/tools/Makefile @@ -14,6 +14,7 @@ FOBJS = psb_cdall.o psb_cdals.o psb_cdalv.o psb_cd_inloc.o psb_cdins.o psb_cdprt psb_dallc.o psb_dasb.o psb_dfree.o psb_dins.o \ psb_callc.o psb_casb.o psb_cfree.o psb_cins.o \ psb_zallc.o psb_zasb.o psb_zfree.o psb_zins.o \ + psb_i2allc_a.o psb_i2asb_a.o psb_i2free_a.o psb_i2ins_a.o \ psb_mallc_a.o psb_masb_a.o psb_mfree_a.o psb_mins_a.o \ psb_eallc_a.o psb_easb_a.o psb_efree_a.o psb_eins_a.o \ psb_sallc_a.o psb_sasb_a.o psb_sfree_a.o psb_sins_a.o \ @@ -33,7 +34,7 @@ MPFOBJS = psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o \ psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o \ psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o \ - psb_e_remote_vect.o psb_m_remote_vect.o + psb_e_remote_vect.o psb_m_remote_vect.o psb_i2_remote_vect.o LIBDIR=.. INCDIR=.. From e717d2d2282cbaf7f142104aefcebe32703b8702 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 24 Mar 2026 16:11:02 +0100 Subject: [PATCH 144/175] Fix makefile dependencies --- base/modules/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/base/modules/Makefile b/base/modules/Makefile index ba665b57c..d7f6a484c 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -247,6 +247,7 @@ auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o \ auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o : psb_realloc_mod.o psb_const_mod.o +auxil/psb_i2_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_i2_hsort_mod.o auxil/psb_i_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_i2_hsort_mod.o auxil/psb_i_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_l_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o From bc9adfeb3e58a08c0504d41fcff9bcd7c367263d Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 24 Mar 2026 16:44:28 +0100 Subject: [PATCH 145/175] Fix CMakeLists --- base/CMakeLists.txt | 60 +++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt index 5371b5304..75743ab36 100644 --- a/base/CMakeLists.txt +++ b/base/CMakeLists.txt @@ -1,9 +1,9 @@ set(PSB_base_source_files comm/psb_dovrl_a.f90 comm/psb_dovrl.f90 -# comm/psb_i2halo_a.f90 + comm/psb_i2halo_a.f90 comm/internals/psi_zswaptran.F90 -# comm/internals/psi_i2ovrl_upd_a.f90 + comm/internals/psi_i2ovrl_upd_a.f90 comm/internals/psi_lovrl_save.f90 comm/internals/psi_movrl_save_a.f90 comm/internals/psi_sovrl_restr_a.f90 @@ -16,7 +16,7 @@ set(PSB_base_source_files comm/internals/psi_lovrl_upd.f90 comm/internals/psi_dswapdata_a.F90 comm/internals/psi_movrl_upd_a.f90 -# comm/internals/psi_i2swaptran_a.F90 + comm/internals/psi_i2swaptran_a.F90 comm/internals/psi_dswaptran.F90 comm/internals/psi_covrl_save_a.f90 comm/internals/psi_eovrl_restr_a.f90 @@ -31,7 +31,7 @@ set(PSB_base_source_files comm/internals/psi_sswaptran.F90 comm/internals/psi_lswaptran.F90 comm/internals/psi_mswaptran_a.F90 -# comm/internals/psi_i2ovrl_restr_a.f90 + comm/internals/psi_i2ovrl_restr_a.f90 comm/internals/psi_covrl_restr.f90 comm/internals/psi_mswapdata_a.F90 comm/internals/psi_zovrl_restr_a.f90 @@ -49,14 +49,14 @@ set(PSB_base_source_files comm/internals/psi_zswapdata_a.F90 comm/internals/psi_dovrl_save.f90 comm/internals/psi_covrl_save.f90 -# comm/internals/psi_i2swapdata_a.F90 + comm/internals/psi_i2swapdata_a.F90 comm/internals/psi_dovrl_upd.f90 comm/internals/psi_eovrl_save_a.f90 comm/internals/psi_zovrl_upd_a.f90 comm/internals/psi_zswapdata.F90 comm/internals/psi_covrl_upd.f90 comm/internals/psi_cswaptran.F90 -# comm/internals/psi_i2ovrl_save_a.f90 + comm/internals/psi_i2ovrl_save_a.f90 comm/internals/psi_sovrl_upd.f90 comm/internals/psi_eswapdata_a.F90 comm/internals/psi_movrl_restr_a.f90 @@ -82,9 +82,9 @@ set(PSB_base_source_files comm/psb_zhalo.f90 comm/psb_movrl_a.f90 comm/psb_chalo_a.f90 -# comm/psb_i2scatter_a.F90 + comm/psb_i2scatter_a.F90 comm/psb_sgather_a.f90 -# comm/psb_i2ovrl_a.f90 + comm/psb_i2ovrl_a.f90 comm/psb_zovrl_a.f90 comm/psb_covrl.f90 comm/psb_shalo.f90 @@ -100,7 +100,7 @@ set(PSB_base_source_files comm/psb_zhalo_a.f90 comm/psb_sscatter_a.F90 comm/psb_lscatter.F90 -# comm/psb_i2gather_a.f90 + comm/psb_i2gather_a.f90 comm/psb_ihalo.f90 comm/psb_iovrl.f90 comm/psb_zspgather.F90 @@ -144,7 +144,7 @@ set(PSB_base_source_files tools/psb_sins.f90 tools/psb_zspasb.f90 tools/psb_zspalloc.f90 -# tools/psb_i2_remote_vect.F90 + tools/psb_i2_remote_vect.F90 tools/psb_sfree_a.f90 tools/psb_cdprt.f90 tools/psb_c_glob_transpose.F90 @@ -160,7 +160,7 @@ set(PSB_base_source_files tools/psb_zallc_a.f90 tools/psb_d_map.f90 tools/psb_lfree.f90 -# tools/psb_i2ins_a.f90 + tools/psb_i2ins_a.f90 tools/psb_s_remap.F90 tools/psb_cspalloc.f90 tools/psb_glob_to_loc.f90 @@ -177,9 +177,9 @@ set(PSB_base_source_files tools/psb_sgetelem.f90 tools/psb_cspfree.f90 tools/psb_cins.f90 -# tools/psb_i2free_a.f90 + tools/psb_i2free_a.f90 tools/psb_dspins.F90 -# tools/psb_i2asb_a.f90 + tools/psb_i2asb_a.f90 tools/psb_dsphalo.F90 tools/psb_d_glob_transpose.F90 tools/psb_c_par_csr_spspmm.f90 @@ -265,7 +265,7 @@ set(PSB_base_source_files tools/psb_zspins.F90 tools/psb_zins_a.f90 tools/psb_cdcpy.F90 -# tools/psb_i2allc_a.f90 + tools/psb_i2allc_a.f90 tools/psb_dallc.f90 tools/psb_cd_renum_block.F90 tools/psb_dasb_a.f90 @@ -351,7 +351,7 @@ set(PSB_base_source_files serial/psb_ssymbmm.f90 serial/psb_cgeprt.f90 serial/psb_sgeprt.f90 -# serial/psi_i2_serial_impl.F90 + serial/psi_i2_serial_impl.F90 serial/psi_e_serial_impl.F90 serial/psb_zsymbmm.f90 serial/psb_cspspmm.F90 @@ -430,11 +430,10 @@ set(PSB_base_source_files psblas/psb_cinv_vect.f90 psblas/psb_zasum.f90 modules/comm/psi_z_comm_v_mod.f90 -# modules/comm/psb_i2_comm_a_mod.f90 - modules/comm/psb_m_comm_a_mod.f90 + modules/comm/psb_m_comm_a_mod.f90 modules/comm/psb_z_linmap_mod.f90 modules/comm/psi_s_comm_a_mod.f90 - modules/comm/psi_i2_comm_a_mod.f90 + modules/comm/psb_i2_comm_a_mod.f90 modules/comm/psi_m_comm_a_mod.f90 modules/comm/psi_l_comm_v_mod.f90 modules/comm/psb_comm_mod.f90 @@ -462,7 +461,7 @@ set(PSB_base_source_files modules/comm/psb_linmap_mod.f90 modules/comm/psb_z_comm_a_mod.f90 modules/comm/psi_c_comm_a_mod.f90 -# modules/auxil/psb_i2_isort_mod.f90 + modules/auxil/psb_i2_isort_mod.f90 modules/auxil/psb_z_ip_reord_mod.F90 modules/auxil/psi_s_serial_mod.f90 modules/auxil/psb_s_hsort_x_mod.f90 @@ -470,7 +469,7 @@ set(PSB_base_source_files modules/auxil/psb_d_hsort_mod.f90 modules/auxil/psi_alcx_mod.f90 modules/auxil/psb_e_ip_reord_mod.F90 -# modules/auxil/psb_i2_msort_mod.f90 + modules/auxil/psb_i2_msort_mod.f90 modules/auxil/psb_rb_idx_tree_mod.f90 modules/auxil/psb_m_isort_mod.f90 modules/auxil/psb_e_msort_mod.f90 @@ -489,14 +488,15 @@ set(PSB_base_source_files modules/auxil/psb_z_isort_mod.f90 modules/auxil/psb_e_hsort_mod.f90 modules/auxil/psi_m_serial_mod.f90 -# modules/auxil/psi_i2_serial_mod.f90 + modules/auxil/psi_i2_serial_mod.f90 + modules/auxil/psb_i2_hsort_x_mod.f90 modules/auxil/psb_s_isort_mod.f90 modules/auxil/psb_e_realloc_mod.F90 modules/auxil/psb_c_hsort_mod.f90 modules/auxil/psb_z_msort_mod.f90 modules/auxil/psi_d_serial_mod.f90 modules/auxil/psb_z_qsort_mod.f90 -# modules/auxil/psb_i2_hsort_mod.f90 + modules/auxil/psb_i2_hsort_mod.f90 modules/auxil/psb_m_msort_mod.f90 modules/auxil/psb_m_ip_reord_mod.F90 modules/auxil/psb_string_mod.f90 @@ -509,14 +509,14 @@ set(PSB_base_source_files modules/auxil/psb_m_hsort_mod.f90 modules/auxil/psb_z_realloc_mod.F90 modules/auxil/psb_z_rb_idx_tree_mod.f90 -# modules/auxil/psb_i2_ip_reord_mod.F90 -# modules/auxil/psb_i2_realloc_mod.F90 + modules/auxil/psb_i2_ip_reord_mod.F90 + modules/auxil/psb_i2_realloc_mod.F90 modules/auxil/psb_s_rb_idx_tree_mod.f90 modules/auxil/psb_c_hsort_x_mod.f90 modules/auxil/psb_s_ip_reord_mod.F90 modules/auxil/psb_d_isort_mod.f90 modules/auxil/psi_z_serial_mod.f90 -# modules/auxil/psb_i2_qsort_mod.f90 + modules/auxil/psb_i2_qsort_mod.f90 modules/auxil/psb_d_msort_mod.f90 modules/auxil/psb_c_qsort_mod.f90 modules/auxil/psb_z_hsort_x_mod.f90 @@ -533,7 +533,7 @@ set(PSB_base_source_files modules/psi_l_mod.F90 modules/penv/psi_d_collective_mod.F90 modules/penv/psi_m_p2p_mod.F90 -# modules/penv/psi_i2_collective_mod.F90 + modules/penv/psi_i2_collective_mod.F90 modules/penv/psi_s_p2p_mod.F90 modules/penv/psi_e_p2p_mod.F90 modules/penv/psi_m_collective_mod.F90 @@ -543,7 +543,7 @@ set(PSB_base_source_files modules/penv/psi_z_p2p_mod.F90 modules/penv/psi_c_collective_mod.F90 modules/penv/psi_collective_mod.F90 -# modules/penv/psi_i2_p2p_mod.F90 + modules/penv/psi_i2_p2p_mod.F90 modules/penv/psi_c_p2p_mod.F90 modules/penv/psi_e_collective_mod.F90 modules/penv/psi_z_collective_mod.F90 @@ -562,7 +562,7 @@ set(PSB_base_source_files modules/tools/psb_d_tools_mod.F90 modules/tools/psb_c_tools_mod.F90 modules/tools/psb_e_tools_a_mod.f90 -# modules/tools/psb_i2_tools_a_mod.f90 + modules/tools/psb_i2_tools_a_mod.f90 modules/tools/psb_c_tools_a_mod.f90 modules/tools/psb_z_tools_mod.F90 modules/tools/psb_l_tools_mod.F90 @@ -588,6 +588,7 @@ set(PSB_base_source_files modules/serial/psb_s_base_mat_mod.F90 modules/serial/psb_base_mat_mod.F90 modules/serial/psb_i_base_vect_mod.F90 + modules/serial/psb_i2_base_vect_mod.F90 modules/serial/psb_s_vect_mod.F90 modules/serial/psb_s_base_vect_mod.F90 modules/serial/psb_d_base_vect_mod.F90 @@ -596,7 +597,8 @@ set(PSB_base_source_files modules/serial/psb_c_vect_mod.F90 modules/serial/psb_d_mat_mod.F90 modules/serial/psb_s_mat_mod.F90 - modules/serial/psb_i_vect_mod.F90 + modules/serial/psb_i2_vect_mod.F90 + modules/serial/psb_i_vect_mod.F90 modules/serial/psb_d_vect_mod.F90 modules/serial/psb_c_base_vect_mod.F90 modules/serial/psb_vect_mod.f90 From 0a97ea2924b0c6f50ce74c02f9acdf7763a51874 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 26 Mar 2026 15:22:23 +0100 Subject: [PATCH 146/175] Fix makefile --- CMakeLists.txt | 9 ++++----- base/modules/Makefile | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 91005a799..4b265b696 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -848,12 +848,11 @@ endif() # Set the Fortran module output directory for all targets -set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/modules) -#set(CMAKE_Fortran_MODULE_DIRECTORY "${CMAKE_BINARY_DIR}/include") +#set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/modules) - -message(STATUS "fortran module direcotry ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_INCLUDEDIR}") +set(CMAKE_Fortran_MODULE_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_MODULDIR}") +message(STATUS "fortran module directory ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_MODULDIR}") include_directories(${MPI_Fortran_INCLUDE_PATH}) @@ -1274,7 +1273,7 @@ install(DIRECTORY ${CMAKE_BINARY_DIR}/include/ # Install module files install(DIRECTORY ${CMAKE_BINARY_DIR}/modules/ - DESTINATION "${CMAKE_INSTALL_MODULDIR}" # This will place .mod files in /modules + DESTINATION "${CMAKE_Fortran_MODULE_DIRECTORY}" # This will place .mod files in /modules FILES_MATCHING PATTERN "*.mod" ) diff --git a/base/modules/Makefile b/base/modules/Makefile index d7f6a484c..ab164d8c3 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -305,7 +305,7 @@ serial/psb_d_vect_mod.o: serial/psb_d_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_c_vect_mod.o: serial/psb_c_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_z_vect_mod.o: serial/psb_z_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o: serial/psb_mat_mod.o auxil/psb_string_mod.o auxil/psb_sort_mod.o auxil/psi_serial_mod.o -serial/psb_vect_mod.o: serial/psb_i_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_vect_mod.o +serial/psb_vect_mod.o: serial/psb_i2_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_vect_mod.o auxil/psb_s_rb_idx_tree_mod.o: serial/psb_s_csr_mat_mod.o psb_realloc_mod.o auxil/psb_d_rb_idx_tree_mod.o: serial/psb_d_csr_mat_mod.o psb_realloc_mod.o From eae1311c99fe751ef7632de6d33fd5b4d91c729f Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 26 Mar 2026 15:47:02 +0100 Subject: [PATCH 147/175] Improved dependencies. --- base/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt index 75743ab36..5fcf9cbbd 100644 --- a/base/CMakeLists.txt +++ b/base/CMakeLists.txt @@ -434,6 +434,8 @@ set(PSB_base_source_files modules/comm/psb_z_linmap_mod.f90 modules/comm/psi_s_comm_a_mod.f90 modules/comm/psb_i2_comm_a_mod.f90 + modules/comm/psi_i2_comm_a_mod.f90 + modules/comm/psi_i2_comm_v_mod.f90 modules/comm/psi_m_comm_a_mod.f90 modules/comm/psi_l_comm_v_mod.f90 modules/comm/psb_comm_mod.f90 @@ -618,6 +620,7 @@ set(PSB_base_source_files modules/psb_penv_mod.F90 modules/psb_error_mod.F90 modules/psb_timers_mod.f90 + modules/psi_i2_mod.F90 modules/psi_i_mod.F90 modules/psi_z_mod.F90 modules/desc/psb_desc_const_mod.f90 From 116219b6fedeee89cf301e66a50d9879dbab8791 Mon Sep 17 00:00:00 2001 From: Fabio Durastante Date: Thu, 26 Mar 2026 16:00:36 +0100 Subject: [PATCH 148/175] Added support for CSC matrices in c interfaces --- cbind/base/psb_c_tools_cbind_mod.F90 | 7 ++++++- cbind/base/psb_d_tools_cbind_mod.F90 | 7 ++++++- cbind/base/psb_s_tools_cbind_mod.F90 | 7 ++++++- cbind/base/psb_z_tools_cbind_mod.F90 | 7 ++++++- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index 0163f544a..768492836 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -440,6 +440,7 @@ contains #endif type(psb_c_ell_sparse_mat), target :: aell type(psb_c_csr_sparse_mat), target :: acsr + type(psb_c_csc_sparse_mat), target :: acsc type(psb_c_coo_sparse_mat), target :: acoo type(psb_c_hll_sparse_mat), target :: ahll type(psb_c_hdia_sparse_mat), target :: ahdia @@ -484,6 +485,8 @@ contains amold => ahll case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -498,6 +501,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -514,7 +519,7 @@ contains & upd=upd,mold=arsb) #endif #endif - case('ELL','HLL','CSR','DNS') + case('ELL','HLL','CSR','DNS','CSC') call psb_spasb(ap,descp,info,upd=upd,mold=amold) #if defined(PSB_HAVE_CUDA) case('ELG','HLG','CSRG') diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index f80377732..daa280262 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -440,6 +440,7 @@ contains #endif type(psb_d_ell_sparse_mat), target :: aell type(psb_d_csr_sparse_mat), target :: acsr + type(psb_d_csc_sparse_mat), target :: acsc type(psb_d_coo_sparse_mat), target :: acoo type(psb_d_hll_sparse_mat), target :: ahll type(psb_d_hdia_sparse_mat), target :: ahdia @@ -489,6 +490,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -504,6 +507,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -520,7 +525,7 @@ contains & upd=upd,mold=arsb) #endif #endif - case('ELL','HLL','CSR','DNS') + case('ELL','HLL','CSR','DNS','CSC') call psb_spasb(ap,descp,info,upd=upd,mold=amold) case('HDIA') call psb_spasb(ap,descp,info,upd=upd,mold=amold) diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 43ac426e4..2bc6b2d66 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -440,6 +440,7 @@ contains #endif type(psb_s_ell_sparse_mat), target :: aell type(psb_s_csr_sparse_mat), target :: acsr + type(psb_s_csc_sparse_mat), target :: acsc type(psb_s_coo_sparse_mat), target :: acoo type(psb_s_hll_sparse_mat), target :: ahll type(psb_s_hdia_sparse_mat), target :: ahdia @@ -489,6 +490,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -504,6 +507,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -520,7 +525,7 @@ contains & upd=upd,mold=arsb) #endif #endif - case('ELL','HLL','CSR','DNS') + case('ELL','HLL','CSR','DNS','CSC') call psb_spasb(ap,descp,info,upd=upd,mold=amold) case('HDIA') call psb_spasb(ap,descp,info,upd=upd,mold=amold) diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index a4bda8c9a..fe6c69b67 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -440,6 +440,7 @@ contains #endif type(psb_z_ell_sparse_mat), target :: aell type(psb_z_csr_sparse_mat), target :: acsr + type(psb_z_csc_sparse_mat), target :: acsc type(psb_z_coo_sparse_mat), target :: acoo type(psb_z_hll_sparse_mat), target :: ahll type(psb_z_hdia_sparse_mat), target :: ahdia @@ -484,6 +485,8 @@ contains amold => ahll case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -498,6 +501,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -514,7 +519,7 @@ contains & upd=upd,mold=arsb) #endif #endif - case('ELL','HLL','CSR','DNS') + case('ELL','HLL','CSR','DNS','CSC') call psb_spasb(ap,descp,info,upd=upd,mold=amold) #if defined(PSB_HAVE_CUDA) case('ELG','HLG','CSRG') From 039639b3416bf857a9c8d34fa5b9318b3d6cdd6e Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 26 Mar 2026 17:23:27 +0100 Subject: [PATCH 149/175] Fix bug in CMakeLists: now installs modules correctly --- CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b265b696..86f810f89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -848,11 +848,12 @@ endif() # Set the Fortran module output directory for all targets -#set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/modules) +set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/modules) +#set(CMAKE_Fortran_MODULE_DIRECTORY "${CMAKE_BINARY_DIR}/include") -set(CMAKE_Fortran_MODULE_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_MODULDIR}") -message(STATUS "fortran module directory ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_MODULDIR}") + +message(STATUS "fortran module directory ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_INCLUDEDIR}") include_directories(${MPI_Fortran_INCLUDE_PATH}) @@ -1273,7 +1274,7 @@ install(DIRECTORY ${CMAKE_BINARY_DIR}/include/ # Install module files install(DIRECTORY ${CMAKE_BINARY_DIR}/modules/ - DESTINATION "${CMAKE_Fortran_MODULE_DIRECTORY}" # This will place .mod files in /modules + DESTINATION "${CMAKE_INSTALL_MODULDIR}" # This will place .mod files in /modules FILES_MATCHING PATTERN "*.mod" ) From 09a5a74d75b3bd3151038b6325c0afe52d0c933a Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Thu, 2 Apr 2026 20:28:33 +0200 Subject: [PATCH 150/175] [ADD] Added polymorphic comm_handle data excahnge for non-blocking and persistant neighbor communication. Check test/comm/ to see how it's used. For now works only for d types --- base/CMakeLists.txt | 2 +- base/comm/internals/psi_dswapdata.F90 | 729 +++++++++++++----- base/comm/internals/psi_dswaptran.F90 | 294 ++++--- base/modules/Makefile | 27 +- .../comm_schemes/psb_comm_baseline_mod.F90 | 62 ++ .../comm_schemes/psb_comm_factory_mod.F90 | 100 +++ .../psb_comm_neighbor_impl_mod.F90 | 431 +++++++++++ .../comm_schemes/psb_comm_schemes_mod.F90 | 68 ++ base/modules/comm/psi_d_comm_v_mod.f90 | 20 +- base/modules/serial/psb_d_base_vect_mod.F90 | 243 +++--- test/comm/psb_comm_test.F90 | 232 +++++- 11 files changed, 1715 insertions(+), 493 deletions(-) create mode 100644 base/modules/comm/comm_schemes/psb_comm_baseline_mod.F90 create mode 100644 base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 create mode 100644 base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 create mode 100644 base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt index f2b83f913..1833a93c6 100644 --- a/base/CMakeLists.txt +++ b/base/CMakeLists.txt @@ -437,7 +437,7 @@ set(PSB_base_source_files # modules/comm/psi_i2_comm_a_mod.f90 modules/comm/psi_m_comm_a_mod.f90 modules/comm/psi_l_comm_v_mod.f90 - modules/comm/psb_comm_mod.f90 + modules/comm/psb_comm_mod.F90 modules/comm/psb_l_comm_mod.f90 modules/comm/psb_d_linmap_mod.f90 modules/comm/psi_d_comm_v_mod.f90 diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index c21c2bbfe..42e729022 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -56,21 +56,13 @@ ! so that special versions (i.e. GPU vectors can override them ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) +! swap_status - integer Swap status selector. +! It is interpreted as a communication status: +! psb_comm_status_start_ -> START phase +! psb_comm_status_wait_ -> WAIT phase +! psb_comm_status_unknown_ -> START+WAIT +! The communication scheme is selected from +! y%comm_handle%comm_type. ! ! ! n - integer Number of columns in Y @@ -90,8 +82,14 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ + use psb_comm_factory_mod, only: psb_comm_init, psb_comm_free + use psb_comm_baseline_mod, only: psb_comm_baseline_handle, psb_comm_baseline_alloc_comid + use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle contains - module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_dswapdata_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -101,7 +99,7 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status class(psb_d_base_vect_type), intent(inout) :: y real(psb_dpk_), intent(in) :: beta type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? @@ -111,10 +109,10 @@ contains ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_ipk_) :: setflag class(psb_i_base_vect_type), pointer :: comm_indexes - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + ! communication scheme/status selectors logical :: baseline, neighbor_a2av ! error handling variables @@ -152,37 +150,84 @@ contains goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + ! Debug: report list sizes + ! if(me == 0) then + ! write(psb_err_unit,*) me, 'DBG: get_list_p -> num_neighbors=', & + ! & num_neighbors, ' total_send=', total_send, ' total_recv=', total_recv + ! end if + ! Accept both new comm-status enums and legacy descriptor bitfields. + setflag = swap_status + if (swap_status == psb_swap_start_) then + setflag = psb_comm_status_start_ + else if (swap_status == psb_swap_wait_) then + setflag = psb_comm_status_wait_ + else if (iand(swap_status, psb_swap_start_) /= 0 .and. iand(swap_status, psb_swap_wait_) /= 0) then + setflag = psb_comm_status_unknown_ + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + if ((setflag /= psb_comm_status_start_) .and. (setflag /= psb_comm_status_wait_) .and. & + & (setflag /= psb_comm_status_unknown_)) then info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if + + if (.not. allocated(y%comm_handle)) then + call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + ! Debug: comm handle allocation and type + ! if(me == 0) then + ! write(psb_err_unit,*) me, 'CALLING' + ! write(psb_err_unit,*) me, 'DBG: comm_handle allocated=', allocated(y%comm_handle) + ! if (allocated(y%comm_handle)) then + ! write(psb_err_unit,*) me, 'DBG: comm_handle%comm_type=', y%comm_handle%comm_type + ! end if + ! end if + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(setflag, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if + ! if(me == 0) then + ! write(psb_err_unit,*) me, 'DBG: after set_swap_status, info=', info + ! end if + + baseline = .false. + neighbor_a2av = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) + neighbor_a2av = .true. + case default + baseline = .true. + end select + + ! if(me == 0) then + ! write(psb_err_unit,*) me, 'DBG: selected baseline=', baseline, ' neighbor=', neighbor_a2av + ! end if + if (baseline) then - call psi_dswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + call psi_dswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if else if (neighbor_a2av) then - call psi_dswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + call psi_dswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='neighbor a2av swap') goto 9999 end if else info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: neither baseline nor neighbor_a2av is true') goto 9999 end if @@ -193,11 +238,8 @@ contains return end subroutine psi_dswapdata_vect - ! - ! subroutine psi_dswap_baseline_vect - ! This performs Isend/Irecv as a baseline communication mode - ! - subroutine psi_dswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + + subroutine psi_dswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -207,11 +249,12 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals @@ -220,10 +263,10 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& & iret, nesd, nerv integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv + logical :: do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name @@ -239,14 +282,19 @@ contains icomm = ctxt%get_mpic() - n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swap') + goto 9999 + end select - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + n=1 + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) total_recv_ = total_recv * n total_send_ = total_send * n @@ -254,8 +302,8 @@ contains if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -266,8 +314,8 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 @@ -281,9 +329,9 @@ contains if ((nerv>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt p2ptag = psb_double_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& + call mpi_irecv(y%combuf(rcv_pt),nerv,& & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do @@ -324,9 +372,9 @@ contains rcv_pt = 1+pnti+psb_n_elem_recv_ if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& + call mpi_isend(y%combuf(snd_pt),nesd,& & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -341,7 +389,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -363,7 +411,7 @@ contains if (proc_to_comm /= me)then if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -371,7 +419,7 @@ contains end if end if if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -409,7 +457,7 @@ contains ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -418,7 +466,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call y%comm_handle%free(info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -437,7 +487,8 @@ contains - subroutine psi_dswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + subroutine psi_dswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -447,17 +498,19 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -476,8 +529,18 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) call comm_indexes%sync() @@ -486,58 +549,131 @@ contains ! --------------------------------------------------------- if (do_start) then if(debug) write(*,*) me,' nbr_vect: starting data exchange' - ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if - - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Buffer layout: ! combuf(1 : total_send) = send area ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (neighbor_comm_handle%use_persistent_buffers) then + if ((.not.allocated(y%combuf)) .or. (size(y%combuf) < buffer_size)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + else + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null ! Gather send data into contiguous send buffer (polymorphic for GPU) if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + & neighbor_comm_handle%send_indexes, & & y%combuf(1:topology_total_send)) ! Wait for device (important for GPU subclasses) call y%device_wait() - ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (neighbor_comm_handle%use_persistent_buffers) then + ! Lazy persistent-init: build the request once, then reuse with START/WAIT. + if (.not. neighbor_comm_handle%persistent_request_ready) then +#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + if (debug) write(*,*) me,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size +#else + ! Fallback when persistent neighborhood collectives are not available + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 +#endif + end if + +#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if +#else + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if +#endif + else + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if end if end if ! do_start @@ -547,19 +683,44 @@ contains ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then - ! No matching start? Something is wrong - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 + if (neighbor_comm_handle%use_persistent_buffers) then +#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + if (.not. neighbor_comm_handle%persistent_request_ready) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if +#else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if +#endif + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + write(psb_err_unit,*) me, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & + & neighbor_comm_handle%is_initialized + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Wait for the non-blocking collective to complete if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + if (neighbor_comm_handle%use_persistent_buffers) then +#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) +#else + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) +#endif + else + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + end if if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -569,18 +730,23 @@ contains ! Scatter received data to local vector positions (polymorphic for GPU) if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + & neighbor_comm_handle%recv_indexes, & & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & & beta) ! Clean up - y%communication_handle = mpi_request_null + if ((.not. neighbor_comm_handle%use_persistent_buffers) .or. & + & (neighbor_comm_handle%use_persistent_buffers .and. .not. neighbor_comm_handle%persistent_request_ready)) then + neighbor_comm_handle%comm_request = mpi_request_null + end if call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (.not. neighbor_comm_handle%use_persistent_buffers) then + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if end if if (debug) write(*,*) me,' nbr_vect: done' @@ -604,7 +770,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,info,data) + module subroutine psi_dswapdata_multivect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -613,16 +779,15 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status class(psb_d_base_multivect_type), intent(inout) :: y real(psb_dpk_), intent(in) :: beta type(psb_desc_type), target :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + ! communication scheme/status selectors + logical :: baseline, neighbor_a2av ! locals type(psb_ctxt_type) :: ctxt @@ -663,37 +828,52 @@ contains goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + if ((swap_status /= psb_comm_status_start_) .and. (swap_status /= psb_comm_status_wait_) & + & .and. (swap_status /= psb_comm_status_unknown_)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if (.not. allocated(y%comm_handle)) then + call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if + baseline = .false. + neighbor_a2av = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) + neighbor_a2av = .true. + case default + baseline = .true. + end select + if (baseline) then - call psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + call psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if else if (neighbor_a2av) then - call psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + call psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='neighbor a2av swap') goto 9999 end if else info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: neither baseline nor neighbor_a2av is true') goto 9999 end if @@ -708,10 +888,8 @@ contains -subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) - - +subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -721,11 +899,12 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_multivect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals @@ -733,10 +912,10 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv + logical :: do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name @@ -752,12 +931,18 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & n = y%get_ncols() - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swap') + goto 9999 + end select + + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) total_recv_ = total_recv * n total_send_ = total_send * n @@ -766,20 +951,21 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 @@ -793,9 +979,9 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & if ((nerv>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt p2ptag = psb_double_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd @@ -838,9 +1024,9 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& + call mpi_isend(y%combuf(snd_pt),n*nesd,& & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -856,7 +1042,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -877,7 +1063,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -885,7 +1071,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & end if end if if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -925,7 +1111,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & ! ! Waited for com, cleanup comid ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -934,7 +1120,9 @@ subroutine psi_dswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -953,7 +1141,8 @@ end subroutine psi_dswap_baseline_multivect -subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -963,11 +1152,12 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_multivect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info @@ -975,6 +1165,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -991,8 +1182,20 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n goto 9999 endif - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) call comm_indexes%sync() @@ -1001,59 +1204,131 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n ! --------------------------------------------------------- if (do_start) then if(debug) write(*,*) me,' nbr_vect: starting data exchange' - ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & & ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if - - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Buffer layout: ! combuf(1 : total_send) = send area ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (neighbor_comm_handle%use_persistent_buffers) then + if ((.not.allocated(y%combuf)) .or. (size(y%combuf) < buffer_size)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + else + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null ! Gather send data into contiguous send buffer (polymorphic for GPU) if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:topology_total_send)) ! Wait for device (important for GPU subclasses) call y%device_wait() - ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (neighbor_comm_handle%use_persistent_buffers) then + if (.not. neighbor_comm_handle%persistent_request_ready) then +#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + if (debug) write(*,*) me,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size +#else + ! Fallback when persistent neighborhood collectives are not available + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 +#endif + end if + +#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if +#else + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if +#endif + else + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if end if end if ! do_start @@ -1063,19 +1338,42 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then - ! No matching start? Something is wrong - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 + if (neighbor_comm_handle%use_persistent_buffers) then +#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + if (.not. neighbor_comm_handle%persistent_request_ready) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if +#else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if +#endif + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Wait for the non-blocking collective to complete if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + if (neighbor_comm_handle%use_persistent_buffers) then +#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) +#else + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) +#endif + else + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + end if if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -1085,18 +1383,23 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n ! Scatter received data to local vector positions (polymorphic for GPU) if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + & neighbor_comm_handle%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) ! Clean up - y%communication_handle = mpi_request_null + if ((.not. neighbor_comm_handle%use_persistent_buffers) .or. & + & (neighbor_comm_handle%use_persistent_buffers .and. .not. neighbor_comm_handle%persistent_request_ready)) then + neighbor_comm_handle%comm_request = mpi_request_null + end if call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (.not. neighbor_comm_handle%use_persistent_buffers) then + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if end if if (debug) write(*,*) me,' nbr_vect: done' diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index ec6e6d2e3..2c75eb766 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -59,12 +59,12 @@ ! ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: +! swap_status - integer Choose the algorithm for data exchange: ! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 +! swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 +! swap_sync = iand(swap_status,psb_swap_sync_) /= 0 +! swap_send = iand(swap_status,psb_swap_send_) /= 0 +! swap_recv = iand(swap_status,psb_swap_recv_) /= 0 ! if (swap_mpi): use underlying MPI_ALLTOALLV. ! if (swap_sync): use PSB_SND and PSB_RCV in ! synchronized pairs @@ -92,8 +92,12 @@ ! submodule (psi_d_comm_v_mod) psi_d_swaptran_impl use psb_base_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_ + use psb_comm_factory_mod, only: psb_comm_init, psb_comm_free + use psb_comm_baseline_mod, only: psb_comm_baseline_handle + use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle contains - module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_dswaptran_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -103,7 +107,7 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y type(psb_desc_type),target :: desc_a @@ -153,37 +157,46 @@ contains goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 + swap_sync = iand(swap_status,psb_swap_sync_) /= 0 + swap_send = iand(swap_status,psb_swap_send_) /= 0 + swap_recv = iand(swap_status,psb_swap_recv_) /= 0 + swap_start = iand(swap_status,psb_swap_start_) /= 0 + swap_wait = iand(swap_status,psb_swap_wait_) /= 0 baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync neighbor_a2av = swap_start .or. swap_wait if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: both baseline and neighbor_a2av are true') goto 9999 end if + if (.not. allocated(y%comm_handle)) then + call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + if (baseline) then - call psi_dtran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + call psi_dtran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if else if (neighbor_a2av) then - call psi_dtran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + call psi_dtran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='neighbor a2av swap') goto 9999 end if else info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: neither baseline nor neighbor_a2av is true') goto 9999 end if @@ -208,8 +221,8 @@ contains ! ! ! - module subroutine psi_dtran_baseline_vect(ctxt,flag,beta,y,idx,& - & num_neighbors,total_send,total_recv,info) + module subroutine psi_dtran_baseline_vect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -220,11 +233,12 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals @@ -232,6 +246,7 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& @@ -250,11 +265,21 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swaptran') + goto 9999 + end select + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 + swap_sync = iand(swap_status,psb_swap_sync_) /= 0 + swap_send = iand(swap_status,psb_swap_send_) /= 0 + swap_recv = iand(swap_status,psb_swap_recv_) /= 0 do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv @@ -265,8 +290,8 @@ contains if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -277,8 +302,8 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 @@ -295,7 +320,7 @@ contains if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt call mpi_irecv(y%combuf(snd_pt),nesd,& & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do @@ -342,7 +367,7 @@ contains if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),nerv,& & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -357,7 +382,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -379,7 +404,7 @@ contains if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -387,7 +412,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -425,7 +450,7 @@ contains ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -434,7 +459,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -455,7 +482,8 @@ contains - subroutine psi_dtran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + subroutine psi_dtran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -465,17 +493,19 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -494,8 +524,18 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swaptran') + goto 9999 + end select + + do_start = iand(swap_status,psb_swap_start_) /= 0 + do_wait = iand(swap_status,psb_swap_wait_) /= 0 call comm_indexes%sync() @@ -505,9 +545,9 @@ contains if (do_start) then if(debug) write(*,*) me,' nbr_vect: starting data exchange' ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then + if (.not. neighbor_comm_handle%is_initialized) then if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -515,8 +555,8 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Buffer layout: ! combuf(1 : total_send) = send area @@ -528,12 +568,12 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null ! For transpose exchange: gather recv area first (we will send "recv" data) if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) ! Wait for device (important for GPU subclasses) @@ -543,15 +583,15 @@ contains if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer (recv_indexes gathered) - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_r_dpk_, & & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -565,19 +605,19 @@ contains ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Wait for the non-blocking collective to complete if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -587,13 +627,13 @@ contains ! For transpose exchange: scatter the data that correspond to peers' send area if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) ! Clean up - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then @@ -625,7 +665,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,info,data) + module subroutine psi_dswaptran_multivect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -635,7 +675,7 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_multivect_type), intent(inout) :: y type(psb_desc_type),target :: desc_a @@ -685,37 +725,46 @@ contains goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 + swap_sync = iand(swap_status,psb_swap_sync_) /= 0 + swap_send = iand(swap_status,psb_swap_send_) /= 0 + swap_recv = iand(swap_status,psb_swap_recv_) /= 0 + swap_start = iand(swap_status,psb_swap_start_) /= 0 + swap_wait = iand(swap_status,psb_swap_wait_) /= 0 baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync neighbor_a2av = swap_start .or. swap_wait if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: both baseline and neighbor_a2av are true') goto 9999 end if + if (.not. allocated(y%comm_handle)) then + call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + if (baseline) then - call psi_dtran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + call psi_dtran_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if else if (neighbor_a2av) then - call psi_dtran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + call psi_dtran_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='neighbor a2av swap') goto 9999 end if else info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: neither baseline nor neighbor_a2av is true') goto 9999 end if @@ -727,8 +776,8 @@ contains return end subroutine psi_dswaptran_multivect - subroutine psi_dtran_baseline_multivect(ctxt,flag,beta,y,idx,& - & num_neighbors,total_send,total_recv,info) + subroutine psi_dtran_baseline_multivect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -739,18 +788,20 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status integer(psb_ipk_), intent(out) :: info class(psb_d_base_multivect_type), intent(inout) :: y real(psb_dpk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& @@ -769,12 +820,22 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swaptran') + goto 9999 + end select + n = y%get_ncols() - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 + swap_sync = iand(swap_status,psb_swap_sync_) /= 0 + swap_send = iand(swap_status,psb_swap_send_) /= 0 + swap_recv = iand(swap_status,psb_swap_recv_) /= 0 do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv @@ -785,8 +846,8 @@ contains if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -797,8 +858,8 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 @@ -814,7 +875,7 @@ contains if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt call mpi_irecv(y%combuf(snd_pt),n*nesd,& & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd @@ -861,7 +922,7 @@ contains if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),n*nerv,& & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -877,7 +938,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -898,7 +959,7 @@ contains nesd = idx%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -906,7 +967,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -948,7 +1009,7 @@ contains ! ! Waited for com, cleanup comid ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -957,7 +1018,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -976,7 +1039,8 @@ contains end subroutine psi_dtran_baseline_multivect - subroutine psi_dtran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + subroutine psi_dtran_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -986,17 +1050,19 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_multivect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -1015,8 +1081,18 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swaptran') + goto 9999 + end select + + do_start = iand(swap_status,psb_swap_start_) /= 0 + do_wait = iand(swap_status,psb_swap_wait_) /= 0 call comm_indexes%sync() @@ -1026,9 +1102,9 @@ contains if (do_start) then if(debug) write(*,*) me,' nbr_vect: starting data exchange' ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then + if (.not. neighbor_comm_handle%is_initialized) then if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -1036,8 +1112,8 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Buffer layout: ! combuf(1 : total_send) = send area @@ -1049,12 +1125,12 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null ! For transpose exchange: gather recv area first (we will send "recv" data) if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) ! Wait for device (important for GPU subclasses) @@ -1064,15 +1140,15 @@ contains if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer (recv_indexes gathered) - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_r_dpk_, & & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -1086,19 +1162,19 @@ contains ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Wait for the non-blocking collective to complete if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -1108,13 +1184,13 @@ contains ! For transpose exchange: scatter the data that correspond to peers' send area if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) ! Clean up - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then diff --git a/base/modules/Makefile b/base/modules/Makefile index 3fd14a423..7e6f0e7c6 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -28,7 +28,10 @@ COMMINT= penv/psi_penv_mod.o \ SERIAL_MODS=serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o \ serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o \ serial/psb_serial_mod.o \ - comm/psb_neighbor_topology_mod.o \ + comm/comm_schemes/psb_comm_schemes_mod.o \ + comm/comm_schemes/psb_comm_baseline_mod.o \ + comm/comm_schemes/psb_comm_neighbor_impl_mod.o \ + comm/comm_schemes/psb_comm_factory_mod.o \ serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o\ serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o\ serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o\ @@ -95,9 +98,11 @@ UTIL_MODS = desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o\ comm/psb_s_linmap_mod.o comm/psb_d_linmap_mod.o \ comm/psb_c_linmap_mod.o comm/psb_z_linmap_mod.o \ comm/psb_comm_mod.o \ + comm/psb_neighbor_topology_mod.o \ comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o \ comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o\ comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o \ + comm/psb_i2_comm_a_mod.o \ comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o \ comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\ comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o \ @@ -182,6 +187,14 @@ auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o \ desc/psb_desc_const_mod.o psi_penv_mod.o: psb_const_mod.o +comm/comm_schemes/psb_comm_schemes_mod.o: psb_const_mod.o + +comm/comm_schemes/psb_comm_baseline_mod.o: comm/comm_schemes/psb_comm_schemes_mod.o + +comm/comm_schemes/psb_comm_neighbor_impl_mod.o: psb_const_mod.o desc/psb_desc_const_mod.o comm/comm_schemes/psb_comm_schemes_mod.o + +comm/comm_schemes/psb_comm_factory_mod.o: comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_baseline_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o + comm/psb_neighbor_topology_mod.o: psb_const_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o desc/psb_hash_mod.o: psb_realloc_mod.o psb_const_mod.o desc/psb_desc_const_mod.o @@ -263,8 +276,10 @@ serial/psb_d_base_mat_mod.o: serial/psb_d_base_vect_mod.o serial/psb_c_base_mat_mod.o: serial/psb_c_base_vect_mod.o serial/psb_z_base_mat_mod.o: serial/psb_z_base_vect_mod.o serial/psb_l_base_vect_mod.o: serial/psb_i_base_vect_mod.o -serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o comm/psb_neighbor_topology_mod.o -serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: auxil/psi_serial_mod.o psb_realloc_mod.o comm/psb_neighbor_topology_mod.o +serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_z_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o +serial/psb_d_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_factory_mod.o +serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: auxil/psi_serial_mod.o psb_realloc_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o \ + comm/psb_neighbor_topology_mod.o serial/psb_s_mat_mod.o: serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_vect_mod.o \ serial/psb_i_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_mat_mod.o: serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_vect_mod.o \ @@ -342,11 +357,12 @@ comm/psb_comm_mod.o: desc/psb_desc_mod.o serial/psb_mat_mod.o comm/psb_comm_mod.o: comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o \ comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o \ comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o \ + comm/psb_i2_comm_a_mod.o \ comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o \ comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\ comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o -comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o \ +comm/psb_i2_comm_a_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o \ comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\ comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o: desc/psb_desc_mod.o @@ -420,5 +436,4 @@ clean: /bin/rm -f $(MODULES) $(OBJS) $(MPFOBJS) *$(.mod) veryclean: clean - /bin/rm -f *.h - + /bin/rm -f *.h \ No newline at end of file diff --git a/base/modules/comm/comm_schemes/psb_comm_baseline_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_baseline_mod.F90 new file mode 100644 index 000000000..350fd372e --- /dev/null +++ b/base/modules/comm/comm_schemes/psb_comm_baseline_mod.F90 @@ -0,0 +1,62 @@ +module psb_comm_baseline_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_ + use psb_const_mod + implicit none + + type, extends(psb_comm_handle_type) :: psb_comm_baseline_handle + ! MPI request IDs for Isend/Irecv (dimension: num_neighbors x 2) + ! First column: send requests, second column: recv requests + integer(psb_ipk_), allocatable :: comid(:,:) + contains + procedure, pass :: init => psb_comm_baseline_init + procedure, pass :: free => psb_comm_baseline_free + procedure, pass :: set_swap_status => psb_comm_baseline_set_swap_status + procedure, pass :: get_swap_status => psb_comm_baseline_get_swap_status + end type psb_comm_baseline_handle + +contains + + subroutine psb_comm_baseline_init(this, info) + implicit none + class(psb_comm_baseline_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + info = 0 + this%comm_type = psb_comm_isend_irecv_ + this%id = 0 + this%swap_status = 0 + end subroutine psb_comm_baseline_init + + subroutine psb_comm_baseline_free(this, info) + class(psb_comm_baseline_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + info = 0 + ! Free MPI resources (comid) + if (allocated(this%comid)) deallocate(this%comid, stat=info) + end subroutine psb_comm_baseline_free + + subroutine psb_comm_baseline_set_swap_status(this, flag, info) + class(psb_comm_baseline_handle), intent(inout) :: this + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + info = 0 + this%swap_status = flag + end subroutine psb_comm_baseline_set_swap_status + + subroutine psb_comm_baseline_get_swap_status(this, flag, info) + class(psb_comm_baseline_handle), intent(in) :: this + integer(psb_ipk_), intent(out) :: flag + integer(psb_ipk_), intent(out) :: info + info = 0 + flag = this%swap_status + end subroutine psb_comm_baseline_get_swap_status + + ! Allocate comid array for num_neighbors + subroutine psb_comm_baseline_alloc_comid(this, n, info) + implicit none + class(psb_comm_baseline_handle), intent(inout) :: this + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + allocate(this%comid(n, 2_psb_ipk_), stat=info) + end subroutine psb_comm_baseline_alloc_comid + +end module psb_comm_baseline_mod diff --git a/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 new file mode 100644 index 000000000..1652f90bc --- /dev/null +++ b/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 @@ -0,0 +1,100 @@ +module psb_comm_factory_mod + use psb_const_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_unknown_ + use psb_comm_baseline_mod, only: psb_comm_baseline_handle + use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle + implicit none + +contains + + ! Allocatable-based factory routines (preferred names) + subroutine psb_comm_init(comm_type, handle, info) + implicit none + integer(psb_ipk_), intent(in) :: comm_type + class(psb_comm_handle_type), allocatable, intent(inout) :: handle + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(handle)) then + info = -1 + return + end if + select case(comm_type) + case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) + allocate(psb_comm_neighbor_handle :: handle, stat=info) + if (info /= 0) return + call handle%init(info) + if (info /= 0) return + select type(h => handle) + type is(psb_comm_neighbor_handle) + h%comm_type = comm_type + h%use_persistent_buffers = (comm_type == psb_comm_persistent_ineighbor_alltoallv_) + end select + case default + allocate(psb_comm_baseline_handle :: handle, stat=info) + if (info /= 0) return + call handle%init(info) + end select + end subroutine psb_comm_init + + subroutine psb_comm_free(handle, info) + implicit none + class(psb_comm_handle_type), allocatable, intent(inout) :: handle + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not. allocated(handle)) return + call handle%free(info) + if (allocated(handle)) then + deallocate(handle) + end if + end subroutine psb_comm_free + + + ! Allocatable-based factory routines + subroutine psb_comm_create(comm_type, handle, info) + implicit none + integer(psb_ipk_), intent(in) :: comm_type + class(psb_comm_handle_type), allocatable, intent(inout) :: handle + integer(psb_ipk_), intent(out) :: info + + call psb_comm_init(comm_type, handle, info) + end subroutine psb_comm_create + + subroutine psb_comm_destroy(handle, info) + implicit none + class(psb_comm_handle_type), allocatable, intent(inout) :: handle + integer(psb_ipk_), intent(out) :: info + + call psb_comm_free(handle, info) + end subroutine psb_comm_destroy + + subroutine psb_comm_set_swap_status(handle, flag, info) + implicit none + class(psb_comm_handle_type), allocatable, intent(inout) :: handle + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + info = 0 + if (.not. allocated(handle)) then + info = -1 + return + end if + call handle%set_swap_status(flag, info) + end subroutine psb_comm_set_swap_status + + subroutine psb_comm_get_swap_status(handle, flag, info) + implicit none + class(psb_comm_handle_type), allocatable, intent(in) :: handle + integer(psb_ipk_), intent(out) :: flag + integer(psb_ipk_), intent(out) :: info + info = 0 + if (.not. allocated(handle)) then + flag = 0 + info = -1 + return + end if + call handle%get_swap_status(flag, info) + end subroutine psb_comm_get_swap_status + +end module psb_comm_factory_mod diff --git a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 new file mode 100644 index 000000000..a4e8423df --- /dev/null +++ b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 @@ -0,0 +1,431 @@ +! Merged neighbor-topology module +! +module psb_comm_neighbor_impl_mod + use psb_const_mod + use psb_desc_const_mod, only: psb_proc_id_, psb_n_elem_recv_, psb_elem_recv_, & + & psb_n_elem_send_, psb_elem_send_ + use psb_error_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_ineighbor_alltoallv_ +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type, extends(psb_comm_handle_type) :: psb_comm_neighbor_handle + integer(psb_mpk_) :: graph_comm = mpi_comm_null + integer(psb_ipk_) :: num_neighbors = 0 + integer(psb_mpk_), allocatable :: send_counts(:), recv_counts(:) + integer(psb_mpk_), allocatable :: send_displs(:), recv_displs(:) + integer(psb_ipk_), allocatable :: send_indexes(:) + integer(psb_ipk_), allocatable :: recv_indexes(:) + integer(psb_ipk_) :: total_send = 0 + integer(psb_ipk_) :: total_recv = 0 + logical :: is_initialized = .false. + logical :: use_persistent_buffers = .false. + integer(psb_mpk_) :: comm_request = mpi_request_null + integer(psb_mpk_) :: persistent_request = mpi_request_null + logical :: persistent_request_ready = .false. + integer(psb_ipk_) :: persistent_buffer_size = 0 + contains + procedure, pass :: init => psb_comm_neighbor_init + procedure, pass :: free => neighbor_topology_free + procedure, pass :: set_swap_status => psb_comm_neighbor_set_swap_status + procedure, pass :: get_swap_status => psb_comm_neighbor_get_swap_status + procedure, pass :: topology_init => neighbor_topology_init + procedure, pass :: sizeof => neighbor_topology_sizeof + end type psb_comm_neighbor_handle + + +contains + + ! --------------------------------------------------------------- + ! neighbor_topology_init + ! + ! Parse the halo index list (obtained via desc_a%get_list_p) + ! and build: + ! - MPI dist-graph communicator with only the true neighbors + ! - per-neighbor send/recv counts and displacements + ! - contiguous gather/scatter index arrays + ! + ! The topology is stored inside the vector and lazily built + ! on the first psi_swapdata call that uses the neighbor-alltoallv + ! communication mode. + ! + ! Arguments: + ! topology - the persistent state (output, intent inout) + ! halo_index - halo_index array (from get_list_p, intent in) + ! num_neighbors - number of exchanges (from get_list_p) + ! total_send_elems - total send count (from get_list_p) + ! total_recv_elems - total recv count (from get_list_p) + ! ctxt - PSBLAS context + ! icomm - MPI communicator + ! info - error code (output) + ! --------------------------------------------------------------- + subroutine neighbor_topology_init(topology, halo_index, num_neighbors, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + class(psb_comm_neighbor_handle), intent(inout) :: topology + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_neighbors, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: iret + integer(psb_ipk_) :: i, k, idx_ptr, num_elem_recv, num_elem_send, partner_proc + integer(psb_ipk_) :: neighbor_count, send_offset, recv_offset + integer(psb_mpk_), allocatable :: source_ranks(:), dest_ranks(:) + integer(psb_mpk_), allocatable :: source_weights(:), dest_weights(:) + integer(psb_mpk_) :: in_degree, out_degree + character(len=40) :: name + integer(psb_ipk_) :: proc_id + integer(psb_ipk_) :: position + integer(psb_ipk_) :: err_act + + info = psb_success_ + name = 'neighbor_topology_init' + call psb_erractionsave(err_act) + + ! Clean up any previous state + call topology%free(info) + + ! ---------------------------------------------------------- + ! First pass: count neighbors (excluding self) and totals + ! ---------------------------------------------------------- + topology%num_neighbors = 0 + topology%total_send = 0 + topology%total_recv = 0 + + if(size(halo_index) < 1) then + call psb_errpush(psb_err_topology_invalid_args_,name) + goto 9999 + end if + + allocate(source_ranks(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Source ranks allocation failed') + goto 9999 + end if + + allocate(dest_ranks(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Destination ranks allocation failed') + goto 9999 + end if + + allocate(source_weights(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Source weights allocation failed') + goto 9999 + end if + + allocate(dest_weights(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Destination weights allocation failed') + goto 9999 + end if + + allocate(topology%send_counts(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Send counts allocation failed') + goto 9999 + end if + + allocate(topology%recv_counts(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Receive counts allocation failed') + goto 9999 + end if + + allocate(topology%send_displs(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Send displacements allocation failed') + goto 9999 + end if + + allocate(topology%recv_displs(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Receive displacements allocation failed') + goto 9999 + end if + + + ! ----------------------------------------------------------- + ! Allocate the gather/scatter index arrays + ! ----------------------------------------------------------- + allocate(topology%send_indexes(total_send_elems), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Send indexes allocation failed') + goto 9999 + end if + + allocate(topology%recv_indexes(total_recv_elems), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Recv indexes allocation failed') + goto 9999 + end if + + ! ----------------------------------------------------------- + ! Fill neighbor ranks, weights, counts, displacements, + ! and gather/scatter index arrays. + ! + ! The halo_index layout per neighbor (starting at position): + ! position + 0 : process id + ! position + 1 : nerv (num recv elements) + ! position + 2 .. +1+nerv : recv element indexes + ! position + 2+nerv : nesd (num send elements) + ! position + 3+nerv .. +2+nerv+nesd : send element indexes + ! Total stride per neighbor: nerv + nesd + 3 + ! ----------------------------------------------------------- + send_offset = 0 + recv_offset = 0 + position = 1 + + do i = 1, num_neighbors + proc_id = halo_index(position) + num_elem_recv = halo_index(position + 1) + num_elem_send = halo_index(position + num_elem_recv + 2) + + ! Fill source/destination ranks and weights (weights are all 1 for now) + source_ranks(i) = int(proc_id, psb_mpk_) + dest_ranks(i) = int(proc_id, psb_mpk_) + source_weights(i) = 1 + dest_weights(i) = 1 + + ! Counts and displacements (displs set BEFORE accumulating offset) + topology%send_counts(i) = int(num_elem_send, psb_mpk_) + topology%recv_counts(i) = int(num_elem_recv, psb_mpk_) + topology%send_displs(i) = int(send_offset, psb_mpk_) + topology%recv_displs(i) = int(recv_offset, psb_mpk_) + + ! Fill recv_indexes from halo_index(position+2 .. position+1+nerv) + do k = 1, num_elem_recv + topology%recv_indexes(recv_offset + k) = halo_index(position + psb_elem_recv_ + k - 1) + end do + + ! Fill send_indexes from halo_index(position+3+nerv .. position+2+nerv+nesd) + do k = 1, num_elem_send + topology%send_indexes(send_offset + k) = halo_index(position + num_elem_recv + psb_elem_send_ + k - 1) + end do + + send_offset = send_offset + num_elem_send + recv_offset = recv_offset + num_elem_recv + + topology%num_neighbors = topology%num_neighbors + 1 + topology%total_send = topology%total_send + num_elem_send + topology%total_recv = topology%total_recv + num_elem_recv + + position = position + num_elem_recv + num_elem_send + 3 + end do + + ! ---------------------------------------------------------- + ! Sanity check: the totals computed from the neighbor list + ! should match the totals returned by get_list_p. + ! ---------------------------------------------------------- + if (topology%total_send /= total_send_elems) then + info = psb_err_topology_args_mismatch_ + call psb_errpush(info, name, a_err='Send elements mismatch') + goto 9999 + end if + + if (topology%total_recv /= total_recv_elems) then + info = psb_err_topology_args_mismatch_ + call psb_errpush(info, name, a_err='Receive elements mismatch') + goto 9999 + end if + + if(topology%num_neighbors /= num_neighbors) then + info = psb_err_topology_args_mismatch_ + call psb_errpush(info, name, a_err='Number of neighbors mismatch') + goto 9999 + end if + + + ! ---------------------------------------------------------- + ! Build the dist-graph communicator + ! ---------------------------------------------------------- + in_degree = topology%num_neighbors !! Just for clarity + out_degree = topology%num_neighbors !! Just for clarity + + call mpi_dist_graph_create_adjacent(icomm, & + & in_degree, source_ranks, source_weights, & + & out_degree, dest_ranks, dest_weights, & + & mpi_info_null, .false., & ! Check this line for optimizations + & topology%graph_comm, info) + if (info /= mpi_success) then + info = psb_err_topology_error_ + call psb_errpush(info, name) + goto 9999 + end if + + topology%is_initialized = .true. + + ! TODO: Is it safe to deallocate these temporary arrays here, or do we need them for the gather/scatter indexes? + ! deallocate(source_ranks, dest_ranks, source_weights, dest_weights) + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine neighbor_topology_init + + + ! --------------------------------------------------------------- + ! neighbor_topology_free + ! Release all resources held by the persistent state. + ! --------------------------------------------------------------- + subroutine neighbor_topology_free(this, info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + class(psb_comm_neighbor_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: iret + + info = psb_success_ + + if (this%persistent_request_ready) then + if (this%persistent_request /= mpi_request_null) then + call mpi_request_free(this%persistent_request, iret) + end if + this%persistent_request = mpi_request_null + this%persistent_request_ready = .false. + this%persistent_buffer_size = 0 + end if + + if (this%graph_comm /= mpi_comm_null) then + call mpi_comm_free(this%graph_comm, iret) + this%graph_comm = mpi_comm_null + end if + + if (allocated(this%send_counts)) deallocate(this%send_counts) + if (allocated(this%recv_counts)) deallocate(this%recv_counts) + if (allocated(this%send_displs)) deallocate(this%send_displs) + if (allocated(this%recv_displs)) deallocate(this%recv_displs) + if (allocated(this%send_indexes)) deallocate(this%send_indexes) + if (allocated(this%recv_indexes)) deallocate(this%recv_indexes) + + this%num_neighbors = 0 + this%total_send = 0 + this%total_recv = 0 + this%is_initialized = .false. + this%comm_request = mpi_request_null + + end subroutine neighbor_topology_free + + + ! --------------------------------------------------------------- + ! neighbor_topology_sizeof + ! Return approximate memory footprint in bytes. + ! --------------------------------------------------------------- + function neighbor_topology_sizeof(this) result(val) + implicit none + class(psb_comm_neighbor_handle), intent(in) :: this + integer(psb_epk_) :: val + + val = 0 + val = val + psb_sizeof_ip * 6 ! scalar integers + logicals + if (allocated(this%send_counts)) val = val + psb_sizeof_ip * size(this%send_counts) + if (allocated(this%recv_counts)) val = val + psb_sizeof_ip * size(this%recv_counts) + if (allocated(this%send_displs)) val = val + psb_sizeof_ip * size(this%send_displs) + if (allocated(this%recv_displs)) val = val + psb_sizeof_ip * size(this%recv_displs) + if (allocated(this%send_indexes)) val = val + psb_sizeof_ip * size(this%send_indexes) + if (allocated(this%recv_indexes)) val = val + psb_sizeof_ip * size(this%recv_indexes) + + + end function neighbor_topology_sizeof + + + subroutine psb_comm_neighbor_create(this, comm_type, info) + class(psb_comm_neighbor_handle), intent(inout) :: this + integer(psb_ipk_), intent(in) :: comm_type + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + this%comm_type = comm_type + this%id = 0 + this%swap_status = 0 + this%comm_request = mpi_request_null + this%persistent_request = mpi_request_null + this%persistent_request_ready = .false. + this%persistent_buffer_size = 0 + + call this%free(info) + end subroutine psb_comm_neighbor_create + + + subroutine psb_comm_neighbor_destroy(this, info) + class(psb_comm_neighbor_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + this%comm_request = mpi_request_null + this%persistent_request = mpi_request_null + this%persistent_request_ready = .false. + this%persistent_buffer_size = 0 + call this%free(info) + end subroutine psb_comm_neighbor_destroy + + + subroutine psb_comm_neighbor_set_swap_status(this, flag, info) + class(psb_comm_neighbor_handle), intent(inout) :: this + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + this%swap_status = flag + end subroutine psb_comm_neighbor_set_swap_status + + + subroutine psb_comm_neighbor_get_swap_status(this, flag, info) + class(psb_comm_neighbor_handle), intent(in) :: this + integer(psb_ipk_), intent(out) :: flag + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + flag = this%swap_status + end subroutine psb_comm_neighbor_get_swap_status + + subroutine psb_comm_neighbor_init(this, info) + class(psb_comm_neighbor_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + info = 0 + this%comm_type = psb_comm_ineighbor_alltoallv_ + this%id = 0 + this%swap_status = 0 + this%is_initialized = .false. + this%use_persistent_buffers = .false. + this%comm_request = mpi_request_null + this%persistent_request = mpi_request_null + this%persistent_request_ready = .false. + this%persistent_buffer_size = 0 + end subroutine psb_comm_neighbor_init + + +end module psb_comm_neighbor_impl_mod diff --git a/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 new file mode 100644 index 000000000..0c91d8584 --- /dev/null +++ b/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 @@ -0,0 +1,68 @@ +! +! psb_comm_mod - communication handle module +! +module psb_comm_schemes_mod + use psb_const_mod + implicit none + + ! Communication type enumeration (keeps compatibility with integer selectors) + enum, bind(c) + enumerator psb_comm_unknown_ + enumerator psb_comm_isend_irecv_ + enumerator psb_comm_ineighbor_alltoallv_ + enumerator psb_comm_persistent_ineighbor_alltoallv_ + end enum + + enum, bind(c) + enumerator psb_comm_status_unknown_ + enumerator psb_comm_status_start_ + enumerator psb_comm_status_wait_ + end enum + + + ! (abstract interfaces moved below type definition) + + ! --- comm handle type --- + type, abstract :: psb_comm_handle_type + integer(psb_ipk_) :: id = -1 + integer(psb_ipk_) :: comm_type = psb_comm_unknown_ + integer(psb_ipk_) :: swap_status = psb_comm_status_unknown_ + contains + procedure(psb_comm_init), deferred :: init + procedure(psb_comm_free), deferred :: free + procedure(psb_comm_set_swap_status), deferred :: set_swap_status + procedure(psb_comm_get_swap_status), deferred :: get_swap_status + end type psb_comm_handle_type + + ! --- abstract interfaces --- + abstract interface + subroutine psb_comm_init(this, info) + import :: psb_ipk_, psb_comm_handle_type + class(psb_comm_handle_type), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + end subroutine + + subroutine psb_comm_free(this, info) + import :: psb_ipk_, psb_comm_handle_type + class(psb_comm_handle_type), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + end subroutine + + subroutine psb_comm_set_swap_status(this, flag, info) + import :: psb_ipk_, psb_comm_handle_type + class(psb_comm_handle_type), intent(inout) :: this + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + end subroutine + + subroutine psb_comm_get_swap_status(this, flag, info) + import :: psb_ipk_, psb_comm_handle_type + class(psb_comm_handle_type), intent(in) :: this + integer(psb_ipk_), intent(out) :: flag + integer(psb_ipk_), intent(out) :: info + end subroutine + end interface + +contains + +end module psb_comm_schemes_mod diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index 19380e288..fdc624b46 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -38,18 +38,18 @@ module psi_d_comm_v_mod interface psi_swapdata ! --------------------------------------------------------------- ! Wrapper that calls different communications schemes depending on - ! flag variable using communication buff obtained from desc_a%get_list_p + ! swap_status variable using communication buff obtained from desc_a%get_list_p ! --------------------------------------------------------------- - module subroutine psi_dswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag + module subroutine psi_dswapdata_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y type(psb_desc_type), target :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_vect - module subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag + module subroutine psi_dswapdata_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_multivect_type), intent(inout) :: y type(psb_desc_type), target :: desc_a @@ -63,18 +63,18 @@ module psi_d_comm_v_mod ! --------------------------------------------------------------- ! Upper call in order to populate idx using desc_a%get_list_p ! and then call different communications schemes depending - ! on flag variable + ! on swap_status variable ! --------------------------------------------------------------- - module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag + module subroutine psi_dswaptran_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y type(psb_desc_type), target :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_vect - module subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag + module subroutine psi_dswaptran_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status real(psb_dpk_), intent(in) :: beta class(psb_d_base_multivect_type), intent(inout) :: y type(psb_desc_type), target :: desc_a diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 9a2392205..1e2706442 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -49,7 +49,8 @@ module psb_d_base_vect_mod use psb_realloc_mod use psb_i_base_vect_mod use psb_l_base_vect_mod - use psb_neighbor_topology_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_unknown_ + use psb_comm_factory_mod, only: psb_comm_init, psb_comm_free !> \namespace psb_base_mod \class psb_d_base_vect_type @@ -64,10 +65,10 @@ module psb_d_base_vect_mod !! type psb_d_base_vect_type !> Values. - real(psb_dpk_), allocatable :: v(:) - real(psb_dpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + real(psb_dpk_), allocatable :: v(:) + real(psb_dpk_), allocatable :: combuf(:) + ! Polymorphic communication handle stored at vector level. + class(psb_comm_handle_type), allocatable :: comm_handle !> vector bldstate: !! null: pristine; @@ -81,9 +82,6 @@ module psb_d_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology - contains ! ! Constructors/allocators @@ -147,8 +145,6 @@ module psb_d_base_vect_mod procedure, nopass :: device_wait => d_base_device_wait procedure, pass(x) :: maybe_free_buffer => d_base_maybe_free_buffer procedure, pass(x) :: free_buffer => d_base_free_buffer - procedure, pass(x) :: new_comid => d_base_new_comid - procedure, pass(x) :: free_comid => d_base_free_comid ! ! Basic info @@ -179,7 +175,13 @@ module psb_d_base_vect_mod generic, public :: sct => sctb, sctb_x, sctb_buf procedure, pass(x) :: check_addr => d_base_check_addr - + + ! Communication lifecycle split: + ! - `create_comm`: allocate/select a fresh handle implementation via factory. + ! - `init_comm`: configure the current handle instance from an existing one + ! (e.g., copy `id` and swap status), and reset buffers; + ! it recreates the handle only if missing or scheme changes. + ! - `destroy_comm`/`free_comm`: release current handle resources. ! @@ -255,12 +257,6 @@ module psb_d_base_vect_mod procedure, pass(x) :: minquotient_v => d_base_minquotient_v procedure, pass(x) :: minquotient_a2 => d_base_minquotient_a2 generic, public :: minquotient => minquotient_v, minquotient_a2 - - - ! Methods used to handle topology in neighbor_alltoallv communication scheme - procedure, pass(x) :: init_topology => d_base_init_topology - procedure, pass(x) :: free_topology => d_base_free_topology - end type psb_d_base_vect_type public :: psb_d_base_vect @@ -416,6 +412,11 @@ contains call psb_realloc(n,x%iv,info) call x%set_ncfs(0) end if + if (info == psb_success_) then + if (.not. allocated(x%comm_handle)) then + call psb_comm_init(psb_comm_isend_irecv_, x%comm_handle, info) + end if + end if end subroutine d_base_all @@ -434,6 +435,9 @@ contains integer(psb_ipk_), intent(out) :: info allocate(psb_d_base_vect_type :: y, stat=info) + if (info == psb_success_) then + call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + end if end subroutine d_base_mold @@ -441,7 +445,7 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_d_base_vect_type), intent(out) :: x + class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ @@ -458,6 +462,11 @@ contains call x%set_host() call x%set_upd() end if + if (info == psb_success_) then + if (.not. allocated(x%comm_handle)) then + call psb_comm_init(psb_comm_isend_irecv_, x%comm_handle, info) + end if + end if end subroutine d_base_reinit @@ -837,11 +846,16 @@ contains class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: info_comm + info = 0 if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) - if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) - if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%comm_handle)) then + call psb_comm_free(x%comm_handle, info_comm) + if (info_comm /= psb_success_) info = info_comm + end if if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') call x%set_null() @@ -888,24 +902,6 @@ contains end subroutine d_base_maybe_free_buffer - ! - !> Function base_free_comid: - !! \memberof psb_d_base_vect_type - !! \brief Free aux MPI communication id buffer - !! - !! \param info return code - !! - ! - subroutine d_base_free_comid(x,info) - use psb_realloc_mod - implicit none - class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%comid)) & - & deallocate(x%comid,stat=info) - end subroutine d_base_free_comid - function d_base_get_ncfs(x) result(res) implicit none class(psb_d_base_vect_type), intent(in) :: x @@ -1109,12 +1105,25 @@ contains implicit none class(psb_d_base_vect_type), intent(in) :: x class(psb_d_base_vect_type), intent(out) :: y + integer(psb_ipk_) :: info + integer(psb_ipk_) :: swap_status if (allocated(x%v)) call y%bld(x%v) call y%set_state(x%get_state()) call y%set_dupl(x%get_dupl()) call y%set_ncfs(x%get_ncfs()) if (allocated(x%iv)) y%iv = x%iv + if (allocated(x%comm_handle)) then + call psb_comm_init(x%comm_handle%comm_type, y%comm_handle, info) + if (info /= psb_success_) return + y%comm_handle%id = x%comm_handle%id + call x%comm_handle%get_swap_status(swap_status, info) + if (info /= psb_success_) return + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) return + else + call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + end if end subroutine d_base_cpy ! @@ -2364,6 +2373,56 @@ contains end subroutine d_base_device_wait + + subroutine d_base_init_comm(x, comm_handle, info) + ! `init_comm` is intentionally a configuration step. + ! It does not define the communication API surface itself; instead it: + ! 1) resets local communication buffers, + ! 2) ensures a handle exists with the requested concrete scheme, + ! recreating it only when needed (missing handle or type change), + ! 3) copies runtime state (`id`, swap status) from the input handle. + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + class(psb_comm_handle_type), intent(in), pointer :: comm_handle + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: comm_type, swap_status + logical :: need_new_handle + + info = psb_success_ + + ! Reset/initialize communication related storage. Actual + ! topology/building is done lazily by neighbor_topology_init + if (allocated(x%combuf)) then + deallocate(x%combuf) + end if + + comm_type = psb_comm_isend_irecv_ + if (associated(comm_handle)) then + comm_type = comm_handle%comm_type + if (comm_type == psb_comm_unknown_) comm_type = psb_comm_isend_irecv_ + end if + + ! Recreate only when needed (missing handle or scheme change). + need_new_handle = .not. allocated(x%comm_handle) + if (.not. need_new_handle) then + need_new_handle = (x%comm_handle%comm_type /= comm_type) + end if + + if (need_new_handle) then + call psb_comm_init(comm_type, x%comm_handle, info) + if (info /= psb_success_) return + end if + + if (associated(comm_handle)) then + x%comm_handle%id = comm_handle%id + call comm_handle%get_swap_status(swap_status, info) + if (info /= psb_success_) return + call x%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) return + end if + + end subroutine d_base_init_comm + function d_base_use_buffer() result(res) logical :: res @@ -2380,16 +2439,6 @@ contains call psb_realloc(n,x%combuf,info) end subroutine d_base_new_buffer - subroutine d_base_new_comid(n,x,info) - use psb_realloc_mod - implicit none - class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_), intent(out) :: info - - call psb_realloc(n,2_psb_ipk_,x%comid,info) - end subroutine d_base_new_comid - ! ! shortcut alpha=1 beta=0 @@ -2622,35 +2671,6 @@ contains call z%addconst(x%v,b,info) end subroutine d_base_addconst_v2 - - ! -------------------------------------------------------------------- - ! Implementation of methods used for neighbor alltoallv communication - ! -------------------------------------------------------------------- - subroutine d_base_init_topology(x, halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - implicit none - class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: halo_index(:) - integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%init(halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - - end subroutine d_base_init_topology - - subroutine d_base_free_topology(x, info) - implicit none - class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%free(info) - - end subroutine d_base_free_topology - ! -------------------------------------------------------------------- - end module psb_d_base_vect_mod @@ -2660,7 +2680,7 @@ module psb_d_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_d_base_vect_mod - use psb_neighbor_topology_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type !> \namespace psb_base_mod \class psb_d_base_vect_type !! The psb_d_base_vect_type @@ -2679,8 +2699,7 @@ module psb_d_base_multivect_mod !> Values. real(psb_dpk_), allocatable :: v(:,:) real(psb_dpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + ! neighbor-specific communication state removed; comm_handle owned below !> vector bldstate: !! null: pristine; @@ -2695,7 +2714,7 @@ module psb_d_base_multivect_mod integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) - type(psb_neighbor_topology_type) :: neighbor_topology + class(psb_comm_handle_type), allocatable :: comm_handle contains ! @@ -2804,8 +2823,6 @@ module psb_d_base_multivect_mod procedure, nopass :: device_wait => d_base_mlv_device_wait procedure, pass(x) :: maybe_free_buffer => d_base_mlv_maybe_free_buffer procedure, pass(x) :: free_buffer => d_base_mlv_free_buffer - procedure, pass(x) :: new_comid => d_base_mlv_new_comid - procedure, pass(x) :: free_comid => d_base_mlv_free_comid ! ! Gather/scatter. These are needed for MPI interfacing. @@ -2823,11 +2840,6 @@ module psb_d_base_multivect_mod procedure, pass(y) :: sctb_buf => d_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf - ! Neighbor alltoallv communication topology handling - procedure, pass(x) :: init_topology => d_base_mlv_init_topology - procedure, pass(x) :: free_topology => d_base_mlv_free_topology - - end type psb_d_base_multivect_type interface psb_d_base_multivect @@ -4085,17 +4097,6 @@ contains call psb_realloc(n*nc,x%combuf,info) end subroutine d_base_mlv_new_buffer - subroutine d_base_mlv_new_comid(n,x,info) - use psb_realloc_mod - implicit none - class(psb_d_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_), intent(out) :: info - - call psb_realloc(n,2_psb_ipk_,x%comid,info) - end subroutine d_base_mlv_new_comid - - subroutine d_base_mlv_maybe_free_buffer(x,info) use psb_realloc_mod implicit none @@ -4119,17 +4120,6 @@ contains & deallocate(x%combuf,stat=info) end subroutine d_base_mlv_free_buffer - subroutine d_base_mlv_free_comid(x,info) - use psb_realloc_mod - implicit none - class(psb_d_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%comid)) & - & deallocate(x%comid,stat=info) - end subroutine d_base_mlv_free_comid - - ! ! Gather: Y = beta * Y + alpha * X(IDX(:)) ! @@ -4351,35 +4341,8 @@ contains end subroutine d_base_mlv_device_wait - - - ! -------------------------------------------------------------------- - ! Implementation of methods used for neighbor alltoallv communication - ! -------------------------------------------------------------------- - subroutine d_base_mlv_init_topology(x, halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - implicit none - class(psb_d_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: halo_index(:) - integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%init(halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - - end subroutine d_base_mlv_init_topology - - subroutine d_base_mlv_free_topology(x, info) - implicit none - class(psb_d_base_multivect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%free(info) - - end subroutine d_base_mlv_free_topology - ! -------------------------------------------------------------------- - + ! + ! Communication routines for multivectors (delegates to base vector implementation) + ! end module psb_d_base_multivect_mod diff --git a/test/comm/psb_comm_test.F90 b/test/comm/psb_comm_test.F90 index 4ed282ded..a908068a0 100644 --- a/test/comm/psb_comm_test.F90 +++ b/test/comm/psb_comm_test.F90 @@ -18,12 +18,18 @@ program psb_comm_test use psb_base_mod use psi_mod + use psb_comm_factory_mod, only: psb_comm_init, psb_comm_free + use psb_comm_schemes_mod, only: psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_isend_irecv_ + use psb_comm_schemes_mod, only: psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ implicit none ! ---- parameters ---- integer(psb_ipk_) :: idim integer(psb_ipk_) :: argc + integer(psb_ipk_) :: iters character(len=32) :: arg + character(len=16) :: mode ! ---- descriptor / context ---- type(psb_ctxt_type) :: ctxt @@ -33,11 +39,11 @@ program psb_comm_test integer(psb_lpk_), allocatable :: myidx(:) ! ---- vectors ---- - type(psb_d_vect_type) :: v_baseline, v_neighbor + type(psb_d_vect_type) :: v_baseline, v_neighbor, v_neighbor_persistent ! ---- temporary / comparison arrays ---- real(psb_dpk_), allocatable :: vals(:) - real(psb_dpk_), allocatable :: result_baseline(:), result_neighbor(:) + real(psb_dpk_), allocatable :: result_baseline(:), result_neighbor(:), result_persistent(:) real(psb_dpk_), allocatable :: expected(:) ! ---- halo index bookkeeping ---- @@ -46,7 +52,9 @@ program psb_comm_test ! ---- error / reporting ---- integer(psb_ipk_) :: n_pass, n_total, imode + logical :: comm_ok real(psb_dpk_) :: err, tol + real(psb_dpk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent integer(psb_lpk_), allocatable :: glob_col(:) character(len=40) :: name @@ -54,6 +62,8 @@ program psb_comm_test tol = 1.0d-12 n_pass = 0 n_total = 0 + iters = 5 + mode = 'both' ! ---- parse command-line argument for idim ---- idim = 10 @@ -64,7 +74,22 @@ program psb_comm_test if (i < argc) then call get_command_argument(i+1, arg) read(arg, *) idim - exit + end if + else if (trim(arg) == '--iters') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) iters + end if + end if + end do + + ! parse optional mode flag + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--mode') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) mode end if end if end do @@ -135,8 +160,10 @@ program psb_comm_test ! ================================================================== call psb_geall(v_baseline, desc_a, info) call psb_geall(v_neighbor, desc_a, info) + call psb_geall(v_neighbor_persistent, desc_a, info) call psb_geasb(v_baseline, desc_a, info, scratch=.true.) call psb_geasb(v_neighbor, desc_a, info, scratch=.true.) + call psb_geasb(v_neighbor_persistent, desc_a, info, scratch=.true.) ! Fill owned entries with the global index value allocate(vals(ncol)) @@ -146,6 +173,7 @@ program psb_comm_test end do call v_baseline%set_vect(vals) call v_neighbor%set_vect(vals) + call v_neighbor_persistent%set_vect(vals) deallocate(vals) ! ================================================================== @@ -162,36 +190,162 @@ program psb_comm_test ! ================================================================== ! 6. Baseline halo exchange (Isend/Irecv in one call) ! ================================================================== - imode = IOR(psb_swap_send_, psb_swap_recv_) ! v_baseline%v is a psb_d_base_vect_type - call psi_swapdata(flag=imode, beta=dzero, y=v_baseline%v, desc_a=desc_a, info=info, data=psb_comm_halo_) + call psi_swapdata( & + swap_status=psb_comm_status_start_, & + beta=dzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) if (info /= psb_success_) then write(psb_err_unit,*) my_rank, 'baseline swap error:', info call psb_abort(ctxt) end if + call psi_swapdata( & + swap_status=psb_comm_status_wait_, & + beta=dzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + + ! ================================================================== ! 7. Neighbor topology halo exchange (start + wait) ! ================================================================== - imode = psb_swap_start_ - call psi_swapdata(imode, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psb_comm_init(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_init neighbor error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) if (info /= psb_success_) then write(psb_err_unit,*) my_rank, 'neighbor start error:', info call psb_abort(ctxt) end if - imode = psb_swap_wait_ - call psi_swapdata(imode, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) if (info /= psb_success_) then write(psb_err_unit,*) my_rank, 'neighbor wait error:', info call psb_abort(ctxt) end if + ! ================================================================== + ! 7b. Persistent-neighbor halo exchange (start + wait) + ! ================================================================== + call psb_comm_init(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_init persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor wait error:', info + call psb_abort(ctxt) + end if + + ! ================================================================== + ! 8. Performance: repeat exchanges and measure timings + ! ================================================================== + if (my_rank == 0) then + write(psb_out_unit,'("Timing: running ",i0," iterations for baseline, neighbor and persistent-neighbor")') iters + end if + + tsum_baseline = 0.0_psb_dpk_ + tsum_neighbor = 0.0_psb_dpk_ + tsum_neighbor_persistent = 0.0_psb_dpk_ + + call psb_comm_init(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) + call psb_comm_init(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + call psb_comm_init(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + + ! ---- Comm check: verify selected communication schemes ---- + n_total = n_total + 1 + comm_ok = allocated(v_baseline%v%comm_handle) .and. allocated(v_neighbor%v%comm_handle) .and. & + & allocated(v_neighbor_persistent%v%comm_handle) + + if (comm_ok) then + comm_ok = (v_baseline%v%comm_handle%comm_type == psb_comm_isend_irecv_) .and. & + & (v_neighbor%v%comm_handle%comm_type == psb_comm_ineighbor_alltoallv_) .and. & + & (v_neighbor_persistent%v%comm_handle%comm_type == psb_comm_persistent_ineighbor_alltoallv_) + end if + + if (my_rank == 0) then + if (comm_ok) then + write(psb_out_unit,'(" [PASS] comm scheme selection : baseline/neighbor/persistent OK")') + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] comm scheme selection : unexpected comm_type mapping")') + end if + end if + + do i = 1, iters + ! baseline timing + t0 = psb_wtime() + call psi_swapdata( & + swap_status=psb_comm_status_start_, & + beta=dzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + call psi_swapdata( & + swap_status=psb_comm_status_wait_, & + beta=dzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_baseline = tsum_baseline + dt + + ! neighbor timing (start + wait) + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor = tsum_neighbor + dt + + ! persistent-neighbor timing (start + wait) + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor_persistent = tsum_neighbor_persistent + dt + end do + + if (my_rank == 0) then + write(psb_out_unit,'(" Avg baseline time : ",es12.5)') (tsum_baseline / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline + write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') (tsum_neighbor / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor + write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') (tsum_neighbor_persistent / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_neighbor_persistent + end if + ! ================================================================== ! 8. Extract results and compare ! ================================================================== result_baseline = v_baseline%get_vect() result_neighbor = v_neighbor%get_vect() + result_persistent = v_neighbor_persistent%get_vect() ! ---- Test 1: cross-check baseline vs neighbor (all entries) ---- n_total = n_total + 1 @@ -232,15 +386,41 @@ program psb_comm_test end if end if - ! ---- Test 4: repeat neighbor exchange (topology reuse) ---- + ! ---- Test 4: cross-check baseline vs persistent-neighbor (all entries) ---- + n_total = n_total + 1 + err = maxval(abs(result_baseline(1:ncol) - result_persistent(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] cross-check baseline vs pers-nei : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] cross-check baseline vs pers-nei : err = ",es12.5)') err + end if + end if + + ! ---- Test 5: persistent-neighbor absolute correctness ---- + n_total = n_total + 1 + err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] pers-neigh absolute correctness : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] pers-neigh absolute correctness : err = ",es12.5)') err + end if + end if + + ! ---- Test 6: repeat neighbor exchange (topology reuse) ---- ! Reset halo entries to zero, run again, and check do i = nrow+1, ncol result_neighbor(i) = dzero end do call v_neighbor%set_vect(result_neighbor) - call psi_swapdata(psb_swap_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - call psi_swapdata(psb_swap_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) result_neighbor = v_neighbor%get_vect() n_total = n_total + 1 @@ -255,6 +435,28 @@ program psb_comm_test end if end if + ! ---- Test 7: repeat persistent-neighbor exchange (buffer reuse) ---- + do i = nrow+1, ncol + result_persistent(i) = dzero + end do + call v_neighbor_persistent%set_vect(result_persistent) + + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + + result_persistent = v_neighbor_persistent%get_vect() + n_total = n_total + 1 + err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] pers-neigh buffer reuse : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] pers-neigh buffer reuse : err = ",es12.5)') err + end if + end if + ! ================================================================== ! 9. Summary ! ================================================================== @@ -272,9 +474,11 @@ program psb_comm_test ! ================================================================== ! 10. Cleanup ! ================================================================== - deallocate(result_baseline, result_neighbor, expected, glob_col) - call psb_gefree(v_baseline, desc_a, info) + deallocate(result_baseline, result_neighbor, result_persistent, expected, glob_col) + +9999 call psb_gefree(v_baseline, desc_a, info) call psb_gefree(v_neighbor, desc_a, info) + call psb_gefree(v_neighbor_persistent, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(ctxt) From 33477e4f039133bc065fc36a32a1649db5c6ee23 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Fri, 3 Apr 2026 16:02:34 +0200 Subject: [PATCH 151/175] [UPDATE] Changed all the interfaces that calls psi_swapdata inside PSBLAS internals for double precision vectors. Added also tests under test/comm/ in order to check psi_swapdata, psb_spmv and psb_cg calls --- base/comm/internals/psi_dswapdata.F90 | 50 +- base/comm/internals/psi_dswaptran.F90 | 110 +- base/comm/psb_dhalo.f90 | 6 +- base/comm/psb_dovrl.f90 | 3 +- .../comm_schemes/psb_comm_factory_mod.F90 | 40 +- .../comm_schemes/psb_comm_schemes_mod.F90 | 1 + base/psblas/psb_dspmm.f90 | 33 +- log.txt | 1824 +++++++++++++++++ test/comm/README.md | 23 + test/comm/cg/Makefile | 37 + test/comm/cg/README.md | 37 + test/comm/cg/psb_comm_cg_test.F90 | 401 ++++ test/comm/cg/psb_pde3d_cg_noprec.inp | 18 + test/comm/spmv/Makefile | 33 + test/comm/spmv/README.md | 21 + test/comm/spmv/psb_spmv_overlap_test.f90 | 680 ++++++ test/comm/spmv/spmv_overlap.f90 | 28 + test/comm/{ => swapdata}/Makefile | 0 test/comm/swapdata/README.md | 19 + test/comm/{ => swapdata}/psb_comm_test.F90 | 0 test/computational_routines/CMakeLists.txt | 3 +- .../spmm/CMakeLists.txt | 8 + test/computational_routines/spmm/Makefile | 4 +- test/pdegen/psb_d_pde3d.F90 | 10 + 24 files changed, 3288 insertions(+), 101 deletions(-) create mode 100644 log.txt create mode 100644 test/comm/README.md create mode 100644 test/comm/cg/Makefile create mode 100644 test/comm/cg/README.md create mode 100644 test/comm/cg/psb_comm_cg_test.F90 create mode 100644 test/comm/cg/psb_pde3d_cg_noprec.inp create mode 100644 test/comm/spmv/Makefile create mode 100644 test/comm/spmv/README.md create mode 100644 test/comm/spmv/psb_spmv_overlap_test.f90 create mode 100644 test/comm/spmv/spmv_overlap.f90 rename test/comm/{ => swapdata}/Makefile (100%) create mode 100644 test/comm/swapdata/README.md rename test/comm/{ => swapdata}/psb_comm_test.F90 (100%) diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 42e729022..ef135ba9e 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -82,12 +82,7 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod - use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & - & psb_comm_persistent_ineighbor_alltoallv_, & - & psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ - use psb_comm_factory_mod, only: psb_comm_init, psb_comm_free - use psb_comm_baseline_mod, only: psb_comm_baseline_handle, psb_comm_baseline_alloc_comid - use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle + use psb_comm_factory_mod contains module subroutine psi_dswapdata_vect(swap_status,beta,y,desc_a,info,data) @@ -109,7 +104,6 @@ contains ! locals type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - integer(psb_ipk_) :: setflag class(psb_i_base_vect_type), pointer :: comm_indexes ! communication scheme/status selectors @@ -155,21 +149,13 @@ contains ! write(psb_err_unit,*) me, 'DBG: get_list_p -> num_neighbors=', & ! & num_neighbors, ' total_send=', total_send, ' total_recv=', total_recv ! end if - ! Accept both new comm-status enums and legacy descriptor bitfields. - setflag = swap_status - if (swap_status == psb_swap_start_) then - setflag = psb_comm_status_start_ - else if (swap_status == psb_swap_wait_) then - setflag = psb_comm_status_wait_ - else if (iand(swap_status, psb_swap_start_) /= 0 .and. iand(swap_status, psb_swap_wait_) /= 0) then - setflag = psb_comm_status_unknown_ - end if - if ((setflag /= psb_comm_status_start_) .and. (setflag /= psb_comm_status_wait_) .and. & - & (setflag /= psb_comm_status_unknown_)) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Invalid swap_status swap_status') - goto 9999 + + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 end if if (.not. allocated(y%comm_handle)) then @@ -189,7 +175,7 @@ contains ! end if ! end if ! Set the normalized swap status on the comm handle - call y%comm_handle%set_swap_status(setflag, info) + call y%comm_handle%set_swap_status(swap_status, info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='set_swap_status') goto 9999 @@ -292,9 +278,15 @@ contains goto 9999 end select + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + n=1 - do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) - do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + do_send = (swap_status == psb_comm_status_start_).or.(swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_).or.(swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n @@ -539,8 +531,14 @@ contains goto 9999 end select - do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) - do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index 2c75eb766..821aa6f35 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -92,10 +92,7 @@ ! submodule (psi_d_comm_v_mod) psi_d_swaptran_impl use psb_base_mod - use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_ - use psb_comm_factory_mod, only: psb_comm_init, psb_comm_free - use psb_comm_baseline_mod, only: psb_comm_baseline_handle - use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle + use psb_comm_factory_mod contains module subroutine psi_dswaptran_vect(swap_status,beta,y,desc_a,info,data) @@ -122,10 +119,8 @@ contains character(len=20) :: name ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait logical :: baseline, neighbor_a2av - info = psb_success_ name = 'psi_dswaptran_vect' call psb_erractionsave(err_act) @@ -157,20 +152,11 @@ contains goto 9999 end if - swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 - swap_sync = iand(swap_status,psb_swap_sync_) /= 0 - swap_send = iand(swap_status,psb_swap_send_) /= 0 - swap_recv = iand(swap_status,psb_swap_recv_) /= 0 - swap_start = iand(swap_status,psb_swap_start_) /= 0 - swap_wait = iand(swap_status,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible swap_status settings: both baseline and neighbor_a2av are true') - goto 9999 + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 end if if (.not. allocated(y%comm_handle)) then @@ -181,6 +167,22 @@ contains end if end if + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') + goto 9999 + end if + + baseline = .false. + neighbor_a2av = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) + neighbor_a2av = .true. + case default + baseline = .true. + end select + if (baseline) then call psi_dtran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then @@ -276,12 +278,8 @@ contains end select n=1 - swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 - swap_sync = iand(swap_status,psb_swap_sync_) /= 0 - swap_send = iand(swap_status,psb_swap_send_) /= 0 - swap_recv = iand(swap_status,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n @@ -534,8 +532,8 @@ contains goto 9999 end select - do_start = iand(swap_status,psb_swap_start_) /= 0 - do_wait = iand(swap_status,psb_swap_wait_) /= 0 + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() @@ -690,8 +688,8 @@ contains character(len=20) :: name ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait logical :: baseline, neighbor_a2av + integer(psb_ipk_) :: setflag info = psb_success_ @@ -725,19 +723,20 @@ contains goto 9999 end if - swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 - swap_sync = iand(swap_status,psb_swap_sync_) /= 0 - swap_send = iand(swap_status,psb_swap_send_) /= 0 - swap_recv = iand(swap_status,psb_swap_recv_) /= 0 - swap_start = iand(swap_status,psb_swap_start_) /= 0 - swap_wait = iand(swap_status,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + setflag = swap_status + if (swap_status == psb_swap_start_) then + setflag = psb_comm_status_start_ + else if (swap_status == psb_swap_wait_) then + setflag = psb_comm_status_wait_ + else if ((iand(swap_status, psb_swap_send_) /= 0) .or. (iand(swap_status, psb_swap_recv_) /= 0) .or. & + & (iand(swap_status, psb_swap_mpi_) /= 0) .or. (iand(swap_status, psb_swap_sync_) /= 0)) then + setflag = psb_comm_status_sync_ + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + if ((setflag /= psb_comm_status_start_) .and. (setflag /= psb_comm_status_wait_) .and. & + & (setflag /= psb_comm_status_sync_)) then info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible swap_status settings: both baseline and neighbor_a2av are true') + call psb_errpush(info,name,a_err='Invalid swap_status') goto 9999 end if @@ -749,14 +748,29 @@ contains end if end if + call y%comm_handle%set_swap_status(setflag, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') + goto 9999 + end if + + baseline = .false. + neighbor_a2av = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) + neighbor_a2av = .true. + case default + baseline = .true. + end select + if (baseline) then - call psi_dtran_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + call psi_dtran_baseline_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if else if (neighbor_a2av) then - call psi_dtran_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + call psi_dtran_neighbor_topology_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,& & total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='neighbor a2av swap') @@ -832,12 +846,8 @@ contains n = y%get_ncols() - swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 - swap_sync = iand(swap_status,psb_swap_sync_) /= 0 - swap_send = iand(swap_status,psb_swap_send_) /= 0 - swap_recv = iand(swap_status,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n @@ -1091,8 +1101,8 @@ contains goto 9999 end select - do_start = iand(swap_status,psb_swap_start_) /= 0 - do_wait = iand(swap_status,psb_swap_wait_) /= 0 + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() diff --git a/base/comm/psb_dhalo.f90 b/base/comm/psb_dhalo.f90 index 8a182d457..24223485d 100644 --- a/base/comm/psb_dhalo.f90 +++ b/base/comm/psb_dhalo.f90 @@ -54,6 +54,8 @@ subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalo_vect use psi_mod + use psb_comm_factory_mod + implicit none type(psb_d_vect_type), intent(inout) :: x @@ -115,7 +117,7 @@ subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) ! default base communication scheme Isend/Irecv + imode = psb_comm_status_sync_ endif if ((info == 0).and.(lldx psb_dovrl_vect use psi_mod + use psb_comm_factory_mod implicit none type(psb_d_vect_type), intent(inout) :: x @@ -121,7 +122,7 @@ subroutine psb_dovrl_vect(x,desc_a,info,update,mode) if (present(mode)) then mode_ = mode else - mode_ = IOR(psb_swap_send_,psb_swap_recv_) + mode_ = psb_comm_status_sync_ endif do_swap = (mode_ /= 0) diff --git a/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 index 1652f90bc..846aaec53 100644 --- a/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 @@ -1,7 +1,9 @@ module psb_comm_factory_mod use psb_const_mod - use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_ineighbor_alltoallv_, & - & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_unknown_ + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, & + & psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_unknown_, psb_comm_status_start_, psb_comm_status_wait_, & + & psb_comm_status_sync_, psb_comm_status_unknown_ use psb_comm_baseline_mod, only: psb_comm_baseline_handle use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle implicit none @@ -14,18 +16,45 @@ contains integer(psb_ipk_), intent(in) :: comm_type class(psb_comm_handle_type), allocatable, intent(inout) :: handle integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: old_id, old_swap_status info = 0 + old_id = 0 + old_swap_status = psb_comm_status_unknown_ + if (allocated(handle)) then - info = -1 - return + old_id = handle%id + old_swap_status = handle%swap_status + + if (handle%comm_type == comm_type) then + call handle%free(info) + if (info /= 0) return + call handle%init(info) + if (info /= 0) return + handle%id = old_id + handle%swap_status = old_swap_status + select type(h => handle) + type is(psb_comm_neighbor_handle) + h%comm_type = comm_type + h%use_persistent_buffers = (comm_type == psb_comm_persistent_ineighbor_alltoallv_) + class default + ! nothing else to configure + end select + return + else + call psb_comm_free(handle, info) + if (info /= 0) return + end if end if + select case(comm_type) case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) allocate(psb_comm_neighbor_handle :: handle, stat=info) if (info /= 0) return call handle%init(info) if (info /= 0) return + handle%id = old_id + handle%swap_status = old_swap_status select type(h => handle) type is(psb_comm_neighbor_handle) h%comm_type = comm_type @@ -35,6 +64,9 @@ contains allocate(psb_comm_baseline_handle :: handle, stat=info) if (info /= 0) return call handle%init(info) + if (info /= 0) return + handle%id = old_id + handle%swap_status = old_swap_status end select end subroutine psb_comm_init diff --git a/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 index 0c91d8584..e894ba766 100644 --- a/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 @@ -17,6 +17,7 @@ module psb_comm_schemes_mod enumerator psb_comm_status_unknown_ enumerator psb_comm_status_start_ enumerator psb_comm_status_wait_ + enumerator psb_comm_status_sync_ ! Used in order to exchange data in a synchronous way (Start and recv in the same call) end enum diff --git a/base/psblas/psb_dspmm.f90 b/base/psblas/psb_dspmm.f90 index 3ec5d0e0d..10702422b 100644 --- a/base/psblas/psb_dspmm.f90 +++ b/base/psblas/psb_dspmm.f90 @@ -57,6 +57,8 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& & trans, doswap) use psb_base_mod, psb_protect_name => psb_dspmv_vect use psi_mod + use psb_comm_factory_mod + implicit none real(psb_dpk_), intent(in) :: alpha, beta @@ -174,12 +176,12 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(psb_swap_send_, dzero, x%v, desc_a, info, data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_comm_status_start_, dzero, x%v, desc_a, info, data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(psb_swap_recv_, dzero, x%v, desc_a, info, data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_comm_status_wait_, dzero, x%v, desc_a, info, data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,done,y%v,info) @@ -194,7 +196,7 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase11) if (doswap_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_), dzero, x%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_sync_, dzero, x%v, desc_a, info, data=psb_comm_halo_) end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) @@ -237,9 +239,9 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_), done, y%v, desc_a, info) + call psi_swaptran(psb_comm_status_sync_, done, y%v, desc_a, info) if (info == psb_success_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_), done, y%v, desc_a, info, data=psb_comm_ovr_) + call psi_swapdata(psb_comm_status_sync_, done, y%v, desc_a, info, data=psb_comm_ovr_) end if if (debug_level >= psb_debug_comp_) & @@ -301,6 +303,8 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& & trans, k, jx, jy, work, doswap) use psb_base_mod, psb_protect_name => psb_dspmm use psi_mod + use psb_comm_factory_mod + implicit none real(psb_dpk_), intent(in) :: alpha, beta @@ -560,9 +564,9 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& if (doswap_)then ik = lik ! This should not be an issue, we are expecting the values ! to be small, within PSB_IPK - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& - & ik,done,y(:,1:ik),desc_a,iwork,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + call psi_swaptran(psb_comm_status_sync_,& + & ik,done,y(:,1:ik),desc_a,iwork,info,data=psb_comm_ovr_) + if (info == psb_success_) call psi_swapdata(psb_comm_status_sync_,& & ik,done,y(:,1:ik),desc_a,iwork,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & @@ -653,6 +657,7 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& & trans, work, doswap) use psb_base_mod, psb_protect_name => psb_dspmv use psi_mod + use psb_comm_factory_mod implicit none real(psb_dpk_), intent(in) :: alpha, beta @@ -799,8 +804,7 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & dzero,x,desc_a,iwork,info,data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_sync_,dzero,x,desc_a,iwork,info,data=psb_comm_halo_) end if call psb_csmm(alpha,a,x,beta,y,info) @@ -866,11 +870,10 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& - & done,yp,desc_a,iwork,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & done,yp,desc_a,iwork,info,data=psb_comm_ovr_) - + call psi_swaptran(psb_comm_status_sync_,done,yp,desc_a,iwork,info) + if (info == psb_success_) then + call psi_swapdata(psb_comm_status_sync_,done,yp,desc_a,iwork,info,data=psb_comm_ovr_) + end if if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info if(info /= psb_success_) then diff --git a/log.txt b/log.txt new file mode 100644 index 000000000..416ddb683 --- /dev/null +++ b/log.txt @@ -0,0 +1,1824 @@ +(if test ! -d lib ; then mkdir lib; fi) +make -C base mods +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C modules objs F90="" F90COPT=" " +(if test ! -d include ; then mkdir include; fi; /usr/bin/install -c -p -m 644 Make.inc include/Make.inc.psblas) +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_const_mod.F90 -o psb_const_mod.o +(if test ! -d modules ; then mkdir modules; fi;) +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cbind_const_mod.F90 -o psb_cbind_const_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_mod.F90 -o psb_error_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_string_mod.f90 -o auxil/psb_string_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_m_serial_mod.f90 -o auxil/psi_m_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_e_serial_mod.f90 -o auxil/psi_e_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_s_serial_mod.f90 -o auxil/psi_s_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_d_serial_mod.f90 -o auxil/psi_d_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_c_serial_mod.f90 -o auxil/psi_c_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_z_serial_mod.f90 -o auxil/psi_z_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_acx_mod.f90 -o auxil/psi_acx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_alcx_mod.f90 -o auxil/psi_alcx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_lcx_mod.f90 -o auxil/psi_lcx_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/comm_schemes/psb_comm_schemes_mod.F90 -o comm/comm_schemes/psb_comm_schemes_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/comm_schemes/psb_comm_baseline_mod.F90 -o comm/comm_schemes/psb_comm_baseline_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_realloc_mod.F90 -o auxil/psb_m_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_realloc_mod.F90 -o auxil/psb_e_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_realloc_mod.F90 -o auxil/psb_s_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_realloc_mod.F90 -o auxil/psb_d_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_realloc_mod.F90 -o auxil/psb_c_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_realloc_mod.F90 -o auxil/psb_z_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_realloc_mod.F90 -o psb_realloc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_serial_mod.f90 -o auxil/psi_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c desc/psb_desc_const_mod.f90 -o desc/psb_desc_const_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_hsort_mod.f90 -o auxil/psb_m_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_isort_mod.f90 -o auxil/psb_m_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_msort_mod.f90 -o auxil/psb_m_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_qsort_mod.f90 -o auxil/psb_m_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_hsort_mod.f90 -o auxil/psb_e_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_isort_mod.f90 -o auxil/psb_e_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_msort_mod.f90 -o auxil/psb_e_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_qsort_mod.f90 -o auxil/psb_e_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_mod.f90 -o auxil/psb_s_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_isort_mod.f90 -o auxil/psb_s_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_msort_mod.f90 -o auxil/psb_s_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_qsort_mod.f90 -o auxil/psb_s_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_mod.f90 -o auxil/psb_d_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_isort_mod.f90 -o auxil/psb_d_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_msort_mod.f90 -o auxil/psb_d_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_qsort_mod.f90 -o auxil/psb_d_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_mod.f90 -o auxil/psb_c_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_isort_mod.f90 -o auxil/psb_c_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_msort_mod.f90 -o auxil/psb_c_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_qsort_mod.f90 -o auxil/psb_c_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_mod.f90 -o auxil/psb_z_hsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_isort_mod.f90 -o auxil/psb_z_isort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_msort_mod.f90 -o auxil/psb_z_msort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_qsort_mod.f90 -o auxil/psb_z_qsort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_i_hsort_x_mod.f90 -o auxil/psb_i_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_l_hsort_x_mod.f90 -o auxil/psb_l_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_x_mod.f90 -o auxil/psb_s_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_ip_reord_mod.F90 -o auxil/psb_m_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_ip_reord_mod.F90 -o auxil/psb_e_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_ip_reord_mod.F90 -o auxil/psb_s_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_ip_reord_mod.F90 -o auxil/psb_d_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_ip_reord_mod.F90 -o auxil/psb_c_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_ip_reord_mod.F90 -o auxil/psb_z_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_mod.F90 -o desc/psb_hash_mod.o +mpicc -g -O3 -I. -c desc/psb_hashval.c -o desc/psb_hashval.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 -o comm/comm_schemes/psb_comm_neighbor_impl_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/psb_neighbor_topology_mod.F90 -o comm/psb_neighbor_topology_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_base_mat_mod.F90 -o serial/psb_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_x_mod.f90 -o auxil/psb_d_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_x_mod.f90 -o auxil/psb_c_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_x_mod.f90 -o auxil/psb_z_hsort_x_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_ip_reord_mod.F90 -o auxil/psb_ip_reord_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_sort_mod.f90 -o auxil/psb_sort_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_base_vect_mod.F90 -o serial/psb_i_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/comm_schemes/psb_comm_factory_mod.F90 -o comm/comm_schemes/psb_comm_factory_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_vect_mod.F90 -o serial/psb_i_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_base_vect_mod.F90 -o serial/psb_l_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_vect_mod.F90 -o serial/psb_l_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_vect_mod.F90 -o serial/psb_d_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_vect_mod.F90 -o serial/psb_s_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_vect_mod.F90 -o serial/psb_c_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_vect_mod.F90 -o serial/psb_z_base_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_vect_mod.F90 -o serial/psb_z_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_mat_mod.F90 -o serial/psb_z_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_vect_mod.F90 -o serial/psb_d_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_mat_mod.F90 -o serial/psb_d_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csr_mat_mod.f90 -o serial/psb_z_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csc_mat_mod.f90 -o serial/psb_z_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_vect_mod.F90 -o serial/psb_s_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_mat_mod.F90 -o serial/psb_s_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csr_mat_mod.f90 -o serial/psb_d_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csc_mat_mod.f90 -o serial/psb_d_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_vect_mod.F90 -o serial/psb_c_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_mat_mod.F90 -o serial/psb_c_base_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_rb_idx_tree_mod.f90 -o auxil/psb_z_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csr_mat_mod.f90 -o serial/psb_s_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csc_mat_mod.f90 -o serial/psb_s_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_rb_idx_tree_mod.f90 -o auxil/psb_d_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csr_mat_mod.f90 -o serial/psb_c_csr_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csc_mat_mod.f90 -o serial/psb_c_csc_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_rb_idx_tree_mod.f90 -o auxil/psb_s_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_mat_mod.F90 -o serial/psb_z_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_rb_idx_tree_mod.f90 -o auxil/psb_c_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_mat_mod.F90 -o serial/psb_d_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_rb_idx_tree_mod.f90 -o auxil/psb_rb_idx_tree_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_mat_mod.F90 -o serial/psb_s_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_vect_mod.f90 -o serial/psb_vect_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_mat_mod.F90 -o serial/psb_c_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_mat_mod.f90 -o serial/psb_mat_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_serial_mod.f90 -o serial/psb_s_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_serial_mod.f90 -o serial/psb_d_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_serial_mod.f90 -o serial/psb_c_serial_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_serial_mod.f90 -o serial/psb_z_serial_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_penv_mod.F90 -o penv/psi_penv_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_p2p_mod.F90 -o penv/psi_i2_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_p2p_mod.F90 -o penv/psi_m_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_p2p_mod.F90 -o penv/psi_e_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_p2p_mod.F90 -o penv/psi_s_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_p2p_mod.F90 -o penv/psi_d_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_p2p_mod.F90 -o penv/psi_c_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_p2p_mod.F90 -o penv/psi_z_p2p_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_p2p_mod.F90 -o penv/psi_p2p_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_collective_mod.F90 -o penv/psi_i2_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_collective_mod.F90 -o penv/psi_e_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_collective_mod.F90 -o penv/psi_m_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_collective_mod.F90 -o penv/psi_s_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_collective_mod.F90 -o penv/psi_d_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_collective_mod.F90 -o penv/psi_c_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_collective_mod.F90 -o penv/psi_z_collective_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_serial_mod.f90 -o serial/psb_serial_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_collective_mod.F90 -o penv/psi_collective_mod.o +mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c psb_penv_mod.F90 -o psb_penv_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_indx_map_mod.F90 -o desc/psb_indx_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_timers_mod.f90 -o psb_timers_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_impl.F90 -o psb_error_impl.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_map_mod.F90 -o desc/psb_hash_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_list_map_mod.F90 -o desc/psb_list_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_repl_map_mod.F90 -o desc/psb_repl_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_gen_block_map_mod.F90 -o desc/psb_gen_block_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_glist_map_mod.F90 -o desc/psb_glist_map_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_desc_mod.F90 -o desc/psb_desc_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_e_comm_a_mod.f90 -o comm/psi_e_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_m_comm_a_mod.f90 -o comm/psi_m_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_a_mod.f90 -o comm/psi_s_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_a_mod.f90 -o comm/psi_d_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_a_mod.f90 -o comm/psi_c_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_a_mod.f90 -o comm/psi_z_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i_comm_mod.f90 -o comm/psb_i_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_l_comm_mod.f90 -o comm/psb_l_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_mod.f90 -o comm/psb_s_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_mod.f90 -o comm/psb_d_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_mod.f90 -o comm/psb_c_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_mod.f90 -o comm/psb_z_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i2_comm_a_mod.f90 -o comm/psb_i2_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_m_comm_a_mod.f90 -o comm/psb_m_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_e_comm_a_mod.f90 -o comm/psb_e_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_a_mod.f90 -o comm/psb_s_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_a_mod.f90 -o comm/psb_d_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_a_mod.f90 -o comm/psb_c_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_a_mod.f90 -o comm/psb_z_comm_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_s_psblas_mod.F90 -o psblas/psb_s_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_c_psblas_mod.F90 -o psblas/psb_c_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_d_psblas_mod.F90 -o psblas/psb_d_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_z_psblas_mod.F90 -o psblas/psb_z_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_check_mod.f90 -o psb_check_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_v_mod.f90 -o comm/psi_s_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_v_mod.f90 -o comm/psi_c_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_v_mod.f90 -o comm/psi_z_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_v_mod.f90 -o comm/psi_d_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_i_comm_v_mod.f90 -o comm/psi_i_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_l_comm_v_mod.f90 -o comm/psi_l_comm_v_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_mod.F90 -o psi_s_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_i_mod.F90 -o psi_i_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_mod.F90 -o psi_z_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_mod.F90 -o psi_c_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_mod.F90 -o psi_d_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_l_mod.F90 -o psi_l_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psblas/psb_psblas_mod.f90 -o psblas/psb_psblas_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psi_mod.f90 -o psi_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_comm_mod.f90 -o comm/psb_comm_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_cd_tools_mod.F90 -o tools/psb_cd_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_m_tools_a_mod.f90 -o tools/psb_m_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_e_tools_a_mod.f90 -o tools/psb_e_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_s_tools_mod.F90 -o tools/psb_s_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_d_tools_mod.F90 -o tools/psb_d_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_c_tools_mod.F90 -o tools/psb_c_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_z_tools_mod.F90 -o tools/psb_z_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_s_tools_a_mod.f90 -o tools/psb_s_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_d_tools_a_mod.f90 -o tools/psb_d_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_c_tools_a_mod.f90 -o tools/psb_c_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_z_tools_a_mod.f90 -o tools/psb_z_tools_a_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_i_tools_mod.F90 -o tools/psb_i_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_l_tools_mod.F90 -o tools/psb_l_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_tools_mod.f90 -o tools/psb_tools_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_base_linmap_mod.f90 -o comm/psb_base_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_linmap_mod.f90 -o comm/psb_s_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_linmap_mod.f90 -o comm/psb_d_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_linmap_mod.f90 -o comm/psb_c_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_linmap_mod.f90 -o comm/psb_z_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_linmap_mod.f90 -o comm/psb_linmap_mod.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c error.f90 -o error.o +mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_base_mod.f90 -o psb_base_mod.o +mpicc -g -O3 -I. -c cutil.c -o cutil.o +/usr/bin/install -c -p -p *.mod ../../modules +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C util mods +make -C prec mods +make -C ext mods +make -C base objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_blockpart_mod.f90 -o psb_blockpart_mod.o +mpicc -g -O3 -I. -I../include -c psb_metis_int.c -o psb_metis_int.o +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_const_mod.f90 -o psb_prec_const_mod.o +make -C modules objs F90="" F90COPT=" " +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_ell_mat_mod.f90 -o psb_d_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_partidx_mod.F90 -o psb_partidx_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_tools_mod.f90 -o psb_c_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_i_ext_util_mod.f90 -o psi_i_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_hbio_mod.f90 -o psb_hbio_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_tools_mod.f90 -o psb_d_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_s_ext_util_mod.f90 -o psi_s_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mmio_mod.F90 -o psb_mmio_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_c_ext_util_mod.f90 -o psi_c_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_tools_mod.f90 -o psb_s_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_mod.f90 -o psb_s_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_d_ext_util_mod.f90 -o psi_d_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_mod.f90 -o psb_d_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_tools_mod.f90 -o psb_z_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_z_ext_util_mod.f90 -o psi_z_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_mod.f90 -o psb_c_mat_dist_mod.o +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +/usr/bin/install -c -p -p *.mod ../../modules +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_mod.f90 -o psb_z_mat_dist_mod.o +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make -C serial objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C impl objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_base_mat_impl.f90 -o psb_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_ell_mat_mod.f90 -o psb_s_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_renum_mod.f90 -o psb_s_renum_mod.o +make -C sort objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_hsort_impl.f90 -o psb_s_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_isort_impl.f90 -o psb_s_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_msort_impl.f90 -o psb_s_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_qsort_impl.f90 -o psb_s_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_hsort_impl.f90 -o psb_d_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_isort_impl.f90 -o psb_d_isort_impl.o +make -C comm objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C internals objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata.F90 -o psi_dswapdata.o +make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter.F90 -o psb_dscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather.f90 -o psb_dgather.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csc_impl.F90 -o psb_s_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_mat_impl.F90 -o psb_s_mat_impl.o +make -C auxil objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_desc_index.F90 -o psi_desc_index.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_msort_impl.f90 -o psb_d_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_renum_mod.f90 -o psb_d_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_base_prec_mod.f90 -o psb_s_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_fnd_owner.F90 -o psi_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_ell_mat_mod.f90 -o psb_c_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_qsort_impl.f90 -o psb_d_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter.F90 -o psb_zscatter.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_ell_mat_mod.f90 -o psb_z_ell_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dns_mat_mod.f90 -o psb_s_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dns_mat_mod.f90 -o psb_d_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_iscatter.F90 -o psb_iscatter.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dns_mat_mod.f90 -o psb_c_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_hsort_impl.f90 -o psb_c_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dns_mat_mod.f90 -o psb_z_dns_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_ext_util_mod.f90 -o psi_ext_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_lscatter.F90 -o psb_lscatter.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_isort_impl.f90 -o psb_c_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather.f90 -o psb_sgather.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran.F90 -o psi_dswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_base_prec_mod.f90 -o psb_d_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_msort_impl.f90 -o psb_c_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_base_prec_mod.f90 -o psb_c_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_qsort_impl.f90 -o psb_c_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter.F90 -o psb_cscatter.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hll_mat_mod.f90 -o psb_d_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter.F90 -o psb_sscatter.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_a2a_fnd_owner.F90 -o psi_a2a_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hll_mat_mod.f90 -o psb_s_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_hsort_impl.f90 -o psb_z_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hll_mat_mod.f90 -o psb_c_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hll_mat_mod.f90 -o psb_z_hll_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_isort_impl.f90 -o psb_z_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_restr.f90 -o psi_iovrl_restr.o +make -C psblas objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddot.f90 -o psb_ddot.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata.F90 -o psi_sswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax.f90 -o psb_damax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter_a.F90 -o psb_dscatter_a.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dia_mat_mod.f90 -o psb_d_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hdia_mat_mod.f90 -o psb_d_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_msort_impl.f90 -o psb_z_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_bnd_elem.f90 -o psi_crea_bnd_elem.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dia_mat_mod.f90 -o psb_s_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hdia_mat_mod.f90 -o psb_s_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dia_mat_mod.f90 -o psb_c_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_qsort_impl.f90 -o psb_z_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum.f90 -o psb_dasum.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hdia_mat_mod.f90 -o psb_c_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dia_mat_mod.f90 -o psb_z_dia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_igather.f90 -o psb_igather.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hdia_mat_mod.f90 -o psb_z_hdia_mat_mod.o +mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ext_mod.F90 -o psb_ext_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_hsort_impl.f90 -o psb_m_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_renum_mod.f90 -o psb_c_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_isort_impl.f90 -o psb_m_isort_impl.o +make -C tools objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_icdasb.F90 -o psb_icdasb.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_msort_impl.f90 -o psb_m_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran.F90 -o psi_sswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_graph_fnd_owner.F90 -o psi_graph_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_base_prec_mod.f90 -o psb_z_base_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_qsort_impl.f90 -o psb_m_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_hsort_impl.f90 -o psb_e_hsort_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter_a.F90 -o psb_zscatter_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_rb_idx_tree_impl.F90 -o psb_s_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csr_impl.F90 -o psb_d_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_isort_impl.f90 -o psb_e_isort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_msort_impl.f90 -o psb_e_msort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_coo_impl.F90 -o psb_d_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csc_impl.F90 -o psb_d_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_mat_impl.F90 -o psb_d_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_rb_idx_tree_impl.F90 -o psb_d_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_renum_mod.f90 -o psb_z_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssphalo.F90 -o psb_ssphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_index.f90 -o psi_crea_index.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ilu_fact_mod.f90 -o psb_d_ilu_fact_mod.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_ainv_tools_mod.f90 -o psb_ainv_tools_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mscatter_a.F90 -o psb_mscatter_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ilu_fact_mod.f90 -o psb_s_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswapdata.F90 -o psi_iswapdata.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_save.f90 -o psi_iovrl_save.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lsame.f90 -o psb_lsame.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csr_impl.F90 -o psb_c_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_fact_mod.f90 -o psb_s_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdall.f90 -o psb_cdall.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdals.f90 -o psb_cdals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_escatter_a.F90 -o psb_escatter_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdalv.f90 -o psb_cdalv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_inloc.f90 -o psb_cd_inloc.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ilu_fact_mod.f90 -o psb_c_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_fact_mod.f90 -o psb_c_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswaptran.F90 -o psi_iswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ilu_fact_mod.f90 -o psb_z_ilu_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter_a.F90 -o psb_cscatter_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter_a.F90 -o psb_sscatter_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdins.F90 -o psb_cdins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_m_serial_impl.F90 -o psi_m_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_e_serial_impl.F90 -o psi_e_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsphalo.F90 -o psb_dsphalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_serial_impl.F90 -o psi_s_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspgather.F90 -o psb_dspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_fact_mod.f90 -o psb_z_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daxpby.f90 -o psb_daxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ihalo.f90 -o psb_ihalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdprt.f90 -o psb_cdprt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrm2.f90 -o psb_dnrm2.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrmi.f90 -o psb_dnrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invk_fact_mod.f90 -o psb_z_invk_fact_mod.o +/bin/cp -p *.mod ../modules +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o +make -C ext objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +/bin/cp -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_from_coo.f90 -o psb_s_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invt_fact_mod.f90 -o psb_z_invt_fact_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_to_coo.f90 -o psb_s_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata.F90 -o psi_cswapdata.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_coo.f90 -o psb_s_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_coo_impl.F90 -o psb_c_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csphalo.F90 -o psb_csphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_biconjg_mod.F90 -o psb_c_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_biconjg_mod.F90 -o psb_d_biconjg_mod.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_ovr_elem.f90 -o psi_crea_ovr_elem.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmpovrl.f90 -o psi_bld_tmpovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspgather.F90 -o psb_sspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lgather.f90 -o psb_lgather.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_fmt.f90 -o psb_s_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran.F90 -o psi_cswaptran.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_coo.f90 -o psb_s_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lhalo.f90 -o psb_lhalo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csc_impl.F90 -o psb_c_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmphalo.f90 -o psi_bld_tmphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspgather.F90 -o psb_zspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspgather.F90 -o psb_cspgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspnrm1.f90 -o psb_sspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_biconjg_mod.F90 -o psb_s_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_serial_impl.F90 -o psi_d_serial_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_fmt.f90 -o psb_s_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata.F90 -o psi_zswapdata.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspnrm1.f90 -o psb_dspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_from_coo.f90 -o psb_s_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_mat_dist_mod.f90 -o psb_mat_dist_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspnrm1.f90 -o psb_cspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_sort_dl.f90 -o psi_sort_dl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsphalo.F90 -o psb_zsphalo.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_biconjg_mod.F90 -o psb_z_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lovrl.f90 -o psb_lovrl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_indx_map_fnd_owner.F90 -o psi_indx_map_fnd_owner.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_upd.f90 -o psi_iovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran.F90 -o psi_zswaptran.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspnrm1.f90 -o psb_zspnrm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdren.f90 -o psb_cdren.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdrep.f90 -o psb_cdrep.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_to_coo.f90 -o psb_s_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax.f90 -o psb_zamax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_desc_impl.f90 -o psi_desc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_restr.f90 -o psi_lovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather.f90 -o psb_cgather.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo.f90 -o psb_chalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum.f90 -o psb_zasum.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_hash_impl.f90 -o psi_hash_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata_a.F90 -o psi_dswapdata_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_coo.f90 -o psb_s_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_mat_impl.F90 -o psb_c_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaxpby.f90 -o psb_zaxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_get_overlap.f90 -o psb_get_overlap.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl.f90 -o psb_covrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_type.f90 -o psb_s_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_type.f90 -o psb_d_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_srtlist.f90 -o psi_srtlist.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_type.f90 -o psb_c_prec_type.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_fmt.f90 -o psb_s_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_serial_impl.F90 -o psi_c_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdot.f90 -o psb_zdot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcdbldext.F90 -o psb_dcdbldext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrm2.f90 -o psb_znrm2.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrmi.f90 -o psb_znrmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_coo.f90 -o psb_s_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_lstext.f90 -o psb_cd_lstext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_remap.F90 -o psb_cd_remap.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_fmt.f90 -o psb_s_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_rb_idx_tree_impl.F90 -o psb_c_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_serial_impl.F90 -o psi_z_serial_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_type.f90 -o psb_z_prec_type.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_fact_mod.f90 -o psb_d_ainv_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdcpy.F90 -o psb_cdcpy.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcdbldext.F90 -o psb_zcdbldext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_bld_glb_dep_list.F90 -o psi_bld_glb_dep_list.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_aclsum.f90 -o psb_s_dia_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_xtr_loc_dl.F90 -o psi_xtr_loc_dl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_reinit.f90 -o psb_cd_reinit.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_switch_ovl_indxmap.f90 -o psb_cd_switch_ovl_indxmap.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save.f90 -o psi_sovrl_save.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd.f90 -o psi_sovrl_upd.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_allocate_mnnz.f90 -o psb_s_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr.f90 -o psi_dovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scdbldext.F90 -o psb_scdbldext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invk_fact_mod.f90 -o psb_d_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invt_fact_mod.f90 -o psb_d_invt_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather.f90 -o psb_zgather.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_arwsum.f90 -o psb_s_dia_arwsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo.f90 -o psb_zhalo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_renum_block.F90 -o psb_cd_renum_block.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_srwextd.f90 -o psb_srwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_drwextd.f90 -o psb_drwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_crwextd.f90 -o psb_crwextd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zrwextd.f90 -o psb_zrwextd.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_colsum.f90 -o psb_s_dia_colsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspspmm.F90 -o psb_sspspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl.f90 -o psb_zovrl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccdbldext.F90 -o psb_ccdbldext.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspalloc.f90 -o psb_dspalloc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspasb.f90 -o psb_dspasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspspmm.F90 -o psb_dspspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspspmm.F90 -o psb_cspspmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetptn.f90 -o psb_s_dia_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csr_impl.F90 -o psb_z_csr_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_coo_impl.F90 -o psb_z_coo_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csc_impl.F90 -o psb_z_csc_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_util_mod.f90 -o psb_util_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invk_fact_mod.f90 -o psb_s_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrm2.f90 -o psb_snrm2.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetrow.f90 -o psb_s_dia_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrmi.f90 -o psb_snrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather_a.f90 -o psb_dgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remap.F90 -o psb_d_remap.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswaptran_a.F90 -o psi_mswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspfree.f90 -o psb_dspfree.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save.f90 -o psi_dovrl_save.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd.f90 -o psi_dovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmm.f90 -o psb_s_dia_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmv.f90 -o psb_s_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_get_diag.f90 -o psb_s_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_maxval.f90 -o psb_s_dia_maxval.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invt_fact_mod.f90 -o psb_s_invt_fact_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_mold.f90 -o psb_s_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_print.f90 -o psb_s_dia_print.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invk_fact_mod.f90 -o psb_c_invk_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo_a.f90 -o psb_dhalo_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reallocate_nz.f90 -o psb_s_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_mat_impl.F90 -o psb_z_mat_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_rb_idx_tree_impl.F90 -o psb_z_rb_idx_tree_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl_a.f90 -o psb_dovrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather_a.f90 -o psb_sgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo_a.f90 -o psb_shalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl_a.f90 -o psb_sovrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_mat.F90 -o psb_z_remote_mat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reinit.f90 -o psb_s_dia_reinit.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspmm.f90 -o psb_sspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspsm.f90 -o psb_sspsm.o +/usr/bin/install -c -p -p *.mod ../modules +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dsprn.f90 -o psb_dsprn.o +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mgather_a.f90 -o psb_mgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_vect.F90 -o psb_s_remote_vect.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_rowsum.f90 -o psb_s_dia_rowsum.o +make -C util objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +/usr/bin/install -c -p -p *.mod ../modules +mpicc -g -O3 -I. -I../include -c psb_amd_order.c -o psb_amd_order.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_hbio_impl.f90 -o psb_s_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_hbio_impl.f90 -o psb_d_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invt_fact_mod.f90 -o psb_c_invt_fact_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_biconjg_mod.F90 -o psb_biconjg_mod.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr.f90 -o psi_covrl_restr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scal.f90 -o psb_s_dia_scal.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_vect.F90 -o psb_d_remote_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_hbio_impl.f90 -o psb_c_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mhalo_a.f90 -o psb_mhalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax.f90 -o psb_camax.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_movrl_a.f90 -o psb_movrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_hbio_impl.f90 -o psb_z_hbio_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata_a.F90 -o psi_cswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_vect.F90 -o psb_c_remote_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mmio_impl.f90 -o psb_s_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save.f90 -o psi_covrl_save.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scals.f90 -o psb_s_dia_scals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_vect.F90 -o psb_z_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_aclsum.f90 -o psb_s_ell_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_type.f90 -o psb_prec_type.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd.f90 -o psi_covrl_upd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum.f90 -o psb_casum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caxpby.f90 -o psb_caxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdot.f90 -o psb_cdot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspalloc.f90 -o psb_sspalloc.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran_a.F90 -o psi_cswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_e_remote_vect.F90 -o psb_e_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_allocate_mnnz.f90 -o psb_s_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_arwsum.f90 -o psb_s_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_colsum.f90 -o psb_s_ell_colsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_egather_a.f90 -o psb_egather_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr.f90 -o psi_zovrl_restr.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspasb.f90 -o psb_sspasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ehalo_a.f90 -o psb_ehalo_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_m_remote_vect.F90 -o psb_m_remote_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetblk.f90 -o psb_s_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetptn.f90 -o psb_s_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetrow.f90 -o psb_s_ell_csgetrow.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrm2.f90 -o psb_cnrm2.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrmi.f90 -o psb_cnrmi.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspmm.f90 -o psb_cspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remap.F90 -o psb_s_remap.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save.f90 -o psi_zovrl_save.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata_a.F90 -o psi_zswapdata_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd.f90 -o psi_zovrl_upd.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_restr_a.f90 -o psi_movrl_restr_a.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmm.f90 -o psb_s_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmv.f90 -o psb_s_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnm1.f90 -o psb_s_ell_csnm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspsm.f90 -o psb_cspsm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cmlt_vect.f90 -o psb_cmlt_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_mod.f90 -o psb_s_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspfree.f90 -o psb_sspfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspins.F90 -o psb_sspins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ssprn.f90 -o psb_ssprn.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mmio_impl.f90 -o psb_d_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mmio_impl.f90 -o psb_c_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mmio_impl.f90 -o psb_z_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_mod.f90 -o psb_d_prec_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_glob_to_loc.f90 -o psb_glob_to_loc.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_mod.f90 -o psb_c_prec_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnmi.f90 -o psb_s_ell_csnmi.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_i_mmio_impl.F90 -o psb_i_mmio_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_impl.f90 -o psb_s_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspspmm.F90 -o psb_zspspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dmlt_vect.f90 -o psb_dmlt_vect.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran_a.F90 -o psi_zswaptran_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_impl.f90 -o psb_d_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ssymbmm.f90 -o psb_ssymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dsymbmm.f90 -o psb_dsymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_mod.f90 -o psb_z_prec_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csput.f90 -o psb_s_ell_csput.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_mod.f90 -o psb_prec_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssm.f90 -o psb_s_ell_cssm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_loc_to_glob.f90 -o psb_loc_to_glob.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_diagprec.f90 -o psb_d_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iallc.f90 -o psb_iallc.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_nullprec.f90 -o psb_d_nullprec.o +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_save_a.f90 -o psi_movrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_upd_a.f90 -o psi_movrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iasb.f90 -o psb_iasb.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_bjacprec.f90 -o psb_d_bjacprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ifree.f90 -o psb_ifree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zmlt_vect.f90 -o psb_zmlt_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssv.f90 -o psb_s_ell_cssv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_csymbmm.f90 -o psb_csymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iins.f90 -o psb_iins.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lallc.f90 -o psb_lallc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_get_diag.f90 -o psb_s_ell_get_diag.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_impl.f90 -o psb_c_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_restr_a.f90 -o psi_eovrl_restr_a.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_save_a.f90 -o psi_eovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lasb.f90 -o psb_lasb.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_impl.f90 -o psb_z_mat_dist_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_renum_impl.F90 -o psb_s_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_smlt_vect.f90 -o psb_smlt_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_maxval.f90 -o psb_s_ell_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_mold.f90 -o psb_s_ell_mold.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zsymbmm.f90 -o psb_zsymbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_diagprec.f90 -o psb_s_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdiv_vect.f90 -o psb_cdiv_vect.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_upd_a.f90 -o psi_eovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr_a.f90 -o psi_sovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save_a.f90 -o psi_sovrl_save_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_print.f90 -o psb_s_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reallocate_nz.f90 -o psb_s_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddiv_vect.f90 -o psb_ddiv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lfree.f90 -o psb_lfree.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd_a.f90 -o psi_sovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_nullprec.f90 -o psb_s_nullprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr_a.f90 -o psi_dovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reinit.f90 -o psb_s_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_rowsum.f90 -o psb_s_ell_rowsum.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_bjacprec.f90 -o psb_s_bjacprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_diagprec.f90 -o psb_c_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snumbmm.f90 -o psb_snumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_nullprec.f90 -o psb_c_nullprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_bjacprec.f90 -o psb_c_bjacprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_diagprec.f90 -o psb_z_diagprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_nullprec.f90 -o psb_z_nullprec.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_bjacprec.f90 -o psb_z_bjacprec.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scal.f90 -o psb_s_ell_scal.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save_a.f90 -o psi_dovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd_a.f90 -o psi_dovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnumbmm.f90 -o psb_dnumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnumbmm.f90 -o psb_cnumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdiv_vect.f90 -o psb_zdiv_vect.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr_a.f90 -o psi_covrl_restr_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scals.f90 -o psb_s_ell_scals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_eovrl_a.f90 -o psb_eovrl_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_trim.f90 -o psb_s_ell_trim.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree.f90 -o psb_sfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znumbmm.f90 -o psb_znumbmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c smmp.f90 -o smmp.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather_a.f90 -o psb_cgather_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c lsmmp.f90 -o lsmmp.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins.f90 -o psb_sins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_allocate_mnnz.f90 -o psb_s_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_csmv.f90 -o psb_s_hdia_csmv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save_a.f90 -o psi_covrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgeprt.f90 -o psb_dgeprt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgeprt.f90 -o psb_cgeprt.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd_a.f90 -o psi_covrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdiv_vect.f90 -o psb_sdiv_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_mold.f90 -o psb_s_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_print.f90 -o psb_s_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_aclsum.f90 -o psb_s_hll_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc.f90 -o psb_dallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cinv_vect.f90 -o psb_cinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dinv_vect.f90 -o psb_dinv_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_allocate_mnnz.f90 -o psb_s_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_arwsum.f90 -o psb_s_hll_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_colsum.f90 -o psb_s_hll_colsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo_a.f90 -o psb_chalo_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr_a.f90 -o psi_zovrl_restr_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save_a.f90 -o psi_zovrl_save_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zinv_vect.f90 -o psb_zinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_renum_impl.F90 -o psb_d_renum_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetblk.f90 -o psb_s_hll_csgetblk.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sinv_vect.f90 -o psb_sinv_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_renum_impl.F90 -o psb_c_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl_a.f90 -o psb_covrl_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather_a.f90 -o psb_zgather_a.o +mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd_a.f90 -o psi_zovrl_upd_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo_a.f90 -o psb_zhalo_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetptn.f90 -o psb_s_hll_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spdot_srtd.f90 -o psb_spdot_srtd.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_aspxpby.f90 -o psb_aspxpby.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spge_dot.f90 -o psb_spge_dot.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saplusat.f90 -o psb_saplusat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetrow.f90 -o psb_s_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmm.f90 -o psb_s_hll_csmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl_a.f90 -o psb_zovrl_a.o +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmv.f90 -o psb_s_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnm1.f90 -o psb_s_hll_csnm1.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daplusat.f90 -o psb_daplusat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb.f90 -o psb_dasb.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnmi.f90 -o psb_s_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csput.f90 -o psb_s_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssm.f90 -o psb_s_hll_cssm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caplusat.f90 -o psb_caplusat.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssv.f90 -o psb_s_hll_cssv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dcmp_vect.f90 -o psb_dcmp_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_get_diag.f90 -o psb_s_hll_get_diag.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_scmp_vect.f90 -o psb_scmp_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaplusat.f90 -o psb_zaplusat.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax_s.f90 -o psb_samax_s.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_renum_impl.F90 -o psb_z_renum_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ccmp_vect.f90 -o psb_ccmp_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_maxval.f90 -o psb_s_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_mold.f90 -o psb_s_hll_mold.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree.f90 -o psb_dfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins.f90 -o psb_dins.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc.f90 -o psb_callc.o +mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_build_mtpart.F90 -o psi_build_mtpart.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zcmp_vect.f90 -o psb_zcmp_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_print.f90 -o psb_s_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reallocate_nz.f90 -o psb_s_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reinit.f90 -o psb_s_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_rowsum.f90 -o psb_s_hll_rowsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax_s.f90 -o psb_damax_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cabs_vect.f90 -o psb_cabs_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scal.f90 -o psb_s_hll_scal.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dabs_vect.f90 -o psb_dabs_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax_s.f90 -o psb_camax_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb.f90 -o psb_casb.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scals.f90 -o psb_s_hll_scals.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax_s.f90 -o psb_zamax_s.o +/usr/bin/install -c -p -p *.mod ../modules +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree.f90 -o psb_cfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins.f90 -o psb_cins.o +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc.f90 -o psb_zallc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb.f90 -o psb_zasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sabs_vect.f90 -o psb_sabs_vect.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_dia_from_coo.f90 -o psb_s_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_coo.f90 -o psb_s_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum_s.f90 -o psb_sasum_s.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zabs_vect.f90 -o psb_zabs_vect.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree.f90 -o psb_zfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cgetmatinfo.F90 -o psb_cgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dgetmatinfo.F90 -o psb_dgetmatinfo.o +make -C linsolve mods +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I. -I../modules -c psb_base_linsolve_conv_mod.f90 -o psb_base_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_linsolve_mod.f90 -o psb_linsolve_mod.o +make -C prec objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +/usr/bin/install -c -p -p *.mod ../modules +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_fmt.f90 -o psb_s_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum_s.f90 -o psb_dasum_s.o +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_prec_type_impl.f90 -o psb_s_prec_type_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins.f90 -o psb_zins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_prec_type_impl.f90 -o psb_d_prec_type_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_coo.f90 -o psb_s_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum_s.f90 -o psb_casum_s.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_linsolve_conv_mod.f90 -o psb_s_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_linsolve_conv_mod.f90 -o psb_c_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sgetmatinfo.F90 -o psb_sgetmatinfo.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_linsolve_conv_mod.f90 -o psb_d_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_linsolve_conv_mod.f90 -o psb_z_linsolve_conv_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_fmt.f90 -o psb_s_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mallc_a.f90 -o psb_mallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_masb_a.f90 -o psb_masb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mfree_a.f90 -o psb_mfree_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mins_a.f90 -o psb_mins_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_from_coo.f90 -o psb_s_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zgetmatinfo.F90 -o psb_zgetmatinfo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_to_coo.f90 -o psb_s_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum_s.f90 -o psb_zasum_s.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_coo.f90 -o psb_s_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eallc_a.f90 -o psb_eallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_easb_a.f90 -o psb_easb_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_efree_a.f90 -o psb_efree_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eins_a.f90 -o psb_eins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc_a.f90 -o psb_sallc_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_fmt.f90 -o psb_s_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_prec_type_impl.f90 -o psb_c_prec_type_impl.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_prec_type_impl.f90 -o psb_z_prec_type_impl.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_diagprec_impl.f90 -o psb_d_diagprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_bjacprec_impl.f90 -o psb_d_bjacprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_nullprec_impl.f90 -o psb_d_nullprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb_a.f90 -o psb_sasb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_coo.f90 -o psb_s_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree_a.f90 -o psb_sfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_fmt.f90 -o psb_s_mv_hll_to_fmt.o +/usr/bin/install -c -p -p *.mod ../modules +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_from_coo.f90 -o psb_c_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_to_coo.f90 -o psb_c_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_coo.f90 -o psb_c_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_fmt.f90 -o psb_c_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_coo.f90 -o psb_c_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilu0_fact.f90 -o psb_d_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_fmt.f90 -o psb_c_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins_a.f90 -o psb_sins_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc_a.f90 -o psb_dallc_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_from_coo.f90 -o psb_c_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_to_coo.f90 -o psb_c_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_coo.f90 -o psb_c_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_fmt.f90 -o psb_c_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb_a.f90 -o psb_dasb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_coo.f90 -o psb_c_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_iluk_fact.f90 -o psb_d_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_fmt.f90 -o psb_c_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_aclsum.f90 -o psb_c_dia_aclsum.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree_a.f90 -o psb_dfree_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins_a.f90 -o psb_dins_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_allocate_mnnz.f90 -o psb_c_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_arwsum.f90 -o psb_c_dia_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilut_fact.f90 -o psb_d_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecbld.f90 -o psb_dprecbld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_colsum.f90 -o psb_c_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecinit.f90 -o psb_dprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetptn.f90 -o psb_c_dia_csgetptn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc_a.f90 -o psb_callc_a.o +make -C cbind objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_objhandle_mod.F90 -o psb_objhandle_mod.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_base.c -o psb_c_base.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sbase.c -o psb_c_sbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dbase.c -o psb_c_dbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cbase.c -o psb_c_cbase.o +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +make -C linsolve objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dkrylov.f90 -o psb_dkrylov.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zbase.c -o psb_c_zbase.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_scomm.c -o psb_c_scomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dcomm.c -o psb_c_dcomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_ccomm.c -o psb_c_ccomm.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zcomm.c -o psb_c_zcomm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_diagprec_impl.f90 -o psb_s_diagprec_impl.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb_a.f90 -o psb_casb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_bjacprec_impl.f90 -o psb_s_bjacprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_nullprec_impl.f90 -o psb_s_nullprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree_a.f90 -o psb_cfree_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilu0_fact.f90 -o psb_s_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_skrylov.f90 -o psb_skrylov.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins_a.f90 -o psb_cins_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetrow.f90 -o psb_c_dia_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ckrylov.f90 -o psb_ckrylov.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zkrylov.f90 -o psb_zkrylov.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_iluk_fact.f90 -o psb_s_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilut_fact.f90 -o psb_s_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drichardson.f90 -o psb_drichardson.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmm.f90 -o psb_c_dia_csmm.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_base_tools_cbind_mod.F90 -o psb_base_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srichardson.f90 -o psb_srichardson.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc_a.f90 -o psb_zallc_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb_a.f90 -o psb_zasb_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crichardson.f90 -o psb_crichardson.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrichardson.f90 -o psb_zrichardson.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecbld.f90 -o psb_sprecbld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecinit.f90 -o psb_sprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmv.f90 -o psb_c_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_diagprec_impl.f90 -o psb_c_diagprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree_a.f90 -o psb_zfree_a.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins_a.f90 -o psb_zins_a.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_bjacprec_impl.f90 -o psb_c_bjacprec_impl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspalloc.f90 -o psb_zspalloc.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_nullprec_impl.f90 -o psb_c_nullprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstab.f90 -o psb_dcgstab.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcg.F90 -o psb_dcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilu0_fact.f90 -o psb_c_ilu0_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_iluk_fact.f90 -o psb_c_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dfcg.F90 -o psb_dfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_get_diag.f90 -o psb_c_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dgcr.f90 -o psb_dgcr.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspasb.f90 -o psb_zspasb.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilut_fact.f90 -o psb_c_ilut_fact.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_psblas_cbind_mod.f90 -o psb_s_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecbld.f90 -o psb_cprecbld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_maxval.f90 -o psb_c_dia_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgs.f90 -o psb_dcgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dbicg.f90 -o psb_dbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_mold.f90 -o psb_c_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstabl.f90 -o psb_dcgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecinit.f90 -o psb_cprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_diagprec_impl.f90 -o psb_z_diagprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_bjacprec_impl.f90 -o psb_z_bjacprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_nullprec_impl.f90 -o psb_z_nullprec_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilu0_fact.f90 -o psb_z_ilu0_fact.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remap.F90 -o psb_z_remap.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_psblas_cbind_mod.f90 -o psb_d_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_print.f90 -o psb_c_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drgmres.f90 -o psb_drgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstab.f90 -o psb_scgstab.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scg.F90 -o psb_scg.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspfree.f90 -o psb_zspfree.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspins.F90 -o psb_zspins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_iluk_fact.f90 -o psb_z_iluk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilut_fact.f90 -o psb_z_ilut_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reallocate_nz.f90 -o psb_c_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecbld.f90 -o psb_zprecbld.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_psblas_cbind_mod.f90 -o psb_c_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zsprn.f90 -o psb_zsprn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sfcg.F90 -o psb_sfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sgcr.f90 -o psb_sgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgs.f90 -o psb_scgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reinit.f90 -o psb_c_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sbicg.f90 -o psb_sbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstabl.f90 -o psb_scgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srgmres.f90 -o psb_srgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstab.f90 -o psb_ccgstab.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_psblas_cbind_mod.f90 -o psb_z_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_rowsum.f90 -o psb_c_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scal.f90 -o psb_c_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecinit.f90 -o psb_zprecinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sparsify.f90 -o psb_c_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scals.f90 -o psb_c_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_aclsum.f90 -o psb_c_ell_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccg.F90 -o psb_ccg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cfcg.F90 -o psb_cfcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_allocate_mnnz.f90 -o psb_c_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspalloc.f90 -o psb_cspalloc.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspasb.f90 -o psb_cspasb.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remap.F90 -o psb_c_remap.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cgcr.f90 -o psb_cgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_arwsum.f90 -o psb_c_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_colsum.f90 -o psb_c_ell_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetblk.f90 -o psb_c_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgs.f90 -o psb_ccgs.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_tools_cbind_mod.F90 -o psb_s_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cbicg.f90 -o psb_cbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetptn.f90 -o psb_c_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetrow.f90 -o psb_c_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sparsify.f90 -o psb_d_sparsify.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspfree.f90 -o psb_cspfree.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstabl.f90 -o psb_ccgstabl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sparsify.f90 -o psb_s_sparsify.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspins.F90 -o psb_cspins.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crgmres.f90 -o psb_crgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstab.f90 -o psb_zcgstab.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_csprn.f90 -o psb_csprn.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_set_bld.f90 -o psb_cd_set_bld.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_map.f90 -o psb_s_map.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmm.f90 -o psb_c_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sparsify.f90 -o psb_z_sparsify.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcg.F90 -o psb_zcg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zfcg.F90 -o psb_zfcg.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_map.f90 -o psb_d_map.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmv.f90 -o psb_c_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crwclip.f90 -o psb_crwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drwclip.f90 -o psb_drwclip.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_map.f90 -o psb_c_map.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_serial_cbind_mod.F90 -o psb_s_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srwclip.f90 -o psb_srwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrwclip.f90 -o psb_zrwclip.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zgcr.f90 -o psb_zgcr.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sp_drop.f90 -o psb_c_sp_drop.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_tools_cbind_mod.F90 -o psb_d_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_serial_cbind_mod.F90 -o psb_d_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_map.f90 -o psb_z_map.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_par_csr_spspmm.f90 -o psb_s_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sp_drop.f90 -o psb_d_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sp_drop.f90 -o psb_s_sp_drop.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnm1.f90 -o psb_c_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sp_drop.f90 -o psb_z_sp_drop.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_par_csr_spspmm.f90 -o psb_d_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_par_csr_spspmm.f90 -o psb_c_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_tools_cbind_mod.F90 -o psb_c_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgs.f90 -o psb_zcgs.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk_noth.F90 -o psb_dsparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnmi.f90 -o psb_c_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk.F90 -o psb_dsparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_mlk.F90 -o psb_dsparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csput.f90 -o psb_c_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssm.f90 -o psb_c_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zbicg.f90 -o psb_zbicg.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_ft_llk.F90 -o psb_dsparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_par_csr_spspmm.f90 -o psb_z_par_csr_spspmm.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_glob_transpose.F90 -o psb_s_glob_transpose.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_llk.F90 -o psb_dsparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk_noth.F90 -o psb_csparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstabl.f90 -o psb_zcgstabl.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_glob_transpose.F90 -o psb_d_glob_transpose.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk.F90 -o psb_csparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrgmres.f90 -o psb_zrgmres.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssv.f90 -o psb_c_ell_cssv.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_glob_transpose.F90 -o psb_c_glob_transpose.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_mlk.F90 -o psb_csparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_glob_transpose.F90 -o psb_z_glob_transpose.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_serial_cbind_mod.F90 -o psb_c_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_ft_llk.F90 -o psb_csparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_llk.F90 -o psb_csparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk_noth.F90 -o psb_zsparse_biconjg_llk_noth.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cgetelem.f90 -o psb_cgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_get_diag.f90 -o psb_c_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_maxval.f90 -o psb_c_ell_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk.F90 -o psb_zsparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_tools_cbind_mod.F90 -o psb_z_tools_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_mlk.F90 -o psb_zsparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_mold.f90 -o psb_c_ell_mold.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dgetelem.f90 -o psb_dgetelem.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sgetelem.f90 -o psb_sgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_print.f90 -o psb_c_ell_print.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_serial_cbind_mod.F90 -o psb_z_serial_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_ft_llk.F90 -o psb_zsparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_llk.F90 -o psb_zsparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk_noth.F90 -o psb_ssparse_biconjg_llk_noth.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk.F90 -o psb_ssparse_biconjg_llk.o +mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zgetelem.f90 -o psb_zgetelem.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_mlk.F90 -o psb_ssparse_biconjg_mlk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_ft_llk.F90 -o psb_ssparse_biconjg_s_ft_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reallocate_nz.f90 -o psb_c_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reinit.f90 -o psb_c_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_llk.F90 -o psb_ssparse_biconjg_s_llk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ainv_bld.f90 -o psb_d_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ainv_bld.f90 -o psb_c_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ainv_bld.f90 -o psb_s_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_rowsum.f90 -o psb_c_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ainv_bld.f90 -o psb_z_ainv_bld.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invt_fact.f90 -o psb_c_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invt_fact.f90 -o psb_d_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invt_fact.f90 -o psb_s_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invt_fact.f90 -o psb_z_invt_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invk_fact.f90 -o psb_c_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invk_fact.f90 -o psb_d_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scal.f90 -o psb_c_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scals.f90 -o psb_c_ell_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invk_fact.f90 -o psb_s_invk_fact.o +mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invk_fact.f90 -o psb_z_invk_fact.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_trim.f90 -o psb_c_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_allocate_mnnz.f90 -o psb_c_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_csmv.f90 -o psb_c_hdia_csmv.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_comm_cbind_mod.f90 -o psb_s_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_comm_cbind_mod.f90 -o psb_d_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_mold.f90 -o psb_c_hdia_mold.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_comm_cbind_mod.f90 -o psb_c_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_print.f90 -o psb_c_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_aclsum.f90 -o psb_c_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_allocate_mnnz.f90 -o psb_c_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_arwsum.f90 -o psb_c_hll_arwsum.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_comm_cbind_mod.f90 -o psb_z_comm_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_colsum.f90 -o psb_c_hll_colsum.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_psblas_cbind_mod.f90 -o psb_base_psblas_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetblk.f90 -o psb_c_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetptn.f90 -o psb_c_hll_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetrow.f90 -o psb_c_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmm.f90 -o psb_c_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmv.f90 -o psb_c_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnm1.f90 -o psb_c_hll_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnmi.f90 -o psb_c_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csput.f90 -o psb_c_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssm.f90 -o psb_c_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssv.f90 -o psb_c_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_get_diag.f90 -o psb_c_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_maxval.f90 -o psb_c_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_mold.f90 -o psb_c_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_print.f90 -o psb_c_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reallocate_nz.f90 -o psb_c_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reinit.f90 -o psb_c_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_rowsum.f90 -o psb_c_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scal.f90 -o psb_c_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scals.f90 -o psb_c_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_dia_from_coo.f90 -o psb_c_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_coo.f90 -o psb_c_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_fmt.f90 -o psb_c_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_coo.f90 -o psb_c_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_fmt.f90 -o psb_c_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_from_coo.f90 -o psb_c_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_to_coo.f90 -o psb_c_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_coo.f90 -o psb_c_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_fmt.f90 -o psb_c_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_coo.f90 -o psb_c_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_fmt.f90 -o psb_c_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_from_coo.f90 -o psb_d_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_to_coo.f90 -o psb_d_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_coo.f90 -o psb_d_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_fmt.f90 -o psb_d_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_coo.f90 -o psb_d_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_fmt.f90 -o psb_d_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_from_coo.f90 -o psb_d_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_to_coo.f90 -o psb_d_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_coo.f90 -o psb_d_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_fmt.f90 -o psb_d_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_coo.f90 -o psb_d_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_fmt.f90 -o psb_d_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_aclsum.f90 -o psb_d_dia_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_allocate_mnnz.f90 -o psb_d_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_arwsum.f90 -o psb_d_dia_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_colsum.f90 -o psb_d_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetptn.f90 -o psb_d_dia_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetrow.f90 -o psb_d_dia_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmm.f90 -o psb_d_dia_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmv.f90 -o psb_d_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_get_diag.f90 -o psb_d_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_maxval.f90 -o psb_d_dia_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_mold.f90 -o psb_d_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_print.f90 -o psb_d_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reallocate_nz.f90 -o psb_d_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reinit.f90 -o psb_d_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_rowsum.f90 -o psb_d_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scal.f90 -o psb_d_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scals.f90 -o psb_d_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_aclsum.f90 -o psb_d_ell_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_allocate_mnnz.f90 -o psb_d_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_arwsum.f90 -o psb_d_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_colsum.f90 -o psb_d_ell_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetblk.f90 -o psb_d_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetptn.f90 -o psb_d_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetrow.f90 -o psb_d_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmm.f90 -o psb_d_ell_csmm.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_cbind_mod.f90 -o psb_base_cbind_mod.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmv.f90 -o psb_d_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnm1.f90 -o psb_d_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnmi.f90 -o psb_d_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csput.f90 -o psb_d_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssm.f90 -o psb_d_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssv.f90 -o psb_d_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_get_diag.f90 -o psb_d_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_maxval.f90 -o psb_d_ell_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_mold.f90 -o psb_d_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_print.f90 -o psb_d_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reallocate_nz.f90 -o psb_d_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reinit.f90 -o psb_d_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_rowsum.f90 -o psb_d_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scal.f90 -o psb_d_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scals.f90 -o psb_d_ell_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_trim.f90 -o psb_d_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_allocate_mnnz.f90 -o psb_d_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_csmv.f90 -o psb_d_hdia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_mold.f90 -o psb_d_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_print.f90 -o psb_d_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_aclsum.f90 -o psb_d_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_allocate_mnnz.f90 -o psb_d_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_arwsum.f90 -o psb_d_hll_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_colsum.f90 -o psb_d_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetblk.f90 -o psb_d_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetptn.f90 -o psb_d_hll_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetrow.f90 -o psb_d_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmm.f90 -o psb_d_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmv.f90 -o psb_d_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnm1.f90 -o psb_d_hll_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnmi.f90 -o psb_d_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csput.f90 -o psb_d_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssm.f90 -o psb_d_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssv.f90 -o psb_d_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_get_diag.f90 -o psb_d_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_maxval.f90 -o psb_d_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_mold.f90 -o psb_d_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_print.f90 -o psb_d_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reallocate_nz.f90 -o psb_d_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reinit.f90 -o psb_d_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_rowsum.f90 -o psb_d_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scal.f90 -o psb_d_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scals.f90 -o psb_d_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_dia_from_coo.f90 -o psb_d_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_coo.f90 -o psb_d_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_fmt.f90 -o psb_d_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_coo.f90 -o psb_d_mv_ell_to_coo.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_fmt.f90 -o psb_d_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_from_coo.f90 -o psb_d_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_to_coo.f90 -o psb_d_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_coo.f90 -o psb_d_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_fmt.f90 -o psb_d_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_coo.f90 -o psb_d_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_fmt.f90 -o psb_d_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_from_coo.f90 -o psb_z_cp_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_to_coo.f90 -o psb_z_cp_dia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_coo.f90 -o psb_z_cp_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_fmt.f90 -o psb_z_cp_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_coo.f90 -o psb_z_cp_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_fmt.f90 -o psb_z_cp_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_from_coo.f90 -o psb_z_cp_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_to_coo.f90 -o psb_z_cp_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_coo.f90 -o psb_z_cp_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_fmt.f90 -o psb_z_cp_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_coo.f90 -o psb_z_cp_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_fmt.f90 -o psb_z_cp_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_aclsum.f90 -o psb_z_dia_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_allocate_mnnz.f90 -o psb_z_dia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_arwsum.f90 -o psb_z_dia_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_colsum.f90 -o psb_z_dia_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetptn.f90 -o psb_z_dia_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetrow.f90 -o psb_z_dia_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmm.f90 -o psb_z_dia_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmv.f90 -o psb_z_dia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_get_diag.f90 -o psb_z_dia_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_maxval.f90 -o psb_z_dia_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_mold.f90 -o psb_z_dia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_print.f90 -o psb_z_dia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reallocate_nz.f90 -o psb_z_dia_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reinit.f90 -o psb_z_dia_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_rowsum.f90 -o psb_z_dia_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scal.f90 -o psb_z_dia_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scals.f90 -o psb_z_dia_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_aclsum.f90 -o psb_z_ell_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_allocate_mnnz.f90 -o psb_z_ell_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_arwsum.f90 -o psb_z_ell_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_colsum.f90 -o psb_z_ell_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetblk.f90 -o psb_z_ell_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetptn.f90 -o psb_z_ell_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetrow.f90 -o psb_z_ell_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmm.f90 -o psb_z_ell_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmv.f90 -o psb_z_ell_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnm1.f90 -o psb_z_ell_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnmi.f90 -o psb_z_ell_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csput.f90 -o psb_z_ell_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssm.f90 -o psb_z_ell_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssv.f90 -o psb_z_ell_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_get_diag.f90 -o psb_z_ell_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_maxval.f90 -o psb_z_ell_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_mold.f90 -o psb_z_ell_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_print.f90 -o psb_z_ell_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reallocate_nz.f90 -o psb_z_ell_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reinit.f90 -o psb_z_ell_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_rowsum.f90 -o psb_z_ell_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scal.f90 -o psb_z_ell_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scals.f90 -o psb_z_ell_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_trim.f90 -o psb_z_ell_trim.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_allocate_mnnz.f90 -o psb_z_hdia_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_csmv.f90 -o psb_z_hdia_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_mold.f90 -o psb_z_hdia_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_print.f90 -o psb_z_hdia_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_aclsum.f90 -o psb_z_hll_aclsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_allocate_mnnz.f90 -o psb_z_hll_allocate_mnnz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_arwsum.f90 -o psb_z_hll_arwsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_colsum.f90 -o psb_z_hll_colsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetblk.f90 -o psb_z_hll_csgetblk.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetptn.f90 -o psb_z_hll_csgetptn.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetrow.f90 -o psb_z_hll_csgetrow.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmm.f90 -o psb_z_hll_csmm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmv.f90 -o psb_z_hll_csmv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnm1.f90 -o psb_z_hll_csnm1.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnmi.f90 -o psb_z_hll_csnmi.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csput.f90 -o psb_z_hll_csput.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssm.f90 -o psb_z_hll_cssm.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssv.f90 -o psb_z_hll_cssv.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_get_diag.f90 -o psb_z_hll_get_diag.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_maxval.f90 -o psb_z_hll_maxval.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_mold.f90 -o psb_z_hll_mold.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_print.f90 -o psb_z_hll_print.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reallocate_nz.f90 -o psb_z_hll_reallocate_nz.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reinit.f90 -o psb_z_hll_reinit.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_rowsum.f90 -o psb_z_hll_rowsum.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scal.f90 -o psb_z_hll_scal.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scals.f90 -o psb_z_hll_scals.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_dia_from_coo.f90 -o psb_z_mv_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_coo.f90 -o psb_z_mv_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_fmt.f90 -o psb_z_mv_ell_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_coo.f90 -o psb_z_mv_ell_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_fmt.f90 -o psb_z_mv_ell_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_from_coo.f90 -o psb_z_mv_hdia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_to_coo.f90 -o psb_z_mv_hdia_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_coo.f90 -o psb_z_mv_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_fmt.f90 -o psb_z_mv_hll_from_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_coo.f90 -o psb_z_mv_hll_to_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_fmt.f90 -o psb_z_mv_hll_to_fmt.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_ell_from_coo.f90 -o psi_s_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_ell_from_coo.f90 -o psi_c_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_ell_from_coo.f90 -o psi_d_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_ell_from_coo.f90 -o psi_z_xtr_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_ell_from_coo.f90 -o psi_s_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_ell_from_coo.f90 -o psi_c_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_ell_from_coo.f90 -o psi_d_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_ell_from_coo.f90 -o psi_z_convert_ell_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_hll_from_coo.f90 -o psi_s_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_hll_from_coo.f90 -o psi_c_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_hll_from_coo.f90 -o psi_d_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_hll_from_coo.f90 -o psi_z_convert_hll_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_dia_from_coo.f90 -o psi_s_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_dia_from_coo.f90 -o psi_c_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_dia_from_coo.f90 -o psi_d_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_dia_from_coo.f90 -o psi_z_xtr_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_coo_from_dia.f90 -o psi_s_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_coo_from_dia.f90 -o psi_d_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_coo_from_dia.f90 -o psi_c_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_coo_from_dia.f90 -o psi_z_xtr_coo_from_dia.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_dia_from_coo.f90 -o psi_s_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_dia_from_coo.f90 -o psi_c_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_dia_from_coo.f90 -o psi_d_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_dia_from_coo.f90 -o psi_z_convert_dia_from_coo.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dns_mat_impl.f90 -o psb_s_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dns_mat_impl.f90 -o psb_d_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dns_mat_impl.f90 -o psb_c_dns_mat_impl.o +mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dns_mat_impl.f90 -o psb_z_dns_mat_impl.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_sprec_cbind_mod.f90 -o psb_sprec_cbind_mod.o +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_util_cbind_mod.f90 -o psb_c_util_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dprec_cbind_mod.f90 -o psb_dprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_util_cbind_mod.f90 -o psb_d_util_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cprec_cbind_mod.f90 -o psb_cprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_util_cbind_mod.f90 -o psb_s_util_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zprec_cbind_mod.f90 -o psb_zprec_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_util_cbind_mod.f90 -o psb_z_util_cbind_mod.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sprec.c -o psb_c_sprec.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dprec.c -o psb_c_dprec.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cprec.c -o psb_c_cprec.o +mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zprec.c -o psb_c_zprec.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_prec_cbind_mod.f90 -o psb_prec_cbind_mod.o +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_linsolve_cbind_mod.f90 -o psb_base_linsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_slinsolve_cbind_mod.f90 -o psb_slinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dlinsolve_cbind_mod.f90 -o psb_dlinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_clinsolve_cbind_mod.f90 -o psb_clinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zlinsolve_cbind_mod.f90 -o psb_zlinsolve_cbind_mod.o +mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_util_cbind_mod.f90 -o psb_util_cbind_mod.o +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C cbind objs +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C base lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C modules objs F90="" F90COPT=" " +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +/usr/bin/install -c -p -p *.mod ../../modules +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make -C serial objs +make -C comm objs +make -C auxil objs +make -C psblas objs +make -C tools objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C internals objs +make -C sort objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") +make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[3]: «psb_dscatter.o» è aggiornato. +make[3]: «psb_zscatter.o» è aggiornato. +make[3]: «psb_iscatter.o» è aggiornato. +make[3]: «psb_lscatter.o» è aggiornato. +make[3]: «psb_cscatter.o» è aggiornato. +make[3]: «psb_sscatter.o» è aggiornato. +make[3]: «psb_dscatter_a.o» è aggiornato. +make[3]: «psb_zscatter_a.o» è aggiornato. +make[3]: «psb_mscatter_a.o» è aggiornato. +make[3]: «psb_escatter_a.o» è aggiornato. +make[3]: «psb_cscatter_a.o» è aggiornato. +make[3]: «psb_sscatter_a.o» è aggiornato. +make[3]: «psb_dspgather.o» è aggiornato. +make[3]: «psb_sspgather.o» è aggiornato. +make[3]: «psb_zspgather.o» è aggiornato. +make[3]: «psb_cspgather.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[3]: «psi_desc_index.o» è aggiornato. +make[3]: «psi_fnd_owner.o» è aggiornato. +make[3]: «psi_a2a_fnd_owner.o» è aggiornato. +make[3]: «psi_graph_fnd_owner.o» è aggiornato. +make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. +make[3]: «psi_symm_dep_list.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: «psb_icdasb.o» è aggiornato. +make[3]: «psb_ssphalo.o» è aggiornato. +make[3]: «psb_dsphalo.o» è aggiornato. +make[3]: «psb_csphalo.o» è aggiornato. +make[3]: «psb_zsphalo.o» è aggiornato. +make[3]: «psb_dcdbldext.o» è aggiornato. +make[3]: «psb_zcdbldext.o» è aggiornato. +make[3]: «psb_scdbldext.o» è aggiornato. +make[3]: «psb_ccdbldext.o» è aggiornato. +make[3]: «psb_s_remote_mat.o» è aggiornato. +make[3]: «psb_d_remote_mat.o» è aggiornato. +make[3]: «psb_c_remote_mat.o» è aggiornato. +make[3]: «psb_z_remote_mat.o» è aggiornato. +make[3]: «psb_s_remote_vect.o» è aggiornato. +make[3]: «psb_d_remote_vect.o» è aggiornato. +make[3]: «psb_c_remote_vect.o» è aggiornato. +make[3]: «psb_z_remote_vect.o» è aggiornato. +make[3]: «psb_e_remote_vect.o» è aggiornato. +make[3]: «psb_m_remote_vect.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C modules lib LIBNAME=libpsb_base.a F90="" F90COPT=" " +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +/usr/bin/install -c -p -p *.mod ../../modules +/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include +ar -cDr ..//libpsb_base.a psb_const_mod.o psb_cbind_const_mod.o psb_error_mod.o psb_realloc_mod.o auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o serial/psb_serial_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_baseline_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o comm/comm_schemes/psb_comm_factory_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o serial/psb_vect_mod.o auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o auxil/psb_ip_reord_mod.o auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o auxil/psb_d_msort_mod.o auxil/psb_d_qsort_mod.o auxil/psb_c_hsort_mod.o auxil/psb_c_isort_mod.o auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o auxil/psb_i_hsort_x_mod.o auxil/psb_l_hsort_x_mod.o auxil/psb_s_hsort_x_mod.o auxil/psb_d_hsort_x_mod.o auxil/psb_c_hsort_x_mod.o auxil/psb_z_hsort_x_mod.o auxil/psb_s_rb_idx_tree_mod.o auxil/psb_d_rb_idx_tree_mod.o auxil/psb_c_rb_idx_tree_mod.o auxil/psb_z_rb_idx_tree_mod.o auxil/psb_rb_idx_tree_mod.o serial/psb_base_mat_mod.o serial/psb_mat_mod.o serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_glist_map_mod.o desc/psb_hash_map_mod.o desc/psb_hashval.o desc/psb_desc_mod.o auxil/psb_sort_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o tools/psb_tools_mod.o psb_penv_mod.o penv/psi_penv_mod.o penv/psi_p2p_mod.o penv/psi_m_p2p_mod.o penv/psi_i2_p2p_mod.o penv/psi_e_p2p_mod.o penv/psi_s_p2p_mod.o penv/psi_d_p2p_mod.o penv/psi_c_p2p_mod.o penv/psi_z_p2p_mod.o penv/psi_collective_mod.o penv/psi_i2_collective_mod.o penv/psi_e_collective_mod.o penv/psi_m_collective_mod.o penv/psi_s_collective_mod.o penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_mod.o psb_error_impl.o psb_timers_mod.o comm/psb_base_linmap_mod.o comm/psb_linmap_mod.o comm/psb_s_linmap_mod.o comm/psb_d_linmap_mod.o comm/psb_c_linmap_mod.o comm/psb_z_linmap_mod.o comm/psb_comm_mod.o comm/psb_neighbor_topology_mod.o comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o comm/psb_i2_comm_a_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o comm/psi_s_comm_v_mod.o comm/psi_d_comm_v_mod.o comm/psi_c_comm_v_mod.o comm/psi_z_comm_v_mod.o psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o psblas/psb_psblas_mod.o psb_check_mod.o desc/psb_hash_mod.o error.o psb_base_mod.o cutil.o +ranlib ..//libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» +make -C serial lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C impl objs +make -C sort objs +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make[3]: Nessuna operazione da eseguire per «objs». +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +make -C impl lib +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +ar -cDr ../../libpsb_base.a psb_base_mat_impl.o psb_s_base_mat_impl.o psb_d_base_mat_impl.o psb_c_base_mat_impl.o psb_z_base_mat_impl.o psb_s_csr_impl.o psb_s_coo_impl.o psb_s_csc_impl.o psb_s_mat_impl.o psb_s_rb_idx_tree_impl.o psb_d_csr_impl.o psb_d_coo_impl.o psb_d_csc_impl.o psb_d_mat_impl.o psb_d_rb_idx_tree_impl.o psb_c_csr_impl.o psb_c_coo_impl.o psb_c_csc_impl.o psb_c_mat_impl.o psb_c_rb_idx_tree_impl.o psb_z_csr_impl.o psb_z_coo_impl.o psb_z_csc_impl.o psb_z_mat_impl.o psb_z_rb_idx_tree_impl.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» +make -C sort lib +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +ar -cDr ../../libpsb_base.a psb_s_hsort_impl.o psb_s_isort_impl.o psb_s_msort_impl.o psb_s_qsort_impl.o psb_d_hsort_impl.o psb_d_isort_impl.o psb_d_msort_impl.o psb_d_qsort_impl.o psb_c_hsort_impl.o psb_c_isort_impl.o psb_c_msort_impl.o psb_c_qsort_impl.o psb_z_hsort_impl.o psb_z_isort_impl.o psb_z_msort_impl.o psb_z_qsort_impl.o psb_m_hsort_impl.o psb_m_isort_impl.o psb_m_msort_impl.o psb_m_qsort_impl.o psb_e_hsort_impl.o psb_e_isort_impl.o psb_e_msort_impl.o psb_e_qsort_impl.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» +ar -cDr ../libpsb_base.a psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o psi_s_serial_impl.o psi_d_serial_impl.o psi_c_serial_impl.o psi_z_serial_impl.o psb_srwextd.o psb_drwextd.o psb_crwextd.o psb_zrwextd.o psb_sspspmm.o psb_dspspmm.o psb_cspspmm.o psb_zspspmm.o psb_ssymbmm.o psb_dsymbmm.o psb_csymbmm.o psb_zsymbmm.o psb_snumbmm.o psb_dnumbmm.o psb_cnumbmm.o psb_znumbmm.o smmp.o lsmmp.o psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» +make -C comm lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C internals objs +make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[3]: «psb_dscatter.o» è aggiornato. +make[3]: «psb_zscatter.o» è aggiornato. +make[3]: «psb_iscatter.o» è aggiornato. +make[3]: «psb_lscatter.o» è aggiornato. +make[3]: «psb_cscatter.o» è aggiornato. +make[3]: «psb_sscatter.o» è aggiornato. +make[3]: «psb_dscatter_a.o» è aggiornato. +make[3]: «psb_zscatter_a.o» è aggiornato. +make[3]: «psb_mscatter_a.o» è aggiornato. +make[3]: «psb_escatter_a.o» è aggiornato. +make[3]: «psb_cscatter_a.o» è aggiornato. +make[3]: «psb_sscatter_a.o» è aggiornato. +make[3]: «psb_dspgather.o» è aggiornato. +make[3]: «psb_sspgather.o» è aggiornato. +make[3]: «psb_zspgather.o» è aggiornato. +make[3]: «psb_cspgather.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make -C internals lib LIBNAME=libpsb_base.a +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) +make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[4]: «psi_dswapdata.o» è aggiornato. +make[4]: «psi_dswaptran.o» è aggiornato. +make[4]: «psi_sswapdata.o» è aggiornato. +make[4]: «psi_sswaptran.o» è aggiornato. +make[4]: «psi_iswapdata.o» è aggiornato. +make[4]: «psi_iswaptran.o» è aggiornato. +make[4]: «psi_lswapdata.o» è aggiornato. +make[4]: «psi_lswaptran.o» è aggiornato. +make[4]: «psi_cswapdata.o» è aggiornato. +make[4]: «psi_cswaptran.o» è aggiornato. +make[4]: «psi_zswapdata.o» è aggiornato. +make[4]: «psi_zswaptran.o» è aggiornato. +make[4]: «psi_dswapdata_a.o» è aggiornato. +make[4]: «psi_dswaptran_a.o» è aggiornato. +make[4]: «psi_sswapdata_a.o» è aggiornato. +make[4]: «psi_sswaptran_a.o» è aggiornato. +make[4]: «psi_mswapdata_a.o» è aggiornato. +make[4]: «psi_mswaptran_a.o» è aggiornato. +make[4]: «psi_eswapdata_a.o» è aggiornato. +make[4]: «psi_eswaptran_a.o» è aggiornato. +make[4]: «psi_cswapdata_a.o» è aggiornato. +make[4]: «psi_cswaptran_a.o» è aggiornato. +make[4]: «psi_zswapdata_a.o» è aggiornato. +make[4]: «psi_zswaptran_a.o» è aggiornato. +make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +ar -cDr ../../libpsb_base.a psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o psi_iovrl_restr.o psi_iovrl_save.o psi_iovrl_upd.o psi_lovrl_restr.o psi_lovrl_save.o psi_lovrl_upd.o psi_sovrl_restr.o psi_sovrl_save.o psi_sovrl_upd.o psi_dovrl_restr.o psi_dovrl_save.o psi_dovrl_upd.o psi_covrl_restr.o psi_covrl_save.o psi_covrl_upd.o psi_zovrl_restr.o psi_zovrl_save.o psi_zovrl_upd.o psi_movrl_restr_a.o psi_movrl_save_a.o psi_movrl_upd_a.o psi_eovrl_restr_a.o psi_eovrl_save_a.o psi_eovrl_upd_a.o psi_sovrl_restr_a.o psi_sovrl_save_a.o psi_sovrl_upd_a.o psi_dovrl_restr_a.o psi_dovrl_save_a.o psi_dovrl_upd_a.o psi_covrl_restr_a.o psi_covrl_save_a.o psi_covrl_upd_a.o psi_zovrl_restr_a.o psi_zovrl_save_a.o psi_zovrl_upd_a.o +ranlib ../../libpsb_base.a +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» +ar -cDr ../libpsb_base.a psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o psb_dgather.o psb_dhalo.o psb_dovrl.o psb_sgather.o psb_shalo.o psb_sovrl.o psb_igather.o psb_ihalo.o psb_iovrl.o psb_lgather.o psb_lhalo.o psb_lovrl.o psb_cgather.o psb_chalo.o psb_covrl.o psb_zgather.o psb_zhalo.o psb_zovrl.o psb_dgather_a.o psb_dhalo_a.o psb_dovrl_a.o psb_sgather_a.o psb_shalo_a.o psb_sovrl_a.o psb_mgather_a.o psb_mhalo_a.o psb_movrl_a.o psb_egather_a.o psb_ehalo_a.o psb_eovrl_a.o psb_cgather_a.o psb_chalo_a.o psb_covrl_a.o psb_zgather_a.o psb_zhalo_a.o psb_zovrl_a.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» +make -C auxil lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: «psi_desc_index.o» è aggiornato. +make[3]: «psi_fnd_owner.o» è aggiornato. +make[3]: «psi_a2a_fnd_owner.o» è aggiornato. +make[3]: «psi_graph_fnd_owner.o» è aggiornato. +make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. +make[3]: «psi_symm_dep_list.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +ar -cDr ../libpsb_base.a psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o psi_crea_bnd_elem.o psi_crea_index.o psi_crea_ovr_elem.o psi_bld_tmpovrl.o psi_bld_tmphalo.o psi_sort_dl.o psi_indx_map_fnd_owner.o psi_desc_impl.o psi_hash_impl.o psi_srtlist.o psi_bld_glb_dep_list.o psi_xtr_loc_dl.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» +make -C psblas lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +ar -cDr ../libpsb_base.a psb_ddot.o psb_damax.o psb_dasum.o psb_daxpby.o psb_dnrm2.o psb_dnrmi.o psb_dspmm.o psb_dspsm.o psb_sspnrm1.o psb_dspnrm1.o psb_cspnrm1.o psb_zspnrm1.o psb_zamax.o psb_zasum.o psb_zaxpby.o psb_zdot.o psb_znrm2.o psb_znrmi.o psb_zspmm.o psb_zspsm.o psb_saxpby.o psb_sdot.o psb_sasum.o psb_samax.o psb_snrm2.o psb_snrmi.o psb_sspmm.o psb_sspsm.o psb_camax.o psb_casum.o psb_caxpby.o psb_cdot.o psb_cnrm2.o psb_cnrmi.o psb_cspmm.o psb_cspsm.o psb_cmlt_vect.o psb_dmlt_vect.o psb_zmlt_vect.o psb_smlt_vect.o psb_cdiv_vect.o psb_ddiv_vect.o psb_zdiv_vect.o psb_sdiv_vect.o psb_cinv_vect.o psb_dinv_vect.o psb_zinv_vect.o psb_sinv_vect.o psb_dcmp_vect.o psb_scmp_vect.o psb_ccmp_vect.o psb_zcmp_vect.o psb_cabs_vect.o psb_dabs_vect.o psb_sabs_vect.o psb_zabs_vect.o psb_cgetmatinfo.o psb_dgetmatinfo.o psb_sgetmatinfo.o psb_zgetmatinfo.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» +make -C tools lib LIBNAME=libpsb_base.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") +make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. +make[3]: «psb_icdasb.o» è aggiornato. +make[3]: «psb_ssphalo.o» è aggiornato. +make[3]: «psb_dsphalo.o» è aggiornato. +make[3]: «psb_csphalo.o» è aggiornato. +make[3]: «psb_zsphalo.o» è aggiornato. +make[3]: «psb_dcdbldext.o» è aggiornato. +make[3]: «psb_zcdbldext.o» è aggiornato. +make[3]: «psb_scdbldext.o» è aggiornato. +make[3]: «psb_ccdbldext.o» è aggiornato. +make[3]: «psb_s_remote_mat.o» è aggiornato. +make[3]: «psb_d_remote_mat.o» è aggiornato. +make[3]: «psb_c_remote_mat.o» è aggiornato. +make[3]: «psb_z_remote_mat.o» è aggiornato. +make[3]: «psb_s_remote_vect.o» è aggiornato. +make[3]: «psb_d_remote_vect.o» è aggiornato. +make[3]: «psb_c_remote_vect.o» è aggiornato. +make[3]: «psb_z_remote_vect.o» è aggiornato. +make[3]: «psb_e_remote_vect.o» è aggiornato. +make[3]: «psb_m_remote_vect.o» è aggiornato. +make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +ar -cDr ../libpsb_base.a psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o psb_cdall.o psb_cdals.o psb_cdalv.o psb_cd_inloc.o psb_cdins.o psb_cdprt.o psb_cdren.o psb_cdrep.o psb_get_overlap.o psb_cd_lstext.o psb_cd_remap.o psb_cdcpy.o psb_cd_reinit.o psb_cd_switch_ovl_indxmap.o psb_cd_renum_block.o psb_dspalloc.o psb_dspasb.o psb_d_remap.o psb_dspfree.o psb_dspins.o psb_dsprn.o psb_sspalloc.o psb_sspasb.o psb_s_remap.o psb_sspfree.o psb_sspins.o psb_ssprn.o psb_glob_to_loc.o psb_loc_to_glob.o psb_iallc.o psb_iasb.o psb_ifree.o psb_iins.o psb_lallc.o psb_lasb.o psb_lfree.o psb_lins.o psb_sallc.o psb_sasb.o psb_sfree.o psb_sins.o psb_dallc.o psb_dasb.o psb_dfree.o psb_dins.o psb_callc.o psb_casb.o psb_cfree.o psb_cins.o psb_zallc.o psb_zasb.o psb_zfree.o psb_zins.o psb_mallc_a.o psb_masb_a.o psb_mfree_a.o psb_mins_a.o psb_eallc_a.o psb_easb_a.o psb_efree_a.o psb_eins_a.o psb_sallc_a.o psb_sasb_a.o psb_sfree_a.o psb_sins_a.o psb_dallc_a.o psb_dasb_a.o psb_dfree_a.o psb_dins_a.o psb_callc_a.o psb_casb_a.o psb_cfree_a.o psb_cins_a.o psb_zallc_a.o psb_zasb_a.o psb_zfree_a.o psb_zins_a.o psb_zspalloc.o psb_zspasb.o psb_z_remap.o psb_zspfree.o psb_zspins.o psb_zsprn.o psb_cspalloc.o psb_cspasb.o psb_c_remap.o psb_cspfree.o psb_cspins.o psb_csprn.o psb_cd_set_bld.o psb_s_map.o psb_d_map.o psb_c_map.o psb_z_map.o psb_s_par_csr_spspmm.o psb_d_par_csr_spspmm.o psb_c_par_csr_spspmm.o psb_z_par_csr_spspmm.o psb_s_glob_transpose.o psb_d_glob_transpose.o psb_c_glob_transpose.o psb_z_glob_transpose.o psb_cgetelem.o psb_dgetelem.o psb_sgetelem.o psb_zgetelem.o +ranlib ../libpsb_base.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» +/bin/cp -p ./libpsb_base.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» +make -C prec lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +make -C impl lib +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +ar -cDr ../libpsb_prec.a psb_s_prec_type_impl.o psb_d_prec_type_impl.o psb_c_prec_type_impl.o psb_z_prec_type_impl.o psb_d_diagprec_impl.o psb_d_bjacprec_impl.o psb_d_nullprec_impl.o psb_d_ilu0_fact.o psb_d_iluk_fact.o psb_d_ilut_fact.o psb_dprecbld.o psb_dprecinit.o psb_s_diagprec_impl.o psb_s_bjacprec_impl.o psb_s_nullprec_impl.o psb_s_ilu0_fact.o psb_s_iluk_fact.o psb_s_ilut_fact.o psb_sprecbld.o psb_sprecinit.o psb_c_diagprec_impl.o psb_c_bjacprec_impl.o psb_c_nullprec_impl.o psb_c_ilu0_fact.o psb_c_iluk_fact.o psb_c_ilut_fact.o psb_cprecbld.o psb_cprecinit.o psb_z_diagprec_impl.o psb_z_bjacprec_impl.o psb_z_nullprec_impl.o psb_z_ilu0_fact.o psb_z_iluk_fact.o psb_z_ilut_fact.o psb_zprecbld.o psb_zprecinit.o psb_c_sparsify.o psb_d_sparsify.o psb_s_sparsify.o psb_z_sparsify.o psb_crwclip.o psb_drwclip.o psb_srwclip.o psb_zrwclip.o psb_c_sp_drop.o psb_d_sp_drop.o psb_s_sp_drop.o psb_z_sp_drop.o psb_dsparse_biconjg_llk_noth.o psb_dsparse_biconjg_llk.o psb_dsparse_biconjg_mlk.o psb_dsparse_biconjg_s_ft_llk.o psb_dsparse_biconjg_s_llk.o psb_csparse_biconjg_llk_noth.o psb_csparse_biconjg_llk.o psb_csparse_biconjg_mlk.o psb_csparse_biconjg_s_ft_llk.o psb_csparse_biconjg_s_llk.o psb_zsparse_biconjg_llk_noth.o psb_zsparse_biconjg_llk.o psb_zsparse_biconjg_mlk.o psb_zsparse_biconjg_s_ft_llk.o psb_zsparse_biconjg_s_llk.o psb_ssparse_biconjg_llk_noth.o psb_ssparse_biconjg_llk.o psb_ssparse_biconjg_mlk.o psb_ssparse_biconjg_s_ft_llk.o psb_ssparse_biconjg_s_llk.o psb_d_ainv_bld.o psb_c_ainv_bld.o psb_s_ainv_bld.o psb_z_ainv_bld.o psb_c_invt_fact.o psb_d_invt_fact.o psb_s_invt_fact.o psb_z_invt_fact.o psb_c_invk_fact.o psb_d_invk_fact.o psb_s_invk_fact.o psb_z_invk_fact.o +ranlib ../libpsb_prec.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» +ar -cDr ./libpsb_prec.a psb_prec_const_mod.o psb_s_prec_type.o psb_d_prec_type.o psb_c_prec_type.o psb_z_prec_type.o psb_s_base_prec_mod.o psb_d_base_prec_mod.o psb_c_base_prec_mod.o psb_z_base_prec_mod.o psb_prec_type.o psb_prec_mod.o psb_s_prec_mod.o psb_d_prec_mod.o psb_c_prec_mod.o psb_z_prec_mod.o psb_d_diagprec.o psb_d_nullprec.o psb_d_bjacprec.o psb_s_ilu_fact_mod.o psb_s_diagprec.o psb_s_nullprec.o psb_s_bjacprec.o psb_d_ilu_fact_mod.o psb_c_diagprec.o psb_c_nullprec.o psb_c_bjacprec.o psb_c_ilu_fact_mod.o psb_z_diagprec.o psb_z_nullprec.o psb_z_bjacprec.o psb_z_ilu_fact_mod.o psb_c_ainv_fact_mod.o psb_d_ainv_fact_mod.o psb_s_ainv_fact_mod.o psb_z_ainv_fact_mod.o psb_c_ainv_tools_mod.o psb_d_ainv_tools_mod.o psb_s_ainv_tools_mod.o psb_z_ainv_tools_mod.o psb_ainv_tools_mod.o psb_biconjg_mod.o psb_c_biconjg_mod.o psb_d_biconjg_mod.o psb_s_biconjg_mod.o psb_z_biconjg_mod.o psb_c_invt_fact_mod.o psb_d_invt_fact_mod.o psb_s_invt_fact_mod.o psb_z_invt_fact_mod.o psb_c_invk_fact_mod.o psb_d_invk_fact_mod.o psb_s_invk_fact_mod.o psb_z_invk_fact_mod.o +ranlib ./libpsb_prec.a +/bin/cp -p ./libpsb_prec.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» +make -C linsolve lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +/usr/bin/install -c -p -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +make -C impl lib +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +ar -cDr ../libpsb_linsolve.a psb_dkrylov.o psb_skrylov.o psb_ckrylov.o psb_zkrylov.o psb_drichardson.o psb_srichardson.o psb_crichardson.o psb_zrichardson.o psb_dcgstab.o psb_dcg.o psb_dfcg.o psb_dgcr.o psb_dcgs.o psb_dbicg.o psb_dcgstabl.o psb_drgmres.o psb_scgstab.o psb_scg.o psb_sfcg.o psb_sgcr.o psb_scgs.o psb_sbicg.o psb_scgstabl.o psb_srgmres.o psb_ccgstab.o psb_ccg.o psb_cfcg.o psb_cgcr.o psb_ccgs.o psb_cbicg.o psb_ccgstabl.o psb_crgmres.o psb_zcgstab.o psb_zcg.o psb_zfcg.o psb_zgcr.o psb_zcgs.o psb_zbicg.o psb_zcgstabl.o psb_zrgmres.o +ranlib ../libpsb_linsolve.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» +ar -cDr ./libpsb_linsolve.a psb_base_linsolve_conv_mod.o psb_s_linsolve_conv_mod.o psb_c_linsolve_conv_mod.o psb_d_linsolve_conv_mod.o psb_z_linsolve_conv_mod.o psb_linsolve_mod.o +ranlib ./libpsb_linsolve.a +/bin/cp -p ./libpsb_linsolve.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» +make -C util lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +/usr/bin/install -c -p -p *.mod ../modules +ar -cDr ./libpsb_util.a psb_metis_int.o psb_amd_order.o psb_util_mod.o psb_blockpart_mod.o psb_metispart_mod.o psb_partidx_mod.o psb_hbio_mod.o psb_mmio_mod.o psb_mat_dist_mod.o psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o psb_renum_mod.o psb_gps_mod.o psb_s_renum_mod.o psb_d_renum_mod.o psb_c_renum_mod.o psb_z_renum_mod.o psb_s_hbio_impl.o psb_d_hbio_impl.o psb_c_hbio_impl.o psb_z_hbio_impl.o psb_s_mmio_impl.o psb_d_mmio_impl.o psb_c_mmio_impl.o psb_z_mmio_impl.o psb_i_mmio_impl.o psb_s_mat_dist_impl.o psb_d_mat_dist_impl.o psb_c_mat_dist_impl.o psb_z_mat_dist_impl.o psb_s_renum_impl.o psb_d_renum_impl.o psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o +ranlib ./libpsb_util.a +/bin/cp -p ./libpsb_util.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» +make -C cbind lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +cd base && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make objs LIBNAME=libpsb_cbind.a +cd util && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make objs LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.h ../include +/bin/cp -p *.mod ../modules/ +cd base && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» +../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» +/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. +ar -cDr ../libpsb_cbind.a psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o psb_c_scomm.o psb_c_dcomm.o psb_c_ccomm.o psb_c_zcomm.o +ranlib ../libpsb_cbind.a +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» +cd prec && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. +ar -cDr ../libpsb_cbind.a psb_prec_cbind_mod.o psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o psb_c_sprec.o psb_c_dprec.o psb_c_cprec.o psb_c_zprec.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» +cd linsolve && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +/bin/cp -p *.mod psb_linsolve_cbind.h .. +ar -cDr ../libpsb_cbind.a psb_base_linsolve_cbind_mod.o psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» +cd util && make lib LIBNAME=libpsb_cbind.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. +ar -cDr ../libpsb_cbind.a psb_util_cbind_mod.o psb_c_util_cbind_mod.o psb_d_util_cbind_mod.o psb_s_util_cbind_mod.o psb_z_util_cbind_mod.o +ranlib ../libpsb_cbind.a +/bin/cp -p ../libpsb_cbind.a ../../lib +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» +/bin/cp -p ./libpsb_cbind.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» +make -C ext lib +make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +/bin/cp -p *.mod ../modules +make -C impl objs +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make[2]: Nessuna operazione da eseguire per «objs». +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +make -C impl lib LIBNAME=libpsb_ext.a +make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +ar -cDr ../libpsb_ext.a psb_s_cp_dia_from_coo.o psb_s_cp_dia_to_coo.o psb_s_cp_ell_from_coo.o psb_s_cp_ell_from_fmt.o psb_s_cp_ell_to_coo.o psb_s_cp_ell_to_fmt.o psb_s_cp_hdia_from_coo.o psb_s_cp_hdia_to_coo.o psb_s_cp_hll_from_coo.o psb_s_cp_hll_from_fmt.o psb_s_cp_hll_to_coo.o psb_s_cp_hll_to_fmt.o psb_s_dia_aclsum.o psb_s_dia_allocate_mnnz.o psb_s_dia_arwsum.o psb_s_dia_colsum.o psb_s_dia_csgetptn.o psb_s_dia_csgetrow.o psb_s_dia_csmm.o psb_s_dia_csmv.o psb_s_dia_get_diag.o psb_s_dia_maxval.o psb_s_dia_mold.o psb_s_dia_print.o psb_s_dia_reallocate_nz.o psb_s_dia_reinit.o psb_s_dia_rowsum.o psb_s_dia_scal.o psb_s_dia_scals.o psb_s_ell_aclsum.o psb_s_ell_allocate_mnnz.o psb_s_ell_arwsum.o psb_s_ell_colsum.o psb_s_ell_csgetblk.o psb_s_ell_csgetptn.o psb_s_ell_csgetrow.o psb_s_ell_csmm.o psb_s_ell_csmv.o psb_s_ell_csnm1.o psb_s_ell_csnmi.o psb_s_ell_csput.o psb_s_ell_cssm.o psb_s_ell_cssv.o psb_s_ell_get_diag.o psb_s_ell_maxval.o psb_s_ell_mold.o psb_s_ell_print.o psb_s_ell_reallocate_nz.o psb_s_ell_reinit.o psb_s_ell_rowsum.o psb_s_ell_scal.o psb_s_ell_scals.o psb_s_ell_trim.o psb_s_hdia_allocate_mnnz.o psb_s_hdia_csmv.o psb_s_hdia_mold.o psb_s_hdia_print.o psb_s_hll_aclsum.o psb_s_hll_allocate_mnnz.o psb_s_hll_arwsum.o psb_s_hll_colsum.o psb_s_hll_csgetblk.o psb_s_hll_csgetptn.o psb_s_hll_csgetrow.o psb_s_hll_csmm.o psb_s_hll_csmv.o psb_s_hll_csnm1.o psb_s_hll_csnmi.o psb_s_hll_csput.o psb_s_hll_cssm.o psb_s_hll_cssv.o psb_s_hll_get_diag.o psb_s_hll_maxval.o psb_s_hll_mold.o psb_s_hll_print.o psb_s_hll_reallocate_nz.o psb_s_hll_reinit.o psb_s_hll_rowsum.o psb_s_hll_scal.o psb_s_hll_scals.o psb_s_mv_dia_from_coo.o psb_s_mv_ell_from_coo.o psb_s_mv_ell_from_fmt.o psb_s_mv_ell_to_coo.o psb_s_mv_ell_to_fmt.o psb_s_mv_hdia_from_coo.o psb_s_mv_hdia_to_coo.o psb_s_mv_hll_from_coo.o psb_s_mv_hll_from_fmt.o psb_s_mv_hll_to_coo.o psb_s_mv_hll_to_fmt.o psb_c_cp_dia_from_coo.o psb_c_cp_dia_to_coo.o psb_c_cp_ell_from_coo.o psb_c_cp_ell_from_fmt.o psb_c_cp_ell_to_coo.o psb_c_cp_ell_to_fmt.o psb_c_cp_hdia_from_coo.o psb_c_cp_hdia_to_coo.o psb_c_cp_hll_from_coo.o psb_c_cp_hll_from_fmt.o psb_c_cp_hll_to_coo.o psb_c_cp_hll_to_fmt.o psb_c_dia_aclsum.o psb_c_dia_allocate_mnnz.o psb_c_dia_arwsum.o psb_c_dia_colsum.o psb_c_dia_csgetptn.o psb_c_dia_csgetrow.o psb_c_dia_csmm.o psb_c_dia_csmv.o psb_c_dia_get_diag.o psb_c_dia_maxval.o psb_c_dia_mold.o psb_c_dia_print.o psb_c_dia_reallocate_nz.o psb_c_dia_reinit.o psb_c_dia_rowsum.o psb_c_dia_scal.o psb_c_dia_scals.o psb_c_ell_aclsum.o psb_c_ell_allocate_mnnz.o psb_c_ell_arwsum.o psb_c_ell_colsum.o psb_c_ell_csgetblk.o psb_c_ell_csgetptn.o psb_c_ell_csgetrow.o psb_c_ell_csmm.o psb_c_ell_csmv.o psb_c_ell_csnm1.o psb_c_ell_csnmi.o psb_c_ell_csput.o psb_c_ell_cssm.o psb_c_ell_cssv.o psb_c_ell_get_diag.o psb_c_ell_maxval.o psb_c_ell_mold.o psb_c_ell_print.o psb_c_ell_reallocate_nz.o psb_c_ell_reinit.o psb_c_ell_rowsum.o psb_c_ell_scal.o psb_c_ell_scals.o psb_c_ell_trim.o psb_c_hdia_allocate_mnnz.o psb_c_hdia_csmv.o psb_c_hdia_mold.o psb_c_hdia_print.o psb_c_hll_aclsum.o psb_c_hll_allocate_mnnz.o psb_c_hll_arwsum.o psb_c_hll_colsum.o psb_c_hll_csgetblk.o psb_c_hll_csgetptn.o psb_c_hll_csgetrow.o psb_c_hll_csmm.o psb_c_hll_csmv.o psb_c_hll_csnm1.o psb_c_hll_csnmi.o psb_c_hll_csput.o psb_c_hll_cssm.o psb_c_hll_cssv.o psb_c_hll_get_diag.o psb_c_hll_maxval.o psb_c_hll_mold.o psb_c_hll_print.o psb_c_hll_reallocate_nz.o psb_c_hll_reinit.o psb_c_hll_rowsum.o psb_c_hll_scal.o psb_c_hll_scals.o psb_c_mv_dia_from_coo.o psb_c_mv_ell_from_coo.o psb_c_mv_ell_from_fmt.o psb_c_mv_ell_to_coo.o psb_c_mv_ell_to_fmt.o psb_c_mv_hdia_from_coo.o psb_c_mv_hdia_to_coo.o psb_c_mv_hll_from_coo.o psb_c_mv_hll_from_fmt.o psb_c_mv_hll_to_coo.o psb_c_mv_hll_to_fmt.o psb_d_cp_dia_from_coo.o psb_d_cp_dia_to_coo.o psb_d_cp_ell_from_coo.o psb_d_cp_ell_from_fmt.o psb_d_cp_ell_to_coo.o psb_d_cp_ell_to_fmt.o psb_d_cp_hdia_from_coo.o psb_d_cp_hdia_to_coo.o psb_d_cp_hll_from_coo.o psb_d_cp_hll_from_fmt.o psb_d_cp_hll_to_coo.o psb_d_cp_hll_to_fmt.o psb_d_dia_aclsum.o psb_d_dia_allocate_mnnz.o psb_d_dia_arwsum.o psb_d_dia_colsum.o psb_d_dia_csgetptn.o psb_d_dia_csgetrow.o psb_d_dia_csmm.o psb_d_dia_csmv.o psb_d_dia_get_diag.o psb_d_dia_maxval.o psb_d_dia_mold.o psb_d_dia_print.o psb_d_dia_reallocate_nz.o psb_d_dia_reinit.o psb_d_dia_rowsum.o psb_d_dia_scal.o psb_d_dia_scals.o psb_d_ell_aclsum.o psb_d_ell_allocate_mnnz.o psb_d_ell_arwsum.o psb_d_ell_colsum.o psb_d_ell_csgetblk.o psb_d_ell_csgetptn.o psb_d_ell_csgetrow.o psb_d_ell_csmm.o psb_d_ell_csmv.o psb_d_ell_csnm1.o psb_d_ell_csnmi.o psb_d_ell_csput.o psb_d_ell_cssm.o psb_d_ell_cssv.o psb_d_ell_get_diag.o psb_d_ell_maxval.o psb_d_ell_mold.o psb_d_ell_print.o psb_d_ell_reallocate_nz.o psb_d_ell_reinit.o psb_d_ell_rowsum.o psb_d_ell_scal.o psb_d_ell_scals.o psb_d_ell_trim.o psb_d_hdia_allocate_mnnz.o psb_d_hdia_csmv.o psb_d_hdia_mold.o psb_d_hdia_print.o psb_d_hll_aclsum.o psb_d_hll_allocate_mnnz.o psb_d_hll_arwsum.o psb_d_hll_colsum.o psb_d_hll_csgetblk.o psb_d_hll_csgetptn.o psb_d_hll_csgetrow.o psb_d_hll_csmm.o psb_d_hll_csmv.o psb_d_hll_csnm1.o psb_d_hll_csnmi.o psb_d_hll_csput.o psb_d_hll_cssm.o psb_d_hll_cssv.o psb_d_hll_get_diag.o psb_d_hll_maxval.o psb_d_hll_mold.o psb_d_hll_print.o psb_d_hll_reallocate_nz.o psb_d_hll_reinit.o psb_d_hll_rowsum.o psb_d_hll_scal.o psb_d_hll_scals.o psb_d_mv_dia_from_coo.o psb_d_mv_ell_from_coo.o psb_d_mv_ell_from_fmt.o psb_d_mv_ell_to_coo.o psb_d_mv_ell_to_fmt.o psb_d_mv_hdia_from_coo.o psb_d_mv_hdia_to_coo.o psb_d_mv_hll_from_coo.o psb_d_mv_hll_from_fmt.o psb_d_mv_hll_to_coo.o psb_d_mv_hll_to_fmt.o psb_z_cp_dia_from_coo.o psb_z_cp_dia_to_coo.o psb_z_cp_ell_from_coo.o psb_z_cp_ell_from_fmt.o psb_z_cp_ell_to_coo.o psb_z_cp_ell_to_fmt.o psb_z_cp_hdia_from_coo.o psb_z_cp_hdia_to_coo.o psb_z_cp_hll_from_coo.o psb_z_cp_hll_from_fmt.o psb_z_cp_hll_to_coo.o psb_z_cp_hll_to_fmt.o psb_z_dia_aclsum.o psb_z_dia_allocate_mnnz.o psb_z_dia_arwsum.o psb_z_dia_colsum.o psb_z_dia_csgetptn.o psb_z_dia_csgetrow.o psb_z_dia_csmm.o psb_z_dia_csmv.o psb_z_dia_get_diag.o psb_z_dia_maxval.o psb_z_dia_mold.o psb_z_dia_print.o psb_z_dia_reallocate_nz.o psb_z_dia_reinit.o psb_z_dia_rowsum.o psb_z_dia_scal.o psb_z_dia_scals.o psb_z_ell_aclsum.o psb_z_ell_allocate_mnnz.o psb_z_ell_arwsum.o psb_z_ell_colsum.o psb_z_ell_csgetblk.o psb_z_ell_csgetptn.o psb_z_ell_csgetrow.o psb_z_ell_csmm.o psb_z_ell_csmv.o psb_z_ell_csnm1.o psb_z_ell_csnmi.o psb_z_ell_csput.o psb_z_ell_cssm.o psb_z_ell_cssv.o psb_z_ell_get_diag.o psb_z_ell_maxval.o psb_z_ell_mold.o psb_z_ell_print.o psb_z_ell_reallocate_nz.o psb_z_ell_reinit.o psb_z_ell_rowsum.o psb_z_ell_scal.o psb_z_ell_scals.o psb_z_ell_trim.o psb_z_hdia_allocate_mnnz.o psb_z_hdia_csmv.o psb_z_hdia_mold.o psb_z_hdia_print.o psb_z_hll_aclsum.o psb_z_hll_allocate_mnnz.o psb_z_hll_arwsum.o psb_z_hll_colsum.o psb_z_hll_csgetblk.o psb_z_hll_csgetptn.o psb_z_hll_csgetrow.o psb_z_hll_csmm.o psb_z_hll_csmv.o psb_z_hll_csnm1.o psb_z_hll_csnmi.o psb_z_hll_csput.o psb_z_hll_cssm.o psb_z_hll_cssv.o psb_z_hll_get_diag.o psb_z_hll_maxval.o psb_z_hll_mold.o psb_z_hll_print.o psb_z_hll_reallocate_nz.o psb_z_hll_reinit.o psb_z_hll_rowsum.o psb_z_hll_scal.o psb_z_hll_scals.o psb_z_mv_dia_from_coo.o psb_z_mv_ell_from_coo.o psb_z_mv_ell_from_fmt.o psb_z_mv_ell_to_coo.o psb_z_mv_ell_to_fmt.o psb_z_mv_hdia_from_coo.o psb_z_mv_hdia_to_coo.o psb_z_mv_hll_from_coo.o psb_z_mv_hll_from_fmt.o psb_z_mv_hll_to_coo.o psb_z_mv_hll_to_fmt.o psi_s_xtr_ell_from_coo.o psi_c_xtr_ell_from_coo.o psi_d_xtr_ell_from_coo.o psi_z_xtr_ell_from_coo.o psi_s_convert_ell_from_coo.o psi_c_convert_ell_from_coo.o psi_d_convert_ell_from_coo.o psi_z_convert_ell_from_coo.o psi_s_convert_hll_from_coo.o psi_c_convert_hll_from_coo.o psi_d_convert_hll_from_coo.o psi_z_convert_hll_from_coo.o psi_s_xtr_dia_from_coo.o psi_c_xtr_dia_from_coo.o psi_d_xtr_dia_from_coo.o psi_z_xtr_dia_from_coo.o psi_s_xtr_coo_from_dia.o psi_d_xtr_coo_from_dia.o psi_c_xtr_coo_from_dia.o psi_z_xtr_coo_from_dia.o psi_s_convert_dia_from_coo.o psi_c_convert_dia_from_coo.o psi_d_convert_dia_from_coo.o psi_z_convert_dia_from_coo.o psb_s_dns_mat_impl.o psb_d_dns_mat_impl.o psb_c_dns_mat_impl.o psb_z_dns_mat_impl.o +make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» +ar -cDr libpsb_ext.a psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o psb_s_hll_mat_mod.o psb_s_ell_mat_mod.o psb_c_hll_mat_mod.o psb_c_ell_mat_mod.o psb_z_hll_mat_mod.o psb_z_ell_mat_mod.o psb_d_dia_mat_mod.o psb_d_hdia_mat_mod.o psb_s_dia_mat_mod.o psb_s_hdia_mat_mod.o psb_c_dia_mat_mod.o psb_c_hdia_mat_mod.o psb_z_dia_mat_mod.o psb_z_hdia_mat_mod.o psb_s_dns_mat_mod.o psb_d_dns_mat_mod.o psb_c_dns_mat_mod.o psb_z_dns_mat_mod.o psi_ext_util_mod.o psi_i_ext_util_mod.o psi_s_ext_util_mod.o psi_c_ext_util_mod.o psi_d_ext_util_mod.o psi_z_ext_util_mod.o psb_ext_mod.o +/bin/cp -p libpsb_ext.a ../lib +make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» +===================================== +PSBLAS libraries Compilation Successful. diff --git a/test/comm/README.md b/test/comm/README.md new file mode 100644 index 000000000..c2acd017b --- /dev/null +++ b/test/comm/README.md @@ -0,0 +1,23 @@ +Communication scheme tests +========================== + +This directory contains tests created after adding multiple communication schemes +to PSBLAS. + +The goal is to exercise and compare communication patterns at different layers: + +- direct halo exchange (`psi_swapdata`) +- overlap exchange for transpose/SpMV workflows (`psi_swaptran` + `psi_swapdata`) +- full Krylov solver runs (`CG`) using different comm schemes. + +Communication schemes covered in this area: + +- `psb_comm_isend_irecv_` (baseline point-to-point) +- `psb_comm_ineighbor_alltoallv_` (neighbor collective) +- `psb_comm_persistent_ineighbor_alltoallv_` (persistent neighbor collective) + +See: + +- `swapdata/` for a direct halo-exchange test. +- `spmv/` for an overlap SpMV test that uses different communication schemes. +- `cg/` for a conjugate-gradient solve-time comparison across the three schemes. diff --git a/test/comm/cg/Makefile b/test/comm/cg/Makefile new file mode 100644 index 000000000..b1e4e53d7 --- /dev/null +++ b/test/comm/cg/Makefile @@ -0,0 +1,37 @@ +INSTALLDIR=../../.. +INCDIR=$(INSTALLDIR)/include/ +MODDIR=$(INSTALLDIR)/modules/ +include $(INCDIR)/Make.inc.psblas + +LIBDIR=$(INSTALLDIR)/lib/ +PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base +LDLIBS=$(PSBLDLIBS) + +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). + +NP ?= 4 +IDIM ?= 40 + +PROGSRC=psb_comm_cg_test.F90 +TOBJS=psb_comm_cg_test.o + +EXEDIR=./runs +EXE=psb_comm_cg_test + +all: runsd $(EXE) + +runsd: + (if test ! -d runs ; then mkdir runs; fi) + +psb_comm_cg_test.o: $(PROGSRC) + $(FC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c $(PROGSRC) -o $@ + +$(EXE): $(TOBJS) + $(FLINK) $(LOPT) $(TOBJS) -o $(EXE) $(PSBLAS_LIB) $(LDLIBS) + /bin/mv $(EXE) $(EXEDIR) + +run: all + mpirun -np $(NP) $(EXEDIR)/$(EXE) $(IDIM) + +clean: + /bin/rm -f $(TOBJS) *$(.mod) $(EXEDIR)/$(EXE) diff --git a/test/comm/cg/README.md b/test/comm/cg/README.md new file mode 100644 index 000000000..76a85e1e5 --- /dev/null +++ b/test/comm/cg/README.md @@ -0,0 +1,37 @@ +CG no-preconditioner communication test +======================================= + +This test lives under `test/comm/cg` and builds a local executable: + +- source: `psb_comm_cg_test.F90` +- executable: `runs/psb_comm_cg_test` + +Behavior: + +- generates a 3D PDE matrix using local `psb_d_gen_pde3d` (double precision) +- solves with `CG` +- uses preconditioner `NONE` +- runs CG three times, changing communication scheme of `x` each run + +Communication pattern used in this test: + +1. reset solution vector +2. set communication scheme on `x%v%comm_handle` +3. run full `psb_krylov('CG', ...)` +4. collect and compare solve time + +Schemes compared: + +- `psb_comm_isend_irecv_` +- `psb_comm_ineighbor_alltoallv_` +- `psb_comm_persistent_ineighbor_alltoallv_` + +How to run +---------- + +From this directory: + +- `make run` (defaults: `NP=4`, `IDIM=40`) +- `make run NP=8 IDIM=80` + +The program accepts one optional CLI argument: `IDIM`. diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 new file mode 100644 index 000000000..d68b4dee6 --- /dev/null +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -0,0 +1,401 @@ +program psb_comm_cg_test + use psb_base_mod + use psb_prec_mod + use psb_linsolve_mod + use psb_comm_factory_mod + + implicit none + + type(psb_ctxt_type) :: ctxt + type(psb_dspmat_type) :: a + type(psb_desc_type) :: desc_a + type(psb_d_vect_type) :: b, x + type(psb_dprec_type) :: prec + + integer(psb_ipk_) :: info, iam, np + integer(psb_ipk_) :: idim, itmax, itrace, istop, iter, is + integer(psb_ipk_) :: iter_arr(3), info_arr(3) + integer(psb_ipk_) :: scheme_types(3) + real(psb_dpk_) :: eps, err, t1, t2 + real(psb_dpk_) :: tsolve(3), err_arr(3) + character(len=25) :: scheme_names(3) + character(len=5) :: afmt + character(len=256) :: arg + + info = psb_success_ + afmt = 'CSR' + idim = 40 + itmax = 500 + itrace = 0 + istop = 2 + eps = 1.d-6 + scheme_types = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_ /) + scheme_names(1) = 'isend_irecv' + scheme_names(2) = 'ineighbor_alltoallv' + scheme_names(3) = 'persistent_ineighbor_a2av' + + call get_command_argument(1,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) idim + if (info /= 0) then + idim = 40 + info = psb_success_ + end if + end if + + call psb_init(ctxt) + call psb_info(ctxt, iam, np) + + if (iam == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the comm/cg test program' + write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim + write(psb_out_unit,'("Number of processors : ",i0)') np + write(psb_out_unit,'("Iterative method : CG")') + write(psb_out_unit,'("Preconditioner : NONE")') + write(psb_out_unit,'(" ")') + end if + + call psb_barrier(ctxt) + t1 = psb_wtime() + call psb_d_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) + if (info /= psb_success_) goto 9999 + + call prec%init(ctxt,'NONE',info) + if (info /= psb_success_) goto 9999 + + call prec%build(a,desc_a,info) + if (info /= psb_success_) goto 9999 + + do is = 1, 3 + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_comm_init(scheme_types(is),x%v%comm_handle,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t1 = psb_wtime() + call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& + & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) + t2 = psb_wtime() - t1 + call psb_amx(ctxt,t2) + + tsolve(is) = t2 + iter_arr(is) = iter + err_arr(is) = err + info_arr(is) = info + + if (info /= psb_success_) goto 9999 + end do + + if (iam == psb_root_) then + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("CG solve time by communication scheme")') + write(psb_out_unit,'("--------------------------------------")') + do is = 1, 3 + write(psb_out_unit,'(a25,2x,"time=",es12.5,2x,"iter=",i8,2x,"err=",es12.5,2x,"info=",i6)') & + & trim(scheme_names(is)), tsolve(is), iter_arr(is), err_arr(is), info_arr(is) + end do + end if + + call psb_gefree(b,desc_a,info) + call psb_gefree(x,desc_a,info) + call psb_spfree(a,desc_a,info) + call prec%free(info) + call psb_cdfree(desc_a,info) + + call psb_exit(ctxt) + stop + +9999 call psb_error(ctxt) + stop 1 + +contains + + function b1(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b1 + + function b2(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b2 + + function b3(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b3 + + function cfun(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function cfun + + function a1(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a1 + + function a2(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a2 + + function a3(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a3 + + function gfun(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + if (x == done) then + val = done + else if (x == dzero) then + val = exp(y**2-z**2) + end if + end function gfun + + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info) + implicit none + integer(psb_ipk_), intent(in) :: idim + type(psb_dspmat_type), intent(out) :: a + type(psb_d_vect_type), intent(out) :: xv,bv + type(psb_desc_type), intent(out) :: desc_a + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(out) :: info + character(len=*), intent(in) :: afmt + + integer(psb_ipk_), parameter :: nb=20 + real(psb_dpk_) :: zt(nb),x,y,z + integer(psb_lpk_) :: m,n,glob_row + integer(psb_ipk_) :: nnz,nlr,i,ii,ib,k + integer(psb_ipk_) :: ix,iy,iz + integer(psb_ipk_) :: np, iam, nr, nt + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_dpk_), allocatable :: val(:) + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err, tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + deltah = done/(idim+2) + sqdeltah = deltah*deltah + deltah2 = 2.d0*deltah + + m = idim*idim*idim + n = m + nnz = ((n*9)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + call psb_barrier(ctxt) + t0 = psb_wtime() + call psb_cdall(ctxt,desc_a,info,nl=nr) + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + allocate(val(20*nb),irow(20*nb),icol(20*nb),stat=info) + if (info /= psb_success_) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + glob_row=myidx(i) + + if (mod(glob_row,(idim*idim)) == 0) then + ix = glob_row/(idim*idim) + else + ix = glob_row/(idim*idim)+1 + endif + if (mod((glob_row-(ix-1)*idim*idim),idim) == 0) then + iy = (glob_row-(ix-1)*idim*idim)/idim + else + iy = (glob_row-(ix-1)*idim*idim)/idim+1 + endif + iz = glob_row-(ix-1)*idim*idim-(iy-1)*idim + + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = dzero + + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = gfun(dzero,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-2)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = gfun(x,dzero,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-2)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = gfun(x,y,dzero)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz-1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff)=2.d0*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah + cfun(x,y,z) + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + + val(icoeff) = -a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = gfun(x,y,done)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz+1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = gfun(x,done,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+iy*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix == idim) then + zt(k) = gfun(done,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = ix*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + end do + + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=dzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + call psb_cdasb(desc_a,info) + tcdasb = psb_wtime()-t1 + + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) call psb_spasb(a,desc_a,info,afmt=afmt) + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")') tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psb_d_gen_pde3d + +end program psb_comm_cg_test diff --git a/test/comm/cg/psb_pde3d_cg_noprec.inp b/test/comm/cg/psb_pde3d_cg_noprec.inp new file mode 100644 index 000000000..fbfeeaf1f --- /dev/null +++ b/test/comm/cg/psb_pde3d_cg_noprec.inp @@ -0,0 +1,18 @@ +17 Number of entries below this +CG Iterative method BICGSTAB CGS BICG BICGSTABL RGMRES FCG CGR RICHARDSON +NONE Preconditioner NONE DIAG BJAC +CSR Storage format for matrix A: CSR COO +100 Domain size (actual system is this**3 in pde3d) +3 Partition: 1 BLOCK 3 3D +2 Stopping criterion 1 2 +0200 MAXIT +10 ITRACE +002 IRST restart for RGMRES and BiCGSTABL +INVK Block Solver ILU,ILUT,INVK,INVT,AINV +NONE If ILU : MILU or NONE otherwise ignored +NONE Scaling if ILUT: NONE, MAXVAL otherwise ignored +0 Level of fill for forward factorization +1 Level of fill for inverse factorization (only INVK,INVT) +1E-1 Threshold for forward factorization +1E-1 Threshold for inverse factorization (Only INVK, INVT) +LLK Orthogonalization algorithm (only AINV) diff --git a/test/comm/spmv/Makefile b/test/comm/spmv/Makefile new file mode 100644 index 000000000..a8a5f8fb9 --- /dev/null +++ b/test/comm/spmv/Makefile @@ -0,0 +1,33 @@ +INSTALLDIR=../.. +INCDIR=$(INSTALLDIR)/include/ +MODDIR=$(INSTALLDIR)/modules/ +include $(INCDIR)/Make.inc.psblas +# +# Libraries used +# +LIBDIR=$(INSTALLDIR)/lib/ +PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base +LDLIBS=$(PSBLDLIBS) + +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). + +TOBJS=psb_spmv_overlap_test.o spmv_overlap.o + +EXEDIR=./runs + +all: runsd spmv_overlap + +runsd: + (if test ! -d runs ; then mkdir runs; fi) + +spmv_overlap: $(TOBJS) + $(FLINK) $(LOPT) $(TOBJS) -o spmv_overlap $(PSBLAS_LIB) $(LDLIBS) + /bin/mv spmv_overlap $(EXEDIR) + +clean: + /bin/rm -f $(TOBJS) $(TOBJS_API) *$(.mod) $(EXEDIR)/spmv_overlap + +lib: + (cd ../../; make library) +verycleanlib: + (cd ../../; make veryclean) \ No newline at end of file diff --git a/test/comm/spmv/README.md b/test/comm/spmv/README.md new file mode 100644 index 000000000..4e98e7a31 --- /dev/null +++ b/test/comm/spmv/README.md @@ -0,0 +1,21 @@ +spmv overlap communication test +=============================== + +This test was added after introducing different communication schemes in PSBLAS. + +It exercises the overlapped SpMV communication path inside `psb_spmm`. + +Communication pattern: + +- split exchange/computation flow (`start` + local compute + `wait`) +- halo/overlap update through internal swap routines used by SpMV kernels +- same matrix/vector workload repeated across schemes for timing comparison + +Communication schemes compared: + +- `psb_comm_isend_irecv_` +- `psb_comm_ineighbor_alltoallv_` +- `psb_comm_persistent_ineighbor_alltoallv_` + +Unlike `swapdata/`, which checks direct halo exchange, this test covers the +overlapped SpMV workflow. diff --git a/test/comm/spmv/psb_spmv_overlap_test.f90 b/test/comm/spmv/psb_spmv_overlap_test.f90 new file mode 100644 index 000000000..f22b4ffc9 --- /dev/null +++ b/test/comm/spmv/psb_spmv_overlap_test.f90 @@ -0,0 +1,680 @@ +!> Test program for overlapping communication and computation with psb_spmm. +!! +!! This benchmark compares two equivalent SpMV paths: +!! 1. Serialized halo exchange + compute +!! 2. Overlapped psb_spmm(..., doswap=.true.) +!! +module psb_spmv_overlap_test + + use psb_base_mod + use psb_util_mod + use psb_comm_factory_mod, only: psb_comm_init + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_ + + implicit none + + interface + function d_func_3d(x,y,z) result(val) + import :: psb_dpk_ + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + end function d_func_3d + end interface + +contains + + + function d_null_func_3d(x,y,z) result(val) + + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + + val = dzero + + end function d_null_func_3d + ! + ! functions parametrizing the differential equation + ! + + ! + ! Note: b1, b2 and b3 are the coefficients of the first + ! derivative of the unknown function. The default + ! we apply here is to have them zero, so that the resulting + ! matrix is symmetric/hermitian and suitable for + ! testing with CG and FCG. + ! When testing methods for non-hermitian matrices you can + ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) + ! + function b1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b1 + real(psb_dpk_), intent(in) :: x,y,z + b1=dzero + end function b1 + function b2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b2 + real(psb_dpk_), intent(in) :: x,y,z + b2=dzero + end function b2 + function b3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b3 + real(psb_dpk_), intent(in) :: x,y,z + b3=dzero + end function b3 + function c(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: c + real(psb_dpk_), intent(in) :: x,y,z + c=dzero + end function c + function a1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a1 + real(psb_dpk_), intent(in) :: x,y,z + a1=done/80 + end function a1 + function a2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a2 + real(psb_dpk_), intent(in) :: x,y,z + a2=done/80 + end function a2 + function a3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a3 + real(psb_dpk_), intent(in) :: x,y,z + a3=done/80 + end function a3 + function g(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: g + real(psb_dpk_), intent(in) :: x,y,z + g = dzero + if (x == done) then + g = done + else if (x == dzero) then + g = exp(y**2-z**2) + end if + end function g + + ! + ! subroutine to allocate and fill in the coefficient matrix and + ! the rhs. + ! + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& + & f,amold,vmold,imold,partition,nrl,iv,tnd) + use psb_base_mod + use psb_util_mod + ! + ! Discretizes the partial differential equation + ! + ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) + ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f + ! dxdx dydy dzdz dx dy dz + ! + ! with Dirichlet boundary conditions + ! u = g + ! + ! on the unit cube 0<=x,y,z<=1. + ! + ! + ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. + ! + implicit none + integer(psb_ipk_) :: idim + type(psb_dspmat_type) :: a + type(psb_d_vect_type) :: xv,bv + type(psb_desc_type) :: desc_a + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: info + character(len=*) :: afmt + procedure(d_func_3d), optional :: f + class(psb_d_base_sparse_mat), optional :: amold + class(psb_d_base_vect_type), optional :: vmold + class(psb_i_base_vect_type), optional :: imold + integer(psb_ipk_), optional :: partition, nrl,iv(:) + logical, optional :: tnd + ! Local variables. + + integer(psb_ipk_), parameter :: nb=20 + type(psb_d_csc_sparse_mat) :: acsc + type(psb_d_coo_sparse_mat) :: acoo + type(psb_d_csr_sparse_mat) :: acsr + real(psb_dpk_) :: zt(nb),x,y,z + integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ + integer(psb_lpk_) :: m,n,glob_row,nt + integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner + ! For 3D partition + ! Note: integer control variables going directly into an MPI call + ! must be 4 bytes, i.e. psb_mpk_ + integer(psb_mpk_) :: npdims(3), npp, minfo + integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz + integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) + ! Process grid + integer(psb_ipk_) :: np, iam, nth + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_dpk_), allocatable :: val(:) + ! deltah dimension of each grid cell + ! deltat discretization time + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + procedure(d_func_3d), pointer :: f_ + logical :: tnd_ + character(len=20) :: name, ch_err,tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + + if (present(f)) then + f_ => f + else + f_ => d_null_func_3d + end if + + deltah = done/(idim+1) + sqdeltah = deltah*deltah + deltah2 = (2*done)* deltah + + if (present(partition)) then + if ((1<= partition).and.(partition <= 3)) then + partition_ = partition + else + write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' + partition_ = 3 + end if + else + partition_ = 3 + end if + + ! initialize array descriptor and sparse matrix storage. provide an + ! estimate of the number of non zeroes + + m = (1_psb_lpk_*idim)*idim*idim + n = m + nnz = ((n*7)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + t0 = psb_wtime() + select case(partition_) + case(1) + ! A BLOCK partition + if (present(nrl)) then + nr = nrl + else + ! + ! Using a simple BLOCK distribution. + ! + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + end if + + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! First example of use of CDALL: specify for each process a number of + ! contiguous rows + ! + call psb_cdall(ctxt,desc_a,info,nl=nr) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(2) + ! A partition defined by the user through IV + + if (present(iv)) then + if (size(iv) /= m) then + write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + else + write(psb_err_unit,*) iam, 'Initialization error: IV not present' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! Second example of use of CDALL: specify for each row the + ! process that owns it + ! + call psb_cdall(ctxt,desc_a,info,vg=iv) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(3) + ! A 3-dimensional partition + + ! A nifty MPI function will split the process list + npdims = 0 + call mpi_dims_create(np,3,npdims,info) + npx = npdims(1) + npy = npdims(2) + npz = npdims(3) + + allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) + ! We can reuse idx2ijk for process indices as well. + call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) + ! Now let's split the 3D cube in hexahedra + call dist1Didx(bndx,idim,npx) + mynx = bndx(iamx+1)-bndx(iamx) + call dist1Didx(bndy,idim,npy) + myny = bndy(iamy+1)-bndy(iamy) + call dist1Didx(bndz,idim,npz) + mynz = bndz(iamz+1)-bndz(iamz) + + ! How many indices do I own? + nlr = mynx*myny*mynz + allocate(myidx(nlr)) + ! Now, let's generate the list of indices I own + nr = 0 + do i=bndx(iamx),bndx(iamx+1)-1 + do j=bndy(iamy),bndy(iamy+1)-1 + do k=bndz(iamz),bndz(iamz+1)-1 + nr = nr + 1 + call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) + end do + end do + end do + if (nr /= nlr) then + write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& + & nr,nlr,mynx,myny,mynz + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + end if + + ! + ! Third example of use of CDALL: specify for each process + ! the set of global indices it owns. + ! + call psb_cdall(ctxt,desc_a,info,vl=myidx) + + case default + write(psb_err_unit,*) iam, 'Initialization error: should not get here' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end select + + + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! define rhs from boundary conditions; also build initial guess + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + ! we build an auxiliary matrix consisting of one row at a + ! time; just a small matrix. might be extended to generate + ! a bunch of rows per call. + ! + allocate(val(20*nb),irow(20*nb),& + &icol(20*nb),stat=info) + if (info /= psb_success_ ) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + + ! loop over rows belonging to current process in a block + ! distribution. + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + ! local matrix pointer + glob_row=myidx(i) + ! compute gridpoint coordinates + call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) + ! x, y, z coordinates + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = f_(x,y,z) + ! internal point: build discretization + ! + ! term depending on (x-1,y,z) + ! + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y-1,z) + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y,z-1) + val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + ! term depending on (x,y,z) + val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & + & + c(x,y,z) + call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + ! term depending on (x,y,z+1) + val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y+1,z) + val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x+1,y,z) + val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix==idim) then + zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + end do + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=dzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + call psb_cdasb(desc_a,info,mold=imold) + tcdasb = psb_wtime()-t1 + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) then + if (present(amold)) then + call psb_spasb(a,desc_a,info,mold=amold,bld_and=tnd) + else + call psb_spasb(a,desc_a,info,afmt=afmt,bld_and=tnd) + end if + end if + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) call psb_geasb(xv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& + & tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psb_d_gen_pde3d + + subroutine psb_spmv_overlap_kernel(ctxt) + use psb_base_mod + use psb_util_mod + + implicit none + + type(psb_ctxt_type), intent(in) :: ctxt + real(psb_dpk_) :: alpha, beta + + type(psb_dspmat_type) :: a + type(psb_d_vect_type) :: x_baseline, x_neighbor, x_persistent + type(psb_d_vect_type) :: y_baseline, y_neighbor, y_persistent + type(psb_desc_type) :: desc_a + + character(len=:), allocatable :: output_file_name + character(len=32) :: idim_str + real(psb_dpk_), allocatable :: x_global(:), y_global(:) + integer(psb_ipk_) :: my_rank, np, info, err_act + integer(psb_ipk_) :: n_global, idim + integer(psb_ipk_) :: i, times + real(psb_dpk_) :: t0, t1, dt + real(psb_dpk_) :: tsum_baseline, tsum_neighbor, tsum_persistent + real(psb_dpk_) :: err_bn, err_bp, tol + logical :: tnd + + info = psb_success_ + tol = 1.0d-10 + times = 100 + tsum_baseline = 0.0_psb_dpk_ + tsum_neighbor = 0.0_psb_dpk_ + tsum_persistent = 0.0_psb_dpk_ + tnd = .false. + idim = 10 + n_global = idim * idim * idim + alpha = done + beta = dzero + + call psb_info(ctxt, my_rank, np) + + + call psb_barrier(ctxt) + call psb_d_gen_pde3d(ctxt,idim,a,y_baseline,x_baseline,desc_a,"CSR",info,partition=1) + + if (info /= psb_success_) goto 9999 + call psb_barrier(ctxt) + + if (my_rank == psb_root_) then + allocate(x_global(n_global)) + allocate(y_global(n_global)) + do i = 1, n_global + x_global(i) = real(mod(i,17)+1, psb_dpk_) / real(17, psb_dpk_) + y_global(i) = real(mod(i,13), psb_dpk_) / real(29, psb_dpk_) + end do + end if + + call psb_geall(x_neighbor, desc_a, info) + call psb_geall(x_persistent, desc_a, info) + call psb_geall(y_neighbor, desc_a, info) + call psb_geall(y_persistent, desc_a, info) + if (info /= psb_success_) goto 9999 + + call psb_scatter(x_global, x_baseline, desc_a, info, root=psb_root_) + call psb_scatter(x_global, x_neighbor, desc_a, info, root=psb_root_) + call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_baseline, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_neighbor, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_persistent, desc_a, info, root=psb_root_) + if (info /= psb_success_) goto 9999 + + ! Set communication schemes on the x vectors used by psb_spmm. + call psb_comm_init(psb_comm_isend_irecv_, x_baseline%v%comm_handle, info) + if (info /= psb_success_) goto 9999 + call psb_comm_init(psb_comm_ineighbor_alltoallv_, x_neighbor%v%comm_handle, info) + if (info /= psb_success_) goto 9999 + call psb_comm_init(psb_comm_persistent_ineighbor_alltoallv_, x_persistent%v%comm_handle, info) + if (info /= psb_success_) goto 9999 + + ! Warm-up all schemes once. + call psb_spmm(alpha, a, x_baseline, beta, y_baseline, desc_a, info, doswap=.true.) + call psb_spmm(alpha, a, x_neighbor, beta, y_neighbor, desc_a, info, doswap=.true.) + call psb_spmm(alpha, a, x_persistent, beta, y_persistent, desc_a, info, doswap=.true.) + if (info /= psb_success_) goto 9999 + + ! Restore vectors so timed loops start from same initial state. + call psb_scatter(x_global, x_baseline, desc_a, info, root=psb_root_) + call psb_scatter(x_global, x_neighbor, desc_a, info, root=psb_root_) + call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_baseline, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_neighbor, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_persistent, desc_a, info, root=psb_root_) + if (info /= psb_success_) goto 9999 + + ! Baseline (isend/irecv) overlapped SpMV. + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x_baseline, beta, y_baseline, desc_a, info, doswap=.true.) + end do + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_baseline = tsum_baseline + dt + + ! Neighbor alltoallv overlapped SpMV. + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x_neighbor, beta, y_neighbor, desc_a, info, doswap=.true.) + end do + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor = tsum_neighbor + dt + + ! Persistent-neighbor overlapped SpMV. + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x_persistent, beta, y_persistent, desc_a, info, doswap=.true.) + end do + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_persistent = tsum_persistent + dt + + err_bn = maxval(abs(y_baseline%get_vect() - y_neighbor%get_vect())) + err_bp = maxval(abs(y_baseline%get_vect() - y_persistent%get_vect())) + call psb_amx(ctxt, err_bn) + call psb_amx(ctxt, err_bp) + + if (my_rank == 0) then + write(psb_out_unit,'(" Avg baseline time : ",es12.5)') tsum_baseline / real(times, psb_dpk_) + write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline + write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') tsum_neighbor / real(times, psb_dpk_) + write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor + write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') tsum_persistent / real(times, psb_dpk_) + write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_persistent + write(psb_out_unit,'(" Check baseline vs neighbor err = ",es12.5)') err_bn + write(psb_out_unit,'(" Check baseline vs persistent err = ",es12.5)') err_bp + if ((err_bn > tol) .or. (err_bp > tol)) then + write(psb_out_unit,'(" WARNING: mismatch exceeds tolerance ",es12.5)') tol + end if + end if + + call psb_gefree(x_baseline, desc_a, info) + call psb_gefree(x_neighbor, desc_a, info) + call psb_gefree(x_persistent, desc_a, info) + call psb_gefree(y_baseline, desc_a, info) + call psb_gefree(y_neighbor, desc_a, info) + call psb_gefree(y_persistent, desc_a, info) + call psb_spfree(a, desc_a, info) + call psb_cdfree(desc_a, info) + + if (my_rank == 0) then + deallocate(x_global) + deallocate(y_global) + end if + + return + +9999 call psb_error(ctxt) + call psb_error_handler(ctxt, err_act) + + end subroutine psb_spmv_overlap_kernel + + +end module psb_spmv_overlap_test diff --git a/test/comm/spmv/spmv_overlap.f90 b/test/comm/spmv/spmv_overlap.f90 new file mode 100644 index 000000000..5d42b4f35 --- /dev/null +++ b/test/comm/spmv/spmv_overlap.f90 @@ -0,0 +1,28 @@ +program main + use psb_spmv_overlap_test + use psb_base_mod + + implicit none + + integer(psb_ipk_) :: my_rank, np + integer(psb_ipk_) :: k, h + type(psb_ctxt_type) :: ctxt + + + + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the psb_spmv_overlap_test sample program' + end if + + call psb_barrier(ctxt) + + + call psb_spmv_overlap_kernel(ctxt) + + + call psb_exit(ctxt) +end program main diff --git a/test/comm/Makefile b/test/comm/swapdata/Makefile similarity index 100% rename from test/comm/Makefile rename to test/comm/swapdata/Makefile diff --git a/test/comm/swapdata/README.md b/test/comm/swapdata/README.md new file mode 100644 index 000000000..812105bc8 --- /dev/null +++ b/test/comm/swapdata/README.md @@ -0,0 +1,19 @@ +swapdata communication test +============================ + +This test was added after introducing different communication schemes in PSBLAS. + +It focuses on direct halo exchange through the `swapdata` path: + +- index list type: halo (`psb_comm_halo_`) +- exchange API: `psi_swapdata` +- phases: `start`, `wait`, and `sync` (depending on test section) + +Communication patterns exercised: + +- baseline point-to-point (`isend/irecv`) +- neighbor collective (`ineighbor_alltoallv`) +- persistent neighbor collective (`persistent_ineighbor_alltoallv`) + +This test validates the low-level communication behavior in isolation, without +the full SpMV overlap pipeline. diff --git a/test/comm/psb_comm_test.F90 b/test/comm/swapdata/psb_comm_test.F90 similarity index 100% rename from test/comm/psb_comm_test.F90 rename to test/comm/swapdata/psb_comm_test.F90 diff --git a/test/computational_routines/CMakeLists.txt b/test/computational_routines/CMakeLists.txt index f6ddb4a26..c0a147224 100644 --- a/test/computational_routines/CMakeLists.txt +++ b/test/computational_routines/CMakeLists.txt @@ -30,7 +30,7 @@ set(PSBLAS_LIBS psblas::util psblas::prec psblas::base) include(${CMAKE_CURRENT_LIST_DIR}/geaxpby/CMakeLists.txt) include(${CMAKE_CURRENT_LIST_DIR}/gedot/CMakeLists.txt) -include(${CMAKE_CURRENT_LIST_DIR}/spmm/CMakeLists.txt) + # Create executables add_executable(psb_geaxpby_test ${geaxpby_source_files}) @@ -42,6 +42,7 @@ target_link_libraries(psb_geaxpby_test ${PSBLAS_LIBS}) target_link_libraries(psb_gedot_test ${PSBLAS_LIBS}) target_link_libraries(psb_spmm_test ${PSBLAS_LIBS}) + # Set output directory set_target_properties(psb_geaxpby_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${EXEDIR} diff --git a/test/computational_routines/spmm/CMakeLists.txt b/test/computational_routines/spmm/CMakeLists.txt index 0147bc767..9d22913d8 100644 --- a/test/computational_routines/spmm/CMakeLists.txt +++ b/test/computational_routines/spmm/CMakeLists.txt @@ -6,3 +6,11 @@ foreach(file IN LISTS PSB_spmm_source_files) list(APPEND spmm_source_files ${CMAKE_CURRENT_LIST_DIR}/${file}) endforeach() +set(PSB_spmm_overlap_source_files + psb_spmm_overlap_test.f90 + spmm_overlap.f90 +) +foreach(file IN LISTS PSB_spmm_overlap_source_files) + list(APPEND spmm_overlap_source_files ${CMAKE_CURRENT_LIST_DIR}/${file}) +endforeach() + diff --git a/test/computational_routines/spmm/Makefile b/test/computational_routines/spmm/Makefile index 5f6ef2a0d..d6962c239 100644 --- a/test/computational_routines/spmm/Makefile +++ b/test/computational_routines/spmm/Makefile @@ -21,7 +21,7 @@ YELLOW=\033[33m END_COLOUR=\033[0m -all: runsd psb_spmm_test +all: runsd psb_spmm_test psb_spmm_overlap_test @printf "$(GREEN)[INFO]\tCompilation success!$(END_COLOUR)\n" runsd: @@ -36,7 +36,7 @@ psb_spmm_test: clean: @rm -f $(OBJS)\ - *$(.mod) $(EXEDIR)/psb_spmm_test + *$(.mod) $(EXEDIR)/psb_spmm_test $(EXEDIR)/psb_spmm_overlap_test .PHONY: all runsd clean diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index 46768538c..5b654754a 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -670,6 +670,8 @@ program psb_d_pde3d use psb_linsolve_mod use psb_util_mod use psb_d_pde3d_mod + use psb_comm_factory_mod + #if defined(PSB_OPENMP) use omp_lib #endif @@ -835,6 +837,14 @@ program psb_d_pde3d & err=err,itrace=itrace,& & istop=istopc) case('BICGSTAB','BICGSTABL','BICG','CG','CGS','FCG','GCR','RGMRES') + call psb_comm_init(psb_comm_persistent_ineighbor_alltoallv_,xxv%v%comm_handle,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='comm init' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + call psb_krylov(kmethd,a,prec,bv,xxv,eps,& & desc_a,info,itmax=itmax,iter=iter,err=err,itrace=itrace,& & istop=istopc,irst=irst) From d0baf9e9779fb348e6f79a46f97c527bb073024b Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 7 Apr 2026 16:23:00 +0200 Subject: [PATCH 152/175] Fix generation of psb_config.h with CMAKE --- CMakeLists.txt | 10 +++---- cmake/readPSBConst.cmake | 64 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 cmake/readPSBConst.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 86f810f89..90685757e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,12 +132,10 @@ include("${CMAKE_CURRENT_LIST_DIR}/cmake/CapitalizeString.cmake") message(STATUS "Using compiler ${CMAKE_C_COMPILER};") -# Define Major and Minor Version and Patch Level, String Version -set(PSBLASMAJOR "3") -set(PSBLASMINOR "9") -set(PSBLASPATCH "0") -set(PSBLASSTRING "\"3.9.0\"") - +# Find PSBLAS constants +include(${CMAKE_CURRENT_LIST_DIR}/cmake/readPSBConst.cmake) +_psb_read_const() +_psb_read_desc_const() # Set default values for IPK_SIZE and LPK_SIZE set(DEFAULT_IPK_SIZE 4) diff --git a/cmake/readPSBConst.cmake b/cmake/readPSBConst.cmake new file mode 100644 index 000000000..207c60da6 --- /dev/null +++ b/cmake/readPSBConst.cmake @@ -0,0 +1,64 @@ + +macro(_psb_read_const) +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/base/modules/psb_const_mod.F90" _psb_const_mod) +string(REGEX MATCH "psb_version_major_[ \t]+=[ \t]+([0-9]+)" _psb_version_major_match "${_psb_const_mod}") +set(PSBLASMAJOR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_version_minor_[ \t]+=[ \t]+([0-9]+)" _psb_version_minor_match "${_psb_const_mod}") +set(PSBLASMINOR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_patchlevel_[ \t]+=[ \t]+([0-9]+)" _psb_patchlevel_match "${_psb_const_mod}") +set(PSBLASPATCH "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_version_string_[ \t]+=[ \t]+([^ \t]+)" _psb_version_string_match "${_psb_const_mod}") +set(PSBLASSTRING "${CMAKE_MATCH_1}") + +string(REGEX MATCH "psb_dupl_null_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_null_match "${_psb_const_mod}") +set(PSBLASDUPNUL "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_dupl_add_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_add_match "${_psb_const_mod}") +set(PSBLASDUPADD "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_dupl_err_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_err_match "${_psb_const_mod}") +set(PSBLASDUPERR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_dupl_def_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_def_match "${_psb_const_mod}") +set(PSBLASDUPDEF "${CMAKE_MATCH_1}") + +string(REGEX MATCH "psb_upd_srch_[ \t]+=[ \t]+([0-9]+)" _psb_upd_srch_match "${_psb_const_mod}") +set(PSBLASUPDSRC "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_upd_perm_[ \t]+=[ \t]+([0-9]+)" _psb_upd_perm_match "${_psb_const_mod}") +set(PSBLASUPDPRM "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_upd_dflt_[ \t]+=[ \t]+([0-9]+)" _psb_upd_dflt_match "${_psb_const_mod}") +set(PSBLASUPDDEF "${CMAKE_MATCH_1}") + +string(REGEX MATCH "psb_matbld_noremote_[ \t]+=[ \t]+([0-9]+)" _psb_matbld_noremote_match "${_psb_const_mod}") +set(PSBLASBLDNOR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_matbld_remote_[ \t]+=[ \t]+([0-9]+)" _psb_matbld_remote_match "${_psb_const_mod}") +set(PSBLASBLDRMT "${CMAKE_MATCH_1}") +endmacro(_psb_read_const) + +macro(_psb_read_desc_const) +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/base/modules/desc/psb_desc_const_mod.f90" _psb_const_mod) + +string(REGEX MATCH "psb_swap_send_[ \t]+=[ \t]+([0-9]+)" _psb_swap_send_match "${_psb_const_mod}") +set(PSBSWPSND "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_swap_recv_[ \t]+=[ \t]+([0-9]+)" _psb_swap_recv_match "${_psb_const_mod}") +set(PSBSWPRCV "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_swap_sync_[ \t]+=[ \t]+([0-9]+)" _psb_swap_sync_match "${_psb_const_mod}") +set(PSBSWPSYN "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_swap_mpi_[ \t]+=[ \t]+([0-9]+)" _psb_swap_mpi_match "${_psb_const_mod}") +set(PSBSWPMPI "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_collective_start_[ \t]+=[ \t]+([0-9]+)" _psb_collective_start_match "${_psb_const_mod}") +set(PSBCLCSTR "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_collective_end_[ \t]+=[ \t]+([0-9]+)" _psb_collective_end_match "${_psb_const_mod}") +set(PSBCLCEND "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_collective_sync_[ \t]+=[ \t]+([0-9]+)" _psb_collective_sync_match "${_psb_const_mod}") +set(PSBCLCSYN "${CMAKE_MATCH_1}") + +string(REGEX MATCH "psb_none_[ \t]+=[ \t]+([0-9]+)" _psb_none_match "${_psb_const_mod}") +set(PSBNONE "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_sum_[ \t]+=[ \t]+([0-9]+)" _psb_sum_match "${_psb_const_mod}") +set(PSBSUM "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_avg_[ \t]+=[ \t]+([0-9]+)" _psb_avg_match "${_psb_const_mod}") +set(PSBAVG "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_square_root_[ \t]+=[ \t]+([0-9]+)" _psb_square_root_match "${_psb_const_mod}") +set(PSBSQRT "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_setzero_[ \t]+=[ \t]+([0-9]+)" _psb_setzero_match "${_psb_const_mod}") +set(PSBSETZ "${CMAKE_MATCH_1}") + +endmacro(_psb_read_desc_const) From 70d43a9487059ab37cf51ed2c5cf98e97045d51a Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 8 Apr 2026 09:47:14 +0200 Subject: [PATCH 153/175] Fix string defaults parsing in cmake --- cmake/readPSBConst.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/readPSBConst.cmake b/cmake/readPSBConst.cmake index 207c60da6..47a28f69b 100644 --- a/cmake/readPSBConst.cmake +++ b/cmake/readPSBConst.cmake @@ -16,15 +16,19 @@ string(REGEX MATCH "psb_dupl_add_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_add_match "${_ set(PSBLASDUPADD "${CMAKE_MATCH_1}") string(REGEX MATCH "psb_dupl_err_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_err_match "${_psb_const_mod}") set(PSBLASDUPERR "${CMAKE_MATCH_1}") -string(REGEX MATCH "psb_dupl_def_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_def_match "${_psb_const_mod}") +string(REGEX MATCH "psb_dupl_ovwrt_[ \t]+=[ \t]+([0-9]+)" _psb_dupl_ovw_match "${_psb_const_mod}") +set(PSBLASDUPOVW "${CMAKE_MATCH_1}") +string(REGEX MATCH "psb_dupl_def_[ \t]+=[ \t]+([^ \t]+)_" _psb_dupl_def_match "${_psb_const_mod}") set(PSBLASDUPDEF "${CMAKE_MATCH_1}") +string(TOUPPER ${PSBLASDUPDEF} PSBLASDUPDEF) string(REGEX MATCH "psb_upd_srch_[ \t]+=[ \t]+([0-9]+)" _psb_upd_srch_match "${_psb_const_mod}") set(PSBLASUPDSRC "${CMAKE_MATCH_1}") string(REGEX MATCH "psb_upd_perm_[ \t]+=[ \t]+([0-9]+)" _psb_upd_perm_match "${_psb_const_mod}") set(PSBLASUPDPRM "${CMAKE_MATCH_1}") -string(REGEX MATCH "psb_upd_dflt_[ \t]+=[ \t]+([0-9]+)" _psb_upd_dflt_match "${_psb_const_mod}") +string(REGEX MATCH "psb_upd_dflt_[ \t]+=[ \t]+([^ \t]+)_" _psb_upd_dflt_match "${_psb_const_mod}") set(PSBLASUPDDEF "${CMAKE_MATCH_1}") +string(TOUPPER ${PSBLASUPDDEF} PSBLASUPDDEF) string(REGEX MATCH "psb_matbld_noremote_[ \t]+=[ \t]+([0-9]+)" _psb_matbld_noremote_match "${_psb_const_mod}") set(PSBLASBLDNOR "${CMAKE_MATCH_1}") From 6b803fd75919451b7312fb365f29954dd78ec512 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Thu, 9 Apr 2026 14:54:14 +0200 Subject: [PATCH 154/175] [UPDATE] Updated buffer reuse in psb_dcg --- base/comm/internals/psi_dswapdata.F90 | 75 +- base/comm/internals/psi_dswaptran.F90 | 4 +- .../comm_schemes/psb_comm_factory_mod.F90 | 23 +- .../psb_comm_neighbor_impl_mod.F90 | 5 + .../comm_schemes/psb_comm_schemes_mod.F90 | 6 +- base/modules/serial/psb_d_base_vect_mod.F90 | 21 +- linsolve/impl/psb_dcg.F90 | 14 + log.txt | 1824 ----------------- test/comm/cg/psb_comm_cg_test.F90 | 249 ++- test/comm/spmv/psb_spmv_overlap_test.f90 | 8 +- test/comm/swapdata/psb_comm_test.F90 | 16 +- test/pdegen/psb_d_pde3d.F90 | 2 +- test/pdegen/runs/psb_pde3d.inp | 2 +- 13 files changed, 301 insertions(+), 1948 deletions(-) delete mode 100644 log.txt diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index ef135ba9e..582e2ef45 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -159,7 +159,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -338,6 +338,16 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -441,6 +451,17 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ + if ((idx_pt < 1) .or. (nerv < 0) .or. (idx_pt+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+nerv-1) call y%sct(rcv_pt,nerv,comm_indexes,beta) @@ -547,6 +568,13 @@ contains ! --------------------------------------------------------- if (do_start) then if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (neighbor_comm_handle%use_persistent_buffers) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + end if if (.not. neighbor_comm_handle%is_initialized) then if (debug) write(*,*) me,' nbr_vect: building topology via handle' call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) @@ -571,6 +599,7 @@ contains end if neighbor_comm_handle%persistent_request = mpi_request_null neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if call y%new_buffer(buffer_size, info) @@ -635,6 +664,7 @@ contains call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + neighbor_comm_handle%persistent_in_flight = .true. #else call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer @@ -652,6 +682,7 @@ contains call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + neighbor_comm_handle%persistent_in_flight = .true. #endif else ! Post non-blocking neighborhood alltoallv @@ -682,19 +713,11 @@ contains if (do_wait) then if (neighbor_comm_handle%use_persistent_buffers) then -#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - if (.not. neighbor_comm_handle%persistent_request_ready) then + if (.not. neighbor_comm_handle%persistent_in_flight) then info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') goto 9999 end if -#else - if (neighbor_comm_handle%comm_request == mpi_request_null) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 - end if -#endif else if (neighbor_comm_handle%comm_request == mpi_request_null) then write(psb_err_unit,*) me, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & @@ -724,6 +747,9 @@ contains call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + if (neighbor_comm_handle%use_persistent_buffers) then + neighbor_comm_handle%persistent_in_flight = .false. + end if ! Scatter received data to local vector positions (polymorphic for GPU) if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' @@ -834,7 +860,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -1202,6 +1228,13 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in ! --------------------------------------------------------- if (do_start) then if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (neighbor_comm_handle%use_persistent_buffers) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + end if if (.not. neighbor_comm_handle%is_initialized) then if (debug) write(*,*) me,' nbr_vect: building topology via handle' call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & @@ -1227,6 +1260,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in end if neighbor_comm_handle%persistent_request = mpi_request_null neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if call y%new_buffer(buffer_size, info) @@ -1290,6 +1324,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + neighbor_comm_handle%persistent_in_flight = .true. #else call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer @@ -1307,6 +1342,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + neighbor_comm_handle%persistent_in_flight = .true. #endif else ! Post non-blocking neighborhood alltoallv @@ -1337,19 +1373,11 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in if (do_wait) then if (neighbor_comm_handle%use_persistent_buffers) then -#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - if (.not. neighbor_comm_handle%persistent_request_ready) then + if (.not. neighbor_comm_handle%persistent_in_flight) then info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 - end if -#else - if (neighbor_comm_handle%comm_request == mpi_request_null) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') goto 9999 end if -#endif else if (neighbor_comm_handle%comm_request == mpi_request_null) then info = psb_err_mpi_error_ @@ -1377,6 +1405,9 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + if (neighbor_comm_handle%use_persistent_buffers) then + neighbor_comm_handle%persistent_in_flight = .false. + end if ! Scatter received data to local vector positions (polymorphic for GPU) if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index 821aa6f35..135e5f493 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -160,7 +160,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -741,7 +741,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 index 846aaec53..03c12e72d 100644 --- a/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 @@ -11,7 +11,7 @@ module psb_comm_factory_mod contains ! Allocatable-based factory routines (preferred names) - subroutine psb_comm_init(comm_type, handle, info) + subroutine psb_comm_set(comm_type, handle, info) implicit none integer(psb_ipk_), intent(in) :: comm_type class(psb_comm_handle_type), allocatable, intent(inout) :: handle @@ -68,7 +68,7 @@ contains handle%id = old_id handle%swap_status = old_swap_status end select - end subroutine psb_comm_init + end subroutine psb_comm_set subroutine psb_comm_free(handle, info) implicit none @@ -83,25 +83,6 @@ contains end if end subroutine psb_comm_free - - ! Allocatable-based factory routines - subroutine psb_comm_create(comm_type, handle, info) - implicit none - integer(psb_ipk_), intent(in) :: comm_type - class(psb_comm_handle_type), allocatable, intent(inout) :: handle - integer(psb_ipk_), intent(out) :: info - - call psb_comm_init(comm_type, handle, info) - end subroutine psb_comm_create - - subroutine psb_comm_destroy(handle, info) - implicit none - class(psb_comm_handle_type), allocatable, intent(inout) :: handle - integer(psb_ipk_), intent(out) :: info - - call psb_comm_free(handle, info) - end subroutine psb_comm_destroy - subroutine psb_comm_set_swap_status(handle, flag, info) implicit none class(psb_comm_handle_type), allocatable, intent(inout) :: handle diff --git a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 index a4e8423df..742dc89c4 100644 --- a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 @@ -28,6 +28,7 @@ module psb_comm_neighbor_impl_mod integer(psb_mpk_) :: comm_request = mpi_request_null integer(psb_mpk_) :: persistent_request = mpi_request_null logical :: persistent_request_ready = .false. + logical :: persistent_in_flight = .false. integer(psb_ipk_) :: persistent_buffer_size = 0 contains procedure, pass :: init => psb_comm_neighbor_init @@ -316,6 +317,7 @@ contains end if this%persistent_request = mpi_request_null this%persistent_request_ready = .false. + this%persistent_in_flight = .false. this%persistent_buffer_size = 0 end if @@ -372,6 +374,7 @@ contains this%id = 0 this%swap_status = 0 this%comm_request = mpi_request_null + this%persistent_in_flight = .false. this%persistent_request = mpi_request_null this%persistent_request_ready = .false. this%persistent_buffer_size = 0 @@ -388,6 +391,7 @@ contains this%comm_request = mpi_request_null this%persistent_request = mpi_request_null this%persistent_request_ready = .false. + this%persistent_in_flight = .false. this%persistent_buffer_size = 0 call this%free(info) end subroutine psb_comm_neighbor_destroy @@ -424,6 +428,7 @@ contains this%comm_request = mpi_request_null this%persistent_request = mpi_request_null this%persistent_request_ready = .false. + this%persistent_in_flight = .false. this%persistent_buffer_size = 0 end subroutine psb_comm_neighbor_init diff --git a/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 index e894ba766..1340f73c4 100644 --- a/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 @@ -21,15 +21,13 @@ module psb_comm_schemes_mod end enum - ! (abstract interfaces moved below type definition) - ! --- comm handle type --- type, abstract :: psb_comm_handle_type integer(psb_ipk_) :: id = -1 integer(psb_ipk_) :: comm_type = psb_comm_unknown_ integer(psb_ipk_) :: swap_status = psb_comm_status_unknown_ contains - procedure(psb_comm_init), deferred :: init + procedure(psb_comm_set), deferred :: init procedure(psb_comm_free), deferred :: free procedure(psb_comm_set_swap_status), deferred :: set_swap_status procedure(psb_comm_get_swap_status), deferred :: get_swap_status @@ -37,7 +35,7 @@ module psb_comm_schemes_mod ! --- abstract interfaces --- abstract interface - subroutine psb_comm_init(this, info) + subroutine psb_comm_set(this, info) import :: psb_ipk_, psb_comm_handle_type class(psb_comm_handle_type), intent(inout) :: this integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 1e2706442..8a303ba95 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -50,7 +50,7 @@ module psb_d_base_vect_mod use psb_i_base_vect_mod use psb_l_base_vect_mod use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_unknown_ - use psb_comm_factory_mod, only: psb_comm_init, psb_comm_free + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free !> \namespace psb_base_mod \class psb_d_base_vect_type @@ -176,13 +176,6 @@ module psb_d_base_vect_mod procedure, pass(x) :: check_addr => d_base_check_addr - ! Communication lifecycle split: - ! - `create_comm`: allocate/select a fresh handle implementation via factory. - ! - `init_comm`: configure the current handle instance from an existing one - ! (e.g., copy `id` and swap status), and reset buffers; - ! it recreates the handle only if missing or scheme changes. - ! - `destroy_comm`/`free_comm`: release current handle resources. - ! ! Dot product and AXPBY @@ -414,7 +407,7 @@ contains end if if (info == psb_success_) then if (.not. allocated(x%comm_handle)) then - call psb_comm_init(psb_comm_isend_irecv_, x%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, x%comm_handle, info) end if end if @@ -436,7 +429,7 @@ contains allocate(psb_d_base_vect_type :: y, stat=info) if (info == psb_success_) then - call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) end if end subroutine d_base_mold @@ -464,7 +457,7 @@ contains end if if (info == psb_success_) then if (.not. allocated(x%comm_handle)) then - call psb_comm_init(psb_comm_isend_irecv_, x%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, x%comm_handle, info) end if end if @@ -1114,7 +1107,7 @@ contains call y%set_ncfs(x%get_ncfs()) if (allocated(x%iv)) y%iv = x%iv if (allocated(x%comm_handle)) then - call psb_comm_init(x%comm_handle%comm_type, y%comm_handle, info) + call psb_comm_set(x%comm_handle%comm_type, y%comm_handle, info) if (info /= psb_success_) return y%comm_handle%id = x%comm_handle%id call x%comm_handle%get_swap_status(swap_status, info) @@ -1122,7 +1115,7 @@ contains call y%comm_handle%set_swap_status(swap_status, info) if (info /= psb_success_) return else - call psb_comm_init(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) end if end subroutine d_base_cpy @@ -2409,7 +2402,7 @@ contains end if if (need_new_handle) then - call psb_comm_init(comm_type, x%comm_handle, info) + call psb_comm_set(comm_type, x%comm_handle, info) if (info /= psb_success_) return end if diff --git a/linsolve/impl/psb_dcg.F90 b/linsolve/impl/psb_dcg.F90 index 63914940e..5636b19e8 100644 --- a/linsolve/impl/psb_dcg.F90 +++ b/linsolve/impl/psb_dcg.F90 @@ -120,6 +120,7 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& real(psb_dpk_) :: alpha, beta, rho, rho_old, sigma,alpha_old,beta_old integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,err_act, ieg,nspl, istebz + integer(psb_ipk_) :: i, swap_status integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt @@ -173,6 +174,19 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) + if ((info == psb_success_).and.allocated(x%v%comm_handle)) then + do i=1,size(wwrk) + if (allocated(wwrk(i)%v)) then + call psb_comm_set(x%v%comm_handle%comm_type,wwrk(i)%v%comm_handle,info) + if (info /= psb_success_) exit + wwrk(i)%v%comm_handle%id = x%v%comm_handle%id + call x%v%comm_handle%get_swap_status(swap_status,info) + if (info /= psb_success_) exit + call wwrk(i)%v%comm_handle%set_swap_status(swap_status,info) + if (info /= psb_success_) exit + end if + end do + end if if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/log.txt b/log.txt deleted file mode 100644 index 416ddb683..000000000 --- a/log.txt +++ /dev/null @@ -1,1824 +0,0 @@ -(if test ! -d lib ; then mkdir lib; fi) -make -C base mods -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " -(if test ! -d include ; then mkdir include; fi; /usr/bin/install -c -p -m 644 Make.inc include/Make.inc.psblas) -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_const_mod.F90 -o psb_const_mod.o -(if test ! -d modules ; then mkdir modules; fi;) -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cbind_const_mod.F90 -o psb_cbind_const_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_mod.F90 -o psb_error_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_string_mod.f90 -o auxil/psb_string_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_m_serial_mod.f90 -o auxil/psi_m_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_e_serial_mod.f90 -o auxil/psi_e_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_s_serial_mod.f90 -o auxil/psi_s_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_d_serial_mod.f90 -o auxil/psi_d_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_c_serial_mod.f90 -o auxil/psi_c_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_z_serial_mod.f90 -o auxil/psi_z_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_acx_mod.f90 -o auxil/psi_acx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_alcx_mod.f90 -o auxil/psi_alcx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_lcx_mod.f90 -o auxil/psi_lcx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/comm_schemes/psb_comm_schemes_mod.F90 -o comm/comm_schemes/psb_comm_schemes_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/comm_schemes/psb_comm_baseline_mod.F90 -o comm/comm_schemes/psb_comm_baseline_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_realloc_mod.F90 -o auxil/psb_m_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_realloc_mod.F90 -o auxil/psb_e_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_realloc_mod.F90 -o auxil/psb_s_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_realloc_mod.F90 -o auxil/psb_d_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_realloc_mod.F90 -o auxil/psb_c_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_realloc_mod.F90 -o auxil/psb_z_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_realloc_mod.F90 -o psb_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_serial_mod.f90 -o auxil/psi_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c desc/psb_desc_const_mod.f90 -o desc/psb_desc_const_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_hsort_mod.f90 -o auxil/psb_m_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_isort_mod.f90 -o auxil/psb_m_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_msort_mod.f90 -o auxil/psb_m_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_qsort_mod.f90 -o auxil/psb_m_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_hsort_mod.f90 -o auxil/psb_e_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_isort_mod.f90 -o auxil/psb_e_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_msort_mod.f90 -o auxil/psb_e_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_qsort_mod.f90 -o auxil/psb_e_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_mod.f90 -o auxil/psb_s_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_isort_mod.f90 -o auxil/psb_s_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_msort_mod.f90 -o auxil/psb_s_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_qsort_mod.f90 -o auxil/psb_s_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_mod.f90 -o auxil/psb_d_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_isort_mod.f90 -o auxil/psb_d_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_msort_mod.f90 -o auxil/psb_d_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_qsort_mod.f90 -o auxil/psb_d_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_mod.f90 -o auxil/psb_c_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_isort_mod.f90 -o auxil/psb_c_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_msort_mod.f90 -o auxil/psb_c_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_qsort_mod.f90 -o auxil/psb_c_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_mod.f90 -o auxil/psb_z_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_isort_mod.f90 -o auxil/psb_z_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_msort_mod.f90 -o auxil/psb_z_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_qsort_mod.f90 -o auxil/psb_z_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_i_hsort_x_mod.f90 -o auxil/psb_i_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_l_hsort_x_mod.f90 -o auxil/psb_l_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_x_mod.f90 -o auxil/psb_s_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_ip_reord_mod.F90 -o auxil/psb_m_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_ip_reord_mod.F90 -o auxil/psb_e_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_ip_reord_mod.F90 -o auxil/psb_s_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_ip_reord_mod.F90 -o auxil/psb_d_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_ip_reord_mod.F90 -o auxil/psb_c_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_ip_reord_mod.F90 -o auxil/psb_z_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_mod.F90 -o desc/psb_hash_mod.o -mpicc -g -O3 -I. -c desc/psb_hashval.c -o desc/psb_hashval.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 -o comm/comm_schemes/psb_comm_neighbor_impl_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/psb_neighbor_topology_mod.F90 -o comm/psb_neighbor_topology_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_base_mat_mod.F90 -o serial/psb_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_x_mod.f90 -o auxil/psb_d_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_x_mod.f90 -o auxil/psb_c_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_x_mod.f90 -o auxil/psb_z_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_ip_reord_mod.F90 -o auxil/psb_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_sort_mod.f90 -o auxil/psb_sort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_base_vect_mod.F90 -o serial/psb_i_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/comm_schemes/psb_comm_factory_mod.F90 -o comm/comm_schemes/psb_comm_factory_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_vect_mod.F90 -o serial/psb_i_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_base_vect_mod.F90 -o serial/psb_l_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_vect_mod.F90 -o serial/psb_l_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_vect_mod.F90 -o serial/psb_d_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_vect_mod.F90 -o serial/psb_s_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_vect_mod.F90 -o serial/psb_c_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_vect_mod.F90 -o serial/psb_z_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_vect_mod.F90 -o serial/psb_z_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_mat_mod.F90 -o serial/psb_z_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_vect_mod.F90 -o serial/psb_d_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_mat_mod.F90 -o serial/psb_d_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csr_mat_mod.f90 -o serial/psb_z_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csc_mat_mod.f90 -o serial/psb_z_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_vect_mod.F90 -o serial/psb_s_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_mat_mod.F90 -o serial/psb_s_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csr_mat_mod.f90 -o serial/psb_d_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csc_mat_mod.f90 -o serial/psb_d_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_vect_mod.F90 -o serial/psb_c_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_mat_mod.F90 -o serial/psb_c_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_rb_idx_tree_mod.f90 -o auxil/psb_z_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csr_mat_mod.f90 -o serial/psb_s_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csc_mat_mod.f90 -o serial/psb_s_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_rb_idx_tree_mod.f90 -o auxil/psb_d_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csr_mat_mod.f90 -o serial/psb_c_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csc_mat_mod.f90 -o serial/psb_c_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_rb_idx_tree_mod.f90 -o auxil/psb_s_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_mat_mod.F90 -o serial/psb_z_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_rb_idx_tree_mod.f90 -o auxil/psb_c_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_mat_mod.F90 -o serial/psb_d_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_rb_idx_tree_mod.f90 -o auxil/psb_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_mat_mod.F90 -o serial/psb_s_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_vect_mod.f90 -o serial/psb_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_mat_mod.F90 -o serial/psb_c_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_mat_mod.f90 -o serial/psb_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_serial_mod.f90 -o serial/psb_s_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_serial_mod.f90 -o serial/psb_d_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_serial_mod.f90 -o serial/psb_c_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_serial_mod.f90 -o serial/psb_z_serial_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_penv_mod.F90 -o penv/psi_penv_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_p2p_mod.F90 -o penv/psi_i2_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_p2p_mod.F90 -o penv/psi_m_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_p2p_mod.F90 -o penv/psi_e_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_p2p_mod.F90 -o penv/psi_s_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_p2p_mod.F90 -o penv/psi_d_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_p2p_mod.F90 -o penv/psi_c_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_p2p_mod.F90 -o penv/psi_z_p2p_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_p2p_mod.F90 -o penv/psi_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_collective_mod.F90 -o penv/psi_i2_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_collective_mod.F90 -o penv/psi_e_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_collective_mod.F90 -o penv/psi_m_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_collective_mod.F90 -o penv/psi_s_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_collective_mod.F90 -o penv/psi_d_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_collective_mod.F90 -o penv/psi_c_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_collective_mod.F90 -o penv/psi_z_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_serial_mod.f90 -o serial/psb_serial_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_collective_mod.F90 -o penv/psi_collective_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c psb_penv_mod.F90 -o psb_penv_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_indx_map_mod.F90 -o desc/psb_indx_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_timers_mod.f90 -o psb_timers_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_impl.F90 -o psb_error_impl.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_map_mod.F90 -o desc/psb_hash_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_list_map_mod.F90 -o desc/psb_list_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_repl_map_mod.F90 -o desc/psb_repl_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_gen_block_map_mod.F90 -o desc/psb_gen_block_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_glist_map_mod.F90 -o desc/psb_glist_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_desc_mod.F90 -o desc/psb_desc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_e_comm_a_mod.f90 -o comm/psi_e_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_m_comm_a_mod.f90 -o comm/psi_m_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_a_mod.f90 -o comm/psi_s_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_a_mod.f90 -o comm/psi_d_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_a_mod.f90 -o comm/psi_c_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_a_mod.f90 -o comm/psi_z_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i_comm_mod.f90 -o comm/psb_i_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_l_comm_mod.f90 -o comm/psb_l_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_mod.f90 -o comm/psb_s_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_mod.f90 -o comm/psb_d_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_mod.f90 -o comm/psb_c_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_mod.f90 -o comm/psb_z_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i2_comm_a_mod.f90 -o comm/psb_i2_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_m_comm_a_mod.f90 -o comm/psb_m_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_e_comm_a_mod.f90 -o comm/psb_e_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_a_mod.f90 -o comm/psb_s_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_a_mod.f90 -o comm/psb_d_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_a_mod.f90 -o comm/psb_c_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_a_mod.f90 -o comm/psb_z_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_s_psblas_mod.F90 -o psblas/psb_s_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_c_psblas_mod.F90 -o psblas/psb_c_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_d_psblas_mod.F90 -o psblas/psb_d_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_z_psblas_mod.F90 -o psblas/psb_z_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_check_mod.f90 -o psb_check_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_v_mod.f90 -o comm/psi_s_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_v_mod.f90 -o comm/psi_c_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_v_mod.f90 -o comm/psi_z_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_v_mod.f90 -o comm/psi_d_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_i_comm_v_mod.f90 -o comm/psi_i_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_l_comm_v_mod.f90 -o comm/psi_l_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_mod.F90 -o psi_s_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_i_mod.F90 -o psi_i_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_mod.F90 -o psi_z_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_mod.F90 -o psi_c_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_mod.F90 -o psi_d_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_l_mod.F90 -o psi_l_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psblas/psb_psblas_mod.f90 -o psblas/psb_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psi_mod.f90 -o psi_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_comm_mod.f90 -o comm/psb_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_cd_tools_mod.F90 -o tools/psb_cd_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_m_tools_a_mod.f90 -o tools/psb_m_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_e_tools_a_mod.f90 -o tools/psb_e_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_s_tools_mod.F90 -o tools/psb_s_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_d_tools_mod.F90 -o tools/psb_d_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_c_tools_mod.F90 -o tools/psb_c_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_z_tools_mod.F90 -o tools/psb_z_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_s_tools_a_mod.f90 -o tools/psb_s_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_d_tools_a_mod.f90 -o tools/psb_d_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_c_tools_a_mod.f90 -o tools/psb_c_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_z_tools_a_mod.f90 -o tools/psb_z_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_i_tools_mod.F90 -o tools/psb_i_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_l_tools_mod.F90 -o tools/psb_l_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_tools_mod.f90 -o tools/psb_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_base_linmap_mod.f90 -o comm/psb_base_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_linmap_mod.f90 -o comm/psb_s_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_linmap_mod.f90 -o comm/psb_d_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_linmap_mod.f90 -o comm/psb_c_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_linmap_mod.f90 -o comm/psb_z_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_linmap_mod.f90 -o comm/psb_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c error.f90 -o error.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_base_mod.f90 -o psb_base_mod.o -mpicc -g -O3 -I. -c cutil.c -o cutil.o -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C util mods -make -C prec mods -make -C ext mods -make -C base objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_blockpart_mod.f90 -o psb_blockpart_mod.o -mpicc -g -O3 -I. -I../include -c psb_metis_int.c -o psb_metis_int.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_const_mod.f90 -o psb_prec_const_mod.o -make -C modules objs F90="" F90COPT=" " -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_ell_mat_mod.f90 -o psb_d_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_partidx_mod.F90 -o psb_partidx_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_tools_mod.f90 -o psb_c_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_i_ext_util_mod.f90 -o psi_i_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_hbio_mod.f90 -o psb_hbio_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_tools_mod.f90 -o psb_d_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_s_ext_util_mod.f90 -o psi_s_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mmio_mod.F90 -o psb_mmio_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_c_ext_util_mod.f90 -o psi_c_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_tools_mod.f90 -o psb_s_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_mod.f90 -o psb_s_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_d_ext_util_mod.f90 -o psi_d_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_mod.f90 -o psb_d_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_tools_mod.f90 -o psb_z_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_z_ext_util_mod.f90 -o psi_z_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_mod.f90 -o psb_c_mat_dist_mod.o -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_mod.f90 -o psb_z_mat_dist_mod.o -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_base_mat_impl.f90 -o psb_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_ell_mat_mod.f90 -o psb_s_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_renum_mod.f90 -o psb_s_renum_mod.o -make -C sort objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_hsort_impl.f90 -o psb_s_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_isort_impl.f90 -o psb_s_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_msort_impl.f90 -o psb_s_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_qsort_impl.f90 -o psb_s_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_hsort_impl.f90 -o psb_d_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_isort_impl.f90 -o psb_d_isort_impl.o -make -C comm objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata.F90 -o psi_dswapdata.o -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter.F90 -o psb_dscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather.f90 -o psb_dgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csc_impl.F90 -o psb_s_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_mat_impl.F90 -o psb_s_mat_impl.o -make -C auxil objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_desc_index.F90 -o psi_desc_index.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_msort_impl.f90 -o psb_d_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_renum_mod.f90 -o psb_d_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_base_prec_mod.f90 -o psb_s_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_fnd_owner.F90 -o psi_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_ell_mat_mod.f90 -o psb_c_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_qsort_impl.f90 -o psb_d_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter.F90 -o psb_zscatter.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_ell_mat_mod.f90 -o psb_z_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dns_mat_mod.f90 -o psb_s_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dns_mat_mod.f90 -o psb_d_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_iscatter.F90 -o psb_iscatter.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dns_mat_mod.f90 -o psb_c_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_hsort_impl.f90 -o psb_c_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dns_mat_mod.f90 -o psb_z_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_ext_util_mod.f90 -o psi_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_lscatter.F90 -o psb_lscatter.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_isort_impl.f90 -o psb_c_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather.f90 -o psb_sgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran.F90 -o psi_dswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_base_prec_mod.f90 -o psb_d_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_msort_impl.f90 -o psb_c_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_base_prec_mod.f90 -o psb_c_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_qsort_impl.f90 -o psb_c_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter.F90 -o psb_cscatter.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hll_mat_mod.f90 -o psb_d_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter.F90 -o psb_sscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_a2a_fnd_owner.F90 -o psi_a2a_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hll_mat_mod.f90 -o psb_s_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_hsort_impl.f90 -o psb_z_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hll_mat_mod.f90 -o psb_c_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hll_mat_mod.f90 -o psb_z_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_isort_impl.f90 -o psb_z_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_restr.f90 -o psi_iovrl_restr.o -make -C psblas objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddot.f90 -o psb_ddot.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata.F90 -o psi_sswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax.f90 -o psb_damax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter_a.F90 -o psb_dscatter_a.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dia_mat_mod.f90 -o psb_d_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hdia_mat_mod.f90 -o psb_d_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_msort_impl.f90 -o psb_z_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_bnd_elem.f90 -o psi_crea_bnd_elem.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dia_mat_mod.f90 -o psb_s_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hdia_mat_mod.f90 -o psb_s_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dia_mat_mod.f90 -o psb_c_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_qsort_impl.f90 -o psb_z_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum.f90 -o psb_dasum.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hdia_mat_mod.f90 -o psb_c_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dia_mat_mod.f90 -o psb_z_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_igather.f90 -o psb_igather.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hdia_mat_mod.f90 -o psb_z_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ext_mod.F90 -o psb_ext_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_hsort_impl.f90 -o psb_m_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_renum_mod.f90 -o psb_c_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_isort_impl.f90 -o psb_m_isort_impl.o -make -C tools objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_icdasb.F90 -o psb_icdasb.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_msort_impl.f90 -o psb_m_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran.F90 -o psi_sswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_graph_fnd_owner.F90 -o psi_graph_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_base_prec_mod.f90 -o psb_z_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_qsort_impl.f90 -o psb_m_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_hsort_impl.f90 -o psb_e_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter_a.F90 -o psb_zscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_rb_idx_tree_impl.F90 -o psb_s_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csr_impl.F90 -o psb_d_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_isort_impl.f90 -o psb_e_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_msort_impl.f90 -o psb_e_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_coo_impl.F90 -o psb_d_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csc_impl.F90 -o psb_d_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_mat_impl.F90 -o psb_d_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_rb_idx_tree_impl.F90 -o psb_d_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_renum_mod.f90 -o psb_z_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssphalo.F90 -o psb_ssphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_index.f90 -o psi_crea_index.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ilu_fact_mod.f90 -o psb_d_ilu_fact_mod.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_ainv_tools_mod.f90 -o psb_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mscatter_a.F90 -o psb_mscatter_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ilu_fact_mod.f90 -o psb_s_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswapdata.F90 -o psi_iswapdata.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_save.f90 -o psi_iovrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lsame.f90 -o psb_lsame.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csr_impl.F90 -o psb_c_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_fact_mod.f90 -o psb_s_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdall.f90 -o psb_cdall.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdals.f90 -o psb_cdals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_escatter_a.F90 -o psb_escatter_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdalv.f90 -o psb_cdalv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_inloc.f90 -o psb_cd_inloc.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ilu_fact_mod.f90 -o psb_c_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_fact_mod.f90 -o psb_c_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswaptran.F90 -o psi_iswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ilu_fact_mod.f90 -o psb_z_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter_a.F90 -o psb_cscatter_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter_a.F90 -o psb_sscatter_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdins.F90 -o psb_cdins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_m_serial_impl.F90 -o psi_m_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_e_serial_impl.F90 -o psi_e_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsphalo.F90 -o psb_dsphalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_serial_impl.F90 -o psi_s_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspgather.F90 -o psb_dspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_fact_mod.f90 -o psb_z_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daxpby.f90 -o psb_daxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ihalo.f90 -o psb_ihalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdprt.f90 -o psb_cdprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrm2.f90 -o psb_dnrm2.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrmi.f90 -o psb_dnrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invk_fact_mod.f90 -o psb_z_invk_fact_mod.o -/bin/cp -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o -make -C ext objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_from_coo.f90 -o psb_s_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invt_fact_mod.f90 -o psb_z_invt_fact_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_to_coo.f90 -o psb_s_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata.F90 -o psi_cswapdata.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_coo.f90 -o psb_s_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_coo_impl.F90 -o psb_c_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csphalo.F90 -o psb_csphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_biconjg_mod.F90 -o psb_c_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_biconjg_mod.F90 -o psb_d_biconjg_mod.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_ovr_elem.f90 -o psi_crea_ovr_elem.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmpovrl.f90 -o psi_bld_tmpovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspgather.F90 -o psb_sspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lgather.f90 -o psb_lgather.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_fmt.f90 -o psb_s_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran.F90 -o psi_cswaptran.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_coo.f90 -o psb_s_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lhalo.f90 -o psb_lhalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csc_impl.F90 -o psb_c_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmphalo.f90 -o psi_bld_tmphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspgather.F90 -o psb_zspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspgather.F90 -o psb_cspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspnrm1.f90 -o psb_sspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_biconjg_mod.F90 -o psb_s_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_serial_impl.F90 -o psi_d_serial_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_fmt.f90 -o psb_s_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata.F90 -o psi_zswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspnrm1.f90 -o psb_dspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_from_coo.f90 -o psb_s_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_mat_dist_mod.f90 -o psb_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspnrm1.f90 -o psb_cspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_sort_dl.f90 -o psi_sort_dl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsphalo.F90 -o psb_zsphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_biconjg_mod.F90 -o psb_z_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lovrl.f90 -o psb_lovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_indx_map_fnd_owner.F90 -o psi_indx_map_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_upd.f90 -o psi_iovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran.F90 -o psi_zswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspnrm1.f90 -o psb_zspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdren.f90 -o psb_cdren.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdrep.f90 -o psb_cdrep.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_to_coo.f90 -o psb_s_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax.f90 -o psb_zamax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_desc_impl.f90 -o psi_desc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_restr.f90 -o psi_lovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather.f90 -o psb_cgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo.f90 -o psb_chalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum.f90 -o psb_zasum.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_hash_impl.f90 -o psi_hash_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata_a.F90 -o psi_dswapdata_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_coo.f90 -o psb_s_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_mat_impl.F90 -o psb_c_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaxpby.f90 -o psb_zaxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_get_overlap.f90 -o psb_get_overlap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl.f90 -o psb_covrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_type.f90 -o psb_s_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_type.f90 -o psb_d_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_srtlist.f90 -o psi_srtlist.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_type.f90 -o psb_c_prec_type.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_fmt.f90 -o psb_s_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_serial_impl.F90 -o psi_c_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdot.f90 -o psb_zdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcdbldext.F90 -o psb_dcdbldext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrm2.f90 -o psb_znrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrmi.f90 -o psb_znrmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_coo.f90 -o psb_s_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_lstext.f90 -o psb_cd_lstext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_remap.F90 -o psb_cd_remap.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_fmt.f90 -o psb_s_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_rb_idx_tree_impl.F90 -o psb_c_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_serial_impl.F90 -o psi_z_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_type.f90 -o psb_z_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_fact_mod.f90 -o psb_d_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdcpy.F90 -o psb_cdcpy.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcdbldext.F90 -o psb_zcdbldext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_bld_glb_dep_list.F90 -o psi_bld_glb_dep_list.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_aclsum.f90 -o psb_s_dia_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_xtr_loc_dl.F90 -o psi_xtr_loc_dl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_reinit.f90 -o psb_cd_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_switch_ovl_indxmap.f90 -o psb_cd_switch_ovl_indxmap.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save.f90 -o psi_sovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd.f90 -o psi_sovrl_upd.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_allocate_mnnz.f90 -o psb_s_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr.f90 -o psi_dovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scdbldext.F90 -o psb_scdbldext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invk_fact_mod.f90 -o psb_d_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invt_fact_mod.f90 -o psb_d_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather.f90 -o psb_zgather.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_arwsum.f90 -o psb_s_dia_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo.f90 -o psb_zhalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_renum_block.F90 -o psb_cd_renum_block.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_srwextd.f90 -o psb_srwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_drwextd.f90 -o psb_drwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_crwextd.f90 -o psb_crwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zrwextd.f90 -o psb_zrwextd.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_colsum.f90 -o psb_s_dia_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspspmm.F90 -o psb_sspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl.f90 -o psb_zovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccdbldext.F90 -o psb_ccdbldext.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspalloc.f90 -o psb_dspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspasb.f90 -o psb_dspasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspspmm.F90 -o psb_dspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspspmm.F90 -o psb_cspspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetptn.f90 -o psb_s_dia_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csr_impl.F90 -o psb_z_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_coo_impl.F90 -o psb_z_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csc_impl.F90 -o psb_z_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_util_mod.f90 -o psb_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invk_fact_mod.f90 -o psb_s_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrm2.f90 -o psb_snrm2.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetrow.f90 -o psb_s_dia_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrmi.f90 -o psb_snrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather_a.f90 -o psb_dgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remap.F90 -o psb_d_remap.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswaptran_a.F90 -o psi_mswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspfree.f90 -o psb_dspfree.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save.f90 -o psi_dovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd.f90 -o psi_dovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmm.f90 -o psb_s_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmv.f90 -o psb_s_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_get_diag.f90 -o psb_s_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_maxval.f90 -o psb_s_dia_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invt_fact_mod.f90 -o psb_s_invt_fact_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_mold.f90 -o psb_s_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_print.f90 -o psb_s_dia_print.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invk_fact_mod.f90 -o psb_c_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo_a.f90 -o psb_dhalo_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reallocate_nz.f90 -o psb_s_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_mat_impl.F90 -o psb_z_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_rb_idx_tree_impl.F90 -o psb_z_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl_a.f90 -o psb_dovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather_a.f90 -o psb_sgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo_a.f90 -o psb_shalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl_a.f90 -o psb_sovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_mat.F90 -o psb_z_remote_mat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reinit.f90 -o psb_s_dia_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspmm.f90 -o psb_sspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspsm.f90 -o psb_sspsm.o -/usr/bin/install -c -p -p *.mod ../modules -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dsprn.f90 -o psb_dsprn.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mgather_a.f90 -o psb_mgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_vect.F90 -o psb_s_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_rowsum.f90 -o psb_s_dia_rowsum.o -make -C util objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -/usr/bin/install -c -p -p *.mod ../modules -mpicc -g -O3 -I. -I../include -c psb_amd_order.c -o psb_amd_order.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_hbio_impl.f90 -o psb_s_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_hbio_impl.f90 -o psb_d_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invt_fact_mod.f90 -o psb_c_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_biconjg_mod.F90 -o psb_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr.f90 -o psi_covrl_restr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scal.f90 -o psb_s_dia_scal.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_vect.F90 -o psb_d_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_hbio_impl.f90 -o psb_c_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mhalo_a.f90 -o psb_mhalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax.f90 -o psb_camax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_movrl_a.f90 -o psb_movrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_hbio_impl.f90 -o psb_z_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata_a.F90 -o psi_cswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_vect.F90 -o psb_c_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mmio_impl.f90 -o psb_s_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save.f90 -o psi_covrl_save.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scals.f90 -o psb_s_dia_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_vect.F90 -o psb_z_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_aclsum.f90 -o psb_s_ell_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_type.f90 -o psb_prec_type.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd.f90 -o psi_covrl_upd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum.f90 -o psb_casum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caxpby.f90 -o psb_caxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdot.f90 -o psb_cdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspalloc.f90 -o psb_sspalloc.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran_a.F90 -o psi_cswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_e_remote_vect.F90 -o psb_e_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_allocate_mnnz.f90 -o psb_s_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_arwsum.f90 -o psb_s_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_colsum.f90 -o psb_s_ell_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_egather_a.f90 -o psb_egather_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr.f90 -o psi_zovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspasb.f90 -o psb_sspasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ehalo_a.f90 -o psb_ehalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_m_remote_vect.F90 -o psb_m_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetblk.f90 -o psb_s_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetptn.f90 -o psb_s_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetrow.f90 -o psb_s_ell_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrm2.f90 -o psb_cnrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrmi.f90 -o psb_cnrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspmm.f90 -o psb_cspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remap.F90 -o psb_s_remap.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save.f90 -o psi_zovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata_a.F90 -o psi_zswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd.f90 -o psi_zovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_restr_a.f90 -o psi_movrl_restr_a.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmm.f90 -o psb_s_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmv.f90 -o psb_s_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnm1.f90 -o psb_s_ell_csnm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspsm.f90 -o psb_cspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cmlt_vect.f90 -o psb_cmlt_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_mod.f90 -o psb_s_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspfree.f90 -o psb_sspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspins.F90 -o psb_sspins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ssprn.f90 -o psb_ssprn.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mmio_impl.f90 -o psb_d_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mmio_impl.f90 -o psb_c_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mmio_impl.f90 -o psb_z_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_mod.f90 -o psb_d_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_glob_to_loc.f90 -o psb_glob_to_loc.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_mod.f90 -o psb_c_prec_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnmi.f90 -o psb_s_ell_csnmi.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_i_mmio_impl.F90 -o psb_i_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_impl.f90 -o psb_s_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspspmm.F90 -o psb_zspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dmlt_vect.f90 -o psb_dmlt_vect.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran_a.F90 -o psi_zswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_impl.f90 -o psb_d_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ssymbmm.f90 -o psb_ssymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dsymbmm.f90 -o psb_dsymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_mod.f90 -o psb_z_prec_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csput.f90 -o psb_s_ell_csput.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_mod.f90 -o psb_prec_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssm.f90 -o psb_s_ell_cssm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_loc_to_glob.f90 -o psb_loc_to_glob.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_diagprec.f90 -o psb_d_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iallc.f90 -o psb_iallc.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_nullprec.f90 -o psb_d_nullprec.o -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_save_a.f90 -o psi_movrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_upd_a.f90 -o psi_movrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iasb.f90 -o psb_iasb.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_bjacprec.f90 -o psb_d_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ifree.f90 -o psb_ifree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zmlt_vect.f90 -o psb_zmlt_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssv.f90 -o psb_s_ell_cssv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_csymbmm.f90 -o psb_csymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iins.f90 -o psb_iins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lallc.f90 -o psb_lallc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_get_diag.f90 -o psb_s_ell_get_diag.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_impl.f90 -o psb_c_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_restr_a.f90 -o psi_eovrl_restr_a.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_save_a.f90 -o psi_eovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lasb.f90 -o psb_lasb.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_impl.f90 -o psb_z_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_renum_impl.F90 -o psb_s_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_smlt_vect.f90 -o psb_smlt_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_maxval.f90 -o psb_s_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_mold.f90 -o psb_s_ell_mold.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zsymbmm.f90 -o psb_zsymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_diagprec.f90 -o psb_s_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdiv_vect.f90 -o psb_cdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_upd_a.f90 -o psi_eovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr_a.f90 -o psi_sovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save_a.f90 -o psi_sovrl_save_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_print.f90 -o psb_s_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reallocate_nz.f90 -o psb_s_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddiv_vect.f90 -o psb_ddiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lfree.f90 -o psb_lfree.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd_a.f90 -o psi_sovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_nullprec.f90 -o psb_s_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr_a.f90 -o psi_dovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reinit.f90 -o psb_s_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_rowsum.f90 -o psb_s_ell_rowsum.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_bjacprec.f90 -o psb_s_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_diagprec.f90 -o psb_c_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snumbmm.f90 -o psb_snumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_nullprec.f90 -o psb_c_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_bjacprec.f90 -o psb_c_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_diagprec.f90 -o psb_z_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_nullprec.f90 -o psb_z_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_bjacprec.f90 -o psb_z_bjacprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scal.f90 -o psb_s_ell_scal.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save_a.f90 -o psi_dovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd_a.f90 -o psi_dovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnumbmm.f90 -o psb_dnumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnumbmm.f90 -o psb_cnumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdiv_vect.f90 -o psb_zdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr_a.f90 -o psi_covrl_restr_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scals.f90 -o psb_s_ell_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_eovrl_a.f90 -o psb_eovrl_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_trim.f90 -o psb_s_ell_trim.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree.f90 -o psb_sfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znumbmm.f90 -o psb_znumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c smmp.f90 -o smmp.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather_a.f90 -o psb_cgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c lsmmp.f90 -o lsmmp.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins.f90 -o psb_sins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_allocate_mnnz.f90 -o psb_s_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_csmv.f90 -o psb_s_hdia_csmv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save_a.f90 -o psi_covrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgeprt.f90 -o psb_dgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgeprt.f90 -o psb_cgeprt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd_a.f90 -o psi_covrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdiv_vect.f90 -o psb_sdiv_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_mold.f90 -o psb_s_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_print.f90 -o psb_s_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_aclsum.f90 -o psb_s_hll_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc.f90 -o psb_dallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cinv_vect.f90 -o psb_cinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dinv_vect.f90 -o psb_dinv_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_allocate_mnnz.f90 -o psb_s_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_arwsum.f90 -o psb_s_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_colsum.f90 -o psb_s_hll_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo_a.f90 -o psb_chalo_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr_a.f90 -o psi_zovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save_a.f90 -o psi_zovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zinv_vect.f90 -o psb_zinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_renum_impl.F90 -o psb_d_renum_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetblk.f90 -o psb_s_hll_csgetblk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sinv_vect.f90 -o psb_sinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_renum_impl.F90 -o psb_c_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl_a.f90 -o psb_covrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather_a.f90 -o psb_zgather_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd_a.f90 -o psi_zovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo_a.f90 -o psb_zhalo_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetptn.f90 -o psb_s_hll_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spdot_srtd.f90 -o psb_spdot_srtd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_aspxpby.f90 -o psb_aspxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spge_dot.f90 -o psb_spge_dot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saplusat.f90 -o psb_saplusat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetrow.f90 -o psb_s_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmm.f90 -o psb_s_hll_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl_a.f90 -o psb_zovrl_a.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmv.f90 -o psb_s_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnm1.f90 -o psb_s_hll_csnm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daplusat.f90 -o psb_daplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb.f90 -o psb_dasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnmi.f90 -o psb_s_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csput.f90 -o psb_s_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssm.f90 -o psb_s_hll_cssm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caplusat.f90 -o psb_caplusat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssv.f90 -o psb_s_hll_cssv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dcmp_vect.f90 -o psb_dcmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_get_diag.f90 -o psb_s_hll_get_diag.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_scmp_vect.f90 -o psb_scmp_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaplusat.f90 -o psb_zaplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax_s.f90 -o psb_samax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_renum_impl.F90 -o psb_z_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ccmp_vect.f90 -o psb_ccmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_maxval.f90 -o psb_s_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_mold.f90 -o psb_s_hll_mold.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree.f90 -o psb_dfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins.f90 -o psb_dins.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc.f90 -o psb_callc.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_build_mtpart.F90 -o psi_build_mtpart.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zcmp_vect.f90 -o psb_zcmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_print.f90 -o psb_s_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reallocate_nz.f90 -o psb_s_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reinit.f90 -o psb_s_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_rowsum.f90 -o psb_s_hll_rowsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax_s.f90 -o psb_damax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cabs_vect.f90 -o psb_cabs_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scal.f90 -o psb_s_hll_scal.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dabs_vect.f90 -o psb_dabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax_s.f90 -o psb_camax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb.f90 -o psb_casb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scals.f90 -o psb_s_hll_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax_s.f90 -o psb_zamax_s.o -/usr/bin/install -c -p -p *.mod ../modules -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree.f90 -o psb_cfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins.f90 -o psb_cins.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc.f90 -o psb_zallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb.f90 -o psb_zasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sabs_vect.f90 -o psb_sabs_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_dia_from_coo.f90 -o psb_s_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_coo.f90 -o psb_s_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum_s.f90 -o psb_sasum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zabs_vect.f90 -o psb_zabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree.f90 -o psb_zfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cgetmatinfo.F90 -o psb_cgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dgetmatinfo.F90 -o psb_dgetmatinfo.o -make -C linsolve mods -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_base_linsolve_conv_mod.f90 -o psb_base_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_linsolve_mod.f90 -o psb_linsolve_mod.o -make -C prec objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -/usr/bin/install -c -p -p *.mod ../modules -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_fmt.f90 -o psb_s_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum_s.f90 -o psb_dasum_s.o -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_prec_type_impl.f90 -o psb_s_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins.f90 -o psb_zins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_prec_type_impl.f90 -o psb_d_prec_type_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_coo.f90 -o psb_s_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum_s.f90 -o psb_casum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_linsolve_conv_mod.f90 -o psb_s_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_linsolve_conv_mod.f90 -o psb_c_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sgetmatinfo.F90 -o psb_sgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_linsolve_conv_mod.f90 -o psb_d_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_linsolve_conv_mod.f90 -o psb_z_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_fmt.f90 -o psb_s_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mallc_a.f90 -o psb_mallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_masb_a.f90 -o psb_masb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mfree_a.f90 -o psb_mfree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mins_a.f90 -o psb_mins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_from_coo.f90 -o psb_s_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zgetmatinfo.F90 -o psb_zgetmatinfo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_to_coo.f90 -o psb_s_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum_s.f90 -o psb_zasum_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_coo.f90 -o psb_s_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eallc_a.f90 -o psb_eallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_easb_a.f90 -o psb_easb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_efree_a.f90 -o psb_efree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eins_a.f90 -o psb_eins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc_a.f90 -o psb_sallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_fmt.f90 -o psb_s_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_prec_type_impl.f90 -o psb_c_prec_type_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_prec_type_impl.f90 -o psb_z_prec_type_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_diagprec_impl.f90 -o psb_d_diagprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_bjacprec_impl.f90 -o psb_d_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_nullprec_impl.f90 -o psb_d_nullprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb_a.f90 -o psb_sasb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_coo.f90 -o psb_s_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree_a.f90 -o psb_sfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_fmt.f90 -o psb_s_mv_hll_to_fmt.o -/usr/bin/install -c -p -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_from_coo.f90 -o psb_c_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_to_coo.f90 -o psb_c_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_coo.f90 -o psb_c_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_fmt.f90 -o psb_c_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_coo.f90 -o psb_c_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilu0_fact.f90 -o psb_d_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_fmt.f90 -o psb_c_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins_a.f90 -o psb_sins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc_a.f90 -o psb_dallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_from_coo.f90 -o psb_c_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_to_coo.f90 -o psb_c_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_coo.f90 -o psb_c_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_fmt.f90 -o psb_c_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb_a.f90 -o psb_dasb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_coo.f90 -o psb_c_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_iluk_fact.f90 -o psb_d_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_fmt.f90 -o psb_c_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_aclsum.f90 -o psb_c_dia_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree_a.f90 -o psb_dfree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins_a.f90 -o psb_dins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_allocate_mnnz.f90 -o psb_c_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_arwsum.f90 -o psb_c_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilut_fact.f90 -o psb_d_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecbld.f90 -o psb_dprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_colsum.f90 -o psb_c_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecinit.f90 -o psb_dprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetptn.f90 -o psb_c_dia_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc_a.f90 -o psb_callc_a.o -make -C cbind objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_objhandle_mod.F90 -o psb_objhandle_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_base.c -o psb_c_base.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sbase.c -o psb_c_sbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dbase.c -o psb_c_dbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cbase.c -o psb_c_cbase.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -make -C linsolve objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dkrylov.f90 -o psb_dkrylov.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zbase.c -o psb_c_zbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_scomm.c -o psb_c_scomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dcomm.c -o psb_c_dcomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_ccomm.c -o psb_c_ccomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zcomm.c -o psb_c_zcomm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_diagprec_impl.f90 -o psb_s_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb_a.f90 -o psb_casb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_bjacprec_impl.f90 -o psb_s_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_nullprec_impl.f90 -o psb_s_nullprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree_a.f90 -o psb_cfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilu0_fact.f90 -o psb_s_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_skrylov.f90 -o psb_skrylov.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins_a.f90 -o psb_cins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetrow.f90 -o psb_c_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ckrylov.f90 -o psb_ckrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zkrylov.f90 -o psb_zkrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_iluk_fact.f90 -o psb_s_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilut_fact.f90 -o psb_s_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drichardson.f90 -o psb_drichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmm.f90 -o psb_c_dia_csmm.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_base_tools_cbind_mod.F90 -o psb_base_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srichardson.f90 -o psb_srichardson.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc_a.f90 -o psb_zallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb_a.f90 -o psb_zasb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crichardson.f90 -o psb_crichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrichardson.f90 -o psb_zrichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecbld.f90 -o psb_sprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecinit.f90 -o psb_sprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmv.f90 -o psb_c_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_diagprec_impl.f90 -o psb_c_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree_a.f90 -o psb_zfree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins_a.f90 -o psb_zins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_bjacprec_impl.f90 -o psb_c_bjacprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspalloc.f90 -o psb_zspalloc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_nullprec_impl.f90 -o psb_c_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstab.f90 -o psb_dcgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcg.F90 -o psb_dcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilu0_fact.f90 -o psb_c_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_iluk_fact.f90 -o psb_c_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dfcg.F90 -o psb_dfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_get_diag.f90 -o psb_c_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dgcr.f90 -o psb_dgcr.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspasb.f90 -o psb_zspasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilut_fact.f90 -o psb_c_ilut_fact.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_psblas_cbind_mod.f90 -o psb_s_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecbld.f90 -o psb_cprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_maxval.f90 -o psb_c_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgs.f90 -o psb_dcgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dbicg.f90 -o psb_dbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_mold.f90 -o psb_c_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstabl.f90 -o psb_dcgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecinit.f90 -o psb_cprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_diagprec_impl.f90 -o psb_z_diagprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_bjacprec_impl.f90 -o psb_z_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_nullprec_impl.f90 -o psb_z_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilu0_fact.f90 -o psb_z_ilu0_fact.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remap.F90 -o psb_z_remap.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_psblas_cbind_mod.f90 -o psb_d_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_print.f90 -o psb_c_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drgmres.f90 -o psb_drgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstab.f90 -o psb_scgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scg.F90 -o psb_scg.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspfree.f90 -o psb_zspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspins.F90 -o psb_zspins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_iluk_fact.f90 -o psb_z_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilut_fact.f90 -o psb_z_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reallocate_nz.f90 -o psb_c_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecbld.f90 -o psb_zprecbld.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_psblas_cbind_mod.f90 -o psb_c_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zsprn.f90 -o psb_zsprn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sfcg.F90 -o psb_sfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sgcr.f90 -o psb_sgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgs.f90 -o psb_scgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reinit.f90 -o psb_c_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sbicg.f90 -o psb_sbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstabl.f90 -o psb_scgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srgmres.f90 -o psb_srgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstab.f90 -o psb_ccgstab.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_psblas_cbind_mod.f90 -o psb_z_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_rowsum.f90 -o psb_c_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scal.f90 -o psb_c_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecinit.f90 -o psb_zprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sparsify.f90 -o psb_c_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scals.f90 -o psb_c_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_aclsum.f90 -o psb_c_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccg.F90 -o psb_ccg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cfcg.F90 -o psb_cfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_allocate_mnnz.f90 -o psb_c_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspalloc.f90 -o psb_cspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspasb.f90 -o psb_cspasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remap.F90 -o psb_c_remap.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cgcr.f90 -o psb_cgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_arwsum.f90 -o psb_c_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_colsum.f90 -o psb_c_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetblk.f90 -o psb_c_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgs.f90 -o psb_ccgs.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_tools_cbind_mod.F90 -o psb_s_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cbicg.f90 -o psb_cbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetptn.f90 -o psb_c_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetrow.f90 -o psb_c_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sparsify.f90 -o psb_d_sparsify.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspfree.f90 -o psb_cspfree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstabl.f90 -o psb_ccgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sparsify.f90 -o psb_s_sparsify.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspins.F90 -o psb_cspins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crgmres.f90 -o psb_crgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstab.f90 -o psb_zcgstab.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_csprn.f90 -o psb_csprn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_set_bld.f90 -o psb_cd_set_bld.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_map.f90 -o psb_s_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmm.f90 -o psb_c_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sparsify.f90 -o psb_z_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcg.F90 -o psb_zcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zfcg.F90 -o psb_zfcg.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_map.f90 -o psb_d_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmv.f90 -o psb_c_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crwclip.f90 -o psb_crwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drwclip.f90 -o psb_drwclip.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_map.f90 -o psb_c_map.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_serial_cbind_mod.F90 -o psb_s_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srwclip.f90 -o psb_srwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrwclip.f90 -o psb_zrwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zgcr.f90 -o psb_zgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sp_drop.f90 -o psb_c_sp_drop.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_tools_cbind_mod.F90 -o psb_d_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_serial_cbind_mod.F90 -o psb_d_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_map.f90 -o psb_z_map.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_par_csr_spspmm.f90 -o psb_s_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sp_drop.f90 -o psb_d_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sp_drop.f90 -o psb_s_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnm1.f90 -o psb_c_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sp_drop.f90 -o psb_z_sp_drop.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_par_csr_spspmm.f90 -o psb_d_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_par_csr_spspmm.f90 -o psb_c_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_tools_cbind_mod.F90 -o psb_c_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgs.f90 -o psb_zcgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk_noth.F90 -o psb_dsparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnmi.f90 -o psb_c_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk.F90 -o psb_dsparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_mlk.F90 -o psb_dsparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csput.f90 -o psb_c_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssm.f90 -o psb_c_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zbicg.f90 -o psb_zbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_ft_llk.F90 -o psb_dsparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_par_csr_spspmm.f90 -o psb_z_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_glob_transpose.F90 -o psb_s_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_llk.F90 -o psb_dsparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk_noth.F90 -o psb_csparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstabl.f90 -o psb_zcgstabl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_glob_transpose.F90 -o psb_d_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk.F90 -o psb_csparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrgmres.f90 -o psb_zrgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssv.f90 -o psb_c_ell_cssv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_glob_transpose.F90 -o psb_c_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_mlk.F90 -o psb_csparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_glob_transpose.F90 -o psb_z_glob_transpose.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_serial_cbind_mod.F90 -o psb_c_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_ft_llk.F90 -o psb_csparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_llk.F90 -o psb_csparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk_noth.F90 -o psb_zsparse_biconjg_llk_noth.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cgetelem.f90 -o psb_cgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_get_diag.f90 -o psb_c_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_maxval.f90 -o psb_c_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk.F90 -o psb_zsparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_tools_cbind_mod.F90 -o psb_z_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_mlk.F90 -o psb_zsparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_mold.f90 -o psb_c_ell_mold.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dgetelem.f90 -o psb_dgetelem.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sgetelem.f90 -o psb_sgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_print.f90 -o psb_c_ell_print.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_serial_cbind_mod.F90 -o psb_z_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_ft_llk.F90 -o psb_zsparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_llk.F90 -o psb_zsparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk_noth.F90 -o psb_ssparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk.F90 -o psb_ssparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zgetelem.f90 -o psb_zgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_mlk.F90 -o psb_ssparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_ft_llk.F90 -o psb_ssparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reallocate_nz.f90 -o psb_c_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reinit.f90 -o psb_c_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_llk.F90 -o psb_ssparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ainv_bld.f90 -o psb_d_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ainv_bld.f90 -o psb_c_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ainv_bld.f90 -o psb_s_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_rowsum.f90 -o psb_c_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ainv_bld.f90 -o psb_z_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invt_fact.f90 -o psb_c_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invt_fact.f90 -o psb_d_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invt_fact.f90 -o psb_s_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invt_fact.f90 -o psb_z_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invk_fact.f90 -o psb_c_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invk_fact.f90 -o psb_d_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scal.f90 -o psb_c_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scals.f90 -o psb_c_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invk_fact.f90 -o psb_s_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invk_fact.f90 -o psb_z_invk_fact.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_trim.f90 -o psb_c_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_allocate_mnnz.f90 -o psb_c_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_csmv.f90 -o psb_c_hdia_csmv.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_comm_cbind_mod.f90 -o psb_s_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_comm_cbind_mod.f90 -o psb_d_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_mold.f90 -o psb_c_hdia_mold.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_comm_cbind_mod.f90 -o psb_c_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_print.f90 -o psb_c_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_aclsum.f90 -o psb_c_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_allocate_mnnz.f90 -o psb_c_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_arwsum.f90 -o psb_c_hll_arwsum.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_comm_cbind_mod.f90 -o psb_z_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_colsum.f90 -o psb_c_hll_colsum.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_psblas_cbind_mod.f90 -o psb_base_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetblk.f90 -o psb_c_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetptn.f90 -o psb_c_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetrow.f90 -o psb_c_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmm.f90 -o psb_c_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmv.f90 -o psb_c_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnm1.f90 -o psb_c_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnmi.f90 -o psb_c_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csput.f90 -o psb_c_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssm.f90 -o psb_c_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssv.f90 -o psb_c_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_get_diag.f90 -o psb_c_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_maxval.f90 -o psb_c_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_mold.f90 -o psb_c_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_print.f90 -o psb_c_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reallocate_nz.f90 -o psb_c_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reinit.f90 -o psb_c_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_rowsum.f90 -o psb_c_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scal.f90 -o psb_c_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scals.f90 -o psb_c_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_dia_from_coo.f90 -o psb_c_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_coo.f90 -o psb_c_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_fmt.f90 -o psb_c_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_coo.f90 -o psb_c_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_fmt.f90 -o psb_c_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_from_coo.f90 -o psb_c_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_to_coo.f90 -o psb_c_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_coo.f90 -o psb_c_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_fmt.f90 -o psb_c_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_coo.f90 -o psb_c_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_fmt.f90 -o psb_c_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_from_coo.f90 -o psb_d_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_to_coo.f90 -o psb_d_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_coo.f90 -o psb_d_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_fmt.f90 -o psb_d_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_coo.f90 -o psb_d_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_fmt.f90 -o psb_d_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_from_coo.f90 -o psb_d_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_to_coo.f90 -o psb_d_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_coo.f90 -o psb_d_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_fmt.f90 -o psb_d_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_coo.f90 -o psb_d_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_fmt.f90 -o psb_d_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_aclsum.f90 -o psb_d_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_allocate_mnnz.f90 -o psb_d_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_arwsum.f90 -o psb_d_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_colsum.f90 -o psb_d_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetptn.f90 -o psb_d_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetrow.f90 -o psb_d_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmm.f90 -o psb_d_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmv.f90 -o psb_d_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_get_diag.f90 -o psb_d_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_maxval.f90 -o psb_d_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_mold.f90 -o psb_d_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_print.f90 -o psb_d_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reallocate_nz.f90 -o psb_d_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reinit.f90 -o psb_d_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_rowsum.f90 -o psb_d_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scal.f90 -o psb_d_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scals.f90 -o psb_d_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_aclsum.f90 -o psb_d_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_allocate_mnnz.f90 -o psb_d_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_arwsum.f90 -o psb_d_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_colsum.f90 -o psb_d_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetblk.f90 -o psb_d_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetptn.f90 -o psb_d_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetrow.f90 -o psb_d_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmm.f90 -o psb_d_ell_csmm.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_cbind_mod.f90 -o psb_base_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmv.f90 -o psb_d_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnm1.f90 -o psb_d_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnmi.f90 -o psb_d_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csput.f90 -o psb_d_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssm.f90 -o psb_d_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssv.f90 -o psb_d_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_get_diag.f90 -o psb_d_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_maxval.f90 -o psb_d_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_mold.f90 -o psb_d_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_print.f90 -o psb_d_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reallocate_nz.f90 -o psb_d_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reinit.f90 -o psb_d_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_rowsum.f90 -o psb_d_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scal.f90 -o psb_d_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scals.f90 -o psb_d_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_trim.f90 -o psb_d_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_allocate_mnnz.f90 -o psb_d_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_csmv.f90 -o psb_d_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_mold.f90 -o psb_d_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_print.f90 -o psb_d_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_aclsum.f90 -o psb_d_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_allocate_mnnz.f90 -o psb_d_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_arwsum.f90 -o psb_d_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_colsum.f90 -o psb_d_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetblk.f90 -o psb_d_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetptn.f90 -o psb_d_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetrow.f90 -o psb_d_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmm.f90 -o psb_d_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmv.f90 -o psb_d_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnm1.f90 -o psb_d_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnmi.f90 -o psb_d_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csput.f90 -o psb_d_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssm.f90 -o psb_d_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssv.f90 -o psb_d_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_get_diag.f90 -o psb_d_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_maxval.f90 -o psb_d_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_mold.f90 -o psb_d_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_print.f90 -o psb_d_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reallocate_nz.f90 -o psb_d_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reinit.f90 -o psb_d_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_rowsum.f90 -o psb_d_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scal.f90 -o psb_d_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scals.f90 -o psb_d_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_dia_from_coo.f90 -o psb_d_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_coo.f90 -o psb_d_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_fmt.f90 -o psb_d_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_coo.f90 -o psb_d_mv_ell_to_coo.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_fmt.f90 -o psb_d_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_from_coo.f90 -o psb_d_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_to_coo.f90 -o psb_d_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_coo.f90 -o psb_d_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_fmt.f90 -o psb_d_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_coo.f90 -o psb_d_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_fmt.f90 -o psb_d_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_from_coo.f90 -o psb_z_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_to_coo.f90 -o psb_z_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_coo.f90 -o psb_z_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_fmt.f90 -o psb_z_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_coo.f90 -o psb_z_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_fmt.f90 -o psb_z_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_from_coo.f90 -o psb_z_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_to_coo.f90 -o psb_z_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_coo.f90 -o psb_z_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_fmt.f90 -o psb_z_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_coo.f90 -o psb_z_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_fmt.f90 -o psb_z_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_aclsum.f90 -o psb_z_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_allocate_mnnz.f90 -o psb_z_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_arwsum.f90 -o psb_z_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_colsum.f90 -o psb_z_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetptn.f90 -o psb_z_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetrow.f90 -o psb_z_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmm.f90 -o psb_z_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmv.f90 -o psb_z_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_get_diag.f90 -o psb_z_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_maxval.f90 -o psb_z_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_mold.f90 -o psb_z_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_print.f90 -o psb_z_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reallocate_nz.f90 -o psb_z_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reinit.f90 -o psb_z_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_rowsum.f90 -o psb_z_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scal.f90 -o psb_z_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scals.f90 -o psb_z_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_aclsum.f90 -o psb_z_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_allocate_mnnz.f90 -o psb_z_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_arwsum.f90 -o psb_z_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_colsum.f90 -o psb_z_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetblk.f90 -o psb_z_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetptn.f90 -o psb_z_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetrow.f90 -o psb_z_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmm.f90 -o psb_z_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmv.f90 -o psb_z_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnm1.f90 -o psb_z_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnmi.f90 -o psb_z_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csput.f90 -o psb_z_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssm.f90 -o psb_z_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssv.f90 -o psb_z_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_get_diag.f90 -o psb_z_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_maxval.f90 -o psb_z_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_mold.f90 -o psb_z_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_print.f90 -o psb_z_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reallocate_nz.f90 -o psb_z_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reinit.f90 -o psb_z_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_rowsum.f90 -o psb_z_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scal.f90 -o psb_z_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scals.f90 -o psb_z_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_trim.f90 -o psb_z_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_allocate_mnnz.f90 -o psb_z_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_csmv.f90 -o psb_z_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_mold.f90 -o psb_z_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_print.f90 -o psb_z_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_aclsum.f90 -o psb_z_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_allocate_mnnz.f90 -o psb_z_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_arwsum.f90 -o psb_z_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_colsum.f90 -o psb_z_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetblk.f90 -o psb_z_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetptn.f90 -o psb_z_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetrow.f90 -o psb_z_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmm.f90 -o psb_z_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmv.f90 -o psb_z_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnm1.f90 -o psb_z_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnmi.f90 -o psb_z_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csput.f90 -o psb_z_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssm.f90 -o psb_z_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssv.f90 -o psb_z_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_get_diag.f90 -o psb_z_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_maxval.f90 -o psb_z_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_mold.f90 -o psb_z_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_print.f90 -o psb_z_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reallocate_nz.f90 -o psb_z_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reinit.f90 -o psb_z_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_rowsum.f90 -o psb_z_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scal.f90 -o psb_z_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scals.f90 -o psb_z_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_dia_from_coo.f90 -o psb_z_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_coo.f90 -o psb_z_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_fmt.f90 -o psb_z_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_coo.f90 -o psb_z_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_fmt.f90 -o psb_z_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_from_coo.f90 -o psb_z_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_to_coo.f90 -o psb_z_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_coo.f90 -o psb_z_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_fmt.f90 -o psb_z_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_coo.f90 -o psb_z_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_fmt.f90 -o psb_z_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_ell_from_coo.f90 -o psi_s_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_ell_from_coo.f90 -o psi_c_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_ell_from_coo.f90 -o psi_d_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_ell_from_coo.f90 -o psi_z_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_ell_from_coo.f90 -o psi_s_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_ell_from_coo.f90 -o psi_c_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_ell_from_coo.f90 -o psi_d_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_ell_from_coo.f90 -o psi_z_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_hll_from_coo.f90 -o psi_s_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_hll_from_coo.f90 -o psi_c_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_hll_from_coo.f90 -o psi_d_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_hll_from_coo.f90 -o psi_z_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_dia_from_coo.f90 -o psi_s_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_dia_from_coo.f90 -o psi_c_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_dia_from_coo.f90 -o psi_d_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_dia_from_coo.f90 -o psi_z_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_coo_from_dia.f90 -o psi_s_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_coo_from_dia.f90 -o psi_d_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_coo_from_dia.f90 -o psi_c_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_coo_from_dia.f90 -o psi_z_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_dia_from_coo.f90 -o psi_s_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_dia_from_coo.f90 -o psi_c_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_dia_from_coo.f90 -o psi_d_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_dia_from_coo.f90 -o psi_z_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dns_mat_impl.f90 -o psb_s_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dns_mat_impl.f90 -o psb_d_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dns_mat_impl.f90 -o psb_c_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dns_mat_impl.f90 -o psb_z_dns_mat_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_sprec_cbind_mod.f90 -o psb_sprec_cbind_mod.o -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_util_cbind_mod.f90 -o psb_c_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dprec_cbind_mod.f90 -o psb_dprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_util_cbind_mod.f90 -o psb_d_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cprec_cbind_mod.f90 -o psb_cprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_util_cbind_mod.f90 -o psb_s_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zprec_cbind_mod.f90 -o psb_zprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_util_cbind_mod.f90 -o psb_z_util_cbind_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sprec.c -o psb_c_sprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dprec.c -o psb_c_dprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cprec.c -o psb_c_cprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zprec.c -o psb_c_zprec.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_prec_cbind_mod.f90 -o psb_prec_cbind_mod.o -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_linsolve_cbind_mod.f90 -o psb_base_linsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_slinsolve_cbind_mod.f90 -o psb_slinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dlinsolve_cbind_mod.f90 -o psb_dlinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_clinsolve_cbind_mod.f90 -o psb_clinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zlinsolve_cbind_mod.f90 -o psb_zlinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_util_cbind_mod.f90 -o psb_util_cbind_mod.o -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C cbind objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C base lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial objs -make -C comm objs -make -C auxil objs -make -C psblas objs -make -C tools objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make -C sort objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: «psb_dscatter.o» è aggiornato. -make[3]: «psb_zscatter.o» è aggiornato. -make[3]: «psb_iscatter.o» è aggiornato. -make[3]: «psb_lscatter.o» è aggiornato. -make[3]: «psb_cscatter.o» è aggiornato. -make[3]: «psb_sscatter.o» è aggiornato. -make[3]: «psb_dscatter_a.o» è aggiornato. -make[3]: «psb_zscatter_a.o» è aggiornato. -make[3]: «psb_mscatter_a.o» è aggiornato. -make[3]: «psb_escatter_a.o» è aggiornato. -make[3]: «psb_cscatter_a.o» è aggiornato. -make[3]: «psb_sscatter_a.o» è aggiornato. -make[3]: «psb_dspgather.o» è aggiornato. -make[3]: «psb_sspgather.o» è aggiornato. -make[3]: «psb_zspgather.o» è aggiornato. -make[3]: «psb_cspgather.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: «psi_desc_index.o» è aggiornato. -make[3]: «psi_fnd_owner.o» è aggiornato. -make[3]: «psi_a2a_fnd_owner.o» è aggiornato. -make[3]: «psi_graph_fnd_owner.o» è aggiornato. -make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. -make[3]: «psi_symm_dep_list.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psb_icdasb.o» è aggiornato. -make[3]: «psb_ssphalo.o» è aggiornato. -make[3]: «psb_dsphalo.o» è aggiornato. -make[3]: «psb_csphalo.o» è aggiornato. -make[3]: «psb_zsphalo.o» è aggiornato. -make[3]: «psb_dcdbldext.o» è aggiornato. -make[3]: «psb_zcdbldext.o» è aggiornato. -make[3]: «psb_scdbldext.o» è aggiornato. -make[3]: «psb_ccdbldext.o» è aggiornato. -make[3]: «psb_s_remote_mat.o» è aggiornato. -make[3]: «psb_d_remote_mat.o» è aggiornato. -make[3]: «psb_c_remote_mat.o» è aggiornato. -make[3]: «psb_z_remote_mat.o» è aggiornato. -make[3]: «psb_s_remote_vect.o» è aggiornato. -make[3]: «psb_d_remote_vect.o» è aggiornato. -make[3]: «psb_c_remote_vect.o» è aggiornato. -make[3]: «psb_z_remote_vect.o» è aggiornato. -make[3]: «psb_e_remote_vect.o» è aggiornato. -make[3]: «psb_m_remote_vect.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C modules lib LIBNAME=libpsb_base.a F90="" F90COPT=" " -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -ar -cDr ..//libpsb_base.a psb_const_mod.o psb_cbind_const_mod.o psb_error_mod.o psb_realloc_mod.o auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o serial/psb_serial_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_baseline_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o comm/comm_schemes/psb_comm_factory_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o serial/psb_vect_mod.o auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o auxil/psb_ip_reord_mod.o auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o auxil/psb_d_msort_mod.o auxil/psb_d_qsort_mod.o auxil/psb_c_hsort_mod.o auxil/psb_c_isort_mod.o auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o auxil/psb_i_hsort_x_mod.o auxil/psb_l_hsort_x_mod.o auxil/psb_s_hsort_x_mod.o auxil/psb_d_hsort_x_mod.o auxil/psb_c_hsort_x_mod.o auxil/psb_z_hsort_x_mod.o auxil/psb_s_rb_idx_tree_mod.o auxil/psb_d_rb_idx_tree_mod.o auxil/psb_c_rb_idx_tree_mod.o auxil/psb_z_rb_idx_tree_mod.o auxil/psb_rb_idx_tree_mod.o serial/psb_base_mat_mod.o serial/psb_mat_mod.o serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_glist_map_mod.o desc/psb_hash_map_mod.o desc/psb_hashval.o desc/psb_desc_mod.o auxil/psb_sort_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o tools/psb_tools_mod.o psb_penv_mod.o penv/psi_penv_mod.o penv/psi_p2p_mod.o penv/psi_m_p2p_mod.o penv/psi_i2_p2p_mod.o penv/psi_e_p2p_mod.o penv/psi_s_p2p_mod.o penv/psi_d_p2p_mod.o penv/psi_c_p2p_mod.o penv/psi_z_p2p_mod.o penv/psi_collective_mod.o penv/psi_i2_collective_mod.o penv/psi_e_collective_mod.o penv/psi_m_collective_mod.o penv/psi_s_collective_mod.o penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_mod.o psb_error_impl.o psb_timers_mod.o comm/psb_base_linmap_mod.o comm/psb_linmap_mod.o comm/psb_s_linmap_mod.o comm/psb_d_linmap_mod.o comm/psb_c_linmap_mod.o comm/psb_z_linmap_mod.o comm/psb_comm_mod.o comm/psb_neighbor_topology_mod.o comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o comm/psb_i2_comm_a_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o comm/psi_s_comm_v_mod.o comm/psi_d_comm_v_mod.o comm/psi_c_comm_v_mod.o comm/psi_z_comm_v_mod.o psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o psblas/psb_psblas_mod.o psb_check_mod.o desc/psb_hash_mod.o error.o psb_base_mod.o cutil.o -ranlib ..//libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make -C sort objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make -C impl lib -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -ar -cDr ../../libpsb_base.a psb_base_mat_impl.o psb_s_base_mat_impl.o psb_d_base_mat_impl.o psb_c_base_mat_impl.o psb_z_base_mat_impl.o psb_s_csr_impl.o psb_s_coo_impl.o psb_s_csc_impl.o psb_s_mat_impl.o psb_s_rb_idx_tree_impl.o psb_d_csr_impl.o psb_d_coo_impl.o psb_d_csc_impl.o psb_d_mat_impl.o psb_d_rb_idx_tree_impl.o psb_c_csr_impl.o psb_c_coo_impl.o psb_c_csc_impl.o psb_c_mat_impl.o psb_c_rb_idx_tree_impl.o psb_z_csr_impl.o psb_z_coo_impl.o psb_z_csc_impl.o psb_z_mat_impl.o psb_z_rb_idx_tree_impl.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make -C sort lib -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -ar -cDr ../../libpsb_base.a psb_s_hsort_impl.o psb_s_isort_impl.o psb_s_msort_impl.o psb_s_qsort_impl.o psb_d_hsort_impl.o psb_d_isort_impl.o psb_d_msort_impl.o psb_d_qsort_impl.o psb_c_hsort_impl.o psb_c_isort_impl.o psb_c_msort_impl.o psb_c_qsort_impl.o psb_z_hsort_impl.o psb_z_isort_impl.o psb_z_msort_impl.o psb_z_qsort_impl.o psb_m_hsort_impl.o psb_m_isort_impl.o psb_m_msort_impl.o psb_m_qsort_impl.o psb_e_hsort_impl.o psb_e_isort_impl.o psb_e_msort_impl.o psb_e_qsort_impl.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -ar -cDr ../libpsb_base.a psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o psi_s_serial_impl.o psi_d_serial_impl.o psi_c_serial_impl.o psi_z_serial_impl.o psb_srwextd.o psb_drwextd.o psb_crwextd.o psb_zrwextd.o psb_sspspmm.o psb_dspspmm.o psb_cspspmm.o psb_zspspmm.o psb_ssymbmm.o psb_dsymbmm.o psb_csymbmm.o psb_zsymbmm.o psb_snumbmm.o psb_dnumbmm.o psb_cnumbmm.o psb_znumbmm.o smmp.o lsmmp.o psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C comm lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: «psb_dscatter.o» è aggiornato. -make[3]: «psb_zscatter.o» è aggiornato. -make[3]: «psb_iscatter.o» è aggiornato. -make[3]: «psb_lscatter.o» è aggiornato. -make[3]: «psb_cscatter.o» è aggiornato. -make[3]: «psb_sscatter.o» è aggiornato. -make[3]: «psb_dscatter_a.o» è aggiornato. -make[3]: «psb_zscatter_a.o» è aggiornato. -make[3]: «psb_mscatter_a.o» è aggiornato. -make[3]: «psb_escatter_a.o» è aggiornato. -make[3]: «psb_cscatter_a.o» è aggiornato. -make[3]: «psb_sscatter_a.o» è aggiornato. -make[3]: «psb_dspgather.o» è aggiornato. -make[3]: «psb_sspgather.o» è aggiornato. -make[3]: «psb_zspgather.o» è aggiornato. -make[3]: «psb_cspgather.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make -C internals lib LIBNAME=libpsb_base.a -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -ar -cDr ../../libpsb_base.a psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o psi_iovrl_restr.o psi_iovrl_save.o psi_iovrl_upd.o psi_lovrl_restr.o psi_lovrl_save.o psi_lovrl_upd.o psi_sovrl_restr.o psi_sovrl_save.o psi_sovrl_upd.o psi_dovrl_restr.o psi_dovrl_save.o psi_dovrl_upd.o psi_covrl_restr.o psi_covrl_save.o psi_covrl_upd.o psi_zovrl_restr.o psi_zovrl_save.o psi_zovrl_upd.o psi_movrl_restr_a.o psi_movrl_save_a.o psi_movrl_upd_a.o psi_eovrl_restr_a.o psi_eovrl_save_a.o psi_eovrl_upd_a.o psi_sovrl_restr_a.o psi_sovrl_save_a.o psi_sovrl_upd_a.o psi_dovrl_restr_a.o psi_dovrl_save_a.o psi_dovrl_upd_a.o psi_covrl_restr_a.o psi_covrl_save_a.o psi_covrl_upd_a.o psi_zovrl_restr_a.o psi_zovrl_save_a.o psi_zovrl_upd_a.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -ar -cDr ../libpsb_base.a psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o psb_dgather.o psb_dhalo.o psb_dovrl.o psb_sgather.o psb_shalo.o psb_sovrl.o psb_igather.o psb_ihalo.o psb_iovrl.o psb_lgather.o psb_lhalo.o psb_lovrl.o psb_cgather.o psb_chalo.o psb_covrl.o psb_zgather.o psb_zhalo.o psb_zovrl.o psb_dgather_a.o psb_dhalo_a.o psb_dovrl_a.o psb_sgather_a.o psb_shalo_a.o psb_sovrl_a.o psb_mgather_a.o psb_mhalo_a.o psb_movrl_a.o psb_egather_a.o psb_ehalo_a.o psb_eovrl_a.o psb_cgather_a.o psb_chalo_a.o psb_covrl_a.o psb_zgather_a.o psb_zhalo_a.o psb_zovrl_a.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C auxil lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psi_desc_index.o» è aggiornato. -make[3]: «psi_fnd_owner.o» è aggiornato. -make[3]: «psi_a2a_fnd_owner.o» è aggiornato. -make[3]: «psi_graph_fnd_owner.o» è aggiornato. -make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. -make[3]: «psi_symm_dep_list.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -ar -cDr ../libpsb_base.a psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o psi_crea_bnd_elem.o psi_crea_index.o psi_crea_ovr_elem.o psi_bld_tmpovrl.o psi_bld_tmphalo.o psi_sort_dl.o psi_indx_map_fnd_owner.o psi_desc_impl.o psi_hash_impl.o psi_srtlist.o psi_bld_glb_dep_list.o psi_xtr_loc_dl.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make -C psblas lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -ar -cDr ../libpsb_base.a psb_ddot.o psb_damax.o psb_dasum.o psb_daxpby.o psb_dnrm2.o psb_dnrmi.o psb_dspmm.o psb_dspsm.o psb_sspnrm1.o psb_dspnrm1.o psb_cspnrm1.o psb_zspnrm1.o psb_zamax.o psb_zasum.o psb_zaxpby.o psb_zdot.o psb_znrm2.o psb_znrmi.o psb_zspmm.o psb_zspsm.o psb_saxpby.o psb_sdot.o psb_sasum.o psb_samax.o psb_snrm2.o psb_snrmi.o psb_sspmm.o psb_sspsm.o psb_camax.o psb_casum.o psb_caxpby.o psb_cdot.o psb_cnrm2.o psb_cnrmi.o psb_cspmm.o psb_cspsm.o psb_cmlt_vect.o psb_dmlt_vect.o psb_zmlt_vect.o psb_smlt_vect.o psb_cdiv_vect.o psb_ddiv_vect.o psb_zdiv_vect.o psb_sdiv_vect.o psb_cinv_vect.o psb_dinv_vect.o psb_zinv_vect.o psb_sinv_vect.o psb_dcmp_vect.o psb_scmp_vect.o psb_ccmp_vect.o psb_zcmp_vect.o psb_cabs_vect.o psb_dabs_vect.o psb_sabs_vect.o psb_zabs_vect.o psb_cgetmatinfo.o psb_dgetmatinfo.o psb_sgetmatinfo.o psb_zgetmatinfo.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make -C tools lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psb_icdasb.o» è aggiornato. -make[3]: «psb_ssphalo.o» è aggiornato. -make[3]: «psb_dsphalo.o» è aggiornato. -make[3]: «psb_csphalo.o» è aggiornato. -make[3]: «psb_zsphalo.o» è aggiornato. -make[3]: «psb_dcdbldext.o» è aggiornato. -make[3]: «psb_zcdbldext.o» è aggiornato. -make[3]: «psb_scdbldext.o» è aggiornato. -make[3]: «psb_ccdbldext.o» è aggiornato. -make[3]: «psb_s_remote_mat.o» è aggiornato. -make[3]: «psb_d_remote_mat.o» è aggiornato. -make[3]: «psb_c_remote_mat.o» è aggiornato. -make[3]: «psb_z_remote_mat.o» è aggiornato. -make[3]: «psb_s_remote_vect.o» è aggiornato. -make[3]: «psb_d_remote_vect.o» è aggiornato. -make[3]: «psb_c_remote_vect.o» è aggiornato. -make[3]: «psb_z_remote_vect.o» è aggiornato. -make[3]: «psb_e_remote_vect.o» è aggiornato. -make[3]: «psb_m_remote_vect.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -ar -cDr ../libpsb_base.a psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o psb_cdall.o psb_cdals.o psb_cdalv.o psb_cd_inloc.o psb_cdins.o psb_cdprt.o psb_cdren.o psb_cdrep.o psb_get_overlap.o psb_cd_lstext.o psb_cd_remap.o psb_cdcpy.o psb_cd_reinit.o psb_cd_switch_ovl_indxmap.o psb_cd_renum_block.o psb_dspalloc.o psb_dspasb.o psb_d_remap.o psb_dspfree.o psb_dspins.o psb_dsprn.o psb_sspalloc.o psb_sspasb.o psb_s_remap.o psb_sspfree.o psb_sspins.o psb_ssprn.o psb_glob_to_loc.o psb_loc_to_glob.o psb_iallc.o psb_iasb.o psb_ifree.o psb_iins.o psb_lallc.o psb_lasb.o psb_lfree.o psb_lins.o psb_sallc.o psb_sasb.o psb_sfree.o psb_sins.o psb_dallc.o psb_dasb.o psb_dfree.o psb_dins.o psb_callc.o psb_casb.o psb_cfree.o psb_cins.o psb_zallc.o psb_zasb.o psb_zfree.o psb_zins.o psb_mallc_a.o psb_masb_a.o psb_mfree_a.o psb_mins_a.o psb_eallc_a.o psb_easb_a.o psb_efree_a.o psb_eins_a.o psb_sallc_a.o psb_sasb_a.o psb_sfree_a.o psb_sins_a.o psb_dallc_a.o psb_dasb_a.o psb_dfree_a.o psb_dins_a.o psb_callc_a.o psb_casb_a.o psb_cfree_a.o psb_cins_a.o psb_zallc_a.o psb_zasb_a.o psb_zfree_a.o psb_zins_a.o psb_zspalloc.o psb_zspasb.o psb_z_remap.o psb_zspfree.o psb_zspins.o psb_zsprn.o psb_cspalloc.o psb_cspasb.o psb_c_remap.o psb_cspfree.o psb_cspins.o psb_csprn.o psb_cd_set_bld.o psb_s_map.o psb_d_map.o psb_c_map.o psb_z_map.o psb_s_par_csr_spspmm.o psb_d_par_csr_spspmm.o psb_c_par_csr_spspmm.o psb_z_par_csr_spspmm.o psb_s_glob_transpose.o psb_d_glob_transpose.o psb_c_glob_transpose.o psb_z_glob_transpose.o psb_cgetelem.o psb_dgetelem.o psb_sgetelem.o psb_zgetelem.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -/bin/cp -p ./libpsb_base.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C prec lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make -C impl lib -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -ar -cDr ../libpsb_prec.a psb_s_prec_type_impl.o psb_d_prec_type_impl.o psb_c_prec_type_impl.o psb_z_prec_type_impl.o psb_d_diagprec_impl.o psb_d_bjacprec_impl.o psb_d_nullprec_impl.o psb_d_ilu0_fact.o psb_d_iluk_fact.o psb_d_ilut_fact.o psb_dprecbld.o psb_dprecinit.o psb_s_diagprec_impl.o psb_s_bjacprec_impl.o psb_s_nullprec_impl.o psb_s_ilu0_fact.o psb_s_iluk_fact.o psb_s_ilut_fact.o psb_sprecbld.o psb_sprecinit.o psb_c_diagprec_impl.o psb_c_bjacprec_impl.o psb_c_nullprec_impl.o psb_c_ilu0_fact.o psb_c_iluk_fact.o psb_c_ilut_fact.o psb_cprecbld.o psb_cprecinit.o psb_z_diagprec_impl.o psb_z_bjacprec_impl.o psb_z_nullprec_impl.o psb_z_ilu0_fact.o psb_z_iluk_fact.o psb_z_ilut_fact.o psb_zprecbld.o psb_zprecinit.o psb_c_sparsify.o psb_d_sparsify.o psb_s_sparsify.o psb_z_sparsify.o psb_crwclip.o psb_drwclip.o psb_srwclip.o psb_zrwclip.o psb_c_sp_drop.o psb_d_sp_drop.o psb_s_sp_drop.o psb_z_sp_drop.o psb_dsparse_biconjg_llk_noth.o psb_dsparse_biconjg_llk.o psb_dsparse_biconjg_mlk.o psb_dsparse_biconjg_s_ft_llk.o psb_dsparse_biconjg_s_llk.o psb_csparse_biconjg_llk_noth.o psb_csparse_biconjg_llk.o psb_csparse_biconjg_mlk.o psb_csparse_biconjg_s_ft_llk.o psb_csparse_biconjg_s_llk.o psb_zsparse_biconjg_llk_noth.o psb_zsparse_biconjg_llk.o psb_zsparse_biconjg_mlk.o psb_zsparse_biconjg_s_ft_llk.o psb_zsparse_biconjg_s_llk.o psb_ssparse_biconjg_llk_noth.o psb_ssparse_biconjg_llk.o psb_ssparse_biconjg_mlk.o psb_ssparse_biconjg_s_ft_llk.o psb_ssparse_biconjg_s_llk.o psb_d_ainv_bld.o psb_c_ainv_bld.o psb_s_ainv_bld.o psb_z_ainv_bld.o psb_c_invt_fact.o psb_d_invt_fact.o psb_s_invt_fact.o psb_z_invt_fact.o psb_c_invk_fact.o psb_d_invk_fact.o psb_s_invk_fact.o psb_z_invk_fact.o -ranlib ../libpsb_prec.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -ar -cDr ./libpsb_prec.a psb_prec_const_mod.o psb_s_prec_type.o psb_d_prec_type.o psb_c_prec_type.o psb_z_prec_type.o psb_s_base_prec_mod.o psb_d_base_prec_mod.o psb_c_base_prec_mod.o psb_z_base_prec_mod.o psb_prec_type.o psb_prec_mod.o psb_s_prec_mod.o psb_d_prec_mod.o psb_c_prec_mod.o psb_z_prec_mod.o psb_d_diagprec.o psb_d_nullprec.o psb_d_bjacprec.o psb_s_ilu_fact_mod.o psb_s_diagprec.o psb_s_nullprec.o psb_s_bjacprec.o psb_d_ilu_fact_mod.o psb_c_diagprec.o psb_c_nullprec.o psb_c_bjacprec.o psb_c_ilu_fact_mod.o psb_z_diagprec.o psb_z_nullprec.o psb_z_bjacprec.o psb_z_ilu_fact_mod.o psb_c_ainv_fact_mod.o psb_d_ainv_fact_mod.o psb_s_ainv_fact_mod.o psb_z_ainv_fact_mod.o psb_c_ainv_tools_mod.o psb_d_ainv_tools_mod.o psb_s_ainv_tools_mod.o psb_z_ainv_tools_mod.o psb_ainv_tools_mod.o psb_biconjg_mod.o psb_c_biconjg_mod.o psb_d_biconjg_mod.o psb_s_biconjg_mod.o psb_z_biconjg_mod.o psb_c_invt_fact_mod.o psb_d_invt_fact_mod.o psb_s_invt_fact_mod.o psb_z_invt_fact_mod.o psb_c_invk_fact_mod.o psb_d_invk_fact_mod.o psb_s_invk_fact_mod.o psb_z_invk_fact_mod.o -ranlib ./libpsb_prec.a -/bin/cp -p ./libpsb_prec.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -make -C linsolve lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make -C impl lib -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -ar -cDr ../libpsb_linsolve.a psb_dkrylov.o psb_skrylov.o psb_ckrylov.o psb_zkrylov.o psb_drichardson.o psb_srichardson.o psb_crichardson.o psb_zrichardson.o psb_dcgstab.o psb_dcg.o psb_dfcg.o psb_dgcr.o psb_dcgs.o psb_dbicg.o psb_dcgstabl.o psb_drgmres.o psb_scgstab.o psb_scg.o psb_sfcg.o psb_sgcr.o psb_scgs.o psb_sbicg.o psb_scgstabl.o psb_srgmres.o psb_ccgstab.o psb_ccg.o psb_cfcg.o psb_cgcr.o psb_ccgs.o psb_cbicg.o psb_ccgstabl.o psb_crgmres.o psb_zcgstab.o psb_zcg.o psb_zfcg.o psb_zgcr.o psb_zcgs.o psb_zbicg.o psb_zcgstabl.o psb_zrgmres.o -ranlib ../libpsb_linsolve.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -ar -cDr ./libpsb_linsolve.a psb_base_linsolve_conv_mod.o psb_s_linsolve_conv_mod.o psb_c_linsolve_conv_mod.o psb_d_linsolve_conv_mod.o psb_z_linsolve_conv_mod.o psb_linsolve_mod.o -ranlib ./libpsb_linsolve.a -/bin/cp -p ./libpsb_linsolve.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -make -C util lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -/usr/bin/install -c -p -p *.mod ../modules -ar -cDr ./libpsb_util.a psb_metis_int.o psb_amd_order.o psb_util_mod.o psb_blockpart_mod.o psb_metispart_mod.o psb_partidx_mod.o psb_hbio_mod.o psb_mmio_mod.o psb_mat_dist_mod.o psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o psb_renum_mod.o psb_gps_mod.o psb_s_renum_mod.o psb_d_renum_mod.o psb_c_renum_mod.o psb_z_renum_mod.o psb_s_hbio_impl.o psb_d_hbio_impl.o psb_c_hbio_impl.o psb_z_hbio_impl.o psb_s_mmio_impl.o psb_d_mmio_impl.o psb_c_mmio_impl.o psb_z_mmio_impl.o psb_i_mmio_impl.o psb_s_mat_dist_impl.o psb_d_mat_dist_impl.o psb_c_mat_dist_impl.o psb_z_mat_dist_impl.o psb_s_renum_impl.o psb_d_renum_impl.o psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o -ranlib ./libpsb_util.a -/bin/cp -p ./libpsb_util.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -make -C cbind lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -cd base && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -ar -cDr ../libpsb_cbind.a psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o psb_c_scomm.o psb_c_dcomm.o psb_c_ccomm.o psb_c_zcomm.o -ranlib ../libpsb_cbind.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -ar -cDr ../libpsb_cbind.a psb_prec_cbind_mod.o psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o psb_c_sprec.o psb_c_dprec.o psb_c_cprec.o psb_c_zprec.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -ar -cDr ../libpsb_cbind.a psb_base_linsolve_cbind_mod.o psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -cd util && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -ar -cDr ../libpsb_cbind.a psb_util_cbind_mod.o psb_c_util_cbind_mod.o psb_d_util_cbind_mod.o psb_s_util_cbind_mod.o psb_z_util_cbind_mod.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p ./libpsb_cbind.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C ext lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make -C impl lib LIBNAME=libpsb_ext.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -ar -cDr ../libpsb_ext.a psb_s_cp_dia_from_coo.o psb_s_cp_dia_to_coo.o psb_s_cp_ell_from_coo.o psb_s_cp_ell_from_fmt.o psb_s_cp_ell_to_coo.o psb_s_cp_ell_to_fmt.o psb_s_cp_hdia_from_coo.o psb_s_cp_hdia_to_coo.o psb_s_cp_hll_from_coo.o psb_s_cp_hll_from_fmt.o psb_s_cp_hll_to_coo.o psb_s_cp_hll_to_fmt.o psb_s_dia_aclsum.o psb_s_dia_allocate_mnnz.o psb_s_dia_arwsum.o psb_s_dia_colsum.o psb_s_dia_csgetptn.o psb_s_dia_csgetrow.o psb_s_dia_csmm.o psb_s_dia_csmv.o psb_s_dia_get_diag.o psb_s_dia_maxval.o psb_s_dia_mold.o psb_s_dia_print.o psb_s_dia_reallocate_nz.o psb_s_dia_reinit.o psb_s_dia_rowsum.o psb_s_dia_scal.o psb_s_dia_scals.o psb_s_ell_aclsum.o psb_s_ell_allocate_mnnz.o psb_s_ell_arwsum.o psb_s_ell_colsum.o psb_s_ell_csgetblk.o psb_s_ell_csgetptn.o psb_s_ell_csgetrow.o psb_s_ell_csmm.o psb_s_ell_csmv.o psb_s_ell_csnm1.o psb_s_ell_csnmi.o psb_s_ell_csput.o psb_s_ell_cssm.o psb_s_ell_cssv.o psb_s_ell_get_diag.o psb_s_ell_maxval.o psb_s_ell_mold.o psb_s_ell_print.o psb_s_ell_reallocate_nz.o psb_s_ell_reinit.o psb_s_ell_rowsum.o psb_s_ell_scal.o psb_s_ell_scals.o psb_s_ell_trim.o psb_s_hdia_allocate_mnnz.o psb_s_hdia_csmv.o psb_s_hdia_mold.o psb_s_hdia_print.o psb_s_hll_aclsum.o psb_s_hll_allocate_mnnz.o psb_s_hll_arwsum.o psb_s_hll_colsum.o psb_s_hll_csgetblk.o psb_s_hll_csgetptn.o psb_s_hll_csgetrow.o psb_s_hll_csmm.o psb_s_hll_csmv.o psb_s_hll_csnm1.o psb_s_hll_csnmi.o psb_s_hll_csput.o psb_s_hll_cssm.o psb_s_hll_cssv.o psb_s_hll_get_diag.o psb_s_hll_maxval.o psb_s_hll_mold.o psb_s_hll_print.o psb_s_hll_reallocate_nz.o psb_s_hll_reinit.o psb_s_hll_rowsum.o psb_s_hll_scal.o psb_s_hll_scals.o psb_s_mv_dia_from_coo.o psb_s_mv_ell_from_coo.o psb_s_mv_ell_from_fmt.o psb_s_mv_ell_to_coo.o psb_s_mv_ell_to_fmt.o psb_s_mv_hdia_from_coo.o psb_s_mv_hdia_to_coo.o psb_s_mv_hll_from_coo.o psb_s_mv_hll_from_fmt.o psb_s_mv_hll_to_coo.o psb_s_mv_hll_to_fmt.o psb_c_cp_dia_from_coo.o psb_c_cp_dia_to_coo.o psb_c_cp_ell_from_coo.o psb_c_cp_ell_from_fmt.o psb_c_cp_ell_to_coo.o psb_c_cp_ell_to_fmt.o psb_c_cp_hdia_from_coo.o psb_c_cp_hdia_to_coo.o psb_c_cp_hll_from_coo.o psb_c_cp_hll_from_fmt.o psb_c_cp_hll_to_coo.o psb_c_cp_hll_to_fmt.o psb_c_dia_aclsum.o psb_c_dia_allocate_mnnz.o psb_c_dia_arwsum.o psb_c_dia_colsum.o psb_c_dia_csgetptn.o psb_c_dia_csgetrow.o psb_c_dia_csmm.o psb_c_dia_csmv.o psb_c_dia_get_diag.o psb_c_dia_maxval.o psb_c_dia_mold.o psb_c_dia_print.o psb_c_dia_reallocate_nz.o psb_c_dia_reinit.o psb_c_dia_rowsum.o psb_c_dia_scal.o psb_c_dia_scals.o psb_c_ell_aclsum.o psb_c_ell_allocate_mnnz.o psb_c_ell_arwsum.o psb_c_ell_colsum.o psb_c_ell_csgetblk.o psb_c_ell_csgetptn.o psb_c_ell_csgetrow.o psb_c_ell_csmm.o psb_c_ell_csmv.o psb_c_ell_csnm1.o psb_c_ell_csnmi.o psb_c_ell_csput.o psb_c_ell_cssm.o psb_c_ell_cssv.o psb_c_ell_get_diag.o psb_c_ell_maxval.o psb_c_ell_mold.o psb_c_ell_print.o psb_c_ell_reallocate_nz.o psb_c_ell_reinit.o psb_c_ell_rowsum.o psb_c_ell_scal.o psb_c_ell_scals.o psb_c_ell_trim.o psb_c_hdia_allocate_mnnz.o psb_c_hdia_csmv.o psb_c_hdia_mold.o psb_c_hdia_print.o psb_c_hll_aclsum.o psb_c_hll_allocate_mnnz.o psb_c_hll_arwsum.o psb_c_hll_colsum.o psb_c_hll_csgetblk.o psb_c_hll_csgetptn.o psb_c_hll_csgetrow.o psb_c_hll_csmm.o psb_c_hll_csmv.o psb_c_hll_csnm1.o psb_c_hll_csnmi.o psb_c_hll_csput.o psb_c_hll_cssm.o psb_c_hll_cssv.o psb_c_hll_get_diag.o psb_c_hll_maxval.o psb_c_hll_mold.o psb_c_hll_print.o psb_c_hll_reallocate_nz.o psb_c_hll_reinit.o psb_c_hll_rowsum.o psb_c_hll_scal.o psb_c_hll_scals.o psb_c_mv_dia_from_coo.o psb_c_mv_ell_from_coo.o psb_c_mv_ell_from_fmt.o psb_c_mv_ell_to_coo.o psb_c_mv_ell_to_fmt.o psb_c_mv_hdia_from_coo.o psb_c_mv_hdia_to_coo.o psb_c_mv_hll_from_coo.o psb_c_mv_hll_from_fmt.o psb_c_mv_hll_to_coo.o psb_c_mv_hll_to_fmt.o psb_d_cp_dia_from_coo.o psb_d_cp_dia_to_coo.o psb_d_cp_ell_from_coo.o psb_d_cp_ell_from_fmt.o psb_d_cp_ell_to_coo.o psb_d_cp_ell_to_fmt.o psb_d_cp_hdia_from_coo.o psb_d_cp_hdia_to_coo.o psb_d_cp_hll_from_coo.o psb_d_cp_hll_from_fmt.o psb_d_cp_hll_to_coo.o psb_d_cp_hll_to_fmt.o psb_d_dia_aclsum.o psb_d_dia_allocate_mnnz.o psb_d_dia_arwsum.o psb_d_dia_colsum.o psb_d_dia_csgetptn.o psb_d_dia_csgetrow.o psb_d_dia_csmm.o psb_d_dia_csmv.o psb_d_dia_get_diag.o psb_d_dia_maxval.o psb_d_dia_mold.o psb_d_dia_print.o psb_d_dia_reallocate_nz.o psb_d_dia_reinit.o psb_d_dia_rowsum.o psb_d_dia_scal.o psb_d_dia_scals.o psb_d_ell_aclsum.o psb_d_ell_allocate_mnnz.o psb_d_ell_arwsum.o psb_d_ell_colsum.o psb_d_ell_csgetblk.o psb_d_ell_csgetptn.o psb_d_ell_csgetrow.o psb_d_ell_csmm.o psb_d_ell_csmv.o psb_d_ell_csnm1.o psb_d_ell_csnmi.o psb_d_ell_csput.o psb_d_ell_cssm.o psb_d_ell_cssv.o psb_d_ell_get_diag.o psb_d_ell_maxval.o psb_d_ell_mold.o psb_d_ell_print.o psb_d_ell_reallocate_nz.o psb_d_ell_reinit.o psb_d_ell_rowsum.o psb_d_ell_scal.o psb_d_ell_scals.o psb_d_ell_trim.o psb_d_hdia_allocate_mnnz.o psb_d_hdia_csmv.o psb_d_hdia_mold.o psb_d_hdia_print.o psb_d_hll_aclsum.o psb_d_hll_allocate_mnnz.o psb_d_hll_arwsum.o psb_d_hll_colsum.o psb_d_hll_csgetblk.o psb_d_hll_csgetptn.o psb_d_hll_csgetrow.o psb_d_hll_csmm.o psb_d_hll_csmv.o psb_d_hll_csnm1.o psb_d_hll_csnmi.o psb_d_hll_csput.o psb_d_hll_cssm.o psb_d_hll_cssv.o psb_d_hll_get_diag.o psb_d_hll_maxval.o psb_d_hll_mold.o psb_d_hll_print.o psb_d_hll_reallocate_nz.o psb_d_hll_reinit.o psb_d_hll_rowsum.o psb_d_hll_scal.o psb_d_hll_scals.o psb_d_mv_dia_from_coo.o psb_d_mv_ell_from_coo.o psb_d_mv_ell_from_fmt.o psb_d_mv_ell_to_coo.o psb_d_mv_ell_to_fmt.o psb_d_mv_hdia_from_coo.o psb_d_mv_hdia_to_coo.o psb_d_mv_hll_from_coo.o psb_d_mv_hll_from_fmt.o psb_d_mv_hll_to_coo.o psb_d_mv_hll_to_fmt.o psb_z_cp_dia_from_coo.o psb_z_cp_dia_to_coo.o psb_z_cp_ell_from_coo.o psb_z_cp_ell_from_fmt.o psb_z_cp_ell_to_coo.o psb_z_cp_ell_to_fmt.o psb_z_cp_hdia_from_coo.o psb_z_cp_hdia_to_coo.o psb_z_cp_hll_from_coo.o psb_z_cp_hll_from_fmt.o psb_z_cp_hll_to_coo.o psb_z_cp_hll_to_fmt.o psb_z_dia_aclsum.o psb_z_dia_allocate_mnnz.o psb_z_dia_arwsum.o psb_z_dia_colsum.o psb_z_dia_csgetptn.o psb_z_dia_csgetrow.o psb_z_dia_csmm.o psb_z_dia_csmv.o psb_z_dia_get_diag.o psb_z_dia_maxval.o psb_z_dia_mold.o psb_z_dia_print.o psb_z_dia_reallocate_nz.o psb_z_dia_reinit.o psb_z_dia_rowsum.o psb_z_dia_scal.o psb_z_dia_scals.o psb_z_ell_aclsum.o psb_z_ell_allocate_mnnz.o psb_z_ell_arwsum.o psb_z_ell_colsum.o psb_z_ell_csgetblk.o psb_z_ell_csgetptn.o psb_z_ell_csgetrow.o psb_z_ell_csmm.o psb_z_ell_csmv.o psb_z_ell_csnm1.o psb_z_ell_csnmi.o psb_z_ell_csput.o psb_z_ell_cssm.o psb_z_ell_cssv.o psb_z_ell_get_diag.o psb_z_ell_maxval.o psb_z_ell_mold.o psb_z_ell_print.o psb_z_ell_reallocate_nz.o psb_z_ell_reinit.o psb_z_ell_rowsum.o psb_z_ell_scal.o psb_z_ell_scals.o psb_z_ell_trim.o psb_z_hdia_allocate_mnnz.o psb_z_hdia_csmv.o psb_z_hdia_mold.o psb_z_hdia_print.o psb_z_hll_aclsum.o psb_z_hll_allocate_mnnz.o psb_z_hll_arwsum.o psb_z_hll_colsum.o psb_z_hll_csgetblk.o psb_z_hll_csgetptn.o psb_z_hll_csgetrow.o psb_z_hll_csmm.o psb_z_hll_csmv.o psb_z_hll_csnm1.o psb_z_hll_csnmi.o psb_z_hll_csput.o psb_z_hll_cssm.o psb_z_hll_cssv.o psb_z_hll_get_diag.o psb_z_hll_maxval.o psb_z_hll_mold.o psb_z_hll_print.o psb_z_hll_reallocate_nz.o psb_z_hll_reinit.o psb_z_hll_rowsum.o psb_z_hll_scal.o psb_z_hll_scals.o psb_z_mv_dia_from_coo.o psb_z_mv_ell_from_coo.o psb_z_mv_ell_from_fmt.o psb_z_mv_ell_to_coo.o psb_z_mv_ell_to_fmt.o psb_z_mv_hdia_from_coo.o psb_z_mv_hdia_to_coo.o psb_z_mv_hll_from_coo.o psb_z_mv_hll_from_fmt.o psb_z_mv_hll_to_coo.o psb_z_mv_hll_to_fmt.o psi_s_xtr_ell_from_coo.o psi_c_xtr_ell_from_coo.o psi_d_xtr_ell_from_coo.o psi_z_xtr_ell_from_coo.o psi_s_convert_ell_from_coo.o psi_c_convert_ell_from_coo.o psi_d_convert_ell_from_coo.o psi_z_convert_ell_from_coo.o psi_s_convert_hll_from_coo.o psi_c_convert_hll_from_coo.o psi_d_convert_hll_from_coo.o psi_z_convert_hll_from_coo.o psi_s_xtr_dia_from_coo.o psi_c_xtr_dia_from_coo.o psi_d_xtr_dia_from_coo.o psi_z_xtr_dia_from_coo.o psi_s_xtr_coo_from_dia.o psi_d_xtr_coo_from_dia.o psi_c_xtr_coo_from_dia.o psi_z_xtr_coo_from_dia.o psi_s_convert_dia_from_coo.o psi_c_convert_dia_from_coo.o psi_d_convert_dia_from_coo.o psi_z_convert_dia_from_coo.o psb_s_dns_mat_impl.o psb_d_dns_mat_impl.o psb_c_dns_mat_impl.o psb_z_dns_mat_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -ar -cDr libpsb_ext.a psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o psb_s_hll_mat_mod.o psb_s_ell_mat_mod.o psb_c_hll_mat_mod.o psb_c_ell_mat_mod.o psb_z_hll_mat_mod.o psb_z_ell_mat_mod.o psb_d_dia_mat_mod.o psb_d_hdia_mat_mod.o psb_s_dia_mat_mod.o psb_s_hdia_mat_mod.o psb_c_dia_mat_mod.o psb_c_hdia_mat_mod.o psb_z_dia_mat_mod.o psb_z_hdia_mat_mod.o psb_s_dns_mat_mod.o psb_d_dns_mat_mod.o psb_c_dns_mat_mod.o psb_z_dns_mat_mod.o psi_ext_util_mod.o psi_i_ext_util_mod.o psi_s_ext_util_mod.o psi_c_ext_util_mod.o psi_d_ext_util_mod.o psi_z_ext_util_mod.o psb_ext_mod.o -/bin/cp -p libpsb_ext.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -===================================== -PSBLAS libraries Compilation Successful. diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index d68b4dee6..9d629334a 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -13,27 +13,41 @@ program psb_comm_cg_test type(psb_dprec_type) :: prec integer(psb_ipk_) :: info, iam, np - integer(psb_ipk_) :: idim, itmax, itrace, istop, iter, is - integer(psb_ipk_) :: iter_arr(3), info_arr(3) - integer(psb_ipk_) :: scheme_types(3) - real(psb_dpk_) :: eps, err, t1, t2 - real(psb_dpk_) :: tsolve(3), err_arr(3) - character(len=25) :: scheme_names(3) + integer(psb_ipk_) :: idim, itmax, itrace, istop, iter + integer(psb_ipk_) :: scheme_idx, prec_idx, rep, nrep, nwarm + integer(psb_ipk_), parameter :: n_schemes=3, n_precs=2 + integer(psb_ipk_), allocatable :: iter_count(:,:,:), solve_info(:,:,:) + integer(psb_ipk_) :: scheme_type(n_schemes) + real(psb_dpk_) :: eps, err, t_start, t_elapsed + real(psb_dpk_), allocatable :: setup_time(:,:,:), solve_time(:,:,:) + real(psb_dpk_), allocatable :: total_time(:,:,:), final_error(:,:,:) + real(psb_dpk_) :: avg_t, std_t, med_t, p10_t, p90_t, min_t, max_t + character(len=25) :: scheme_name(n_schemes) + character(len=12) :: prec_type(n_precs) + character(len=20) :: prec_name(n_precs) character(len=5) :: afmt character(len=256) :: arg + logical :: prec_ready info = psb_success_ + prec_ready = .false. afmt = 'CSR' - idim = 40 - itmax = 500 - itrace = 0 + idim = 20 + itmax = 5000 + nrep = 1 + nwarm = 1 + itrace = 0 istop = 2 eps = 1.d-6 - scheme_types = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & & psb_comm_persistent_ineighbor_alltoallv_ /) - scheme_names(1) = 'isend_irecv' - scheme_names(2) = 'ineighbor_alltoallv' - scheme_names(3) = 'persistent_ineighbor_a2av' + scheme_name(1) = 'isend_irecv' + scheme_name(2) = 'ineighbor_alltoallv' + scheme_name(3) = 'persistent_ineighbor_a2av' + prec_type(1) = 'NONE' + prec_type(2) = 'DIAG' + prec_name(1) = 'none' + prec_name(2) = 'diag' call get_command_argument(1,arg) if (len_trim(arg) > 0) then @@ -43,6 +57,27 @@ program psb_comm_cg_test info = psb_success_ end if end if + call get_command_argument(2,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nrep + if ((info /= 0).or.(nrep <= 0)) then + nrep = 7 + info = psb_success_ + end if + end if + call get_command_argument(3,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nwarm + if ((info /= 0).or.(nwarm < 0)) then + nwarm = 1 + info = psb_success_ + end if + end if + + allocate(setup_time(n_precs,n_schemes,nrep), solve_time(n_precs,n_schemes,nrep), & + & total_time(n_precs,n_schemes,nrep), final_error(n_precs,n_schemes,nrep), & + & iter_count(n_precs,n_schemes,nrep), solve_info(n_precs,n_schemes,nrep), stat=info) + if (info /= psb_success_) stop 1 call psb_init(ctxt) call psb_info(ctxt, iam, np) @@ -53,58 +88,120 @@ program psb_comm_cg_test write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim write(psb_out_unit,'("Number of processors : ",i0)') np write(psb_out_unit,'("Iterative method : CG")') - write(psb_out_unit,'("Preconditioner : NONE")') + write(psb_out_unit,'("Preconditioners : NONE, DIAG")') + write(psb_out_unit,'("Repetitions : ",i0)') nrep + write(psb_out_unit,'("Warmup solves : ",i0," (each with itmax=1)")') nwarm write(psb_out_unit,'(" ")') end if call psb_barrier(ctxt) - t1 = psb_wtime() + t_start = psb_wtime() call psb_d_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) if (info /= psb_success_) goto 9999 - call prec%init(ctxt,'NONE',info) - if (info /= psb_success_) goto 9999 - - call prec%build(a,desc_a,info) - if (info /= psb_success_) goto 9999 - - do is = 1, 3 - call psb_geaxpby(dzero,b,dzero,x,desc_a,info) - if (info /= psb_success_) goto 9999 - - call psb_comm_init(scheme_types(is),x%v%comm_handle,info) - if (info /= psb_success_) goto 9999 - - call psb_barrier(ctxt) - t1 = psb_wtime() - call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& - & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) - t2 = psb_wtime() - t1 - call psb_amx(ctxt,t2) - - tsolve(is) = t2 - iter_arr(is) = iter - err_arr(is) = err - info_arr(is) = info - - if (info /= psb_success_) goto 9999 + do prec_idx = 1, n_precs + do scheme_idx = 1, n_schemes + do rep = 1, nrep + if (prec_ready) then + call psb_precfree(prec,info) + if (info /= psb_success_) goto 9999 + prec_ready = .false. + end if + + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t_start = psb_wtime() + call psb_precinit(ctxt,prec,trim(prec_type(prec_idx)),info) + if (info /= psb_success_) goto 9999 + call psb_precbld(a,desc_a,prec,info) + if (info /= psb_success_) goto 9999 + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object not allocated after build' + goto 9999 + end if + prec_ready = .true. + + call psb_comm_set(scheme_type(scheme_idx),x%v%comm_handle,info) + if (info /= psb_success_) goto 9999 + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' + goto 9999 + end if + + setup_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,setup_time(prec_idx,scheme_idx,rep)) + + do iter = 1, nwarm + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& + & itmax=itmax,itrace=itrace,istop=istop) + if (info /= psb_success_) goto 9999 + end do + + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t_start = psb_wtime() + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost before psb_krylov' + goto 9999 + end if + call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& + & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) + t_elapsed = psb_wtime() - t_start + call psb_amx(ctxt,t_elapsed) + + solve_time(prec_idx,scheme_idx,rep) = t_elapsed + total_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,rep) + & + & solve_time(prec_idx,scheme_idx,rep) + iter_count(prec_idx,scheme_idx,rep) = iter + final_error(prec_idx,scheme_idx,rep) = err + solve_info(prec_idx,scheme_idx,rep) = info + + if (info /= psb_success_) goto 9999 + end do + end do end do if (iam == psb_root_) then write(psb_out_unit,'(" ")') - write(psb_out_unit,'("CG solve time by communication scheme")') - write(psb_out_unit,'("--------------------------------------")') - do is = 1, 3 - write(psb_out_unit,'(a25,2x,"time=",es12.5,2x,"iter=",i8,2x,"err=",es12.5,2x,"info=",i6)') & - & trim(scheme_names(is)), tsolve(is), iter_arr(is), err_arr(is), info_arr(is) + write(psb_out_unit,'("CG timing stats by preconditioner and communication scheme")') + write(psb_out_unit,'("-----------------------------------------------------------")') + do prec_idx = 1, n_precs + write(psb_out_unit,'("Preconditioner: ",a)') trim(prec_name(prec_idx)) + do scheme_idx = 1, n_schemes + call compute_stats(setup_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,& + & '(a25,2x,"setup median=",es12.5,2x,"p10=",es12.5,2x,"p90=",es12.5)') & + & trim(scheme_name(scheme_idx)), med_t, p10_t, p90_t + call compute_stats(solve_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,& + & '(27x,"solve median=",es12.5,2x,"mean=",es12.5,2x,"std=",es12.5)') med_t, avg_t, std_t + call compute_stats(total_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,& + & '(27x,"total median=",es12.5,2x,"min=",es12.5,2x,"max=",es12.5)') med_t, min_t, max_t + call compute_stats(final_error(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,& + & '(27x,"err median=",es12.5,2x,"last it/info=",i8,"/",i6)') & + & med_t, iter_count(prec_idx,scheme_idx,nrep), solve_info(prec_idx,scheme_idx,nrep) + end do + write(psb_out_unit,'(" ")') end do end if call psb_gefree(b,desc_a,info) call psb_gefree(x,desc_a,info) call psb_spfree(a,desc_a,info) - call prec%free(info) + if (prec_ready) call psb_precfree(prec,info) call psb_cdfree(desc_a,info) + deallocate(setup_time,solve_time,total_time,final_error,iter_count,solve_info) call psb_exit(ctxt) stop @@ -114,6 +211,64 @@ program psb_comm_cg_test contains + subroutine sort_real_inplace(v) + real(psb_dpk_), intent(inout) :: v(:) + integer(psb_ipk_) :: i, j + real(psb_dpk_) :: key + + do i = 2, size(v) + key = v(i) + j = i - 1 + do while ((j >= 1).and.(v(j) > key)) + v(j+1) = v(j) + j = j - 1 + end do + v(j+1) = key + end do + end subroutine sort_real_inplace + + subroutine compute_stats(vals,mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v) + real(psb_dpk_), intent(in) :: vals(:) + real(psb_dpk_), intent(out) :: mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v + real(psb_dpk_), allocatable :: tmp(:) + integer(psb_ipk_) :: n, idx10, idx90 + + n = size(vals) + if (n <= 0) then + mean_v = dzero; std_v = dzero; median_v = dzero + p10_v = dzero; p90_v = dzero; min_v = dzero; max_v = dzero + return + end if + + mean_v = sum(vals)/real(n,psb_dpk_) + if (n > 1) then + std_v = sqrt(sum((vals-mean_v)**2)/real(n-1,psb_dpk_)) + else + std_v = dzero + end if + + allocate(tmp(n)) + tmp = vals + call sort_real_inplace(tmp) + + if (mod(n,2) == 0) then + median_v = (tmp(n/2)+tmp(n/2+1))/2.0_psb_dpk_ + else + median_v = tmp((n+1)/2) + end if + + idx10 = int(ceiling(0.10_psb_dpk_*real(n,psb_dpk_)),kind=psb_ipk_) + idx90 = int(ceiling(0.90_psb_dpk_*real(n,psb_dpk_)),kind=psb_ipk_) + idx10 = max(1_psb_ipk_,min(n,idx10)) + idx90 = max(1_psb_ipk_,min(n,idx90)) + p10_v = tmp(idx10) + p90_v = tmp(idx90) + min_v = tmp(1) + max_v = tmp(n) + + deallocate(tmp) + end subroutine compute_stats + function b1(x,y,z) result(val) real(psb_dpk_), intent(in) :: x,y,z real(psb_dpk_) :: val diff --git a/test/comm/spmv/psb_spmv_overlap_test.f90 b/test/comm/spmv/psb_spmv_overlap_test.f90 index f22b4ffc9..431ef5e9b 100644 --- a/test/comm/spmv/psb_spmv_overlap_test.f90 +++ b/test/comm/spmv/psb_spmv_overlap_test.f90 @@ -8,7 +8,7 @@ module psb_spmv_overlap_test use psb_base_mod use psb_util_mod - use psb_comm_factory_mod, only: psb_comm_init + use psb_comm_factory_mod, only: psb_comm_set use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & & psb_comm_persistent_ineighbor_alltoallv_ @@ -584,11 +584,11 @@ contains if (info /= psb_success_) goto 9999 ! Set communication schemes on the x vectors used by psb_spmm. - call psb_comm_init(psb_comm_isend_irecv_, x_baseline%v%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, x_baseline%v%comm_handle, info) if (info /= psb_success_) goto 9999 - call psb_comm_init(psb_comm_ineighbor_alltoallv_, x_neighbor%v%comm_handle, info) + call psb_comm_set(psb_comm_ineighbor_alltoallv_, x_neighbor%v%comm_handle, info) if (info /= psb_success_) goto 9999 - call psb_comm_init(psb_comm_persistent_ineighbor_alltoallv_, x_persistent%v%comm_handle, info) + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, x_persistent%v%comm_handle, info) if (info /= psb_success_) goto 9999 ! Warm-up all schemes once. diff --git a/test/comm/swapdata/psb_comm_test.F90 b/test/comm/swapdata/psb_comm_test.F90 index a908068a0..fba352219 100644 --- a/test/comm/swapdata/psb_comm_test.F90 +++ b/test/comm/swapdata/psb_comm_test.F90 @@ -18,7 +18,7 @@ program psb_comm_test use psb_base_mod use psi_mod - use psb_comm_factory_mod, only: psb_comm_init, psb_comm_free + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free use psb_comm_schemes_mod, only: psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & & psb_comm_isend_irecv_ use psb_comm_schemes_mod, only: psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ @@ -219,9 +219,9 @@ program psb_comm_test ! ================================================================== ! 7. Neighbor topology halo exchange (start + wait) ! ================================================================== - call psb_comm_init(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) if (info /= 0) then - write(psb_err_unit,*) my_rank, 'psb_comm_init neighbor error:', info + write(psb_err_unit,*) my_rank, 'psb_comm_set neighbor error:', info call psb_abort(ctxt) end if call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) @@ -239,9 +239,9 @@ program psb_comm_test ! ================================================================== ! 7b. Persistent-neighbor halo exchange (start + wait) ! ================================================================== - call psb_comm_init(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) if (info /= 0) then - write(psb_err_unit,*) my_rank, 'psb_comm_init persistent-neighbor error:', info + write(psb_err_unit,*) my_rank, 'psb_comm_set persistent-neighbor error:', info call psb_abort(ctxt) end if call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) @@ -266,9 +266,9 @@ program psb_comm_test tsum_neighbor = 0.0_psb_dpk_ tsum_neighbor_persistent = 0.0_psb_dpk_ - call psb_comm_init(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) - call psb_comm_init(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) - call psb_comm_init(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) + call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) ! ---- Comm check: verify selected communication schemes ---- n_total = n_total + 1 diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index 5b654754a..4b98cafec 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -837,7 +837,7 @@ program psb_d_pde3d & err=err,itrace=itrace,& & istop=istopc) case('BICGSTAB','BICGSTABL','BICG','CG','CGS','FCG','GCR','RGMRES') - call psb_comm_init(psb_comm_persistent_ineighbor_alltoallv_,xxv%v%comm_handle,info) + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_,xxv%v%comm_handle,info) if(info /= psb_success_) then info=psb_err_from_subroutine_ ch_err='comm init' diff --git a/test/pdegen/runs/psb_pde3d.inp b/test/pdegen/runs/psb_pde3d.inp index a924677ae..e4f8b6c79 100644 --- a/test/pdegen/runs/psb_pde3d.inp +++ b/test/pdegen/runs/psb_pde3d.inp @@ -1,6 +1,6 @@ 17 Number of entries below this BICGSTAB Iterative method BICGSTAB CGS BICG BICGSTABL RGMRES FCG CGR RICHARDSON -BJAC Preconditioner NONE DIAG BJAC +DIAG Preconditioner NONE DIAG BJAC CSR Storage format for matrix A: CSR COO 100 Domain size (acutal system is this**3 (pde3d) ) 3 Partition: 1 BLOCK 3 3D From 97299b8b3ff148f431c763979f0991e204d7e6ac Mon Sep 17 00:00:00 2001 From: sfilippone Date: Fri, 10 Apr 2026 13:37:10 +0200 Subject: [PATCH 155/175] Update VERSION file --- .VERSION | 2 +- base/modules/psb_error_mod.F90 | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.VERSION b/.VERSION index 1263e4764..a50b5ca72 100644 --- a/.VERSION +++ b/.VERSION @@ -1,6 +1,6 @@ $Format:%d%n%n$ # Fall back version, probably last release: -3.9.0 +3.9.1 # PSBLAS version file. # diff --git a/base/modules/psb_error_mod.F90 b/base/modules/psb_error_mod.F90 index 2ab958938..086c06f2d 100644 --- a/base/modules/psb_error_mod.F90 +++ b/base/modules/psb_error_mod.F90 @@ -509,7 +509,6 @@ contains write(tmpmsg,'("PSBLAS Error (",i0,") in subroutine: ",a)')& & err_c,trim(r_name) end if - select case (err_c) case(:psb_success_) From 6ba327854e4c27ecf9263172496170e8b9e4bb6f Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Mon, 13 Apr 2026 22:23:31 +0200 Subject: [PATCH 156/175] [UPDATE] Changes in CG test, added debug --- .gitignore | 5 + base/comm/internals/psi_dswapdata.F90 | 12 + .../psb_comm_neighbor_impl_mod.F90 | 16 ++ test/comm/cg/psb_comm_cg_test.F90 | 208 +++++++++++++----- 4 files changed, 190 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index 497c93c32..f4ad68fbb 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,11 @@ *.smod *~ +*.out +*.err +*.csv +leonardo_comm_script.sh + # header files generated /cbind/*.h /util/psb_metis_int.h diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 582e2ef45..8ad4c5f49 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -593,6 +593,7 @@ contains if (neighbor_comm_handle%use_persistent_buffers) then if ((.not.allocated(y%combuf)) .or. (size(y%combuf) < buffer_size)) then + neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -648,6 +649,7 @@ contains call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + neighbor_comm_handle%diag_init_calls = neighbor_comm_handle%diag_init_calls + 1 neighbor_comm_handle%persistent_request_ready = .true. neighbor_comm_handle%persistent_buffer_size = buffer_size #else @@ -664,6 +666,7 @@ contains call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 neighbor_comm_handle%persistent_in_flight = .true. #else call mpi_ineighbor_alltoallv( & @@ -747,6 +750,9 @@ contains call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + if (neighbor_comm_handle%use_persistent_buffers) then + neighbor_comm_handle%diag_wait_calls = neighbor_comm_handle%diag_wait_calls + 1 + end if if (neighbor_comm_handle%use_persistent_buffers) then neighbor_comm_handle%persistent_in_flight = .false. end if @@ -1254,6 +1260,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in if (neighbor_comm_handle%use_persistent_buffers) then if ((.not.allocated(y%combuf)) .or. (size(y%combuf) < buffer_size)) then + neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -1308,6 +1315,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + neighbor_comm_handle%diag_init_calls = neighbor_comm_handle%diag_init_calls + 1 neighbor_comm_handle%persistent_request_ready = .true. neighbor_comm_handle%persistent_buffer_size = buffer_size #else @@ -1324,6 +1332,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 neighbor_comm_handle%persistent_in_flight = .true. #else call mpi_ineighbor_alltoallv( & @@ -1405,6 +1414,9 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + if (neighbor_comm_handle%use_persistent_buffers) then + neighbor_comm_handle%diag_wait_calls = neighbor_comm_handle%diag_wait_calls + 1 + end if if (neighbor_comm_handle%use_persistent_buffers) then neighbor_comm_handle%persistent_in_flight = .false. end if diff --git a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 index 742dc89c4..106edc25c 100644 --- a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 @@ -30,6 +30,10 @@ module psb_comm_neighbor_impl_mod logical :: persistent_request_ready = .false. logical :: persistent_in_flight = .false. integer(psb_ipk_) :: persistent_buffer_size = 0 + integer(psb_ipk_) :: diag_init_calls = 0 + integer(psb_ipk_) :: diag_start_calls = 0 + integer(psb_ipk_) :: diag_wait_calls = 0 + integer(psb_ipk_) :: diag_buffer_reallocs = 0 contains procedure, pass :: init => psb_comm_neighbor_init procedure, pass :: free => neighbor_topology_free @@ -393,6 +397,10 @@ contains this%persistent_request_ready = .false. this%persistent_in_flight = .false. this%persistent_buffer_size = 0 + this%diag_init_calls = 0 + this%diag_start_calls = 0 + this%diag_wait_calls = 0 + this%diag_buffer_reallocs = 0 call this%free(info) end subroutine psb_comm_neighbor_destroy @@ -430,6 +438,14 @@ contains this%persistent_request_ready = .false. this%persistent_in_flight = .false. this%persistent_buffer_size = 0 + this%diag_init_calls = 0 + this%diag_start_calls = 0 + this%diag_wait_calls = 0 + this%diag_buffer_reallocs = 0 + this%diag_init_calls = 0 + this%diag_start_calls = 0 + this%diag_wait_calls = 0 + this%diag_buffer_reallocs = 0 end subroutine psb_comm_neighbor_init diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index 9d629334a..c56c568a4 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -3,6 +3,7 @@ program psb_comm_cg_test use psb_prec_mod use psb_linsolve_mod use psb_comm_factory_mod + use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle implicit none @@ -19,8 +20,12 @@ program psb_comm_cg_test integer(psb_ipk_), allocatable :: iter_count(:,:,:), solve_info(:,:,:) integer(psb_ipk_) :: scheme_type(n_schemes) real(psb_dpk_) :: eps, err, t_start, t_elapsed + real(psb_dpk_), allocatable :: prec_init_time(:,:,:), prec_bld_time(:,:,:) + real(psb_dpk_), allocatable :: comm_set_time(:,:,:), krylov_time(:,:,:) real(psb_dpk_), allocatable :: setup_time(:,:,:), solve_time(:,:,:) real(psb_dpk_), allocatable :: total_time(:,:,:), final_error(:,:,:) + real(psb_dpk_), allocatable :: krylov_it_time(:,:,:), total_it_time(:,:,:) + real(psb_dpk_) :: iter_denom real(psb_dpk_) :: avg_t, std_t, med_t, p10_t, p90_t, min_t, max_t character(len=25) :: scheme_name(n_schemes) character(len=12) :: prec_type(n_precs) @@ -28,13 +33,14 @@ program psb_comm_cg_test character(len=5) :: afmt character(len=256) :: arg logical :: prec_ready + logical :: setup_done info = psb_success_ prec_ready = .false. afmt = 'CSR' - idim = 20 - itmax = 5000 - nrep = 1 + idim = 40 + itmax = 1000 + nrep = 5 nwarm = 1 itrace = 0 istop = 2 @@ -73,10 +79,21 @@ program psb_comm_cg_test info = psb_success_ end if end if + call get_command_argument(4,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) itmax + if ((info /= 0).or.(itmax <= 0)) then + itmax = 1000 + info = psb_success_ + end if + end if allocate(setup_time(n_precs,n_schemes,nrep), solve_time(n_precs,n_schemes,nrep), & & total_time(n_precs,n_schemes,nrep), final_error(n_precs,n_schemes,nrep), & - & iter_count(n_precs,n_schemes,nrep), solve_info(n_precs,n_schemes,nrep), stat=info) + & krylov_it_time(n_precs,n_schemes,nrep), total_it_time(n_precs,n_schemes,nrep), & + & iter_count(n_precs,n_schemes,nrep), solve_info(n_precs,n_schemes,nrep), & + & prec_init_time(n_precs,n_schemes,nrep), prec_bld_time(n_precs,n_schemes,nrep), & + & comm_set_time(n_precs,n_schemes,nrep), krylov_time(n_precs,n_schemes,nrep), stat=info) if (info /= psb_success_) stop 1 call psb_init(ctxt) @@ -89,8 +106,11 @@ program psb_comm_cg_test write(psb_out_unit,'("Number of processors : ",i0)') np write(psb_out_unit,'("Iterative method : CG")') write(psb_out_unit,'("Preconditioners : NONE, DIAG")') + write(psb_out_unit,'("Max iterations (CG) : ",i0)') itmax write(psb_out_unit,'("Repetitions : ",i0)') nrep - write(psb_out_unit,'("Warmup solves : ",i0," (each with itmax=1)")') nwarm + write(psb_out_unit,'("Warmup solves : ",i0)') nwarm + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Usage: ./psb_comm_cg_test [idim] [nrep] [nwarm] [itmax]")') write(psb_out_unit,'(" ")') end if @@ -101,39 +121,53 @@ program psb_comm_cg_test do prec_idx = 1, n_precs do scheme_idx = 1, n_schemes + setup_done = .false. do rep = 1, nrep - if (prec_ready) then - call psb_precfree(prec,info) - if (info /= psb_success_) goto 9999 - prec_ready = .false. - end if - call psb_geaxpby(dzero,b,dzero,x,desc_a,info) if (info /= psb_success_) goto 9999 - call psb_barrier(ctxt) - t_start = psb_wtime() - call psb_precinit(ctxt,prec,trim(prec_type(prec_idx)),info) - if (info /= psb_success_) goto 9999 - call psb_precbld(a,desc_a,prec,info) - if (info /= psb_success_) goto 9999 - if (.not.allocated(prec%prec)) then - info = psb_err_internal_error_ - write(psb_err_unit,*) 'Preconditioner object not allocated after build' - goto 9999 - end if - prec_ready = .true. + if (.not. setup_done) then + call psb_barrier(ctxt) + t_start = psb_wtime() + call prec%init(ctxt,trim(prec_type(prec_idx)),info) + if (info /= psb_success_) goto 9999 + prec_init_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_init_time(prec_idx,scheme_idx,rep)) - call psb_comm_set(scheme_type(scheme_idx),x%v%comm_handle,info) - if (info /= psb_success_) goto 9999 - if (.not.allocated(prec%prec)) then - info = psb_err_internal_error_ - write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' - goto 9999 - end if + t_start = psb_wtime() + call psb_precbld(a,desc_a,prec,info) + if (info /= psb_success_) goto 9999 + prec_bld_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_bld_time(prec_idx,scheme_idx,rep)) + + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object not allocated after build' + goto 9999 + end if - setup_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start - call psb_amx(ctxt,setup_time(prec_idx,scheme_idx,rep)) + t_start = psb_wtime() + call psb_comm_set(scheme_type(scheme_idx),x%v%comm_handle,info) + comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,comm_set_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' + goto 9999 + end if + + setup_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,rep) + & + & prec_bld_time(prec_idx,scheme_idx,rep) + comm_set_time(prec_idx,scheme_idx,rep) + setup_done = .true. + prec_ready = .true. + else + prec_init_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,1) + prec_bld_time(prec_idx,scheme_idx,rep) = prec_bld_time(prec_idx,scheme_idx,1) + comm_set_time(prec_idx,scheme_idx,rep) = comm_set_time(prec_idx,scheme_idx,1) + setup_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,1) + end if do iter = 1, nwarm call psb_geaxpby(dzero,b,dzero,x,desc_a,info) @@ -147,53 +181,123 @@ program psb_comm_cg_test if (info /= psb_success_) goto 9999 call psb_barrier(ctxt) - t_start = psb_wtime() if (.not.allocated(prec%prec)) then info = psb_err_internal_error_ write(psb_err_unit,*) 'Preconditioner object lost before psb_krylov' goto 9999 end if + t_start = psb_wtime() call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) - t_elapsed = psb_wtime() - t_start - call psb_amx(ctxt,t_elapsed) + krylov_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,krylov_time(prec_idx,scheme_idx,rep)) - solve_time(prec_idx,scheme_idx,rep) = t_elapsed + solve_time(prec_idx,scheme_idx,rep) = krylov_time(prec_idx,scheme_idx,rep) total_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,rep) + & & solve_time(prec_idx,scheme_idx,rep) iter_count(prec_idx,scheme_idx,rep) = iter + iter_denom = real(max(iter,1_psb_ipk_),psb_dpk_) + krylov_it_time(prec_idx,scheme_idx,rep) = solve_time(prec_idx,scheme_idx,rep)/iter_denom + total_it_time(prec_idx,scheme_idx,rep) = total_time(prec_idx,scheme_idx,rep)/iter_denom final_error(prec_idx,scheme_idx,rep) = err solve_info(prec_idx,scheme_idx,rep) = info + if (iam == psb_root_) then + select type(ch => x%v%comm_handle) + type is(psb_comm_neighbor_handle) + write(psb_out_unit,'("DIAG_COMM scheme=",a,", prec=",a,", rep=",i0)') & + & trim(scheme_name(scheme_idx)), trim(prec_name(prec_idx)), rep + write(psb_out_unit,'("DIAG_COMM counters: init=",i0,", start=",i0,", wait=",i0,", realloc=",i0)') & + & ch%diag_init_calls, ch%diag_start_calls, ch%diag_wait_calls, & + & ch%diag_buffer_reallocs + write(psb_out_unit,'("DIAG_COMM state: ready=",l1,", bsz=",i0)') & + & ch%persistent_request_ready, ch%persistent_buffer_size + class default + continue + end select + end if + if (info /= psb_success_) goto 9999 end do + + if (prec_ready) then + call psb_precfree(prec,info) + if (info /= psb_success_) goto 9999 + prec_ready = .false. + end if end do end do if (iam == psb_root_) then write(psb_out_unit,'(" ")') - write(psb_out_unit,'("CG timing stats by preconditioner and communication scheme")') - write(psb_out_unit,'("-----------------------------------------------------------")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("CG TIMING STATISTICS - FINAL RESULTS TABLE")') + write(psb_out_unit,'(100("="))') + do prec_idx = 1, n_precs + write(psb_out_unit,'(" ")') write(psb_out_unit,'("Preconditioner: ",a)') trim(prec_name(prec_idx)) + write(psb_out_unit,'(100("-"))') + + ! Print header + write(psb_out_unit,'(a25,a18,a18,a18,a18,a18)') & + & 'Scheme', 'Phase', 'Minimum [s]', 'Average [s]', 'Maximum [s]', 'Std Dev [s]' + write(psb_out_unit,'(100("-"))') + do scheme_idx = 1, n_schemes + ! Preconditioner init phase + call compute_stats(prec_init_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & trim(scheme_name(scheme_idx)), 'Prec Init', min_t, avg_t, max_t, std_t + + ! Preconditioner build phase + call compute_stats(prec_bld_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Prec Build', min_t, avg_t, max_t, std_t + + ! Communication setup phase + call compute_stats(comm_set_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Comm Setup', min_t, avg_t, max_t, std_t + + ! Total setup phase call compute_stats(setup_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) - write(psb_out_unit,& - & '(a25,2x,"setup median=",es12.5,2x,"p10=",es12.5,2x,"p90=",es12.5)') & - & trim(scheme_name(scheme_idx)), med_t, p10_t, p90_t - call compute_stats(solve_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) - write(psb_out_unit,& - & '(27x,"solve median=",es12.5,2x,"mean=",es12.5,2x,"std=",es12.5)') med_t, avg_t, std_t + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'SetupTotal', min_t, avg_t, max_t, std_t + + ! Krylov solve phase (this is the actual solver) + call compute_stats(krylov_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovSolve', min_t, avg_t, max_t, std_t + + ! Krylov solve normalized per actual CG iteration + call compute_stats(krylov_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovPerIter', min_t, avg_t, max_t, std_t + + ! Total phase statistics call compute_stats(total_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) - write(psb_out_unit,& - & '(27x,"total median=",es12.5,2x,"min=",es12.5,2x,"max=",es12.5)') med_t, min_t, max_t + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalTime', min_t, avg_t, max_t, std_t + + ! Total (setup+solve) normalized per actual CG iteration + call compute_stats(total_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalPerIter', min_t, avg_t, max_t, std_t + + ! Final error and convergence info call compute_stats(final_error(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) - write(psb_out_unit,& - & '(27x,"err median=",es12.5,2x,"last it/info=",i8,"/",i6)') & - & med_t, iter_count(prec_idx,scheme_idx,nrep), solve_info(prec_idx,scheme_idx,nrep) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Final Error', min_t, avg_t, max_t, std_t + write(psb_out_unit,'(a25,a18,"Iterations: ",i8," Info code: ",i6)') & + & ' ', ' ', iter_count(prec_idx,scheme_idx,nrep), solve_info(prec_idx,scheme_idx,nrep) + + write(psb_out_unit,'(100("-"))') end do - write(psb_out_unit,'(" ")') end do + + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'(" ")') end if call psb_gefree(b,desc_a,info) @@ -201,7 +305,9 @@ program psb_comm_cg_test call psb_spfree(a,desc_a,info) if (prec_ready) call psb_precfree(prec,info) call psb_cdfree(desc_a,info) - deallocate(setup_time,solve_time,total_time,final_error,iter_count,solve_info) + deallocate(setup_time,solve_time,total_time,final_error,iter_count,solve_info, & + & prec_init_time,prec_bld_time,comm_set_time,krylov_time, & + & krylov_it_time,total_it_time) call psb_exit(ctxt) stop From 5ed9643fe6e4a8495908133b38d1d5d7bd51ec76 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Tue, 14 Apr 2026 21:13:20 +0200 Subject: [PATCH 157/175] [FIX] Fixed comm tests for single process, added guard on neighbor topology data exchange for single process run --- base/comm/internals/psi_dswapdata.F90 | 309 ++++++++++++-------- test/comm/.gitignore | 3 + test/comm/cg/psb_comm_cg_test.F90 | 220 ++++++++++---- test/comm/spmv/Makefile | 2 +- test/comm/swapdata/Makefile | 2 +- test/comm/swapdata/psb_comm_test.F90 | 403 +++++++++++++------------- 6 files changed, 557 insertions(+), 382 deletions(-) create mode 100644 test/comm/.gitignore diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 8ad4c5f49..5d8b8ff36 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -591,38 +591,61 @@ contains ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv - if (neighbor_comm_handle%use_persistent_buffers) then - if ((.not.allocated(y%combuf)) .or. (size(y%combuf) < buffer_size)) then - neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 - if (neighbor_comm_handle%persistent_request_ready) then - if (neighbor_comm_handle%persistent_request /= mpi_request_null) then - call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + if (buffer_size > 0) then + if (neighbor_comm_handle%use_persistent_buffers) then + if (.not. allocated(y%combuf)) then + neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 end if - neighbor_comm_handle%persistent_request = mpi_request_null - neighbor_comm_handle%persistent_request_ready = .false. - neighbor_comm_handle%persistent_in_flight = .false. - neighbor_comm_handle%persistent_buffer_size = 0 end if + else call y%new_buffer(buffer_size, info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:topology_total_send)) else - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if + ! No data to send/recv: ensure requests/buffers indicate idle state + neighbor_comm_handle%comm_request = mpi_request_null + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_request_ready = neighbor_comm_handle%persistent_request_ready end if - neighbor_comm_handle%comm_request = mpi_request_null - - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & neighbor_comm_handle%send_indexes, & - & y%combuf(1:topology_total_send)) ! Wait for device (important for GPU subclasses) call y%device_wait() @@ -631,27 +654,32 @@ contains ! Lazy persistent-init: build the request once, then reuse with START/WAIT. if (.not. neighbor_comm_handle%persistent_request_ready) then #ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - if (debug) write(*,*) me,' nbr_vect: posting MPI_Neighbor_alltoallv_init' - call mpi_neighbor_alltoallv_init( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & mpi_info_null, & - & neighbor_comm_handle%persistent_request, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (buffer_size > 0) then + if (debug) write(*,*) me,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%diag_init_calls = neighbor_comm_handle%diag_init_calls + 1 + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 end if - neighbor_comm_handle%diag_init_calls = neighbor_comm_handle%diag_init_calls + 1 - neighbor_comm_handle%persistent_request_ready = .true. - neighbor_comm_handle%persistent_buffer_size = buffer_size #else ! Fallback when persistent neighborhood collectives are not available neighbor_comm_handle%persistent_request_ready = .false. @@ -660,51 +688,64 @@ contains end if #ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - call mpi_start(neighbor_comm_handle%persistent_request, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. end if - neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 - neighbor_comm_handle%persistent_in_flight = .true. #else - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & neighbor_comm_handle%comm_request, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%comm_request = mpi_request_null end if - neighbor_comm_handle%persistent_in_flight = .true. #endif else ! Post non-blocking neighborhood alltoallv if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & neighbor_comm_handle%comm_request, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null end if end if @@ -715,55 +756,69 @@ contains ! --------------------------------------------------------- if (do_wait) then - if (neighbor_comm_handle%use_persistent_buffers) then - if (.not. neighbor_comm_handle%persistent_in_flight) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') - goto 9999 + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + if (neighbor_comm_handle%use_persistent_buffers) then + neighbor_comm_handle%persistent_in_flight = .false. + else + neighbor_comm_handle%comm_request = mpi_request_null end if else - if (neighbor_comm_handle%comm_request == mpi_request_null) then - write(psb_err_unit,*) me, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & - & neighbor_comm_handle%is_initialized - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 + if (neighbor_comm_handle%use_persistent_buffers) then + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + write(psb_err_unit,*) me, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & + & neighbor_comm_handle%is_initialized + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if end if end if - topology_total_send = neighbor_comm_handle%total_send - topology_total_recv = neighbor_comm_handle%total_recv - - ! Wait for the non-blocking collective to complete - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - if (neighbor_comm_handle%use_persistent_buffers) then + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + if (neighbor_comm_handle%use_persistent_buffers) then #ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) #else - call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) #endif + else + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + end if + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + if (neighbor_comm_handle%use_persistent_buffers) then + neighbor_comm_handle%diag_wait_calls = neighbor_comm_handle%diag_wait_calls + 1 + end if + if (neighbor_comm_handle%use_persistent_buffers) then + neighbor_comm_handle%persistent_in_flight = .false. + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) else - call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) - end if - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if - if (neighbor_comm_handle%use_persistent_buffers) then - neighbor_comm_handle%diag_wait_calls = neighbor_comm_handle%diag_wait_calls + 1 - end if - if (neighbor_comm_handle%use_persistent_buffers) then - neighbor_comm_handle%persistent_in_flight = .false. + ! nothing to wait/scatter end if - ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & neighbor_comm_handle%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) - ! Clean up if ((.not. neighbor_comm_handle%use_persistent_buffers) .or. & @@ -1259,7 +1314,23 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in buffer_size = topology_total_send + topology_total_recv if (neighbor_comm_handle%use_persistent_buffers) then - if ((.not.allocated(y%combuf)) .or. (size(y%combuf) < buffer_size)) then + if (.not. allocated(y%combuf)) then + neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then diff --git a/test/comm/.gitignore b/test/comm/.gitignore new file mode 100644 index 000000000..a899a643e --- /dev/null +++ b/test/comm/.gitignore @@ -0,0 +1,3 @@ +**/massif/* +**/**/massif/* +*.kcg \ No newline at end of file diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index c56c568a4..7d9496906 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -4,6 +4,7 @@ program psb_comm_cg_test use psb_linsolve_mod use psb_comm_factory_mod use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle + use, intrinsic :: ieee_arithmetic implicit none @@ -32,17 +33,16 @@ program psb_comm_cg_test character(len=20) :: prec_name(n_precs) character(len=5) :: afmt character(len=256) :: arg - logical :: prec_ready logical :: setup_done info = psb_success_ - prec_ready = .false. afmt = 'CSR' idim = 40 itmax = 1000 nrep = 5 nwarm = 1 - itrace = 0 + ! Keep itrace positive to avoid modulo-by-zero paths in convergence logging. + itrace = 1 istop = 2 eps = 1.d-6 scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & @@ -87,6 +87,15 @@ program psb_comm_cg_test info = psb_success_ end if end if + ! call psb_set_debug_level(psb_debug_ext_) + + + ! call probe_ieee('before psb_init') + call psb_init(ctxt) + ! call probe_ieee('after psb_init') + ! call clear_ieee_flags() + ! call probe_ieee('after clear_ieee_flags') + call psb_info(ctxt, iam, np) allocate(setup_time(n_precs,n_schemes,nrep), solve_time(n_precs,n_schemes,nrep), & & total_time(n_precs,n_schemes,nrep), final_error(n_precs,n_schemes,nrep), & @@ -96,9 +105,6 @@ program psb_comm_cg_test & comm_set_time(n_precs,n_schemes,nrep), krylov_time(n_precs,n_schemes,nrep), stat=info) if (info /= psb_success_) stop 1 - call psb_init(ctxt) - call psb_info(ctxt, iam, np) - if (iam == psb_root_) then write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ write(psb_out_unit,*) 'This is the comm/cg test program' @@ -116,59 +122,53 @@ program psb_comm_cg_test call psb_barrier(ctxt) t_start = psb_wtime() + ! call probe_ieee('before psb_d_gen_pde3d') call psb_d_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) + ! call probe_ieee('after psb_d_gen_pde3d') if (info /= psb_success_) goto 9999 do prec_idx = 1, n_precs do scheme_idx = 1, n_schemes - setup_done = .false. do rep = 1, nrep call psb_geaxpby(dzero,b,dzero,x,desc_a,info) if (info /= psb_success_) goto 9999 - if (.not. setup_done) then - call psb_barrier(ctxt) - t_start = psb_wtime() - call prec%init(ctxt,trim(prec_type(prec_idx)),info) - if (info /= psb_success_) goto 9999 - prec_init_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start - call psb_amx(ctxt,prec_init_time(prec_idx,scheme_idx,rep)) + call psb_barrier(ctxt) - t_start = psb_wtime() - call psb_precbld(a,desc_a,prec,info) - if (info /= psb_success_) goto 9999 - prec_bld_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start - call psb_amx(ctxt,prec_bld_time(prec_idx,scheme_idx,rep)) + t_start = psb_wtime() + call prec%init(ctxt,trim(prec_type(prec_idx)),info) + if (info /= psb_success_) goto 9999 - if (.not.allocated(prec%prec)) then - info = psb_err_internal_error_ - write(psb_err_unit,*) 'Preconditioner object not allocated after build' - goto 9999 - end if + prec_init_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_init_time(prec_idx,scheme_idx,rep)) - t_start = psb_wtime() - call psb_comm_set(scheme_type(scheme_idx),x%v%comm_handle,info) - comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start - call psb_amx(ctxt,comm_set_time(prec_idx,scheme_idx,rep)) + t_start = psb_wtime() + call prec%build(a,desc_a,info) + if (info /= psb_success_) goto 9999 + prec_bld_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_bld_time(prec_idx,scheme_idx,rep)) - if (info /= psb_success_) goto 9999 - if (.not.allocated(prec%prec)) then - info = psb_err_internal_error_ - write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' - goto 9999 - end if - - setup_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,rep) + & - & prec_bld_time(prec_idx,scheme_idx,rep) + comm_set_time(prec_idx,scheme_idx,rep) - setup_done = .true. - prec_ready = .true. - else - prec_init_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,1) - prec_bld_time(prec_idx,scheme_idx,rep) = prec_bld_time(prec_idx,scheme_idx,1) - comm_set_time(prec_idx,scheme_idx,rep) = comm_set_time(prec_idx,scheme_idx,1) - setup_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,1) + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object not allocated after build' + goto 9999 end if + t_start = psb_wtime() + call psb_comm_set(scheme_type(scheme_idx),x%v%comm_handle,info) + comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,comm_set_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' + goto 9999 + end if + + setup_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,rep) + & + & prec_bld_time(prec_idx,scheme_idx,rep) + comm_set_time(prec_idx,scheme_idx,rep) + do iter = 1, nwarm call psb_geaxpby(dzero,b,dzero,x,desc_a,info) if (info /= psb_success_) goto 9999 @@ -181,24 +181,34 @@ program psb_comm_cg_test if (info /= psb_success_) goto 9999 call psb_barrier(ctxt) - if (.not.allocated(prec%prec)) then - info = psb_err_internal_error_ - write(psb_err_unit,*) 'Preconditioner object lost before psb_krylov' - goto 9999 - end if t_start = psb_wtime() call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) krylov_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start call psb_amx(ctxt,krylov_time(prec_idx,scheme_idx,rep)) + if (info /= psb_success_) goto 9999 + + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost before psb_krylov' + goto 9999 + end if + + call prec%free(info) + if (info /= psb_success_) goto 9999 + solve_time(prec_idx,scheme_idx,rep) = krylov_time(prec_idx,scheme_idx,rep) total_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,rep) + & & solve_time(prec_idx,scheme_idx,rep) iter_count(prec_idx,scheme_idx,rep) = iter - iter_denom = real(max(iter,1_psb_ipk_),psb_dpk_) - krylov_it_time(prec_idx,scheme_idx,rep) = solve_time(prec_idx,scheme_idx,rep)/iter_denom - total_it_time(prec_idx,scheme_idx,rep) = total_time(prec_idx,scheme_idx,rep)/iter_denom + iter_denom = real(max(iter,1_psb_ipk_),psb_dpk_) + krylov_it_time(prec_idx,scheme_idx,rep) = solve_time(prec_idx,scheme_idx,rep)/iter_denom + total_it_time(prec_idx,scheme_idx,rep) = total_time(prec_idx,scheme_idx,rep)/iter_denom final_error(prec_idx,scheme_idx,rep) = err solve_info(prec_idx,scheme_idx,rep) = info @@ -219,12 +229,6 @@ program psb_comm_cg_test if (info /= psb_success_) goto 9999 end do - - if (prec_ready) then - call psb_precfree(prec,info) - if (info /= psb_success_) goto 9999 - prec_ready = .false. - end if end do end do @@ -303,7 +307,7 @@ program psb_comm_cg_test call psb_gefree(b,desc_a,info) call psb_gefree(x,desc_a,info) call psb_spfree(a,desc_a,info) - if (prec_ready) call psb_precfree(prec,info) + call psb_precfree(prec,info) call psb_cdfree(desc_a,info) deallocate(setup_time,solve_time,total_time,final_error,iter_count,solve_info, & & prec_init_time,prec_bld_time,comm_set_time,krylov_time, & @@ -325,7 +329,8 @@ contains do i = 2, size(v) key = v(i) j = i - 1 - do while ((j >= 1).and.(v(j) > key)) + do while (j >= 1) + if (v(j) <= key) exit v(j+1) = v(j) j = j - 1 end do @@ -428,6 +433,28 @@ contains end if end function gfun + subroutine probe_ieee(where) + character(len=*), intent(in) :: where + logical :: invalid_flag, divzero_flag, overflow_flag, underflow_flag + + call ieee_get_flag(ieee_invalid, invalid_flag) + call ieee_get_flag(ieee_divide_by_zero, divzero_flag) + call ieee_get_flag(ieee_overflow, overflow_flag) + call ieee_get_flag(ieee_underflow, underflow_flag) + + if (invalid_flag .or. divzero_flag .or. overflow_flag .or. underflow_flag) then + write(psb_out_unit,'("IEEE probe [",a,"] invalid=",l1,", div0=",l1,", overflow=",l1,", underflow=",l1)') & + trim(where), invalid_flag, divzero_flag, overflow_flag, underflow_flag + end if + end subroutine probe_ieee + + subroutine clear_ieee_flags() + call ieee_set_flag(ieee_invalid, .false.) + call ieee_set_flag(ieee_divide_by_zero, .false.) + call ieee_set_flag(ieee_overflow, .false.) + call ieee_set_flag(ieee_underflow, .false.) + end subroutine clear_ieee_flags + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info) implicit none integer(psb_ipk_), intent(in) :: idim @@ -458,13 +485,55 @@ contains call psb_info(ctxt, iam, np) + if (idim <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='idim must be > 0') + goto 9999 + end if + if (np <= 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: np <= 0') + goto 9999 + end if + if (iam < 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: iam < 0') + goto 9999 + end if + deltah = done/(idim+2) sqdeltah = deltah*deltah deltah2 = 2.d0*deltah + if (abs(deltah) <= tiny(deltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah ~ 0') + goto 9999 + end if + if (abs(sqdeltah) <= tiny(sqdeltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: sqdeltah ~ 0') + goto 9999 + end if + if (abs(deltah2) <= tiny(deltah2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah2 ~ 0') + goto 9999 + end if + m = idim*idim*idim n = m + if (n <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid global size: n <= 0') + goto 9999 + end if nnz = ((n*9)/(np)) + if (nnz <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid local nnz estimate: nnz <= 0') + goto 9999 + end if if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n nt = (m+np-1)/np @@ -481,8 +550,11 @@ contains call psb_barrier(ctxt) t0 = psb_wtime() + ! call probe_ieee('enter psb_cdall') call psb_cdall(ctxt,desc_a,info,nl=nr) + ! call probe_ieee('after psb_cdall') if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! call probe_ieee('after psb_spall') if (info == psb_success_) call psb_geall(xv,desc_a,info) if (info == psb_success_) call psb_geall(bv,desc_a,info) call psb_barrier(ctxt) @@ -592,12 +664,30 @@ contains end do call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) - if(info /= psb_success_) exit + ! call probe_ieee('after psb_spins') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_spins, ii=",i0,", ib=",i0,", icoeff=",i0)') & + iam, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) - if(info /= psb_success_) exit + ! call probe_ieee('after psb_geins bv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins bv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + iam, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if zt(:)=dzero call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) - if(info /= psb_success_) exit + ! call probe_ieee('after psb_geins xv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins xv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + iam, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if end do tgen = psb_wtime()-t1 @@ -612,12 +702,16 @@ contains call psb_barrier(ctxt) t1 = psb_wtime() + ! call probe_ieee('before psb_cdasb') call psb_cdasb(desc_a,info) + ! call probe_ieee('after psb_cdasb') tcdasb = psb_wtime()-t1 call psb_barrier(ctxt) t1 = psb_wtime() + ! call probe_ieee('before psb_spasb') if (info == psb_success_) call psb_spasb(a,desc_a,info,afmt=afmt) + ! call probe_ieee('after psb_spasb') call psb_barrier(ctxt) if(info /= psb_success_) then info=psb_err_from_subroutine_ diff --git a/test/comm/spmv/Makefile b/test/comm/spmv/Makefile index a8a5f8fb9..1555f0065 100644 --- a/test/comm/spmv/Makefile +++ b/test/comm/spmv/Makefile @@ -1,4 +1,4 @@ -INSTALLDIR=../.. +INSTALLDIR=../../.. INCDIR=$(INSTALLDIR)/include/ MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas diff --git a/test/comm/swapdata/Makefile b/test/comm/swapdata/Makefile index fe64c4a4e..988410d28 100644 --- a/test/comm/swapdata/Makefile +++ b/test/comm/swapdata/Makefile @@ -1,4 +1,4 @@ -INSTALLDIR=../.. +INSTALLDIR=../../.. INCDIR=$(INSTALLDIR)/include/ MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas diff --git a/test/comm/swapdata/psb_comm_test.F90 b/test/comm/swapdata/psb_comm_test.F90 index fba352219..25b4e22bb 100644 --- a/test/comm/swapdata/psb_comm_test.F90 +++ b/test/comm/swapdata/psb_comm_test.F90 @@ -52,6 +52,7 @@ program psb_comm_test ! ---- error / reporting ---- integer(psb_ipk_) :: n_pass, n_total, imode + logical :: run_baseline, run_neighbor, run_persistent logical :: comm_ok real(psb_dpk_) :: err, tol real(psb_dpk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent @@ -94,6 +95,26 @@ program psb_comm_test end if end do + run_baseline = .false. + run_neighbor = .false. + run_persistent = .false. + select case (trim(adjustl(mode))) + case ('both','all') + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + case ('baseline') + run_baseline = .true. + case ('neighbor') + run_neighbor = .true. + case ('persistent','persistent_neighbor','persistent-neighbor') + run_persistent = .true. + case default + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + end select + if (idim <= 0) then write(*,*) 'Invalid dimension specified. Usage: --dim ' call psb_abort(ctxt) @@ -190,154 +211,132 @@ program psb_comm_test ! ================================================================== ! 6. Baseline halo exchange (Isend/Irecv in one call) ! ================================================================== - ! v_baseline%v is a psb_d_base_vect_type - call psi_swapdata( & - swap_status=psb_comm_status_start_, & - beta=dzero, & - y=v_baseline%v, & - desc_a=desc_a, & - info=info, & - data=psb_comm_halo_) - if (info /= psb_success_) then - write(psb_err_unit,*) my_rank, 'baseline swap error:', info - call psb_abort(ctxt) - end if - - call psi_swapdata( & - swap_status=psb_comm_status_wait_, & + if (run_baseline) then + call psi_swapdata( & + swap_status=psb_comm_status_start_, & beta=dzero, & y=v_baseline%v, & desc_a=desc_a, & info=info, & data=psb_comm_halo_) - if (info /= psb_success_) then - write(psb_err_unit,*) my_rank, 'baseline swap error:', info - call psb_abort(ctxt) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata( & + swap_status=psb_comm_status_wait_, & + beta=dzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if end if ! ================================================================== ! 7. Neighbor topology halo exchange (start + wait) ! ================================================================== - call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) - if (info /= 0) then - write(psb_err_unit,*) my_rank, 'psb_comm_set neighbor error:', info - call psb_abort(ctxt) - end if - call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - if (info /= psb_success_) then - write(psb_err_unit,*) my_rank, 'neighbor start error:', info - call psb_abort(ctxt) - end if + if (run_neighbor) then + call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set neighbor error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor start error:', info + call psb_abort(ctxt) + end if - call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - if (info /= psb_success_) then - write(psb_err_unit,*) my_rank, 'neighbor wait error:', info - call psb_abort(ctxt) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor wait error:', info + call psb_abort(ctxt) + end if end if ! ================================================================== ! 7b. Persistent-neighbor halo exchange (start + wait) ! ================================================================== - call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) - if (info /= 0) then - write(psb_err_unit,*) my_rank, 'psb_comm_set persistent-neighbor error:', info - call psb_abort(ctxt) - end if - call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - if (info /= psb_success_) then - write(psb_err_unit,*) my_rank, 'persistent-neighbor start error:', info - call psb_abort(ctxt) - end if - call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - if (info /= psb_success_) then - write(psb_err_unit,*) my_rank, 'persistent-neighbor wait error:', info - call psb_abort(ctxt) + if (run_persistent) then + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor wait error:', info + call psb_abort(ctxt) + end if end if ! ================================================================== ! 8. Performance: repeat exchanges and measure timings ! ================================================================== if (my_rank == 0) then - write(psb_out_unit,'("Timing: running ",i0," iterations for baseline, neighbor and persistent-neighbor")') iters + write(psb_out_unit,'("Timing: running ",i0," iterations for selected exchange mode(s)")') iters end if tsum_baseline = 0.0_psb_dpk_ tsum_neighbor = 0.0_psb_dpk_ tsum_neighbor_persistent = 0.0_psb_dpk_ - call psb_comm_set(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) - call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) - call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) - - ! ---- Comm check: verify selected communication schemes ---- - n_total = n_total + 1 - comm_ok = allocated(v_baseline%v%comm_handle) .and. allocated(v_neighbor%v%comm_handle) .and. & - & allocated(v_neighbor_persistent%v%comm_handle) - - if (comm_ok) then - comm_ok = (v_baseline%v%comm_handle%comm_type == psb_comm_isend_irecv_) .and. & - & (v_neighbor%v%comm_handle%comm_type == psb_comm_ineighbor_alltoallv_) .and. & - & (v_neighbor_persistent%v%comm_handle%comm_type == psb_comm_persistent_ineighbor_alltoallv_) - end if - - if (my_rank == 0) then - if (comm_ok) then - write(psb_out_unit,'(" [PASS] comm scheme selection : baseline/neighbor/persistent OK")') - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] comm scheme selection : unexpected comm_type mapping")') - end if - end if - do i = 1, iters - ! baseline timing - t0 = psb_wtime() - call psi_swapdata( & - swap_status=psb_comm_status_start_, & - beta=dzero, & - y=v_baseline%v, & - desc_a=desc_a, & - info=info, & - data=psb_comm_halo_) - call psi_swapdata( & - swap_status=psb_comm_status_wait_, & - beta=dzero, & - y=v_baseline%v, & - desc_a=desc_a, & - info=info, & - data=psb_comm_halo_) - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - tsum_baseline = tsum_baseline + dt + if (run_baseline) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_baseline = tsum_baseline + dt + end if - ! neighbor timing (start + wait) - t0 = psb_wtime() - call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - tsum_neighbor = tsum_neighbor + dt + if (run_neighbor) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor = tsum_neighbor + dt + end if - ! persistent-neighbor timing (start + wait) - t0 = psb_wtime() - call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - tsum_neighbor_persistent = tsum_neighbor_persistent + dt + if (run_persistent) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor_persistent = tsum_neighbor_persistent + dt + end if end do if (my_rank == 0) then - write(psb_out_unit,'(" Avg baseline time : ",es12.5)') (tsum_baseline / real(iters,psb_dpk_)) - write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline - write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') (tsum_neighbor / real(iters,psb_dpk_)) - write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor - write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') (tsum_neighbor_persistent / real(iters,psb_dpk_)) - write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_neighbor_persistent + if (run_baseline) then + write(psb_out_unit,'(" Avg baseline time : ",es12.5)') (tsum_baseline / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline + end if + if (run_neighbor) then + write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') (tsum_neighbor / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor + end if + if (run_persistent) then + write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') (tsum_neighbor_persistent / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_neighbor_persistent + end if end if ! ================================================================== @@ -347,113 +346,121 @@ program psb_comm_test result_neighbor = v_neighbor%get_vect() result_persistent = v_neighbor_persistent%get_vect() - ! ---- Test 1: cross-check baseline vs neighbor (all entries) ---- - n_total = n_total + 1 - err = maxval(abs(result_baseline(1:ncol) - result_neighbor(1:ncol))) - call psb_amx(ctxt, err) - if (my_rank == 0) then - if (err < tol) then - write(psb_out_unit,'(" [PASS] cross-check baseline vs neighbor : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] cross-check baseline vs neighbor : err = ",es12.5)') err + if (run_baseline .and. run_neighbor) then + n_total = n_total + 1 + err = maxval(abs(result_baseline(1:ncol) - result_neighbor(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] cross-check baseline vs neighbor : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] cross-check baseline vs neighbor : err = ",es12.5)') err + end if end if end if - ! ---- Test 2: baseline absolute correctness (halo = global index) ---- - n_total = n_total + 1 - err = maxval(abs(result_baseline(1:ncol) - expected(1:ncol))) - call psb_amx(ctxt, err) - if (my_rank == 0) then - if (err < tol) then - write(psb_out_unit,'(" [PASS] baseline absolute correctness : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] baseline absolute correctness : err = ",es12.5)') err + if (run_baseline) then + n_total = n_total + 1 + err = maxval(abs(result_baseline(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] baseline absolute correctness : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] baseline absolute correctness : err = ",es12.5)') err + end if end if end if - ! ---- Test 3: neighbor absolute correctness (halo = global index) ---- - n_total = n_total + 1 - err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) - call psb_amx(ctxt, err) - if (my_rank == 0) then - if (err < tol) then - write(psb_out_unit,'(" [PASS] neighbor absolute correctness : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] neighbor absolute correctness : err = ",es12.5)') err + if (run_neighbor) then + n_total = n_total + 1 + err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] neighbor absolute correctness : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] neighbor absolute correctness : err = ",es12.5)') err + end if end if end if - ! ---- Test 4: cross-check baseline vs persistent-neighbor (all entries) ---- - n_total = n_total + 1 - err = maxval(abs(result_baseline(1:ncol) - result_persistent(1:ncol))) - call psb_amx(ctxt, err) - if (my_rank == 0) then - if (err < tol) then - write(psb_out_unit,'(" [PASS] cross-check baseline vs pers-nei : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] cross-check baseline vs pers-nei : err = ",es12.5)') err + if (run_baseline .and. run_persistent) then + n_total = n_total + 1 + err = maxval(abs(result_baseline(1:ncol) - result_persistent(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] cross-check baseline vs pers-nei : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] cross-check baseline vs pers-nei : err = ",es12.5)') err + end if end if end if - ! ---- Test 5: persistent-neighbor absolute correctness ---- - n_total = n_total + 1 - err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) - call psb_amx(ctxt, err) - if (my_rank == 0) then - if (err < tol) then - write(psb_out_unit,'(" [PASS] pers-neigh absolute correctness : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] pers-neigh absolute correctness : err = ",es12.5)') err + if (run_persistent) then + n_total = n_total + 1 + err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] pers-neigh absolute correctness : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] pers-neigh absolute correctness : err = ",es12.5)') err + end if end if end if - ! ---- Test 6: repeat neighbor exchange (topology reuse) ---- - ! Reset halo entries to zero, run again, and check - do i = nrow+1, ncol - result_neighbor(i) = dzero - end do - call v_neighbor%set_vect(result_neighbor) + if (run_neighbor) then + ! ---- Test 6: repeat neighbor exchange (topology reuse) ---- + do i = nrow+1, ncol + result_neighbor(i) = dzero + end do + call v_neighbor%set_vect(result_neighbor) - call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - result_neighbor = v_neighbor%get_vect() - n_total = n_total + 1 - err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) - call psb_amx(ctxt, err) - if (my_rank == 0) then - if (err < tol) then - write(psb_out_unit,'(" [PASS] neighbor topology reuse : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] neighbor topology reuse : err = ",es12.5)') err + result_neighbor = v_neighbor%get_vect() + n_total = n_total + 1 + err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] neighbor topology reuse : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] neighbor topology reuse : err = ",es12.5)') err + end if end if end if - ! ---- Test 7: repeat persistent-neighbor exchange (buffer reuse) ---- - do i = nrow+1, ncol - result_persistent(i) = dzero - end do - call v_neighbor_persistent%set_vect(result_persistent) + if (run_persistent) then + ! ---- Test 7: repeat persistent-neighbor exchange (buffer reuse) ---- + do i = nrow+1, ncol + result_persistent(i) = dzero + end do + call v_neighbor_persistent%set_vect(result_persistent) - call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - result_persistent = v_neighbor_persistent%get_vect() - n_total = n_total + 1 - err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) - call psb_amx(ctxt, err) - if (my_rank == 0) then - if (err < tol) then - write(psb_out_unit,'(" [PASS] pers-neigh buffer reuse : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] pers-neigh buffer reuse : err = ",es12.5)') err + result_persistent = v_neighbor_persistent%get_vect() + n_total = n_total + 1 + err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) + call psb_amx(ctxt, err) + if (my_rank == 0) then + if (err < tol) then + write(psb_out_unit,'(" [PASS] pers-neigh buffer reuse : err = ",es12.5)') err + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] pers-neigh buffer reuse : err = ",es12.5)') err + end if end if end if From 19ffaaa9156f5b4d0ee774936ca15acd119b451d Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 15 Apr 2026 09:06:56 +0200 Subject: [PATCH 158/175] Update dependencies for i2_vect_mod --- base/modules/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/modules/Makefile b/base/modules/Makefile index ab164d8c3..eb8ad7bff 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -297,8 +297,8 @@ serial/psb_z_csc_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_lz_csr_mat_mod. serial/psb_mat_mod.o: serial/psb_vect_mod.o serial/psb_s_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_mat_mod.o serial/psb_serial_mod.o: serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o auxil/psi_serial_mod.o -serial/psb_i2_vect_mod.o: serial/psb_i2_base_vect_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o: serial/psb_i_base_vect_mod.o +serial/psb_i2_vect_mod.o: serial/psb_i2_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_vect_mod.o: serial/psb_l_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_s_vect_mod.o: serial/psb_s_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_d_vect_mod.o: serial/psb_d_base_vect_mod.o serial/psb_i_vect_mod.o From 3f83bc2918a9659ae3b6b05ae9136d20f6791a78 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Thu, 16 Apr 2026 14:58:05 +0200 Subject: [PATCH 159/175] Improve psb_exit handling of MPI communicators --- base/modules/penv/psi_penv_mod.F90 | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/base/modules/penv/psi_penv_mod.F90 b/base/modules/penv/psi_penv_mod.F90 index 1e4d12281..425a81793 100644 --- a/base/modules/penv/psi_penv_mod.F90 +++ b/base/modules/penv/psi_penv_mod.F90 @@ -1035,6 +1035,8 @@ contains ! !$ call psb_error(ctxt) ! !$ endif ! !$ endif + if (close_) call psb_clear_vect_defaults() + if (close_) call psb_clear_mat_defaults() #if defined(PSB_SERIAL_MPI) ! Under serial mode, CLOSE has no effect, but reclaim ! the used ctxt number. @@ -1045,12 +1047,6 @@ contains else call psb_close_context(psb_mesg_queue,ctxt) end if - !if ((ctxt /= mpi_comm_null).and.(ctxt /= mpi_comm_world)) then - if (allocated(ctxt%ctxt)) then - !write(0,*) ctxt%ctxt,mpi_comm_world,mpi_comm_null - if ((ctxt%ctxt /= mpi_comm_world).and.(ctxt%ctxt /= mpi_comm_null)) & - & call mpi_comm_Free(ctxt%ctxt,info) - end if if (close_) then if (info == 0) call mpi_op_free(mpi_i2amx_op,info) if (info == 0) call mpi_op_free(mpi_i2amn_op,info) @@ -1069,12 +1065,16 @@ contains if (info == 0) call mpi_op_free(mpi_snrm2_op,info) if (info == 0) call mpi_op_free(mpi_dnrm2_op,info) end if + if (allocated(ctxt%ctxt)) then +!!$ write(0,*) ctxt%ctxt,mpi_comm_world,mpi_comm_null,mpi_comm_self + if ((ctxt%ctxt /= mpi_comm_world).and.(ctxt%ctxt /= mpi_comm_null).and.& + & (ctxt%ctxt /= mpi_comm_self)) & + & call mpi_comm_Free(ctxt%ctxt,info) + end if if (close_) call mpi_finalize(info) #endif - if (close_) call psb_clear_vect_defaults() - if (close_) call psb_clear_mat_defaults() end subroutine psb_exit_mpik From fcae4a16338146ae46ef699cc2df0aacf606429f Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Sun, 19 Apr 2026 00:11:45 +0200 Subject: [PATCH 160/175] [UPDATE] Transient version usefull for debug on local server --- base/comm/internals/psi_dswapdata.F90 | 318 +++++++++++++++++++-- linsolve/impl/psb_dcg.F90 | 5 + test/comm/cg/psb_comm_cg_test.F90 | 48 ++-- test/comm/spmv/psb_spmv_overlap_sbatch.sh | 50 ++++ test/comm/spmv/psb_spmv_overlap_test.f90 | 234 +++++++++++---- test/comm/swapdata/psb_comm_test.F90 | 126 ++++++-- test/comm/swapdata/psb_comm_test_sbatch.sh | 62 ++++ 7 files changed, 723 insertions(+), 120 deletions(-) create mode 100644 test/comm/spmv/psb_spmv_overlap_sbatch.sh create mode 100644 test/comm/swapdata/psb_comm_test_sbatch.sh diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 5d8b8ff36..6c0262dda 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -82,8 +82,61 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod + use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ use psb_comm_factory_mod + + logical, save :: psb_swap_timing_inited = .false. + logical, save :: psb_swap_timing_enabled = .false. + integer(psb_ipk_), save :: psb_swap_timing_max_report = 32 + integer(psb_ipk_), save :: psb_swap_timing_report_count = 0 + integer(psb_ipk_), save :: psb_swap_timing_wrapper_calls = 0 + integer(psb_ipk_), save :: psb_swap_timing_baseline_calls = 0 + integer(psb_ipk_), save :: psb_swap_timing_neighbor_calls = 0 + contains + + subroutine psb_swap_timing_setup() + implicit none + character(len=64) :: env_buf + integer(psb_ipk_) :: env_len, env_status, ios + + if (psb_swap_timing_inited) return + + psb_swap_timing_inited = .true. + psb_swap_timing_enabled = .false. + psb_swap_timing_max_report = 32 + + call get_environment_variable('PSB_SWAP_TIMING', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + select case(env_buf(1:1)) + case('1','t','T','y','Y') + psb_swap_timing_enabled = .true. + case default + psb_swap_timing_enabled = .false. + end select + end if + + call get_environment_variable('PSB_SWAP_TIMING_MAX_REPORT', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) psb_swap_timing_max_report + if ((ios /= 0) .or. (psb_swap_timing_max_report < 1)) psb_swap_timing_max_report = 32 + end if + + end subroutine psb_swap_timing_setup + + logical function psb_swap_timing_should_report() + implicit none + + call psb_swap_timing_setup() + + psb_swap_timing_should_report = .false. + if (.not. psb_swap_timing_enabled) return + if (psb_swap_timing_report_count >= psb_swap_timing_max_report) return + + psb_swap_timing_report_count = psb_swap_timing_report_count + 1 + psb_swap_timing_should_report = .true. + end function psb_swap_timing_should_report + module subroutine psi_dswapdata_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD @@ -103,8 +156,14 @@ contains ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_ class(psb_i_base_vect_type), pointer :: comm_indexes + logical :: debug_on + integer(psb_ipk_) :: dbg_unit + logical :: timing_on, timing_report + real(psb_dpk_) :: t0, t1, t_get_list, t_kernel, t_total + integer(psb_ipk_) :: call_idx + character(len=24) :: phase_name, scheme_name, exchange_name ! communication scheme/status selectors logical :: baseline, neighbor_a2av @@ -126,6 +185,26 @@ contains goto 9999 endif + debug_on = (psb_get_debug_level() >= psb_debug_ext_) + call psb_swap_timing_setup() + timing_on = psb_swap_timing_enabled + timing_report = .false. + if (timing_on) then + t_get_list = dzero + t_kernel = dzero + t_total = dzero + t0 = psb_wtime() + call_idx = psb_swap_timing_wrapper_calls + 1 + end if + + if (debug_on) then + dbg_unit = psb_get_debug_unit() + if (dbg_unit <= 0) dbg_unit = psb_err_unit + write(dbg_unit,*) me, trim(name), ': enter swap_status=', swap_status, & + & ' data=', data_, ' local_rows=', desc_a%get_local_rows(), & + & ' local_cols=', desc_a%get_local_cols(), ' y_nrows=', y%get_nrows() + end if + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) @@ -138,17 +217,19 @@ contains data_ = psb_comm_halo_ end if + if (timing_on) t1 = psb_wtime() call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (timing_on) t_get_list = psb_wtime() - t1 if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - ! Debug: report list sizes - ! if(me == 0) then - ! write(psb_err_unit,*) me, 'DBG: get_list_p -> num_neighbors=', & - ! & num_neighbors, ' total_send=', total_send, ' total_recv=', total_recv - ! end if + if (debug_on) then + write(dbg_unit,*) me, trim(name), ': list_p num_neighbors=', num_neighbors, & + & ' total_send=', total_send, ' total_recv=', total_recv, & + & ' comm_indexes_size=', size(comm_indexes%v) + end if if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& @@ -181,6 +262,11 @@ contains goto 9999 end if + if (debug_on) then + write(dbg_unit,*) me, trim(name), ': comm_type=', y%comm_handle%comm_type, & + & ' swap_status=', swap_status + end if + ! if(me == 0) then ! write(psb_err_unit,*) me, 'DBG: after set_swap_status, info=', info ! end if @@ -199,14 +285,18 @@ contains ! end if if (baseline) then + if (timing_on) t1 = psb_wtime() call psi_dswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (timing_on) t_kernel = psb_wtime() - t1 if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if else if (neighbor_a2av) then + if (timing_on) t1 = psb_wtime() call psi_dswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& & total_send,total_recv,y%comm_handle,info) + if (timing_on) t_kernel = psb_wtime() - t1 if (info /= psb_success_) then call psb_errpush(info,name,a_err='neighbor a2av swap') goto 9999 @@ -217,6 +307,45 @@ contains goto 9999 end if + if (timing_on) then + t_total = psb_wtime() - t0 + call psb_amx(ctxt, t_get_list) + call psb_amx(ctxt, t_kernel) + call psb_amx(ctxt, t_total) + if (me == psb_root_) timing_report = psb_swap_timing_should_report() + if ((me == psb_root_) .and. timing_report) then + psb_swap_timing_wrapper_calls = call_idx + select case(swap_status) + case(psb_comm_status_start_) + phase_name = 'start' + case(psb_comm_status_wait_) + phase_name = 'wait' + case(psb_comm_status_sync_) + phase_name = 'sync' + case default + phase_name = 'unknown' + end select + if (baseline) then + scheme_name = 'baseline' + else + if (y%comm_handle%comm_type == psb_comm_persistent_ineighbor_alltoallv_) then + scheme_name = 'persistent_neighbor' + else + scheme_name = 'neighbor' + end if + end if + if (call_idx == 1) then + exchange_name = 'first' + else + exchange_name = 'steady' + end if + write(psb_out_unit,'("SWAP_TIMING wrapper scheme=",a,", phase=",a,", exchange=",a,", call=",i0)') & + & trim(scheme_name), trim(phase_name), trim(exchange_name), call_idx + write(psb_out_unit,'(" get_list=",es12.5,", kernel=",es12.5,", total=",es12.5)') & + & t_get_list, t_kernel, t_total + end if + end if + call psb_erractionrestore(err_act) return @@ -253,8 +382,15 @@ contains integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti, n logical :: do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. + logical, parameter :: usersend=.false. + logical :: debug + logical :: timing_on, timing_report + integer(psb_ipk_) :: dbg_unit character(len=20) :: name + real(psb_dpk_) :: t0, t1 + real(psb_dpk_) :: t_buf, t_gth, t_post, t_wait, t_sct, t_dev, t_total + integer(psb_ipk_) :: call_idx + character(len=12) :: exchange_name info = psb_success_ name = 'psi_dswap_baseline_vect' @@ -268,6 +404,24 @@ contains icomm = ctxt%get_mpic() + debug = (psb_get_debug_level() >= psb_debug_ext_) + call psb_swap_timing_setup() + timing_on = psb_swap_timing_enabled + timing_report = .false. + if (timing_on) then + t_buf = dzero + t_gth = dzero + t_post = dzero + t_wait = dzero + t_sct = dzero + t_dev = dzero + t_total = dzero + t0 = psb_wtime() + call_idx = psb_swap_timing_baseline_calls + 1 + end if + dbg_unit = psb_get_debug_unit() + if (dbg_unit <= 0) dbg_unit = psb_err_unit + baseline_comm_handle => null() select type(ch => comm_handle) type is(psb_comm_baseline_handle) @@ -292,7 +446,7 @@ contains total_send_ = total_send * n call comm_indexes%sync() - if (debug) write(*,*) me,'Internal buffer' + if (debug) write(dbg_unit,*) me,'Internal buffer' if (do_send) then if (allocated(baseline_comm_handle%comid)) then if (any(baseline_comm_handle%comid /= mpi_request_null)) then @@ -304,13 +458,16 @@ contains goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' + if (debug) write(dbg_unit,*) me,'do_send start' + if (timing_on) t1 = psb_wtime() call y%new_buffer(ione*size(comm_indexes%v),info) call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) + if (timing_on) t_buf = t_buf + (psb_wtime() - t1) ! First I post all the non blocking receives pnti = 1 + if (timing_on) t1 = psb_wtime() do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -319,7 +476,7 @@ contains rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + if (debug) write(dbg_unit,*) me,'Posting receive from',prcid(i),rcv_pt p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),nerv,& & psb_mpi_r_dpk_,prcid(i),& @@ -327,11 +484,13 @@ contains end if pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' Gather ' + if (timing_on) t_post = t_post + (psb_wtime() - t1) + if (debug) write(dbg_unit,*) me,' Gather ' ! ! Then gather for sending. ! pnti = 1 + if (timing_on) t1 = psb_wtime() do i=1, num_neighbors nerv = comm_indexes%v(pnti+psb_n_elem_recv_) nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) @@ -351,13 +510,16 @@ contains call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do + if (timing_on) t_gth = t_gth + (psb_wtime() - t1) ! ! Then wait ! + if (timing_on) t1 = psb_wtime() call y%device_wait() + if (timing_on) t_dev = t_dev + (psb_wtime() - t1) - if (debug) write(*,*) me,' isend' + if (debug) write(dbg_unit,*) me,' isend' ! ! Then send ! @@ -366,6 +528,7 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_double_swap_tag + if (timing_on) t1 = psb_wtime() do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -387,10 +550,11 @@ contains pnti = pnti + nerv + nesd + 3 end do + if (timing_on) t_post = t_post + (psb_wtime() - t1) end if if (do_recv) then - if (debug) write(*,*) me,' do_Recv' + if (debug) write(dbg_unit,*) me,' do_Recv' if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... @@ -401,9 +565,10 @@ contains end if call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' + if (debug) write(dbg_unit,*) me,' wait' pnti = 1 p2ptag = psb_double_swap_tag + if (timing_on) t1 = psb_wtime() do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -438,11 +603,13 @@ contains end if pnti = pnti + nerv + nesd + 3 end do + if (timing_on) t_wait = t_wait + (psb_wtime() - t1) - if (debug) write(*,*) me,' scatter' + if (debug) write(dbg_unit,*) me,' scatter' pnti = 1 snd_pt = 1 rcv_pt = 1 + if (timing_on) t1 = psb_wtime() do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -462,11 +629,12 @@ contains goto 9999 end if - if (debug) write(0,*)me,' Received from: ',prcid(i),& + if (debug) write(dbg_unit,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+nerv-1) call y%sct(rcv_pt,nerv,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do + if (timing_on) t_sct = t_sct + (psb_wtime() - t1) ! ! Waited for everybody, clean up ! @@ -475,9 +643,10 @@ contains ! ! Then wait for device ! - if (debug) write(*,*) me,' wait' + if (debug) write(dbg_unit,*) me,' wait' + if (timing_on) t1 = psb_wtime() call y%device_wait() - if (debug) write(*,*) me,' free buffer' + if (debug) write(dbg_unit,*) me,' free buffer' call y%maybe_free_buffer(info) if (info == 0) then if (allocated(y%comm_handle)) call y%comm_handle%free(info) @@ -486,7 +655,33 @@ contains call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - if (debug) write(*,*) me,' done' + if (timing_on) t_dev = t_dev + (psb_wtime() - t1) + if (debug) write(dbg_unit,*) me,' done' + end if + + if (timing_on) then + t_total = psb_wtime() - t0 + call psb_amx(ctxt, t_buf) + call psb_amx(ctxt, t_gth) + call psb_amx(ctxt, t_post) + call psb_amx(ctxt, t_wait) + call psb_amx(ctxt, t_sct) + call psb_amx(ctxt, t_dev) + call psb_amx(ctxt, t_total) + if (me == psb_root_) timing_report = psb_swap_timing_should_report() + if ((me == psb_root_) .and. timing_report) then + psb_swap_timing_baseline_calls = call_idx + if (call_idx == 1) then + exchange_name = 'first' + else + exchange_name = 'steady' + end if + write(psb_out_unit,'("SWAP_TIMING baseline phase start=",l1,", wait=",l1)') do_send, do_recv + write(psb_out_unit,'(" exchange=",a,", call=",i0)') trim(exchange_name), call_idx + write(psb_out_unit,'(" buf=",es12.5,", gth=",es12.5,", post=",es12.5,", wait=",es12.5)') & + & t_buf, t_gth, t_post, t_wait + write(psb_out_unit,'(" sct=",es12.5,", dev=",es12.5,", total=",es12.5)') t_sct, t_dev, t_total + end if end if @@ -526,8 +721,14 @@ contains type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait - logical, parameter :: debug = .false. + logical :: debug + logical :: timing_on, timing_report + integer(psb_ipk_) :: dbg_unit character(len=30) :: name + real(psb_dpk_) :: t0, t1 + real(psb_dpk_) :: t_topo, t_buf, t_gth, t_init, t_post, t_wait, t_sct, t_dev, t_total + integer(psb_ipk_) :: call_idx + character(len=12) :: exchange_name info = psb_success_ @@ -541,6 +742,25 @@ contains endif icomm = ctxt%get_mpic() + dbg_unit = psb_get_debug_unit() + if (dbg_unit <= 0) dbg_unit = psb_err_unit + debug = (psb_get_debug_level() >= psb_debug_ext_) + call psb_swap_timing_setup() + timing_on = psb_swap_timing_enabled + timing_report = .false. + if (timing_on) then + t_topo = dzero + t_buf = dzero + t_gth = dzero + t_init = dzero + t_post = dzero + t_wait = dzero + t_sct = dzero + t_dev = dzero + t_total = dzero + t0 = psb_wtime() + call_idx = psb_swap_timing_neighbor_calls + 1 + end if neighbor_comm_handle => null() select type(ch => comm_handle) @@ -567,7 +787,7 @@ contains ! START phase: build topology (if needed), gather, post MPI ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if(debug) write(dbg_unit,*) me,' nbr_vect: starting data exchange' if (neighbor_comm_handle%use_persistent_buffers) then if (neighbor_comm_handle%persistent_in_flight) then info = psb_err_mpi_error_ @@ -576,8 +796,10 @@ contains end if end if if (.not. neighbor_comm_handle%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology via handle' + if (debug) write(dbg_unit,*) me,' nbr_vect: building topology via handle' + if (timing_on) t1 = psb_wtime() call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (timing_on) t_topo = t_topo + (psb_wtime() - t1) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 @@ -592,6 +814,7 @@ contains buffer_size = topology_total_send + topology_total_recv if (buffer_size > 0) then + if (timing_on) t1 = psb_wtime() if (neighbor_comm_handle%use_persistent_buffers) then if (.not. allocated(y%combuf)) then neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 @@ -633,13 +856,16 @@ contains goto 9999 end if end if + if (timing_on) t_buf = t_buf + (psb_wtime() - t1) neighbor_comm_handle%comm_request = mpi_request_null ! Gather send data into contiguous send buffer (polymorphic for GPU) if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + if (timing_on) t1 = psb_wtime() call y%gth(int(topology_total_send,psb_mpk_), & & neighbor_comm_handle%send_indexes, & & y%combuf(1:topology_total_send)) + if (timing_on) t_gth = t_gth + (psb_wtime() - t1) else ! No data to send/recv: ensure requests/buffers indicate idle state neighbor_comm_handle%comm_request = mpi_request_null @@ -648,7 +874,9 @@ contains end if ! Wait for device (important for GPU subclasses) + if (timing_on) t1 = psb_wtime() call y%device_wait() + if (timing_on) t_dev = t_dev + (psb_wtime() - t1) if (neighbor_comm_handle%use_persistent_buffers) then ! Lazy persistent-init: build the request once, then reuse with START/WAIT. @@ -656,6 +884,7 @@ contains #ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT if (buffer_size > 0) then if (debug) write(*,*) me,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + if (timing_on) t1 = psb_wtime() call mpi_neighbor_alltoallv_init( & & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & @@ -668,6 +897,7 @@ contains & neighbor_comm_handle%graph_comm, & & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) + if (timing_on) t_init = t_init + (psb_wtime() - t1) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -689,7 +919,9 @@ contains #ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT if (buffer_size > 0) then + if (timing_on) t1 = psb_wtime() call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (timing_on) t_post = t_post + (psb_wtime() - t1) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -702,6 +934,7 @@ contains end if #else if (buffer_size > 0) then + if (timing_on) t1 = psb_wtime() call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & @@ -713,6 +946,7 @@ contains & psb_mpi_r_dpk_, & & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) + if (timing_on) t_post = t_post + (psb_wtime() - t1) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -728,6 +962,7 @@ contains ! Post non-blocking neighborhood alltoallv if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then + if (timing_on) t1 = psb_wtime() call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & @@ -739,6 +974,7 @@ contains & psb_mpi_r_dpk_, & & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) + if (timing_on) t_post = t_post + (psb_wtime() - t1) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -788,6 +1024,7 @@ contains if ((topology_total_send + topology_total_recv) > 0) then ! Wait for the non-blocking collective to complete if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + if (timing_on) t1 = psb_wtime() if (neighbor_comm_handle%use_persistent_buffers) then #ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) @@ -797,6 +1034,7 @@ contains else call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) end if + if (timing_on) t_wait = t_wait + (psb_wtime() - t1) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -811,10 +1049,12 @@ contains ! Scatter received data to local vector positions (polymorphic for GPU) if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + if (timing_on) t1 = psb_wtime() call y%sct(int(topology_total_recv,psb_mpk_), & & neighbor_comm_handle%recv_indexes, & & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & & beta) + if (timing_on) t_sct = t_sct + (psb_wtime() - t1) else ! nothing to wait/scatter end if @@ -825,6 +1065,7 @@ contains & (neighbor_comm_handle%use_persistent_buffers .and. .not. neighbor_comm_handle%persistent_request_ready)) then neighbor_comm_handle%comm_request = mpi_request_null end if + if (timing_on) t1 = psb_wtime() call y%device_wait() if (.not. neighbor_comm_handle%use_persistent_buffers) then call y%maybe_free_buffer(info) @@ -833,10 +1074,43 @@ contains goto 9999 end if end if + if (timing_on) t_dev = t_dev + (psb_wtime() - t1) if (debug) write(*,*) me,' nbr_vect: done' end if ! do_wait + if (timing_on) then + t_total = psb_wtime() - t0 + call psb_amx(ctxt, t_topo) + call psb_amx(ctxt, t_buf) + call psb_amx(ctxt, t_gth) + call psb_amx(ctxt, t_init) + call psb_amx(ctxt, t_post) + call psb_amx(ctxt, t_wait) + call psb_amx(ctxt, t_sct) + call psb_amx(ctxt, t_dev) + call psb_amx(ctxt, t_total) + if (me == psb_root_) timing_report = psb_swap_timing_should_report() + if ((me == psb_root_) .and. timing_report) then + psb_swap_timing_neighbor_calls = call_idx + if (call_idx == 1) then + exchange_name = 'first' + else + exchange_name = 'steady' + end if + if (neighbor_comm_handle%use_persistent_buffers) then + write(psb_out_unit,'("SWAP_TIMING persistent_neighbor phase start=",l1,", wait=",l1)') do_start, do_wait + else + write(psb_out_unit,'("SWAP_TIMING neighbor phase start=",l1,", wait=",l1)') do_start, do_wait + end if + write(psb_out_unit,'(" exchange=",a,", call=",i0)') trim(exchange_name), call_idx + write(psb_out_unit,'(" topo=",es12.5,", buf=",es12.5,", gth=",es12.5,", init=",es12.5)') & + & t_topo, t_buf, t_gth, t_init + write(psb_out_unit,'(" post=",es12.5,", wait=",es12.5,", sct=",es12.5,", dev=",es12.5,", total=",es12.5)') & + & t_post, t_wait, t_sct, t_dev, t_total + end if + end if + call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_dcg.F90 b/linsolve/impl/psb_dcg.F90 index 5636b19e8..401f2ea58 100644 --- a/linsolve/impl/psb_dcg.F90 +++ b/linsolve/impl/psb_dcg.F90 @@ -140,6 +140,11 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& ctxt = desc_a%get_context() call psb_info(ctxt, me, np) + if (np == -ione) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid desc_a context in psb_dcg_vect') + goto 9999 + end if if (.not.allocated(b%v)) then info = psb_err_invalid_vect_state_ call psb_errpush(info,name) diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index 7d9496906..abc339b0d 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -9,12 +9,14 @@ program psb_comm_cg_test implicit none type(psb_ctxt_type) :: ctxt + type(psb_ctxt_type) :: desc_ctxt type(psb_dspmat_type) :: a type(psb_desc_type) :: desc_a type(psb_d_vect_type) :: b, x type(psb_dprec_type) :: prec integer(psb_ipk_) :: info, iam, np + integer(psb_ipk_) :: desc_me, desc_np integer(psb_ipk_) :: idim, itmax, itrace, istop, iter integer(psb_ipk_) :: scheme_idx, prec_idx, rep, nrep, nwarm integer(psb_ipk_), parameter :: n_schemes=3, n_precs=2 @@ -42,7 +44,7 @@ program psb_comm_cg_test nrep = 5 nwarm = 1 ! Keep itrace positive to avoid modulo-by-zero paths in convergence logging. - itrace = 1 + itrace = 0 istop = 2 eps = 1.d-6 scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & @@ -127,6 +129,14 @@ program psb_comm_cg_test ! call probe_ieee('after psb_d_gen_pde3d') if (info /= psb_success_) goto 9999 + ! desc_ctxt = desc_a%get_context() + ! call psb_info(desc_ctxt, desc_me, desc_np) + ! if (desc_np == -1) then + ! info = psb_err_context_error_ + ! write(psb_err_unit,*) 'Invalid descriptor context after psb_d_gen_pde3d' + ! goto 9999 + ! end if + do prec_idx = 1, n_precs do scheme_idx = 1, n_schemes do rep = 1, nrep @@ -169,14 +179,6 @@ program psb_comm_cg_test setup_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,rep) + & & prec_bld_time(prec_idx,scheme_idx,rep) + comm_set_time(prec_idx,scheme_idx,rep) - do iter = 1, nwarm - call psb_geaxpby(dzero,b,dzero,x,desc_a,info) - if (info /= psb_success_) goto 9999 - call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& - & itmax=itmax,itrace=itrace,istop=istop) - if (info /= psb_success_) goto 9999 - end do - call psb_geaxpby(dzero,b,dzero,x,desc_a,info) if (info /= psb_success_) goto 9999 @@ -212,20 +214,20 @@ program psb_comm_cg_test final_error(prec_idx,scheme_idx,rep) = err solve_info(prec_idx,scheme_idx,rep) = info - if (iam == psb_root_) then - select type(ch => x%v%comm_handle) - type is(psb_comm_neighbor_handle) - write(psb_out_unit,'("DIAG_COMM scheme=",a,", prec=",a,", rep=",i0)') & - & trim(scheme_name(scheme_idx)), trim(prec_name(prec_idx)), rep - write(psb_out_unit,'("DIAG_COMM counters: init=",i0,", start=",i0,", wait=",i0,", realloc=",i0)') & - & ch%diag_init_calls, ch%diag_start_calls, ch%diag_wait_calls, & - & ch%diag_buffer_reallocs - write(psb_out_unit,'("DIAG_COMM state: ready=",l1,", bsz=",i0)') & - & ch%persistent_request_ready, ch%persistent_buffer_size - class default - continue - end select - end if + ! if (iam == psb_root_) then + ! select type(ch => x%v%comm_handle) + ! type is(psb_comm_neighbor_handle) + ! write(psb_out_unit,'("DIAG_COMM scheme=",a,", prec=",a,", rep=",i0)') & + ! & trim(scheme_name(scheme_idx)), trim(prec_name(prec_idx)), rep + ! write(psb_out_unit,'("DIAG_COMM counters: init=",i0,", start=",i0,", wait=",i0,", realloc=",i0)') & + ! & ch%diag_init_calls, ch%diag_start_calls, ch%diag_wait_calls, & + ! & ch%diag_buffer_reallocs + ! write(psb_out_unit,'("DIAG_COMM state: ready=",l1,", bsz=",i0)') & + ! & ch%persistent_request_ready, ch%persistent_buffer_size + ! class default + ! continue + ! end select + ! end if if (info /= psb_success_) goto 9999 end do diff --git a/test/comm/spmv/psb_spmv_overlap_sbatch.sh b/test/comm/spmv/psb_spmv_overlap_sbatch.sh new file mode 100644 index 000000000..4a80775e2 --- /dev/null +++ b/test/comm/spmv/psb_spmv_overlap_sbatch.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +#SBATCH --job-name=psb_spmv_overlap +#SBATCH --partition=boost_usr_prod +#SBATCH --time=01:00:00 +#SBATCH --nodes=2 +#SBATCH --ntasks=64 +#SBATCH --ntasks-per-node=32 +#SBATCH --cpus-per-task=1 +#SBATCH --threads-per-core=1 +#SBATCH --gpus-per-node=4 +#SBATCH --export=ALL +#SBATCH -A CNHPC_1736213 +#SBATCH --output=psb_spmv_overlap_%j.out +#SBATCH --error=psb_spmv_overlap_%j.err + +set -euo pipefail + +# Environment tuned like the existing comm test script. +export UCX_VFS_ENABLE=n +export UCX_VFS_USE_FUSE=n +export UCX_STATS_DEST=none +export UCX_LOG_LEVEL=error +export UCX_TLS=dc,sm,self +export UCX_NET_DEVICES=mlx5_0:1 +export OMPI_MCA_coll=^hcoll,han +export OMPI_MCA_coll_hcoll_enable=0 +export UCX_MEMTYPE_CACHE=n +export UCX_CLOSE_TIMEOUT=10s + +EXEC=./test/comm/spmv/runs/spmv_overlap +IDIM_LIST=${IDIM_LIST:-"20 40 60 80 100 140 180 220 260 300"} +TIMES=${TIMES:-100} +BUILD_IF_MISSING=${BUILD_IF_MISSING:-1} + +if [[ ! -x "$EXEC" ]]; then + echo "Executable not found: $EXEC" >&2 + exit 1 +fi + +echo "Running SpMV overlap comm test" +echo " EXEC=$EXEC" +echo " IDIM_LIST=$IDIM_LIST" +echo " TIMES=$TIMES" +echo " BUILD_IF_MISSING=$BUILD_IF_MISSING" + +for IDIM in $IDIM_LIST; do + echo "" + echo "=== Running IDIM=$IDIM TIMES=$TIMES ===" + IDIM="$IDIM" TIMES="$TIMES" srun --exclusive -N2 -n64 "$EXEC" +done diff --git a/test/comm/spmv/psb_spmv_overlap_test.f90 b/test/comm/spmv/psb_spmv_overlap_test.f90 index 431ef5e9b..eaf0793b2 100644 --- a/test/comm/spmv/psb_spmv_overlap_test.f90 +++ b/test/comm/spmv/psb_spmv_overlap_test.f90 @@ -524,29 +524,47 @@ contains real(psb_dpk_) :: alpha, beta type(psb_dspmat_type) :: a - type(psb_d_vect_type) :: x_baseline, x_neighbor, x_persistent - type(psb_d_vect_type) :: y_baseline, y_neighbor, y_persistent + type(psb_d_vect_type) :: x_isend, x_neighbor, x_persistent + type(psb_d_vect_type) :: y_ov_isend, y_ov_neighbor, y_ov_persistent + type(psb_d_vect_type) :: y_no_isend, y_no_neighbor, y_no_persistent type(psb_desc_type) :: desc_a - character(len=:), allocatable :: output_file_name - character(len=32) :: idim_str + character(len=64) :: env_buf real(psb_dpk_), allocatable :: x_global(:), y_global(:) integer(psb_ipk_) :: my_rank, np, info, err_act + integer :: env_len, env_status, ios integer(psb_ipk_) :: n_global, idim integer(psb_ipk_) :: i, times real(psb_dpk_) :: t0, t1, dt - real(psb_dpk_) :: tsum_baseline, tsum_neighbor, tsum_persistent - real(psb_dpk_) :: err_bn, err_bp, tol - logical :: tnd + real(psb_dpk_) :: t_ov_isend, t_ov_neighbor, t_ov_persistent + real(psb_dpk_) :: t_no_isend, t_no_neighbor, t_no_persistent + real(psb_dpk_) :: err_isend, err_neighbor, err_persistent, tol + real(psb_dpk_) :: avg_ov, avg_no, speedup, gain_pct info = psb_success_ tol = 1.0d-10 times = 100 - tsum_baseline = 0.0_psb_dpk_ - tsum_neighbor = 0.0_psb_dpk_ - tsum_persistent = 0.0_psb_dpk_ - tnd = .false. + t_ov_isend = 0.0_psb_dpk_ + t_ov_neighbor = 0.0_psb_dpk_ + t_ov_persistent = 0.0_psb_dpk_ + t_no_isend = 0.0_psb_dpk_ + t_no_neighbor = 0.0_psb_dpk_ + t_no_persistent = 0.0_psb_dpk_ idim = 10 + call psb_erractionsave(err_act) + + call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) idim + if ((ios /= 0) .or. (idim < 2)) idim = 10 + end if + + call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) times + if ((ios /= 0) .or. (times < 1)) times = 100 + end if + n_global = idim * idim * idim alpha = done beta = dzero @@ -555,7 +573,7 @@ contains call psb_barrier(ctxt) - call psb_d_gen_pde3d(ctxt,idim,a,y_baseline,x_baseline,desc_a,"CSR",info,partition=1) + call psb_d_gen_pde3d(ctxt,idim,a,y_ov_isend,x_isend,desc_a,"CSR",info,partition=1) if (info /= psb_success_) goto 9999 call psb_barrier(ctxt) @@ -571,96 +589,200 @@ contains call psb_geall(x_neighbor, desc_a, info) call psb_geall(x_persistent, desc_a, info) - call psb_geall(y_neighbor, desc_a, info) - call psb_geall(y_persistent, desc_a, info) + call psb_geall(y_ov_neighbor, desc_a, info) + call psb_geall(y_ov_persistent, desc_a, info) + call psb_geall(y_no_isend, desc_a, info) + call psb_geall(y_no_neighbor, desc_a, info) + call psb_geall(y_no_persistent, desc_a, info) if (info /= psb_success_) goto 9999 - call psb_scatter(x_global, x_baseline, desc_a, info, root=psb_root_) + call psb_scatter(x_global, x_isend, desc_a, info, root=psb_root_) call psb_scatter(x_global, x_neighbor, desc_a, info, root=psb_root_) call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_baseline, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_neighbor, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_persistent, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_ov_isend, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_ov_neighbor, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_ov_persistent, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_no_isend, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_no_neighbor, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_no_persistent, desc_a, info, root=psb_root_) if (info /= psb_success_) goto 9999 ! Set communication schemes on the x vectors used by psb_spmm. - call psb_comm_set(psb_comm_isend_irecv_, x_baseline%v%comm_handle, info) + call psb_comm_set(psb_comm_isend_irecv_, x_isend%v%comm_handle, info) if (info /= psb_success_) goto 9999 call psb_comm_set(psb_comm_ineighbor_alltoallv_, x_neighbor%v%comm_handle, info) if (info /= psb_success_) goto 9999 call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, x_persistent%v%comm_handle, info) if (info /= psb_success_) goto 9999 - ! Warm-up all schemes once. - call psb_spmm(alpha, a, x_baseline, beta, y_baseline, desc_a, info, doswap=.true.) - call psb_spmm(alpha, a, x_neighbor, beta, y_neighbor, desc_a, info, doswap=.true.) - call psb_spmm(alpha, a, x_persistent, beta, y_persistent, desc_a, info, doswap=.true.) + ! Warm-up all schemes once: overlap and non-overlap paths. + call psb_spmm(alpha, a, x_isend, beta, y_ov_isend, desc_a, info, doswap=.true.) + call psb_halo(x_isend, desc_a, info) + call psb_spmm(alpha, a, x_isend, beta, y_no_isend, desc_a, info, doswap=.false.) + + call psb_spmm(alpha, a, x_neighbor, beta, y_ov_neighbor, desc_a, info, doswap=.true.) + call psb_halo(x_neighbor, desc_a, info) + call psb_spmm(alpha, a, x_neighbor, beta, y_no_neighbor, desc_a, info, doswap=.false.) + + call psb_spmm(alpha, a, x_persistent, beta, y_ov_persistent, desc_a, info, doswap=.true.) + call psb_halo(x_persistent, desc_a, info) + call psb_spmm(alpha, a, x_persistent, beta, y_no_persistent, desc_a, info, doswap=.false.) if (info /= psb_success_) goto 9999 - ! Restore vectors so timed loops start from same initial state. - call psb_scatter(x_global, x_baseline, desc_a, info, root=psb_root_) + ! ----------------------------- + ! isend/irecv scheme + ! ----------------------------- + call psb_scatter(x_global, x_isend, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_ov_isend, desc_a, info, root=psb_root_) + call psb_barrier(ctxt) + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x_isend, beta, y_ov_isend, desc_a, info, doswap=.true.) + end do + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + t_ov_isend = dt + + call psb_scatter(x_global, x_isend, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_no_isend, desc_a, info, root=psb_root_) + call psb_barrier(ctxt) + t0 = psb_wtime() + do i = 1, times + call psb_halo(x_isend, desc_a, info) + call psb_spmm(alpha, a, x_isend, beta, y_no_isend, desc_a, info, doswap=.false.) + end do + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + t_no_isend = dt + + ! ----------------------------- + ! ineighbor_alltoallv scheme + ! ----------------------------- call psb_scatter(x_global, x_neighbor, desc_a, info, root=psb_root_) - call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_baseline, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_neighbor, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_persistent, desc_a, info, root=psb_root_) - if (info /= psb_success_) goto 9999 + call psb_scatter(y_global, y_ov_neighbor, desc_a, info, root=psb_root_) + call psb_barrier(ctxt) + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x_neighbor, beta, y_ov_neighbor, desc_a, info, doswap=.true.) + end do + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + t_ov_neighbor = dt - ! Baseline (isend/irecv) overlapped SpMV. + call psb_scatter(x_global, x_neighbor, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_no_neighbor, desc_a, info, root=psb_root_) + call psb_barrier(ctxt) t0 = psb_wtime() do i = 1, times - call psb_spmm(alpha, a, x_baseline, beta, y_baseline, desc_a, info, doswap=.true.) + call psb_halo(x_neighbor, desc_a, info) + call psb_spmm(alpha, a, x_neighbor, beta, y_no_neighbor, desc_a, info, doswap=.false.) end do t1 = psb_wtime() dt = t1 - t0 call psb_amx(ctxt, dt) - tsum_baseline = tsum_baseline + dt + t_no_neighbor = dt - ! Neighbor alltoallv overlapped SpMV. + ! ---------------------------------------- + ! persistent_ineighbor_alltoallv scheme + ! ---------------------------------------- + call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_ov_persistent, desc_a, info, root=psb_root_) + call psb_barrier(ctxt) t0 = psb_wtime() do i = 1, times - call psb_spmm(alpha, a, x_neighbor, beta, y_neighbor, desc_a, info, doswap=.true.) + call psb_spmm(alpha, a, x_persistent, beta, y_ov_persistent, desc_a, info, doswap=.true.) end do t1 = psb_wtime() dt = t1 - t0 call psb_amx(ctxt, dt) - tsum_neighbor = tsum_neighbor + dt + t_ov_persistent = dt - ! Persistent-neighbor overlapped SpMV. + call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) + call psb_scatter(y_global, y_no_persistent, desc_a, info, root=psb_root_) + call psb_barrier(ctxt) t0 = psb_wtime() do i = 1, times - call psb_spmm(alpha, a, x_persistent, beta, y_persistent, desc_a, info, doswap=.true.) + call psb_halo(x_persistent, desc_a, info) + call psb_spmm(alpha, a, x_persistent, beta, y_no_persistent, desc_a, info, doswap=.false.) end do t1 = psb_wtime() dt = t1 - t0 call psb_amx(ctxt, dt) - tsum_persistent = tsum_persistent + dt + t_no_persistent = dt + + if (info /= psb_success_) goto 9999 - err_bn = maxval(abs(y_baseline%get_vect() - y_neighbor%get_vect())) - err_bp = maxval(abs(y_baseline%get_vect() - y_persistent%get_vect())) - call psb_amx(ctxt, err_bn) - call psb_amx(ctxt, err_bp) + err_isend = maxval(abs(y_ov_isend%get_vect() - y_no_isend%get_vect())) + err_neighbor = maxval(abs(y_ov_neighbor%get_vect() - y_no_neighbor%get_vect())) + err_persistent = maxval(abs(y_ov_persistent%get_vect() - y_no_persistent%get_vect())) + call psb_amx(ctxt, err_isend) + call psb_amx(ctxt, err_neighbor) + call psb_amx(ctxt, err_persistent) if (my_rank == 0) then - write(psb_out_unit,'(" Avg baseline time : ",es12.5)') tsum_baseline / real(times, psb_dpk_) - write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline - write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') tsum_neighbor / real(times, psb_dpk_) - write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor - write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') tsum_persistent / real(times, psb_dpk_) - write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_persistent - write(psb_out_unit,'(" Check baseline vs neighbor err = ",es12.5)') err_bn - write(psb_out_unit,'(" Check baseline vs persistent err = ",es12.5)') err_bp - if ((err_bn > tol) .or. (err_bp > tol)) then + write(psb_out_unit,'(/,"SpMV overlap benchmark")') + write(psb_out_unit,'(" idim : ",i0)') idim + write(psb_out_unit,'(" global unknowns : ",i0)') n_global + write(psb_out_unit,'(" repetitions : ",i0)') times + write(psb_out_unit,'(" timing metric : max over MPI ranks")') + write(psb_out_unit,'(" gain(%) = 100*(1 - overlap/no_overlap)")') + + write(psb_out_unit,'(/,"Scheme: isend_irecv")') + avg_ov = t_ov_isend / real(times, psb_dpk_) + avg_no = t_no_isend / real(times, psb_dpk_) + speedup = t_no_isend / max(t_ov_isend, tiny(done)) + gain_pct = 100.0_psb_dpk_ * (done - (t_ov_isend / max(t_no_isend, tiny(done)))) + write(psb_out_unit,'(" total overlap : ",es12.5)') t_ov_isend + write(psb_out_unit,'(" total no_overlap : ",es12.5)') t_no_isend + write(psb_out_unit,'(" avg overlap : ",es12.5)') avg_ov + write(psb_out_unit,'(" avg no_overlap : ",es12.5)') avg_no + write(psb_out_unit,'(" speedup (no/ov) : ",f10.4)') speedup + write(psb_out_unit,'(" gain (%) : ",f10.4)') gain_pct + write(psb_out_unit,'(" overlap vs no_overlap err = ",es12.5)') err_isend + + write(psb_out_unit,'(/,"Scheme: ineighbor_alltoallv")') + avg_ov = t_ov_neighbor / real(times, psb_dpk_) + avg_no = t_no_neighbor / real(times, psb_dpk_) + speedup = t_no_neighbor / max(t_ov_neighbor, tiny(done)) + gain_pct = 100.0_psb_dpk_ * (done - (t_ov_neighbor / max(t_no_neighbor, tiny(done)))) + write(psb_out_unit,'(" total overlap : ",es12.5)') t_ov_neighbor + write(psb_out_unit,'(" total no_overlap : ",es12.5)') t_no_neighbor + write(psb_out_unit,'(" avg overlap : ",es12.5)') avg_ov + write(psb_out_unit,'(" avg no_overlap : ",es12.5)') avg_no + write(psb_out_unit,'(" speedup (no/ov) : ",f10.4)') speedup + write(psb_out_unit,'(" gain (%) : ",f10.4)') gain_pct + write(psb_out_unit,'(" overlap vs no_overlap err = ",es12.5)') err_neighbor + + write(psb_out_unit,'(/,"Scheme: persistent_ineighbor_alltoallv")') + avg_ov = t_ov_persistent / real(times, psb_dpk_) + avg_no = t_no_persistent / real(times, psb_dpk_) + speedup = t_no_persistent / max(t_ov_persistent, tiny(done)) + gain_pct = 100.0_psb_dpk_ * (done - (t_ov_persistent / max(t_no_persistent, tiny(done)))) + write(psb_out_unit,'(" total overlap : ",es12.5)') t_ov_persistent + write(psb_out_unit,'(" total no_overlap : ",es12.5)') t_no_persistent + write(psb_out_unit,'(" avg overlap : ",es12.5)') avg_ov + write(psb_out_unit,'(" avg no_overlap : ",es12.5)') avg_no + write(psb_out_unit,'(" speedup (no/ov) : ",f10.4)') speedup + write(psb_out_unit,'(" gain (%) : ",f10.4)') gain_pct + write(psb_out_unit,'(" overlap vs no_overlap err = ",es12.5)') err_persistent + + if ((err_isend > tol) .or. (err_neighbor > tol) .or. (err_persistent > tol)) then write(psb_out_unit,'(" WARNING: mismatch exceeds tolerance ",es12.5)') tol end if end if - call psb_gefree(x_baseline, desc_a, info) + call psb_gefree(x_isend, desc_a, info) call psb_gefree(x_neighbor, desc_a, info) call psb_gefree(x_persistent, desc_a, info) - call psb_gefree(y_baseline, desc_a, info) - call psb_gefree(y_neighbor, desc_a, info) - call psb_gefree(y_persistent, desc_a, info) + call psb_gefree(y_ov_isend, desc_a, info) + call psb_gefree(y_ov_neighbor, desc_a, info) + call psb_gefree(y_ov_persistent, desc_a, info) + call psb_gefree(y_no_isend, desc_a, info) + call psb_gefree(y_no_neighbor, desc_a, info) + call psb_gefree(y_no_persistent, desc_a, info) call psb_spfree(a, desc_a, info) call psb_cdfree(desc_a, info) diff --git a/test/comm/swapdata/psb_comm_test.F90 b/test/comm/swapdata/psb_comm_test.F90 index 25b4e22bb..c7bb08c5a 100644 --- a/test/comm/swapdata/psb_comm_test.F90 +++ b/test/comm/swapdata/psb_comm_test.F90 @@ -17,6 +17,7 @@ ! program psb_comm_test use psb_base_mod + use psb_error_mod, only: psb_set_debug_level, psb_debug_ext_ use psi_mod use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free use psb_comm_schemes_mod, only: psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & @@ -30,6 +31,7 @@ program psb_comm_test integer(psb_ipk_) :: iters character(len=32) :: arg character(len=16) :: mode + logical :: debug_swapdata ! ---- descriptor / context ---- type(psb_ctxt_type) :: ctxt @@ -58,13 +60,16 @@ program psb_comm_test real(psb_dpk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent integer(psb_lpk_), allocatable :: glob_col(:) character(len=40) :: name + real(psb_dpk_) :: huge_d name = 'test_halo_new' tol = 1.0d-12 + huge_d = huge(1.0_psb_dpk_) n_pass = 0 n_total = 0 iters = 5 mode = 'both' + debug_swapdata = .false. ! ---- parse command-line argument for idim ---- idim = 10 @@ -92,9 +97,15 @@ program psb_comm_test call get_command_argument(i+1, arg) read(arg, *) mode end if + else if (trim(arg) == '--debug') then + debug_swapdata = .true. end if end do + if (debug_swapdata) then + call psb_set_debug_level(psb_debug_ext_) + end if + run_baseline = .false. run_neighbor = .false. run_persistent = .false. @@ -180,11 +191,35 @@ program psb_comm_test ! 3. Allocate two D vectors (scratch) and fill owned entries ! ================================================================== call psb_geall(v_baseline, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall baseline error:', info + call psb_abort(ctxt) + end if call psb_geall(v_neighbor, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall neighbor error:', info + call psb_abort(ctxt) + end if call psb_geall(v_neighbor_persistent, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall persistent-neighbor error:', info + call psb_abort(ctxt) + end if call psb_geasb(v_baseline, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb baseline error:', info + call psb_abort(ctxt) + end if call psb_geasb(v_neighbor, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb neighbor error:', info + call psb_abort(ctxt) + end if call psb_geasb(v_neighbor_persistent, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb persistent-neighbor error:', info + call psb_abort(ctxt) + end if ! Fill owned entries with the global index value allocate(vals(ncol)) @@ -207,6 +242,10 @@ program psb_comm_test do i = 1, ncol expected(i) = real(glob_col(i), psb_dpk_) end do + allocate(result_baseline(ncol), result_neighbor(ncol), result_persistent(ncol)) + result_baseline = huge_d + result_neighbor = huge_d + result_persistent = huge_d ! ================================================================== ! 6. Baseline halo exchange (Isend/Irecv in one call) @@ -342,16 +381,33 @@ program psb_comm_test ! ================================================================== ! 8. Extract results and compare ! ================================================================== - result_baseline = v_baseline%get_vect() - result_neighbor = v_neighbor%get_vect() - result_persistent = v_neighbor_persistent%get_vect() + result_baseline = v_baseline%v%v + result_neighbor = v_neighbor%v%v + result_persistent = v_neighbor_persistent%v%v + + ! Debug: Check if results are properly populated + if (my_rank == 0 .and. debug_swapdata) then + write(psb_out_unit,'("DEBUG: ncol=",i0," nrow=",i0)') ncol, nrow + write(psb_out_unit,'("DEBUG: size(result_baseline)=",i0)') size(result_baseline) + if (ncol > 0) then + write(psb_out_unit,'("DEBUG: result_baseline(1:min(5,ncol))=",5(es12.5,1x))') & + & result_baseline(1:min(5,ncol)) + write(psb_out_unit,'("DEBUG: expected(1:min(5,ncol))=",5(es12.5,1x))') & + & expected(1:min(5,ncol)) + end if + end if if (run_baseline .and. run_neighbor) then n_total = n_total + 1 - err = maxval(abs(result_baseline(1:ncol) - result_neighbor(1:ncol))) + err = huge_d + if (ncol > 0) then + err = maxval(abs(result_baseline(1:ncol) - result_neighbor(1:ncol))) + else + err = 0.0_psb_dpk_ + end if call psb_amx(ctxt, err) if (my_rank == 0) then - if (err < tol) then + if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then write(psb_out_unit,'(" [PASS] cross-check baseline vs neighbor : err = ",es12.5)') err n_pass = n_pass + 1 else @@ -362,10 +418,15 @@ program psb_comm_test if (run_baseline) then n_total = n_total + 1 - err = maxval(abs(result_baseline(1:ncol) - expected(1:ncol))) + err = huge_d + if (ncol > 0) then + err = maxval(abs(result_baseline(1:ncol) - expected(1:ncol))) + else + err = 0.0_psb_dpk_ + end if call psb_amx(ctxt, err) if (my_rank == 0) then - if (err < tol) then + if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then write(psb_out_unit,'(" [PASS] baseline absolute correctness : err = ",es12.5)') err n_pass = n_pass + 1 else @@ -376,10 +437,15 @@ program psb_comm_test if (run_neighbor) then n_total = n_total + 1 - err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) + err = huge_d + if (ncol > 0) then + err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) + else + err = 0.0_psb_dpk_ + end if call psb_amx(ctxt, err) if (my_rank == 0) then - if (err < tol) then + if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then write(psb_out_unit,'(" [PASS] neighbor absolute correctness : err = ",es12.5)') err n_pass = n_pass + 1 else @@ -390,10 +456,15 @@ program psb_comm_test if (run_baseline .and. run_persistent) then n_total = n_total + 1 - err = maxval(abs(result_baseline(1:ncol) - result_persistent(1:ncol))) + err = huge_d + if (ncol > 0) then + err = maxval(abs(result_baseline(1:ncol) - result_persistent(1:ncol))) + else + err = 0.0_psb_dpk_ + end if call psb_amx(ctxt, err) if (my_rank == 0) then - if (err < tol) then + if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then write(psb_out_unit,'(" [PASS] cross-check baseline vs pers-nei : err = ",es12.5)') err n_pass = n_pass + 1 else @@ -404,10 +475,15 @@ program psb_comm_test if (run_persistent) then n_total = n_total + 1 - err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) + err = huge_d + if (ncol > 0) then + err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) + else + err = 0.0_psb_dpk_ + end if call psb_amx(ctxt, err) if (my_rank == 0) then - if (err < tol) then + if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then write(psb_out_unit,'(" [PASS] pers-neigh absolute correctness : err = ",es12.5)') err n_pass = n_pass + 1 else @@ -426,12 +502,17 @@ program psb_comm_test call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - result_neighbor = v_neighbor%get_vect() + result_neighbor = v_neighbor%v%v n_total = n_total + 1 - err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) + err = huge_d + if (ncol > 0) then + err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) + else + err = 0.0_psb_dpk_ + end if call psb_amx(ctxt, err) if (my_rank == 0) then - if (err < tol) then + if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then write(psb_out_unit,'(" [PASS] neighbor topology reuse : err = ",es12.5)') err n_pass = n_pass + 1 else @@ -450,12 +531,17 @@ program psb_comm_test call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - result_persistent = v_neighbor_persistent%get_vect() + result_persistent = v_neighbor_persistent%v%v n_total = n_total + 1 - err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) + err = huge_d + if (ncol > 0) then + err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) + else + err = 0.0_psb_dpk_ + end if call psb_amx(ctxt, err) if (my_rank == 0) then - if (err < tol) then + if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then write(psb_out_unit,'(" [PASS] pers-neigh buffer reuse : err = ",es12.5)') err n_pass = n_pass + 1 else @@ -467,6 +553,7 @@ program psb_comm_test ! ================================================================== ! 9. Summary ! ================================================================== + call psb_barrier(ctxt) if (my_rank == 0) then write(psb_out_unit,'("================================================")') write(psb_out_unit,'(" Results: ",i0," / ",i0," tests passed")') n_pass, n_total @@ -477,6 +564,7 @@ program psb_comm_test end if write(psb_out_unit,'("================================================")') end if + call psb_barrier(ctxt) ! ================================================================== ! 10. Cleanup diff --git a/test/comm/swapdata/psb_comm_test_sbatch.sh b/test/comm/swapdata/psb_comm_test_sbatch.sh new file mode 100644 index 000000000..81aae2c1e --- /dev/null +++ b/test/comm/swapdata/psb_comm_test_sbatch.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +#SBATCH --job-name=psb_swapdata_test +#SBATCH --partition=boost_usr_prod +#SBATCH --time=02:00:00 +#SBATCH --nodes=4 +#SBATCH --ntasks=128 +#SBATCH --ntasks-per-node=32 +#SBATCH --cpus-per-task=1 +#SBATCH --threads-per-core=1 +#SBATCH --gpus-per-node=4 +#SBATCH --export=ALL +#SBATCH -A CNHPC_1736213 +#SBATCH --output=psb_comm_swapdata_%j.out +#SBATCH --error=psb_comm_swapdata_%j.err + +set -euo pipefail + +# Environment tuned like the main comm test script. +export UCX_VFS_ENABLE=n +export UCX_VFS_USE_FUSE=n +export UCX_STATS_DEST=none +export UCX_LOG_LEVEL=error +export UCX_TLS=dc,sm,self +export UCX_NET_DEVICES=mlx5_0:1 +export OMPI_MCA_coll=^hcoll,han +export OMPI_MCA_coll_hcoll_enable=0 +export UCX_MEMTYPE_CACHE=n +export UCX_CLOSE_TIMEOUT=10s + +EXEC=./test/comm/swapdata/runs/psb_comm_test +DIM_START=${DIM_START:-20} +DIM_END=${DIM_END:-300} +DIM_STEP=${DIM_STEP:-20} +ITERS=${ITERS:-10} +MODE=${MODE:-both} +DEBUG=${DEBUG:-0} + +EXTRA_ARGS=() +if [[ "$DEBUG" != "0" ]]; then + EXTRA_ARGS+=(--debug) +fi + +if [[ ! -x "$EXEC" ]]; then + echo "Executable not found: $EXEC" >&2 + echo "Build the test first with 'make' in test/comm/swapdata/" >&2 + exit 1 +fi + +echo "Running swapdata comm test" +echo " EXEC=$EXEC" +echo " DIM_START=$DIM_START" +echo " DIM_END=$DIM_END" +echo " DIM_STEP=$DIM_STEP" +echo " ITERS=$ITERS" +echo " MODE=$MODE" +echo " DEBUG=$DEBUG" + +for DIM in $(seq "$DIM_START" "$DIM_STEP" "$DIM_END"); do + echo "" + echo "=== Running DIM=$DIM ===" + srun --exclusive -N2 -n64 "$EXEC" --dim "$DIM" --iters "$ITERS" --mode "$MODE" "${EXTRA_ARGS[@]}" +done From 75d86864b0f2f60ad1eb11d4c966d80084e3a4b5 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Sun, 19 Apr 2026 17:56:39 +0200 Subject: [PATCH 161/175] [UPDATE] Minor changes to debug --- base/comm/internals/psi_dswapdata.F90 | 83 +++++- .../psb_comm_neighbor_impl_mod.F90 | 4 + test/comm/cg/psb_comm_cg_test.F90 | 42 ++- test/comm/spmv/Makefile | 3 +- test/comm/spmv/psb_spmv_overlap_test.f90 | 275 ++++++++++++++++++ 5 files changed, 379 insertions(+), 28 deletions(-) diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 6c0262dda..f7030eb1f 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -92,6 +92,10 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl integer(psb_ipk_), save :: psb_swap_timing_wrapper_calls = 0 integer(psb_ipk_), save :: psb_swap_timing_baseline_calls = 0 integer(psb_ipk_), save :: psb_swap_timing_neighbor_calls = 0 + logical, save :: psb_swap_start_debug_inited = .false. + logical, save :: psb_swap_start_debug_enabled = .false. + integer(psb_ipk_), save :: psb_swap_start_debug_max_report = 128 + integer(psb_ipk_), save :: psb_swap_start_debug_report_count = 0 contains @@ -137,6 +141,47 @@ contains psb_swap_timing_should_report = .true. end function psb_swap_timing_should_report + subroutine psb_swap_start_debug_setup() + implicit none + character(len=64) :: env_buf + integer(psb_ipk_) :: env_len, env_status, ios + + if (psb_swap_start_debug_inited) return + + psb_swap_start_debug_inited = .true. + psb_swap_start_debug_enabled = .false. + psb_swap_start_debug_max_report = 128 + + call get_environment_variable('PSB_SWAP_DEBUG_START', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + select case(env_buf(1:1)) + case('1','t','T','y','Y') + psb_swap_start_debug_enabled = .true. + case default + psb_swap_start_debug_enabled = .false. + end select + end if + + call get_environment_variable('PSB_SWAP_DEBUG_START_MAX_REPORT', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) psb_swap_start_debug_max_report + if ((ios /= 0) .or. (psb_swap_start_debug_max_report < 1)) psb_swap_start_debug_max_report = 128 + end if + end subroutine psb_swap_start_debug_setup + + logical function psb_swap_start_debug_should_report() + implicit none + + call psb_swap_start_debug_setup() + + psb_swap_start_debug_should_report = .false. + if (.not. psb_swap_start_debug_enabled) return + if (psb_swap_start_debug_report_count >= psb_swap_start_debug_max_report) return + + psb_swap_start_debug_report_count = psb_swap_start_debug_report_count + 1 + psb_swap_start_debug_should_report = .true. + end function psb_swap_start_debug_should_report + module subroutine psi_dswapdata_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD @@ -919,21 +964,37 @@ contains #ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT if (buffer_size > 0) then + ! Count the attempt before MPI_Start so we can diagnose call reachability. + neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 + if (psb_swap_start_debug_should_report()) then + write(psb_out_unit,'("SWAP_DEBUG MPI_Start(pre) kind=vect rank=",i0,", bsz=",i0,", ready=",l1)') & + & me, buffer_size, neighbor_comm_handle%persistent_request_ready + write(psb_out_unit,'(" inflight=",l1,", req_null=",l1,", dstart=",i0)') & + & neighbor_comm_handle%persistent_in_flight, & + & (neighbor_comm_handle%persistent_request == mpi_request_null), & + & neighbor_comm_handle%diag_start_calls + end if if (timing_on) t1 = psb_wtime() call mpi_start(neighbor_comm_handle%persistent_request, iret) if (timing_on) t_post = t_post + (psb_wtime() - t1) + if (psb_swap_start_debug_should_report()) then + write(psb_out_unit,'("SWAP_DEBUG MPI_Start(post) kind=vect rank=",i0,", iret=",i0)') & + & me, iret + write(psb_out_unit,'(" inflight=",l1,", dstart=",i0)') & + & neighbor_comm_handle%persistent_in_flight, neighbor_comm_handle%diag_start_calls + end if if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 neighbor_comm_handle%persistent_in_flight = .true. else neighbor_comm_handle%persistent_in_flight = .false. end if #else if (buffer_size > 0) then + neighbor_comm_handle%diag_ineighbor_calls = neighbor_comm_handle%diag_ineighbor_calls + 1 if (timing_on) t1 = psb_wtime() call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer @@ -962,6 +1023,7 @@ contains ! Post non-blocking neighborhood alltoallv if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then + neighbor_comm_handle%diag_ineighbor_calls = neighbor_comm_handle%diag_ineighbor_calls + 1 if (timing_on) t1 = psb_wtime() call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer @@ -1671,15 +1733,31 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in end if #ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT + ! Count the attempt before MPI_Start so we can diagnose call reachability. + neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 + if (psb_swap_start_debug_should_report()) then + write(psb_out_unit,'("SWAP_DEBUG MPI_Start(pre) kind=multivect rank=",i0,", bsz=",i0,", ready=",l1)') & + & me, buffer_size, neighbor_comm_handle%persistent_request_ready + write(psb_out_unit,'(" inflight=",l1,", req_null=",l1,", dstart=",i0)') & + & neighbor_comm_handle%persistent_in_flight, & + & (neighbor_comm_handle%persistent_request == mpi_request_null), & + & neighbor_comm_handle%diag_start_calls + end if call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (psb_swap_start_debug_should_report()) then + write(psb_out_unit,'("SWAP_DEBUG MPI_Start(post) kind=multivect rank=",i0,", iret=",i0)') & + & me, iret + write(psb_out_unit,'(" inflight=",l1,", dstart=",i0)') & + & neighbor_comm_handle%persistent_in_flight, neighbor_comm_handle%diag_start_calls + end if if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 neighbor_comm_handle%persistent_in_flight = .true. #else + neighbor_comm_handle%diag_ineighbor_calls = neighbor_comm_handle%diag_ineighbor_calls + 1 call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & @@ -1701,6 +1779,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in else ! Post non-blocking neighborhood alltoallv if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + neighbor_comm_handle%diag_ineighbor_calls = neighbor_comm_handle%diag_ineighbor_calls + 1 call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & diff --git a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 index 106edc25c..4f8a29b8a 100644 --- a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 @@ -32,6 +32,7 @@ module psb_comm_neighbor_impl_mod integer(psb_ipk_) :: persistent_buffer_size = 0 integer(psb_ipk_) :: diag_init_calls = 0 integer(psb_ipk_) :: diag_start_calls = 0 + integer(psb_ipk_) :: diag_ineighbor_calls = 0 integer(psb_ipk_) :: diag_wait_calls = 0 integer(psb_ipk_) :: diag_buffer_reallocs = 0 contains @@ -399,6 +400,7 @@ contains this%persistent_buffer_size = 0 this%diag_init_calls = 0 this%diag_start_calls = 0 + this%diag_ineighbor_calls = 0 this%diag_wait_calls = 0 this%diag_buffer_reallocs = 0 call this%free(info) @@ -440,10 +442,12 @@ contains this%persistent_buffer_size = 0 this%diag_init_calls = 0 this%diag_start_calls = 0 + this%diag_ineighbor_calls = 0 this%diag_wait_calls = 0 this%diag_buffer_reallocs = 0 this%diag_init_calls = 0 this%diag_start_calls = 0 + this%diag_ineighbor_calls = 0 this%diag_wait_calls = 0 this%diag_buffer_reallocs = 0 end subroutine psb_comm_neighbor_init diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index abc339b0d..1b75dad7c 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -43,8 +43,8 @@ program psb_comm_cg_test itmax = 1000 nrep = 5 nwarm = 1 - ! Keep itrace positive to avoid modulo-by-zero paths in convergence logging. - itrace = 0 + ! Disable per-iteration tracing; avoids modulo-by-zero paths in some logging branches. + itrace = -1 istop = 2 eps = 1.d-6 scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & @@ -95,7 +95,7 @@ program psb_comm_cg_test ! call probe_ieee('before psb_init') call psb_init(ctxt) ! call probe_ieee('after psb_init') - ! call clear_ieee_flags() + call clear_ieee_flags() ! call probe_ieee('after clear_ieee_flags') call psb_info(ctxt, iam, np) @@ -129,14 +129,6 @@ program psb_comm_cg_test ! call probe_ieee('after psb_d_gen_pde3d') if (info /= psb_success_) goto 9999 - ! desc_ctxt = desc_a%get_context() - ! call psb_info(desc_ctxt, desc_me, desc_np) - ! if (desc_np == -1) then - ! info = psb_err_context_error_ - ! write(psb_err_unit,*) 'Invalid descriptor context after psb_d_gen_pde3d' - ! goto 9999 - ! end if - do prec_idx = 1, n_precs do scheme_idx = 1, n_schemes do rep = 1, nrep @@ -214,20 +206,20 @@ program psb_comm_cg_test final_error(prec_idx,scheme_idx,rep) = err solve_info(prec_idx,scheme_idx,rep) = info - ! if (iam == psb_root_) then - ! select type(ch => x%v%comm_handle) - ! type is(psb_comm_neighbor_handle) - ! write(psb_out_unit,'("DIAG_COMM scheme=",a,", prec=",a,", rep=",i0)') & - ! & trim(scheme_name(scheme_idx)), trim(prec_name(prec_idx)), rep - ! write(psb_out_unit,'("DIAG_COMM counters: init=",i0,", start=",i0,", wait=",i0,", realloc=",i0)') & - ! & ch%diag_init_calls, ch%diag_start_calls, ch%diag_wait_calls, & - ! & ch%diag_buffer_reallocs - ! write(psb_out_unit,'("DIAG_COMM state: ready=",l1,", bsz=",i0)') & - ! & ch%persistent_request_ready, ch%persistent_buffer_size - ! class default - ! continue - ! end select - ! end if + if (iam == psb_root_) then + select type(ch => x%v%comm_handle) + type is(psb_comm_neighbor_handle) + write(psb_out_unit,'("DIAG_COMM scheme=",a,", prec=",a,", rep=",i0)') & + & trim(scheme_name(scheme_idx)), trim(prec_name(prec_idx)), rep + write(psb_out_unit,'("DIAG_COMM counters: init=",i0,", start=",i0,", ineighbor=",i0,", wait=",i0,", realloc=",i0)') & + & ch%diag_init_calls, ch%diag_start_calls, ch%diag_ineighbor_calls, & + & ch%diag_wait_calls, ch%diag_buffer_reallocs + write(psb_out_unit,'("DIAG_COMM state: ready=",l1,", bsz=",i0)') & + & ch%persistent_request_ready, ch%persistent_buffer_size + class default + continue + end select + end if if (info /= psb_success_) goto 9999 end do diff --git a/test/comm/spmv/Makefile b/test/comm/spmv/Makefile index 1555f0065..1416389d7 100644 --- a/test/comm/spmv/Makefile +++ b/test/comm/spmv/Makefile @@ -23,9 +23,10 @@ runsd: spmv_overlap: $(TOBJS) $(FLINK) $(LOPT) $(TOBJS) -o spmv_overlap $(PSBLAS_LIB) $(LDLIBS) /bin/mv spmv_overlap $(EXEDIR) + /bin/cp -f $(EXEDIR)/spmv_overlap $(EXEDIR)/psb_spmv_overlap_test clean: - /bin/rm -f $(TOBJS) $(TOBJS_API) *$(.mod) $(EXEDIR)/spmv_overlap + /bin/rm -f $(TOBJS) $(TOBJS_API) *$(.mod) $(EXEDIR)/spmv_overlap $(EXEDIR)/psb_spmv_overlap_test lib: (cd ../../; make library) diff --git a/test/comm/spmv/psb_spmv_overlap_test.f90 b/test/comm/spmv/psb_spmv_overlap_test.f90 index eaf0793b2..25226fcfc 100644 --- a/test/comm/spmv/psb_spmv_overlap_test.f90 +++ b/test/comm/spmv/psb_spmv_overlap_test.f90 @@ -11,6 +11,7 @@ module psb_spmv_overlap_test use psb_comm_factory_mod, only: psb_comm_set use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & & psb_comm_persistent_ineighbor_alltoallv_ + use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle implicit none @@ -540,6 +541,22 @@ contains real(psb_dpk_) :: t_no_isend, t_no_neighbor, t_no_persistent real(psb_dpk_) :: err_isend, err_neighbor, err_persistent, tol real(psb_dpk_) :: avg_ov, avg_no, speedup, gain_pct + integer(psb_ipk_) :: n_init_neighbor_l, n_start_neighbor_l, n_wait_neighbor_l, n_realloc_neighbor_l + integer(psb_ipk_) :: n_init_persist_l, n_start_persist_l, n_wait_persist_l, n_realloc_persist_l + integer(psb_ipk_) :: n_init_neighbor_g, n_start_neighbor_g, n_wait_neighbor_g, n_realloc_neighbor_g + integer(psb_ipk_) :: n_init_persist_g, n_start_persist_g, n_wait_persist_g, n_realloc_persist_g + integer(psb_ipk_) :: n_ineighbor_neighbor_l, n_ineighbor_neighbor_g + integer(psb_ipk_) :: peak_start_neighbor_l, peak_start_persist_l + integer(psb_ipk_) :: peak_start_neighbor_g, peak_start_persist_g + integer(psb_ipk_) :: last_start_neighbor_l, last_start_persist_l + integer(psb_ipk_) :: accum_start_neighbor_l, accum_start_persist_l + integer(psb_ipk_) :: accum_start_neighbor_g, accum_start_persist_g + integer(psb_ipk_) :: comm_type_neighbor_l, comm_type_persist_l + integer(psb_ipk_) :: comm_type_neighbor_g, comm_type_persist_g + integer(psb_ipk_) :: is_neighbor_handle_l, is_persist_handle_l + integer(psb_ipk_) :: is_neighbor_handle_g, is_persist_handle_g + integer(psb_ipk_) :: use_persistent_neighbor_l, use_persistent_persist_l + integer(psb_ipk_) :: use_persistent_neighbor_g, use_persistent_persist_g info = psb_success_ tol = 1.0d-10 @@ -550,6 +567,19 @@ contains t_no_isend = 0.0_psb_dpk_ t_no_neighbor = 0.0_psb_dpk_ t_no_persistent = 0.0_psb_dpk_ + peak_start_neighbor_l = 0 + peak_start_persist_l = 0 + n_ineighbor_neighbor_l = 0 + last_start_neighbor_l = -1 + last_start_persist_l = -1 + accum_start_neighbor_l = 0 + accum_start_persist_l = 0 + comm_type_neighbor_l = -1 + comm_type_persist_l = -1 + is_neighbor_handle_l = 0 + is_persist_handle_l = 0 + use_persistent_neighbor_l = 0 + use_persistent_persist_l = 0 idim = 10 call psb_erractionsave(err_act) @@ -615,18 +645,123 @@ contains call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, x_persistent%v%comm_handle, info) if (info /= psb_success_) goto 9999 + select type(ch => x_neighbor%v%comm_handle) + type is(psb_comm_neighbor_handle) + is_neighbor_handle_l = 1 + comm_type_neighbor_l = ch%comm_type + if (ch%use_persistent_buffers) use_persistent_neighbor_l = 1 + class default + continue + end select + + select type(ch => x_persistent%v%comm_handle) + type is(psb_comm_neighbor_handle) + is_persist_handle_l = 1 + comm_type_persist_l = ch%comm_type + if (ch%use_persistent_buffers) use_persistent_persist_l = 1 + class default + continue + end select + ! Warm-up all schemes once: overlap and non-overlap paths. call psb_spmm(alpha, a, x_isend, beta, y_ov_isend, desc_a, info, doswap=.true.) call psb_halo(x_isend, desc_a, info) call psb_spmm(alpha, a, x_isend, beta, y_no_isend, desc_a, info, doswap=.false.) call psb_spmm(alpha, a, x_neighbor, beta, y_ov_neighbor, desc_a, info, doswap=.true.) + select type(ch => x_neighbor%v%comm_handle) + type is(psb_comm_neighbor_handle) + n_ineighbor_neighbor_l = ch%diag_ineighbor_calls + if (last_start_neighbor_l < 0) then + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_neighbor_l) then + accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) + else + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + end if + last_start_neighbor_l = ch%diag_start_calls + peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) + class default + continue + end select call psb_halo(x_neighbor, desc_a, info) + select type(ch => x_neighbor%v%comm_handle) + type is(psb_comm_neighbor_handle) + n_ineighbor_neighbor_l = ch%diag_ineighbor_calls + if (last_start_neighbor_l < 0) then + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_neighbor_l) then + accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) + else + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + end if + last_start_neighbor_l = ch%diag_start_calls + peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) + class default + continue + end select call psb_spmm(alpha, a, x_neighbor, beta, y_no_neighbor, desc_a, info, doswap=.false.) + select type(ch => x_neighbor%v%comm_handle) + type is(psb_comm_neighbor_handle) + n_ineighbor_neighbor_l = ch%diag_ineighbor_calls + if (last_start_neighbor_l < 0) then + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_neighbor_l) then + accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) + else + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + end if + last_start_neighbor_l = ch%diag_start_calls + peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) + class default + continue + end select call psb_spmm(alpha, a, x_persistent, beta, y_ov_persistent, desc_a, info, doswap=.true.) + select type(ch => x_persistent%v%comm_handle) + type is(psb_comm_neighbor_handle) + if (last_start_persist_l < 0) then + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_persist_l) then + accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) + else + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + end if + last_start_persist_l = ch%diag_start_calls + peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) + class default + continue + end select call psb_halo(x_persistent, desc_a, info) + select type(ch => x_persistent%v%comm_handle) + type is(psb_comm_neighbor_handle) + if (last_start_persist_l < 0) then + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_persist_l) then + accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) + else + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + end if + last_start_persist_l = ch%diag_start_calls + peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) + class default + continue + end select call psb_spmm(alpha, a, x_persistent, beta, y_no_persistent, desc_a, info, doswap=.false.) + select type(ch => x_persistent%v%comm_handle) + type is(psb_comm_neighbor_handle) + if (last_start_persist_l < 0) then + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_persist_l) then + accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) + else + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + end if + last_start_persist_l = ch%diag_start_calls + peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) + class default + continue + end select if (info /= psb_success_) goto 9999 ! ----------------------------- @@ -666,6 +801,20 @@ contains t0 = psb_wtime() do i = 1, times call psb_spmm(alpha, a, x_neighbor, beta, y_ov_neighbor, desc_a, info, doswap=.true.) + select type(ch => x_neighbor%v%comm_handle) + type is(psb_comm_neighbor_handle) + if (last_start_neighbor_l < 0) then + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_neighbor_l) then + accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) + else + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + end if + last_start_neighbor_l = ch%diag_start_calls + peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) + class default + continue + end select end do t1 = psb_wtime() dt = t1 - t0 @@ -679,6 +828,20 @@ contains do i = 1, times call psb_halo(x_neighbor, desc_a, info) call psb_spmm(alpha, a, x_neighbor, beta, y_no_neighbor, desc_a, info, doswap=.false.) + select type(ch => x_neighbor%v%comm_handle) + type is(psb_comm_neighbor_handle) + if (last_start_neighbor_l < 0) then + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_neighbor_l) then + accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) + else + accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls + end if + last_start_neighbor_l = ch%diag_start_calls + peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) + class default + continue + end select end do t1 = psb_wtime() dt = t1 - t0 @@ -694,6 +857,20 @@ contains t0 = psb_wtime() do i = 1, times call psb_spmm(alpha, a, x_persistent, beta, y_ov_persistent, desc_a, info, doswap=.true.) + select type(ch => x_persistent%v%comm_handle) + type is(psb_comm_neighbor_handle) + if (last_start_persist_l < 0) then + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_persist_l) then + accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) + else + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + end if + last_start_persist_l = ch%diag_start_calls + peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) + class default + continue + end select end do t1 = psb_wtime() dt = t1 - t0 @@ -707,6 +884,20 @@ contains do i = 1, times call psb_halo(x_persistent, desc_a, info) call psb_spmm(alpha, a, x_persistent, beta, y_no_persistent, desc_a, info, doswap=.false.) + select type(ch => x_persistent%v%comm_handle) + type is(psb_comm_neighbor_handle) + if (last_start_persist_l < 0) then + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + else if (ch%diag_start_calls >= last_start_persist_l) then + accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) + else + accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls + end if + last_start_persist_l = ch%diag_start_calls + peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) + class default + continue + end select end do t1 = psb_wtime() dt = t1 - t0 @@ -722,6 +913,75 @@ contains call psb_amx(ctxt, err_neighbor) call psb_amx(ctxt, err_persistent) + n_init_neighbor_l = 0 + n_start_neighbor_l = 0 + n_wait_neighbor_l = 0 + n_realloc_neighbor_l = 0 + n_init_persist_l = 0 + n_start_persist_l = 0 + n_wait_persist_l = 0 + n_realloc_persist_l = 0 + + select type(ch => x_neighbor%v%comm_handle) + type is(psb_comm_neighbor_handle) + n_init_neighbor_l = ch%diag_init_calls + n_start_neighbor_l = ch%diag_start_calls + n_wait_neighbor_l = ch%diag_wait_calls + n_realloc_neighbor_l = ch%diag_buffer_reallocs + class default + continue + end select + + select type(ch => x_persistent%v%comm_handle) + type is(psb_comm_neighbor_handle) + n_init_persist_l = ch%diag_init_calls + n_start_persist_l = ch%diag_start_calls + n_wait_persist_l = ch%diag_wait_calls + n_realloc_persist_l = ch%diag_buffer_reallocs + class default + continue + end select + + n_init_neighbor_g = n_init_neighbor_l + n_start_neighbor_g = n_start_neighbor_l + n_wait_neighbor_g = n_wait_neighbor_l + n_realloc_neighbor_g = n_realloc_neighbor_l + n_init_persist_g = n_init_persist_l + n_start_persist_g = n_start_persist_l + n_wait_persist_g = n_wait_persist_l + n_realloc_persist_g = n_realloc_persist_l + n_ineighbor_neighbor_g = n_ineighbor_neighbor_l + peak_start_neighbor_g = peak_start_neighbor_l + peak_start_persist_g = peak_start_persist_l + accum_start_neighbor_g = accum_start_neighbor_l + accum_start_persist_g = accum_start_persist_l + comm_type_neighbor_g = comm_type_neighbor_l + comm_type_persist_g = comm_type_persist_l + is_neighbor_handle_g = is_neighbor_handle_l + is_persist_handle_g = is_persist_handle_l + use_persistent_neighbor_g = use_persistent_neighbor_l + use_persistent_persist_g = use_persistent_persist_l + + call psb_sum(ctxt, n_init_neighbor_g) + call psb_sum(ctxt, n_start_neighbor_g) + call psb_sum(ctxt, n_wait_neighbor_g) + call psb_sum(ctxt, n_realloc_neighbor_g) + call psb_sum(ctxt, n_init_persist_g) + call psb_sum(ctxt, n_start_persist_g) + call psb_sum(ctxt, n_wait_persist_g) + call psb_sum(ctxt, n_realloc_persist_g) + call psb_sum(ctxt, n_ineighbor_neighbor_g) + call psb_sum(ctxt, peak_start_neighbor_g) + call psb_sum(ctxt, peak_start_persist_g) + call psb_sum(ctxt, accum_start_neighbor_g) + call psb_sum(ctxt, accum_start_persist_g) + call psb_sum(ctxt, comm_type_neighbor_g) + call psb_sum(ctxt, comm_type_persist_g) + call psb_sum(ctxt, is_neighbor_handle_g) + call psb_sum(ctxt, is_persist_handle_g) + call psb_sum(ctxt, use_persistent_neighbor_g) + call psb_sum(ctxt, use_persistent_persist_g) + if (my_rank == 0) then write(psb_out_unit,'(/,"SpMV overlap benchmark")') write(psb_out_unit,'(" idim : ",i0)') idim @@ -769,6 +1029,21 @@ contains write(psb_out_unit,'(" gain (%) : ",f10.4)') gain_pct write(psb_out_unit,'(" overlap vs no_overlap err = ",es12.5)') err_persistent + write(psb_out_unit,'(/,"Communication diagnostics (global sum over MPI ranks):")') + write(psb_out_unit,'(" ineighbor_alltoallv: init=",i0,", start=",i0,", wait=",i0,", realloc=",i0)') & + & n_init_neighbor_g, n_start_neighbor_g, n_wait_neighbor_g, n_realloc_neighbor_g + write(psb_out_unit,'(" ineighbor_alltoallv calls : ",i0)') n_ineighbor_neighbor_g + write(psb_out_unit,'(" ineighbor peak start observed during run: ",i0)') peak_start_neighbor_g + write(psb_out_unit,'(" ineighbor accumulated starts (robust): ",i0)') accum_start_neighbor_g + write(psb_out_unit,'(" persistent_ineighbor_a2av: init=",i0,", start=",i0,", wait=",i0,", realloc=",i0)') & + & n_init_persist_g, n_start_persist_g, n_wait_persist_g, n_realloc_persist_g + write(psb_out_unit,'(" persistent peak start observed during run: ",i0)') peak_start_persist_g + write(psb_out_unit,'(" persistent accumulated starts (robust): ",i0)') accum_start_persist_g + write(psb_out_unit,'(" handle check (sum over ranks): neighbor is_type=",i0,", comm_type=",i0,", use_persistent=",i0)') & + & is_neighbor_handle_g, comm_type_neighbor_g, use_persistent_neighbor_g + write(psb_out_unit,'(" handle check (sum over ranks): persistent is_type=",i0,", comm_type=",i0,", use_persistent=",i0)') & + & is_persist_handle_g, comm_type_persist_g, use_persistent_persist_g + if ((err_isend > tol) .or. (err_neighbor > tol) .or. (err_persistent > tol)) then write(psb_out_unit,'(" WARNING: mismatch exceeds tolerance ",es12.5)') tol end if From be6f27069a61ae004fca598400f5f382037008c1 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Tue, 21 Apr 2026 14:56:47 +0200 Subject: [PATCH 162/175] =?UTF-8?q?[UPDATE]=20Modified=20tests=20to=20sup?= =?UTF-8?q?=C3=A8port=20GPU=20SpMV=20computing,=20Moreover=20dinstinct=20r?= =?UTF-8?q?outine=20for=20persistant=20is=20now=20present=20in=20psi=5Fdsw?= =?UTF-8?q?padata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base/comm/internals/psi_dswapdata.F90 | 1320 +++++++---------- .../psb_comm_neighbor_impl_mod.F90 | 20 - test/comm/cg/Makefile | 6 +- test/comm/cg/psb_comm_cg_test.F90 | 131 +- test/comm/cg/psb_pde3d_cg_noprec.inp | 18 - test/comm/spmv/Makefile | 13 +- test/comm/spmv/psb_spmv_overlap_test.f90 | 1077 -------------- test/comm/spmv/psb_spmv_test.f90 | 694 +++++++++ test/comm/spmv/spmv_overlap.f90 | 28 - 9 files changed, 1379 insertions(+), 1928 deletions(-) delete mode 100644 test/comm/cg/psb_pde3d_cg_noprec.inp delete mode 100644 test/comm/spmv/psb_spmv_overlap_test.f90 create mode 100644 test/comm/spmv/psb_spmv_test.f90 delete mode 100644 test/comm/spmv/spmv_overlap.f90 diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index f7030eb1f..d8c7fff9e 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -85,105 +85,9 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ use psb_comm_factory_mod - logical, save :: psb_swap_timing_inited = .false. - logical, save :: psb_swap_timing_enabled = .false. - integer(psb_ipk_), save :: psb_swap_timing_max_report = 32 - integer(psb_ipk_), save :: psb_swap_timing_report_count = 0 - integer(psb_ipk_), save :: psb_swap_timing_wrapper_calls = 0 - integer(psb_ipk_), save :: psb_swap_timing_baseline_calls = 0 - integer(psb_ipk_), save :: psb_swap_timing_neighbor_calls = 0 - logical, save :: psb_swap_start_debug_inited = .false. - logical, save :: psb_swap_start_debug_enabled = .false. - integer(psb_ipk_), save :: psb_swap_start_debug_max_report = 128 - integer(psb_ipk_), save :: psb_swap_start_debug_report_count = 0 - contains - subroutine psb_swap_timing_setup() - implicit none - character(len=64) :: env_buf - integer(psb_ipk_) :: env_len, env_status, ios - - if (psb_swap_timing_inited) return - - psb_swap_timing_inited = .true. - psb_swap_timing_enabled = .false. - psb_swap_timing_max_report = 32 - - call get_environment_variable('PSB_SWAP_TIMING', env_buf, length=env_len, status=env_status) - if ((env_status == 0) .and. (env_len > 0)) then - select case(env_buf(1:1)) - case('1','t','T','y','Y') - psb_swap_timing_enabled = .true. - case default - psb_swap_timing_enabled = .false. - end select - end if - - call get_environment_variable('PSB_SWAP_TIMING_MAX_REPORT', env_buf, length=env_len, status=env_status) - if ((env_status == 0) .and. (env_len > 0)) then - read(env_buf(1:env_len), *, iostat=ios) psb_swap_timing_max_report - if ((ios /= 0) .or. (psb_swap_timing_max_report < 1)) psb_swap_timing_max_report = 32 - end if - - end subroutine psb_swap_timing_setup - - logical function psb_swap_timing_should_report() - implicit none - - call psb_swap_timing_setup() - - psb_swap_timing_should_report = .false. - if (.not. psb_swap_timing_enabled) return - if (psb_swap_timing_report_count >= psb_swap_timing_max_report) return - - psb_swap_timing_report_count = psb_swap_timing_report_count + 1 - psb_swap_timing_should_report = .true. - end function psb_swap_timing_should_report - - subroutine psb_swap_start_debug_setup() - implicit none - character(len=64) :: env_buf - integer(psb_ipk_) :: env_len, env_status, ios - - if (psb_swap_start_debug_inited) return - - psb_swap_start_debug_inited = .true. - psb_swap_start_debug_enabled = .false. - psb_swap_start_debug_max_report = 128 - - call get_environment_variable('PSB_SWAP_DEBUG_START', env_buf, length=env_len, status=env_status) - if ((env_status == 0) .and. (env_len > 0)) then - select case(env_buf(1:1)) - case('1','t','T','y','Y') - psb_swap_start_debug_enabled = .true. - case default - psb_swap_start_debug_enabled = .false. - end select - end if - - call get_environment_variable('PSB_SWAP_DEBUG_START_MAX_REPORT', env_buf, length=env_len, status=env_status) - if ((env_status == 0) .and. (env_len > 0)) then - read(env_buf(1:env_len), *, iostat=ios) psb_swap_start_debug_max_report - if ((ios /= 0) .or. (psb_swap_start_debug_max_report < 1)) psb_swap_start_debug_max_report = 128 - end if - end subroutine psb_swap_start_debug_setup - - logical function psb_swap_start_debug_should_report() - implicit none - - call psb_swap_start_debug_setup() - - psb_swap_start_debug_should_report = .false. - if (.not. psb_swap_start_debug_enabled) return - if (psb_swap_start_debug_report_count >= psb_swap_start_debug_max_report) return - - psb_swap_start_debug_report_count = psb_swap_start_debug_report_count + 1 - psb_swap_start_debug_should_report = .true. - end function psb_swap_start_debug_should_report - module subroutine psi_dswapdata_vect(swap_status,beta,y,desc_a,info,data) - #ifdef PSB_MPI_MOD use mpi #endif @@ -201,17 +105,11 @@ contains ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_ + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_ class(psb_i_base_vect_type), pointer :: comm_indexes - logical :: debug_on - integer(psb_ipk_) :: dbg_unit - logical :: timing_on, timing_report - real(psb_dpk_) :: t0, t1, t_get_list, t_kernel, t_total - integer(psb_ipk_) :: call_idx - character(len=24) :: phase_name, scheme_name, exchange_name ! communication scheme/status selectors - logical :: baseline, neighbor_a2av + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent ! error handling variables integer(psb_ipk_) :: err_act @@ -223,33 +121,13 @@ contains ctxt = desc_a%get_context() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - debug_on = (psb_get_debug_level() >= psb_debug_ext_) - call psb_swap_timing_setup() - timing_on = psb_swap_timing_enabled - timing_report = .false. - if (timing_on) then - t_get_list = dzero - t_kernel = dzero - t_total = dzero - t0 = psb_wtime() - call_idx = psb_swap_timing_wrapper_calls + 1 - end if - - if (debug_on) then - dbg_unit = psb_get_debug_unit() - if (dbg_unit <= 0) dbg_unit = psb_err_unit - write(dbg_unit,*) me, trim(name), ': enter swap_status=', swap_status, & - & ' data=', data_, ' local_rows=', desc_a%get_local_rows(), & - & ' local_cols=', desc_a%get_local_cols(), ' y_nrows=', y%get_nrows() - end if - if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) @@ -262,20 +140,12 @@ contains data_ = psb_comm_halo_ end if - if (timing_on) t1 = psb_wtime() call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (timing_on) t_get_list = psb_wtime() - t1 if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - if (debug_on) then - write(dbg_unit,*) me, trim(name), ': list_p num_neighbors=', num_neighbors, & - & ' total_send=', total_send, ' total_recv=', total_recv, & - & ' comm_indexes_size=', size(comm_indexes%v) - end if - if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& & .and.(swap_status /= psb_comm_status_sync_) ) then @@ -292,14 +162,6 @@ contains end if end if - ! Debug: comm handle allocation and type - ! if(me == 0) then - ! write(psb_err_unit,*) me, 'CALLING' - ! write(psb_err_unit,*) me, 'DBG: comm_handle allocated=', allocated(y%comm_handle) - ! if (allocated(y%comm_handle)) then - ! write(psb_err_unit,*) me, 'DBG: comm_handle%comm_type=', y%comm_handle%comm_type - ! end if - ! end if ! Set the normalized swap status on the comm handle call y%comm_handle%set_swap_status(swap_status, info) if (info /= psb_success_) then @@ -307,89 +169,33 @@ contains goto 9999 end if - if (debug_on) then - write(dbg_unit,*) me, trim(name), ': comm_type=', y%comm_handle%comm_type, & - & ' swap_status=', swap_status - end if - - ! if(me == 0) then - ! write(psb_err_unit,*) me, 'DBG: after set_swap_status, info=', info - ! end if - baseline = .false. - neighbor_a2av = .false. select case(y%comm_handle%comm_type) - case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) - neighbor_a2av = .true. - case default - baseline = .true. - end select - - ! if(me == 0) then - ! write(psb_err_unit,*) me, 'DBG: selected baseline=', baseline, ' neighbor=', neighbor_a2av - ! end if - - if (baseline) then - if (timing_on) t1 = psb_wtime() + case(psb_comm_isend_irecv_) call psi_dswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) - if (timing_on) t_kernel = psb_wtime() - t1 if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if - else if (neighbor_a2av) then - if (timing_on) t1 = psb_wtime() + case(psb_comm_ineighbor_alltoallv_) call psi_dswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& & total_send,total_recv,y%comm_handle,info) - if (timing_on) t_kernel = psb_wtime() - t1 if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + call psb_errpush(info,name,a_err='neighbor nonblocking swap') goto 9999 end if - else + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_dswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + case default info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible swap_status settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') goto 9999 - end if - - if (timing_on) then - t_total = psb_wtime() - t0 - call psb_amx(ctxt, t_get_list) - call psb_amx(ctxt, t_kernel) - call psb_amx(ctxt, t_total) - if (me == psb_root_) timing_report = psb_swap_timing_should_report() - if ((me == psb_root_) .and. timing_report) then - psb_swap_timing_wrapper_calls = call_idx - select case(swap_status) - case(psb_comm_status_start_) - phase_name = 'start' - case(psb_comm_status_wait_) - phase_name = 'wait' - case(psb_comm_status_sync_) - phase_name = 'sync' - case default - phase_name = 'unknown' - end select - if (baseline) then - scheme_name = 'baseline' - else - if (y%comm_handle%comm_type == psb_comm_persistent_ineighbor_alltoallv_) then - scheme_name = 'persistent_neighbor' - else - scheme_name = 'neighbor' - end if - end if - if (call_idx == 1) then - exchange_name = 'first' - else - exchange_name = 'steady' - end if - write(psb_out_unit,'("SWAP_TIMING wrapper scheme=",a,", phase=",a,", exchange=",a,", call=",i0)') & - & trim(scheme_name), trim(phase_name), trim(exchange_name), call_idx - write(psb_out_unit,'(" get_list=",es12.5,", kernel=",es12.5,", total=",es12.5)') & - & t_get_list, t_kernel, t_total - end if - end if + end select call psb_erractionrestore(err_act) return @@ -419,7 +225,7 @@ contains ! locals integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: np, my_rank integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& & iret, nesd, nerv integer(psb_mpk_), allocatable :: prcid(:) @@ -429,18 +235,12 @@ contains logical :: do_send,do_recv logical, parameter :: usersend=.false. logical :: debug - logical :: timing_on, timing_report - integer(psb_ipk_) :: dbg_unit - character(len=20) :: name - real(psb_dpk_) :: t0, t1 - real(psb_dpk_) :: t_buf, t_gth, t_post, t_wait, t_sct, t_dev, t_total - integer(psb_ipk_) :: call_idx - character(len=12) :: exchange_name + character(len=20) :: name info = psb_success_ name = 'psi_dswap_baseline_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info = psb_err_context_error_ call psb_errpush(info,name) @@ -449,24 +249,6 @@ contains icomm = ctxt%get_mpic() - debug = (psb_get_debug_level() >= psb_debug_ext_) - call psb_swap_timing_setup() - timing_on = psb_swap_timing_enabled - timing_report = .false. - if (timing_on) then - t_buf = dzero - t_gth = dzero - t_post = dzero - t_wait = dzero - t_sct = dzero - t_dev = dzero - t_total = dzero - t0 = psb_wtime() - call_idx = psb_swap_timing_baseline_calls + 1 - end if - dbg_unit = psb_get_debug_unit() - if (dbg_unit <= 0) dbg_unit = psb_err_unit - baseline_comm_handle => null() select type(ch => comm_handle) type is(psb_comm_baseline_handle) @@ -491,7 +273,7 @@ contains total_send_ = total_send * n call comm_indexes%sync() - if (debug) write(dbg_unit,*) me,'Internal buffer' + if (debug) write(*,*) my_rank,'Internal buffer' if (do_send) then if (allocated(baseline_comm_handle%comid)) then if (any(baseline_comm_handle%comid /= mpi_request_null)) then @@ -503,16 +285,12 @@ contains goto 9999 end if end if - if (debug) write(dbg_unit,*) me,'do_send start' - if (timing_on) t1 = psb_wtime() call y%new_buffer(ione*size(comm_indexes%v),info) call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) - if (timing_on) t_buf = t_buf + (psb_wtime() - t1) ! First I post all the non blocking receives pnti = 1 - if (timing_on) t1 = psb_wtime() do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -520,22 +298,20 @@ contains rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(dbg_unit,*) me,'Posting receive from',prcid(i),rcv_pt + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt p2ptag = psb_double_swap_tag - call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) + call mpi_irecv(y%combuf(rcv_pt),nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do - if (timing_on) t_post = t_post + (psb_wtime() - t1) - if (debug) write(dbg_unit,*) me,' Gather ' + if (debug) write(*,*) my_rank,' Gather ' ! ! Then gather for sending. ! pnti = 1 - if (timing_on) t1 = psb_wtime() do i=1, num_neighbors nerv = comm_indexes%v(pnti+psb_n_elem_recv_) nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) @@ -555,16 +331,13 @@ contains call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do - if (timing_on) t_gth = t_gth + (psb_wtime() - t1) ! ! Then wait ! - if (timing_on) t1 = psb_wtime() call y%device_wait() - if (timing_on) t_dev = t_dev + (psb_wtime() - t1) - if (debug) write(dbg_unit,*) me,' isend' + if (debug) write(*,*) my_rank,' isend' ! ! Then send ! @@ -573,7 +346,6 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_double_swap_tag - if (timing_on) t1 = psb_wtime() do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -581,10 +353,10 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& - & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) + if ((nesd>0).and.(proc_to_comm /= my_rank)) then + call mpi_isend(y%combuf(snd_pt),nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -595,11 +367,10 @@ contains pnti = pnti + nerv + nesd + 3 end do - if (timing_on) t_post = t_post + (psb_wtime() - t1) end if if (do_recv) then - if (debug) write(dbg_unit,*) me,' do_Recv' + if (debug) write(*,*) my_rank,' do_Recv' if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... @@ -610,10 +381,9 @@ contains end if call psb_realloc(num_neighbors,prcid,info) - if (debug) write(dbg_unit,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' pnti = 1 p2ptag = psb_double_swap_tag - if (timing_on) t1 = psb_wtime() do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -621,7 +391,7 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (proc_to_comm /= me)then + if (proc_to_comm /= my_rank)then if (nesd>0) then call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then @@ -638,7 +408,7 @@ contains goto 9999 end if end if - else if (proc_to_comm == me) then + else if (proc_to_comm == my_rank) then if (nesd /= nerv) then write(psb_err_unit,*) & & 'Fatal error in swapdata: mismatch on self send',& @@ -646,15 +416,13 @@ contains end if y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do - if (timing_on) t_wait = t_wait + (psb_wtime() - t1) - if (debug) write(dbg_unit,*) me,' scatter' + if (debug) write(*,*) my_rank,' scatter' pnti = 1 snd_pt = 1 rcv_pt = 1 - if (timing_on) t1 = psb_wtime() do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -674,12 +442,12 @@ contains goto 9999 end if - if (debug) write(dbg_unit,*)me,' Received from: ',prcid(i),& + if (debug) write(*,*)my_rank,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+nerv-1) call y%sct(rcv_pt,nerv,comm_indexes,beta) - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do - if (timing_on) t_sct = t_sct + (psb_wtime() - t1) + ! ! Waited for everybody, clean up ! @@ -688,10 +456,9 @@ contains ! ! Then wait for device ! - if (debug) write(dbg_unit,*) me,' wait' - if (timing_on) t1 = psb_wtime() + if (debug) write(*,*) my_rank,' wait' call y%device_wait() - if (debug) write(dbg_unit,*) me,' free buffer' + if (debug) write(*,*) my_rank,' free buffer' call y%maybe_free_buffer(info) if (info == 0) then if (allocated(y%comm_handle)) call y%comm_handle%free(info) @@ -700,33 +467,7 @@ contains call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - if (timing_on) t_dev = t_dev + (psb_wtime() - t1) - if (debug) write(dbg_unit,*) me,' done' - end if - - if (timing_on) then - t_total = psb_wtime() - t0 - call psb_amx(ctxt, t_buf) - call psb_amx(ctxt, t_gth) - call psb_amx(ctxt, t_post) - call psb_amx(ctxt, t_wait) - call psb_amx(ctxt, t_sct) - call psb_amx(ctxt, t_dev) - call psb_amx(ctxt, t_total) - if (me == psb_root_) timing_report = psb_swap_timing_should_report() - if ((me == psb_root_) .and. timing_report) then - psb_swap_timing_baseline_calls = call_idx - if (call_idx == 1) then - exchange_name = 'first' - else - exchange_name = 'steady' - end if - write(psb_out_unit,'("SWAP_TIMING baseline phase start=",l1,", wait=",l1)') do_send, do_recv - write(psb_out_unit,'(" exchange=",a,", call=",i0)') trim(exchange_name), call_idx - write(psb_out_unit,'(" buf=",es12.5,", gth=",es12.5,", post=",es12.5,", wait=",es12.5)') & - & t_buf, t_gth, t_post, t_wait - write(psb_out_unit,'(" sct=",es12.5,", dev=",es12.5,", total=",es12.5)') t_sct, t_dev, t_total - end if + if (debug) write(*,*) my_rank,' done' end if @@ -761,25 +502,20 @@ contains ! locals integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: np, my_rank integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical :: debug - logical :: timing_on, timing_report - integer(psb_ipk_) :: dbg_unit character(len=30) :: name - real(psb_dpk_) :: t0, t1 - real(psb_dpk_) :: t_topo, t_buf, t_gth, t_init, t_post, t_wait, t_sct, t_dev, t_total - integer(psb_ipk_) :: call_idx - character(len=12) :: exchange_name + info = psb_success_ name = 'psi_dswap_neighbor_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -787,25 +523,6 @@ contains endif icomm = ctxt%get_mpic() - dbg_unit = psb_get_debug_unit() - if (dbg_unit <= 0) dbg_unit = psb_err_unit - debug = (psb_get_debug_level() >= psb_debug_ext_) - call psb_swap_timing_setup() - timing_on = psb_swap_timing_enabled - timing_report = .false. - if (timing_on) then - t_topo = dzero - t_buf = dzero - t_gth = dzero - t_init = dzero - t_post = dzero - t_wait = dzero - t_sct = dzero - t_dev = dzero - t_total = dzero - t0 = psb_wtime() - call_idx = psb_swap_timing_neighbor_calls + 1 - end if neighbor_comm_handle => null() select type(ch => comm_handle) @@ -832,19 +549,211 @@ contains ! START phase: build topology (if needed), gather, post MPI ! --------------------------------------------------------- if (do_start) then - if(debug) write(dbg_unit,*) me,' nbr_vect: starting data exchange' - if (neighbor_comm_handle%use_persistent_buffers) then - if (neighbor_comm_handle%persistent_in_flight) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:topology_total_send)) + else + ! No data to send/recv: ensure request indicates idle state + neighbor_comm_handle%comm_request = mpi_request_null + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%comm_request = mpi_request_null + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + write(psb_err_unit,*) my_rank, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & + & neighbor_comm_handle%is_initialized info = psb_err_mpi_error_ - call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if end if + + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + else + ! nothing to wait/scatter + end if + + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_dswap_neighbor_topology_vect + + + + subroutine psi_dswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + + + + info = psb_success_ + name = 'psi_dswap_neighbor_persistent_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if if (.not. neighbor_comm_handle%is_initialized) then - if (debug) write(dbg_unit,*) me,' nbr_vect: building topology via handle' - if (timing_on) t1 = psb_wtime() + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) - if (timing_on) t_topo = t_topo + (psb_wtime() - t1) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 @@ -859,192 +768,92 @@ contains buffer_size = topology_total_send + topology_total_recv if (buffer_size > 0) then - if (timing_on) t1 = psb_wtime() - if (neighbor_comm_handle%use_persistent_buffers) then - if (.not. allocated(y%combuf)) then - neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 - if (neighbor_comm_handle%persistent_request_ready) then - if (neighbor_comm_handle%persistent_request /= mpi_request_null) then - call mpi_request_free(neighbor_comm_handle%persistent_request, iret) - end if - neighbor_comm_handle%persistent_request = mpi_request_null - neighbor_comm_handle%persistent_request_ready = .false. - neighbor_comm_handle%persistent_in_flight = .false. - neighbor_comm_handle%persistent_buffer_size = 0 + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) end if - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - else if (size(y%combuf) < buffer_size) then - neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 - if (neighbor_comm_handle%persistent_request_ready) then - if (neighbor_comm_handle%persistent_request /= mpi_request_null) then - call mpi_request_free(neighbor_comm_handle%persistent_request, iret) - end if - neighbor_comm_handle%persistent_request = mpi_request_null - neighbor_comm_handle%persistent_request_ready = .false. - neighbor_comm_handle%persistent_in_flight = .false. - neighbor_comm_handle%persistent_buffer_size = 0 - end if - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 end if - else call y%new_buffer(buffer_size, info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if end if - if (timing_on) t_buf = t_buf + (psb_wtime() - t1) - neighbor_comm_handle%comm_request = mpi_request_null + end if + neighbor_comm_handle%comm_request = mpi_request_null + if (buffer_size > 0) then ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - if (timing_on) t1 = psb_wtime() + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' call y%gth(int(topology_total_send,psb_mpk_), & & neighbor_comm_handle%send_indexes, & & y%combuf(1:topology_total_send)) - if (timing_on) t_gth = t_gth + (psb_wtime() - t1) else - ! No data to send/recv: ensure requests/buffers indicate idle state - neighbor_comm_handle%comm_request = mpi_request_null neighbor_comm_handle%persistent_in_flight = .false. - neighbor_comm_handle%persistent_request_ready = neighbor_comm_handle%persistent_request_ready end if ! Wait for device (important for GPU subclasses) - if (timing_on) t1 = psb_wtime() call y%device_wait() - if (timing_on) t_dev = t_dev + (psb_wtime() - t1) - - if (neighbor_comm_handle%use_persistent_buffers) then - ! Lazy persistent-init: build the request once, then reuse with START/WAIT. - if (.not. neighbor_comm_handle%persistent_request_ready) then -#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - if (buffer_size > 0) then - if (debug) write(*,*) me,' nbr_vect: posting MPI_Neighbor_alltoallv_init' - if (timing_on) t1 = psb_wtime() - call mpi_neighbor_alltoallv_init( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & mpi_info_null, & - & neighbor_comm_handle%persistent_request, iret) - if (timing_on) t_init = t_init + (psb_wtime() - t1) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if - neighbor_comm_handle%diag_init_calls = neighbor_comm_handle%diag_init_calls + 1 - neighbor_comm_handle%persistent_request_ready = .true. - neighbor_comm_handle%persistent_buffer_size = buffer_size - else - neighbor_comm_handle%persistent_request_ready = .false. - neighbor_comm_handle%persistent_buffer_size = 0 - end if -#else - ! Fallback when persistent neighborhood collectives are not available - neighbor_comm_handle%persistent_request_ready = .false. - neighbor_comm_handle%persistent_buffer_size = 0 -#endif - end if -#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - if (buffer_size > 0) then - ! Count the attempt before MPI_Start so we can diagnose call reachability. - neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 - if (psb_swap_start_debug_should_report()) then - write(psb_out_unit,'("SWAP_DEBUG MPI_Start(pre) kind=vect rank=",i0,", bsz=",i0,", ready=",l1)') & - & me, buffer_size, neighbor_comm_handle%persistent_request_ready - write(psb_out_unit,'(" inflight=",l1,", req_null=",l1,", dstart=",i0)') & - & neighbor_comm_handle%persistent_in_flight, & - & (neighbor_comm_handle%persistent_request == mpi_request_null), & - & neighbor_comm_handle%diag_start_calls - end if - if (timing_on) t1 = psb_wtime() - call mpi_start(neighbor_comm_handle%persistent_request, iret) - if (timing_on) t_post = t_post + (psb_wtime() - t1) - if (psb_swap_start_debug_should_report()) then - write(psb_out_unit,'("SWAP_DEBUG MPI_Start(post) kind=vect rank=",i0,", iret=",i0)') & - & me, iret - write(psb_out_unit,'(" inflight=",l1,", dstart=",i0)') & - & neighbor_comm_handle%persistent_in_flight, neighbor_comm_handle%diag_start_calls - end if - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if - neighbor_comm_handle%persistent_in_flight = .true. - else - neighbor_comm_handle%persistent_in_flight = .false. - end if -#else + ! Lazy persistent-init: build the request once, then reuse with START/WAIT. + if (.not. neighbor_comm_handle%persistent_request_ready) then if (buffer_size > 0) then - neighbor_comm_handle%diag_ineighbor_calls = neighbor_comm_handle%diag_ineighbor_calls + 1 - if (timing_on) t1 = psb_wtime() - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer & neighbor_comm_handle%recv_counts, & & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & + & psb_mpi_r_dpk_, & & neighbor_comm_handle%graph_comm, & - & neighbor_comm_handle%comm_request, iret) - if (timing_on) t_post = t_post + (psb_wtime() - t1) + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - neighbor_comm_handle%persistent_in_flight = .true. + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size else - neighbor_comm_handle%persistent_in_flight = .false. - neighbor_comm_handle%comm_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 end if -#endif - else - ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - if (buffer_size > 0) then - neighbor_comm_handle%diag_ineighbor_calls = neighbor_comm_handle%diag_ineighbor_calls + 1 - if (timing_on) t1 = psb_wtime() - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & neighbor_comm_handle%comm_request, iret) - if (timing_on) t_post = t_post + (psb_wtime() - t1) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if - else - neighbor_comm_handle%comm_request = mpi_request_null + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. end if end if ! do_start @@ -1059,119 +868,39 @@ contains if ((topology_total_send + topology_total_recv) == 0) then ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. - if (neighbor_comm_handle%use_persistent_buffers) then - neighbor_comm_handle%persistent_in_flight = .false. - else - neighbor_comm_handle%comm_request = mpi_request_null - end if + neighbor_comm_handle%persistent_in_flight = .false. else - if (neighbor_comm_handle%use_persistent_buffers) then - if (.not. neighbor_comm_handle%persistent_in_flight) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') - goto 9999 - end if - else - if (neighbor_comm_handle%comm_request == mpi_request_null) then - write(psb_err_unit,*) me, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & - & neighbor_comm_handle%is_initialized - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 - end if + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 end if end if ! Only wait and scatter if there's data if ((topology_total_send + topology_total_recv) > 0) then - ! Wait for the non-blocking collective to complete - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - if (timing_on) t1 = psb_wtime() - if (neighbor_comm_handle%use_persistent_buffers) then -#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) -#else - call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) -#endif - else - call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) - end if - if (timing_on) t_wait = t_wait + (psb_wtime() - t1) + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (neighbor_comm_handle%use_persistent_buffers) then - neighbor_comm_handle%diag_wait_calls = neighbor_comm_handle%diag_wait_calls + 1 - end if - if (neighbor_comm_handle%use_persistent_buffers) then - neighbor_comm_handle%persistent_in_flight = .false. - end if + neighbor_comm_handle%persistent_in_flight = .false. ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - if (timing_on) t1 = psb_wtime() + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' call y%sct(int(topology_total_recv,psb_mpk_), & & neighbor_comm_handle%recv_indexes, & & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & & beta) - if (timing_on) t_sct = t_sct + (psb_wtime() - t1) - else - ! nothing to wait/scatter - end if - - - ! Clean up - if ((.not. neighbor_comm_handle%use_persistent_buffers) .or. & - & (neighbor_comm_handle%use_persistent_buffers .and. .not. neighbor_comm_handle%persistent_request_ready)) then - neighbor_comm_handle%comm_request = mpi_request_null - end if - if (timing_on) t1 = psb_wtime() - call y%device_wait() - if (.not. neighbor_comm_handle%use_persistent_buffers) then - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - end if - if (timing_on) t_dev = t_dev + (psb_wtime() - t1) - if (debug) write(*,*) me,' nbr_vect: done' - - end if ! do_wait - - if (timing_on) then - t_total = psb_wtime() - t0 - call psb_amx(ctxt, t_topo) - call psb_amx(ctxt, t_buf) - call psb_amx(ctxt, t_gth) - call psb_amx(ctxt, t_init) - call psb_amx(ctxt, t_post) - call psb_amx(ctxt, t_wait) - call psb_amx(ctxt, t_sct) - call psb_amx(ctxt, t_dev) - call psb_amx(ctxt, t_total) - if (me == psb_root_) timing_report = psb_swap_timing_should_report() - if ((me == psb_root_) .and. timing_report) then - psb_swap_timing_neighbor_calls = call_idx - if (call_idx == 1) then - exchange_name = 'first' - else - exchange_name = 'steady' - end if - if (neighbor_comm_handle%use_persistent_buffers) then - write(psb_out_unit,'("SWAP_TIMING persistent_neighbor phase start=",l1,", wait=",l1)') do_start, do_wait - else - write(psb_out_unit,'("SWAP_TIMING neighbor phase start=",l1,", wait=",l1)') do_start, do_wait - end if - write(psb_out_unit,'(" exchange=",a,", call=",i0)') trim(exchange_name), call_idx - write(psb_out_unit,'(" topo=",es12.5,", buf=",es12.5,", gth=",es12.5,", init=",es12.5)') & - & t_topo, t_buf, t_gth, t_init - write(psb_out_unit,'(" post=",es12.5,", wait=",es12.5,", sct=",es12.5,", dev=",es12.5,", total=",es12.5)') & - & t_post, t_wait, t_sct, t_dev, t_total end if - end if + + call y%device_wait() + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait call psb_erractionrestore(err_act) return @@ -1179,7 +908,7 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_dswap_neighbor_topology_vect + end subroutine psi_dswap_neighbor_persistent_topology_vect @@ -1208,12 +937,12 @@ contains integer(psb_ipk_), optional :: data ! communication scheme/status selectors - logical :: baseline, neighbor_a2av + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent ! locals type(psb_ctxt_type) :: ctxt integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_, err_act class(psb_i_base_vect_type), pointer :: comm_indexes character(len=30) :: name @@ -1224,7 +953,7 @@ contains ctxt = desc_a%get_context() icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -1271,10 +1000,13 @@ contains end if baseline = .false. - neighbor_a2av = .false. + ineighbor_a2av = .false. + ineighbor_a2av_persistent = .false. select case(y%comm_handle%comm_type) - case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) - neighbor_a2av = .true. + case(psb_comm_ineighbor_alltoallv_) + ineighbor_a2av = .true. + case(psb_comm_persistent_ineighbor_alltoallv_) + ineighbor_a2av_persistent = .true. case default baseline = .true. end select @@ -1285,16 +1017,23 @@ contains call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if - else if (neighbor_a2av) then + else if (ineighbor_a2av) then call psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes, & & num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + call psb_errpush(info,name,a_err='neighbor nonblocking swap') + goto 9999 + end if + else if (ineighbor_a2av_persistent) then + call psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') goto 9999 end if else info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible swap_status settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') goto 9999 end if @@ -1330,7 +1069,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & ! locals integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me, nesd, nerv, n + integer(psb_mpk_) :: np, my_rank, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_), allocatable :: prcid(:) type(psb_comm_baseline_handle), pointer :: baseline_comm_handle @@ -1343,7 +1082,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & info = psb_success_ name = 'psi_dswap_baseline_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info = psb_err_context_error_ call psb_errpush(info,name) @@ -1370,7 +1109,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & call comm_indexes%sync() - if (debug) write(*,*) me,'Internal buffer' + if (debug) write(*,*) my_rank,'Internal buffer' if (do_send) then if (allocated(baseline_comm_handle%comid)) then if (any(baseline_comm_handle%comid /= mpi_request_null)) then @@ -1379,7 +1118,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' + if (debug) write(*,*) my_rank,'do_send start' call y%new_buffer(ione*size(comm_indexes%v),info) call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) if (info /= psb_success_) then @@ -1397,8 +1136,8 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & nerv = comm_indexes%v(pnti+psb_n_elem_recv_) nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),n*nerv,& & psb_mpi_r_dpk_,prcid(i),& @@ -1408,7 +1147,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' Gather ' + if (debug) write(*,*) my_rank,' Gather ' ! ! Then gather for sending. ! @@ -1430,7 +1169,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & ! call y%device_wait() - if (debug) write(*,*) me,' isend' + if (debug) write(*,*) my_rank,' isend' ! ! Then send ! @@ -1444,7 +1183,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & nerv = comm_indexes%v(pnti+psb_n_elem_recv_) nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - if ((nesd>0).and.(proc_to_comm /= me)) then + if ((nesd>0).and.(proc_to_comm /= my_rank)) then call mpi_isend(y%combuf(snd_pt),n*nesd,& & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) @@ -1462,7 +1201,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & end if if (do_recv) then - if (debug) write(*,*) me,' do_Recv' + if (debug) write(*,*) my_rank,' do_Recv' if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... @@ -1473,7 +1212,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & end if call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 @@ -1482,7 +1221,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then + if (proc_to_comm /= my_rank)then if (nesd>0) then call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then @@ -1499,7 +1238,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & goto 9999 end if end if - else if (proc_to_comm == me) then + else if (proc_to_comm == my_rank) then if (nesd /= nerv) then write(psb_err_unit,*) & & 'Fatal error in swapdata: mismatch on self send',& @@ -1512,7 +1251,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' scatter' + if (debug) write(*,*) my_rank,' scatter' pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 @@ -1522,7 +1261,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - if (debug) write(0,*)me,' Received from: ',prcid(i),& + if (debug) write(0,*)my_rank,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+n*nerv-1) call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv @@ -1537,9 +1276,9 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & ! ! Then wait for device ! - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' call y%device_wait() - if (debug) write(*,*) me,' free buffer' + if (debug) write(*,*) my_rank,' free buffer' call y%free_buffer(info) if (info == 0) then if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) @@ -1548,7 +1287,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - if (debug) write(*,*) me,' done' + if (debug) write(*,*) my_rank,' done' end if @@ -1584,7 +1323,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in ! locals integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: np, my_rank integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size @@ -1596,7 +1335,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in info = psb_success_ name = 'psi_dswap_neighbor_topology_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -1624,16 +1363,200 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in ! START phase: build topology (if needed), gather, post MPI ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - if (neighbor_comm_handle%use_persistent_buffers) then - if (neighbor_comm_handle%persistent_in_flight) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:topology_total_send)) + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then info = psb_err_mpi_error_ - call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if ((topology_total_send + topology_total_recv) > 0) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Wait for the non-blocking collective to complete + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + end if + + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_dswap_neighbor_topology_multivect + + + +subroutine psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_dswap_neighbor_topology_multivect_persistent' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if if (.not. neighbor_comm_handle%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology via handle' + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & & ctxt, icomm, info) if (info /= psb_success_) then @@ -1649,9 +1572,8 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv - if (neighbor_comm_handle%use_persistent_buffers) then + if (buffer_size > 0) then if (.not. allocated(y%combuf)) then - neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -1667,7 +1589,6 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in goto 9999 end if else if (size(y%combuf) < buffer_size) then - neighbor_comm_handle%diag_buffer_reallocs = neighbor_comm_handle%diag_buffer_reallocs + 1 if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -1683,28 +1604,25 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in goto 9999 end if end if - else - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if end if neighbor_comm_handle%comm_request = mpi_request_null - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & neighbor_comm_handle%send_indexes, & - & y%combuf(1:topology_total_send)) + if (buffer_size > 0) then + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:topology_total_send)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if ! Wait for device (important for GPU subclasses) call y%device_wait() - if (neighbor_comm_handle%use_persistent_buffers) then - if (.not. neighbor_comm_handle%persistent_request_ready) then -#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - if (debug) write(*,*) me,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' call mpi_neighbor_alltoallv_init( & & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & @@ -1722,80 +1640,24 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - neighbor_comm_handle%diag_init_calls = neighbor_comm_handle%diag_init_calls + 1 neighbor_comm_handle%persistent_request_ready = .true. neighbor_comm_handle%persistent_buffer_size = buffer_size -#else - ! Fallback when persistent neighborhood collectives are not available + else neighbor_comm_handle%persistent_request_ready = .false. neighbor_comm_handle%persistent_buffer_size = 0 -#endif end if + end if -#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - ! Count the attempt before MPI_Start so we can diagnose call reachability. - neighbor_comm_handle%diag_start_calls = neighbor_comm_handle%diag_start_calls + 1 - if (psb_swap_start_debug_should_report()) then - write(psb_out_unit,'("SWAP_DEBUG MPI_Start(pre) kind=multivect rank=",i0,", bsz=",i0,", ready=",l1)') & - & me, buffer_size, neighbor_comm_handle%persistent_request_ready - write(psb_out_unit,'(" inflight=",l1,", req_null=",l1,", dstart=",i0)') & - & neighbor_comm_handle%persistent_in_flight, & - & (neighbor_comm_handle%persistent_request == mpi_request_null), & - & neighbor_comm_handle%diag_start_calls - end if + if (buffer_size > 0) then call mpi_start(neighbor_comm_handle%persistent_request, iret) - if (psb_swap_start_debug_should_report()) then - write(psb_out_unit,'("SWAP_DEBUG MPI_Start(post) kind=multivect rank=",i0,", iret=",i0)') & - & me, iret - write(psb_out_unit,'(" inflight=",l1,", dstart=",i0)') & - & neighbor_comm_handle%persistent_in_flight, neighbor_comm_handle%diag_start_calls - end if - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if - neighbor_comm_handle%persistent_in_flight = .true. -#else - neighbor_comm_handle%diag_ineighbor_calls = neighbor_comm_handle%diag_ineighbor_calls + 1 - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if neighbor_comm_handle%persistent_in_flight = .true. -#endif else - ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - neighbor_comm_handle%diag_ineighbor_calls = neighbor_comm_handle%diag_ineighbor_calls + 1 - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & neighbor_comm_handle%comm_request, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if + neighbor_comm_handle%persistent_in_flight = .false. end if end if ! do_start @@ -1805,68 +1667,38 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in ! --------------------------------------------------------- if (do_wait) then - if (neighbor_comm_handle%use_persistent_buffers) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) > 0) then if (.not. neighbor_comm_handle%persistent_in_flight) then info = psb_err_mpi_error_ call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') goto 9999 end if - else - if (neighbor_comm_handle%comm_request == mpi_request_null) then + + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) + call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if - - topology_total_send = neighbor_comm_handle%total_send - topology_total_recv = neighbor_comm_handle%total_recv + neighbor_comm_handle%persistent_in_flight = .false. - ! Wait for the non-blocking collective to complete - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - if (neighbor_comm_handle%use_persistent_buffers) then -#ifdef PSB_HAVE_MPI_NEIGHBOR_PERSISTENT - call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) -#else - call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) -#endif + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) else - call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) - end if - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if - if (neighbor_comm_handle%use_persistent_buffers) then - neighbor_comm_handle%diag_wait_calls = neighbor_comm_handle%diag_wait_calls + 1 - end if - if (neighbor_comm_handle%use_persistent_buffers) then neighbor_comm_handle%persistent_in_flight = .false. end if - ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & neighbor_comm_handle%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) - - - ! Clean up - if ((.not. neighbor_comm_handle%use_persistent_buffers) .or. & - & (neighbor_comm_handle%use_persistent_buffers .and. .not. neighbor_comm_handle%persistent_request_ready)) then - neighbor_comm_handle%comm_request = mpi_request_null - end if call y%device_wait() - if (.not. neighbor_comm_handle%use_persistent_buffers) then - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - end if - if (debug) write(*,*) me,' nbr_vect: done' + if (debug) write(*,*) my_rank,' nbr_vect: done' end if ! do_wait @@ -1876,7 +1708,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_dswap_neighbor_topology_multivect +end subroutine psi_dswap_neighbor_topology_multivect_persistent end submodule psi_d_swapdata_impl diff --git a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 index 4f8a29b8a..742dc89c4 100644 --- a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 @@ -30,11 +30,6 @@ module psb_comm_neighbor_impl_mod logical :: persistent_request_ready = .false. logical :: persistent_in_flight = .false. integer(psb_ipk_) :: persistent_buffer_size = 0 - integer(psb_ipk_) :: diag_init_calls = 0 - integer(psb_ipk_) :: diag_start_calls = 0 - integer(psb_ipk_) :: diag_ineighbor_calls = 0 - integer(psb_ipk_) :: diag_wait_calls = 0 - integer(psb_ipk_) :: diag_buffer_reallocs = 0 contains procedure, pass :: init => psb_comm_neighbor_init procedure, pass :: free => neighbor_topology_free @@ -398,11 +393,6 @@ contains this%persistent_request_ready = .false. this%persistent_in_flight = .false. this%persistent_buffer_size = 0 - this%diag_init_calls = 0 - this%diag_start_calls = 0 - this%diag_ineighbor_calls = 0 - this%diag_wait_calls = 0 - this%diag_buffer_reallocs = 0 call this%free(info) end subroutine psb_comm_neighbor_destroy @@ -440,16 +430,6 @@ contains this%persistent_request_ready = .false. this%persistent_in_flight = .false. this%persistent_buffer_size = 0 - this%diag_init_calls = 0 - this%diag_start_calls = 0 - this%diag_ineighbor_calls = 0 - this%diag_wait_calls = 0 - this%diag_buffer_reallocs = 0 - this%diag_init_calls = 0 - this%diag_start_calls = 0 - this%diag_ineighbor_calls = 0 - this%diag_wait_calls = 0 - this%diag_buffer_reallocs = 0 end subroutine psb_comm_neighbor_init diff --git a/test/comm/cg/Makefile b/test/comm/cg/Makefile index b1e4e53d7..6bc3ee304 100644 --- a/test/comm/cg/Makefile +++ b/test/comm/cg/Makefile @@ -4,8 +4,8 @@ MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas LIBDIR=$(INSTALLDIR)/lib/ -PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base -LDLIBS=$(PSBLDLIBS) +PSBLAS_LIB= -L$(LIBDIR) $(LCUDA) -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base -lpsb_cuda -lpsb_ext +LDLIBS=$(PSBGPULDLIBS) FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). @@ -24,7 +24,7 @@ runsd: (if test ! -d runs ; then mkdir runs; fi) psb_comm_cg_test.o: $(PROGSRC) - $(FC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c $(PROGSRC) -o $@ + $(FC) $(FCOPT) $(FINCLUDES) $(FDEFINES) $(FCUDEFINES) -c $(PROGSRC) -o $@ $(EXE): $(TOBJS) $(FLINK) $(LOPT) $(TOBJS) -o $(EXE) $(PSBLAS_LIB) $(LDLIBS) diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index 1b75dad7c..baf1bab69 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -1,5 +1,8 @@ program psb_comm_cg_test use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif use psb_prec_mod use psb_linsolve_mod use psb_comm_factory_mod @@ -14,8 +17,14 @@ program psb_comm_cg_test type(psb_desc_type) :: desc_a type(psb_d_vect_type) :: b, x type(psb_dprec_type) :: prec - - integer(psb_ipk_) :: info, iam, np +#ifdef PSB_HAVE_CUDA + type(psb_d_vect_cuda) :: vmold + type(psb_i_vect_cuda) :: imold + type(psb_d_cuda_hlg_sparse_mat), target :: ahlg + class(psb_d_base_sparse_mat), pointer :: agmold +#endif + + integer(psb_ipk_) :: info, my_rank, np integer(psb_ipk_) :: desc_me, desc_np integer(psb_ipk_) :: idim, itmax, itrace, istop, iter integer(psb_ipk_) :: scheme_idx, prec_idx, rep, nrep, nwarm @@ -35,7 +44,9 @@ program psb_comm_cg_test character(len=20) :: prec_name(n_precs) character(len=5) :: afmt character(len=256) :: arg + character(len=16) :: gpu_arg logical :: setup_done + logical :: use_gpu info = psb_success_ afmt = 'CSR' @@ -47,6 +58,11 @@ program psb_comm_cg_test itrace = -1 istop = 2 eps = 1.d-6 +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & & psb_comm_persistent_ineighbor_alltoallv_ /) scheme_name(1) = 'isend_irecv' @@ -89,15 +105,31 @@ program psb_comm_cg_test info = psb_success_ end if end if + + call parse_gpu_arg(use_gpu, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid value for --gpu option. Use --gpu=TRUE or --gpu=FALSE")') + stop 1 + end if ! call psb_set_debug_level(psb_debug_ext_) ! call probe_ieee('before psb_init') call psb_init(ctxt) +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#endif ! call probe_ieee('after psb_init') call clear_ieee_flags() ! call probe_ieee('after clear_ieee_flags') - call psb_info(ctxt, iam, np) + call psb_info(ctxt, my_rank, np) + +#ifndef PSB_HAVE_CUDA + if (use_gpu .and. my_rank == psb_root_) then + write(psb_out_unit,'("Warning: --gpu=TRUE requested but this executable was built without CUDA support. Running on CPU.")') + end if + use_gpu = .false. +#endif allocate(setup_time(n_precs,n_schemes,nrep), solve_time(n_precs,n_schemes,nrep), & & total_time(n_precs,n_schemes,nrep), final_error(n_precs,n_schemes,nrep), & @@ -107,7 +139,7 @@ program psb_comm_cg_test & comm_set_time(n_precs,n_schemes,nrep), krylov_time(n_precs,n_schemes,nrep), stat=info) if (info /= psb_success_) stop 1 - if (iam == psb_root_) then + if (my_rank == psb_root_) then write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ write(psb_out_unit,*) 'This is the comm/cg test program' write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim @@ -117,18 +149,32 @@ program psb_comm_cg_test write(psb_out_unit,'("Max iterations (CG) : ",i0)') itmax write(psb_out_unit,'("Repetitions : ",i0)') nrep write(psb_out_unit,'("Warmup solves : ",i0)') nwarm + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu write(psb_out_unit,'(" ")') - write(psb_out_unit,'("Usage: ./psb_comm_cg_test [idim] [nrep] [nwarm] [itmax]")') + write(psb_out_unit,'("Usage: ./psb_comm_cg_test [idim] [nrep] [nwarm] [itmax] [--gpu=TRUE|FALSE]")') write(psb_out_unit,'(" ")') end if call psb_barrier(ctxt) - t_start = psb_wtime() ! call probe_ieee('before psb_d_gen_pde3d') call psb_d_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) ! call probe_ieee('after psb_d_gen_pde3d') if (info /= psb_success_) goto 9999 +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + agmold => ahlg + call a%cscnv(info,mold=agmold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=imold) + if (info /= psb_success_) goto 9999 + call psb_geasb(x,desc_a,info,mold=vmold) + if (info /= psb_success_) goto 9999 + call psb_geasb(b,desc_a,info,mold=vmold) + if (info /= psb_success_) goto 9999 + end if +#endif + do prec_idx = 1, n_precs do scheme_idx = 1, n_schemes do rep = 1, nrep @@ -206,31 +252,20 @@ program psb_comm_cg_test final_error(prec_idx,scheme_idx,rep) = err solve_info(prec_idx,scheme_idx,rep) = info - if (iam == psb_root_) then - select type(ch => x%v%comm_handle) - type is(psb_comm_neighbor_handle) - write(psb_out_unit,'("DIAG_COMM scheme=",a,", prec=",a,", rep=",i0)') & - & trim(scheme_name(scheme_idx)), trim(prec_name(prec_idx)), rep - write(psb_out_unit,'("DIAG_COMM counters: init=",i0,", start=",i0,", ineighbor=",i0,", wait=",i0,", realloc=",i0)') & - & ch%diag_init_calls, ch%diag_start_calls, ch%diag_ineighbor_calls, & - & ch%diag_wait_calls, ch%diag_buffer_reallocs - write(psb_out_unit,'("DIAG_COMM state: ready=",l1,", bsz=",i0)') & - & ch%persistent_request_ready, ch%persistent_buffer_size - class default - continue - end select - end if - if (info /= psb_success_) goto 9999 end do end do end do - if (iam == psb_root_) then + if (my_rank == psb_root_) then write(psb_out_unit,'(" ")') write(psb_out_unit,'(100("="))') write(psb_out_unit,'("CG TIMING STATISTICS - FINAL RESULTS TABLE")') write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("Legend:")') + write(psb_out_unit,'(" - Each phase time for one repetition is reduced with max across MPI ranks.")') + write(psb_out_unit,'(" - Minimum/Average/Maximum/Std Dev are computed across repetitions.")') + write(psb_out_unit,'(" - KrylovPerIter = KrylovSolve/iterations; TotalPerIter = TotalTime/iterations.")') do prec_idx = 1, n_precs write(psb_out_unit,'(" ")') @@ -307,6 +342,10 @@ program psb_comm_cg_test & prec_init_time,prec_bld_time,comm_set_time,krylov_time, & & krylov_it_time,total_it_time) + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif call psb_exit(ctxt) stop @@ -449,6 +488,32 @@ contains call ieee_set_flag(ieee_underflow, .false.) end subroutine clear_ieee_flags + subroutine parse_gpu_arg(use_gpu, info) + logical, intent(inout) :: use_gpu + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + if (index(uarg,'--GPU=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + select case (trim(val)) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + case default + info = psb_err_internal_error_ + return + end select + end if + end do + end subroutine parse_gpu_arg + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info) implicit none integer(psb_ipk_), intent(in) :: idim @@ -464,7 +529,7 @@ contains integer(psb_lpk_) :: m,n,glob_row integer(psb_ipk_) :: nnz,nlr,i,ii,ib,k integer(psb_ipk_) :: ix,iy,iz - integer(psb_ipk_) :: np, iam, nr, nt + integer(psb_ipk_) :: np, my_rank, nr, nt integer(psb_ipk_) :: icoeff integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) real(psb_dpk_), allocatable :: val(:) @@ -477,7 +542,7 @@ contains name = 'create_matrix' call psb_erractionsave(err_act) - call psb_info(ctxt, iam, np) + call psb_info(ctxt, my_rank, np) if (idim <= 0) then info = psb_err_internal_error_ @@ -489,9 +554,9 @@ contains call psb_errpush(info,name,a_err='invalid context: np <= 0') goto 9999 end if - if (iam < 0) then + if (my_rank < 0) then info = psb_err_context_error_ - call psb_errpush(info,name,a_err='invalid context: iam < 0') + call psb_errpush(info,name,a_err='invalid context: my_rank < 0') goto 9999 end if @@ -528,14 +593,14 @@ contains call psb_errpush(info,name,a_err='invalid local nnz estimate: nnz <= 0') goto 9999 end if - if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + if(my_rank == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n nt = (m+np-1)/np - nr = max(0,min(nt,m-(iam*nt))) + nr = max(0,min(nt,m-(my_rank*nt))) nt = nr call psb_sum(ctxt,nt) if (nt /= m) then - write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + write(psb_err_unit,*) my_rank, 'Initialization error ',nr,nt,m info = -1 call psb_barrier(ctxt) call psb_abort(ctxt) @@ -661,7 +726,7 @@ contains ! call probe_ieee('after psb_spins') if(info /= psb_success_) then write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_spins, ii=",i0,", ib=",i0,", icoeff=",i0)') & - iam, ii, ib, icoeff + my_rank, ii, ib, icoeff write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz exit end if @@ -669,7 +734,7 @@ contains ! call probe_ieee('after psb_geins bv') if(info /= psb_success_) then write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins bv, ii=",i0,", ib=",i0,", icoeff=",i0)') & - iam, ii, ib, icoeff + my_rank, ii, ib, icoeff write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz exit end if @@ -678,7 +743,7 @@ contains ! call probe_ieee('after psb_geins xv') if(info /= psb_success_) then write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins xv, ii=",i0,", ib=",i0,", icoeff=",i0)') & - iam, ii, ib, icoeff + my_rank, ii, ib, icoeff write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz exit end if @@ -730,7 +795,7 @@ contains call psb_amx(ctxt,tgen) call psb_amx(ctxt,tasb) call psb_amx(ctxt,ttot) - if(iam == psb_root_) then + if(my_rank == psb_root_) then tmpfmt = a%get_fmt() write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")') tmpfmt write(psb_out_unit,'("-allocation time : ",es12.5)') talc diff --git a/test/comm/cg/psb_pde3d_cg_noprec.inp b/test/comm/cg/psb_pde3d_cg_noprec.inp deleted file mode 100644 index fbfeeaf1f..000000000 --- a/test/comm/cg/psb_pde3d_cg_noprec.inp +++ /dev/null @@ -1,18 +0,0 @@ -17 Number of entries below this -CG Iterative method BICGSTAB CGS BICG BICGSTABL RGMRES FCG CGR RICHARDSON -NONE Preconditioner NONE DIAG BJAC -CSR Storage format for matrix A: CSR COO -100 Domain size (actual system is this**3 in pde3d) -3 Partition: 1 BLOCK 3 3D -2 Stopping criterion 1 2 -0200 MAXIT -10 ITRACE -002 IRST restart for RGMRES and BiCGSTABL -INVK Block Solver ILU,ILUT,INVK,INVT,AINV -NONE If ILU : MILU or NONE otherwise ignored -NONE Scaling if ILUT: NONE, MAXVAL otherwise ignored -0 Level of fill for forward factorization -1 Level of fill for inverse factorization (only INVK,INVT) -1E-1 Threshold for forward factorization -1E-1 Threshold for inverse factorization (Only INVK, INVT) -LLK Orthogonalization algorithm (only AINV) diff --git a/test/comm/spmv/Makefile b/test/comm/spmv/Makefile index 1416389d7..dd1df48b8 100644 --- a/test/comm/spmv/Makefile +++ b/test/comm/spmv/Makefile @@ -6,12 +6,12 @@ include $(INCDIR)/Make.inc.psblas # Libraries used # LIBDIR=$(INSTALLDIR)/lib/ -PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_base -LDLIBS=$(PSBLDLIBS) +PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_cuda -lpsb_ext -lpsb_base +LDLIBS=$(PSBGPULDLIBS) FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). -TOBJS=psb_spmv_overlap_test.o spmv_overlap.o +TOBJS=psb_spmv_test.o EXEDIR=./runs @@ -20,13 +20,16 @@ all: runsd spmv_overlap runsd: (if test ! -d runs ; then mkdir runs; fi) +psb_spmv_test.o: psb_spmv_test.f90 + $(FC) $(FCOPT) -cpp $(FINCLUDES) $(FDEFINES) $(FCUDEFINES) -c $< -o $@ + spmv_overlap: $(TOBJS) $(FLINK) $(LOPT) $(TOBJS) -o spmv_overlap $(PSBLAS_LIB) $(LDLIBS) /bin/mv spmv_overlap $(EXEDIR) - /bin/cp -f $(EXEDIR)/spmv_overlap $(EXEDIR)/psb_spmv_overlap_test + /bin/cp -f $(EXEDIR)/spmv_overlap $(EXEDIR)/psb_spmv_kernel clean: - /bin/rm -f $(TOBJS) $(TOBJS_API) *$(.mod) $(EXEDIR)/spmv_overlap $(EXEDIR)/psb_spmv_overlap_test + /bin/rm -f $(TOBJS) $(TOBJS_API) *$(.mod) $(EXEDIR)/spmv_overlap $(EXEDIR)/psb_spmv_kernel lib: (cd ../../; make library) diff --git a/test/comm/spmv/psb_spmv_overlap_test.f90 b/test/comm/spmv/psb_spmv_overlap_test.f90 deleted file mode 100644 index 25226fcfc..000000000 --- a/test/comm/spmv/psb_spmv_overlap_test.f90 +++ /dev/null @@ -1,1077 +0,0 @@ -!> Test program for overlapping communication and computation with psb_spmm. -!! -!! This benchmark compares two equivalent SpMV paths: -!! 1. Serialized halo exchange + compute -!! 2. Overlapped psb_spmm(..., doswap=.true.) -!! -module psb_spmv_overlap_test - - use psb_base_mod - use psb_util_mod - use psb_comm_factory_mod, only: psb_comm_set - use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & - & psb_comm_persistent_ineighbor_alltoallv_ - use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle - - implicit none - - interface - function d_func_3d(x,y,z) result(val) - import :: psb_dpk_ - real(psb_dpk_), intent(in) :: x,y,z - real(psb_dpk_) :: val - end function d_func_3d - end interface - -contains - - - function d_null_func_3d(x,y,z) result(val) - - real(psb_dpk_), intent(in) :: x,y,z - real(psb_dpk_) :: val - - val = dzero - - end function d_null_func_3d - ! - ! functions parametrizing the differential equation - ! - - ! - ! Note: b1, b2 and b3 are the coefficients of the first - ! derivative of the unknown function. The default - ! we apply here is to have them zero, so that the resulting - ! matrix is symmetric/hermitian and suitable for - ! testing with CG and FCG. - ! When testing methods for non-hermitian matrices you can - ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) - ! - function b1(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b1 - real(psb_dpk_), intent(in) :: x,y,z - b1=dzero - end function b1 - function b2(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b2 - real(psb_dpk_), intent(in) :: x,y,z - b2=dzero - end function b2 - function b3(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: b3 - real(psb_dpk_), intent(in) :: x,y,z - b3=dzero - end function b3 - function c(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: c - real(psb_dpk_), intent(in) :: x,y,z - c=dzero - end function c - function a1(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a1 - real(psb_dpk_), intent(in) :: x,y,z - a1=done/80 - end function a1 - function a2(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a2 - real(psb_dpk_), intent(in) :: x,y,z - a2=done/80 - end function a2 - function a3(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: a3 - real(psb_dpk_), intent(in) :: x,y,z - a3=done/80 - end function a3 - function g(x,y,z) - use psb_base_mod, only : psb_dpk_, done, dzero - implicit none - real(psb_dpk_) :: g - real(psb_dpk_), intent(in) :: x,y,z - g = dzero - if (x == done) then - g = done - else if (x == dzero) then - g = exp(y**2-z**2) - end if - end function g - - ! - ! subroutine to allocate and fill in the coefficient matrix and - ! the rhs. - ! - subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& - & f,amold,vmold,imold,partition,nrl,iv,tnd) - use psb_base_mod - use psb_util_mod - ! - ! Discretizes the partial differential equation - ! - ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) - ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f - ! dxdx dydy dzdz dx dy dz - ! - ! with Dirichlet boundary conditions - ! u = g - ! - ! on the unit cube 0<=x,y,z<=1. - ! - ! - ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. - ! - implicit none - integer(psb_ipk_) :: idim - type(psb_dspmat_type) :: a - type(psb_d_vect_type) :: xv,bv - type(psb_desc_type) :: desc_a - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: info - character(len=*) :: afmt - procedure(d_func_3d), optional :: f - class(psb_d_base_sparse_mat), optional :: amold - class(psb_d_base_vect_type), optional :: vmold - class(psb_i_base_vect_type), optional :: imold - integer(psb_ipk_), optional :: partition, nrl,iv(:) - logical, optional :: tnd - ! Local variables. - - integer(psb_ipk_), parameter :: nb=20 - type(psb_d_csc_sparse_mat) :: acsc - type(psb_d_coo_sparse_mat) :: acoo - type(psb_d_csr_sparse_mat) :: acsr - real(psb_dpk_) :: zt(nb),x,y,z - integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ - integer(psb_lpk_) :: m,n,glob_row,nt - integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner - ! For 3D partition - ! Note: integer control variables going directly into an MPI call - ! must be 4 bytes, i.e. psb_mpk_ - integer(psb_mpk_) :: npdims(3), npp, minfo - integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz - integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) - ! Process grid - integer(psb_ipk_) :: np, iam, nth - integer(psb_ipk_) :: icoeff - integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) - real(psb_dpk_), allocatable :: val(:) - ! deltah dimension of each grid cell - ! deltat discretization time - real(psb_dpk_) :: deltah, sqdeltah, deltah2 - real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero - real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb - integer(psb_ipk_) :: err_act - procedure(d_func_3d), pointer :: f_ - logical :: tnd_ - character(len=20) :: name, ch_err,tmpfmt - - info = psb_success_ - name = 'create_matrix' - call psb_erractionsave(err_act) - - call psb_info(ctxt, iam, np) - - - if (present(f)) then - f_ => f - else - f_ => d_null_func_3d - end if - - deltah = done/(idim+1) - sqdeltah = deltah*deltah - deltah2 = (2*done)* deltah - - if (present(partition)) then - if ((1<= partition).and.(partition <= 3)) then - partition_ = partition - else - write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' - partition_ = 3 - end if - else - partition_ = 3 - end if - - ! initialize array descriptor and sparse matrix storage. provide an - ! estimate of the number of non zeroes - - m = (1_psb_lpk_*idim)*idim*idim - n = m - nnz = ((n*7)/(np)) - if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n - t0 = psb_wtime() - select case(partition_) - case(1) - ! A BLOCK partition - if (present(nrl)) then - nr = nrl - else - ! - ! Using a simple BLOCK distribution. - ! - nt = (m+np-1)/np - nr = max(0,min(nt,m-(iam*nt))) - end if - - nt = nr - call psb_sum(ctxt,nt) - if (nt /= m) then - write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - - ! - ! First example of use of CDALL: specify for each process a number of - ! contiguous rows - ! - call psb_cdall(ctxt,desc_a,info,nl=nr) - myidx = desc_a%get_global_indices() - nlr = size(myidx) - - case(2) - ! A partition defined by the user through IV - - if (present(iv)) then - if (size(iv) /= m) then - write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - else - write(psb_err_unit,*) iam, 'Initialization error: IV not present' - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end if - - ! - ! Second example of use of CDALL: specify for each row the - ! process that owns it - ! - call psb_cdall(ctxt,desc_a,info,vg=iv) - myidx = desc_a%get_global_indices() - nlr = size(myidx) - - case(3) - ! A 3-dimensional partition - - ! A nifty MPI function will split the process list - npdims = 0 - call mpi_dims_create(np,3,npdims,info) - npx = npdims(1) - npy = npdims(2) - npz = npdims(3) - - allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) - ! We can reuse idx2ijk for process indices as well. - call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) - ! Now let's split the 3D cube in hexahedra - call dist1Didx(bndx,idim,npx) - mynx = bndx(iamx+1)-bndx(iamx) - call dist1Didx(bndy,idim,npy) - myny = bndy(iamy+1)-bndy(iamy) - call dist1Didx(bndz,idim,npz) - mynz = bndz(iamz+1)-bndz(iamz) - - ! How many indices do I own? - nlr = mynx*myny*mynz - allocate(myidx(nlr)) - ! Now, let's generate the list of indices I own - nr = 0 - do i=bndx(iamx),bndx(iamx+1)-1 - do j=bndy(iamy),bndy(iamy+1)-1 - do k=bndz(iamz),bndz(iamz+1)-1 - nr = nr + 1 - call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) - end do - end do - end do - if (nr /= nlr) then - write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& - & nr,nlr,mynx,myny,mynz - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - end if - - ! - ! Third example of use of CDALL: specify for each process - ! the set of global indices it owns. - ! - call psb_cdall(ctxt,desc_a,info,vl=myidx) - - case default - write(psb_err_unit,*) iam, 'Initialization error: should not get here' - info = -1 - call psb_barrier(ctxt) - call psb_abort(ctxt) - return - end select - - - if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) - ! define rhs from boundary conditions; also build initial guess - if (info == psb_success_) call psb_geall(xv,desc_a,info) - if (info == psb_success_) call psb_geall(bv,desc_a,info) - - call psb_barrier(ctxt) - talc = psb_wtime()-t0 - - if (info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='allocation rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - ! we build an auxiliary matrix consisting of one row at a - ! time; just a small matrix. might be extended to generate - ! a bunch of rows per call. - ! - allocate(val(20*nb),irow(20*nb),& - &icol(20*nb),stat=info) - if (info /= psb_success_ ) then - info=psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - endif - - - ! loop over rows belonging to current process in a block - ! distribution. - - call psb_barrier(ctxt) - t1 = psb_wtime() - do ii=1, nlr,nb - ib = min(nb,nlr-ii+1) - icoeff = 1 - do k=1,ib - i=ii+k-1 - ! local matrix pointer - glob_row=myidx(i) - ! compute gridpoint coordinates - call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) - ! x, y, z coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah - z = (iz-1)*deltah - zt(k) = f_(x,y,z) - ! internal point: build discretization - ! - ! term depending on (x-1,y,z) - ! - val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 - if (ix == 1) then - zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y-1,z) - val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 - if (iy == 1) then - zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y,z-1) - val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 - if (iz == 1) then - zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - - ! term depending on (x,y,z) - val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & - & + c(x,y,z) - call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - ! term depending on (x,y,z+1) - val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 - if (iz == idim) then - zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x,y+1,z) - val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 - if (iy == idim) then - zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - ! term depending on (x+1,y,z) - val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 - if (ix==idim) then - zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) - else - call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) - irow(icoeff) = glob_row - icoeff = icoeff+1 - endif - - end do - call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) - if(info /= psb_success_) exit - call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) - if(info /= psb_success_) exit - zt(:)=dzero - call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) - if(info /= psb_success_) exit - end do - - tgen = psb_wtime()-t1 - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='insert rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - - deallocate(val,irow,icol) - - call psb_barrier(ctxt) - t1 = psb_wtime() - call psb_cdasb(desc_a,info,mold=imold) - tcdasb = psb_wtime()-t1 - call psb_barrier(ctxt) - t1 = psb_wtime() - if (info == psb_success_) then - if (present(amold)) then - call psb_spasb(a,desc_a,info,mold=amold,bld_and=tnd) - else - call psb_spasb(a,desc_a,info,afmt=afmt,bld_and=tnd) - end if - end if - call psb_barrier(ctxt) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='asb rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - if (info == psb_success_) call psb_geasb(xv,desc_a,info,mold=vmold) - if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='asb rout.' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - tasb = psb_wtime()-t1 - call psb_barrier(ctxt) - ttot = psb_wtime() - t0 - - call psb_amx(ctxt,talc) - call psb_amx(ctxt,tgen) - call psb_amx(ctxt,tasb) - call psb_amx(ctxt,ttot) - if(iam == psb_root_) then - tmpfmt = a%get_fmt() - write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& - & tmpfmt - write(psb_out_unit,'("-allocation time : ",es12.5)') talc - write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen - write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb - write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb - write(psb_out_unit,'("-total time : ",es12.5)') ttot - - end if - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psb_d_gen_pde3d - - subroutine psb_spmv_overlap_kernel(ctxt) - use psb_base_mod - use psb_util_mod - - implicit none - - type(psb_ctxt_type), intent(in) :: ctxt - real(psb_dpk_) :: alpha, beta - - type(psb_dspmat_type) :: a - type(psb_d_vect_type) :: x_isend, x_neighbor, x_persistent - type(psb_d_vect_type) :: y_ov_isend, y_ov_neighbor, y_ov_persistent - type(psb_d_vect_type) :: y_no_isend, y_no_neighbor, y_no_persistent - type(psb_desc_type) :: desc_a - - character(len=64) :: env_buf - real(psb_dpk_), allocatable :: x_global(:), y_global(:) - integer(psb_ipk_) :: my_rank, np, info, err_act - integer :: env_len, env_status, ios - integer(psb_ipk_) :: n_global, idim - integer(psb_ipk_) :: i, times - real(psb_dpk_) :: t0, t1, dt - real(psb_dpk_) :: t_ov_isend, t_ov_neighbor, t_ov_persistent - real(psb_dpk_) :: t_no_isend, t_no_neighbor, t_no_persistent - real(psb_dpk_) :: err_isend, err_neighbor, err_persistent, tol - real(psb_dpk_) :: avg_ov, avg_no, speedup, gain_pct - integer(psb_ipk_) :: n_init_neighbor_l, n_start_neighbor_l, n_wait_neighbor_l, n_realloc_neighbor_l - integer(psb_ipk_) :: n_init_persist_l, n_start_persist_l, n_wait_persist_l, n_realloc_persist_l - integer(psb_ipk_) :: n_init_neighbor_g, n_start_neighbor_g, n_wait_neighbor_g, n_realloc_neighbor_g - integer(psb_ipk_) :: n_init_persist_g, n_start_persist_g, n_wait_persist_g, n_realloc_persist_g - integer(psb_ipk_) :: n_ineighbor_neighbor_l, n_ineighbor_neighbor_g - integer(psb_ipk_) :: peak_start_neighbor_l, peak_start_persist_l - integer(psb_ipk_) :: peak_start_neighbor_g, peak_start_persist_g - integer(psb_ipk_) :: last_start_neighbor_l, last_start_persist_l - integer(psb_ipk_) :: accum_start_neighbor_l, accum_start_persist_l - integer(psb_ipk_) :: accum_start_neighbor_g, accum_start_persist_g - integer(psb_ipk_) :: comm_type_neighbor_l, comm_type_persist_l - integer(psb_ipk_) :: comm_type_neighbor_g, comm_type_persist_g - integer(psb_ipk_) :: is_neighbor_handle_l, is_persist_handle_l - integer(psb_ipk_) :: is_neighbor_handle_g, is_persist_handle_g - integer(psb_ipk_) :: use_persistent_neighbor_l, use_persistent_persist_l - integer(psb_ipk_) :: use_persistent_neighbor_g, use_persistent_persist_g - - info = psb_success_ - tol = 1.0d-10 - times = 100 - t_ov_isend = 0.0_psb_dpk_ - t_ov_neighbor = 0.0_psb_dpk_ - t_ov_persistent = 0.0_psb_dpk_ - t_no_isend = 0.0_psb_dpk_ - t_no_neighbor = 0.0_psb_dpk_ - t_no_persistent = 0.0_psb_dpk_ - peak_start_neighbor_l = 0 - peak_start_persist_l = 0 - n_ineighbor_neighbor_l = 0 - last_start_neighbor_l = -1 - last_start_persist_l = -1 - accum_start_neighbor_l = 0 - accum_start_persist_l = 0 - comm_type_neighbor_l = -1 - comm_type_persist_l = -1 - is_neighbor_handle_l = 0 - is_persist_handle_l = 0 - use_persistent_neighbor_l = 0 - use_persistent_persist_l = 0 - idim = 10 - call psb_erractionsave(err_act) - - call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) - if ((env_status == 0) .and. (env_len > 0)) then - read(env_buf(1:env_len), *, iostat=ios) idim - if ((ios /= 0) .or. (idim < 2)) idim = 10 - end if - - call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) - if ((env_status == 0) .and. (env_len > 0)) then - read(env_buf(1:env_len), *, iostat=ios) times - if ((ios /= 0) .or. (times < 1)) times = 100 - end if - - n_global = idim * idim * idim - alpha = done - beta = dzero - - call psb_info(ctxt, my_rank, np) - - - call psb_barrier(ctxt) - call psb_d_gen_pde3d(ctxt,idim,a,y_ov_isend,x_isend,desc_a,"CSR",info,partition=1) - - if (info /= psb_success_) goto 9999 - call psb_barrier(ctxt) - - if (my_rank == psb_root_) then - allocate(x_global(n_global)) - allocate(y_global(n_global)) - do i = 1, n_global - x_global(i) = real(mod(i,17)+1, psb_dpk_) / real(17, psb_dpk_) - y_global(i) = real(mod(i,13), psb_dpk_) / real(29, psb_dpk_) - end do - end if - - call psb_geall(x_neighbor, desc_a, info) - call psb_geall(x_persistent, desc_a, info) - call psb_geall(y_ov_neighbor, desc_a, info) - call psb_geall(y_ov_persistent, desc_a, info) - call psb_geall(y_no_isend, desc_a, info) - call psb_geall(y_no_neighbor, desc_a, info) - call psb_geall(y_no_persistent, desc_a, info) - if (info /= psb_success_) goto 9999 - - call psb_scatter(x_global, x_isend, desc_a, info, root=psb_root_) - call psb_scatter(x_global, x_neighbor, desc_a, info, root=psb_root_) - call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_ov_isend, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_ov_neighbor, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_ov_persistent, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_no_isend, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_no_neighbor, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_no_persistent, desc_a, info, root=psb_root_) - if (info /= psb_success_) goto 9999 - - ! Set communication schemes on the x vectors used by psb_spmm. - call psb_comm_set(psb_comm_isend_irecv_, x_isend%v%comm_handle, info) - if (info /= psb_success_) goto 9999 - call psb_comm_set(psb_comm_ineighbor_alltoallv_, x_neighbor%v%comm_handle, info) - if (info /= psb_success_) goto 9999 - call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, x_persistent%v%comm_handle, info) - if (info /= psb_success_) goto 9999 - - select type(ch => x_neighbor%v%comm_handle) - type is(psb_comm_neighbor_handle) - is_neighbor_handle_l = 1 - comm_type_neighbor_l = ch%comm_type - if (ch%use_persistent_buffers) use_persistent_neighbor_l = 1 - class default - continue - end select - - select type(ch => x_persistent%v%comm_handle) - type is(psb_comm_neighbor_handle) - is_persist_handle_l = 1 - comm_type_persist_l = ch%comm_type - if (ch%use_persistent_buffers) use_persistent_persist_l = 1 - class default - continue - end select - - ! Warm-up all schemes once: overlap and non-overlap paths. - call psb_spmm(alpha, a, x_isend, beta, y_ov_isend, desc_a, info, doswap=.true.) - call psb_halo(x_isend, desc_a, info) - call psb_spmm(alpha, a, x_isend, beta, y_no_isend, desc_a, info, doswap=.false.) - - call psb_spmm(alpha, a, x_neighbor, beta, y_ov_neighbor, desc_a, info, doswap=.true.) - select type(ch => x_neighbor%v%comm_handle) - type is(psb_comm_neighbor_handle) - n_ineighbor_neighbor_l = ch%diag_ineighbor_calls - if (last_start_neighbor_l < 0) then - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_neighbor_l) then - accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) - else - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - end if - last_start_neighbor_l = ch%diag_start_calls - peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) - class default - continue - end select - call psb_halo(x_neighbor, desc_a, info) - select type(ch => x_neighbor%v%comm_handle) - type is(psb_comm_neighbor_handle) - n_ineighbor_neighbor_l = ch%diag_ineighbor_calls - if (last_start_neighbor_l < 0) then - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_neighbor_l) then - accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) - else - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - end if - last_start_neighbor_l = ch%diag_start_calls - peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) - class default - continue - end select - call psb_spmm(alpha, a, x_neighbor, beta, y_no_neighbor, desc_a, info, doswap=.false.) - select type(ch => x_neighbor%v%comm_handle) - type is(psb_comm_neighbor_handle) - n_ineighbor_neighbor_l = ch%diag_ineighbor_calls - if (last_start_neighbor_l < 0) then - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_neighbor_l) then - accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) - else - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - end if - last_start_neighbor_l = ch%diag_start_calls - peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) - class default - continue - end select - - call psb_spmm(alpha, a, x_persistent, beta, y_ov_persistent, desc_a, info, doswap=.true.) - select type(ch => x_persistent%v%comm_handle) - type is(psb_comm_neighbor_handle) - if (last_start_persist_l < 0) then - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_persist_l) then - accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) - else - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - end if - last_start_persist_l = ch%diag_start_calls - peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) - class default - continue - end select - call psb_halo(x_persistent, desc_a, info) - select type(ch => x_persistent%v%comm_handle) - type is(psb_comm_neighbor_handle) - if (last_start_persist_l < 0) then - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_persist_l) then - accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) - else - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - end if - last_start_persist_l = ch%diag_start_calls - peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) - class default - continue - end select - call psb_spmm(alpha, a, x_persistent, beta, y_no_persistent, desc_a, info, doswap=.false.) - select type(ch => x_persistent%v%comm_handle) - type is(psb_comm_neighbor_handle) - if (last_start_persist_l < 0) then - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_persist_l) then - accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) - else - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - end if - last_start_persist_l = ch%diag_start_calls - peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) - class default - continue - end select - if (info /= psb_success_) goto 9999 - - ! ----------------------------- - ! isend/irecv scheme - ! ----------------------------- - call psb_scatter(x_global, x_isend, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_ov_isend, desc_a, info, root=psb_root_) - call psb_barrier(ctxt) - t0 = psb_wtime() - do i = 1, times - call psb_spmm(alpha, a, x_isend, beta, y_ov_isend, desc_a, info, doswap=.true.) - end do - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - t_ov_isend = dt - - call psb_scatter(x_global, x_isend, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_no_isend, desc_a, info, root=psb_root_) - call psb_barrier(ctxt) - t0 = psb_wtime() - do i = 1, times - call psb_halo(x_isend, desc_a, info) - call psb_spmm(alpha, a, x_isend, beta, y_no_isend, desc_a, info, doswap=.false.) - end do - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - t_no_isend = dt - - ! ----------------------------- - ! ineighbor_alltoallv scheme - ! ----------------------------- - call psb_scatter(x_global, x_neighbor, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_ov_neighbor, desc_a, info, root=psb_root_) - call psb_barrier(ctxt) - t0 = psb_wtime() - do i = 1, times - call psb_spmm(alpha, a, x_neighbor, beta, y_ov_neighbor, desc_a, info, doswap=.true.) - select type(ch => x_neighbor%v%comm_handle) - type is(psb_comm_neighbor_handle) - if (last_start_neighbor_l < 0) then - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_neighbor_l) then - accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) - else - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - end if - last_start_neighbor_l = ch%diag_start_calls - peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) - class default - continue - end select - end do - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - t_ov_neighbor = dt - - call psb_scatter(x_global, x_neighbor, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_no_neighbor, desc_a, info, root=psb_root_) - call psb_barrier(ctxt) - t0 = psb_wtime() - do i = 1, times - call psb_halo(x_neighbor, desc_a, info) - call psb_spmm(alpha, a, x_neighbor, beta, y_no_neighbor, desc_a, info, doswap=.false.) - select type(ch => x_neighbor%v%comm_handle) - type is(psb_comm_neighbor_handle) - if (last_start_neighbor_l < 0) then - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_neighbor_l) then - accum_start_neighbor_l = accum_start_neighbor_l + (ch%diag_start_calls - last_start_neighbor_l) - else - accum_start_neighbor_l = accum_start_neighbor_l + ch%diag_start_calls - end if - last_start_neighbor_l = ch%diag_start_calls - peak_start_neighbor_l = max(peak_start_neighbor_l, ch%diag_start_calls) - class default - continue - end select - end do - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - t_no_neighbor = dt - - ! ---------------------------------------- - ! persistent_ineighbor_alltoallv scheme - ! ---------------------------------------- - call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_ov_persistent, desc_a, info, root=psb_root_) - call psb_barrier(ctxt) - t0 = psb_wtime() - do i = 1, times - call psb_spmm(alpha, a, x_persistent, beta, y_ov_persistent, desc_a, info, doswap=.true.) - select type(ch => x_persistent%v%comm_handle) - type is(psb_comm_neighbor_handle) - if (last_start_persist_l < 0) then - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_persist_l) then - accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) - else - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - end if - last_start_persist_l = ch%diag_start_calls - peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) - class default - continue - end select - end do - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - t_ov_persistent = dt - - call psb_scatter(x_global, x_persistent, desc_a, info, root=psb_root_) - call psb_scatter(y_global, y_no_persistent, desc_a, info, root=psb_root_) - call psb_barrier(ctxt) - t0 = psb_wtime() - do i = 1, times - call psb_halo(x_persistent, desc_a, info) - call psb_spmm(alpha, a, x_persistent, beta, y_no_persistent, desc_a, info, doswap=.false.) - select type(ch => x_persistent%v%comm_handle) - type is(psb_comm_neighbor_handle) - if (last_start_persist_l < 0) then - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - else if (ch%diag_start_calls >= last_start_persist_l) then - accum_start_persist_l = accum_start_persist_l + (ch%diag_start_calls - last_start_persist_l) - else - accum_start_persist_l = accum_start_persist_l + ch%diag_start_calls - end if - last_start_persist_l = ch%diag_start_calls - peak_start_persist_l = max(peak_start_persist_l, ch%diag_start_calls) - class default - continue - end select - end do - t1 = psb_wtime() - dt = t1 - t0 - call psb_amx(ctxt, dt) - t_no_persistent = dt - - if (info /= psb_success_) goto 9999 - - err_isend = maxval(abs(y_ov_isend%get_vect() - y_no_isend%get_vect())) - err_neighbor = maxval(abs(y_ov_neighbor%get_vect() - y_no_neighbor%get_vect())) - err_persistent = maxval(abs(y_ov_persistent%get_vect() - y_no_persistent%get_vect())) - call psb_amx(ctxt, err_isend) - call psb_amx(ctxt, err_neighbor) - call psb_amx(ctxt, err_persistent) - - n_init_neighbor_l = 0 - n_start_neighbor_l = 0 - n_wait_neighbor_l = 0 - n_realloc_neighbor_l = 0 - n_init_persist_l = 0 - n_start_persist_l = 0 - n_wait_persist_l = 0 - n_realloc_persist_l = 0 - - select type(ch => x_neighbor%v%comm_handle) - type is(psb_comm_neighbor_handle) - n_init_neighbor_l = ch%diag_init_calls - n_start_neighbor_l = ch%diag_start_calls - n_wait_neighbor_l = ch%diag_wait_calls - n_realloc_neighbor_l = ch%diag_buffer_reallocs - class default - continue - end select - - select type(ch => x_persistent%v%comm_handle) - type is(psb_comm_neighbor_handle) - n_init_persist_l = ch%diag_init_calls - n_start_persist_l = ch%diag_start_calls - n_wait_persist_l = ch%diag_wait_calls - n_realloc_persist_l = ch%diag_buffer_reallocs - class default - continue - end select - - n_init_neighbor_g = n_init_neighbor_l - n_start_neighbor_g = n_start_neighbor_l - n_wait_neighbor_g = n_wait_neighbor_l - n_realloc_neighbor_g = n_realloc_neighbor_l - n_init_persist_g = n_init_persist_l - n_start_persist_g = n_start_persist_l - n_wait_persist_g = n_wait_persist_l - n_realloc_persist_g = n_realloc_persist_l - n_ineighbor_neighbor_g = n_ineighbor_neighbor_l - peak_start_neighbor_g = peak_start_neighbor_l - peak_start_persist_g = peak_start_persist_l - accum_start_neighbor_g = accum_start_neighbor_l - accum_start_persist_g = accum_start_persist_l - comm_type_neighbor_g = comm_type_neighbor_l - comm_type_persist_g = comm_type_persist_l - is_neighbor_handle_g = is_neighbor_handle_l - is_persist_handle_g = is_persist_handle_l - use_persistent_neighbor_g = use_persistent_neighbor_l - use_persistent_persist_g = use_persistent_persist_l - - call psb_sum(ctxt, n_init_neighbor_g) - call psb_sum(ctxt, n_start_neighbor_g) - call psb_sum(ctxt, n_wait_neighbor_g) - call psb_sum(ctxt, n_realloc_neighbor_g) - call psb_sum(ctxt, n_init_persist_g) - call psb_sum(ctxt, n_start_persist_g) - call psb_sum(ctxt, n_wait_persist_g) - call psb_sum(ctxt, n_realloc_persist_g) - call psb_sum(ctxt, n_ineighbor_neighbor_g) - call psb_sum(ctxt, peak_start_neighbor_g) - call psb_sum(ctxt, peak_start_persist_g) - call psb_sum(ctxt, accum_start_neighbor_g) - call psb_sum(ctxt, accum_start_persist_g) - call psb_sum(ctxt, comm_type_neighbor_g) - call psb_sum(ctxt, comm_type_persist_g) - call psb_sum(ctxt, is_neighbor_handle_g) - call psb_sum(ctxt, is_persist_handle_g) - call psb_sum(ctxt, use_persistent_neighbor_g) - call psb_sum(ctxt, use_persistent_persist_g) - - if (my_rank == 0) then - write(psb_out_unit,'(/,"SpMV overlap benchmark")') - write(psb_out_unit,'(" idim : ",i0)') idim - write(psb_out_unit,'(" global unknowns : ",i0)') n_global - write(psb_out_unit,'(" repetitions : ",i0)') times - write(psb_out_unit,'(" timing metric : max over MPI ranks")') - write(psb_out_unit,'(" gain(%) = 100*(1 - overlap/no_overlap)")') - - write(psb_out_unit,'(/,"Scheme: isend_irecv")') - avg_ov = t_ov_isend / real(times, psb_dpk_) - avg_no = t_no_isend / real(times, psb_dpk_) - speedup = t_no_isend / max(t_ov_isend, tiny(done)) - gain_pct = 100.0_psb_dpk_ * (done - (t_ov_isend / max(t_no_isend, tiny(done)))) - write(psb_out_unit,'(" total overlap : ",es12.5)') t_ov_isend - write(psb_out_unit,'(" total no_overlap : ",es12.5)') t_no_isend - write(psb_out_unit,'(" avg overlap : ",es12.5)') avg_ov - write(psb_out_unit,'(" avg no_overlap : ",es12.5)') avg_no - write(psb_out_unit,'(" speedup (no/ov) : ",f10.4)') speedup - write(psb_out_unit,'(" gain (%) : ",f10.4)') gain_pct - write(psb_out_unit,'(" overlap vs no_overlap err = ",es12.5)') err_isend - - write(psb_out_unit,'(/,"Scheme: ineighbor_alltoallv")') - avg_ov = t_ov_neighbor / real(times, psb_dpk_) - avg_no = t_no_neighbor / real(times, psb_dpk_) - speedup = t_no_neighbor / max(t_ov_neighbor, tiny(done)) - gain_pct = 100.0_psb_dpk_ * (done - (t_ov_neighbor / max(t_no_neighbor, tiny(done)))) - write(psb_out_unit,'(" total overlap : ",es12.5)') t_ov_neighbor - write(psb_out_unit,'(" total no_overlap : ",es12.5)') t_no_neighbor - write(psb_out_unit,'(" avg overlap : ",es12.5)') avg_ov - write(psb_out_unit,'(" avg no_overlap : ",es12.5)') avg_no - write(psb_out_unit,'(" speedup (no/ov) : ",f10.4)') speedup - write(psb_out_unit,'(" gain (%) : ",f10.4)') gain_pct - write(psb_out_unit,'(" overlap vs no_overlap err = ",es12.5)') err_neighbor - - write(psb_out_unit,'(/,"Scheme: persistent_ineighbor_alltoallv")') - avg_ov = t_ov_persistent / real(times, psb_dpk_) - avg_no = t_no_persistent / real(times, psb_dpk_) - speedup = t_no_persistent / max(t_ov_persistent, tiny(done)) - gain_pct = 100.0_psb_dpk_ * (done - (t_ov_persistent / max(t_no_persistent, tiny(done)))) - write(psb_out_unit,'(" total overlap : ",es12.5)') t_ov_persistent - write(psb_out_unit,'(" total no_overlap : ",es12.5)') t_no_persistent - write(psb_out_unit,'(" avg overlap : ",es12.5)') avg_ov - write(psb_out_unit,'(" avg no_overlap : ",es12.5)') avg_no - write(psb_out_unit,'(" speedup (no/ov) : ",f10.4)') speedup - write(psb_out_unit,'(" gain (%) : ",f10.4)') gain_pct - write(psb_out_unit,'(" overlap vs no_overlap err = ",es12.5)') err_persistent - - write(psb_out_unit,'(/,"Communication diagnostics (global sum over MPI ranks):")') - write(psb_out_unit,'(" ineighbor_alltoallv: init=",i0,", start=",i0,", wait=",i0,", realloc=",i0)') & - & n_init_neighbor_g, n_start_neighbor_g, n_wait_neighbor_g, n_realloc_neighbor_g - write(psb_out_unit,'(" ineighbor_alltoallv calls : ",i0)') n_ineighbor_neighbor_g - write(psb_out_unit,'(" ineighbor peak start observed during run: ",i0)') peak_start_neighbor_g - write(psb_out_unit,'(" ineighbor accumulated starts (robust): ",i0)') accum_start_neighbor_g - write(psb_out_unit,'(" persistent_ineighbor_a2av: init=",i0,", start=",i0,", wait=",i0,", realloc=",i0)') & - & n_init_persist_g, n_start_persist_g, n_wait_persist_g, n_realloc_persist_g - write(psb_out_unit,'(" persistent peak start observed during run: ",i0)') peak_start_persist_g - write(psb_out_unit,'(" persistent accumulated starts (robust): ",i0)') accum_start_persist_g - write(psb_out_unit,'(" handle check (sum over ranks): neighbor is_type=",i0,", comm_type=",i0,", use_persistent=",i0)') & - & is_neighbor_handle_g, comm_type_neighbor_g, use_persistent_neighbor_g - write(psb_out_unit,'(" handle check (sum over ranks): persistent is_type=",i0,", comm_type=",i0,", use_persistent=",i0)') & - & is_persist_handle_g, comm_type_persist_g, use_persistent_persist_g - - if ((err_isend > tol) .or. (err_neighbor > tol) .or. (err_persistent > tol)) then - write(psb_out_unit,'(" WARNING: mismatch exceeds tolerance ",es12.5)') tol - end if - end if - - call psb_gefree(x_isend, desc_a, info) - call psb_gefree(x_neighbor, desc_a, info) - call psb_gefree(x_persistent, desc_a, info) - call psb_gefree(y_ov_isend, desc_a, info) - call psb_gefree(y_ov_neighbor, desc_a, info) - call psb_gefree(y_ov_persistent, desc_a, info) - call psb_gefree(y_no_isend, desc_a, info) - call psb_gefree(y_no_neighbor, desc_a, info) - call psb_gefree(y_no_persistent, desc_a, info) - call psb_spfree(a, desc_a, info) - call psb_cdfree(desc_a, info) - - if (my_rank == 0) then - deallocate(x_global) - deallocate(y_global) - end if - - return - -9999 call psb_error(ctxt) - call psb_error_handler(ctxt, err_act) - - end subroutine psb_spmv_overlap_kernel - - -end module psb_spmv_overlap_test diff --git a/test/comm/spmv/psb_spmv_test.f90 b/test/comm/spmv/psb_spmv_test.f90 new file mode 100644 index 000000000..897f9874e --- /dev/null +++ b/test/comm/spmv/psb_spmv_test.f90 @@ -0,0 +1,694 @@ +!> Test program for overlapping communication and computation with psb_spmm. +!! +!! This benchmark compares two equivalent SpMV paths: +!! 1. Serialized halo exchange + compute +!! 2. Overlapped psb_spmm(..., doswap=.true.) +!! +module psb_spmv_overlap_test + + use psb_base_mod + use psb_util_mod + use psb_comm_factory_mod, only: psb_comm_set + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_ + use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + + implicit none + + interface + function d_func_3d(x,y,z) result(val) + import :: psb_dpk_ + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + end function d_func_3d + end interface + +contains + + + function d_null_func_3d(x,y,z) result(val) + + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + + val = dzero + + end function d_null_func_3d + ! + ! functions parametrizing the differential equation + ! + + ! + ! Note: b1, b2 and b3 are the coefficients of the first + ! derivative of the unknown function. The default + ! we apply here is to have them zero, so that the resulting + ! matrix is symmetric/hermitian and suitable for + ! testing with CG and FCG. + ! When testing methods for non-hermitian matrices you can + ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) + ! + function b1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b1 + real(psb_dpk_), intent(in) :: x,y,z + b1=dzero + end function b1 + function b2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b2 + real(psb_dpk_), intent(in) :: x,y,z + b2=dzero + end function b2 + function b3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b3 + real(psb_dpk_), intent(in) :: x,y,z + b3=dzero + end function b3 + function c(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: c + real(psb_dpk_), intent(in) :: x,y,z + c=dzero + end function c + function a1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a1 + real(psb_dpk_), intent(in) :: x,y,z + a1=done/80 + end function a1 + function a2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a2 + real(psb_dpk_), intent(in) :: x,y,z + a2=done/80 + end function a2 + function a3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a3 + real(psb_dpk_), intent(in) :: x,y,z + a3=done/80 + end function a3 + function g(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: g + real(psb_dpk_), intent(in) :: x,y,z + g = dzero + if (x == done) then + g = done + else if (x == dzero) then + g = exp(y**2-z**2) + end if + end function g + + ! + ! subroutine to allocate and fill in the coefficient matrix and + ! the rhs. + ! + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& + & f,amold,vmold,imold,partition,nrl,iv,tnd) + use psb_base_mod + use psb_util_mod + ! + ! Discretizes the partial differential equation + ! + ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) + ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f + ! dxdx dydy dzdz dx dy dz + ! + ! with Dirichlet boundary conditions + ! u = g + ! + ! on the unit cube 0<=x,y,z<=1. + ! + ! + ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. + ! + implicit none + integer(psb_ipk_) :: idim + type(psb_dspmat_type) :: a + type(psb_d_vect_type) :: xv,bv + type(psb_desc_type) :: desc_a + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: info + character(len=*) :: afmt + procedure(d_func_3d), optional :: f + class(psb_d_base_sparse_mat), optional :: amold + class(psb_d_base_vect_type), optional :: vmold + class(psb_i_base_vect_type), optional :: imold + integer(psb_ipk_), optional :: partition, nrl,iv(:) + logical, optional :: tnd + ! Local variables. + + integer(psb_ipk_), parameter :: nb=20 + type(psb_d_csc_sparse_mat) :: acsc + type(psb_d_coo_sparse_mat) :: acoo + type(psb_d_csr_sparse_mat) :: acsr + real(psb_dpk_) :: zt(nb),x,y,z + integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ + integer(psb_lpk_) :: m,n,glob_row,nt + integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner + ! For 3D partition + ! Note: integer control variables going directly into an MPI call + ! must be 4 bytes, i.e. psb_mpk_ + integer(psb_mpk_) :: npdims(3), npp, minfo + integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz + integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) + ! Process grid + integer(psb_ipk_) :: np, iam, nth + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_dpk_), allocatable :: val(:) + ! deltah dimension of each grid cell + ! deltat discretization time + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + procedure(d_func_3d), pointer :: f_ + logical :: tnd_ + character(len=20) :: name, ch_err,tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + + if (present(f)) then + f_ => f + else + f_ => d_null_func_3d + end if + + deltah = done/(idim+1) + sqdeltah = deltah*deltah + deltah2 = (2*done)* deltah + + if (present(partition)) then + if ((1<= partition).and.(partition <= 3)) then + partition_ = partition + else + write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' + partition_ = 3 + end if + else + partition_ = 3 + end if + + tnd_ = .false. + if (present(tnd)) tnd_ = tnd + + ! initialize array descriptor and sparse matrix storage. provide an + ! estimate of the number of non zeroes + + m = (1_psb_lpk_*idim)*idim*idim + n = m + nnz = ((n*7)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + t0 = psb_wtime() + select case(partition_) + case(1) + ! A BLOCK partition + if (present(nrl)) then + nr = nrl + else + ! + ! Using a simple BLOCK distribution. + ! + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + end if + + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! First example of use of CDALL: specify for each process a number of + ! contiguous rows + ! + call psb_cdall(ctxt,desc_a,info,nl=nr) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(2) + ! A partition defined by the user through IV + + if (present(iv)) then + if (size(iv) /= m) then + write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + else + write(psb_err_unit,*) iam, 'Initialization error: IV not present' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! Second example of use of CDALL: specify for each row the + ! process that owns it + ! + call psb_cdall(ctxt,desc_a,info,vg=iv) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(3) + ! A 3-dimensional partition + + ! A nifty MPI function will split the process list + npdims = 0 + call mpi_dims_create(np,3,npdims,info) + npx = npdims(1) + npy = npdims(2) + npz = npdims(3) + + allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) + ! We can reuse idx2ijk for process indices as well. + call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) + ! Now let's split the 3D cube in hexahedra + call dist1Didx(bndx,idim,npx) + mynx = bndx(iamx+1)-bndx(iamx) + call dist1Didx(bndy,idim,npy) + myny = bndy(iamy+1)-bndy(iamy) + call dist1Didx(bndz,idim,npz) + mynz = bndz(iamz+1)-bndz(iamz) + + ! How many indices do I own? + nlr = mynx*myny*mynz + allocate(myidx(nlr)) + ! Now, let's generate the list of indices I own + nr = 0 + do i=bndx(iamx),bndx(iamx+1)-1 + do j=bndy(iamy),bndy(iamy+1)-1 + do k=bndz(iamz),bndz(iamz+1)-1 + nr = nr + 1 + call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) + end do + end do + end do + if (nr /= nlr) then + write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& + & nr,nlr,mynx,myny,mynz + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + end if + + ! + ! Third example of use of CDALL: specify for each process + ! the set of global indices it owns. + ! + call psb_cdall(ctxt,desc_a,info,vl=myidx) + + case default + write(psb_err_unit,*) iam, 'Initialization error: should not get here' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end select + + + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! define rhs from boundary conditions; also build initial guess + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + ! we build an auxiliary matrix consisting of one row at a + ! time; just a small matrix. might be extended to generate + ! a bunch of rows per call. + ! + allocate(val(20*nb),irow(20*nb),& + &icol(20*nb),stat=info) + if (info /= psb_success_ ) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + + ! loop over rows belonging to current process in a block + ! distribution. + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + ! local matrix pointer + glob_row=myidx(i) + ! compute gridpoint coordinates + call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) + ! x, y, z coordinates + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = f_(x,y,z) + ! internal point: build discretization + ! + ! term depending on (x-1,y,z) + ! + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y-1,z) + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y,z-1) + val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + ! term depending on (x,y,z) + val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & + & + c(x,y,z) + call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + ! term depending on (x,y,z+1) + val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y+1,z) + val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x+1,y,z) + val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix==idim) then + zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + end do + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=dzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + if (present(imold)) then + call psb_cdasb(desc_a,info,mold=imold) + else + call psb_cdasb(desc_a,info) + end if + tcdasb = psb_wtime()-t1 + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) then + if (present(amold)) then + call psb_spasb(a,desc_a,info,mold=amold) + else + call psb_spasb(a,desc_a,info,afmt=afmt) + end if + end if + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) then + if (present(vmold)) then + call psb_geasb(xv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + else + call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + end if + end if + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& + & tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psb_d_gen_pde3d + + subroutine run_spmv_kernel(ctxt,use_gpu) + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type), intent(in) :: ctxt + logical, intent(in) :: use_gpu + + type(psb_dspmat_type) :: a + type(psb_d_vect_type) :: x, y + type(psb_desc_type) :: desc_a + character(len=5) :: afmt + character(len=64) :: env_buf + integer(psb_ipk_) :: my_rank, np, info, err_act + integer(psb_ipk_) :: idim, times, i, n_global + integer :: env_len, env_status, ios + real(psb_dpk_) :: alpha, beta, t0, t1, dt, avg_t + +#ifdef PSB_HAVE_CUDA + type(psb_d_vect_cuda) :: vmold + type(psb_i_vect_cuda) :: imold + type(psb_d_cuda_hlg_sparse_mat), target :: ahlg + class(psb_d_base_sparse_mat), pointer :: agmold +#endif + + info = psb_success_ + afmt = 'CSR' + idim = 10 + times = 100 + alpha = done + beta = dzero + + call psb_erractionsave(err_act) + call psb_info(ctxt, my_rank, np) + + call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) idim + if ((ios /= 0) .or. (idim < 2)) idim = 10 + end if + call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) times + if ((ios /= 0) .or. (times < 1)) times = 100 + end if + + n_global = idim * idim * idim + + call psb_barrier(ctxt) + call psb_d_gen_pde3d(ctxt,idim,a,y,x,desc_a,afmt,info) + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + agmold => ahlg + call a%cscnv(info,mold=agmold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=imold) + if (info /= psb_success_) goto 9999 + call psb_geasb(x,desc_a,info,mold=vmold) + if (info /= psb_success_) goto 9999 + call psb_geasb(y,desc_a,info,mold=vmold) + if (info /= psb_success_) goto 9999 + end if +#endif + + ! warm-up + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=.false.) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=.false.) + if (info /= psb_success_) exit + end do + t1 = psb_wtime() + if (info /= psb_success_) goto 9999 + + dt = t1 - t0 + call psb_amx(ctxt, dt) + avg_t = dt / real(times, psb_dpk_) + + if (my_rank == psb_root_) then + write(psb_out_unit,'(/,"SpMV benchmark (no overlap)")') + write(psb_out_unit,'(" idim : ",i0)') idim + write(psb_out_unit,'(" global unknowns : ",i0)') n_global + write(psb_out_unit,'(" repetitions : ",i0)') times + write(psb_out_unit,'(" total time [s] : ",es12.5)') dt + write(psb_out_unit,'(" avg time [s] : ",es12.5)') avg_t + end if + + call psb_gefree(y, desc_a, info) + call psb_gefree(x, desc_a, info) + call psb_spfree(a, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_erractionrestore(err_act) + return + +9999 call psb_error(ctxt) + call psb_error_handler(ctxt, err_act) + end subroutine run_spmv_kernel + +end module psb_spmv_overlap_test + +program psb_spmv_kernel + use psb_spmv_overlap_test + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type) :: ctxt + logical :: use_gpu + integer(psb_ipk_) :: my_rank, np, k + character(len=256) :: arg + + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + + do k = 1, command_argument_count() + call get_command_argument(k, arg) + if (index(psb_toupper(trim(arg)), '--GPU=') == 1) then + select case (psb_toupper(adjustl(arg(7:len_trim(arg))))) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + end select + end if + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#else + use_gpu = .false. +#endif + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the psb_spmv_kernel sample program' + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + end if + + call run_spmv_kernel(ctxt,use_gpu) + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) +end program psb_spmv_kernel diff --git a/test/comm/spmv/spmv_overlap.f90 b/test/comm/spmv/spmv_overlap.f90 deleted file mode 100644 index 5d42b4f35..000000000 --- a/test/comm/spmv/spmv_overlap.f90 +++ /dev/null @@ -1,28 +0,0 @@ -program main - use psb_spmv_overlap_test - use psb_base_mod - - implicit none - - integer(psb_ipk_) :: my_rank, np - integer(psb_ipk_) :: k, h - type(psb_ctxt_type) :: ctxt - - - - call psb_init(ctxt) - call psb_info(ctxt, my_rank, np) - - if (my_rank == psb_root_) then - write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ - write(psb_out_unit,*) 'This is the psb_spmv_overlap_test sample program' - end if - - call psb_barrier(ctxt) - - - call psb_spmv_overlap_kernel(ctxt) - - - call psb_exit(ctxt) -end program main From 52ad95461d7b2dd8f7de4e386428bab001ddbc01 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Thu, 23 Apr 2026 14:43:23 +0200 Subject: [PATCH 163/175] [UPDATE] Updated communicationtest to read also external matrices --- .gitignore | 1 + test/comm/cg/README.md | 10 +- test/comm/cg/psb_comm_cg_test.F90 | 144 ++++++++++++++- test/comm/spmv/README.md | 10 ++ test/comm/spmv/psb_spmv_test.f90 | 255 +++++++++++++++++++++++---- test/comm/swapdata/README.md | 10 ++ test/comm/swapdata/psb_comm_test.F90 | 133 ++++++++++---- test/pdegen/psb_d_pde3d.F90 | 8 - 8 files changed, 487 insertions(+), 84 deletions(-) diff --git a/.gitignore b/.gitignore index f4ad68fbb..6775ecfb9 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,5 @@ autom4te.cache # the executable from tests runs +data diff --git a/test/comm/cg/README.md b/test/comm/cg/README.md index 76a85e1e5..0f09dad5b 100644 --- a/test/comm/cg/README.md +++ b/test/comm/cg/README.md @@ -34,4 +34,12 @@ From this directory: - `make run` (defaults: `NP=4`, `IDIM=40`) - `make run NP=8 IDIM=80` -The program accepts one optional CLI argument: `IDIM`. +Default PDE-generated matrix: + +- `./runs/psb_comm_cg_test [idim] [nrep] [nwarm] [itmax] [--gpu=TRUE|FALSE]` + +External matrix input: + +- `./runs/psb_comm_cg_test [idim] [nrep] [nwarm] [itmax] --matrix= [--fmt=MM|HB] [--gpu=TRUE|FALSE]` + +When `--matrix` is provided, the test reads and distributes that matrix and ignores the PDE generator. diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index baf1bab69..357d00482 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -1,5 +1,6 @@ program psb_comm_cg_test use psb_base_mod + use psb_util_mod #ifdef PSB_HAVE_CUDA use psb_cuda_mod #endif @@ -44,9 +45,12 @@ program psb_comm_cg_test character(len=20) :: prec_name(n_precs) character(len=5) :: afmt character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt character(len=16) :: gpu_arg logical :: setup_done logical :: use_gpu + logical :: use_external_matrix info = psb_success_ afmt = 'CSR' @@ -58,6 +62,9 @@ program psb_comm_cg_test itrace = -1 istop = 2 eps = 1.d-6 + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. #ifdef PSB_HAVE_CUDA use_gpu = .true. #else @@ -111,6 +118,12 @@ program psb_comm_cg_test write(psb_err_unit,'("Invalid value for --gpu option. Use --gpu=TRUE or --gpu=FALSE")') stop 1 end if + call parse_matrix_arg(matrix_file, matrix_fmt, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid matrix options. Use --matrix= [--fmt=MM|HB]")') + stop 1 + end if + use_external_matrix = (len_trim(matrix_file) > 0) ! call psb_set_debug_level(psb_debug_ext_) @@ -142,7 +155,12 @@ program psb_comm_cg_test if (my_rank == psb_root_) then write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ write(psb_out_unit,*) 'This is the comm/cg test program' - write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim + if (use_external_matrix) then + write(psb_out_unit,'("Input matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'("Input format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim + end if write(psb_out_unit,'("Number of processors : ",i0)') np write(psb_out_unit,'("Iterative method : CG")') write(psb_out_unit,'("Preconditioners : NONE, DIAG")') @@ -151,14 +169,19 @@ program psb_comm_cg_test write(psb_out_unit,'("Warmup solves : ",i0)') nwarm write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu write(psb_out_unit,'(" ")') - write(psb_out_unit,'("Usage: ./psb_comm_cg_test [idim] [nrep] [nwarm] [itmax] [--gpu=TRUE|FALSE]")') + write(psb_out_unit,'("Usage: ./psb_comm_cg_test [idim] [nrep] [nwarm] [itmax] ",& + &"[--gpu=TRUE|FALSE] [--matrix=] [--fmt=MM|HB]")') write(psb_out_unit,'(" ")') end if call psb_barrier(ctxt) - ! call probe_ieee('before psb_d_gen_pde3d') - call psb_d_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) - ! call probe_ieee('after psb_d_gen_pde3d') + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, b, x, desc_a, afmt, info) + else + ! call probe_ieee('before psb_d_gen_pde3d') + call psb_d_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) + ! call probe_ieee('after psb_d_gen_pde3d') + end if if (info /= psb_success_) goto 9999 #ifdef PSB_HAVE_CUDA @@ -168,9 +191,9 @@ program psb_comm_cg_test if (info /= psb_success_) goto 9999 call desc_a%cnv(mold=imold) if (info /= psb_success_) goto 9999 - call psb_geasb(x,desc_a,info,mold=vmold) + call x%cnv(mold=vmold) if (info /= psb_success_) goto 9999 - call psb_geasb(b,desc_a,info,mold=vmold) + call b%cnv(mold=vmold) if (info /= psb_success_) goto 9999 end if #endif @@ -514,6 +537,113 @@ contains end do end subroutine parse_gpu_arg + subroutine parse_matrix_arg(matrix_file, matrix_fmt, info) + character(len=*), intent(inout) :: matrix_file + character(len=*), intent(inout) :: matrix_fmt + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + + if (index(uarg,'--MATRIX=') == 1) then + matrix_file = adjustl(carg(10:len_trim(carg))) + else if (trim(uarg) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1,matrix_file) + else + info = psb_err_internal_error_ + return + end if + else if (index(uarg,'--FMT=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else if (trim(uarg) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1,val) + val = psb_toupper(trim(val)) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else + info = psb_err_internal_error_ + return + end if + end if + end do + end subroutine parse_matrix_arg + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_dspmat_type), intent(out) :: a + type(psb_d_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_ldspmat_type) :: aux_a + real(psb_dpk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square for CG: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = done + x_glob = dzero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info) implicit none integer(psb_ipk_), intent(in) :: idim diff --git a/test/comm/spmv/README.md b/test/comm/spmv/README.md index 4e98e7a31..d6800c119 100644 --- a/test/comm/spmv/README.md +++ b/test/comm/spmv/README.md @@ -19,3 +19,13 @@ Communication schemes compared: Unlike `swapdata/`, which checks direct halo exchange, this test covers the overlapped SpMV workflow. + +Run options +----------- + +- Default PDE-generated matrix: `./runs/psb_spmv_kernel [--gpu=TRUE|FALSE] [--nooverlap]` +- External matrix: `./runs/psb_spmv_kernel [--gpu=TRUE|FALSE] --matrix= [--fmt=MM|HB] [--nooverlap]` + +The overlap path is enabled by default; pass `--nooverlap` to force the non-overlapped halo-update path. + +When `--matrix` is provided, the benchmark reads and distributes that matrix instead of generating the 3D PDE test matrix. diff --git a/test/comm/spmv/psb_spmv_test.f90 b/test/comm/spmv/psb_spmv_test.f90 index 897f9874e..a69649560 100644 --- a/test/comm/spmv/psb_spmv_test.f90 +++ b/test/comm/spmv/psb_spmv_test.f90 @@ -1,8 +1,5 @@ !> Test program for overlapping communication and computation with psb_spmm. !! -!! This benchmark compares two equivalent SpMV paths: -!! 1. Serialized halo exchange + compute -!! 2. Overlapped psb_spmm(..., doswap=.true.) !! module psb_spmv_overlap_test @@ -532,7 +529,7 @@ contains return end subroutine psb_d_gen_pde3d - subroutine run_spmv_kernel(ctxt,use_gpu) + subroutine run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_in,times_in,do_swap) use psb_base_mod #ifdef PSB_HAVE_CUDA use psb_cuda_mod @@ -541,73 +538,112 @@ contains type(psb_ctxt_type), intent(in) :: ctxt logical, intent(in) :: use_gpu + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + character(len=*), intent(in) :: cpu_fmt + character(len=*), intent(in) :: gpu_fmt + integer(psb_ipk_), intent(in) :: idim_in, times_in + logical, intent(in) :: do_swap type(psb_dspmat_type) :: a type(psb_d_vect_type) :: x, y type(psb_desc_type) :: desc_a - character(len=5) :: afmt + character(len=8) :: afmt character(len=64) :: env_buf integer(psb_ipk_) :: my_rank, np, info, err_act integer(psb_ipk_) :: idim, times, i, n_global integer :: env_len, env_status, ios real(psb_dpk_) :: alpha, beta, t0, t1, dt, avg_t + logical :: use_external_matrix #ifdef PSB_HAVE_CUDA - type(psb_d_vect_cuda) :: vmold - type(psb_i_vect_cuda) :: imold - type(psb_d_cuda_hlg_sparse_mat), target :: ahlg - class(psb_d_base_sparse_mat), pointer :: agmold + type(psb_d_vect_cuda) :: cuda_vector_mold + type(psb_i_vect_cuda) :: cuda_index_mold + type(psb_d_cuda_elg_sparse_mat), target :: cuda_ell_sparse_mold + type(psb_d_cuda_csrg_sparse_mat), target :: cuda_csr_sparse_mold + type(psb_d_cuda_hdiag_sparse_mat), target :: cuda_hdia_sparse_mold + type(psb_d_cuda_hlg_sparse_mat), target :: cuda_hll_sparse_mold + class(psb_d_base_sparse_mat), pointer :: cuda_sparse_mold #endif info = psb_success_ - afmt = 'CSR' - idim = 10 - times = 100 + afmt = psb_toupper(trim(cpu_fmt)) + if (len_trim(afmt) == 0) afmt = 'CSR' + if (idim_in > 0) then + idim = idim_in + else + idim = 10 + end if + + if (times_in > 0) then + times = times_in + else + times = 100 + end if alpha = done beta = dzero call psb_erractionsave(err_act) call psb_info(ctxt, my_rank, np) + use_external_matrix = (len_trim(matrix_file) > 0) - call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) - if ((env_status == 0) .and. (env_len > 0)) then - read(env_buf(1:env_len), *, iostat=ios) idim - if ((ios /= 0) .or. (idim < 2)) idim = 10 - end if - call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) - if ((env_status == 0) .and. (env_len > 0)) then - read(env_buf(1:env_len), *, iostat=ios) times - if ((ios /= 0) .or. (times < 1)) times = 100 + if (idim_in <= 0) then + call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) idim + if ((ios /= 0) .or. (idim < 2)) idim = 10 + end if end if - n_global = idim * idim * idim + if (times_in <= 0) then + call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) times + if ((ios /= 0) .or. (times < 1)) times = 100 + end if + end if call psb_barrier(ctxt) - call psb_d_gen_pde3d(ctxt,idim,a,y,x,desc_a,afmt,info) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, y, x, desc_a, afmt, info) + n_global = int(a%get_nrows(),kind=psb_ipk_) + else + call psb_d_gen_pde3d(ctxt,idim,a,y,x,desc_a,afmt,info) + n_global = idim * idim * idim + end if if (info /= psb_success_) goto 9999 #ifdef PSB_HAVE_CUDA if (use_gpu) then - agmold => ahlg - call a%cscnv(info,mold=agmold) + select case(psb_toupper(trim(gpu_fmt))) + case('ELG') + cuda_sparse_mold => cuda_ell_sparse_mold + case('CSRG') + cuda_sparse_mold => cuda_csr_sparse_mold + case('HDIAG','HDIA') + cuda_sparse_mold => cuda_hdia_sparse_mold + case default + cuda_sparse_mold => cuda_hll_sparse_mold + end select + call a%cscnv(info,mold=cuda_sparse_mold) if (info /= psb_success_) goto 9999 - call desc_a%cnv(mold=imold) + call desc_a%cnv(mold=cuda_index_mold) if (info /= psb_success_) goto 9999 - call psb_geasb(x,desc_a,info,mold=vmold) + call x%cnv(mold=cuda_vector_mold) if (info /= psb_success_) goto 9999 - call psb_geasb(y,desc_a,info,mold=vmold) + call y%cnv(mold=cuda_vector_mold) if (info /= psb_success_) goto 9999 end if #endif ! warm-up - call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=.false.) + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) if (info /= psb_success_) goto 9999 call psb_barrier(ctxt) t0 = psb_wtime() do i = 1, times - call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=.false.) + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) if (info /= psb_success_) exit end do t1 = psb_wtime() @@ -618,8 +654,19 @@ contains avg_t = dt / real(times, psb_dpk_) if (my_rank == psb_root_) then - write(psb_out_unit,'(/,"SpMV benchmark (no overlap)")') - write(psb_out_unit,'(" idim : ",i0)') idim + if (do_swap) then + write(psb_out_unit,'(/,"SpMV benchmark (overlap)")') + else + write(psb_out_unit,'(/,"SpMV benchmark (no overlap)")') + end if + write(psb_out_unit,'(" cpu matrix fmt : ",a)') trim(afmt) + if (use_gpu) write(psb_out_unit,'(" gpu matrix fmt : ",a)') trim(psb_toupper(trim(gpu_fmt))) + if (use_external_matrix) then + write(psb_out_unit,'(" matrix file : ",a)') trim(matrix_file) + write(psb_out_unit,'(" matrix format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" idim : ",i0)') idim + end if write(psb_out_unit,'(" global unknowns : ",i0)') n_global write(psb_out_unit,'(" repetitions : ",i0)') times write(psb_out_unit,'(" total time [s] : ",es12.5)') dt @@ -637,6 +684,65 @@ contains call psb_error_handler(ctxt, err_act) end subroutine run_spmv_kernel + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_dspmat_type), intent(out) :: a + type(psb_d_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_ldspmat_type) :: aux_a + real(psb_dpk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = done + x_glob = dzero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + end module psb_spmv_overlap_test program psb_spmv_kernel @@ -650,7 +756,22 @@ program psb_spmv_kernel type(psb_ctxt_type) :: ctxt logical :: use_gpu integer(psb_ipk_) :: my_rank, np, k + integer :: ios character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=8) :: cpu_fmt + character(len=8) :: gpu_fmt + integer(psb_ipk_) :: idim_arg, times_arg + logical :: do_swap + idim_arg = -1 + times_arg = -1 + + matrix_file = '' + matrix_fmt = 'MM' + cpu_fmt = 'CSR' + gpu_fmt = 'HLG' + do_swap = .true. call psb_init(ctxt) call psb_info(ctxt, my_rank, np) @@ -670,6 +791,71 @@ program psb_spmv_kernel case ('FALSE','F','0','NO','N','OFF') use_gpu = .false. end select + else if (index(psb_toupper(trim(arg)), '--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (index(psb_toupper(trim(arg)), '--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--MTX_FMT=') == 1) then + arg = psb_toupper(adjustl(arg(10:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--DIM=') == 1) then + read(arg(7:len_trim(arg)),*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + else if (index(psb_toupper(trim(arg)), '--TIMES=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--ITERS=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--CPU_FORMAT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--CPU_FMT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FORMAT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FMT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if ((trim(psb_toupper(arg)) == '--NOOVERLAP') .or. (trim(psb_toupper(arg)) == '--NO_OVERLAP')) then + do_swap = .false. + else if ((trim(psb_toupper(arg)) == '--OVERLAP') .or. (trim(psb_toupper(arg)) == '--SWAP')) then + do_swap = .true. + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (k < command_argument_count()) call get_command_argument(k+1,matrix_file) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--MTX_FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--DIM') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--TIMES') .or. (trim(psb_toupper(arg)) == '--ITERS')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--CPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--CPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + cpu_fmt = psb_toupper(trim(arg)) + end if + else if ((trim(psb_toupper(arg)) == '--GPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--GPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + gpu_fmt = psb_toupper(trim(arg)) + end if end if end do @@ -683,9 +869,12 @@ program psb_spmv_kernel write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ write(psb_out_unit,*) 'This is the psb_spmv_kernel sample program' write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'("Usage: ./psb_spmv_kernel [--gpu=TRUE|FALSE] [--dim=N] [--times=N] ",& + &"[--cpu_fmt=CSR|COO|CSC|ELL|HLL] [--gpu_fmt=HLL|ELL|CSR|HDIA] [--matrix=] [--fmt=MM|HB] ",& + &"[--overlap|--nooverlap]")') end if - call run_spmv_kernel(ctxt,use_gpu) + call run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_arg,times_arg,do_swap) #ifdef PSB_HAVE_CUDA if (use_gpu) call psb_cuda_exit() diff --git a/test/comm/swapdata/README.md b/test/comm/swapdata/README.md index 812105bc8..a7811f624 100644 --- a/test/comm/swapdata/README.md +++ b/test/comm/swapdata/README.md @@ -17,3 +17,13 @@ Communication patterns exercised: This test validates the low-level communication behavior in isolation, without the full SpMV overlap pipeline. + +Run options +----------- + +- Synthetic 3D stencil descriptor (default): + - `./runs/psb_comm_test [--dim N] [--iters N] [--mode both|baseline|neighbor|persistent]` +- External matrix descriptor: + - `./runs/psb_comm_test [--iters N] [--mode both|baseline|neighbor|persistent] --matrix [--fmt MM|HB]` + +With `--matrix`, the descriptor is built from the distributed input matrix pattern. diff --git a/test/comm/swapdata/psb_comm_test.F90 b/test/comm/swapdata/psb_comm_test.F90 index c7bb08c5a..40e837345 100644 --- a/test/comm/swapdata/psb_comm_test.F90 +++ b/test/comm/swapdata/psb_comm_test.F90 @@ -17,6 +17,7 @@ ! program psb_comm_test use psb_base_mod + use psb_util_mod use psb_error_mod, only: psb_set_debug_level, psb_debug_ext_ use psi_mod use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free @@ -29,9 +30,12 @@ program psb_comm_test integer(psb_ipk_) :: idim integer(psb_ipk_) :: argc integer(psb_ipk_) :: iters - character(len=32) :: arg + character(len=256) :: arg character(len=16) :: mode + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt logical :: debug_swapdata + logical :: use_external_matrix ! ---- descriptor / context ---- type(psb_ctxt_type) :: ctxt @@ -39,6 +43,8 @@ program psb_comm_test integer(psb_ipk_) :: my_rank, np, info, i, nr, number_of_local_rows integer(psb_lpk_) :: m, nt integer(psb_lpk_), allocatable :: myidx(:) + type(psb_dspmat_type) :: a_mat + type(psb_ldspmat_type) :: aux_a ! ---- vectors ---- type(psb_d_vect_type) :: v_baseline, v_neighbor, v_neighbor_persistent @@ -55,6 +61,7 @@ program psb_comm_test ! ---- error / reporting ---- integer(psb_ipk_) :: n_pass, n_total, imode logical :: run_baseline, run_neighbor, run_persistent + logical :: mat_allocated logical :: comm_ok real(psb_dpk_) :: err, tol real(psb_dpk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent @@ -70,6 +77,10 @@ program psb_comm_test iters = 5 mode = 'both' debug_swapdata = .false. + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. + mat_allocated = .false. ! ---- parse command-line argument for idim ---- idim = 10 @@ -86,8 +97,24 @@ program psb_comm_test call get_command_argument(i+1, arg) read(arg, *) iters end if + else if (index(psb_toupper(trim(arg)),'--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1, matrix_file) + end if + else if (index(psb_toupper(trim(arg)),'--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1, arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if end if end do + use_external_matrix = (len_trim(matrix_file) > 0) ! parse optional mode flag do i = 1, argc @@ -126,7 +153,7 @@ program psb_comm_test run_persistent = .true. end select - if (idim <= 0) then + if ((.not.use_external_matrix) .and. (idim <= 0)) then write(*,*) 'Invalid dimension specified. Usage: --dim ' call psb_abort(ctxt) end if @@ -140,48 +167,83 @@ program psb_comm_test write(psb_out_unit,'("================================================")') write(psb_out_unit,'(" Test: D-type halo baseline vs neighbor topo")') write(psb_out_unit,'(" Processes : ",i0)') np - write(psb_out_unit,'(" Grid : ",i0," x ",i0," x ",i0)') idim,idim,idim + if (use_external_matrix) then + write(psb_out_unit,'(" Matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'(" Format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" Grid : ",i0," x ",i0," x ",i0)') idim,idim,idim + end if + write(psb_out_unit,'(" Usage : ./psb_comm_test [--dim N] [--iters N] [--mode ...] ",& + &"[--matrix ] [--fmt MM|HB]")') write(psb_out_unit,'("================================================")') end if ! ================================================================== ! 2. Build descriptor with 7-point stencil connectivity ! ================================================================== - m = (1_psb_lpk_ * idim) * idim * idim - nt = (m + np - 1) / np - nr = max(0, min(int(nt,psb_ipk_), int(m - (my_rank * nt),psb_ipk_))) - - call psb_cdall(ctxt, desc_a, info, nl=nr) - if (info /= psb_success_) then - write(psb_err_unit,*) my_rank, 'cdall error:', info - call psb_abort(ctxt) - end if + if (use_external_matrix) then + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + end select + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matrix read error:', info + call psb_abort(ctxt) + end if + if (aux_a%get_nrows() /= aux_a%get_ncols()) then + write(psb_err_unit,*) my_rank, 'matrix must be square for this test' + call psb_abort(ctxt) + end if + m = aux_a%get_nrows() + call psb_matdist(aux_a, a_mat, ctxt, desc_a, info, fmt='CSR', parts=part_block) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matdist error:', info + call psb_abort(ctxt) + end if + mat_allocated = .true. + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + else + m = (1_psb_lpk_ * idim) * idim * idim + nt = (m + np - 1) / np + nr = max(0, min(int(nt,psb_ipk_), int(m - (my_rank * nt),psb_ipk_))) - myidx = desc_a%get_global_indices() - number_of_local_rows = size(myidx) + call psb_cdall(ctxt, desc_a, info, nl=nr) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdall error:', info + call psb_abort(ctxt) + end if - do i = 1, number_of_local_rows - call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)/), desc_a, info) - if (myidx(i) > 1) & - & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-1/), desc_a, info) - if (myidx(i) < m) & - & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+1/), desc_a, info) - if (myidx(i) > idim) & - & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-idim/), desc_a, info) - if (myidx(i) + idim <= m) & - & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+idim/), desc_a, info) - if (myidx(i) > int(idim,psb_lpk_)*idim) & - & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & - & (/myidx(i) - int(idim,psb_lpk_)*idim/), desc_a, info) - if (myidx(i) + int(idim,psb_lpk_)*idim <= m) & - & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & - & (/myidx(i) + int(idim,psb_lpk_)*idim/), desc_a, info) - end do + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + + do i = 1, number_of_local_rows + call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)/), desc_a, info) + if (myidx(i) > 1) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-1/), desc_a, info) + if (myidx(i) < m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+1/), desc_a, info) + if (myidx(i) > idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-idim/), desc_a, info) + if (myidx(i) + idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+idim/), desc_a, info) + if (myidx(i) > int(idim,psb_lpk_)*idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) - int(idim,psb_lpk_)*idim/), desc_a, info) + if (myidx(i) + int(idim,psb_lpk_)*idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) + int(idim,psb_lpk_)*idim/), desc_a, info) + end do - call psb_cdasb(desc_a, info) - if (info /= psb_success_) then - write(psb_err_unit,*) my_rank, 'cdasb error:', info - call psb_abort(ctxt) + call psb_cdasb(desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdasb error:', info + call psb_abort(ctxt) + end if end if nrow = desc_a%get_local_rows() ! owned @@ -574,6 +636,7 @@ program psb_comm_test 9999 call psb_gefree(v_baseline, desc_a, info) call psb_gefree(v_neighbor, desc_a, info) call psb_gefree(v_neighbor_persistent, desc_a, info) + if (mat_allocated) call psb_spfree(a_mat, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(ctxt) diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index 4b98cafec..27a5e53ea 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -837,14 +837,6 @@ program psb_d_pde3d & err=err,itrace=itrace,& & istop=istopc) case('BICGSTAB','BICGSTABL','BICG','CG','CGS','FCG','GCR','RGMRES') - call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_,xxv%v%comm_handle,info) - if(info /= psb_success_) then - info=psb_err_from_subroutine_ - ch_err='comm init' - call psb_errpush(info,name,a_err=ch_err) - goto 9999 - end if - call psb_krylov(kmethd,a,prec,bv,xxv,eps,& & desc_a,info,itmax=itmax,iter=iter,err=err,itrace=itrace,& & istop=istopc,irst=irst) From fb5ba596933a09a3ba5e460ebb9c60120771f5d8 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Fri, 24 Apr 2026 15:10:06 +0200 Subject: [PATCH 164/175] [ADD] Added RMA one sided communication schemes --- base/CMakeLists.txt | 1 + base/comm/internals/psi_dswapdata.F90 | 492 ++++++++++++++++++ base/modules/Makefile | 5 +- .../comm_schemes/psb_comm_factory_mod.F90 | 15 + .../comm/comm_schemes/psb_comm_rma_mod.F90 | 240 +++++++++ .../comm_schemes/psb_comm_schemes_mod.F90 | 2 + ext/psb_c_hll_mat_mod.f90 | 2 +- ext/psb_d_hll_mat_mod.f90 | 2 +- ext/psb_s_hll_mat_mod.f90 | 2 +- ext/psb_z_hll_mat_mod.f90 | 2 +- test/comm/cg/psb_comm_cg_test.F90 | 15 +- test/comm/spmv/psb_spmv_test.f90 | 70 ++- test/comm/swapdata/psb_comm_test.F90 | 433 +++++++++------ 13 files changed, 1085 insertions(+), 196 deletions(-) create mode 100644 base/modules/comm/comm_schemes/psb_comm_rma_mod.F90 diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt index 1833a93c6..ebac7d333 100644 --- a/base/CMakeLists.txt +++ b/base/CMakeLists.txt @@ -16,6 +16,7 @@ set(PSB_base_source_files comm/internals/psi_lovrl_upd.f90 comm/internals/psi_dswapdata_a.F90 comm/internals/psi_movrl_upd_a.f90 + modules/comm/comm_schemes/psb_comm_rma_mod.F90 # comm/internals/psi_i2swaptran_a.F90 comm/internals/psi_dswaptran.F90 comm/internals/psi_covrl_save_a.f90 diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index d8c7fff9e..a19c17e39 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -83,6 +83,9 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use psb_comm_rma_mod, only: psb_comm_rma_handle use psb_comm_factory_mod contains @@ -191,6 +194,20 @@ contains call psb_errpush(info,name,a_err='neighbor persistent swap') goto 9999 end if + case(psb_comm_rma_pull_) + call psi_dswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_dswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if case default info = psb_err_mpi_error_ call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') @@ -911,6 +928,477 @@ contains end subroutine psi_dswap_neighbor_persistent_topology_vect + subroutine psi_dswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_dswap_rma_pull_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! START phase: build the layout once, prepare the exposed buffer, then issue RMA. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Expose combuf once and keep the window around until the descriptor changes. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Pull data from each peer. The metadata exchange stays local and simple. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if ((recv_pos < 1) .or. (recv_count < 0) .or. (recv_pos+max(0,recv_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull local receive bounds error') + goto 9999 + end if + + if (recv_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if + + ! WAIT phase: close the epoch and scatter the received slice back into Y. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if + + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dswap_rma_pull_vect + + + subroutine psi_dswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_dswap_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! START phase: identical layout handling, but the remote metadata describes the receive side. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Keep the window alive across repetitions: it is created once and reused. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push data to each peer. Only the base displacement and count are exchanged. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if ((send_pos < 1) .or. (send_count < 0) .or. (send_pos+max(0,send_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push local send bounds error') + goto 9999 + end if + + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_r_dpk_, prc_rank, remote_disp, send_count, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if + + ! WAIT phase: close the epoch and apply the receive-side scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + + call mpi_barrier(icomm, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if + + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dswap_rma_push_vect + + ! ! @@ -1007,6 +1495,10 @@ contains ineighbor_a2av = .true. case(psb_comm_persistent_ineighbor_alltoallv_) ineighbor_a2av_persistent = .true. + case(psb_comm_rma_pull_, psb_comm_rma_push_) + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='RMA swap is not yet enabled for multivectors') + goto 9999 case default baseline = .true. end select diff --git a/base/modules/Makefile b/base/modules/Makefile index 7e6f0e7c6..7d4a1b362 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -31,6 +31,7 @@ SERIAL_MODS=serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o \ comm/comm_schemes/psb_comm_schemes_mod.o \ comm/comm_schemes/psb_comm_baseline_mod.o \ comm/comm_schemes/psb_comm_neighbor_impl_mod.o \ + comm/comm_schemes/psb_comm_rma_mod.o \ comm/comm_schemes/psb_comm_factory_mod.o \ serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o\ serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o\ @@ -193,7 +194,9 @@ comm/comm_schemes/psb_comm_baseline_mod.o: comm/comm_schemes/psb_comm_schemes_mo comm/comm_schemes/psb_comm_neighbor_impl_mod.o: psb_const_mod.o desc/psb_desc_const_mod.o comm/comm_schemes/psb_comm_schemes_mod.o -comm/comm_schemes/psb_comm_factory_mod.o: comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_baseline_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o +comm/comm_schemes/psb_comm_rma_mod.o: comm/comm_schemes/psb_comm_schemes_mod.o psb_const_mod.o desc/psb_desc_const_mod.o + +comm/comm_schemes/psb_comm_factory_mod.o: comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_baseline_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o comm/comm_schemes/psb_comm_rma_mod.o comm/psb_neighbor_topology_mod.o: psb_const_mod.o desc/psb_desc_const_mod.o diff --git a/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 index 03c12e72d..fbb633585 100644 --- a/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_factory_mod.F90 @@ -2,10 +2,12 @@ module psb_comm_factory_mod use psb_const_mod use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, & & psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_rma_pull_, psb_comm_rma_push_, & & psb_comm_unknown_, psb_comm_status_start_, psb_comm_status_wait_, & & psb_comm_status_sync_, psb_comm_status_unknown_ use psb_comm_baseline_mod, only: psb_comm_baseline_handle use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle + use psb_comm_rma_mod, only: psb_comm_rma_handle implicit none contains @@ -37,6 +39,8 @@ contains type is(psb_comm_neighbor_handle) h%comm_type = comm_type h%use_persistent_buffers = (comm_type == psb_comm_persistent_ineighbor_alltoallv_) + type is(psb_comm_rma_handle) + h%comm_type = comm_type class default ! nothing else to configure end select @@ -60,6 +64,17 @@ contains h%comm_type = comm_type h%use_persistent_buffers = (comm_type == psb_comm_persistent_ineighbor_alltoallv_) end select + case(psb_comm_rma_pull_, psb_comm_rma_push_) + allocate(psb_comm_rma_handle :: handle, stat=info) + if (info /= 0) return + call handle%init(info) + if (info /= 0) return + handle%id = old_id + handle%swap_status = old_swap_status + select type(h => handle) + type is(psb_comm_rma_handle) + h%comm_type = comm_type + end select case default allocate(psb_comm_baseline_handle :: handle, stat=info) if (info /= 0) return diff --git a/base/modules/comm/comm_schemes/psb_comm_rma_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_rma_mod.F90 new file mode 100644 index 000000000..30822617d --- /dev/null +++ b/base/modules/comm/comm_schemes/psb_comm_rma_mod.F90 @@ -0,0 +1,240 @@ +module psb_comm_rma_mod + use psb_const_mod + use psb_desc_const_mod, only: psb_proc_id_, psb_n_elem_recv_, psb_elem_recv_, & + & psb_n_elem_send_, psb_elem_send_ + use psb_error_mod +#ifdef PSB_MPI_MOD + use mpi +#endif + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_unknown_ + implicit none + integer(psb_mpk_), parameter :: psb_rma_meta_tag = 913 +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type, extends(psb_comm_handle_type) :: psb_comm_rma_handle + integer(psb_mpk_) :: win = mpi_win_null + logical :: window_ready = .false. + logical :: window_open = .false. + logical :: layout_ready = .false. + integer(psb_ipk_) :: layout_nnbr = -1 + integer(psb_ipk_) :: layout_send = -1 + integer(psb_ipk_) :: layout_recv = -1 + integer(psb_ipk_), allocatable :: peer_proc(:) + integer(psb_ipk_), allocatable :: peer_send_counts(:) + integer(psb_ipk_), allocatable :: peer_recv_counts(:) + integer(psb_ipk_), allocatable :: peer_send_displs(:) + integer(psb_ipk_), allocatable :: peer_recv_displs(:) + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_ipk_), allocatable :: peer_remote_send_displs(:) + integer(psb_ipk_), allocatable :: peer_remote_recv_displs(:) + integer(psb_ipk_), allocatable :: peer_send_indexes(:) + integer(psb_ipk_), allocatable :: peer_recv_indexes(:) + contains + procedure, pass :: init => psb_comm_rma_init + procedure, pass :: free => psb_comm_rma_free + procedure, pass :: clear_memory_buffer_layout => psb_comm_rma_clear_memory_buffer_layout + procedure, pass :: init_memory_buffer_layout => psb_comm_rma_ini_memory_buffer_layout + procedure, pass :: set_swap_status => psb_comm_rma_set_swap_status + procedure, pass :: get_swap_status => psb_comm_rma_get_swap_status + end type psb_comm_rma_handle + +contains + + subroutine psb_comm_rma_init(this, info) + class(psb_comm_rma_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + info = 0 + this%comm_type = psb_comm_unknown_ + this%id = 0 + this%swap_status = 0 + this%win = mpi_win_null + this%window_ready = .false. + this%window_open = .false. + this%layout_ready = .false. + this%layout_nnbr = -1 + this%layout_send = -1 + this%layout_recv = -1 + call this%clear_memory_buffer_layout(info) + end subroutine psb_comm_rma_init + + subroutine psb_comm_rma_clear_memory_buffer_layout(this, info) + class(psb_comm_rma_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + if (allocated(this%peer_proc)) deallocate(this%peer_proc) + if (allocated(this%peer_send_counts)) deallocate(this%peer_send_counts) + if (allocated(this%peer_recv_counts)) deallocate(this%peer_recv_counts) + if (allocated(this%peer_send_displs)) deallocate(this%peer_send_displs) + if (allocated(this%peer_recv_displs)) deallocate(this%peer_recv_displs) + if (allocated(this%peer_mpi_rank)) deallocate(this%peer_mpi_rank) + if (allocated(this%peer_remote_send_displs)) deallocate(this%peer_remote_send_displs) + if (allocated(this%peer_remote_recv_displs)) deallocate(this%peer_remote_recv_displs) + if (allocated(this%peer_send_indexes)) deallocate(this%peer_send_indexes) + if (allocated(this%peer_recv_indexes)) deallocate(this%peer_recv_indexes) + + this%layout_ready = .false. + this%layout_nnbr = -1 + this%layout_send = -1 + this%layout_recv = -1 + end subroutine psb_comm_rma_clear_memory_buffer_layout + + subroutine psb_comm_rma_ini_memory_buffer_layout(this, info, comm_list, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + class(psb_comm_rma_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: comm_list(:) + integer(psb_ipk_), intent(in) :: peer_mpi_rank(:) + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + integer(psb_ipk_), intent(in) :: my_rank + integer(psb_mpk_), intent(in) :: icomm + + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size), prc_rank + integer(psb_ipk_) :: n_neighbors, send_total, recv_total + integer(psb_ipk_) :: neighbor_idx, item_idx + integer(psb_ipk_) :: list_pos, send_offset, recv_offset + integer(psb_ipk_) :: proc_to_comm, recv_count, send_count + integer(psb_ipk_) :: local_meta(4), remote_meta(4) + + call this%clear_memory_buffer_layout(info) + if (info /= psb_success_) return + + n_neighbors = num_neighbors + send_total = total_send + recv_total = total_recv + + if (n_neighbors > 0) then + allocate(this%peer_proc(n_neighbors), this%peer_send_counts(n_neighbors), & + & this%peer_recv_counts(n_neighbors), this%peer_send_displs(n_neighbors), & + & this%peer_recv_displs(n_neighbors), this%peer_mpi_rank(n_neighbors), & + & this%peer_remote_send_displs(n_neighbors), this%peer_remote_recv_displs(n_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + return + end if + end if + + if (send_total > 0) then + allocate(this%peer_send_indexes(send_total), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + return + end if + end if + + if (recv_total > 0) then + allocate(this%peer_recv_indexes(recv_total), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + return + end if + end if + + list_pos = 1 + send_offset = 0 + recv_offset = 0 + do neighbor_idx = 1, n_neighbors + proc_to_comm = comm_list(list_pos + psb_proc_id_) + recv_count = comm_list(list_pos + psb_n_elem_recv_) + send_count = comm_list(list_pos + recv_count + psb_n_elem_send_) + + this%peer_proc(neighbor_idx) = proc_to_comm + this%peer_recv_counts(neighbor_idx) = recv_count + this%peer_send_counts(neighbor_idx) = send_count + this%peer_recv_displs(neighbor_idx) = recv_offset + this%peer_send_displs(neighbor_idx) = send_offset + this%peer_mpi_rank(neighbor_idx) = peer_mpi_rank(neighbor_idx) + + if (recv_count > 0) then + do item_idx = 1, recv_count + this%peer_recv_indexes(recv_offset + item_idx) = comm_list(list_pos + psb_elem_recv_ + item_idx - 1) + end do + end if + + if (send_count > 0) then + do item_idx = 1, send_count + this%peer_send_indexes(send_offset + item_idx) = comm_list(list_pos + recv_count + psb_elem_send_ + item_idx - 1) + end do + end if + + recv_offset = recv_offset + recv_count + send_offset = send_offset + send_count + list_pos = list_pos + recv_count + send_count + 3 + end do + + do neighbor_idx = 1, n_neighbors + proc_to_comm = this%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = this%peer_mpi_rank(neighbor_idx) + local_meta = (/ this%peer_send_displs(neighbor_idx)+1, this%peer_send_counts(neighbor_idx), & + & this%peer_recv_displs(neighbor_idx)+1+send_total, this%peer_recv_counts(neighbor_idx) /) + call mpi_sendrecv(local_meta, 4, psb_mpi_mpk_, prc_rank, psb_rma_meta_tag, & + & remote_meta, 4, psb_mpi_mpk_, prc_rank, psb_rma_meta_tag, icomm, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + return + end if + this%peer_remote_send_displs(neighbor_idx) = remote_meta(1) + this%peer_remote_recv_displs(neighbor_idx) = remote_meta(3) + else + this%peer_remote_send_displs(neighbor_idx) = this%peer_send_displs(neighbor_idx)+1 + this%peer_remote_recv_displs(neighbor_idx) = this%peer_recv_displs(neighbor_idx)+1+send_total + end if + end do + + if ((send_offset /= send_total) .or. (recv_offset /= recv_total)) then + info = psb_err_internal_error_ + return + end if + + this%layout_nnbr = n_neighbors + this%layout_send = send_total + this%layout_recv = recv_total + this%layout_ready = .true. + end subroutine psb_comm_rma_ini_memory_buffer_layout + + subroutine psb_comm_rma_free(this, info) +#ifdef PSB_MPI_MOD + use mpi +#endif + class(psb_comm_rma_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + integer(psb_mpk_) :: iret + + info = 0 + if (this%window_open) then + call mpi_win_unlock_all(this%win, iret) + this%window_open = .false. + end if + if (this%win /= mpi_win_null) then + call mpi_win_free(this%win, iret) + this%win = mpi_win_null + end if + this%window_ready = .false. + this%layout_ready = .false. + this%layout_nnbr = -1 + this%layout_send = -1 + this%layout_recv = -1 + call this%clear_memory_buffer_layout(info) + end subroutine psb_comm_rma_free + + subroutine psb_comm_rma_set_swap_status(this, flag, info) + class(psb_comm_rma_handle), intent(inout) :: this + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + info = 0 + this%swap_status = flag + end subroutine psb_comm_rma_set_swap_status + + subroutine psb_comm_rma_get_swap_status(this, flag, info) + class(psb_comm_rma_handle), intent(in) :: this + integer(psb_ipk_), intent(out) :: flag + integer(psb_ipk_), intent(out) :: info + info = 0 + flag = this%swap_status + end subroutine psb_comm_rma_get_swap_status + +end module psb_comm_rma_mod \ No newline at end of file diff --git a/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 index 1340f73c4..d3467a2c9 100644 --- a/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_schemes_mod.F90 @@ -11,6 +11,8 @@ module psb_comm_schemes_mod enumerator psb_comm_isend_irecv_ enumerator psb_comm_ineighbor_alltoallv_ enumerator psb_comm_persistent_ineighbor_alltoallv_ + enumerator psb_comm_rma_pull_ + enumerator psb_comm_rma_push_ end enum enum, bind(c) diff --git a/ext/psb_c_hll_mat_mod.f90 b/ext/psb_c_hll_mat_mod.f90 index 966b60f56..343d779e5 100644 --- a/ext/psb_c_hll_mat_mod.f90 +++ b/ext/psb_c_hll_mat_mod.f90 @@ -534,7 +534,7 @@ contains if (allocated(a%irn)) deallocate(a%irn) if (allocated(a%ja)) deallocate(a%ja) if (allocated(a%val)) deallocate(a%val) - if (allocated(a%val)) deallocate(a%hkoffs) + if (allocated(a%hkoffs)) deallocate(a%hkoffs) call a%set_null() call a%set_nrows(izero) call a%set_ncols(izero) diff --git a/ext/psb_d_hll_mat_mod.f90 b/ext/psb_d_hll_mat_mod.f90 index acc3b312b..2307db956 100644 --- a/ext/psb_d_hll_mat_mod.f90 +++ b/ext/psb_d_hll_mat_mod.f90 @@ -534,7 +534,7 @@ contains if (allocated(a%irn)) deallocate(a%irn) if (allocated(a%ja)) deallocate(a%ja) if (allocated(a%val)) deallocate(a%val) - if (allocated(a%val)) deallocate(a%hkoffs) + if (allocated(a%hkoffs)) deallocate(a%hkoffs) call a%set_null() call a%set_nrows(izero) call a%set_ncols(izero) diff --git a/ext/psb_s_hll_mat_mod.f90 b/ext/psb_s_hll_mat_mod.f90 index 735091c8b..d42478d0b 100644 --- a/ext/psb_s_hll_mat_mod.f90 +++ b/ext/psb_s_hll_mat_mod.f90 @@ -534,7 +534,7 @@ contains if (allocated(a%irn)) deallocate(a%irn) if (allocated(a%ja)) deallocate(a%ja) if (allocated(a%val)) deallocate(a%val) - if (allocated(a%val)) deallocate(a%hkoffs) + if (allocated(a%hkoffs)) deallocate(a%hkoffs) call a%set_null() call a%set_nrows(izero) call a%set_ncols(izero) diff --git a/ext/psb_z_hll_mat_mod.f90 b/ext/psb_z_hll_mat_mod.f90 index 98eb403f2..b825e1c82 100644 --- a/ext/psb_z_hll_mat_mod.f90 +++ b/ext/psb_z_hll_mat_mod.f90 @@ -534,7 +534,7 @@ contains if (allocated(a%irn)) deallocate(a%irn) if (allocated(a%ja)) deallocate(a%ja) if (allocated(a%val)) deallocate(a%val) - if (allocated(a%val)) deallocate(a%hkoffs) + if (allocated(a%hkoffs)) deallocate(a%hkoffs) call a%set_null() call a%set_nrows(izero) call a%set_ncols(izero) diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index 357d00482..38652f823 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -29,7 +29,7 @@ program psb_comm_cg_test integer(psb_ipk_) :: desc_me, desc_np integer(psb_ipk_) :: idim, itmax, itrace, istop, iter integer(psb_ipk_) :: scheme_idx, prec_idx, rep, nrep, nwarm - integer(psb_ipk_), parameter :: n_schemes=3, n_precs=2 + integer(psb_ipk_), parameter :: n_schemes=5, n_precs=2 integer(psb_ipk_), allocatable :: iter_count(:,:,:), solve_info(:,:,:) integer(psb_ipk_) :: scheme_type(n_schemes) real(psb_dpk_) :: eps, err, t_start, t_elapsed @@ -71,10 +71,13 @@ program psb_comm_cg_test use_gpu = .false. #endif scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & - & psb_comm_persistent_ineighbor_alltoallv_ /) + & psb_comm_persistent_ineighbor_alltoallv_ , psb_comm_rma_pull_, psb_comm_rma_push_ /) scheme_name(1) = 'isend_irecv' scheme_name(2) = 'ineighbor_alltoallv' scheme_name(3) = 'persistent_ineighbor_a2av' + scheme_name(4) = 'psb_comm_rma_pull_' + scheme_name(5) = 'psb_comm_rma_push_' + prec_type(1) = 'NONE' prec_type(2) = 'DIAG' prec_name(1) = 'none' @@ -201,6 +204,10 @@ program psb_comm_cg_test do prec_idx = 1, n_precs do scheme_idx = 1, n_schemes do rep = 1, nrep + t_start = psb_wtime() + call psb_comm_set(scheme_type(scheme_idx),x%v%comm_handle,info) + comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) if (info /= psb_success_) goto 9999 @@ -225,9 +232,7 @@ program psb_comm_cg_test goto 9999 end if - t_start = psb_wtime() - call psb_comm_set(scheme_type(scheme_idx),x%v%comm_handle,info) - comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,comm_set_time(prec_idx,scheme_idx,rep)) if (info /= psb_success_) goto 9999 diff --git a/test/comm/spmv/psb_spmv_test.f90 b/test/comm/spmv/psb_spmv_test.f90 index a69649560..4e20b0b40 100644 --- a/test/comm/spmv/psb_spmv_test.f90 +++ b/test/comm/spmv/psb_spmv_test.f90 @@ -5,10 +5,12 @@ module psb_spmv_overlap_test use psb_base_mod use psb_util_mod - use psb_comm_factory_mod, only: psb_comm_set use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & - & psb_comm_persistent_ineighbor_alltoallv_ + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_handle_type + use psb_comm_baseline_mod, only: psb_comm_baseline_handle use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle + use psb_comm_rma_mod, only: psb_comm_rma_handle #ifdef PSB_HAVE_CUDA use psb_cuda_mod #endif @@ -529,7 +531,7 @@ contains return end subroutine psb_d_gen_pde3d - subroutine run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_in,times_in,do_swap) + subroutine run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_in,times_in,do_swap,comm_mode) use psb_base_mod #ifdef PSB_HAVE_CUDA use psb_cuda_mod @@ -544,6 +546,7 @@ contains character(len=*), intent(in) :: gpu_fmt integer(psb_ipk_), intent(in) :: idim_in, times_in logical, intent(in) :: do_swap + character(len=*), intent(in) :: comm_mode type(psb_dspmat_type) :: a type(psb_d_vect_type) :: x, y @@ -556,16 +559,36 @@ contains real(psb_dpk_) :: alpha, beta, t0, t1, dt, avg_t logical :: use_external_matrix + integer(psb_ipk_) :: comm_type + #ifdef PSB_HAVE_CUDA - type(psb_d_vect_cuda) :: cuda_vector_mold - type(psb_i_vect_cuda) :: cuda_index_mold - type(psb_d_cuda_elg_sparse_mat), target :: cuda_ell_sparse_mold - type(psb_d_cuda_csrg_sparse_mat), target :: cuda_csr_sparse_mold - type(psb_d_cuda_hdiag_sparse_mat), target :: cuda_hdia_sparse_mold - type(psb_d_cuda_hlg_sparse_mat), target :: cuda_hll_sparse_mold - class(psb_d_base_sparse_mat), pointer :: cuda_sparse_mold + type(psb_d_vect_cuda) :: cuda_vector_mold + type(psb_i_vect_cuda) :: cuda_index_mold + type(psb_d_cuda_elg_sparse_mat), target :: cuda_ell_sparse_mold + type(psb_d_cuda_csrg_sparse_mat), target :: cuda_csr_sparse_mold + type(psb_d_cuda_hdiag_sparse_mat), target :: cuda_hdia_sparse_mold + type(psb_d_cuda_hlg_sparse_mat), target :: cuda_hll_sparse_mold + class(psb_d_base_sparse_mat), pointer :: cuda_sparse_mold #endif + select case(psb_toupper(trim(comm_mode))) + case('P2P','ISEND_IRECV') + comm_type = psb_comm_isend_irecv_ + case('NEIGHBOR','INEIGHBOR_ALLTOALLV') + comm_type = psb_comm_ineighbor_alltoallv_ + case('PNEIGHBOR','PERSISTENT','PERSISTENT_INEIGHBOR_A2AV') + comm_type = psb_comm_persistent_ineighbor_alltoallv_ + case('MPI_GET','RMA_PULL') + comm_type = psb_comm_rma_pull_ + case('MPI_PUT','RMA_PUSH') + comm_type = psb_comm_rma_push_ + case default + comm_type = psb_comm_isend_irecv_ + if (my_rank == psb_root_) then + write(psb_err_unit,'("Unknown comm backend: ",a,", defaulting to P2P")') trim(comm_mode) + end if + end select + info = psb_success_ afmt = psb_toupper(trim(cpu_fmt)) if (len_trim(afmt) == 0) afmt = 'CSR' @@ -613,6 +636,9 @@ contains end if if (info /= psb_success_) goto 9999 + call psb_comm_set(comm_type,x%v%comm_handle,info) + if (info /= psb_success_) goto 9999 + #ifdef PSB_HAVE_CUDA if (use_gpu) then select case(psb_toupper(trim(gpu_fmt))) @@ -669,6 +695,7 @@ contains end if write(psb_out_unit,'(" global unknowns : ",i0)') n_global write(psb_out_unit,'(" repetitions : ",i0)') times + write(psb_out_unit,'(" comm backend : ",a)') trim(psb_toupper(trim(comm_mode))) write(psb_out_unit,'(" total time [s] : ",es12.5)') dt write(psb_out_unit,'(" avg time [s] : ",es12.5)') avg_t end if @@ -764,8 +791,13 @@ program psb_spmv_kernel character(len=8) :: gpu_fmt integer(psb_ipk_) :: idim_arg, times_arg logical :: do_swap - idim_arg = -1 - times_arg = -1 + integer :: kmode + integer, parameter :: n_comm_modes = 5 + character(len=20), parameter :: comm_modes(n_comm_modes) = [character(len=20) :: & + & 'P2P', 'NEIGHBOR', 'PNEIGHBOR', 'MPI_GET', 'MPI_PUT'] + + idim_arg = -1 + times_arg = -1 matrix_file = '' matrix_fmt = 'MM' @@ -869,12 +901,18 @@ program psb_spmv_kernel write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ write(psb_out_unit,*) 'This is the psb_spmv_kernel sample program' write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu - write(psb_out_unit,'("Usage: ./psb_spmv_kernel [--gpu=TRUE|FALSE] [--dim=N] [--times=N] ",& - &"[--cpu_fmt=CSR|COO|CSC|ELL|HLL] [--gpu_fmt=HLL|ELL|CSR|HDIA] [--matrix=] [--fmt=MM|HB] ",& - &"[--overlap|--nooverlap]")') + write(psb_out_unit,'("Usage: ./psb_spmv_kernel [--gpu=TRUE|FALSE] [--dim=N] [--times=N] ",& + &"[--cpu_fmt=CSR|COO|CSC|ELL|HLL] [--gpu_fmt=HLL|ELL|CSR|HDIA] [--matrix=] [--fmt=MM|HB] ",& + &"[--overlap|--nooverlap] (runs all comm backends)")') end if - call run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_arg,times_arg,do_swap) + do kmode = 1, n_comm_modes + if (my_rank == psb_root_) then + write(psb_out_unit,'(/,"=== Backend sweep: ",a," ===")') trim(comm_modes(kmode)) + end if + call run_spmv_kernel(ctxt, use_gpu, matrix_file, matrix_fmt, cpu_fmt, gpu_fmt, & + & idim_arg, times_arg, do_swap, comm_modes(kmode)) + end do #ifdef PSB_HAVE_CUDA if (use_gpu) call psb_cuda_exit() diff --git a/test/comm/swapdata/psb_comm_test.F90 b/test/comm/swapdata/psb_comm_test.F90 index 40e837345..0de15b0d1 100644 --- a/test/comm/swapdata/psb_comm_test.F90 +++ b/test/comm/swapdata/psb_comm_test.F90 @@ -22,7 +22,7 @@ program psb_comm_test use psi_mod use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free use psb_comm_schemes_mod, only: psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & - & psb_comm_isend_irecv_ + & psb_comm_isend_irecv_, psb_comm_rma_pull_, psb_comm_rma_push_ use psb_comm_schemes_mod, only: psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ implicit none @@ -47,11 +47,12 @@ program psb_comm_test type(psb_ldspmat_type) :: aux_a ! ---- vectors ---- - type(psb_d_vect_type) :: v_baseline, v_neighbor, v_neighbor_persistent + type(psb_d_vect_type) :: v_baseline, v_neighbor, v_neighbor_persistent, v_rma_get, v_rma_put ! ---- temporary / comparison arrays ---- real(psb_dpk_), allocatable :: vals(:) - real(psb_dpk_), allocatable :: result_baseline(:), result_neighbor(:), result_persistent(:) + real(psb_dpk_), allocatable :: result_baseline(:), result_neighbor(:), result_persistent(:), & + & result_rma_get(:), result_rma_put(:) real(psb_dpk_), allocatable :: expected(:) ! ---- halo index bookkeeping ---- @@ -60,11 +61,16 @@ program psb_comm_test ! ---- error / reporting ---- integer(psb_ipk_) :: n_pass, n_total, imode - logical :: run_baseline, run_neighbor, run_persistent + logical :: run_baseline, run_neighbor, run_persistent, run_rma_get, run_rma_put logical :: mat_allocated logical :: comm_ok real(psb_dpk_) :: err, tol - real(psb_dpk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent + real(psb_dpk_) :: first_swap_baseline, first_swap_neighbor, first_swap_persistent, & + & first_swap_rma_get, first_swap_rma_put + real(psb_dpk_) :: comm_setup_time_baseline, comm_setup_time_neighbor, comm_setup_time_persistent, & + & comm_setup_time_rma_get, comm_setup_time_rma_put + real(psb_dpk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent, & + & tsum_rma_get, tsum_rma_put integer(psb_lpk_), allocatable :: glob_col(:) character(len=40) :: name real(psb_dpk_) :: huge_d @@ -136,21 +142,33 @@ program psb_comm_test run_baseline = .false. run_neighbor = .false. run_persistent = .false. + run_rma_get = .false. + run_rma_put = .false. + + select case (trim(adjustl(mode))) case ('both','all') - run_baseline = .true. - run_neighbor = .true. - run_persistent = .true. + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. case ('baseline') run_baseline = .true. case ('neighbor') run_neighbor = .true. case ('persistent','persistent_neighbor','persistent-neighbor') run_persistent = .true. + case ('rma_get') + run_rma_get = .true. + case ('rma_put') + run_rma_put = .true. case default run_baseline = .true. run_neighbor = .true. run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. end select if ((.not.use_external_matrix) .and. (idim <= 0)) then @@ -267,6 +285,18 @@ program psb_comm_test write(psb_err_unit,*) my_rank, 'geall persistent-neighbor error:', info call psb_abort(ctxt) end if + call psb_geall(v_rma_get, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_put, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-put error:', info + call psb_abort(ctxt) + end if + + call psb_geasb(v_baseline, desc_a, info, scratch=.true.) if (info /= psb_success_) then write(psb_err_unit,*) my_rank, 'geasb baseline error:', info @@ -282,6 +312,18 @@ program psb_comm_test write(psb_err_unit,*) my_rank, 'geasb persistent-neighbor error:', info call psb_abort(ctxt) end if + call psb_geasb(v_rma_get, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_put, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-put error:', info + call psb_abort(ctxt) + end if + + ! Fill owned entries with the global index value allocate(vals(ncol)) @@ -292,6 +334,8 @@ program psb_comm_test call v_baseline%set_vect(vals) call v_neighbor%set_vect(vals) call v_neighbor_persistent%set_vect(vals) + call v_rma_get%set_vect(vals) + call v_rma_put%set_vect(vals) deallocate(vals) ! ================================================================== @@ -304,15 +348,39 @@ program psb_comm_test do i = 1, ncol expected(i) = real(glob_col(i), psb_dpk_) end do - allocate(result_baseline(ncol), result_neighbor(ncol), result_persistent(ncol)) + allocate(result_baseline(ncol), result_neighbor(ncol), result_persistent(ncol), & + & result_rma_get(ncol), result_rma_put(ncol)) result_baseline = huge_d result_neighbor = huge_d result_persistent = huge_d + result_rma_get = huge_d + result_rma_put = huge_d + + first_swap_baseline = 0.0_psb_dpk_ + first_swap_neighbor = 0.0_psb_dpk_ + first_swap_persistent = 0.0_psb_dpk_ + first_swap_rma_get = 0.0_psb_dpk_ + first_swap_rma_put = 0.0_psb_dpk_ + + comm_setup_time_baseline = 0.0_psb_dpk_ + comm_setup_time_neighbor = 0.0_psb_dpk_ + comm_setup_time_persistent = 0.0_psb_dpk_ + comm_setup_time_rma_get = 0.0_psb_dpk_ + comm_setup_time_rma_put = 0.0_psb_dpk_ ! ================================================================== ! 6. Baseline halo exchange (Isend/Irecv in one call) ! ================================================================== if (run_baseline) then + comm_setup_time_baseline = psb_wtime() + call psb_comm_set(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set baseline error:', info + call psb_abort(ctxt) + end if + comm_setup_time_baseline = psb_wtime() - comm_setup_time_baseline + + first_swap_baseline = psb_wtime() call psi_swapdata( & swap_status=psb_comm_status_start_, & beta=dzero, & @@ -336,6 +404,7 @@ program psb_comm_test write(psb_err_unit,*) my_rank, 'baseline swap error:', info call psb_abort(ctxt) end if + first_swap_baseline = psb_wtime() - first_swap_baseline end if @@ -343,11 +412,16 @@ program psb_comm_test ! 7. Neighbor topology halo exchange (start + wait) ! ================================================================== if (run_neighbor) then + comm_setup_time_neighbor = psb_wtime() call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) if (info /= 0) then write(psb_err_unit,*) my_rank, 'psb_comm_set neighbor error:', info call psb_abort(ctxt) end if + comm_setup_time_neighbor = psb_wtime() - comm_setup_time_neighbor + + + first_swap_neighbor = psb_wtime() call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) if (info /= psb_success_) then write(psb_err_unit,*) my_rank, 'neighbor start error:', info @@ -359,17 +433,23 @@ program psb_comm_test write(psb_err_unit,*) my_rank, 'neighbor wait error:', info call psb_abort(ctxt) end if + first_swap_neighbor = psb_wtime() - first_swap_neighbor end if ! ================================================================== ! 7b. Persistent-neighbor halo exchange (start + wait) ! ================================================================== if (run_persistent) then + comm_setup_time_persistent = psb_wtime() call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) if (info /= 0) then write(psb_err_unit,*) my_rank, 'psb_comm_set persistent-neighbor error:', info call psb_abort(ctxt) end if + comm_setup_time_persistent = psb_wtime() - comm_setup_time_persistent + + + first_swap_persistent = psb_wtime() call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) if (info /= psb_success_) then write(psb_err_unit,*) my_rank, 'persistent-neighbor start error:', info @@ -380,8 +460,62 @@ program psb_comm_test write(psb_err_unit,*) my_rank, 'persistent-neighbor wait error:', info call psb_abort(ctxt) end if + first_swap_persistent = psb_wtime() - first_swap_persistent end if + + + if(run_rma_get) then + comm_setup_time_rma_get = psb_wtime() + call psb_comm_set(psb_comm_rma_pull_, v_rma_get%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA get error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_get = psb_wtime() - comm_setup_time_rma_get + + first_swap_rma_get = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, dzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_get = psb_wtime() - first_swap_rma_get + end if + + + + + if(run_rma_put) then + comm_setup_time_rma_put = psb_wtime() + call psb_comm_set(psb_comm_rma_push_, v_rma_put%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA put error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_put = psb_wtime() - comm_setup_time_rma_put + + first_swap_rma_put = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, dzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_put = psb_wtime() - first_swap_rma_put + end if + + + ! ================================================================== ! 8. Performance: repeat exchanges and measure timings ! ================================================================== @@ -392,6 +526,8 @@ program psb_comm_test tsum_baseline = 0.0_psb_dpk_ tsum_neighbor = 0.0_psb_dpk_ tsum_neighbor_persistent = 0.0_psb_dpk_ + tsum_rma_get = 0.0_psb_dpk_ + tsum_rma_put = 0.0_psb_dpk_ do i = 1, iters if (run_baseline) then @@ -423,194 +559,119 @@ program psb_comm_test call psb_amx(ctxt, dt) tsum_neighbor_persistent = tsum_neighbor_persistent + dt end if + + + if (run_rma_get) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_get = tsum_rma_get + dt + end if + + + if (run_rma_put) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_put = tsum_rma_put + dt + end if + + end do + + + call psb_amx(ctxt, tsum_baseline) + call psb_amx(ctxt, tsum_neighbor) + call psb_amx(ctxt, tsum_neighbor_persistent) + call psb_amx(ctxt, first_swap_baseline) + call psb_amx(ctxt, first_swap_neighbor) + call psb_amx(ctxt, first_swap_persistent) + call psb_amx(ctxt, comm_setup_time_baseline) + call psb_amx(ctxt, comm_setup_time_neighbor) + call psb_amx(ctxt, comm_setup_time_persistent) + call psb_amx(ctxt, comm_setup_time_rma_get) + call psb_amx(ctxt, comm_setup_time_rma_put) + + + + if (my_rank == 0) then if (run_baseline) then write(psb_out_unit,'(" Avg baseline time : ",es12.5)') (tsum_baseline / real(iters,psb_dpk_)) write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline + write(psb_out_unit,'(" First baseline time: ",es12.5)') first_swap_baseline + write(psb_out_unit,'(" Baseline comm setup: ",es12.5)') comm_setup_time_baseline end if if (run_neighbor) then write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') (tsum_neighbor / real(iters,psb_dpk_)) write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor + write(psb_out_unit,'(" First neighbor time: ",es12.5)') first_swap_neighbor + write(psb_out_unit,'(" Neighbor comm setup: ",es12.5)') comm_setup_time_neighbor end if if (run_persistent) then write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') (tsum_neighbor_persistent / real(iters,psb_dpk_)) write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_neighbor_persistent + write(psb_out_unit,'(" First pers-neigh time: ",es12.5)') first_swap_persistent + write(psb_out_unit,'(" Persistent comm setup: ",es12.5)') comm_setup_time_persistent + end if + if (run_rma_get) then + write(psb_out_unit,'(" Avg RMA get time : ",es12.5)') (tsum_rma_get / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot RMA get time : ",es12.5)') tsum_rma_get + write(psb_out_unit,'(" First RMA get time : ",es12.5)') first_swap_rma_get + write(psb_out_unit,'(" RMA get comm setup : ",es12.5)') comm_setup_time_rma_get + end if + if (run_rma_put) then + write(psb_out_unit,'(" Avg RMA put time : ",es12.5)') (tsum_rma_put / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot RMA put time : ",es12.5)') tsum_rma_put + write(psb_out_unit,'(" First RMA put time : ",es12.5)') first_swap_rma_put + write(psb_out_unit,'(" RMA put comm setup : ",es12.5)') comm_setup_time_rma_put end if end if ! ================================================================== ! 8. Extract results and compare ! ================================================================== - result_baseline = v_baseline%v%v - result_neighbor = v_neighbor%v%v + result_baseline = v_baseline%v%v + result_neighbor = v_neighbor%v%v result_persistent = v_neighbor_persistent%v%v + result_rma_get = v_rma_get%v%v + result_rma_put = v_rma_put%v%v - ! Debug: Check if results are properly populated - if (my_rank == 0 .and. debug_swapdata) then - write(psb_out_unit,'("DEBUG: ncol=",i0," nrow=",i0)') ncol, nrow - write(psb_out_unit,'("DEBUG: size(result_baseline)=",i0)') size(result_baseline) - if (ncol > 0) then - write(psb_out_unit,'("DEBUG: result_baseline(1:min(5,ncol))=",5(es12.5,1x))') & - & result_baseline(1:min(5,ncol)) - write(psb_out_unit,'("DEBUG: expected(1:min(5,ncol))=",5(es12.5,1x))') & - & expected(1:min(5,ncol)) - end if - end if - - if (run_baseline .and. run_neighbor) then - n_total = n_total + 1 - err = huge_d - if (ncol > 0) then - err = maxval(abs(result_baseline(1:ncol) - result_neighbor(1:ncol))) - else - err = 0.0_psb_dpk_ - end if - call psb_amx(ctxt, err) - if (my_rank == 0) then - if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then - write(psb_out_unit,'(" [PASS] cross-check baseline vs neighbor : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] cross-check baseline vs neighbor : err = ",es12.5)') err - end if - end if - end if - - if (run_baseline) then - n_total = n_total + 1 - err = huge_d - if (ncol > 0) then - err = maxval(abs(result_baseline(1:ncol) - expected(1:ncol))) - else - err = 0.0_psb_dpk_ - end if - call psb_amx(ctxt, err) - if (my_rank == 0) then - if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then - write(psb_out_unit,'(" [PASS] baseline absolute correctness : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] baseline absolute correctness : err = ",es12.5)') err - end if - end if - end if - - if (run_neighbor) then - n_total = n_total + 1 - err = huge_d - if (ncol > 0) then - err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) - else - err = 0.0_psb_dpk_ - end if - call psb_amx(ctxt, err) - if (my_rank == 0) then - if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then - write(psb_out_unit,'(" [PASS] neighbor absolute correctness : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] neighbor absolute correctness : err = ",es12.5)') err - end if - end if - end if + ! --- Cross Checks --- + if (run_baseline .and. run_neighbor) & + call check_result("cross-check baseline vs neighbor", result_baseline, result_neighbor, ncol, tol) - if (run_baseline .and. run_persistent) then - n_total = n_total + 1 - err = huge_d - if (ncol > 0) then - err = maxval(abs(result_baseline(1:ncol) - result_persistent(1:ncol))) - else - err = 0.0_psb_dpk_ - end if - call psb_amx(ctxt, err) - if (my_rank == 0) then - if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then - write(psb_out_unit,'(" [PASS] cross-check baseline vs pers-nei : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] cross-check baseline vs pers-nei : err = ",es12.5)') err - end if - end if - end if + if (run_baseline .and. run_persistent) & + call check_result("cross-check baseline vs pers-nei", result_baseline, result_persistent, ncol, tol) - if (run_persistent) then - n_total = n_total + 1 - err = huge_d - if (ncol > 0) then - err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) - else - err = 0.0_psb_dpk_ - end if - call psb_amx(ctxt, err) - if (my_rank == 0) then - if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then - write(psb_out_unit,'(" [PASS] pers-neigh absolute correctness : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] pers-neigh absolute correctness : err = ",es12.5)') err - end if - end if - end if + if (run_baseline .and. run_rma_get) & + call check_result("cross-check baseline vs rma-get", result_baseline, result_rma_get, ncol, tol) + + if (run_baseline .and. run_rma_put) & + call check_result("cross-check baseline vs rma-put", result_baseline, result_rma_put, ncol, tol) - if (run_neighbor) then - ! ---- Test 6: repeat neighbor exchange (topology reuse) ---- - do i = nrow+1, ncol - result_neighbor(i) = dzero - end do - call v_neighbor%set_vect(result_neighbor) + ! --- Absolute Correctness Checks against Expected --- + if (run_baseline) & + call check_result("baseline absolute correctness", result_baseline, expected, ncol, tol) + + if (run_neighbor) & + call check_result("neighbor absolute correctness", result_neighbor, expected, ncol, tol) + + if (run_persistent) & + call check_result("pers-neigh absolute correctness", result_persistent, expected, ncol, tol) - call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) - call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (run_rma_get) & + call check_result("rma_get absolute correctness", result_rma_get, expected, ncol, tol) - result_neighbor = v_neighbor%v%v - n_total = n_total + 1 - err = huge_d - if (ncol > 0) then - err = maxval(abs(result_neighbor(1:ncol) - expected(1:ncol))) - else - err = 0.0_psb_dpk_ - end if - call psb_amx(ctxt, err) - if (my_rank == 0) then - if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then - write(psb_out_unit,'(" [PASS] neighbor topology reuse : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] neighbor topology reuse : err = ",es12.5)') err - end if - end if - end if - - if (run_persistent) then - ! ---- Test 7: repeat persistent-neighbor exchange (buffer reuse) ---- - do i = nrow+1, ncol - result_persistent(i) = dzero - end do - call v_neighbor_persistent%set_vect(result_persistent) - - call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) - - result_persistent = v_neighbor_persistent%v%v - n_total = n_total + 1 - err = huge_d - if (ncol > 0) then - err = maxval(abs(result_persistent(1:ncol) - expected(1:ncol))) - else - err = 0.0_psb_dpk_ - end if - call psb_amx(ctxt, err) - if (my_rank == 0) then - if ((err >= 0.0_psb_dpk_) .and. (err < tol)) then - write(psb_out_unit,'(" [PASS] pers-neigh buffer reuse : err = ",es12.5)') err - n_pass = n_pass + 1 - else - write(psb_out_unit,'(" [FAIL] pers-neigh buffer reuse : err = ",es12.5)') err - end if - end if - end if + if (run_rma_put) & + call check_result("rma_put absolute correctness", result_rma_put, expected, ncol, tol) ! ================================================================== ! 9. Summary @@ -640,4 +701,36 @@ program psb_comm_test call psb_cdfree(desc_a, info) call psb_exit(ctxt) + +contains + + ! Helper routine to compare two arrays, reduce the error across MPI ranks, and print the result + subroutine check_result(test_name, arr1, arr2, n, tolerance) + character(len=*), intent(in) :: test_name + real(psb_dpk_), intent(in) :: arr1(:), arr2(:) + integer(psb_ipk_), intent(in):: n + real(psb_dpk_), intent(in) :: tolerance + real(psb_dpk_) :: err_val + + n_total = n_total + 1 + + if (n > 0) then + err_val = maxval(abs(arr1(1:n) - arr2(1:n))) + else + err_val = 0.0_psb_dpk_ + end if + + ! Get max error across all processes + call psb_amx(ctxt, err_val) + + if (my_rank == 0) then + if ((err_val >= 0.0_psb_dpk_) .and. (err_val < tolerance)) then + write(psb_out_unit,'(" [PASS] ", a, t45, ": err = ",es12.5)') test_name, err_val + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] ", a, t45, ": err = ",es12.5)') test_name, err_val + end if + end if + end subroutine check_result + end program psb_comm_test \ No newline at end of file From 586cafae49d76e61a2219a29d0a5e561cb45ac9d Mon Sep 17 00:00:00 2001 From: sfilippone Date: Mon, 27 Apr 2026 13:06:27 +0200 Subject: [PATCH 165/175] New PrintSolverOptions in CBIND --- cbind/linsolve/psb_base_linsolve_cbind_mod.f90 | 16 +++++++++++++++- cbind/linsolve/psb_linsolve_cbind.h | 3 ++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/cbind/linsolve/psb_base_linsolve_cbind_mod.f90 b/cbind/linsolve/psb_base_linsolve_cbind_mod.f90 index a00a68bf0..db9f9d358 100644 --- a/cbind/linsolve/psb_base_linsolve_cbind_mod.f90 +++ b/cbind/linsolve/psb_base_linsolve_cbind_mod.f90 @@ -15,7 +15,6 @@ contains implicit none type(solveroptions) :: options integer(psb_c_ipk_) :: res - options%itmax = 1000 options%itrace = 0 options%istop = 2 @@ -24,6 +23,21 @@ contains res = 0 end function psb_c_DefaultSolverOptions + + function psb_c_PrintSolverOptions(options)& + & bind(c,name='psb_c_PrintSolverOptions') result(res) + implicit none + type(solveroptions) :: options + integer(psb_c_ipk_) :: res + + write(*,*) 'PSBLAS C Interface Solver Options ' + write(*,*) ' Maximum number of iterations :', options%itmax + write(*,*) ' Tracing :', options%itrace + write(*,*) ' Stopping Criterion :', options%istop + write(*,*) ' Restart :', options%irst + write(*,*) ' EPS (tolerance) :', options%eps + res = 0 + end function psb_c_PrintSolverOptions end module psb_base_linsolve_cbind_mod diff --git a/cbind/linsolve/psb_linsolve_cbind.h b/cbind/linsolve/psb_linsolve_cbind.h index 6dd7aa3c8..d1ed4a92b 100644 --- a/cbind/linsolve/psb_linsolve_cbind.h +++ b/cbind/linsolve/psb_linsolve_cbind.h @@ -25,7 +25,8 @@ typedef struct psb_c_solveroptions { } psb_c_SolverOptions; int psb_c_DefaultSolverOptions(psb_c_SolverOptions *opt); - +int psb_c_PrintSolverOptions(psb_c_SolverOptions *opt); + int psb_c_skrylov(const char *method, psb_c_sspmat *ah, psb_c_sprec *ph, psb_c_svector *bh, psb_c_svector *xh, psb_c_descriptor *cdh, psb_c_SolverOptions *opt); From 1cb7634d1fb1d069b786b24559f0d3b570be2a50 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 29 Apr 2026 14:06:23 +0200 Subject: [PATCH 166/175] Fix GEMIN --- base/psblas/psb_damax.f90 | 4 ++-- base/psblas/psb_samax.f90 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/base/psblas/psb_damax.f90 b/base/psblas/psb_damax.f90 index fef149ee5..db45d5687 100644 --- a/base/psblas/psb_damax.f90 +++ b/base/psblas/psb_damax.f90 @@ -689,11 +689,11 @@ function psb_dmin_vect(x, desc_a, info,global) result(res) goto 9999 end if - ! compute local max + ! compute local min if ((desc_a%get_local_rows() > 0).and.(m /= 0)) then res = x%minreal(desc_a%get_local_rows()) else - res = dzero + res = HUGE(done) end if ! compute global min diff --git a/base/psblas/psb_samax.f90 b/base/psblas/psb_samax.f90 index 056b201c3..ca923b94b 100644 --- a/base/psblas/psb_samax.f90 +++ b/base/psblas/psb_samax.f90 @@ -689,11 +689,11 @@ function psb_smin_vect(x, desc_a, info,global) result(res) goto 9999 end if - ! compute local max + ! compute local min if ((desc_a%get_local_rows() > 0).and.(m /= 0)) then res = x%minreal(desc_a%get_local_rows()) else - res = szero + res = HUGE(sone) end if ! compute global min From 19ce4a0942ca44682396af79790e0591768c8255 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Wed, 29 Apr 2026 14:06:35 +0200 Subject: [PATCH 167/175] Fix multivect assembly and comments in base_vect --- base/modules/serial/psb_c_base_vect_mod.F90 | 21 +++++++++------- base/modules/serial/psb_c_vect_mod.F90 | 8 ++++--- base/modules/serial/psb_d_base_vect_mod.F90 | 25 +++++++++++++------- base/modules/serial/psb_d_vect_mod.F90 | 8 ++++--- base/modules/serial/psb_i2_base_vect_mod.F90 | 21 +++++++++------- base/modules/serial/psb_i2_vect_mod.F90 | 8 ++++--- base/modules/serial/psb_i_base_vect_mod.F90 | 21 +++++++++------- base/modules/serial/psb_i_vect_mod.F90 | 8 ++++--- base/modules/serial/psb_l_base_vect_mod.F90 | 21 +++++++++------- base/modules/serial/psb_l_vect_mod.F90 | 8 ++++--- base/modules/serial/psb_s_base_vect_mod.F90 | 25 +++++++++++++------- base/modules/serial/psb_s_vect_mod.F90 | 8 ++++--- base/modules/serial/psb_z_base_vect_mod.F90 | 21 +++++++++------- base/modules/serial/psb_z_vect_mod.F90 | 8 ++++--- base/tools/psb_casb.f90 | 2 +- base/tools/psb_dasb.f90 | 2 +- base/tools/psb_iasb.f90 | 2 +- base/tools/psb_lasb.f90 | 2 +- base/tools/psb_sasb.f90 | 2 +- base/tools/psb_zasb.f90 | 2 +- 20 files changed, 140 insertions(+), 83 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index b27ed1604..cd9701624 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -2677,7 +2677,7 @@ contains logical, intent(in), optional :: scratch call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info,scratch) + call x%asb(m,n,info,scratch=scratch) end subroutine c_base_mlv_bld_n @@ -2958,23 +2958,26 @@ contains case(psb_dupl_err_) do i=1,ncfs if (any(vv(x%iv(i),:).ne.czero)) then - call psb_errpush(psb_err_duplicate_coo,'vect-asb') + info = psb_err_duplicate_coo + call psb_errpush(info,'mvect-asb') return else vv(x%iv(i),:) = x%v(i,:) end if end do case default - write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + write(psb_err_unit,*) 'Error in mvect_asb: unsafe dupl',x%get_dupl() info =-7 end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) else if (x%is_upd().or.x%is_asb().or.scratch_) then - if (x%get_nrows() < m) & + if ((x%get_nrows() < m).or.(x%get_ncols() Date: Tue, 5 May 2026 15:49:13 +0200 Subject: [PATCH 168/175] various changes, including test matrix generators --- base/modules/serial/psb_c_base_vect_mod.F90 | 23 ++++++++++- base/modules/serial/psb_c_vect_mod.F90 | 13 +++++- base/modules/serial/psb_d_base_vect_mod.F90 | 25 ++++++++++-- base/modules/serial/psb_d_vect_mod.F90 | 15 +++++-- base/modules/serial/psb_s_base_vect_mod.F90 | 25 ++++++++++-- base/modules/serial/psb_s_vect_mod.F90 | 15 +++++-- base/modules/serial/psb_z_base_vect_mod.F90 | 23 ++++++++++- base/modules/serial/psb_z_vect_mod.F90 | 13 +++++- cbind/base/psb_base_cbind_mod.f90 | 4 ++ cbind/base/psb_c_cbase.h | 6 ++- cbind/base/psb_c_dbase.h | 6 ++- cbind/base/psb_c_psblas_cbind_mod.f90 | 3 +- cbind/base/psb_c_sbase.h | 7 +++- cbind/base/psb_c_serial_cbind_mod.F90 | 45 +++++++++++++++++++++ cbind/base/psb_c_tools_cbind_mod.F90 | 16 +++++--- cbind/base/psb_c_zbase.h | 6 ++- cbind/base/psb_d_psblas_cbind_mod.f90 | 3 +- cbind/base/psb_d_serial_cbind_mod.F90 | 45 +++++++++++++++++++++ cbind/base/psb_d_tools_cbind_mod.F90 | 16 +++++--- cbind/base/psb_s_psblas_cbind_mod.f90 | 3 +- cbind/base/psb_s_serial_cbind_mod.F90 | 45 +++++++++++++++++++++ cbind/base/psb_s_tools_cbind_mod.F90 | 16 +++++--- cbind/base/psb_z_psblas_cbind_mod.f90 | 3 +- cbind/base/psb_z_serial_cbind_mod.F90 | 45 +++++++++++++++++++++ cbind/base/psb_z_tools_cbind_mod.F90 | 16 +++++--- test/pdegen/psb_d_pde2d.F90 | 6 +-- test/pdegen/psb_d_pde3d.F90 | 8 ++-- test/pdegen/psb_s_pde2d.F90 | 6 +-- test/pdegen/psb_s_pde3d.F90 | 8 ++-- 29 files changed, 395 insertions(+), 70 deletions(-) diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index cd9701624..e1058c1f7 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -157,6 +157,7 @@ module psb_c_base_vect_mod procedure, pass(x) :: set_vect => c_base_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: get_entry=> c_base_get_entry + procedure, pass(x) :: set_entry=> c_base_set_entry ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -1275,15 +1276,33 @@ contains ! function c_base_get_entry(x, index) result(res) implicit none - class(psb_c_base_vect_type), intent(in) :: x + class(psb_c_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index complex(psb_spk_) :: res res = 0 - if (allocated(x%v)) res = x%v(index) + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + res = x%v(index) + end if end function c_base_get_entry + subroutine c_base_set_entry(x, index, val) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + complex(psb_spk_) :: val + + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(index) =val + call x%set_host() + end if + + end subroutine c_base_set_entry + ! ! Overwrite with absolute value ! diff --git a/base/modules/serial/psb_c_vect_mod.F90 b/base/modules/serial/psb_c_vect_mod.F90 index b418a30e2..5e628ff97 100644 --- a/base/modules/serial/psb_c_vect_mod.F90 +++ b/base/modules/serial/psb_c_vect_mod.F90 @@ -108,6 +108,7 @@ module psb_c_vect_mod procedure, pass(x) :: check_addr => c_vect_check_addr procedure, pass(x) :: get_entry => c_vect_get_entry + procedure, pass(x) :: set_entry => c_vect_set_entry procedure, pass(x) :: dot_v => c_vect_dot_v procedure, pass(x) :: dot_a => c_vect_dot_a @@ -855,13 +856,21 @@ contains function c_vect_get_entry(x,index) result(res) implicit none - class(psb_c_vect_type), intent(in) :: x + class(psb_c_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index complex(psb_spk_) :: res - res = 0 + res = czero if (allocated(x%v)) res = x%v%get_entry(index) end function c_vect_get_entry + subroutine c_vect_set_entry(x,index,val) + implicit none + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + complex(psb_spk_) :: val + if (allocated(x%v)) call x%v%set_entry(index,val) + end subroutine c_vect_set_entry + function c_vect_dot_v(n,x,y) result(res) implicit none class(psb_c_vect_type), intent(inout) :: x, y diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index fa2c48662..cfdbcee54 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -157,6 +157,7 @@ module psb_d_base_vect_mod procedure, pass(x) :: set_vect => d_base_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: get_entry=> d_base_get_entry + procedure, pass(x) :: set_entry=> d_base_set_entry ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -1282,15 +1283,33 @@ contains ! function d_base_get_entry(x, index) result(res) implicit none - class(psb_d_base_vect_type), intent(in) :: x + class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index real(psb_dpk_) :: res res = 0 - if (allocated(x%v)) res = x%v(index) + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + res = x%v(index) + end if end function d_base_get_entry + subroutine d_base_set_entry(x, index, val) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + real(psb_dpk_) :: val + + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(index) =val + call x%set_host() + end if + + end subroutine d_base_set_entry + ! ! Overwrite with absolute value ! @@ -2190,7 +2209,7 @@ contains end do #else ! - ! From M&R: if the array is of size zero, MINVAL + ! From M&R&C: if the array is of size zero, MINVAL ! returns the largest positive value ! res = minval(x%v(1:n)) diff --git a/base/modules/serial/psb_d_vect_mod.F90 b/base/modules/serial/psb_d_vect_mod.F90 index 57d66d5b3..cfa3fe6fb 100644 --- a/base/modules/serial/psb_d_vect_mod.F90 +++ b/base/modules/serial/psb_d_vect_mod.F90 @@ -108,6 +108,7 @@ module psb_d_vect_mod procedure, pass(x) :: check_addr => d_vect_check_addr procedure, pass(x) :: get_entry => d_vect_get_entry + procedure, pass(x) :: set_entry => d_vect_set_entry procedure, pass(x) :: dot_v => d_vect_dot_v procedure, pass(x) :: dot_a => d_vect_dot_a @@ -862,13 +863,21 @@ contains function d_vect_get_entry(x,index) result(res) implicit none - class(psb_d_vect_type), intent(in) :: x + class(psb_d_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index real(psb_dpk_) :: res - res = 0 + res = dzero if (allocated(x%v)) res = x%v%get_entry(index) end function d_vect_get_entry + subroutine d_vect_set_entry(x,index,val) + implicit none + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + real(psb_dpk_) :: val + if (allocated(x%v)) call x%v%set_entry(index,val) + end subroutine d_vect_set_entry + function d_vect_dot_v(n,x,y) result(res) implicit none class(psb_d_vect_type), intent(inout) :: x, y @@ -1430,7 +1439,7 @@ contains if (allocated(x%v)) then res = x%v%minreal(n) else - res = dzero + res = HUGE(done) end if end function d_vect_min diff --git a/base/modules/serial/psb_s_base_vect_mod.F90 b/base/modules/serial/psb_s_base_vect_mod.F90 index e6248aaeb..814b11a57 100644 --- a/base/modules/serial/psb_s_base_vect_mod.F90 +++ b/base/modules/serial/psb_s_base_vect_mod.F90 @@ -157,6 +157,7 @@ module psb_s_base_vect_mod procedure, pass(x) :: set_vect => s_base_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: get_entry=> s_base_get_entry + procedure, pass(x) :: set_entry=> s_base_set_entry ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -1282,15 +1283,33 @@ contains ! function s_base_get_entry(x, index) result(res) implicit none - class(psb_s_base_vect_type), intent(in) :: x + class(psb_s_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index real(psb_spk_) :: res res = 0 - if (allocated(x%v)) res = x%v(index) + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + res = x%v(index) + end if end function s_base_get_entry + subroutine s_base_set_entry(x, index, val) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + real(psb_spk_) :: val + + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(index) =val + call x%set_host() + end if + + end subroutine s_base_set_entry + ! ! Overwrite with absolute value ! @@ -2190,7 +2209,7 @@ contains end do #else ! - ! From M&R: if the array is of size zero, MINVAL + ! From M&R&C: if the array is of size zero, MINVAL ! returns the largest positive value ! res = minval(x%v(1:n)) diff --git a/base/modules/serial/psb_s_vect_mod.F90 b/base/modules/serial/psb_s_vect_mod.F90 index 8c5841a78..3128866a5 100644 --- a/base/modules/serial/psb_s_vect_mod.F90 +++ b/base/modules/serial/psb_s_vect_mod.F90 @@ -108,6 +108,7 @@ module psb_s_vect_mod procedure, pass(x) :: check_addr => s_vect_check_addr procedure, pass(x) :: get_entry => s_vect_get_entry + procedure, pass(x) :: set_entry => s_vect_set_entry procedure, pass(x) :: dot_v => s_vect_dot_v procedure, pass(x) :: dot_a => s_vect_dot_a @@ -862,13 +863,21 @@ contains function s_vect_get_entry(x,index) result(res) implicit none - class(psb_s_vect_type), intent(in) :: x + class(psb_s_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index real(psb_spk_) :: res - res = 0 + res = szero if (allocated(x%v)) res = x%v%get_entry(index) end function s_vect_get_entry + subroutine s_vect_set_entry(x,index,val) + implicit none + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + real(psb_spk_) :: val + if (allocated(x%v)) call x%v%set_entry(index,val) + end subroutine s_vect_set_entry + function s_vect_dot_v(n,x,y) result(res) implicit none class(psb_s_vect_type), intent(inout) :: x, y @@ -1430,7 +1439,7 @@ contains if (allocated(x%v)) then res = x%v%minreal(n) else - res = szero + res = HUGE(sone) end if end function s_vect_min diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 87d911e7e..b236beb7d 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -157,6 +157,7 @@ module psb_z_base_vect_mod procedure, pass(x) :: set_vect => z_base_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: get_entry=> z_base_get_entry + procedure, pass(x) :: set_entry=> z_base_set_entry ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -1275,15 +1276,33 @@ contains ! function z_base_get_entry(x, index) result(res) implicit none - class(psb_z_base_vect_type), intent(in) :: x + class(psb_z_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index complex(psb_dpk_) :: res res = 0 - if (allocated(x%v)) res = x%v(index) + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + res = x%v(index) + end if end function z_base_get_entry + subroutine z_base_set_entry(x, index, val) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + complex(psb_dpk_) :: val + + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(index) =val + call x%set_host() + end if + + end subroutine z_base_set_entry + ! ! Overwrite with absolute value ! diff --git a/base/modules/serial/psb_z_vect_mod.F90 b/base/modules/serial/psb_z_vect_mod.F90 index 082b62ea8..f7cf3584a 100644 --- a/base/modules/serial/psb_z_vect_mod.F90 +++ b/base/modules/serial/psb_z_vect_mod.F90 @@ -108,6 +108,7 @@ module psb_z_vect_mod procedure, pass(x) :: check_addr => z_vect_check_addr procedure, pass(x) :: get_entry => z_vect_get_entry + procedure, pass(x) :: set_entry => z_vect_set_entry procedure, pass(x) :: dot_v => z_vect_dot_v procedure, pass(x) :: dot_a => z_vect_dot_a @@ -855,13 +856,21 @@ contains function z_vect_get_entry(x,index) result(res) implicit none - class(psb_z_vect_type), intent(in) :: x + class(psb_z_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index complex(psb_dpk_) :: res - res = 0 + res = zzero if (allocated(x%v)) res = x%v%get_entry(index) end function z_vect_get_entry + subroutine z_vect_set_entry(x,index,val) + implicit none + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + complex(psb_dpk_) :: val + if (allocated(x%v)) call x%v%set_entry(index,val) + end subroutine z_vect_set_entry + function z_vect_dot_v(n,x,y) result(res) implicit none class(psb_z_vect_type), intent(inout) :: x, y diff --git a/cbind/base/psb_base_cbind_mod.f90 b/cbind/base/psb_base_cbind_mod.f90 index 036e662ab..67d97aad9 100644 --- a/cbind/base/psb_base_cbind_mod.f90 +++ b/cbind/base/psb_base_cbind_mod.f90 @@ -1,6 +1,10 @@ module psb_base_cbind_mod use psb_objhandle_mod use psb_cpenv_mod + use psb_s_serial_cbind_mod + use psb_d_serial_cbind_mod + use psb_c_serial_cbind_mod + use psb_z_serial_cbind_mod use psb_base_tools_cbind_mod use psb_s_tools_cbind_mod use psb_d_tools_cbind_mod diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index 45b6c8251..67651f572 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -64,8 +64,10 @@ psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_csprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_cmat_name_print(psb_c_cspmat *mh, char *name); -psb_i_t psb_c_cvect_set_scal(psb_c_cvector *xh, psb_c_t val); -psb_i_t psb_c_cvect_set_vect(psb_c_cvector *xh, psb_c_t *val, psb_i_t n); +psb_i_t psb_c_cvect_set_scal(psb_c_cvector *xh, psb_c_t val); +psb_i_t psb_c_cvect_set_vect(psb_c_cvector *xh, psb_c_t *val, psb_i_t n); +psb_c_t psb_c_cvect_get_entry(psb_c_cvector *xh, psb_i_t index); +psb_i_t psb_c_cvect_set_entry(psb_c_cvector *xh, psb_i_t index, psb_c_t val); /* psblas computational routines */ psb_c_t psb_c_cgedot(psb_c_cvector *xh, psb_c_cvector *yh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index bf0be8bac..6a6de8be7 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -65,8 +65,10 @@ psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_dmat_name_print(psb_c_dspmat *mh, char *name); -psb_i_t psb_c_dvect_set_scal(psb_c_dvector *xh, psb_d_t val); -psb_i_t psb_c_dvect_set_vect(psb_c_dvector *xh, psb_d_t *val, psb_i_t n); +psb_i_t psb_c_dvect_set_scal(psb_c_dvector *xh, psb_d_t val); +psb_i_t psb_c_dvect_set_vect(psb_c_dvector *xh, psb_d_t *val, psb_i_t n); +psb_d_t psb_c_dvect_get_entry(psb_c_dvector *xh, psb_i_t index); +psb_i_t psb_c_dvect_set_entry(psb_c_dvector *xh, psb_i_t index, psb_d_t val); /* psblas computational routines */ psb_d_t psb_c_dgedot(psb_c_dvector *xh, psb_c_dvector *yh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_psblas_cbind_mod.f90 b/cbind/base/psb_c_psblas_cbind_mod.f90 index cad716578..ad3aee04c 100644 --- a/cbind/base/psb_c_psblas_cbind_mod.f90 +++ b/cbind/base/psb_c_psblas_cbind_mod.f90 @@ -429,14 +429,13 @@ contains function psb_c_cgecmp(xh,ch,zh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res - + real(c_float_complex), value :: ch type(psb_c_cvector) :: xh,zh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_c_vect_type), pointer :: xp,zp integer(psb_c_ipk_) :: info - real(c_float_complex), value :: ch res = -1 diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index fa501a50c..ae1ff71e2 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -65,8 +65,11 @@ psb_i_t psb_c_scopy_mat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_c_descriptor *cd const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_ssprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_smat_name_print(psb_c_sspmat *mh, char *name); -psb_i_t psb_c_svect_set_scal(psb_c_svector *xh, psb_s_t val); -psb_i_t psb_c_svect_set_vect(psb_c_svector *xh, psb_s_t *val, psb_i_t n); +psb_i_t psb_c_svect_set_scal(psb_c_svector *xh, psb_s_t val); +psb_i_t psb_c_svect_set_vect(psb_c_svector *xh, psb_s_t *val, psb_i_t n); +psb_s_t psb_c_svect_get_entry(psb_c_svector *xh, psb_i_t index); +psb_i_t psb_c_svect_set_entry(psb_c_svector *xh, psb_i_t index, psb_s_t val); + /* psblas computational routines */ psb_s_t psb_c_sgedot(psb_c_svector *xh, psb_c_svector *yh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_serial_cbind_mod.F90 b/cbind/base/psb_c_serial_cbind_mod.F90 index 805f4965a..7de87ccce 100644 --- a/cbind/base/psb_c_serial_cbind_mod.F90 +++ b/cbind/base/psb_c_serial_cbind_mod.F90 @@ -200,6 +200,51 @@ contains end function psb_c_cvect_set_vect + function psb_c_cvect_set_entry(x,index,val) bind(c) result(info) + use psb_base_mod + implicit none + + type(psb_c_cvector) :: x + type(psb_c_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + integer(psb_c_ipk_), value :: index + complex(c_float_complex), value :: val + integer(psb_c_ipk_) :: ixb + + info = -1; + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + call xp%set_entry((index+(1-ixb)),val) + info = 0 + + end function psb_c_cvect_set_entry + + + function psb_c_cvect_get_entry(x,index) bind(c) result(res) + use psb_base_mod + implicit none + + type(psb_c_cvector) :: x + type(psb_c_vect_type), pointer :: xp + integer(psb_c_ipk_), value :: index + complex(c_float_complex) :: res + integer(psb_c_ipk_) :: ixb + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + res = xp%get_entry((index+(1-ixb))) + end function psb_c_cvect_get_entry function psb_c_cvect_clone(xh,yh) bind(c) result(info) implicit none diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index 768492836..05267b7a8 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -281,13 +281,19 @@ contains end if ixb = psb_c_get_index_base() - if (ixb == 1) then - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info) - else + select case(ixb) + case (0) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz) call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info) - end if + case(1) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz) + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info) + case default + write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb + info =-2 + end select res = min(0,info) diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index fed51efb8..ac7d2b6c4 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -66,8 +66,10 @@ psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, const char *afmt, psb_i_t upd, psb_i_t dupl); psb_i_t psb_c_zsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); psb_i_t psb_c_zmat_name_print(psb_c_zspmat *mh, char *name); -psb_i_t psb_c_zvect_set_scal(psb_c_zvector *xh, psb_z_t val); -psb_i_t psb_c_zvect_set_vect(psb_c_zvector *xh, psb_z_t *val, psb_i_t n); +psb_i_t psb_c_zvect_set_scal(psb_c_zvector *xh, psb_z_t val); +psb_i_t psb_c_zvect_set_vect(psb_c_zvector *xh, psb_z_t *val, psb_i_t n); +psb_z_t psb_c_zvect_get_entry(psb_c_zvector *xh, psb_i_t index); +psb_i_t psb_c_zvect_set_entry(psb_c_zvector *xh, psb_i_t index, psb_z_t val); /* psblas computational routines */ psb_z_t psb_c_zgedot(psb_c_zvector *xh, psb_c_zvector *yh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_d_psblas_cbind_mod.f90 b/cbind/base/psb_d_psblas_cbind_mod.f90 index 1a8874c53..bb77272e0 100644 --- a/cbind/base/psb_d_psblas_cbind_mod.f90 +++ b/cbind/base/psb_d_psblas_cbind_mod.f90 @@ -429,14 +429,13 @@ contains function psb_c_dgecmp(xh,ch,zh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res - + real(c_double), value :: ch type(psb_c_dvector) :: xh,zh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp,zp integer(psb_c_ipk_) :: info - real(c_double), value :: ch res = -1 diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index 04d840bd7..c365eb55b 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -200,6 +200,51 @@ contains end function psb_c_dvect_set_vect + function psb_c_dvect_set_entry(x,index,val) bind(c) result(info) + use psb_base_mod + implicit none + + type(psb_c_dvector) :: x + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + integer(psb_c_ipk_), value :: index + real(c_double), value :: val + integer(psb_c_ipk_) :: ixb + + info = -1; + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + call xp%set_entry((index+(1-ixb)),val) + info = 0 + + end function psb_c_dvect_set_entry + + + function psb_c_dvect_get_entry(x,index) bind(c) result(res) + use psb_base_mod + implicit none + + type(psb_c_dvector) :: x + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_), value :: index + real(c_double) :: res + integer(psb_c_ipk_) :: ixb + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + res = xp%get_entry((index+(1-ixb))) + end function psb_c_dvect_get_entry function psb_c_dvect_clone(xh,yh) bind(c) result(info) implicit none diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index daa280262..11d56d2b9 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -281,13 +281,19 @@ contains end if ixb = psb_c_get_index_base() - if (ixb == 1) then - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info) - else + select case(ixb) + case (0) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz) call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info) - end if + case(1) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz) + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info) + case default + write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb + info =-2 + end select res = min(0,info) diff --git a/cbind/base/psb_s_psblas_cbind_mod.f90 b/cbind/base/psb_s_psblas_cbind_mod.f90 index eeabfdbcf..382cabd00 100644 --- a/cbind/base/psb_s_psblas_cbind_mod.f90 +++ b/cbind/base/psb_s_psblas_cbind_mod.f90 @@ -429,14 +429,13 @@ contains function psb_c_sgecmp(xh,ch,zh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res - + real(c_float), value :: ch type(psb_c_svector) :: xh,zh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_s_vect_type), pointer :: xp,zp integer(psb_c_ipk_) :: info - real(c_float), value :: ch res = -1 diff --git a/cbind/base/psb_s_serial_cbind_mod.F90 b/cbind/base/psb_s_serial_cbind_mod.F90 index e9f65bab7..d78cc5495 100644 --- a/cbind/base/psb_s_serial_cbind_mod.F90 +++ b/cbind/base/psb_s_serial_cbind_mod.F90 @@ -200,6 +200,51 @@ contains end function psb_c_svect_set_vect + function psb_c_svect_set_entry(x,index,val) bind(c) result(info) + use psb_base_mod + implicit none + + type(psb_c_svector) :: x + type(psb_s_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + integer(psb_c_ipk_), value :: index + real(c_float), value :: val + integer(psb_c_ipk_) :: ixb + + info = -1; + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + call xp%set_entry((index+(1-ixb)),val) + info = 0 + + end function psb_c_svect_set_entry + + + function psb_c_svect_get_entry(x,index) bind(c) result(res) + use psb_base_mod + implicit none + + type(psb_c_svector) :: x + type(psb_s_vect_type), pointer :: xp + integer(psb_c_ipk_), value :: index + real(c_float) :: res + integer(psb_c_ipk_) :: ixb + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + res = xp%get_entry((index+(1-ixb))) + end function psb_c_svect_get_entry function psb_c_svect_clone(xh,yh) bind(c) result(info) implicit none diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 2bc6b2d66..fe6b0aae7 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -281,13 +281,19 @@ contains end if ixb = psb_c_get_index_base() - if (ixb == 1) then - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info) - else + select case(ixb) + case (0) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz) call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info) - end if + case(1) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz) + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info) + case default + write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb + info =-2 + end select res = min(0,info) diff --git a/cbind/base/psb_z_psblas_cbind_mod.f90 b/cbind/base/psb_z_psblas_cbind_mod.f90 index 511b390f1..5255485f2 100644 --- a/cbind/base/psb_z_psblas_cbind_mod.f90 +++ b/cbind/base/psb_z_psblas_cbind_mod.f90 @@ -429,14 +429,13 @@ contains function psb_c_zgecmp(xh,ch,zh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res - + real(c_double_complex), value :: ch type(psb_c_zvector) :: xh,zh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_z_vect_type), pointer :: xp,zp integer(psb_c_ipk_) :: info - real(c_double_complex), value :: ch res = -1 diff --git a/cbind/base/psb_z_serial_cbind_mod.F90 b/cbind/base/psb_z_serial_cbind_mod.F90 index fa3d7e12c..8c6154af9 100644 --- a/cbind/base/psb_z_serial_cbind_mod.F90 +++ b/cbind/base/psb_z_serial_cbind_mod.F90 @@ -200,6 +200,51 @@ contains end function psb_c_zvect_set_vect + function psb_c_zvect_set_entry(x,index,val) bind(c) result(info) + use psb_base_mod + implicit none + + type(psb_c_zvector) :: x + type(psb_z_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + integer(psb_c_ipk_), value :: index + complex(c_double_complex), value :: val + integer(psb_c_ipk_) :: ixb + + info = -1; + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + call xp%set_entry((index+(1-ixb)),val) + info = 0 + + end function psb_c_zvect_set_entry + + + function psb_c_zvect_get_entry(x,index) bind(c) result(res) + use psb_base_mod + implicit none + + type(psb_c_zvector) :: x + type(psb_z_vect_type), pointer :: xp + integer(psb_c_ipk_), value :: index + complex(c_double_complex) :: res + integer(psb_c_ipk_) :: ixb + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + res = xp%get_entry((index+(1-ixb))) + end function psb_c_zvect_get_entry function psb_c_zvect_clone(xh,yh) bind(c) result(info) implicit none diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index fe6c69b67..2721924cd 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -281,13 +281,19 @@ contains end if ixb = psb_c_get_index_base() - if (ixb == 1) then - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info) - else + select case(ixb) + case (0) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz) call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info) - end if + case(1) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz) + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info) + case default + write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb + info =-2 + end select res = min(0,info) diff --git a/test/pdegen/psb_d_pde2d.F90 b/test/pdegen/psb_d_pde2d.F90 index 7da7439b2..075320980 100644 --- a/test/pdegen/psb_d_pde2d.F90 +++ b/test/pdegen/psb_d_pde2d.F90 @@ -230,7 +230,7 @@ contains f_ => d_null_func_2d end if - deltah = done/(idim+1) + deltah = done/(idim+2) sqdeltah = deltah*deltah deltah2 = (2*done)* deltah @@ -467,8 +467,8 @@ contains ! compute gridpoint coordinates call idx2ijk(ix,iy,glob_row,idim,idim) ! x, y coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah + x = (ix)*deltah + y = (iy)*deltah zt(k) = f_(x,y) ! internal point: build discretization diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index 982e582cf..57c5905d8 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -246,7 +246,7 @@ contains f_ => d_null_func_3d end if - deltah = done/(idim+1) + deltah = done/(idim+2) sqdeltah = deltah*deltah deltah2 = (2*done)* deltah @@ -496,9 +496,9 @@ contains ! compute gridpoint coordinates call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) ! x, y, z coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah - z = (iz-1)*deltah + x = (ix)*deltah + y = (iy)*deltah + z = (iz)*deltah zt(k) = f_(x,y,z) ! internal point: build discretization ! diff --git a/test/pdegen/psb_s_pde2d.F90 b/test/pdegen/psb_s_pde2d.F90 index 1df7b138a..43ad13a57 100644 --- a/test/pdegen/psb_s_pde2d.F90 +++ b/test/pdegen/psb_s_pde2d.F90 @@ -230,7 +230,7 @@ contains f_ => s_null_func_2d end if - deltah = sone/(idim+1) + deltah = sone/(idim+2) sqdeltah = deltah*deltah deltah2 = (2*sone)* deltah @@ -467,8 +467,8 @@ contains ! compute gridpoint coordinates call idx2ijk(ix,iy,glob_row,idim,idim) ! x, y coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah + x = (ix)*deltah + y = (iy)*deltah zt(k) = f_(x,y) ! internal point: build discretization diff --git a/test/pdegen/psb_s_pde3d.F90 b/test/pdegen/psb_s_pde3d.F90 index ac4dfbdfc..866831965 100644 --- a/test/pdegen/psb_s_pde3d.F90 +++ b/test/pdegen/psb_s_pde3d.F90 @@ -246,7 +246,7 @@ contains f_ => s_null_func_3d end if - deltah = sone/(idim+1) + deltah = sone/(idim+2) sqdeltah = deltah*deltah deltah2 = (2*sone)* deltah @@ -496,9 +496,9 @@ contains ! compute gridpoint coordinates call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) ! x, y, z coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah - z = (iz-1)*deltah + x = (ix)*deltah + y = (iy)*deltah + z = (iz)*deltah zt(k) = f_(x,y,z) ! internal point: build discretization ! From 014abc941caab6c2556613a843f9b5dbef2687b1 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 5 May 2026 16:43:40 +0200 Subject: [PATCH 169/175] Fix matrix generation --- test/pdegen/psb_d_pde2d.F90 | 2 +- test/pdegen/psb_d_pde3d.F90 | 2 +- test/pdegen/psb_s_pde2d.F90 | 2 +- test/pdegen/psb_s_pde3d.F90 | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/pdegen/psb_d_pde2d.F90 b/test/pdegen/psb_d_pde2d.F90 index 075320980..183b8d160 100644 --- a/test/pdegen/psb_d_pde2d.F90 +++ b/test/pdegen/psb_d_pde2d.F90 @@ -230,7 +230,7 @@ contains f_ => d_null_func_2d end if - deltah = done/(idim+2) + deltah = done/(idim+1) sqdeltah = deltah*deltah deltah2 = (2*done)* deltah diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index 57c5905d8..b0e692565 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -246,7 +246,7 @@ contains f_ => d_null_func_3d end if - deltah = done/(idim+2) + deltah = done/(idim+1) sqdeltah = deltah*deltah deltah2 = (2*done)* deltah diff --git a/test/pdegen/psb_s_pde2d.F90 b/test/pdegen/psb_s_pde2d.F90 index 43ad13a57..a4d724cab 100644 --- a/test/pdegen/psb_s_pde2d.F90 +++ b/test/pdegen/psb_s_pde2d.F90 @@ -230,7 +230,7 @@ contains f_ => s_null_func_2d end if - deltah = sone/(idim+2) + deltah = sone/(idim+1) sqdeltah = deltah*deltah deltah2 = (2*sone)* deltah diff --git a/test/pdegen/psb_s_pde3d.F90 b/test/pdegen/psb_s_pde3d.F90 index 866831965..87e631c72 100644 --- a/test/pdegen/psb_s_pde3d.F90 +++ b/test/pdegen/psb_s_pde3d.F90 @@ -246,7 +246,7 @@ contains f_ => s_null_func_3d end if - deltah = sone/(idim+2) + deltah = sone/(idim+1) sqdeltah = deltah*deltah deltah2 = (2*sone)* deltah From d231efe35ab4c137e424bbb4a082e7004760b11f Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Tue, 12 May 2026 12:32:03 +0200 Subject: [PATCH 170/175] [FIX] Modified spmv test to check overlap --- base/psblas/psb_dspmm.f90 | 10 ++++---- base/tools/psb_dspasb.f90 | 39 +------------------------------- test/comm/spmv/psb_spmv_test.f90 | 18 +++++++-------- 3 files changed, 16 insertions(+), 51 deletions(-) diff --git a/base/psblas/psb_dspmm.f90 b/base/psblas/psb_dspmm.f90 index 10702422b..4a18227df 100644 --- a/base/psblas/psb_dspmm.f90 +++ b/base/psblas/psb_dspmm.f90 @@ -176,7 +176,11 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(psb_comm_status_start_, dzero, x%v, desc_a, info, data=psb_comm_halo_) + if (doswap_) then + call psi_swapdata(psb_comm_status_start_, dzero, x%v, desc_a, info, data=psb_comm_halo_) + else + call psi_swapdata(psb_comm_status_sync_, dzero, x%v, desc_a, info, data=psb_comm_halo_) + end if if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) @@ -195,9 +199,7 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase11) - if (doswap_) then - call psi_swapdata(psb_comm_status_sync_, dzero, x%v, desc_a, info, data=psb_comm_halo_) - end if + call psi_swapdata(psb_comm_status_sync_, dzero, x%v, desc_a, info, data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) call psb_csmm(alpha,a,x,beta,y,info) diff --git a/base/tools/psb_dspasb.f90 b/base/tools/psb_dspasb.f90 index 61f20a399..7f00d8bc1 100644 --- a/base/tools/psb_dspasb.f90 +++ b/base/tools/psb_dspasb.f90 @@ -184,44 +184,7 @@ subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) end if if (bld_and_) then -!!$ allocate(a%ad,mold=a%a) -!!$ allocate(a%and,mold=a%a)o -!!$ call a%split_nd(n_row,n_col,info) -!!$ block -!!$ character(len=1024) :: fname -!!$ type(psb_d_coo_sparse_mat) :: acoo -!!$ type(psb_d_csr_sparse_mat), allocatable :: aclip -!!$ type(psb_d_ecsr_sparse_mat), allocatable :: andclip -!!$ logical, parameter :: use_ecsr=.true. -!!$ allocate(aclip) -!!$ call a%a%csclip(acoo,info,jmax=n_row,rscale=.false.,cscale=.false.) -!!$ allocate(a%ad,mold=a%a) -!!$ call a%ad%mv_from_coo(acoo,info) -!!$ call a%a%csclip(acoo,info,jmin=n_row+1,jmax=n_col,rscale=.false.,cscale=.false.) -!!$ if (use_ecsr) then -!!$ allocate(andclip) -!!$ call andclip%mv_from_coo(acoo,info) -!!$ call move_alloc(andclip,a%and) -!!$ else -!!$ allocate(a%and,mold=a%a) -!!$ call a%and%mv_from_coo(acoo,info) -!!$ end if -!!$ if (.false.) then -!!$ write(fname,'(a,i2.2,a)') 'adclip_',me,'.mtx' -!!$ open(25,file=fname) -!!$ call a%ad%print(25) -!!$ close(25) -!!$ write(fname,'(a,i2.2,a)') 'andclip_',me,'.mtx' -!!$ open(25,file=fname) -!!$ call a%and%print(25) -!!$ close(25) -!!$ !call andclip%set_cols(n_col) -!!$ write(*,*) me,' ',trim(name),' ad ',& -!!$ &a%ad%get_nrows(),a%ad%get_ncols(),n_row,n_col -!!$ write(*,*) me,' ',trim(name),' and ',& -!!$ &a%and%get_nrows(),a%and%get_ncols(),n_row,n_col -!!$ end if -!!$ end block + call a%split_nd(n_row,n_col,info) else if (allocated(a%ad)) deallocate(a%ad) if (allocated(a%and)) deallocate(a%and) diff --git a/test/comm/spmv/psb_spmv_test.f90 b/test/comm/spmv/psb_spmv_test.f90 index 4e20b0b40..396cde359 100644 --- a/test/comm/spmv/psb_spmv_test.f90 +++ b/test/comm/spmv/psb_spmv_test.f90 @@ -554,7 +554,7 @@ contains character(len=8) :: afmt character(len=64) :: env_buf integer(psb_ipk_) :: my_rank, np, info, err_act - integer(psb_ipk_) :: idim, times, i, n_global + integer(psb_ipk_) :: idim, times, i integer :: env_len, env_status, ios real(psb_dpk_) :: alpha, beta, t0, t1, dt, avg_t logical :: use_external_matrix @@ -629,10 +629,8 @@ contains call psb_barrier(ctxt) if (use_external_matrix) then call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, y, x, desc_a, afmt, info) - n_global = int(a%get_nrows(),kind=psb_ipk_) else call psb_d_gen_pde3d(ctxt,idim,a,y,x,desc_a,afmt,info) - n_global = idim * idim * idim end if if (info /= psb_success_) goto 9999 @@ -693,7 +691,9 @@ contains else write(psb_out_unit,'(" idim : ",i0)') idim end if - write(psb_out_unit,'(" global unknowns : ",i0)') n_global + write(psb_out_unit,'(" global non zeros : ",i0)') a%get_nzeros() + write(psb_out_unit,'(" global rows : ",i0)') a%get_nrows() + write(psb_out_unit,'(" global cols : ",i0)') a%get_ncols() write(psb_out_unit,'(" repetitions : ",i0)') times write(psb_out_unit,'(" comm backend : ",a)') trim(psb_toupper(trim(comm_mode))) write(psb_out_unit,'(" total time [s] : ",es12.5)') dt @@ -790,7 +790,7 @@ program psb_spmv_kernel character(len=8) :: cpu_fmt character(len=8) :: gpu_fmt integer(psb_ipk_) :: idim_arg, times_arg - logical :: do_swap + logical :: do_overlap integer :: kmode integer, parameter :: n_comm_modes = 5 character(len=20), parameter :: comm_modes(n_comm_modes) = [character(len=20) :: & @@ -803,7 +803,7 @@ program psb_spmv_kernel matrix_fmt = 'MM' cpu_fmt = 'CSR' gpu_fmt = 'HLG' - do_swap = .true. + do_overlap = .true. call psb_init(ctxt) call psb_info(ctxt, my_rank, np) @@ -849,9 +849,9 @@ program psb_spmv_kernel else if (index(psb_toupper(trim(arg)), '--GPU_FMT=') == 1) then gpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) else if ((trim(psb_toupper(arg)) == '--NOOVERLAP') .or. (trim(psb_toupper(arg)) == '--NO_OVERLAP')) then - do_swap = .false. + do_overlap = .false. else if ((trim(psb_toupper(arg)) == '--OVERLAP') .or. (trim(psb_toupper(arg)) == '--SWAP')) then - do_swap = .true. + do_overlap = .true. else if (trim(psb_toupper(arg)) == '--MATRIX') then if (k < command_argument_count()) call get_command_argument(k+1,matrix_file) else if (trim(psb_toupper(arg)) == '--FMT') then @@ -911,7 +911,7 @@ program psb_spmv_kernel write(psb_out_unit,'(/,"=== Backend sweep: ",a," ===")') trim(comm_modes(kmode)) end if call run_spmv_kernel(ctxt, use_gpu, matrix_file, matrix_fmt, cpu_fmt, gpu_fmt, & - & idim_arg, times_arg, do_swap, comm_modes(kmode)) + & idim_arg, times_arg, do_overlap, comm_modes(kmode)) end do #ifdef PSB_HAVE_CUDA From 4b8e4dd4a3745bf8be655592806596133add7f42 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Tue, 26 May 2026 12:11:49 +0200 Subject: [PATCH 171/175] [UPDATE] Refactor after template update for RMA routines --- base/comm/internals/psi_covrl_restr.f90 | 2 +- base/comm/internals/psi_covrl_restr_a.f90 | 2 +- base/comm/internals/psi_covrl_save.f90 | 2 +- base/comm/internals/psi_covrl_save_a.f90 | 2 +- base/comm/internals/psi_covrl_upd.f90 | 2 +- base/comm/internals/psi_covrl_upd_a.f90 | 2 +- base/comm/internals/psi_cswapdata.F90 | 2830 +++++++++++---- base/comm/internals/psi_cswapdata_a.F90 | 88 +- base/comm/internals/psi_cswaptran.F90 | 1955 +++++++++-- base/comm/internals/psi_cswaptran_a.F90 | 86 +- base/comm/internals/psi_dovrl_restr.f90 | 2 +- base/comm/internals/psi_dovrl_restr_a.f90 | 2 +- base/comm/internals/psi_dovrl_save.f90 | 2 +- base/comm/internals/psi_dovrl_save_a.f90 | 2 +- base/comm/internals/psi_dovrl_upd.f90 | 2 +- base/comm/internals/psi_dovrl_upd_a.f90 | 2 +- base/comm/internals/psi_dswapdata.F90 | 815 ++++- base/comm/internals/psi_dswaptran.F90 | 1459 +++++++- base/comm/internals/psi_eovrl_restr_a.f90 | 2 +- base/comm/internals/psi_eovrl_save_a.f90 | 2 +- base/comm/internals/psi_eovrl_upd_a.f90 | 2 +- base/comm/internals/psi_eswapdata_a.F90 | 68 +- base/comm/internals/psi_eswaptran_a.F90 | 64 +- base/comm/internals/psi_i2ovrl_restr_a.f90 | 2 +- base/comm/internals/psi_i2ovrl_save_a.f90 | 2 +- base/comm/internals/psi_i2ovrl_upd_a.f90 | 2 +- base/comm/internals/psi_i2swapdata_a.F90 | 68 +- base/comm/internals/psi_i2swaptran_a.F90 | 66 +- base/comm/internals/psi_iovrl_restr.f90 | 2 +- base/comm/internals/psi_iovrl_save.f90 | 2 +- base/comm/internals/psi_iovrl_upd.f90 | 2 +- base/comm/internals/psi_iswapdata.F90 | 2710 ++++++++++++--- base/comm/internals/psi_iswaptran.F90 | 2052 +++++++++-- base/comm/internals/psi_lovrl_restr.f90 | 2 +- base/comm/internals/psi_lovrl_save.f90 | 2 +- base/comm/internals/psi_lovrl_upd.f90 | 2 +- base/comm/internals/psi_lswapdata.F90 | 2788 ++++++++++++--- base/comm/internals/psi_lswaptran.F90 | 2141 ++++++++++-- base/comm/internals/psi_movrl_restr_a.f90 | 2 +- base/comm/internals/psi_movrl_save_a.f90 | 2 +- base/comm/internals/psi_movrl_upd_a.f90 | 2 +- base/comm/internals/psi_mswapdata_a.F90 | 68 +- base/comm/internals/psi_mswaptran_a.F90 | 66 +- base/comm/internals/psi_sovrl_restr.f90 | 2 +- base/comm/internals/psi_sovrl_restr_a.f90 | 2 +- base/comm/internals/psi_sovrl_save.f90 | 2 +- base/comm/internals/psi_sovrl_save_a.f90 | 2 +- base/comm/internals/psi_sovrl_upd.f90 | 2 +- base/comm/internals/psi_sovrl_upd_a.f90 | 2 +- base/comm/internals/psi_sswapdata.F90 | 2900 ++++++++++++---- base/comm/internals/psi_sswapdata_a.F90 | 56 +- base/comm/internals/psi_sswaptran.F90 | 2000 +++++++++-- base/comm/internals/psi_sswaptran_a.F90 | 52 +- base/comm/internals/psi_zovrl_restr.f90 | 2 +- base/comm/internals/psi_zovrl_restr_a.f90 | 2 +- base/comm/internals/psi_zovrl_save.f90 | 2 +- base/comm/internals/psi_zovrl_save_a.f90 | 2 +- base/comm/internals/psi_zovrl_upd.f90 | 2 +- base/comm/internals/psi_zovrl_upd_a.f90 | 2 +- base/comm/internals/psi_zswapdata.F90 | 3027 +++++++++++++---- base/comm/internals/psi_zswapdata_a.F90 | 88 +- base/comm/internals/psi_zswaptran.F90 | 2026 +++++++++-- base/comm/internals/psi_zswaptran_a.F90 | 86 +- base/comm/psb_cgather.f90 | 2 +- base/comm/psb_cgather_a.f90 | 4 +- base/comm/psb_chalo.f90 | 69 +- base/comm/psb_chalo_a.f90 | 8 +- base/comm/psb_covrl.f90 | 53 +- base/comm/psb_covrl_a.f90 | 6 +- base/comm/psb_cscatter.F90 | 2 +- base/comm/psb_cscatter_a.F90 | 4 +- base/comm/psb_cspgather.F90 | 2 +- base/comm/psb_dgather.f90 | 2 +- base/comm/psb_dgather_a.f90 | 4 +- base/comm/psb_dhalo.f90 | 59 +- base/comm/psb_dhalo_a.f90 | 6 +- base/comm/psb_dovrl.f90 | 54 +- base/comm/psb_dovrl_a.f90 | 4 +- base/comm/psb_dscatter.F90 | 2 +- base/comm/psb_dscatter_a.F90 | 4 +- base/comm/psb_dspgather.F90 | 2 +- base/comm/psb_egather_a.f90 | 4 +- base/comm/psb_ehalo_a.f90 | 10 +- base/comm/psb_eovrl_a.f90 | 4 +- base/comm/psb_escatter_a.F90 | 4 +- base/comm/psb_i2gather_a.f90 | 4 +- base/comm/psb_i2halo_a.f90 | 4 +- base/comm/psb_i2ovrl_a.f90 | 4 +- base/comm/psb_i2scatter_a.F90 | 4 +- base/comm/psb_igather.f90 | 2 +- base/comm/psb_ihalo.f90 | 58 +- base/comm/psb_iovrl.f90 | 48 +- base/comm/psb_iscatter.F90 | 2 +- base/comm/psb_ispgather.F90 | 2 +- base/comm/psb_lgather.f90 | 2 +- base/comm/psb_lhalo.f90 | 61 +- base/comm/psb_lovrl.f90 | 51 +- base/comm/psb_lscatter.F90 | 2 +- base/comm/psb_lspgather.F90 | 2 +- base/comm/psb_mgather_a.f90 | 4 +- base/comm/psb_mhalo_a.f90 | 4 +- base/comm/psb_movrl_a.f90 | 4 +- base/comm/psb_mscatter_a.F90 | 4 +- base/comm/psb_sgather.f90 | 2 +- base/comm/psb_sgather_a.f90 | 4 +- base/comm/psb_shalo.f90 | 73 +- base/comm/psb_shalo_a.f90 | 8 +- base/comm/psb_sovrl.f90 | 47 +- base/comm/psb_sovrl_a.f90 | 4 +- base/comm/psb_sscatter.F90 | 2 +- base/comm/psb_sscatter_a.F90 | 4 +- base/comm/psb_sspgather.F90 | 2 +- base/comm/psb_zgather.f90 | 2 +- base/comm/psb_zgather_a.f90 | 4 +- base/comm/psb_zhalo.f90 | 64 +- base/comm/psb_zhalo_a.f90 | 4 +- base/comm/psb_zovrl.f90 | 47 +- base/comm/psb_zovrl_a.f90 | 4 +- base/comm/psb_zscatter.F90 | 2 +- base/comm/psb_zscatter_a.F90 | 4 +- base/comm/psb_zspgather.F90 | 2 +- base/modules/Makefile | 52 +- base/modules/auxil/psb_c_hsort_mod.f90 | 2 +- base/modules/auxil/psb_c_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_c_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_c_isort_mod.f90 | 2 +- base/modules/auxil/psb_c_msort_mod.f90 | 2 +- base/modules/auxil/psb_c_qsort_mod.f90 | 2 +- base/modules/auxil/psb_c_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_c_realloc_mod.F90 | 2 +- base/modules/auxil/psb_d_hsort_mod.f90 | 2 +- base/modules/auxil/psb_d_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_d_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_d_isort_mod.f90 | 2 +- base/modules/auxil/psb_d_msort_mod.f90 | 2 +- base/modules/auxil/psb_d_qsort_mod.f90 | 2 +- base/modules/auxil/psb_d_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_d_realloc_mod.F90 | 2 +- base/modules/auxil/psb_e_hsort_mod.f90 | 2 +- base/modules/auxil/psb_e_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_e_isort_mod.f90 | 2 +- base/modules/auxil/psb_e_msort_mod.f90 | 2 +- base/modules/auxil/psb_e_qsort_mod.f90 | 2 +- base/modules/auxil/psb_e_realloc_mod.F90 | 2 +- base/modules/auxil/psb_i2_hsort_mod.f90 | 2 +- base/modules/auxil/psb_i2_hsort_x_mod.f90 | 312 ++ base/modules/auxil/psb_i2_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_i2_isort_mod.f90 | 2 +- base/modules/auxil/psb_i2_msort_mod.f90 | 2 +- base/modules/auxil/psb_i2_qsort_mod.f90 | 2 +- base/modules/auxil/psb_i2_realloc_mod.F90 | 2 +- base/modules/auxil/psb_i_hsort_x_mod.f90 | 3 +- base/modules/auxil/psb_l_hsort_x_mod.f90 | 3 +- base/modules/auxil/psb_m_hsort_mod.f90 | 2 +- base/modules/auxil/psb_m_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_m_isort_mod.f90 | 2 +- base/modules/auxil/psb_m_msort_mod.f90 | 2 +- base/modules/auxil/psb_m_qsort_mod.f90 | 2 +- base/modules/auxil/psb_m_realloc_mod.F90 | 2 +- base/modules/auxil/psb_s_hsort_mod.f90 | 2 +- base/modules/auxil/psb_s_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_s_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_s_isort_mod.f90 | 2 +- base/modules/auxil/psb_s_msort_mod.f90 | 2 +- base/modules/auxil/psb_s_qsort_mod.f90 | 2 +- base/modules/auxil/psb_s_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_s_realloc_mod.F90 | 2 +- base/modules/auxil/psb_z_hsort_mod.f90 | 2 +- base/modules/auxil/psb_z_hsort_x_mod.f90 | 2 +- base/modules/auxil/psb_z_ip_reord_mod.F90 | 2 +- base/modules/auxil/psb_z_isort_mod.f90 | 2 +- base/modules/auxil/psb_z_msort_mod.f90 | 2 +- base/modules/auxil/psb_z_qsort_mod.f90 | 2 +- base/modules/auxil/psb_z_rb_idx_tree_mod.f90 | 2 +- base/modules/auxil/psb_z_realloc_mod.F90 | 2 +- base/modules/auxil/psi_c_serial_mod.f90 | 39 +- base/modules/auxil/psi_d_serial_mod.f90 | 39 +- base/modules/auxil/psi_e_serial_mod.f90 | 41 +- base/modules/auxil/psi_i2_serial_mod.f90 | 41 +- base/modules/auxil/psi_m_serial_mod.f90 | 41 +- base/modules/auxil/psi_s_serial_mod.f90 | 39 +- base/modules/auxil/psi_serial_mod.f90 | 1 + base/modules/auxil/psi_z_serial_mod.f90 | 39 +- .../comm/comm_schemes/psb_comm_rma_mod.F90 | 149 + base/modules/comm/psb_c_comm_a_mod.f90 | 2 +- base/modules/comm/psb_c_comm_mod.f90 | 22 +- base/modules/comm/psb_c_linmap_mod.f90 | 10 +- base/modules/comm/psb_comm_mod.f90 | 12 + base/modules/comm/psb_d_comm_a_mod.f90 | 30 +- base/modules/comm/psb_d_comm_mod.f90 | 28 +- base/modules/comm/psb_d_linmap_mod.f90 | 10 +- base/modules/comm/psb_e_comm_a_mod.f90 | 2 +- base/modules/comm/psb_i2_comm_a_mod.f90 | 2 +- base/modules/comm/psb_i2_comm_mod.f90 | 113 + base/modules/comm/psb_i_comm_mod.f90 | 22 +- base/modules/comm/psb_l_comm_mod.f90 | 22 +- base/modules/comm/psb_m_comm_a_mod.f90 | 2 +- base/modules/comm/psb_s_comm_a_mod.f90 | 2 +- base/modules/comm/psb_s_comm_mod.f90 | 20 +- base/modules/comm/psb_s_linmap_mod.f90 | 10 +- base/modules/comm/psb_z_comm_a_mod.f90 | 2 +- base/modules/comm/psb_z_comm_mod.f90 | 20 +- base/modules/comm/psb_z_linmap_mod.f90 | 10 +- base/modules/comm/psi_c_comm_a_mod.f90 | 29 +- base/modules/comm/psi_c_comm_v_mod.f90 | 137 +- base/modules/comm/psi_d_comm_a_mod.f90 | 79 +- base/modules/comm/psi_d_comm_v_mod.f90 | 139 +- base/modules/comm/psi_e_comm_a_mod.f90 | 29 +- base/modules/comm/psi_i2_comm_a_mod.f90 | 29 +- base/modules/comm/psi_i2_comm_v_mod.f90 | 164 + base/modules/comm/psi_i_comm_a_mod.f90 | 170 + base/modules/comm/psi_i_comm_v_mod.f90 | 138 +- base/modules/comm/psi_l_comm_a_mod.f90 | 170 + base/modules/comm/psi_l_comm_v_mod.f90 | 139 +- base/modules/comm/psi_m_comm_a_mod.f90 | 29 +- base/modules/comm/psi_s_comm_a_mod.f90 | 29 +- base/modules/comm/psi_s_comm_v_mod.f90 | 138 +- base/modules/comm/psi_z_comm_a_mod.f90 | 29 +- base/modules/comm/psi_z_comm_v_mod.f90 | 137 +- base/modules/penv/psi_c_collective_mod.F90 | 2 +- base/modules/penv/psi_c_p2p_mod.F90 | 2 +- base/modules/penv/psi_d_collective_mod.F90 | 2 +- base/modules/penv/psi_d_p2p_mod.F90 | 2 +- base/modules/penv/psi_e_collective_mod.F90 | 2 +- base/modules/penv/psi_e_p2p_mod.F90 | 2 +- base/modules/penv/psi_i2_collective_mod.F90 | 2 +- base/modules/penv/psi_i2_p2p_mod.F90 | 2 +- base/modules/penv/psi_m_collective_mod.F90 | 2 +- base/modules/penv/psi_m_p2p_mod.F90 | 2 +- base/modules/penv/psi_s_collective_mod.F90 | 2 +- base/modules/penv/psi_s_p2p_mod.F90 | 2 +- base/modules/penv/psi_z_collective_mod.F90 | 2 +- base/modules/penv/psi_z_p2p_mod.F90 | 2 +- base/modules/psb_realloc_mod.F90 | 1 + base/modules/psblas/psb_c_psblas_mod.F90 | 18 +- base/modules/psblas/psb_d_psblas_mod.F90 | 2 +- base/modules/psblas/psb_s_psblas_mod.F90 | 2 +- base/modules/psblas/psb_z_psblas_mod.F90 | 2 +- base/modules/psi_c_mod.F90 | 2 +- base/modules/psi_d_mod.F90 | 2 +- base/modules/psi_i2_mod.F90 | 44 + base/modules/psi_i_mod.F90 | 6 +- base/modules/psi_l_mod.F90 | 6 +- base/modules/psi_s_mod.F90 | 2 +- base/modules/psi_z_mod.F90 | 2 +- base/modules/serial/psb_c_base_mat_mod.F90 | 2 +- base/modules/serial/psb_c_base_vect_mod.F90 | 216 +- base/modules/serial/psb_c_csc_mat_mod.f90 | 2 +- base/modules/serial/psb_c_csr_mat_mod.f90 | 2 +- base/modules/serial/psb_c_mat_mod.F90 | 2 +- base/modules/serial/psb_c_serial_mod.f90 | 2 +- base/modules/serial/psb_c_vect_mod.F90 | 23 +- base/modules/serial/psb_d_base_mat_mod.F90 | 2 +- base/modules/serial/psb_d_base_vect_mod.F90 | 185 +- base/modules/serial/psb_d_csc_mat_mod.f90 | 2 +- base/modules/serial/psb_d_csr_mat_mod.f90 | 2 +- base/modules/serial/psb_d_mat_mod.F90 | 2 +- base/modules/serial/psb_d_serial_mod.f90 | 2 +- base/modules/serial/psb_d_vect_mod.F90 | 25 +- base/modules/serial/psb_i2_base_vect_mod.F90 | 2526 ++++++++++++++ base/modules/serial/psb_i2_vect_mod.F90 | 1273 +++++++ base/modules/serial/psb_i_base_vect_mod.F90 | 194 +- base/modules/serial/psb_i_vect_mod.F90 | 10 +- base/modules/serial/psb_l_base_vect_mod.F90 | 201 +- base/modules/serial/psb_l_vect_mod.F90 | 10 +- base/modules/serial/psb_s_base_mat_mod.F90 | 2 +- base/modules/serial/psb_s_base_vect_mod.F90 | 154 +- base/modules/serial/psb_s_csc_mat_mod.f90 | 2 +- base/modules/serial/psb_s_csr_mat_mod.f90 | 2 +- base/modules/serial/psb_s_mat_mod.F90 | 2 +- base/modules/serial/psb_s_serial_mod.f90 | 2 +- base/modules/serial/psb_s_vect_mod.F90 | 25 +- base/modules/serial/psb_z_base_mat_mod.F90 | 2 +- base/modules/serial/psb_z_base_vect_mod.F90 | 216 +- base/modules/serial/psb_z_csc_mat_mod.f90 | 2 +- base/modules/serial/psb_z_csr_mat_mod.f90 | 2 +- base/modules/serial/psb_z_mat_mod.F90 | 2 +- base/modules/serial/psb_z_serial_mod.f90 | 2 +- base/modules/serial/psb_z_vect_mod.F90 | 23 +- base/modules/tools/psb_c_tools_a_mod.f90 | 2 +- base/modules/tools/psb_c_tools_mod.F90 | 10 +- base/modules/tools/psb_d_tools_a_mod.f90 | 2 +- base/modules/tools/psb_d_tools_mod.F90 | 10 +- base/modules/tools/psb_e_tools_a_mod.f90 | 2 +- base/modules/tools/psb_i2_tools_a_mod.f90 | 2 +- base/modules/tools/psb_i_tools_mod.F90 | 2 +- base/modules/tools/psb_l_tools_mod.F90 | 2 +- base/modules/tools/psb_m_tools_a_mod.f90 | 2 +- base/modules/tools/psb_s_tools_a_mod.f90 | 2 +- base/modules/tools/psb_s_tools_mod.F90 | 10 +- base/modules/tools/psb_z_tools_a_mod.f90 | 2 +- base/modules/tools/psb_z_tools_mod.F90 | 10 +- base/psblas/psb_cabs_vect.f90 | 2 +- base/psblas/psb_camax.f90 | 8 +- base/psblas/psb_casum.f90 | 6 +- base/psblas/psb_caxpby.f90 | 8 +- base/psblas/psb_ccmp_vect.f90 | 2 +- base/psblas/psb_cdiv_vect.f90 | 2 +- base/psblas/psb_cdot.f90 | 8 +- base/psblas/psb_cgetmatinfo.F90 | 2 +- base/psblas/psb_cinv_vect.f90 | 2 +- base/psblas/psb_cmlt_vect.f90 | 2 +- base/psblas/psb_cnrm2.f90 | 6 +- base/psblas/psb_cnrmi.f90 | 2 +- base/psblas/psb_cspmm.f90 | 37 +- base/psblas/psb_cspnrm1.f90 | 2 +- base/psblas/psb_cspsm.f90 | 42 +- base/psblas/psb_dabs_vect.f90 | 2 +- base/psblas/psb_damax.f90 | 12 +- base/psblas/psb_dasum.f90 | 6 +- base/psblas/psb_daxpby.f90 | 8 +- base/psblas/psb_dcmp_vect.f90 | 4 +- base/psblas/psb_ddiv_vect.f90 | 2 +- base/psblas/psb_ddot.f90 | 8 +- base/psblas/psb_dgetmatinfo.F90 | 2 +- base/psblas/psb_dinv_vect.f90 | 2 +- base/psblas/psb_dmlt_vect.f90 | 2 +- base/psblas/psb_dnrm2.f90 | 6 +- base/psblas/psb_dnrmi.f90 | 2 +- base/psblas/psb_dspmm.f90 | 69 +- base/psblas/psb_dspnrm1.f90 | 2 +- base/psblas/psb_dspsm.f90 | 47 +- base/psblas/psb_sabs_vect.f90 | 2 +- base/psblas/psb_samax.f90 | 12 +- base/psblas/psb_sasum.f90 | 6 +- base/psblas/psb_saxpby.f90 | 8 +- base/psblas/psb_scmp_vect.f90 | 4 +- base/psblas/psb_sdiv_vect.f90 | 2 +- base/psblas/psb_sdot.f90 | 8 +- base/psblas/psb_sgetmatinfo.F90 | 2 +- base/psblas/psb_sinv_vect.f90 | 2 +- base/psblas/psb_smlt_vect.f90 | 2 +- base/psblas/psb_snrm2.f90 | 6 +- base/psblas/psb_snrmi.f90 | 2 +- base/psblas/psb_sspmm.f90 | 33 +- base/psblas/psb_sspnrm1.f90 | 2 +- base/psblas/psb_sspsm.f90 | 39 +- base/psblas/psb_zabs_vect.f90 | 2 +- base/psblas/psb_zamax.f90 | 8 +- base/psblas/psb_zasum.f90 | 6 +- base/psblas/psb_zaxpby.f90 | 8 +- base/psblas/psb_zcmp_vect.f90 | 2 +- base/psblas/psb_zdiv_vect.f90 | 2 +- base/psblas/psb_zdot.f90 | 8 +- base/psblas/psb_zgetmatinfo.F90 | 2 +- base/psblas/psb_zinv_vect.f90 | 2 +- base/psblas/psb_zmlt_vect.f90 | 2 +- base/psblas/psb_znrm2.f90 | 6 +- base/psblas/psb_znrmi.f90 | 2 +- base/psblas/psb_zspmm.f90 | 35 +- base/psblas/psb_zspnrm1.f90 | 2 +- base/psblas/psb_zspsm.f90 | 42 +- base/serial/impl/psb_c_base_mat_impl.F90 | 2 +- base/serial/impl/psb_c_coo_impl.F90 | 2 +- base/serial/impl/psb_c_csc_impl.F90 | 2 +- base/serial/impl/psb_c_csr_impl.F90 | 2 +- base/serial/impl/psb_c_mat_impl.F90 | 2 +- base/serial/impl/psb_c_rb_idx_tree_impl.F90 | 2 +- base/serial/impl/psb_d_base_mat_impl.F90 | 2 +- base/serial/impl/psb_d_coo_impl.F90 | 2 +- base/serial/impl/psb_d_csc_impl.F90 | 2 +- base/serial/impl/psb_d_csr_impl.F90 | 2 +- base/serial/impl/psb_d_mat_impl.F90 | 2 +- base/serial/impl/psb_d_rb_idx_tree_impl.F90 | 2 +- base/serial/impl/psb_s_base_mat_impl.F90 | 2 +- base/serial/impl/psb_s_coo_impl.F90 | 2 +- base/serial/impl/psb_s_csc_impl.F90 | 2 +- base/serial/impl/psb_s_csr_impl.F90 | 2 +- base/serial/impl/psb_s_mat_impl.F90 | 2 +- base/serial/impl/psb_s_rb_idx_tree_impl.F90 | 2 +- base/serial/impl/psb_z_base_mat_impl.F90 | 2 +- base/serial/impl/psb_z_coo_impl.F90 | 2 +- base/serial/impl/psb_z_csc_impl.F90 | 2 +- base/serial/impl/psb_z_csr_impl.F90 | 2 +- base/serial/impl/psb_z_mat_impl.F90 | 2 +- base/serial/impl/psb_z_rb_idx_tree_impl.F90 | 2 +- base/serial/psb_camax_s.f90 | 2 +- base/serial/psb_casum_s.f90 | 2 +- base/serial/psb_cgeprt.f90 | 2 +- base/serial/psb_cnumbmm.f90 | 2 +- base/serial/psb_crwextd.f90 | 2 +- base/serial/psb_cspspmm.F90 | 2 +- base/serial/psb_csymbmm.f90 | 2 +- base/serial/psb_damax_s.f90 | 2 +- base/serial/psb_dasum_s.f90 | 2 +- base/serial/psb_dgeprt.f90 | 2 +- base/serial/psb_dnumbmm.f90 | 2 +- base/serial/psb_drwextd.f90 | 2 +- base/serial/psb_dspspmm.F90 | 2 +- base/serial/psb_dsymbmm.f90 | 2 +- base/serial/psb_samax_s.f90 | 2 +- base/serial/psb_sasum_s.f90 | 2 +- base/serial/psb_sgeprt.f90 | 2 +- base/serial/psb_snumbmm.f90 | 2 +- base/serial/psb_srwextd.f90 | 2 +- base/serial/psb_sspspmm.F90 | 2 +- base/serial/psb_ssymbmm.f90 | 2 +- base/serial/psb_zamax_s.f90 | 2 +- base/serial/psb_zasum_s.f90 | 2 +- base/serial/psb_zgeprt.f90 | 2 +- base/serial/psb_znumbmm.f90 | 2 +- base/serial/psb_zrwextd.f90 | 2 +- base/serial/psb_zspspmm.F90 | 2 +- base/serial/psb_zsymbmm.f90 | 2 +- base/serial/psi_c_serial_impl.F90 | 6 +- base/serial/psi_d_serial_impl.F90 | 6 +- base/serial/psi_e_serial_impl.F90 | 6 +- base/serial/psi_i2_serial_impl.F90 | 6 +- base/serial/psi_m_serial_impl.F90 | 6 +- base/serial/psi_s_serial_impl.F90 | 6 +- base/serial/psi_z_serial_impl.F90 | 6 +- base/serial/sort/psb_c_hsort_impl.f90 | 2 +- base/serial/sort/psb_c_isort_impl.f90 | 2 +- base/serial/sort/psb_c_msort_impl.f90 | 2 +- base/serial/sort/psb_c_qsort_impl.f90 | 2 +- base/serial/sort/psb_d_hsort_impl.f90 | 2 +- base/serial/sort/psb_d_isort_impl.f90 | 2 +- base/serial/sort/psb_d_msort_impl.f90 | 2 +- base/serial/sort/psb_d_qsort_impl.f90 | 2 +- base/serial/sort/psb_e_hsort_impl.f90 | 2 +- base/serial/sort/psb_e_isort_impl.f90 | 2 +- base/serial/sort/psb_e_msort_impl.f90 | 2 +- base/serial/sort/psb_e_qsort_impl.f90 | 2 +- base/serial/sort/psb_i2_hsort_impl.f90 | 721 ++++ base/serial/sort/psb_i2_isort_impl.f90 | 378 ++ base/serial/sort/psb_i2_msort_impl.f90 | 667 ++++ base/serial/sort/psb_i2_qsort_impl.f90 | 1472 ++++++++ base/serial/sort/psb_m_hsort_impl.f90 | 2 +- base/serial/sort/psb_m_isort_impl.f90 | 2 +- base/serial/sort/psb_m_msort_impl.f90 | 2 +- base/serial/sort/psb_m_qsort_impl.f90 | 2 +- base/serial/sort/psb_s_hsort_impl.f90 | 2 +- base/serial/sort/psb_s_isort_impl.f90 | 2 +- base/serial/sort/psb_s_msort_impl.f90 | 2 +- base/serial/sort/psb_s_qsort_impl.f90 | 2 +- base/serial/sort/psb_z_hsort_impl.f90 | 2 +- base/serial/sort/psb_z_isort_impl.f90 | 2 +- base/serial/sort/psb_z_msort_impl.f90 | 2 +- base/serial/sort/psb_z_qsort_impl.f90 | 2 +- base/tools/psb_c_glob_transpose.F90 | 2 +- base/tools/psb_c_map.f90 | 50 +- base/tools/psb_c_par_csr_spspmm.f90 | 2 +- base/tools/psb_c_remap.F90 | 2 +- base/tools/psb_c_remote_mat.F90 | 2 +- base/tools/psb_c_remote_vect.F90 | 2 +- base/tools/psb_callc.f90 | 2 +- base/tools/psb_callc_a.f90 | 4 +- base/tools/psb_casb.f90 | 4 +- base/tools/psb_casb_a.f90 | 4 +- base/tools/psb_ccdbldext.F90 | 2 +- base/tools/psb_cfree.f90 | 2 +- base/tools/psb_cfree_a.f90 | 2 +- base/tools/psb_cgetelem.f90 | 91 +- base/tools/psb_cins.f90 | 2 +- base/tools/psb_cins_a.f90 | 4 +- base/tools/psb_cspalloc.f90 | 2 +- base/tools/psb_cspasb.f90 | 2 +- base/tools/psb_cspfree.f90 | 2 +- base/tools/psb_csphalo.F90 | 2 +- base/tools/psb_cspins.F90 | 2 +- base/tools/psb_csprn.f90 | 2 +- base/tools/psb_d_glob_transpose.F90 | 2 +- base/tools/psb_d_map.f90 | 50 +- base/tools/psb_d_par_csr_spspmm.f90 | 2 +- base/tools/psb_d_remap.F90 | 2 +- base/tools/psb_d_remote_mat.F90 | 2 +- base/tools/psb_d_remote_vect.F90 | 2 +- base/tools/psb_dallc.f90 | 2 +- base/tools/psb_dallc_a.f90 | 4 +- base/tools/psb_dasb.f90 | 4 +- base/tools/psb_dasb_a.f90 | 4 +- base/tools/psb_dcdbldext.F90 | 2 +- base/tools/psb_dfree.f90 | 2 +- base/tools/psb_dfree_a.f90 | 2 +- base/tools/psb_dgetelem.f90 | 91 +- base/tools/psb_dins.f90 | 2 +- base/tools/psb_dins_a.f90 | 4 +- base/tools/psb_dspalloc.f90 | 2 +- base/tools/psb_dspasb.f90 | 2 +- base/tools/psb_dspfree.f90 | 2 +- base/tools/psb_dsphalo.F90 | 2 +- base/tools/psb_dspins.F90 | 2 +- base/tools/psb_dsprn.f90 | 2 +- base/tools/psb_e_remote_vect.F90 | 2 +- base/tools/psb_eallc_a.f90 | 4 +- base/tools/psb_easb_a.f90 | 4 +- base/tools/psb_efree_a.f90 | 2 +- base/tools/psb_eins_a.f90 | 4 +- base/tools/psb_i2_remote_vect.F90 | 2 +- base/tools/psb_i2allc_a.f90 | 4 +- base/tools/psb_i2asb_a.f90 | 4 +- base/tools/psb_i2free_a.f90 | 2 +- base/tools/psb_i2ins_a.f90 | 4 +- base/tools/psb_iallc.f90 | 2 +- base/tools/psb_iasb.f90 | 4 +- base/tools/psb_ifree.f90 | 2 +- base/tools/psb_iins.f90 | 2 +- base/tools/psb_lallc.f90 | 2 +- base/tools/psb_lasb.f90 | 4 +- base/tools/psb_lfree.f90 | 2 +- base/tools/psb_lins.f90 | 2 +- base/tools/psb_m_remote_vect.F90 | 2 +- base/tools/psb_mallc_a.f90 | 4 +- base/tools/psb_masb_a.f90 | 4 +- base/tools/psb_mfree_a.f90 | 2 +- base/tools/psb_mins_a.f90 | 4 +- base/tools/psb_s_glob_transpose.F90 | 2 +- base/tools/psb_s_map.f90 | 50 +- base/tools/psb_s_par_csr_spspmm.f90 | 2 +- base/tools/psb_s_remap.F90 | 2 +- base/tools/psb_s_remote_mat.F90 | 2 +- base/tools/psb_s_remote_vect.F90 | 2 +- base/tools/psb_sallc.f90 | 2 +- base/tools/psb_sallc_a.f90 | 4 +- base/tools/psb_sasb.f90 | 4 +- base/tools/psb_sasb_a.f90 | 4 +- base/tools/psb_scdbldext.F90 | 2 +- base/tools/psb_sfree.f90 | 2 +- base/tools/psb_sfree_a.f90 | 2 +- base/tools/psb_sgetelem.f90 | 91 +- base/tools/psb_sins.f90 | 2 +- base/tools/psb_sins_a.f90 | 4 +- base/tools/psb_sspalloc.f90 | 2 +- base/tools/psb_sspasb.f90 | 2 +- base/tools/psb_sspfree.f90 | 2 +- base/tools/psb_ssphalo.F90 | 2 +- base/tools/psb_sspins.F90 | 2 +- base/tools/psb_ssprn.f90 | 2 +- base/tools/psb_z_glob_transpose.F90 | 2 +- base/tools/psb_z_map.f90 | 50 +- base/tools/psb_z_par_csr_spspmm.f90 | 2 +- base/tools/psb_z_remap.F90 | 2 +- base/tools/psb_z_remote_mat.F90 | 2 +- base/tools/psb_z_remote_vect.F90 | 2 +- base/tools/psb_zallc.f90 | 2 +- base/tools/psb_zallc_a.f90 | 4 +- base/tools/psb_zasb.f90 | 4 +- base/tools/psb_zasb_a.f90 | 4 +- base/tools/psb_zcdbldext.F90 | 2 +- base/tools/psb_zfree.f90 | 2 +- base/tools/psb_zfree_a.f90 | 2 +- base/tools/psb_zgetelem.f90 | 91 +- base/tools/psb_zins.f90 | 2 +- base/tools/psb_zins_a.f90 | 4 +- base/tools/psb_zspalloc.f90 | 2 +- base/tools/psb_zspasb.f90 | 2 +- base/tools/psb_zspfree.f90 | 2 +- base/tools/psb_zsphalo.F90 | 2 +- base/tools/psb_zspins.F90 | 2 +- base/tools/psb_zsprn.f90 | 2 +- 550 files changed, 33732 insertions(+), 7696 deletions(-) create mode 100644 base/modules/auxil/psb_i2_hsort_x_mod.f90 create mode 100644 base/modules/comm/psb_i2_comm_mod.f90 create mode 100644 base/modules/comm/psi_i2_comm_v_mod.f90 create mode 100644 base/modules/comm/psi_i_comm_a_mod.f90 create mode 100644 base/modules/comm/psi_l_comm_a_mod.f90 create mode 100644 base/modules/psi_i2_mod.F90 create mode 100644 base/modules/serial/psb_i2_base_vect_mod.F90 create mode 100644 base/modules/serial/psb_i2_vect_mod.F90 create mode 100644 base/serial/sort/psb_i2_hsort_impl.f90 create mode 100644 base/serial/sort/psb_i2_isort_impl.f90 create mode 100644 base/serial/sort/psb_i2_msort_impl.f90 create mode 100644 base/serial/sort/psb_i2_qsort_impl.f90 diff --git a/base/comm/internals/psi_covrl_restr.f90 b/base/comm/internals/psi_covrl_restr.f90 index 9e1c86358..26eebae95 100644 --- a/base/comm/internals/psi_covrl_restr.f90 +++ b/base/comm/internals/psi_covrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_restr_a.f90 b/base/comm/internals/psi_covrl_restr_a.f90 index 6d4a4cad6..79bc92c73 100644 --- a/base/comm/internals/psi_covrl_restr_a.f90 +++ b/base/comm/internals/psi_covrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_save.f90 b/base/comm/internals/psi_covrl_save.f90 index 5891a202b..d2583fb04 100644 --- a/base/comm/internals/psi_covrl_save.f90 +++ b/base/comm/internals/psi_covrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_save_a.f90 b/base/comm/internals/psi_covrl_save_a.f90 index c50676e83..3da176a3e 100644 --- a/base/comm/internals/psi_covrl_save_a.f90 +++ b/base/comm/internals/psi_covrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_upd.f90 b/base/comm/internals/psi_covrl_upd.f90 index 28a7d1077..43841f5d5 100644 --- a/base/comm/internals/psi_covrl_upd.f90 +++ b/base/comm/internals/psi_covrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_covrl_upd_a.f90 b/base/comm/internals/psi_covrl_upd_a.f90 index f2f2df08e..7e53fe66a 100644 --- a/base/comm/internals/psi_covrl_upd_a.f90 +++ b/base/comm/internals/psi_covrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index cf6733223..72b97a987 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -41,7 +41,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D complex(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -53,31 +53,22 @@ ! is scattered in the owned indices, and BETA=1. ! The first routine picks the desired exchange index list and passes it to the second. ! This version works on encapsulated vectors, and uses their methods to do GTH and SCT, -! so that special versions (i.e. GPU vectors can override them +! so that special versions (i.e. GPU vectors can override them) ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) +! swap_status - integer Swap status selector. +! It is interpreted as a communication status: +! psb_comm_status_start_ -> START phase +! psb_comm_status_wait_ -> WAIT phase +! psb_comm_status_unknown_ -> START+WAIT +! The communication scheme is selected from +! y%comm_handle%comm_type. ! ! ! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. +! beta - real Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! our own internal allocation. +! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -91,9 +82,16 @@ submodule (psi_c_comm_v_mod) psi_c_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod + use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_handle_type + use psb_comm_rma_mod, only: psb_comm_rma_handle + use psb_comm_factory_mod + contains - module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_cswapdata_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -102,23 +100,24 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - class(psb_c_base_vect_type), intent(inout) :: y - complex(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + class(psb_c_base_vect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent - character(len=30) :: name + ! error handling variables + integer(psb_ipk_) :: err_act + character(len=30) :: name info = psb_success_ name = 'psi_cswapdata_vect' @@ -126,14 +125,14 @@ contains ctxt = desc_a%get_context() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -145,156 +144,209 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if + + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if - if (baseline) then - call psi_cswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then + + select case(y%comm_handle%comm_type) + case(psb_comm_isend_irecv_) + call psi_cswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if - else if (neighbor_a2av) then - call psi_cswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + case(psb_comm_ineighbor_alltoallv_) + call psi_cswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor nonblocking swap') goto 9999 end if - else + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_cswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_cswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_cswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if + case default info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') goto 9999 - end if + end select call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) - return end subroutine psi_cswapdata_vect - subroutine psi_cswap_baseline_vect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_cswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name + & snd_pt, rcv_pt, pnti, n + logical :: do_send,do_recv + logical, parameter :: usersend=.false. + logical :: debug + character(len=20) :: name info = psb_success_ name = 'psi_cswap_baseline_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif + icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_).or.(swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_).or.(swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() - if (debug) write(*,*) me,'Internal buffer' + if (debug) write(*,*) my_rank,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + call psb_errpush(info,name,a_err='Unfinished communication? Something is wrong....') goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(comm_indexes%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_complex_swap_tag + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' Gather ' + if (debug) write(*,*) my_rank,' Gather ' ! ! Then gather for sending. ! pnti = 1 do i=1, num_neighbors - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -303,7 +355,7 @@ contains ! call y%device_wait() - if (debug) write(*,*) me,' isend' + if (debug) write(*,*) my_rank,' isend' ! ! Then send ! @@ -311,18 +363,18 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if ((nesd>0).and.(proc_to_comm /= me)) then + if ((nesd>0).and.(proc_to_comm /= my_rank)) then call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -336,8 +388,8 @@ contains end if if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -347,19 +399,19 @@ contains end if call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' pnti = 1 - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (proc_to_comm /= me)then + if (proc_to_comm /= my_rank)then if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -367,59 +419,73 @@ contains end if end if if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if end if - else if (proc_to_comm == me) then + else if (proc_to_comm == my_rank) then if (nesd /= nerv) then write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd end if y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' scatter' + if (debug) write(*,*) my_rank,' scatter' pnti = 1 snd_pt = 1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 + if ((idx_pt < 1) .or. (nerv < 0) .or. (idx_pt+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + + if (debug) write(*,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 end do + ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device ! - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' call y%device_wait() - if (debug) write(*,*) me,' free buffer' + if (debug) write(*,*) my_rank,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call y%comm_handle%free(info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - if (debug) write(*,*) me,' done' + if (debug) write(*,*) my_rank,' done' end if @@ -432,39 +498,41 @@ contains end subroutine psi_cswap_baseline_vect - subroutine psi_cswap_neighbor_topology_vect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_cswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name - + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ - name = 'psi_cswap_nbr_vect' + name = 'psi_cswap_neighbor_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -473,97 +541,179 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - call idx%sync() + call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (buffer_size > 0) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + neighbor_comm_handle%comm_request = mpi_request_null + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%comm_request = mpi_request_null end if - y%communication_handle = mpi_request_null - - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + ! Wait for device (important for GPU subclasses) call y%device_wait() - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_c_spk_, & - & y%combuf(topology_total_send + 1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_c_spk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%comm_request = mpi_request_null + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + write(psb_err_unit,*) my_rank, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & + & neighbor_comm_handle%is_initialized + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((1+pnti+psb_n_elem_recv_ < 1) .or. (nerv < 0) .or. & + & (1+pnti+psb_n_elem_recv_+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 + end do + else + ! nothing to wait/scatter end if - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) - y%communication_handle = mpi_request_null + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_vect: done' + if (debug) write(*,*) my_rank,' nbr_vect: done' - end if + end if ! do_wait call psb_erractionrestore(err_act) return @@ -573,103 +723,252 @@ contains return end subroutine psi_cswap_neighbor_topology_vect - ! - ! - ! Subroutine: psi_cswapdata_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! - module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,info,data) + + + subroutine psi_cswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta - class(psb_c_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=30) :: name + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ - name = 'psi_cswapdata_multivect' + name = 'psi_cswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif + icomm = ctxt%get_mpic() - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swap') + goto 9999 + end select - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 - end if + call comm_indexes%sync() - if (baseline) then - call psi_cswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') goto 9999 end if - else if (neighbor_a2av) then - call psi_cswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') - goto 9999 + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into combuf using baseline-style gth calls + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data (baseline layout),', topology_total_send,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Lazy persistent-init: build the request once, then reuse with START/WAIT. + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Scatter received data to local vector positions (baseline-style sct) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data (baseline layout),', topology_total_recv,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + rcv_pt = 1+pnti+psb_n_elem_recv_ + if (nerv > 0) then + call y%sct(rcv_pt,nerv,comm_indexes,beta) + end if + pnti = pnti + nerv + nesd + 3 + end do + end if + + call y%device_wait() + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait call psb_erractionrestore(err_act) return @@ -677,11 +976,10 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_cswapdata_multivect + end subroutine psi_cswap_neighbor_persistent_topology_vect - subroutine psi_cswap_baseline_multivect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_cswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -689,242 +987,512 @@ contains #ifdef PSB_MPI_H include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_) :: beta - class(psb_c_base_multivect_type) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv - integer(psb_ipk_), intent(out) :: info - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_) :: icomm - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n + + + info = psb_success_ + name = 'psi_cswap_rma_pull_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 - endif + end if icomm = ctxt%get_mpic() - n = y%get_ncols() + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - total_recv_ = total_recv * n - total_send_ = total_send * n + call comm_indexes%sync() - call idx%sync() + ! START phase: build the layout once, prepare the exposed buffer, then issue RMA. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null - call psb_realloc(num_neighbors,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_complex_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) - end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - do i=1, num_neighbors - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - ! - ! Then wait for device - ! - call y%device_wait() - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! - - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Expose combuf once and keep the window around until the descriptor changes. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if ((recv_pos < 1) .or. (recv_count < 0) .or. (recv_pos+max(0,recv_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull local receive bounds error') + goto 9999 + end if + + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_spk_, prc_rank, remote_disp, recv_count, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if end if - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) end if - call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - p2ptag = psb_complex_swap_tag - do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_cswap_rma_pull_vect + + + subroutine psi_cswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_cswap_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! START phase: identical layout handling, but the remote metadata describes the receive side. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_open = .false. end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + end if - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Keep the window alive across repetitions: it is created once and reused. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + ! Pre-post notification receives before opening the window (prevents isend/irecv ordering issues). + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push data to each peer; after flush send a P2P notification so target knows data arrived. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if ((send_pos < 1) .or. (send_count < 0) .or. (send_pos+max(0,send_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push local send bounds error') + goto 9999 + end if + + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_r_spk_, prc_rank, remote_disp, send_count, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do end if - if (debug) write(*,*) me,' done' end if + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if + + call y%device_wait() + end if call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) - return - end subroutine psi_cswap_baseline_multivect + end subroutine psi_cswap_rma_push_vect - subroutine psi_cswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) + ! + ! + ! Subroutine: psi_cswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_cswapdata_multivect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -933,126 +1501,131 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type), intent(inout) :: y - complex(psb_spk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name + integer(psb_ipk_), intent(in) :: swap_status + class(psb_c_base_multivect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_mpk_) :: n, total_send_, total_recv_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name + + info = psb_success_ - name = 'psi_cswap_neighbor_topology_multivect' + name = 'psi_cswapdata_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - icomm = ctxt%get_mpic() - - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - call idx%sync() + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if - if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') - goto 9999 - end if - end if + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv - buffer_size = topology_total_send + topology_total_recv + if ((swap_status /= psb_comm_status_start_) .and. (swap_status /= psb_comm_status_wait_) & + & .and. (swap_status /= psb_comm_status_unknown_)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 end if - y%communication_handle = mpi_request_null + end if - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') + goto 9999 + end if - call y%device_wait() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_c_spk_, & - & y%combuf(topology_total_send + 1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_c_spk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) + baseline = .false. + ineighbor_a2av = .false. + ineighbor_a2av_persistent = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + ineighbor_a2av = .true. + case(psb_comm_persistent_ineighbor_alltoallv_) + ineighbor_a2av_persistent = .true. + case(psb_comm_rma_pull_) + call psi_cswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') goto 9999 end if - - end if - - if (do_wait) then - - if (y%communication_handle == mpi_request_null) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) + case(psb_comm_rma_push_) + call psi_cswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') goto 9999 end if + case default + baseline = .true. + end select - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv - - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) + if (baseline) then + call psi_cswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if - - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) - - y%communication_handle = mpi_request_null - call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) + else if (ineighbor_a2av) then + call psi_cswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor nonblocking swap') goto 9999 end if - if (debug) write(*,*) me,' nbr_vect: done' - + else if (ineighbor_a2av_persistent) then + call psi_cswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') + goto 9999 end if call psb_erractionrestore(err_act) @@ -1061,7 +1634,1112 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_cswap_neighbor_topology_multivect + end subroutine psi_cswapdata_multivect + + + + +subroutine psi_cswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti + logical :: do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info = psb_success_ + name = 'psi_cswap_baseline_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + n = y%get_ncols() + + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swap') + goto 9999 + end select + + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + total_recv_ = total_recv * n + total_send_ = total_send * n + + call comm_indexes%sync() + + if (debug) write(*,*) my_rank,'Internal buffer' + if (do_send) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + end if + if (debug) write(*,*) my_rank,'do_send start' + call y%new_buffer(total_send_+total_recv_,info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + baseline_comm_handle%comid = mpi_request_null + call psb_realloc(num_neighbors,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) my_rank,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) my_rank,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= my_rank)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if + + if (do_recv) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(num_neighbors,prcid,info) + + if (debug) write(*,*) my_rank,' wait' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= my_rank)then + if (nesd>0) then + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (nerv>0) then + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else if (proc_to_comm == my_rank) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) my_rank,' scatter' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + baseline_comm_handle%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) my_rank,' wait' + call y%device_wait() + if (debug) write(*,*) my_rank,' free buffer' + call y%free_buffer(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' done' + end if + + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_cswap_baseline_multivect + + + +subroutine psi_cswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_cswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if ((topology_total_send + topology_total_recv) > 0) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Wait for the non-blocking collective to complete + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & + & beta) + end if + + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_cswap_neighbor_topology_multivect + + + +subroutine psi_cswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_cswap_neighbor_topology_multivect_persistent' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) > 0) then + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & + & beta) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_cswap_neighbor_topology_multivect_persistent + + + subroutine psi_cswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_cswap_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_r_spk_, prc_rank, remote_disp, recv_count*n, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_cswap_rma_pull_multivect + + + subroutine psi_cswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_cswap_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_r_spk_, prc_rank, remote_disp, send_count*n, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_cswap_rma_push_multivect end submodule psi_c_swapdata_impl diff --git a/base/comm/internals/psi_cswapdata_a.F90 b/base/comm/internals/psi_cswapdata_a.F90 index 709a0d629..cab18b2be 100644 --- a/base/comm/internals/psi_cswapdata_a.F90 +++ b/base/comm/internals/psi_cswapdata_a.F90 @@ -39,7 +39,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D complex(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -70,10 +70,10 @@ ! ! ! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y(:,:) - complex The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -97,13 +97,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info -complex(psb_spk_) :: y(:,:), beta -complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -165,12 +166,13 @@ complex(psb_spk_), target :: work(:) #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info -complex(psb_spk_) :: y(:,:), beta -complex(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:,:) + complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv ! locals @@ -293,8 +295,8 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf ! swap elements using mpi_alltoallv call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_c_spk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_c_spk_,icomm,iret) + & psb_mpi_r_spk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_r_spk_,icomm,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -348,9 +350,9 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) end if rcv_pt = rcv_pt + n*nerv @@ -370,15 +372,15 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,iret) else call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,iret) end if @@ -401,7 +403,7 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -510,7 +512,7 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D complex(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -541,10 +543,10 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf ! ! ! n - integer Number of columns in Y - ! beta - complex Choose overwrite or sum. - ! y(:) - complex The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - complex Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -565,12 +567,13 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -648,7 +651,8 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:) complex(psb_spk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -775,8 +779,8 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf ! swap elements using mpi_alltoallv call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_c_spk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_c_spk_,icomm,iret) + & psb_mpi_r_spk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_r_spk_,icomm,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -830,9 +834,9 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) end if rcv_pt = rcv_pt + nerv @@ -852,16 +856,16 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,iret) else call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,iret) end if @@ -882,7 +886,7 @@ complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index 8c233e17e..ca390eccd 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D complex(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -59,12 +59,12 @@ ! ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: +! swap_status - integer Choose the algorithm for data exchange: ! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 +! swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 +! swap_sync = iand(swap_status,psb_swap_sync_) /= 0 +! swap_send = iand(swap_status,psb_swap_send_) /= 0 +! swap_recv = iand(swap_status,psb_swap_recv_) /= 0 ! if (swap_mpi): use underlying MPI_ALLTOALLV. ! if (swap_sync): use PSB_SND and PSB_RCV in ! synchronized pairs @@ -77,8 +77,8 @@ ! ! ! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y - type(psb_c_vect_type) The data area +! beta - real Choose overwrite or sum. +! y - type(psb_d_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. ! our own internal allocation. ! info - integer. return code. @@ -92,8 +92,9 @@ ! submodule (psi_c_comm_v_mod) psi_c_swaptran_impl use psb_base_mod + use psb_comm_factory_mod contains - module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_cswaptran_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -103,23 +104,19 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta - class(psb_c_base_vect_type), intent(inout) :: y - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name info = psb_success_ name = 'psi_cswaptran_vect' @@ -152,40 +149,64 @@ contains goto 9999 end if + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if - if (baseline) then - call psi_ctran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_ctran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + call psb_errpush(info,name,a_err='neighbor a2av tran') goto 9999 end if - else if (neighbor_a2av) then - call psi_ctran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_ctran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + call psb_errpush(info,name,a_err='persistent neighbor tran') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + case(psb_comm_rma_pull_) + call psi_ctran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_ctran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_ctran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select call psb_erractionrestore(err_act) return @@ -197,7 +218,7 @@ contains ! ! - ! Subroutine: psi_ctran_vidx_vect + ! Subroutine: psi_ctran_baseline_vect ! Data exchange among processes. ! ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods @@ -208,8 +229,9 @@ contains ! ! ! - module subroutine psi_ctran_baseline_vect(ctxt,flag,beta,y,idx,& - & num_neighbors,total_send,total_recv,info) + module subroutine psi_ctran_baseline_vect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) + #ifdef PSB_MPI_MOD use mpi #endif @@ -219,11 +241,12 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals @@ -231,6 +254,7 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& @@ -249,13 +273,19 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swaptran') + goto 9999 + end select + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n @@ -264,8 +294,8 @@ contains if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -276,12 +306,12 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) @@ -294,7 +324,7 @@ contains if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt call mpi_irecv(y%combuf(snd_pt),nesd,& & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do @@ -330,7 +360,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) @@ -341,7 +371,7 @@ contains if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),nerv,& & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -356,7 +386,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -368,7 +398,7 @@ contains if (debug) write(*,*) me,' wait' pnti = 1 - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) @@ -378,7 +408,7 @@ contains if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -386,7 +416,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -424,7 +454,7 @@ contains ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -433,7 +463,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -453,29 +485,31 @@ contains - subroutine psi_ctran_neighbor_topology_vect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_ctran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx + class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -483,9 +517,9 @@ contains info = psb_success_ - name = 'psi_cswap_trn_nbr_vect' + name = 'psi_ctran_neighbor_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -494,17 +528,30 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swaptran') + goto 9999 + end select - call idx%sync() + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran_vect: building topology' - call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -512,8 +559,12 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -521,70 +572,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' - call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() + ! Wait for device (important for GPU subclasses) + call y%device_wait() - if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_c_spk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & & psb_mpi_c_spk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: done' + if (debug) write(*,*) me,' nbr_vect: done' - end if + end if ! do_wait call psb_erractionrestore(err_act) return @@ -594,7 +656,9 @@ contains return end subroutine psi_ctran_neighbor_topology_vect - + + + ! ! ! @@ -605,7 +669,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,info,data) + module subroutine psi_cswaptran_multivect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -615,8 +679,8 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_multivect_type), intent(inout) :: y type(psb_desc_type),target :: desc_a integer(psb_ipk_), intent(out) :: info @@ -629,9 +693,8 @@ contains class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + integer(psb_ipk_) :: setflag + info = psb_success_ name = 'psi_cswaptran_multivect' @@ -641,7 +704,7 @@ contains icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -664,39 +727,73 @@ contains goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + setflag = swap_status + if (swap_status == psb_swap_start_) then + setflag = psb_comm_status_start_ + else if (swap_status == psb_swap_wait_) then + setflag = psb_comm_status_wait_ + else if ((iand(swap_status, psb_swap_send_) /= 0) .or. (iand(swap_status, psb_swap_recv_) /= 0) .or. & + & (iand(swap_status, psb_swap_mpi_) /= 0) .or. (iand(swap_status, psb_swap_sync_) /= 0)) then + setflag = psb_comm_status_sync_ + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + if ((setflag /= psb_comm_status_start_) .and. (setflag /= psb_comm_status_wait_) .and. & + & (setflag /= psb_comm_status_sync_)) then info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + call psb_errpush(info,name,a_err='Invalid swap_status') goto 9999 end if - if (baseline) then - call psi_ctran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 end if - else if (neighbor_a2av) then - call psi_ctran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + end if + + call y%comm_handle%set_swap_status(setflag, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') + goto 9999 + end if + + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_ctran_neighbor_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + call psb_errpush(info,name,a_err='neighbor a2av tran') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_ctran_neighbor_persistent_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_ctran_rma_pull_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_ctran_rma_push_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_ctran_baseline_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select call psb_erractionrestore(err_act) return @@ -706,22 +803,8 @@ contains return end subroutine psi_cswaptran_multivect - - ! - ! - ! Subroutine: psi_ctran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ctran_baseline_multivect(ctxt,flag,beta,y,idx,& - & num_neighbors,total_send,total_recv,info) + subroutine psi_ctran_baseline_multivect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -732,18 +815,20 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info class(psb_c_base_multivect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - integer(psb_ipk_), intent(out) :: info + class(psb_comm_handle_type), intent(inout) :: comm_handle ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& @@ -751,8 +836,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ctran_vidx_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -762,14 +847,20 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swaptran') + goto 9999 + end select + n = y%get_ncols() - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n @@ -778,8 +869,8 @@ contains if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -790,14 +881,14 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) @@ -807,7 +898,7 @@ contains if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt call mpi_irecv(y%combuf(snd_pt),n*nesd,& & psb_mpi_c_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd @@ -844,7 +935,7 @@ contains pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) @@ -854,7 +945,7 @@ contains if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),n*nerv,& & psb_mpi_c_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -870,7 +961,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -884,14 +975,14 @@ contains pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -899,7 +990,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -941,7 +1032,7 @@ contains ! ! Waited for com, cleanup comid ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -950,7 +1041,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -969,40 +1062,40 @@ contains end subroutine psi_ctran_baseline_multivect - - subroutine psi_ctran_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) - + subroutine psi_ctran_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta - class(psb_c_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - integer(psb_ipk_), intent(out) :: info + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name info = psb_success_ name = 'psi_ctran_neighbor_topology_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -1011,17 +1104,30 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swaptran') + goto 9999 + end select - call idx%sync() + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran_vect: building topology' - call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -1029,8 +1135,12 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -1038,70 +1148,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' - call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() + ! Wait for device (important for GPU subclasses) + call y%device_wait() - if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_c_spk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & & psb_mpi_c_spk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: done' + if (debug) write(*,*) me,' nbr_vect: done' - end if + end if ! do_wait call psb_erractionrestore(err_act) return @@ -1111,6 +1232,1336 @@ contains return end subroutine psi_ctran_neighbor_topology_multivect -end submodule psi_c_swaptran_impl - + + subroutine psi_ctran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ctran_neighbor_persistent_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes (we "send" recv data) + if (debug) write(*,*) my_rank,' tran_persistent_vect: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:topology_total_recv)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv counts in alltoallv_init + ! send = recv_indexes data with recv_counts/displs + ! recv = into send_indexes area with send_counts/displs + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_recv + 1), & + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_c_spk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_vect: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_neighbor_persistent_topology_vect + + + subroutine psi_ctran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! Effective sizes for transpose: + ! eff_send = total_recv (we expose recv_indexes data) + ! eff_recv = total_send (we GET into the send_indexes area) + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ctran_rma_pull_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_spk_, prc_rank, remote_disp, recv_count, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_rma_pull_vect + + + subroutine psi_ctran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ctran_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push our recv_indexes data to each peer's send_indexes area; notify after flush. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_r_spk_, prc_rank, remote_disp, send_count, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_rma_push_vect + + + subroutine psi_ctran_neighbor_persistent_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret, n + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ctran_neighbor_persistent_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor multivect swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:total_recv_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv in alltoallv_init + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_c_spk_, & + & y%combuf(total_recv_ + 1), & + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_c_spk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(total_recv_+1:total_recv_+total_send_), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_neighbor_persistent_topology_multivect + + + subroutine psi_ctran_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ctran_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull multivect') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_r_spk_, prc_rank, remote_disp, recv_count*n, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_rma_pull_multivect + + + subroutine psi_ctran_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ctran_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push multivect') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_r_spk_, prc_rank, remote_disp, send_count*n, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_rma_push_multivect + + +end submodule psi_c_swaptran_impl diff --git a/base/comm/internals/psi_cswaptran_a.F90 b/base/comm/internals/psi_cswaptran_a.F90 index 285a6a162..03f511975 100644 --- a/base/comm/internals/psi_cswaptran_a.F90 +++ b/base/comm/internals/psi_cswaptran_a.F90 @@ -30,7 +30,7 @@ ! ! ! -! File: psi_cswaptran.F90 +! File: psi_cswaptran_a.F90 ! ! Subroutine: psi_cswaptranm ! Implements the data exchange among processes. This is similar to Xswapdata, but @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D complex(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -74,10 +74,10 @@ ! ! ! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y(:,:) - complex The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -101,13 +101,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -149,7 +150,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +175,8 @@ contains integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta + complex(psb_spk_), intent(inout) :: y(:,:) + complex(psb_spk_), intent(in) :: beta complex(psb_spk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -305,8 +307,8 @@ contains ! swap elements using mpi_alltoallv call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_c_spk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_c_spk_,icomm,iret) + & psb_mpi_r_spk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_r_spk_,icomm,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -360,9 +362,9 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) end if rcv_pt = rcv_pt + n*nerv @@ -383,14 +385,14 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,iret) else call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,iret) end if @@ -413,7 +415,7 @@ contains nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -525,7 +527,7 @@ contains ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D complex(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -556,10 +558,10 @@ contains ! ! ! n - integer Number of columns in Y - ! beta - complex Choose overwrite or sum. - ! y(:) - complex The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - complex Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -579,12 +581,13 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta - complex(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + complex(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -659,7 +662,8 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta + complex(psb_spk_), intent(inout) :: y(:) + complex(psb_spk_), intent(in) :: beta complex(psb_spk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -791,8 +795,8 @@ contains ! swap elements using mpi_alltoallv call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_c_spk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_c_spk_,icomm,iret) + & psb_mpi_r_spk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_r_spk_,icomm,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -845,9 +849,9 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) end if rcv_pt = rcv_pt + nerv @@ -868,14 +872,14 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag, icomm,iret) else call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_spk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag, icomm,iret) end if @@ -896,7 +900,7 @@ contains proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_complex_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_dovrl_restr.f90 b/base/comm/internals/psi_dovrl_restr.f90 index 9bc9bed57..03e7a6209 100644 --- a/base/comm/internals/psi_dovrl_restr.f90 +++ b/base/comm/internals/psi_dovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_restr_a.f90 b/base/comm/internals/psi_dovrl_restr_a.f90 index f197251ba..39a644864 100644 --- a/base/comm/internals/psi_dovrl_restr_a.f90 +++ b/base/comm/internals/psi_dovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_save.f90 b/base/comm/internals/psi_dovrl_save.f90 index 16b376608..b191d788c 100644 --- a/base/comm/internals/psi_dovrl_save.f90 +++ b/base/comm/internals/psi_dovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_save_a.f90 b/base/comm/internals/psi_dovrl_save_a.f90 index 25d754d09..a6950076a 100644 --- a/base/comm/internals/psi_dovrl_save_a.f90 +++ b/base/comm/internals/psi_dovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_upd.f90 b/base/comm/internals/psi_dovrl_upd.f90 index 147fa47a6..a3f54e098 100644 --- a/base/comm/internals/psi_dovrl_upd.f90 +++ b/base/comm/internals/psi_dovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dovrl_upd_a.f90 b/base/comm/internals/psi_dovrl_upd_a.f90 index 5b81d0963..a3e99bb6e 100644 --- a/base/comm/internals/psi_dovrl_upd_a.f90 +++ b/base/comm/internals/psi_dovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index a19c17e39..922bff293 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -53,7 +53,7 @@ ! is scattered in the owned indices, and BETA=1. ! The first routine picks the desired exchange index list and passes it to the second. ! This version works on encapsulated vectors, and uses their methods to do GTH and SCT, -! so that special versions (i.e. GPU vectors can override them +! so that special versions (i.e. GPU vectors can override them) ! ! Arguments: ! swap_status - integer Swap status selector. @@ -84,7 +84,8 @@ submodule (psi_d_comm_v_mod) psi_d_swapdata_impl use psb_base_mod use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & - & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_ + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_handle_type use psb_comm_rma_mod, only: psb_comm_rma_handle use psb_comm_factory_mod @@ -99,24 +100,24 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: swap_status - class(psb_d_base_vect_type), intent(inout) :: y - real(psb_dpk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + class(psb_d_base_vect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_ - class(psb_i_base_vect_type), pointer :: comm_indexes + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes ! communication scheme/status selectors - logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent ! error handling variables - integer(psb_ipk_) :: err_act - character(len=30) :: name + integer(psb_ipk_) :: err_act + character(len=30) :: name info = psb_success_ name = 'psi_dswapdata_vect' @@ -508,26 +509,25 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: swap_status - real(psb_dpk_), intent(in) :: beta + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - class(psb_comm_handle_type), intent(inout) :: comm_handle - integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, my_rank - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical :: debug - character(len=30) :: name - - + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ name = 'psi_dswap_neighbor_topology_vect' @@ -584,20 +584,32 @@ contains buffer_size = topology_total_send + topology_total_recv if (buffer_size > 0) then - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if neighbor_comm_handle%comm_request = mpi_request_null - - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & neighbor_comm_handle%send_indexes, & - & y%combuf(1:topology_total_send)) + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do else - ! No data to send/recv: ensure request indicates idle state neighbor_comm_handle%comm_request = mpi_request_null end if @@ -608,16 +620,16 @@ contains if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & neighbor_comm_handle%comm_request, iret) + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) @@ -663,10 +675,29 @@ contains ! Scatter received data to local vector positions (polymorphic for GPU) if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & neighbor_comm_handle%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((1+pnti+psb_n_elem_recv_ < 1) .or. (nerv < 0) .or. & + & (1+pnti+psb_n_elem_recv_+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 + end do else ! nothing to wait/scatter end if @@ -722,8 +753,7 @@ contains logical :: do_start, do_wait logical :: debug character(len=30) :: name - - + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ name = 'psi_dswap_neighbor_persistent_topology_vect' @@ -820,11 +850,26 @@ contains neighbor_comm_handle%comm_request = mpi_request_null if (buffer_size > 0) then - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & neighbor_comm_handle%send_indexes, & - & y%combuf(1:topology_total_send)) + ! Gather send data into combuf using baseline-style gth calls + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data (baseline layout),', topology_total_send,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do else neighbor_comm_handle%persistent_in_flight = .false. end if @@ -841,7 +886,7 @@ contains & neighbor_comm_handle%send_counts, & & neighbor_comm_handle%send_displs, & & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer + & y%combuf(1), & ! recv buffer (baseline layout) & neighbor_comm_handle%recv_counts, & & neighbor_comm_handle%recv_displs, & & psb_mpi_r_dpk_, & @@ -906,12 +951,18 @@ contains end if neighbor_comm_handle%persistent_in_flight = .false. - ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & neighbor_comm_handle%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + ! Scatter received data to local vector positions (baseline-style sct) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data (baseline layout),', topology_total_recv,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + rcv_pt = 1+pnti+psb_n_elem_recv_ + if (nerv > 0) then + call y%sct(rcv_pt,nerv,comm_indexes,beta) + end if + pnti = pnti + nerv + nesd + 3 + end do end if call y%device_wait() @@ -955,6 +1006,8 @@ contains logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed type(psb_comm_rma_handle), pointer :: rma_handle character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n + info = psb_success_ name = 'psi_dswap_rma_pull_vect' @@ -1020,12 +1073,14 @@ contains if (buffer_size > 0) then if (.not. allocated(y%combuf)) then - call y%new_buffer(buffer_size, info) + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= psb_success_) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - else if (size(y%combuf) < buffer_size) then + else if (size(y%combuf) < size(comm_indexes%v)) then ! Need a larger exposed memory area: recreate the RMA window first, ! then reallocate combuf and lazily create a new window below. if (rma_handle%window_open) then @@ -1047,7 +1102,9 @@ contains rma_handle%window_ready = .false. rma_handle%win = mpi_win_null end if - call y%new_buffer(buffer_size, info) + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= psb_success_) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -1075,15 +1132,7 @@ contains end if call y%device_wait() - call mpi_win_lock_all(0, rma_handle%win, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - rma_handle%window_open = .true. - - ! Pull data from each peer. The metadata exchange stays local and simple. + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). do neighbor_idx=1, num_neighbors proc_to_comm = rma_handle%peer_proc(neighbor_idx) recv_count = rma_handle%peer_recv_counts(neighbor_idx) @@ -1106,6 +1155,12 @@ contains end if if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count, psb_mpi_r_dpk_, & & rma_handle%win, iret) @@ -1114,12 +1169,12 @@ contains call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if - end if - call mpi_win_flush(prc_rank, rma_handle%win, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if else if (send_count /= recv_count) then @@ -1133,18 +1188,8 @@ contains end if end if - ! WAIT phase: close the epoch and scatter the received slice back into Y. + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. if (do_wait) then - if (rma_handle%window_open) then - call mpi_win_unlock_all(rma_handle%win, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 - end if - rma_handle%window_open = .false. - end if - if (total_recv > 0) then call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) end if @@ -1184,6 +1229,7 @@ contains integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed type(psb_comm_rma_handle), pointer :: rma_handle character(len=30) :: name @@ -1252,12 +1298,14 @@ contains if (buffer_size > 0) then if (.not. allocated(y%combuf)) then - call y%new_buffer(buffer_size, info) + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= psb_success_) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - else if (size(y%combuf) < buffer_size) then + else if (size(y%combuf) < size(comm_indexes%v)) then ! Need a larger exposed memory area: recreate the RMA window first, ! then reallocate combuf and lazily create a new window below. if (rma_handle%window_open) then @@ -1279,7 +1327,9 @@ contains rma_handle%window_ready = .false. rma_handle%win = mpi_win_null end if - call y%new_buffer(buffer_size, info) + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= psb_success_) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -1307,6 +1357,25 @@ contains end if call y%device_wait() + ! Pre-post notification receives before opening the window (prevents isend/irecv ordering issues). + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + call mpi_win_lock_all(0, rma_handle%win, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -1315,7 +1384,7 @@ contains end if rma_handle%window_open = .true. - ! Push data to each peer. Only the base displacement and count are exchanged. + ! Push data to each peer; after flush send a P2P notification so target knows data arrived. do neighbor_idx=1, num_neighbors proc_to_comm = rma_handle%peer_proc(neighbor_idx) recv_count = rma_handle%peer_recv_counts(neighbor_idx) @@ -1353,6 +1422,13 @@ contains call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if else if (send_count /= recv_count) then info = psb_err_internal_error_ @@ -1365,7 +1441,7 @@ contains end if end if - ! WAIT phase: close the epoch and apply the receive-side scatter. + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. if (do_wait) then if (rma_handle%window_open) then call mpi_win_unlock_all(rma_handle%win, iret) @@ -1377,11 +1453,19 @@ contains rma_handle%window_open = .false. end if - call mpi_barrier(icomm, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) - goto 9999 + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if if (total_recv > 0) then @@ -1417,22 +1501,23 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: swap_status class(psb_d_base_multivect_type), intent(inout) :: y - real(psb_dpk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + real(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! communication scheme/status selectors - logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=30) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_mpk_) :: n, total_send_, total_recv_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name info = psb_success_ @@ -1487,6 +1572,10 @@ contains goto 9999 end if + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + baseline = .false. ineighbor_a2av = .false. ineighbor_a2av_persistent = .false. @@ -1495,10 +1584,20 @@ contains ineighbor_a2av = .true. case(psb_comm_persistent_ineighbor_alltoallv_) ineighbor_a2av_persistent = .true. - case(psb_comm_rma_pull_, psb_comm_rma_push_) - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='RMA swap is not yet enabled for multivectors') - goto 9999 + case(psb_comm_rma_pull_) + call psi_dswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_dswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if case default baseline = .true. end select @@ -1611,7 +1710,7 @@ subroutine psi_dswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & end if end if if (debug) write(*,*) my_rank,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_buffer(total_send_+total_recv_,info) call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) if (info /= psb_success_) then call psb_errpush(psb_err_alloc_dealloc_,name) @@ -1815,10 +1914,12 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in ! locals integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: np, my_rank, n integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + integer(psb_mpk_) :: total_send_, total_recv_ logical :: do_start, do_wait logical, parameter :: debug = .false. character(len=30) :: name @@ -1835,6 +1936,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in endif icomm = ctxt%get_mpic() + n = y%get_ncols() neighbor_comm_handle => null() select type(ch => comm_handle) @@ -1867,11 +1969,15 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in end if topology_total_send = neighbor_comm_handle%total_send topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n ! Buffer layout: ! combuf(1 : total_send) = send area ! combuf(total_send+1 : total_send+total_recv) = recv area - buffer_size = topology_total_send + topology_total_recv + buffer_size = total_send_ + total_recv_ if (buffer_size > 0) then call y%new_buffer(buffer_size, info) @@ -1887,7 +1993,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' call y%gth(int(topology_total_send,psb_mpk_), & & neighbor_comm_handle%send_indexes, & - & y%combuf(1:topology_total_send)) + & y%combuf(1:total_send_)) end if ! Wait for device (important for GPU subclasses) @@ -1901,9 +2007,9 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in & neighbor_comm_handle%send_counts, & & neighbor_comm_handle%send_displs, & & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & & psb_mpi_r_dpk_, & & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) @@ -1952,7 +2058,7 @@ subroutine psi_dswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' call y%sct(int(topology_total_recv,psb_mpk_), & & neighbor_comm_handle%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & y%combuf(total_send_+1:total_send_+total_recv_), & & beta) end if @@ -2001,10 +2107,11 @@ subroutine psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,bet ! locals integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: np, my_rank, n integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ logical :: do_start, do_wait logical, parameter :: debug = .false. character(len=30) :: name @@ -2021,6 +2128,7 @@ subroutine psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,bet endif icomm = ctxt%get_mpic() + n = y%get_ncols() neighbor_comm_handle => null() select type(ch => comm_handle) @@ -2062,7 +2170,7 @@ subroutine psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,bet ! Buffer layout: ! combuf(1 : total_send) = send area ! combuf(total_send+1 : total_send+total_recv) = recv area - buffer_size = topology_total_send + topology_total_recv + buffer_size = total_send_ + total_recv_ if (buffer_size > 0) then if (.not. allocated(y%combuf)) then @@ -2104,7 +2212,7 @@ subroutine psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,bet if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' call y%gth(int(topology_total_send,psb_mpk_), & & neighbor_comm_handle%send_indexes, & - & y%combuf(1:topology_total_send)) + & y%combuf(1:total_send_)) else neighbor_comm_handle%persistent_in_flight = .false. end if @@ -2117,12 +2225,12 @@ subroutine psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,bet if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' call mpi_neighbor_alltoallv_init( & & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & & psb_mpi_r_dpk_, & & neighbor_comm_handle%graph_comm, & & mpi_info_null, & @@ -2183,7 +2291,7 @@ subroutine psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,bet if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' call y%sct(int(topology_total_recv,psb_mpk_), & & neighbor_comm_handle%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & y%combuf(total_send_+1:total_send_+total_recv_), & & beta) else neighbor_comm_handle%persistent_in_flight = .false. @@ -2203,5 +2311,436 @@ subroutine psi_dswap_neighbor_topology_multivect_persistent(ctxt,swap_status,bet end subroutine psi_dswap_neighbor_topology_multivect_persistent + subroutine psi_dswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_dswap_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count*n, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dswap_rma_pull_multivect + + + subroutine psi_dswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_dswap_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_r_dpk_, prc_rank, remote_disp, send_count*n, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dswap_rma_push_multivect + + end submodule psi_d_swapdata_impl diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index 135e5f493..f16a944fa 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -104,23 +104,20 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: swap_status - real(psb_dpk_), intent(in) :: beta - class(psb_d_base_vect_type), intent(inout) :: y - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ - class(psb_i_base_vect_type), pointer :: comm_indexes + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name - ! local variables used to detect the communication scheme - logical :: baseline, neighbor_a2av - info = psb_success_ name = 'psi_dswaptran_vect' call psb_erractionsave(err_act) @@ -174,33 +171,42 @@ contains goto 9999 end if - baseline = .false. - neighbor_a2av = .false. select case(y%comm_handle%comm_type) - case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) - neighbor_a2av = .true. - case default - baseline = .true. - end select - - if (baseline) then - call psi_dtran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + case(psb_comm_ineighbor_alltoallv_) + call psi_dtran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') goto 9999 end if - else if (neighbor_a2av) then - call psi_dtran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_dtran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& & num_neighbors,total_send,total_recv,y%comm_handle,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible swap_status settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + case(psb_comm_rma_pull_) + call psi_dtran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_dtran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_dtran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select call psb_erractionrestore(err_act) return @@ -687,8 +693,6 @@ contains class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name - ! local variables used to detect the communication scheme - logical :: baseline, neighbor_a2av integer(psb_ipk_) :: setflag @@ -754,33 +758,42 @@ contains goto 9999 end if - baseline = .false. - neighbor_a2av = .false. select case(y%comm_handle%comm_type) - case(psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_) - neighbor_a2av = .true. - case default - baseline = .true. - end select - - if (baseline) then - call psi_dtran_baseline_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + case(psb_comm_ineighbor_alltoallv_) + call psi_dtran_neighbor_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') + goto 9999 + end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_dtran_neighbor_persistent_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') goto 9999 end if - else if (neighbor_a2av) then - call psi_dtran_neighbor_topology_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,& - & total_send,total_recv,y%comm_handle,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + case(psb_comm_rma_pull_) + call psi_dtran_rma_pull_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible swap_status settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + case(psb_comm_rma_push_) + call psi_dtran_rma_push_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_dtran_baseline_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select call psb_erractionrestore(err_act) return @@ -1221,4 +1234,1334 @@ contains + subroutine psi_dtran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_dtran_neighbor_persistent_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes (we "send" recv data) + if (debug) write(*,*) my_rank,' tran_persistent_vect: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:topology_total_recv)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv counts in alltoallv_init + ! send = recv_indexes data with recv_counts/displs + ! recv = into send_indexes area with send_counts/displs + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_vect: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dtran_neighbor_persistent_topology_vect + + + subroutine psi_dtran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! Effective sizes for transpose: + ! eff_send = total_recv (we expose recv_indexes data) + ! eff_recv = total_send (we GET into the send_indexes area) + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_dtran_rma_pull_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dtran_rma_pull_vect + + + subroutine psi_dtran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_dtran_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push our recv_indexes data to each peer's send_indexes area; notify after flush. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_r_dpk_, prc_rank, remote_disp, send_count, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dtran_rma_push_vect + + + subroutine psi_dtran_neighbor_persistent_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret, n + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_dtran_neighbor_persistent_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor multivect swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:total_recv_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv in alltoallv_init + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_recv_ + 1), & + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(total_recv_+1:total_recv_+total_send_), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dtran_neighbor_persistent_topology_multivect + + + subroutine psi_dtran_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_dtran_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull multivect') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count*n, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dtran_rma_pull_multivect + + + subroutine psi_dtran_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_dtran_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push multivect') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_r_dpk_, prc_rank, remote_disp, send_count*n, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_dtran_rma_push_multivect + + end submodule psi_d_swaptran_impl diff --git a/base/comm/internals/psi_eovrl_restr_a.f90 b/base/comm/internals/psi_eovrl_restr_a.f90 index 2fe2b7881..960ebb4d1 100644 --- a/base/comm/internals/psi_eovrl_restr_a.f90 +++ b/base/comm/internals/psi_eovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_eovrl_save_a.f90 b/base/comm/internals/psi_eovrl_save_a.f90 index 41e9e5198..23cae9220 100644 --- a/base/comm/internals/psi_eovrl_save_a.f90 +++ b/base/comm/internals/psi_eovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_eovrl_upd_a.f90 b/base/comm/internals/psi_eovrl_upd_a.f90 index 0b6e6f9db..d3caaae33 100644 --- a/base/comm/internals/psi_eovrl_upd_a.f90 +++ b/base/comm/internals/psi_eovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_eswapdata_a.F90 b/base/comm/internals/psi_eswapdata_a.F90 index 5285b4640..122863ae6 100644 --- a/base/comm/internals/psi_eswapdata_a.F90 +++ b/base/comm/internals/psi_eswapdata_a.F90 @@ -39,7 +39,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_epk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -70,10 +70,10 @@ ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:,:) - integer The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -97,13 +97,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info -integer(psb_epk_) :: y(:,:), beta -integer(psb_epk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -165,12 +166,13 @@ integer(psb_epk_), target :: work(:) #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info -integer(psb_epk_) :: y(:,:), beta -integer(psb_epk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:,:) + integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv ! locals @@ -348,7 +350,7 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& & psb_mpi_epk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) @@ -370,7 +372,7 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then call mpi_rsend(sndbuf(snd_pt),n*nesd,& @@ -401,7 +403,7 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -510,7 +512,7 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D integer(psb_epk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -541,10 +543,10 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf ! ! ! n - integer Number of columns in Y - ! beta - integer Choose overwrite or sum. - ! y(:) - integer The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - integer Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -565,12 +567,13 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta - integer(psb_epk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -648,7 +651,8 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:) integer(psb_epk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -830,7 +834,7 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),nerv,& & psb_mpi_epk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) @@ -852,7 +856,7 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then @@ -882,7 +886,7 @@ integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_eswaptran_a.F90 b/base/comm/internals/psi_eswaptran_a.F90 index c095f7084..0c3f0c248 100644 --- a/base/comm/internals/psi_eswaptran_a.F90 +++ b/base/comm/internals/psi_eswaptran_a.F90 @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_epk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -74,10 +74,10 @@ ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:,:) - integer The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -101,13 +101,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta - integer(psb_epk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -149,7 +150,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +175,8 @@ contains integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta + integer(psb_epk_), intent(inout) :: y(:,:) + integer(psb_epk_), intent(in) :: beta integer(psb_epk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -360,7 +362,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),n*nesd,& & psb_mpi_epk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) @@ -383,7 +385,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& & psb_mpi_epk_,prcid(i),& @@ -413,7 +415,7 @@ contains nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -525,7 +527,7 @@ contains ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D integer(psb_epk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -556,10 +558,10 @@ contains ! ! ! n - integer Number of columns in Y - ! beta - integer Choose overwrite or sum. - ! y(:) - integer The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - integer Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -579,12 +581,13 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta - integer(psb_epk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + integer(psb_epk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -659,7 +662,8 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta + integer(psb_epk_), intent(inout) :: y(:) + integer(psb_epk_), intent(in) :: beta integer(psb_epk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -845,7 +849,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),nesd,& & psb_mpi_epk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) @@ -868,7 +872,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),nerv,& & psb_mpi_epk_,prcid(i),& @@ -896,7 +900,7 @@ contains proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int8_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_i2ovrl_restr_a.f90 b/base/comm/internals/psi_i2ovrl_restr_a.f90 index 49cf864d1..8272e68b9 100644 --- a/base/comm/internals/psi_i2ovrl_restr_a.f90 +++ b/base/comm/internals/psi_i2ovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_i2ovrl_save_a.f90 b/base/comm/internals/psi_i2ovrl_save_a.f90 index 09c0cd19e..ca81d36d0 100644 --- a/base/comm/internals/psi_i2ovrl_save_a.f90 +++ b/base/comm/internals/psi_i2ovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_i2ovrl_upd_a.f90 b/base/comm/internals/psi_i2ovrl_upd_a.f90 index 82d52fdf5..2d9f57b85 100644 --- a/base/comm/internals/psi_i2ovrl_upd_a.f90 +++ b/base/comm/internals/psi_i2ovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_i2swapdata_a.F90 b/base/comm/internals/psi_i2swapdata_a.F90 index cb368d540..e8713aa3f 100644 --- a/base/comm/internals/psi_i2swapdata_a.F90 +++ b/base/comm/internals/psi_i2swapdata_a.F90 @@ -39,7 +39,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_i2pk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -70,10 +70,10 @@ ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:,:) - integer The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -97,13 +97,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info -integer(psb_i2pk_) :: y(:,:), beta -integer(psb_i2pk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -165,12 +166,13 @@ integer(psb_i2pk_), target :: work(:) #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info -integer(psb_i2pk_) :: y(:,:), beta -integer(psb_i2pk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:,:) + integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv ! locals @@ -348,7 +350,7 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& & psb_mpi_i2pk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) @@ -370,7 +372,7 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then call mpi_rsend(sndbuf(snd_pt),n*nesd,& @@ -401,7 +403,7 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -510,7 +512,7 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D integer(psb_i2pk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -541,10 +543,10 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf ! ! ! n - integer Number of columns in Y - ! beta - integer Choose overwrite or sum. - ! y(:) - integer The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - integer Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -565,12 +567,13 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta - integer(psb_i2pk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -648,7 +651,8 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:) integer(psb_i2pk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -830,7 +834,7 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),nerv,& & psb_mpi_i2pk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) @@ -852,7 +856,7 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then @@ -882,7 +886,7 @@ integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_i2swaptran_a.F90 b/base/comm/internals/psi_i2swaptran_a.F90 index 3244dd66b..f04e7a2b4 100644 --- a/base/comm/internals/psi_i2swaptran_a.F90 +++ b/base/comm/internals/psi_i2swaptran_a.F90 @@ -30,7 +30,7 @@ ! ! ! -! File: psi_i2swaptran.F90 +! File: psi_i2swaptran_a.F90 ! ! Subroutine: psi_i2swaptranm ! Implements the data exchange among processes. This is similar to Xswapdata, but @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_i2pk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -74,10 +74,10 @@ ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:,:) - integer The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -101,13 +101,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta - integer(psb_i2pk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -149,7 +150,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +175,8 @@ contains integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta + integer(psb_i2pk_), intent(inout) :: y(:,:) + integer(psb_i2pk_), intent(in) :: beta integer(psb_i2pk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -360,7 +362,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),n*nesd,& & psb_mpi_i2pk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) @@ -383,7 +385,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& & psb_mpi_i2pk_,prcid(i),& @@ -413,7 +415,7 @@ contains nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -525,7 +527,7 @@ contains ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D integer(psb_i2pk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -556,10 +558,10 @@ contains ! ! ! n - integer Number of columns in Y - ! beta - integer Choose overwrite or sum. - ! y(:) - integer The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - integer Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -579,12 +581,13 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta - integer(psb_i2pk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + integer(psb_i2pk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -659,7 +662,8 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), intent(inout) :: y(:) + integer(psb_i2pk_), intent(in) :: beta integer(psb_i2pk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -845,7 +849,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),nesd,& & psb_mpi_i2pk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) @@ -868,7 +872,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),nerv,& & psb_mpi_i2pk_,prcid(i),& @@ -896,7 +900,7 @@ contains proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int2_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_iovrl_restr.f90 b/base/comm/internals/psi_iovrl_restr.f90 index 838b7e50b..21d8b23bf 100644 --- a/base/comm/internals/psi_iovrl_restr.f90 +++ b/base/comm/internals/psi_iovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_iovrl_save.f90 b/base/comm/internals/psi_iovrl_save.f90 index ed84f7b1b..21eae3510 100644 --- a/base/comm/internals/psi_iovrl_save.f90 +++ b/base/comm/internals/psi_iovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_iovrl_upd.f90 b/base/comm/internals/psi_iovrl_upd.f90 index 6873e3d34..d77747b73 100644 --- a/base/comm/internals/psi_iovrl_upd.f90 +++ b/base/comm/internals/psi_iovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index 4d749ce62..43cd54c40 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -41,7 +41,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_ipk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -53,30 +53,22 @@ ! is scattered in the owned indices, and BETA=1. ! The first routine picks the desired exchange index list and passes it to the second. ! This version works on encapsulated vectors, and uses their methods to do GTH and SCT, -! so that special versions (i.e. GPU vectors can override them +! so that special versions (i.e. GPU vectors can override them) ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) +! swap_status - integer Swap status selector. +! It is interpreted as a communication status: +! psb_comm_status_start_ -> START phase +! psb_comm_status_wait_ -> WAIT phase +! psb_comm_status_unknown_ -> START+WAIT +! The communication scheme is selected from +! y%comm_handle%comm_type. ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. +! beta - real Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area -! desc_a - type(psb_desc_type). The communication descriptor. +! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -88,10 +80,18 @@ ! ! submodule (psi_i_comm_v_mod) psi_i_swapdata_impl + use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod + use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_handle_type + use psb_comm_rma_mod, only: psb_comm_rma_handle + use psb_comm_factory_mod + contains - subroutine psi_iswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_iswapdata_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -100,31 +100,32 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: swap_status + class(psb_i_base_vect_type), intent(inout) :: y + integer(psb_ipk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + ! error handling variables + integer(psb_ipk_) :: err_act + character(len=30) :: name info = psb_success_ name = 'psi_iswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -132,7 +133,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info = psb_err_invalid_cd_state_ + info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -145,124 +146,166 @@ contains call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if - if (baseline) then - call psi_iswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + + select case(y%comm_handle%comm_type) + case(psb_comm_isend_irecv_) + call psi_iswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if - else if (neighbor_a2av) then - call psi_iswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + case(psb_comm_ineighbor_alltoallv_) + call psi_iswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + call psb_errpush(info,name,a_err='neighbor nonblocking swap') goto 9999 end if - else + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_iswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_iswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_iswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if + case default info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') goto 9999 - end if + end select call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) - return end subroutine psi_iswapdata_vect - subroutine psi_iswap_baseline_vect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) - + subroutine psi_iswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti, n + logical :: do_send,do_recv + logical, parameter :: usersend=.false. + logical :: debug + character(len=20) :: name info = psb_success_ - name = 'psi_iswap_vidx_vect' + name = 'psi_iswap_baseline_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif + icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = total_recv * n - totsnd_ = total_send * n + do_send = (swap_status == psb_comm_status_start_).or.(swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_).or.(swap_status == psb_comm_status_sync_) + + total_recv_ = total_recv * n + total_send_ = total_send * n call comm_indexes%sync() - if (debug) write(*,*) me,'Internal buffer' + if (debug) write(*,*) my_rank,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + call psb_errpush(info,name,a_err='Unfinished communication? Something is wrong....') goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 @@ -273,16 +316,16 @@ contains rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_int_swap_tag + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' Gather ' + if (debug) write(*,*) my_rank,' Gather ' ! ! Then gather for sending. ! @@ -293,6 +336,16 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -302,7 +355,7 @@ contains ! call y%device_wait() - if (debug) write(*,*) me,' isend' + if (debug) write(*,*) my_rank,' isend' ! ! Then send ! @@ -310,7 +363,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_int_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -318,10 +371,10 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if ((nesd>0).and.(proc_to_comm /= me)) then + if ((nesd>0).and.(proc_to_comm /= my_rank)) then call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -335,8 +388,8 @@ contains end if if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -346,9 +399,9 @@ contains end if call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' pnti = 1 - p2ptag = psb_int_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -356,9 +409,9 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (proc_to_comm /= me)then + if (proc_to_comm /= my_rank)then if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -366,25 +419,25 @@ contains end if end if if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if end if - else if (proc_to_comm == me) then + else if (proc_to_comm == my_rank) then if (nesd /= nerv) then write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd end if y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' scatter' + if (debug) write(*,*) my_rank,' scatter' pnti = 1 snd_pt = 1 rcv_pt = 1 @@ -396,29 +449,43 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) + if ((idx_pt < 1) .or. (nerv < 0) .or. (idx_pt+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + + if (debug) write(*,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) call y%sct(rcv_pt,nerv,comm_indexes,beta) - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do + ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device ! - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' call y%device_wait() - if (debug) write(*,*) me,' free buffer' + if (debug) write(*,*) my_rank,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call y%comm_handle%free(info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - if (debug) write(*,*) me,' done' + if (debug) write(*,*) my_rank,' done' end if @@ -432,7 +499,8 @@ contains - subroutine psi_iswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + subroutine psi_iswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -441,28 +509,30 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name - + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ name = 'psi_iswap_neighbor_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -471,8 +541,24 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() @@ -480,59 +566,77 @@ contains ! START phase: build topology (if needed), gather, post MPI ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if - - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Buffer layout: ! combuf(1 : total_send) = send area ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (buffer_size > 0) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + neighbor_comm_handle%comm_request = mpi_request_null + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%comm_request = mpi_request_null end if - y%communication_handle = mpi_request_null - - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) ! Wait for device (important for GPU subclasses) call y%device_wait() ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & & y%combuf(1), & ! send buffer - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null end if end if ! do_start @@ -542,42 +646,72 @@ contains ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then - ! No matching start? Something is wrong - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%comm_request = mpi_request_null + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + write(psb_err_unit,*) my_rank, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & + & neighbor_comm_handle%is_initialized + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if - ! Wait for the non-blocking collective to complete - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((1+pnti+psb_n_elem_recv_ < 1) .or. (nerv < 0) .or. & + & (1+pnti+psb_n_elem_recv_+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 + end do + else + ! nothing to wait/scatter end if - ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) - ! Clean up - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_vect: done' + if (debug) write(*,*) my_rank,' nbr_vect: done' end if ! do_wait @@ -591,102 +725,250 @@ contains - - - - - - module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,info,data) + subroutine psi_iswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta - class(psb_i_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ - name = 'psi_iswapdata_multivect' + name = 'psi_iswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info = psb_err_context_error_ + info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then - info = psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif + icomm = ctxt%get_mpic() - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swap') + goto 9999 + end select - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 - end if + call comm_indexes%sync() - if (baseline) then - call psi_iswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') goto 9999 end if - else if (neighbor_a2av) then - call psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') - goto 9999 + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into combuf using baseline-style gth calls + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data (baseline layout),', topology_total_send,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Lazy persistent-init: build the request once, then reuse with START/WAIT. + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Scatter received data to local vector positions (baseline-style sct) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data (baseline layout),', topology_total_recv,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + rcv_pt = 1+pnti+psb_n_elem_recv_ + if (nerv > 0) then + call y%sct(rcv_pt,nerv,comm_indexes,beta) + end if + pnti = pnti + nerv + nesd + 3 + end do + end if + + call y%device_wait() + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait call psb_erractionrestore(err_act) return @@ -694,12 +976,10 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_iswapdata_multivect - + end subroutine psi_iswap_neighbor_persistent_topology_vect - subroutine psi_iswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_iswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -708,244 +988,1105 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta - class(psb_i_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv - integer(psb_ipk_), intent(out) :: info + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_) :: icomm - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name info = psb_success_ - name = 'psi_iswap_baseline_multivect' + name = 'psi_iswap_rma_pull_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 - endif + end if icomm = ctxt%get_mpic() - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select - totrcv_ = total_recv * n - totsnd_ = total_send * n + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + ! START phase: build the layout once, prepare the exposed buffer, then issue RMA. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null - call psb_realloc(num_neighbors,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_int_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,comm_indexes) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Expose combuf once and keep the window around until the descriptor changes. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if ((recv_pos < 1) .or. (recv_count < 0) .or. (recv_pos+max(0,recv_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull local receive bounds error') + goto 9999 + end if + + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_ipk_, prc_rank, remote_disp, recv_count, psb_mpi_ipk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if - ! - ! Then wait for device - ! call y%device_wait() + end if - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! + call psb_erractionrestore(err_act) + return - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_iswap_rma_pull_vect + + + subroutine psi_iswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_ipk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_iswap_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! START phase: identical layout handling, but the remote metadata describes the receive side. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 end if - call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_int_swap_tag - do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_open = .false. end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + end if - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Keep the window alive across repetitions: it is created once and reused. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window (prevents isend/irecv ordering issues). + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push data to each peer; after flush send a P2P notification so target knows data arrived. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if ((send_pos < 1) .or. (send_count < 0) .or. (send_pos+max(0,send_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push local send bounds error') + goto 9999 + end if + + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_ipk_, prc_rank, remote_disp, send_count, psb_mpi_ipk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if + + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_iswap_rma_push_vect + + + + ! + ! + ! Subroutine: psi_iswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_iswapdata_multivect(swap_status,beta,y,desc_a,info,data) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + integer(psb_ipk_), intent(in) :: swap_status + class(psb_i_base_multivect_type), intent(inout) :: y + integer(psb_ipk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_mpk_) :: n, total_send_, total_recv_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name + + + info = psb_success_ + name = 'psi_iswapdata_multivect' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + if ((swap_status /= psb_comm_status_start_) .and. (swap_status /= psb_comm_status_wait_) & + & .and. (swap_status /= psb_comm_status_unknown_)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if + + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') + goto 9999 + end if + + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + baseline = .false. + ineighbor_a2av = .false. + ineighbor_a2av_persistent = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + ineighbor_a2av = .true. + case(psb_comm_persistent_ineighbor_alltoallv_) + ineighbor_a2av_persistent = .true. + case(psb_comm_rma_pull_) + call psi_iswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_iswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if + case default + baseline = .true. + end select + + if (baseline) then + call psi_iswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (ineighbor_a2av) then + call psi_iswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor nonblocking swap') + goto 9999 + end if + else if (ineighbor_a2av_persistent) then + call psi_iswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_iswapdata_multivect + + + + +subroutine psi_iswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti + logical :: do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info = psb_success_ + name = 'psi_iswap_baseline_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + n = y%get_ncols() + + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swap') + goto 9999 + end select + + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + total_recv_ = total_recv * n + total_send_ = total_send * n + + call comm_indexes%sync() + + if (debug) write(*,*) my_rank,'Internal buffer' + if (do_send) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + end if + if (debug) write(*,*) my_rank,'do_send start' + call y%new_buffer(total_send_+total_recv_,info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + baseline_comm_handle%comid = mpi_request_null + call psb_realloc(num_neighbors,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) my_rank,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) my_rank,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= my_rank)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if + + if (do_recv) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then + ! + ! No matching send? Something is wrong.... ! - y%comid = mpi_request_null + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(num_neighbors,prcid,info) + + if (debug) write(*,*) my_rank,' wait' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= my_rank)then + if (nesd>0) then + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (nerv>0) then + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else if (proc_to_comm == my_rank) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) my_rank,' scatter' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + baseline_comm_handle%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) my_rank,' wait' + call y%device_wait() + if (debug) write(*,*) my_rank,' free buffer' + call y%free_buffer(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' done' + end if + + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_iswap_baseline_multivect + + + +subroutine psi_iswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_iswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if ((topology_total_send + topology_total_recv) > 0) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Wait for the non-blocking collective to complete + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' done' end if + ! Scatter received data to local vector positions (polymorphic for GPU) + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & + & beta) + end if - call psb_erractionrestore(err_act) - return -9999 call psb_error_handler(ctxt,err_act) + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' - return - end subroutine psi_iswap_baseline_multivect + end if ! do_wait + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return +end subroutine psi_iswap_neighbor_topology_multivect -subroutine psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +subroutine psi_iswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -955,36 +2096,52 @@ subroutine psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_multivect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: np, my_rank, n integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ logical :: do_start, do_wait logical, parameter :: debug = .false. character(len=30) :: name info = psb_success_ - name = 'psi_iswap_neighbor_topology_multivect' + name = 'psi_iswap_neighbor_topology_multivect_persistent' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) call comm_indexes%sync() @@ -992,60 +2149,115 @@ subroutine psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n ! START phase: build topology (if needed), gather, post MPI ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & & ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if - - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Buffer layout: ! combuf(1 : total_send) = send area ! combuf(total_send+1 : total_send+total_recv) = recv area - buffer_size = topology_total_send + topology_total_recv + buffer_size = total_send_ + total_recv_ - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + if (buffer_size > 0) then + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if ! Wait for device (important for GPU subclasses) call y%device_wait() - ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. end if end if ! do_start @@ -1055,42 +2267,38 @@ subroutine psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then - ! No matching start? Something is wrong - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 - end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + if ((topology_total_send + topology_total_recv) > 0) then + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if - ! Wait for the non-blocking collective to complete - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. - ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & & beta) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if - - ! Clean up - y%communication_handle = mpi_request_null call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - if (debug) write(*,*) me,' nbr_vect: done' + if (debug) write(*,*) my_rank,' nbr_vect: done' end if ! do_wait @@ -1100,10 +2308,438 @@ subroutine psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,n 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_iswap_neighbor_topology_multivect +end subroutine psi_iswap_neighbor_topology_multivect_persistent + + + subroutine psi_iswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_iswap_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_ipk_, prc_rank, remote_disp, recv_count*n, psb_mpi_ipk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_iswap_rma_pull_multivect + + + subroutine psi_iswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_iswap_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_ipk_, prc_rank, remote_disp, send_count*n, psb_mpi_ipk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_iswap_rma_push_multivect end submodule psi_i_swapdata_impl diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index 2e540bb39..4b7f7ffb7 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_ipk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -59,12 +59,12 @@ ! ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: +! swap_status - integer Choose the algorithm for data exchange: ! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 +! swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 +! swap_sync = iand(swap_status,psb_swap_sync_) /= 0 +! swap_send = iand(swap_status,psb_swap_send_) /= 0 +! swap_recv = iand(swap_status,psb_swap_recv_) /= 0 ! if (swap_mpi): use underlying MPI_ALLTOALLV. ! if (swap_sync): use PSB_SND and PSB_RCV in ! synchronized pairs @@ -77,9 +77,10 @@ ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y - type(psb_i_vect_type) The data area +! beta - real Choose overwrite or sum. +! y - type(psb_d_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. +! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -89,10 +90,11 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -submodule (psi_i_comm_v_mod) psi_i_swaptran_impl +submodule (psi_i_comm_v_mod) psi_i_swaptran_impl use psb_base_mod + use psb_comm_factory_mod contains - module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_iswaptran_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -102,21 +104,19 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: y - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ - class(psb_i_base_vect_type), pointer :: comm_indexes - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name info = psb_success_ name = 'psi_iswaptran_vect' @@ -143,34 +143,71 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - ! choose baseline or neighbor-topology algorithm - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start= iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - - if (baseline) then - call psi_itran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else if (neighbor_a2av) then - call psi_itran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else - call psb_errpush(psb_err_mpi_error_,name,a_err='Incompatible flag settings') + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if + + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_itran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') + goto 9999 + end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_itran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_itran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_itran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_itran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select + call psb_erractionrestore(err_act) return @@ -181,7 +218,7 @@ contains ! ! - ! Subroutine: psi_itran_vidx_vect + ! Subroutine: psi_itran_baseline_vect ! Data exchange among processes. ! ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods @@ -192,8 +229,8 @@ contains ! ! ! - subroutine psi_itran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + module subroutine psi_itran_baseline_vect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -204,11 +241,12 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals @@ -216,7 +254,8 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -228,29 +267,35 @@ contains call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info = psb_err_context_error_ + info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swaptran') + goto 9999 + end select + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - totrcv_ = total_recv * n - totsnd_ = total_send * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call comm_indexes%sync() + call idx%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -260,17 +305,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(idx%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - p2ptag = psb_int_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -279,7 +324,7 @@ contains if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt call mpi_irecv(y%combuf(snd_pt),nesd,& & psb_mpi_ipk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do @@ -291,13 +336,13 @@ contains pnti = 1 snd_pt = 1 do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,comm_indexes) + call y%gth(idx_pt,nerv,idx) pnti = pnti + nerv + nesd + 3 end do @@ -315,18 +360,18 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_int_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),nerv,& & psb_mpi_ipk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -341,7 +386,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -353,17 +398,17 @@ contains if (debug) write(*,*) me,' wait' pnti = 1 - p2ptag = psb_int_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -371,7 +416,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -394,22 +439,22 @@ contains snd_pt = 1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,comm_indexes,beta) + call y%sct(snd_pt,nesd,idx,beta) pnti = pnti + nerv + nesd + 3 end do ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -418,7 +463,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -437,27 +484,32 @@ contains end subroutine psi_itran_baseline_vect - subroutine psi_itran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + + + subroutine psi_itran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -467,7 +519,7 @@ contains info = psb_success_ name = 'psi_itran_neighbor_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -476,25 +528,43 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swaptran') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') goto 9999 end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -502,70 +572,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran: gathering send data,', topology_total_send,' elems' - ! For tran we gather from recv_indexes (swap of roles) - call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() - - if (debug) write(*,*) me,' nbr_tran: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_ipk_, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_ipk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran: scattering recv data,', topology_total_recv,' elems' - ! For tran we scatter into send_indexes (swap of roles) - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran: done' - end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait call psb_erractionrestore(err_act) return @@ -577,7 +658,18 @@ contains - module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,info,data) + + ! + ! + ! + ! + ! Subroutine: psi_iswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_iswaptran_multivect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -587,13 +679,12 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_multivect_type), intent(inout) :: y type(psb_desc_type),target :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data - ! locals type(psb_ctxt_type) :: ctxt @@ -602,9 +693,8 @@ contains class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name - ! local variables for communication - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + integer(psb_ipk_) :: setflag + info = psb_success_ name = 'psi_iswaptran_multivect' @@ -614,7 +704,7 @@ contains icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -631,33 +721,80 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start= iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - - if (baseline) then - call psi_itran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else if (neighbor_a2av) then - call psi_itran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else - call psb_errpush(psb_err_mpi_error_,name,a_err='Incompatible flag settings') + setflag = swap_status + if (swap_status == psb_swap_start_) then + setflag = psb_comm_status_start_ + else if (swap_status == psb_swap_wait_) then + setflag = psb_comm_status_wait_ + else if ((iand(swap_status, psb_swap_send_) /= 0) .or. (iand(swap_status, psb_swap_recv_) /= 0) .or. & + & (iand(swap_status, psb_swap_mpi_) /= 0) .or. (iand(swap_status, psb_swap_sync_) /= 0)) then + setflag = psb_comm_status_sync_ + end if + + if ((setflag /= psb_comm_status_start_) .and. (setflag /= psb_comm_status_wait_) .and. & + & (setflag /= psb_comm_status_sync_)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status') + goto 9999 + end if + + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + call y%comm_handle%set_swap_status(setflag, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_itran_neighbor_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') + goto 9999 + end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_itran_neighbor_persistent_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_itran_rma_pull_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_itran_rma_push_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_itran_baseline_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select + call psb_erractionrestore(err_act) return @@ -666,9 +803,8 @@ contains return end subroutine psi_iswaptran_multivect - - module subroutine psi_itran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + subroutine psi_itran_baseline_multivect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -679,19 +815,21 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info class(psb_i_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - integer(psb_ipk_), intent(out) :: info + class(psb_comm_handle_type), intent(inout) :: comm_handle ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -699,34 +837,40 @@ contains character(len=20) :: name info = psb_success_ - name = 'psi_itran_baseline_multivect' + name = 'psi_itran_vidx_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info = psb_err_context_error_ + info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swaptran') + goto 9999 + end select + n = y%get_ncols() - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - totrcv_ = total_recv * n - totsnd_ = total_send * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call comm_indexes%sync() + call idx%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -736,25 +880,25 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(idx%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_int_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt call mpi_irecv(y%combuf(snd_pt),n*nesd,& & psb_mpi_ipk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd @@ -766,13 +910,13 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) + call y%gth(idx_pt,rcv_pt,nerv,idx) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -789,19 +933,19 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_int_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),n*nerv,& & psb_mpi_ipk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -817,7 +961,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -829,16 +973,16 @@ contains if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_int_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -846,7 +990,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -868,17 +1012,17 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -888,7 +1032,7 @@ contains ! ! Waited for com, cleanup comid ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -897,7 +1041,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -916,36 +1062,40 @@ contains end subroutine psi_itran_baseline_multivect - subroutine psi_itran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + subroutine psi_itran_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_multivect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. character(len=30) :: name + info = psb_success_ name = 'psi_itran_neighbor_topology_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -954,17 +1104,30 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swaptran') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran_mv: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran_mv: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -972,9 +1135,12 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -982,68 +1148,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran_mv: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() - - if (debug) write(*,*) me,' nbr_tran_mv: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_r_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_ipk_, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_ipk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran_mv: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_mv: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_mv: done' - end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait call psb_erractionrestore(err_act) return @@ -1054,4 +1233,1335 @@ contains end subroutine psi_itran_neighbor_topology_multivect + + subroutine psi_itran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_itran_neighbor_persistent_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes (we "send" recv data) + if (debug) write(*,*) my_rank,' tran_persistent_vect: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:topology_total_recv)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv counts in alltoallv_init + ! send = recv_indexes data with recv_counts/displs + ! recv = into send_indexes area with send_counts/displs + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_ipk_, & + & y%combuf(topology_total_recv + 1), & + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_ipk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_vect: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_itran_neighbor_persistent_topology_vect + + + subroutine psi_itran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! Effective sizes for transpose: + ! eff_send = total_recv (we expose recv_indexes data) + ! eff_recv = total_send (we GET into the send_indexes area) + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_itran_rma_pull_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_ipk_, prc_rank, remote_disp, recv_count, psb_mpi_ipk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_itran_rma_pull_vect + + + subroutine psi_itran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_itran_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push our recv_indexes data to each peer's send_indexes area; notify after flush. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_ipk_, prc_rank, remote_disp, send_count, psb_mpi_ipk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_itran_rma_push_vect + + + subroutine psi_itran_neighbor_persistent_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret, n + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_itran_neighbor_persistent_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor multivect swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:total_recv_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv in alltoallv_init + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_ipk_, & + & y%combuf(total_recv_ + 1), & + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_ipk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(total_recv_+1:total_recv_+total_send_), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_itran_neighbor_persistent_topology_multivect + + + subroutine psi_itran_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_itran_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull multivect') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_ipk_, prc_rank, remote_disp, recv_count*n, psb_mpi_ipk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_itran_rma_pull_multivect + + + subroutine psi_itran_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_itran_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push multivect') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_ipk_, prc_rank, remote_disp, send_count*n, psb_mpi_ipk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_itran_rma_push_multivect + + end submodule psi_i_swaptran_impl diff --git a/base/comm/internals/psi_lovrl_restr.f90 b/base/comm/internals/psi_lovrl_restr.f90 index ebc7a8d1a..dd2b77dd7 100644 --- a/base/comm/internals/psi_lovrl_restr.f90 +++ b/base/comm/internals/psi_lovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_lovrl_save.f90 b/base/comm/internals/psi_lovrl_save.f90 index 4e3b26a9f..2b5b53779 100644 --- a/base/comm/internals/psi_lovrl_save.f90 +++ b/base/comm/internals/psi_lovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_lovrl_upd.f90 b/base/comm/internals/psi_lovrl_upd.f90 index 0d1701e2b..a14f418b6 100644 --- a/base/comm/internals/psi_lovrl_upd.f90 +++ b/base/comm/internals/psi_lovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index 11327e343..d5b6efed7 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -41,7 +41,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_lpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -53,30 +53,22 @@ ! is scattered in the owned indices, and BETA=1. ! The first routine picks the desired exchange index list and passes it to the second. ! This version works on encapsulated vectors, and uses their methods to do GTH and SCT, -! so that special versions (i.e. GPU vectors can override them +! so that special versions (i.e. GPU vectors can override them) ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) +! swap_status - integer Swap status selector. +! It is interpreted as a communication status: +! psb_comm_status_start_ -> START phase +! psb_comm_status_wait_ -> WAIT phase +! psb_comm_status_unknown_ -> START+WAIT +! The communication scheme is selected from +! y%comm_handle%comm_type. ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. +! beta - real Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area -! desc_a - type(psb_desc_type). The communication descriptor. +! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -87,11 +79,19 @@ ! ! ! -submodule (psi_l_comm_v_mod) psi_l_swapdata_impl +submodule (psi_l_comm_v_mod) psi_l_swapdata_impl + use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod + use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_handle_type + use psb_comm_rma_mod, only: psb_comm_rma_handle + use psb_comm_factory_mod + contains - subroutine psi_lswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_lswapdata_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -100,35 +100,32 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta - class(psb_l_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + class(psb_l_base_vect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes - ! Decide which communication scheme to use: baseline (point-to-point / alltoallv) - ! or neighbor alltoallv topology (MPI >= 3.0). Follow conventions used in other - ! swapdata implementations: baseline when any of swap_mpi/swap_sync/swap_send/swap_recv - ! is set; neighbor topology when swap_start or swap_wait is set. - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent + ! error handling variables + integer(psb_ipk_) :: err_act + character(len=30) :: name info = psb_success_ name = 'psi_lswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -147,121 +144,168 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if - if (baseline) then - call psi_lswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else if (neighbor_a2av) then - call psi_lswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else + + select case(y%comm_handle%comm_type) + case(psb_comm_isend_irecv_) + call psi_lswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + case(psb_comm_ineighbor_alltoallv_) + call psi_lswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor nonblocking swap') + goto 9999 + end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_lswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_lswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_lswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if + case default info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') goto 9999 - end if + end select call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) - return end subroutine psi_lswapdata_vect - subroutine psi_lswap_baseline_vect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) - + subroutine psi_lswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta class(psb_l_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti, n + logical :: do_send,do_recv + logical, parameter :: usersend=.false. + logical :: debug + character(len=20) :: name info = psb_success_ name = 'psi_lswap_baseline_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif + icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = total_recv * n - totsnd_ = total_send * n + do_send = (swap_status == psb_comm_status_start_).or.(swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_).or.(swap_status == psb_comm_status_sync_) + + total_recv_ = total_recv * n + total_send_ = total_send * n call comm_indexes%sync() - if (debug) write(*,*) me,'Internal buffer' + if (debug) write(*,*) my_rank,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + call psb_errpush(info,name,a_err='Unfinished communication? Something is wrong....') goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 @@ -272,16 +316,16 @@ contains rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_long_swap_tag + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' Gather ' + if (debug) write(*,*) my_rank,' Gather ' ! ! Then gather for sending. ! @@ -292,6 +336,16 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -301,7 +355,7 @@ contains ! call y%device_wait() - if (debug) write(*,*) me,' isend' + if (debug) write(*,*) my_rank,' isend' ! ! Then send ! @@ -309,7 +363,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_long_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -317,10 +371,10 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if ((nesd>0).and.(proc_to_comm /= me)) then + if ((nesd>0).and.(proc_to_comm /= my_rank)) then call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -334,8 +388,8 @@ contains end if if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -345,9 +399,9 @@ contains end if call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' pnti = 1 - p2ptag = psb_long_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) nerv = comm_indexes%v(pnti+psb_n_elem_recv_) @@ -355,9 +409,9 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (proc_to_comm /= me)then + if (proc_to_comm /= my_rank)then if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -365,25 +419,25 @@ contains end if end if if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if end if - else if (proc_to_comm == me) then + else if (proc_to_comm == my_rank) then if (nesd /= nerv) then write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd end if y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' scatter' + if (debug) write(*,*) my_rank,' scatter' pnti = 1 snd_pt = 1 rcv_pt = 1 @@ -395,29 +449,43 @@ contains snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) + if ((idx_pt < 1) .or. (nerv < 0) .or. (idx_pt+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + + if (debug) write(*,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) call y%sct(rcv_pt,nerv,comm_indexes,beta) - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do + ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device ! - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' call y%device_wait() - if (debug) write(*,*) me,' free buffer' + if (debug) write(*,*) my_rank,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call y%comm_handle%free(info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - if (debug) write(*,*) me,' done' + if (debug) write(*,*) my_rank,' done' end if @@ -429,100 +497,223 @@ contains return end subroutine psi_lswap_baseline_vect - ! - ! - ! Subroutine: psi_lswapdata_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! - module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,info,data) + + + subroutine psi_lswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status integer(psb_lpk_), intent(in) :: beta - class(psb_l_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name - - ! Decide which communication scheme to use: baseline (point-to-point / alltoallv) - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av - + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ - name = 'psi_lswapdata_multivect' + name = 'psi_lswap_neighbor_topology_vect' call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif + icomm = ctxt%get_mpic() - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swap') + goto 9999 + end select - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + call comm_indexes%sync() - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 - end if + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (baseline) then - call psi_lswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else if (neighbor_a2av) then - call psi_lswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + neighbor_comm_handle%comm_request = mpi_request_null + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%comm_request = mpi_request_null + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + write(psb_err_unit,*) my_rank, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & + & neighbor_comm_handle%is_initialized + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + end if + + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((1+pnti+psb_n_elem_recv_ < 1) .or. (nerv < 0) .or. & + & (1+pnti+psb_n_elem_recv_+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 + end do + else + ! nothing to wait/scatter + end if + + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait call psb_erractionrestore(err_act) return @@ -530,255 +721,491 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_lswapdata_multivect + end subroutine psi_lswap_neighbor_topology_vect - subroutine psi_lswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_lswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type), intent(inout) :: y - integer(psb_lpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_) :: icomm - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n + + info = psb_success_ + name = 'psi_lswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif + icomm = ctxt%get_mpic() - n = y%get_ncols() + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swap') + goto 9999 + end select - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if - totrcv_ = total_recv * n - totsnd_ = total_send * n + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null - call psb_realloc(num_neighbors,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_long_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,comm_indexes) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into combuf using baseline-style gth calls + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data (baseline layout),', topology_total_send,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%persistent_in_flight = .false. + end if - ! - ! Then wait for device - ! + ! Wait for device (important for GPU subclasses) call y%device_wait() - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! + ! Lazy persistent-init: build the request once, then reuse with START/WAIT. + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_lpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 end if + end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Scatter received data to local vector positions (baseline-style sct) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data (baseline layout),', topology_total_recv,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + rcv_pt = 1+pnti+psb_n_elem_recv_ + if (nerv > 0) then + call y%sct(rcv_pt,nerv,comm_indexes,beta) + end if + pnti = pnti + nerv + nesd + 3 + end do + end if - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + call y%device_wait() + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_lswap_neighbor_persistent_topology_vect + + + subroutine psi_lswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n + + + info = psb_success_ + name = 'psi_lswap_rma_pull_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! START phase: build the layout once, prepare the exposed buffer, then issue RMA. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if end if - call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_long_swap_tag - do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_open = .false. end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + end if - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Expose combuf once and keep the window around until the descriptor changes. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if ((recv_pos < 1) .or. (recv_count < 0) .or. (recv_pos+max(0,recv_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull local receive bounds error') + goto 9999 + end if - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_lpk_, prc_rank, remote_disp, recv_count, psb_mpi_lpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do end if - if (debug) write(*,*) me,' done' end if + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if + + call y%device_wait() + end if call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) - return - end subroutine psi_lswap_baseline_multivect - - subroutine psi_lswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) + end subroutine psi_lswap_rma_pull_vect + + subroutine psi_lswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -788,135 +1215,284 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta class(psb_l_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info - ! locals - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name info = psb_success_ - name = 'psi_lswap_neighbor_topology_vect' + name = 'psi_lswap_rma_push_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 - endif - + end if icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() + ! START phase: identical layout handling, but the remote metadata describes the receive side. if (do_start) then - if(debug) write(*,*) me,' nbr_swap: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_swap: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') goto 9999 end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv - buffer_size = topology_total_send + topology_total_recv + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Keep the window alive across repetitions: it is created once and reused. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. end if - y%communication_handle = mpi_request_null - if (debug) write(*,*) me,' nbr_swap: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() - call y%device_wait() + ! Pre-post notification receives before opening the window (prevents isend/irecv ordering issues). + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do - if (debug) write(*,*) me,' nbr_swap: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_lpk_, & - & y%combuf(topology_total_send + 1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_lpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push data to each peer; after flush send a P2P notification so target knows data arrived. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if ((send_pos < 1) .or. (send_count < 0) .or. (send_pos+max(0,send_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push local send bounds error') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_lpk_, prc_rank, remote_disp, send_count, psb_mpi_lpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if end if + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. if (do_wait) then - - if (y%communication_handle == mpi_request_null) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv - - if (debug) write(*,*) me,' nbr_swap: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if end if - if (debug) write(*,*) me,' nbr_swap: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if - y%communication_handle = mpi_request_null call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - if (debug) write(*,*) me,' nbr_swap: done' end if call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) - return - end subroutine psi_lswap_neighbor_topology_vect + end subroutine psi_lswap_rma_push_vect - subroutine psi_lswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) + ! + ! + ! Subroutine: psi_lswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_lswapdata_multivect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -925,130 +1501,1246 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: swap_status class(psb_l_base_multivect_type), intent(inout) :: y - integer(psb_lpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_lpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data - ! locals - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_mpk_) :: n, total_send_, total_recv_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name + + info = psb_success_ - name = 'psi_lswap_neighbor_topology_multivect' + name = 'psi_lswapdata_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - icomm = ctxt%get_mpic() - - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 - - call comm_indexes%sync() + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif - if (do_start) then - if(debug) write(*,*) me,' nbr_mv: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_mv: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') - goto 9999 - end if - end if + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if - buffer_size = topology_total_send + topology_total_recv + if ((swap_status /= psb_comm_status_start_) .and. (swap_status /= psb_comm_status_wait_) & + & .and. (swap_status /= psb_comm_status_unknown_)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 end if - y%communication_handle = mpi_request_null - - if (debug) write(*,*) me,' nbr_mv: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + end if - call y%device_wait() + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') + goto 9999 + end if - if (debug) write(*,*) me,' nbr_mv: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_lpk_, & - & y%combuf(topology_total_send + 1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_lpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + baseline = .false. + ineighbor_a2av = .false. + ineighbor_a2av_persistent = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + ineighbor_a2av = .true. + case(psb_comm_persistent_ineighbor_alltoallv_) + ineighbor_a2av_persistent = .true. + case(psb_comm_rma_pull_) + call psi_lswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_lswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if + case default + baseline = .true. + end select + + if (baseline) then + call psi_lswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if + else if (ineighbor_a2av) then + call psi_lswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor nonblocking swap') + goto 9999 + end if + else if (ineighbor_a2av_persistent) then + call psi_lswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_lswapdata_multivect + + + +subroutine psi_lswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti + logical :: do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info = psb_success_ + name = 'psi_lswap_baseline_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + n = y%get_ncols() + + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swap') + goto 9999 + end select + + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + total_recv_ = total_recv * n + total_send_ = total_send * n + + call comm_indexes%sync() + + if (debug) write(*,*) my_rank,'Internal buffer' + if (do_send) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + end if + if (debug) write(*,*) my_rank,'do_send start' + call y%new_buffer(total_send_+total_recv_,info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if + baseline_comm_handle%comid = mpi_request_null + call psb_realloc(num_neighbors,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) my_rank,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) my_rank,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= my_rank)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) + end if - if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if + + if (do_recv) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(num_neighbors,prcid,info) + + if (debug) write(*,*) my_rank,' wait' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= my_rank)then + if (nesd>0) then + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (nerv>0) then + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else if (proc_to_comm == my_rank) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) my_rank,' scatter' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + baseline_comm_handle%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) my_rank,' wait' + call y%device_wait() + if (debug) write(*,*) my_rank,' free buffer' + call y%free_buffer(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' done' + end if + + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_lswap_baseline_multivect + + + +subroutine psi_lswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_lswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if ((topology_total_send + topology_total_recv) > 0) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_mv: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if + end if - if (debug) write(*,*) me,' nbr_mv: scattering recv data,', topology_total_recv,' elems' + ! Scatter received data to local vector positions (polymorphic for GPU) + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & + & beta) + end if - y%communication_handle = mpi_request_null - call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_lswap_neighbor_topology_multivect + + + +subroutine psi_lswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_lswap_neighbor_topology_multivect_persistent' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) > 0) then + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_mv: done' + neighbor_comm_handle%persistent_in_flight = .false. + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & + & beta) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_lswap_neighbor_topology_multivect_persistent + + + subroutine psi_lswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_lswap_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_lpk_, prc_rank, remote_disp, recv_count*n, psb_mpi_lpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() end if call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_lswap_rma_pull_multivect + + + subroutine psi_lswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_lswap_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_lpk_, prc_rank, remote_disp, send_count*n, psb_mpi_lpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) return - end subroutine psi_lswap_neighbor_topology_multivect + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_lswap_rma_push_multivect + + end submodule psi_l_swapdata_impl diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index 8dc032399..638dadf3a 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_lpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -59,12 +59,12 @@ ! ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: +! swap_status - integer Choose the algorithm for data exchange: ! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 +! swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 +! swap_sync = iand(swap_status,psb_swap_sync_) /= 0 +! swap_send = iand(swap_status,psb_swap_send_) /= 0 +! swap_recv = iand(swap_status,psb_swap_recv_) /= 0 ! if (swap_mpi): use underlying MPI_ALLTOALLV. ! if (swap_sync): use PSB_SND and PSB_RCV in ! synchronized pairs @@ -77,9 +77,10 @@ ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y - type(psb_l_vect_type) The data area +! beta - real Choose overwrite or sum. +! y - type(psb_d_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. +! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -91,8 +92,9 @@ ! submodule (psi_l_comm_v_mod) psi_l_swaptran_impl use psb_base_mod + use psb_comm_factory_mod contains - module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_lswaptran_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -102,23 +104,19 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta - class(psb_l_base_vect_type), intent(inout) :: y - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name - - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av - + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name info = psb_success_ name = 'psi_lswaptran_vect' @@ -134,7 +132,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info = psb_err_invalid_cd_state_ + info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -145,40 +143,71 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if end if - if (baseline) then - call psi_ltran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else if (neighbor_a2av) then - call psi_ltran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_ltran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') + goto 9999 + end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_ltran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_ltran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_ltran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_ltran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select + call psb_erractionrestore(err_act) return @@ -187,9 +216,21 @@ contains return end subroutine psi_lswaptran_vect - - subroutine psi_ltran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + ! + ! + ! Subroutine: psi_ltran_baseline_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ltran_baseline_vect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -200,11 +241,12 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta class(psb_l_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals @@ -212,6 +254,7 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& @@ -224,29 +267,35 @@ contains call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info = psb_err_context_error_ + info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swaptran') + goto 9999 + end select + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n - call comm_indexes%sync() + call idx%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -256,17 +305,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(idx%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - p2ptag = psb_long_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -275,7 +324,7 @@ contains if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt call mpi_irecv(y%combuf(snd_pt),nesd,& & psb_mpi_lpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do @@ -287,13 +336,13 @@ contains pnti = 1 snd_pt = 1 do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,comm_indexes) + call y%gth(idx_pt,nerv,idx) pnti = pnti + nerv + nesd + 3 end do @@ -311,18 +360,18 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_long_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),nerv,& & psb_mpi_lpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -337,7 +386,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -349,17 +398,17 @@ contains if (debug) write(*,*) me,' wait' pnti = 1 - p2ptag = psb_long_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -367,7 +416,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -390,22 +439,22 @@ contains snd_pt = 1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,comm_indexes,beta) + call y%sct(snd_pt,nesd,idx,beta) pnti = pnti + nerv + nesd + 3 end do ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -414,7 +463,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -433,7 +484,193 @@ contains end subroutine psi_ltran_baseline_vect - subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) + + + subroutine psi_ltran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_ltran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swaptran') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_lpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ltran_neighbor_topology_vect + + + + + ! + ! + ! + ! + ! Subroutine: psi_lswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_lswaptran_multivect(swap_status,beta,y,desc_a,info,data) + #ifdef PSB_MPI_MOD use mpi #endif @@ -442,8 +679,8 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta class(psb_l_base_multivect_type), intent(inout) :: y type(psb_desc_type),target :: desc_a integer(psb_ipk_), intent(out) :: info @@ -456,8 +693,8 @@ contains class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + integer(psb_ipk_) :: setflag + info = psb_success_ name = 'psi_lswaptran_multivect' @@ -467,7 +704,7 @@ contains icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -484,40 +721,80 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + setflag = swap_status + if (swap_status == psb_swap_start_) then + setflag = psb_comm_status_start_ + else if (swap_status == psb_swap_wait_) then + setflag = psb_comm_status_wait_ + else if ((iand(swap_status, psb_swap_send_) /= 0) .or. (iand(swap_status, psb_swap_recv_) /= 0) .or. & + & (iand(swap_status, psb_swap_mpi_) /= 0) .or. (iand(swap_status, psb_swap_sync_) /= 0)) then + setflag = psb_comm_status_sync_ + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + if ((setflag /= psb_comm_status_start_) .and. (setflag /= psb_comm_status_wait_) .and. & + & (setflag /= psb_comm_status_sync_)) then info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + call psb_errpush(info,name,a_err='Invalid swap_status') goto 9999 end if - if (baseline) then - call psi_ltran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else if (neighbor_a2av) then - call psi_ltran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) goto 9999 - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + call y%comm_handle%set_swap_status(setflag, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_ltran_neighbor_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') + goto 9999 + end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_ltran_neighbor_persistent_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_ltran_rma_pull_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_ltran_rma_push_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_ltran_baseline_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select + call psb_erractionrestore(err_act) return @@ -526,9 +803,8 @@ contains return end subroutine psi_lswaptran_multivect - - subroutine psi_ltran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + subroutine psi_ltran_baseline_multivect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -539,18 +815,20 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta - class(psb_l_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(in) :: swap_status integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& @@ -559,7 +837,7 @@ contains character(len=20) :: name info = psb_success_ - name = 'psi_ltran_baseline_multivect' + name = 'psi_ltran_vidx_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -569,24 +847,30 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swaptran') + goto 9999 + end select + n = y%get_ncols() - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n - call comm_indexes%sync() + call idx%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -596,25 +880,25 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(idx%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_long_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt call mpi_irecv(y%combuf(snd_pt),n*nesd,& & psb_mpi_lpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd @@ -629,10 +913,10 @@ contains snd_pt = total_recv_+1 rcv_pt = 1 do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) + call y%gth(idx_pt,rcv_pt,nerv,idx) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -651,17 +935,17 @@ contains pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_long_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),n*nerv,& & psb_mpi_lpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -677,7 +961,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -691,14 +975,14 @@ contains pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_long_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -706,7 +990,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -731,14 +1015,14 @@ contains snd_pt = total_recv_+1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -748,7 +1032,7 @@ contains ! ! Waited for com, cleanup comid ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -757,7 +1041,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -776,38 +1062,40 @@ contains end subroutine psi_ltran_baseline_multivect - subroutine psi_ltran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) - + subroutine psi_ltran_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + info = psb_success_ - name = 'psi_ltran_neighbor_topology_vect' + name = 'psi_ltran_neighbor_topology_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -816,25 +1104,43 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swaptran') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') goto 9999 end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -842,68 +1148,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() - - if (debug) write(*,*) me,' nbr_tran: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_lpk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_lpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_lpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran: done' - end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait call psb_erractionrestore(err_act) return @@ -911,144 +1230,1338 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_ltran_neighbor_topology_vect + end subroutine psi_ltran_neighbor_topology_multivect - subroutine psi_ltran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + subroutine psi_ltran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info - ! locals - integer(psb_mpk_) :: icomm - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name + integer(psb_mpk_) :: icomm, np, my_rank, iret + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name info = psb_success_ - name = 'psi_ltran_neighbor_topology_multivect' + name = 'psi_ltran_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() if (do_start) then - if(debug) write(*,*) me,' nbr_mv: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_mv: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if - - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv - + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv buffer_size = topology_total_send + topology_total_recv - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_mv: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes (we "send" recv data) + if (debug) write(*,*) my_rank,' tran_persistent_vect: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:topology_total_recv)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if call y%device_wait() - if (debug) write(*,*) me,' nbr_mv: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_lpk_, & - & y%combuf(topology_total_send + 1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_lpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv counts in alltoallv_init + ! send = recv_indexes data with recv_counts/displs + ! recv = into send_indexes area with send_counts/displs + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_recv + 1), & + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_lpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if end if - end if + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start if (do_wait) then - if (y%communication_handle == mpi_request_null) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. - if (debug) write(*,*) me,' nbr_mv: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_vect: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) end if - if (debug) write(*,*) me,' nbr_mv: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ltran_neighbor_persistent_topology_vect + + + subroutine psi_ltran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! Effective sizes for transpose: + ! eff_send = total_recv (we expose recv_indexes data) + ! eff_recv = total_send (we GET into the send_indexes area) + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_rma_pull_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if - y%communication_handle = mpi_request_null + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_lpk_, prc_rank, remote_disp, recv_count, psb_mpi_lpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ltran_rma_pull_vect + + + subroutine psi_ltran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push our recv_indexes data to each peer's send_indexes area; notify after flush. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_lpk_, prc_rank, remote_disp, send_count, psb_mpi_lpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ltran_rma_push_vect + + + subroutine psi_ltran_neighbor_persistent_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret, n + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_neighbor_persistent_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor multivect swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') goto 9999 end if - if (debug) write(*,*) me,' nbr_mv: done' + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:total_recv_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv in alltoallv_init + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_lpk_, & + & y%combuf(total_recv_ + 1), & + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_lpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(total_recv_+1:total_recv_+total_send_), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ltran_neighbor_persistent_topology_multivect + + + subroutine psi_ltran_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull multivect') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_lpk_, prc_rank, remote_disp, recv_count*n, psb_mpi_lpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ltran_rma_pull_multivect + + + subroutine psi_ltran_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push multivect') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_lpk_, prc_rank, remote_disp, send_count*n, psb_mpi_lpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) return - end subroutine psi_ltran_neighbor_topology_multivect + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ltran_rma_push_multivect + end submodule psi_l_swaptran_impl diff --git a/base/comm/internals/psi_movrl_restr_a.f90 b/base/comm/internals/psi_movrl_restr_a.f90 index a660e2fde..dc2137a00 100644 --- a/base/comm/internals/psi_movrl_restr_a.f90 +++ b/base/comm/internals/psi_movrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_movrl_save_a.f90 b/base/comm/internals/psi_movrl_save_a.f90 index d9d0e603b..d728ed718 100644 --- a/base/comm/internals/psi_movrl_save_a.f90 +++ b/base/comm/internals/psi_movrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_movrl_upd_a.f90 b/base/comm/internals/psi_movrl_upd_a.f90 index f31d4cfa1..dfa070a62 100644 --- a/base/comm/internals/psi_movrl_upd_a.f90 +++ b/base/comm/internals/psi_movrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_mswapdata_a.F90 b/base/comm/internals/psi_mswapdata_a.F90 index 7a00f36c1..335df8ed3 100644 --- a/base/comm/internals/psi_mswapdata_a.F90 +++ b/base/comm/internals/psi_mswapdata_a.F90 @@ -39,7 +39,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_mpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -70,10 +70,10 @@ ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:,:) - integer The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -97,13 +97,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info -integer(psb_mpk_) :: y(:,:), beta -integer(psb_mpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -165,12 +166,13 @@ integer(psb_mpk_), target :: work(:) #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info -integer(psb_mpk_) :: y(:,:), beta -integer(psb_mpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:,:) + integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv ! locals @@ -348,7 +350,7 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& & psb_mpi_mpk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) @@ -370,7 +372,7 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then call mpi_rsend(sndbuf(snd_pt),n*nesd,& @@ -401,7 +403,7 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -510,7 +512,7 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D integer(psb_mpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -541,10 +543,10 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf ! ! ! n - integer Number of columns in Y - ! beta - integer Choose overwrite or sum. - ! y(:) - integer The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - integer Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -565,12 +567,13 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta - integer(psb_mpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -648,7 +651,8 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:) integer(psb_mpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -830,7 +834,7 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),nerv,& & psb_mpi_mpk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) @@ -852,7 +856,7 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then @@ -882,7 +886,7 @@ integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_mswaptran_a.F90 b/base/comm/internals/psi_mswaptran_a.F90 index 07672d390..051209e70 100644 --- a/base/comm/internals/psi_mswaptran_a.F90 +++ b/base/comm/internals/psi_mswaptran_a.F90 @@ -30,7 +30,7 @@ ! ! ! -! File: psi_mswaptran.F90 +! File: psi_mswaptran_a.F90 ! ! Subroutine: psi_mswaptranm ! Implements the data exchange among processes. This is similar to Xswapdata, but @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D integer(psb_mpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -74,10 +74,10 @@ ! ! ! n - integer Number of columns in Y -! beta - integer Choose overwrite or sum. -! y(:,:) - integer The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - integer Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -101,13 +101,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta - integer(psb_mpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -149,7 +150,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +175,8 @@ contains integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta + integer(psb_mpk_), intent(inout) :: y(:,:) + integer(psb_mpk_), intent(in) :: beta integer(psb_mpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -360,7 +362,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),n*nesd,& & psb_mpi_mpk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) @@ -383,7 +385,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& & psb_mpi_mpk_,prcid(i),& @@ -413,7 +415,7 @@ contains nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -525,7 +527,7 @@ contains ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D integer(psb_mpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -556,10 +558,10 @@ contains ! ! ! n - integer Number of columns in Y - ! beta - integer Choose overwrite or sum. - ! y(:) - integer The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - integer Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -579,12 +581,13 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta - integer(psb_mpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + integer(psb_mpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -659,7 +662,8 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), intent(inout) :: y(:) + integer(psb_mpk_), intent(in) :: beta integer(psb_mpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -845,7 +849,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),nesd,& & psb_mpi_mpk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) @@ -868,7 +872,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),nerv,& & psb_mpi_mpk_,prcid(i),& @@ -896,7 +900,7 @@ contains proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_int4_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_sovrl_restr.f90 b/base/comm/internals/psi_sovrl_restr.f90 index 1ce96355b..14dc55ce0 100644 --- a/base/comm/internals/psi_sovrl_restr.f90 +++ b/base/comm/internals/psi_sovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_restr_a.f90 b/base/comm/internals/psi_sovrl_restr_a.f90 index 2e1d53ae7..66960ef41 100644 --- a/base/comm/internals/psi_sovrl_restr_a.f90 +++ b/base/comm/internals/psi_sovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_save.f90 b/base/comm/internals/psi_sovrl_save.f90 index cd259f721..b5d4b3c75 100644 --- a/base/comm/internals/psi_sovrl_save.f90 +++ b/base/comm/internals/psi_sovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_save_a.f90 b/base/comm/internals/psi_sovrl_save_a.f90 index aa3468e02..12e5d2aad 100644 --- a/base/comm/internals/psi_sovrl_save_a.f90 +++ b/base/comm/internals/psi_sovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_upd.f90 b/base/comm/internals/psi_sovrl_upd.f90 index 2ee13aa68..acf68554f 100644 --- a/base/comm/internals/psi_sovrl_upd.f90 +++ b/base/comm/internals/psi_sovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sovrl_upd_a.f90 b/base/comm/internals/psi_sovrl_upd_a.f90 index 64d856318..68a0e3357 100644 --- a/base/comm/internals/psi_sovrl_upd_a.f90 +++ b/base/comm/internals/psi_sovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index c023724a5..d5e54af42 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -41,7 +41,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D real(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -53,31 +53,22 @@ ! is scattered in the owned indices, and BETA=1. ! The first routine picks the desired exchange index list and passes it to the second. ! This version works on encapsulated vectors, and uses their methods to do GTH and SCT, -! so that special versions (i.e. GPU vectors can override them +! so that special versions (i.e. GPU vectors can override them) ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) +! swap_status - integer Swap status selector. +! It is interpreted as a communication status: +! psb_comm_status_start_ -> START phase +! psb_comm_status_wait_ -> WAIT phase +! psb_comm_status_unknown_ -> START+WAIT +! The communication scheme is selected from +! y%comm_handle%comm_type. ! ! ! n - integer Number of columns in Y -! beta - real Choose overwrite or sum. +! beta - real Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area -! desc_a - type(psb_desc_type). The communication descriptor. -! our own internal allocation. +! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -91,9 +82,16 @@ submodule (psi_s_comm_v_mod) psi_s_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod + use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_handle_type + use psb_comm_rma_mod, only: psb_comm_rma_handle + use psb_comm_factory_mod + contains - module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_sswapdata_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -102,28 +100,24 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta - class(psb_s_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + class(psb_s_base_vect_type), intent(inout) :: y + real(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name - + integer(psb_ipk_) :: err_act + character(len=30) :: name info = psb_success_ name = 'psi_sswapdata_vect' @@ -131,7 +125,7 @@ contains ctxt = desc_a%get_context() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -152,163 +146,207 @@ contains call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if - if (baseline) then - call psi_sswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + + select case(y%comm_handle%comm_type) + case(psb_comm_isend_irecv_) + call psi_sswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if - else if (neighbor_a2av) then - call psi_sswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + case(psb_comm_ineighbor_alltoallv_) + call psi_sswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + call psb_errpush(info,name,a_err='neighbor nonblocking swap') goto 9999 end if - else + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_sswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_sswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_sswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if + case default info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') goto 9999 - end if + end select call psb_erractionrestore(err_act) return - 9999 call psb_error_handler(ctxt,err_act) - return end subroutine psi_sswapdata_vect - - - -! -! subroutine psi_sswap_baseline_vect -! This performs Isend/Irecv as a baseline communication mode -! -subroutine psi_sswap_baseline_vect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) - + subroutine psi_sswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type), intent(inout) :: y + integer(psb_ipk_), intent(in) :: swap_status real(psb_spk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' + & snd_pt, rcv_pt, pnti, n + logical :: do_send,do_recv + logical, parameter :: usersend=.false. + logical :: debug + character(len=20) :: name + + info = psb_success_ + name = 'psi_sswap_baseline_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif + icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_).or.(swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_).or.(swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() - if (debug) write(*,*) me,'Internal buffer' + if (debug) write(*,*) my_rank,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + call psb_errpush(info,name,a_err='Unfinished communication? Something is wrong....') goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(comm_indexes%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_real_swap_tag + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' Gather ' + if (debug) write(*,*) my_rank,' Gather ' ! ! Then gather for sending. ! pnti = 1 do i=1, num_neighbors - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -317,7 +355,7 @@ subroutine psi_sswap_baseline_vect(ctxt,flag,beta,y,idx, & ! call y%device_wait() - if (debug) write(*,*) me,' isend' + if (debug) write(*,*) my_rank,' isend' ! ! Then send ! @@ -325,18 +363,18 @@ subroutine psi_sswap_baseline_vect(ctxt,flag,beta,y,idx, & pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if ((nesd>0).and.(proc_to_comm /= me)) then + if ((nesd>0).and.(proc_to_comm /= my_rank)) then call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -350,8 +388,8 @@ subroutine psi_sswap_baseline_vect(ctxt,flag,beta,y,idx, & end if if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -361,19 +399,19 @@ subroutine psi_sswap_baseline_vect(ctxt,flag,beta,y,idx, & end if call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' pnti = 1 - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (proc_to_comm /= me)then + if (proc_to_comm /= my_rank)then if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -381,59 +419,73 @@ subroutine psi_sswap_baseline_vect(ctxt,flag,beta,y,idx, & end if end if if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if end if - else if (proc_to_comm == me) then + else if (proc_to_comm == my_rank) then if (nesd /= nerv) then write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd end if y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' scatter' + if (debug) write(*,*) my_rank,' scatter' pnti = 1 snd_pt = 1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 + if ((idx_pt < 1) .or. (nerv < 0) .or. (idx_pt+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + + if (debug) write(*,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 end do + ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device ! - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' call y%device_wait() - if (debug) write(*,*) me,' free buffer' + if (debug) write(*,*) my_rank,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call y%comm_handle%free(info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - if (debug) write(*,*) me,' done' + if (debug) write(*,*) my_rank,' done' end if @@ -443,13 +495,12 @@ subroutine psi_sswap_baseline_vect(ctxt,flag,beta,y,idx, & 9999 call psb_error_handler(ctxt,err_act) return - -end subroutine psi_sswap_baseline_vect + end subroutine psi_sswap_baseline_vect -subroutine psi_sswap_neighbor_topology_vect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_sswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -458,276 +509,477 @@ subroutine psi_sswap_neighbor_topology_vect(ctxt,flag,beta,y,idx, & include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type), intent(inout) :: y - real(psb_spk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name - - - info = psb_success_ - name = 'psi_sswap_nbr_vect' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) - goto 9999 - endif - - icomm = ctxt%get_mpic() - - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 - - call idx%sync() - - ! --------------------------------------------------------- - ! START phase: build topology (if needed), gather, post MPI - ! --------------------------------------------------------- - if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') - goto 9999 - end if - end if - - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info - ! Buffer layout: - ! combuf(1 : total_send) = send area - ! combuf(total_send+1 : total_send+total_recv) = recv area - buffer_size = topology_total_send + topology_total_recv + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) + info = psb_success_ + name = 'psi_sswap_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) goto 9999 - end if - y%communication_handle = mpi_request_null + endif - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + icomm = ctxt%get_mpic() - ! Wait for device (important for GPU subclasses) - call y%device_wait() + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swap') + goto 9999 + end select - ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_r_spk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_r_spk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then + if(swap_status == psb_comm_status_unknown_) then info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') goto 9999 end if - end if ! do_start + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + neighbor_comm_handle%comm_request = mpi_request_null + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%comm_request = mpi_request_null + end if - ! --------------------------------------------------------- - ! WAIT phase: complete MPI, scatter received data - ! --------------------------------------------------------- - if (do_wait) then + ! Wait for device (important for GPU subclasses) + call y%device_wait() - if (y%communication_handle == mpi_request_null) then - ! No matching start? Something is wrong - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 - end if + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%comm_request = mpi_request_null + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + write(psb_err_unit,*) my_rank, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & + & neighbor_comm_handle%is_initialized + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + end if - ! Wait for the non-blocking collective to complete - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if - ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((1+pnti+psb_n_elem_recv_ < 1) .or. (nerv < 0) .or. & + & (1+pnti+psb_n_elem_recv_+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 + end do + else + ! nothing to wait/scatter + end if - ! Clean up - y%communication_handle = mpi_request_null - call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - if (debug) write(*,*) me,' nbr_vect: done' + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' - end if ! do_wait + end if ! do_wait - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) - return -end subroutine psi_sswap_neighbor_topology_vect - + return + end subroutine psi_sswap_neighbor_topology_vect - ! - ! - ! Subroutine: psi_sswapdata_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! - module subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,info,data) + subroutine psi_sswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type), intent(inout) :: y - real(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=30) :: name - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av - + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ - name = 'psi_sswapdata_multivect' + name = 'psi_sswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - - - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif - - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if + icomm = ctxt%get_mpic() - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swap') goto 9999 - end if - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + end select - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') goto 9999 end if + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - if (baseline) then - call psi_sswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') goto 9999 end if - else if (neighbor_a2av) then - call psi_sswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') - goto 9999 + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into combuf using baseline-style gth calls + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data (baseline layout),', topology_total_send,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%persistent_in_flight = .false. end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if - - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psi_sswapdata_multivect + ! Wait for device (important for GPU subclasses) + call y%device_wait() + ! Lazy persistent-init: build the request once, then reuse with START/WAIT. + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Scatter received data to local vector positions (baseline-style sct) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data (baseline layout),', topology_total_recv,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + rcv_pt = 1+pnti+psb_n_elem_recv_ + if (nerv > 0) then + call y%sct(rcv_pt,nerv,comm_indexes,beta) + end if + pnti = pnti + nerv + nesd + 3 + end do + end if + + call y%device_wait() + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_sswap_neighbor_persistent_topology_vect -subroutine psi_sswap_baseline_multivect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_sswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -736,242 +988,1105 @@ subroutine psi_sswap_baseline_multivect(ctxt,flag,beta,y,idx, & include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_) :: icomm - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name info = psb_success_ - name = 'psi_sswap_baseline_multivect' + name = 'psi_sswap_rma_pull_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 - endif + end if icomm = ctxt%get_mpic() - n = y%get_ncols() - - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! START phase: build the layout once, prepare the exposed buffer, then issue RMA. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if - total_recv_ = total_recv * n - total_send_ = total_send * n + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if + end if - call idx%sync() + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Expose combuf once and keep the window around until the descriptor changes. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_ready = .true. end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null - call psb_realloc(num_neighbors,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_real_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - do i=1, num_neighbors - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if ((recv_pos < 1) .or. (recv_count < 0) .or. (recv_pos+max(0,recv_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull local receive bounds error') + goto 9999 + end if + + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_spk_, prc_rank, remote_disp, recv_count, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if - ! - ! Then wait for device - ! call y%device_wait() + end if - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! + call psb_erractionrestore(err_act) + return - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_sswap_rma_pull_vect + + + subroutine psi_sswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_sswap_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! START phase: identical layout handling, but the remote metadata describes the receive side. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if + end if - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if end if - call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - p2ptag = psb_real_swap_tag - do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Keep the window alive across repetitions: it is created once and reused. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window (prevents isend/irecv ordering issues). + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push data to each peer; after flush send a P2P notification so target knows data arrived. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if ((send_pos < 1) .or. (send_count < 0) .or. (send_pos+max(0,send_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push local send bounds error') + goto 9999 + end if + + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_r_spk_, prc_rank, remote_disp, send_count, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + end do + end if + end if + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if + + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_sswap_rma_push_vect + + + + ! + ! + ! Subroutine: psi_sswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_sswapdata_multivect(swap_status,beta,y,desc_a,info,data) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + integer(psb_ipk_), intent(in) :: swap_status + class(psb_s_base_multivect_type), intent(inout) :: y + real(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_mpk_) :: n, total_send_, total_recv_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name + + + info = psb_success_ + name = 'psi_sswapdata_multivect' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + if ((swap_status /= psb_comm_status_start_) .and. (swap_status /= psb_comm_status_wait_) & + & .and. (swap_status /= psb_comm_status_unknown_)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if + + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') + goto 9999 + end if + + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + baseline = .false. + ineighbor_a2av = .false. + ineighbor_a2av_persistent = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + ineighbor_a2av = .true. + case(psb_comm_persistent_ineighbor_alltoallv_) + ineighbor_a2av_persistent = .true. + case(psb_comm_rma_pull_) + call psi_sswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_sswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if + case default + baseline = .true. + end select + + if (baseline) then + call psi_sswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (ineighbor_a2av) then + call psi_sswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor nonblocking swap') + goto 9999 + end if + else if (ineighbor_a2av_persistent) then + call psi_sswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_sswapdata_multivect + + + + +subroutine psi_sswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti + logical :: do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info = psb_success_ + name = 'psi_sswap_baseline_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + n = y%get_ncols() + + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swap') + goto 9999 + end select + + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + total_recv_ = total_recv * n + total_send_ = total_send * n + + call comm_indexes%sync() + + if (debug) write(*,*) my_rank,'Internal buffer' + if (do_send) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + end if + if (debug) write(*,*) my_rank,'do_send start' + call y%new_buffer(total_send_+total_recv_,info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + baseline_comm_handle%comid = mpi_request_null + call psb_realloc(num_neighbors,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) my_rank,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) my_rank,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= my_rank)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if + + if (do_recv) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(num_neighbors,prcid,info) + + if (debug) write(*,*) my_rank,' wait' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= my_rank)then + if (nesd>0) then + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + if (nerv>0) then + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else if (proc_to_comm == my_rank) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) my_rank,' scatter' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + baseline_comm_handle%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) my_rank,' wait' + call y%device_wait() + if (debug) write(*,*) my_rank,' free buffer' + call y%free_buffer(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' done' + end if + + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_sswap_baseline_multivect + + + +subroutine psi_sswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_sswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = total_recv_+1 - rcv_pt = 1 - do i=1, num_neighbors - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ + end if ! do_start - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) + if ((topology_total_send + topology_total_recv) > 0) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - if (debug) write(*,*) me,' done' + else + neighbor_comm_handle%comm_request = mpi_request_null end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - call psb_erractionrestore(err_act) - return + ! Wait for the non-blocking collective to complete + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & + & beta) + end if + + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_sswap_baseline_multivect +end subroutine psi_sswap_neighbor_topology_multivect -subroutine psi_sswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) +subroutine psi_sswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -980,28 +2095,32 @@ subroutine psi_sswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_multivect_type) :: y - real(psb_spk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name info = psb_success_ - name = 'psi_sswap_neighbor_topology_multivect' + name = 'psi_sswap_neighbor_topology_multivect_persistent' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -1009,70 +2128,136 @@ subroutine psi_sswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & endif icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swap') + goto 9999 + end select - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) - call idx%sync() + call comm_indexes%sync() ! --------------------------------------------------------- ! START phase: build topology (if needed), gather, post MPI ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - ! Lazy initialization: build the topology on first call - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & & ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if - - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv ! Buffer layout: ! combuf(1 : total_send) = send area ! combuf(total_send+1 : total_send+total_recv) = recv area - buffer_size = topology_total_send + topology_total_recv + buffer_size = total_send_ + total_recv_ - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + else + neighbor_comm_handle%persistent_in_flight = .false. end if - y%communication_handle = mpi_request_null - - ! Gather send data into contiguous send buffer (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) ! Wait for device (important for GPU subclasses) call y%device_wait() - ! Post non-blocking neighborhood alltoallv - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_r_spk_, & - & y%combuf(topology_total_send + 1), & ! recv buffer - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_r_spk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. end if end if ! do_start @@ -1082,42 +2267,38 @@ subroutine psi_sswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then - ! No matching start? Something is wrong - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 - end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + if ((topology_total_send + topology_total_recv) > 0) then + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if - ! Wait for the non-blocking collective to complete - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 - end if + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. - ! Scatter received data to local vector positions (polymorphic for GPU) - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & & beta) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if - - ! Clean up - y%communication_handle = mpi_request_null call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - if (debug) write(*,*) me,' nbr_vect: done' + if (debug) write(*,*) my_rank,' nbr_vect: done' end if ! do_wait @@ -1127,7 +2308,438 @@ subroutine psi_sswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & 9999 call psb_error_handler(ctxt,err_act) return -end subroutine psi_sswap_neighbor_topology_multivect +end subroutine psi_sswap_neighbor_topology_multivect_persistent + + + subroutine psi_sswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_sswap_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_r_spk_, prc_rank, remote_disp, recv_count*n, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_sswap_rma_pull_multivect + + + subroutine psi_sswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_sswap_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_r_spk_, prc_rank, remote_disp, send_count*n, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_sswap_rma_push_multivect end submodule psi_s_swapdata_impl diff --git a/base/comm/internals/psi_sswapdata_a.F90 b/base/comm/internals/psi_sswapdata_a.F90 index 23da82246..32083f3f4 100644 --- a/base/comm/internals/psi_sswapdata_a.F90 +++ b/base/comm/internals/psi_sswapdata_a.F90 @@ -39,7 +39,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D real(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -97,13 +97,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info -real(psb_spk_) :: y(:,:), beta -real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -165,12 +166,13 @@ real(psb_spk_), target :: work(:) #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info -real(psb_spk_) :: y(:,:), beta -real(psb_spk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:,:) + real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv ! locals @@ -348,7 +350,7 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& & psb_mpi_r_spk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) @@ -370,7 +372,7 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then call mpi_rsend(sndbuf(snd_pt),n*nesd,& @@ -401,7 +403,7 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -510,7 +512,7 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D real(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -565,12 +567,13 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -648,7 +651,8 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:) real(psb_spk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -830,7 +834,7 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),nerv,& & psb_mpi_r_spk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) @@ -852,7 +856,7 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then @@ -882,7 +886,7 @@ real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index 452e31924..8b47a2988 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D real(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -59,12 +59,12 @@ ! ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: +! swap_status - integer Choose the algorithm for data exchange: ! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 +! swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 +! swap_sync = iand(swap_status,psb_swap_sync_) /= 0 +! swap_send = iand(swap_status,psb_swap_send_) /= 0 +! swap_recv = iand(swap_status,psb_swap_recv_) /= 0 ! if (swap_mpi): use underlying MPI_ALLTOALLV. ! if (swap_sync): use PSB_SND and PSB_RCV in ! synchronized pairs @@ -78,8 +78,9 @@ ! ! n - integer Number of columns in Y ! beta - real Choose overwrite or sum. -! y - type(psb_s_vect_type) The data area +! y - type(psb_d_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. +! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -91,8 +92,9 @@ ! submodule (psi_s_comm_v_mod) psi_s_swaptran_impl use psb_base_mod + use psb_comm_factory_mod contains - module subroutine psi_sswaptran_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_sswaptran_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -102,23 +104,19 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta - class(psb_s_base_vect_type), intent(inout) :: y - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name info = psb_success_ name = 'psi_sswaptran_vect' @@ -134,7 +132,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info = psb_err_invalid_cd_state_ + info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -151,39 +149,64 @@ contains goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if - if (baseline) then - call psi_stran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_stran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') goto 9999 end if - else if (neighbor_a2av) then - call psi_stran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_stran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + case(psb_comm_rma_pull_) + call psi_stran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_stran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_stran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select call psb_erractionrestore(err_act) return @@ -193,9 +216,21 @@ contains return end subroutine psi_sswaptran_vect - - module subroutine psi_stran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + ! + ! + ! Subroutine: psi_stran_baseline_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_stran_baseline_vect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -206,11 +241,12 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_spk_), intent(in) :: beta class(psb_s_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals @@ -218,6 +254,7 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& @@ -225,8 +262,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_stran_baseline_vect' + info = psb_success_ + name = 'psi_stran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -236,23 +273,29 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swaptran') + goto 9999 + end select + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n - call comm_indexes%sync() + call idx%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -262,17 +305,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(idx%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -281,7 +324,7 @@ contains if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt call mpi_irecv(y%combuf(snd_pt),nesd,& & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do @@ -293,13 +336,13 @@ contains pnti = 1 snd_pt = 1 do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,comm_indexes) + call y%gth(idx_pt,nerv,idx) pnti = pnti + nerv + nesd + 3 end do @@ -317,18 +360,18 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),nerv,& & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -343,7 +386,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -355,17 +398,17 @@ contains if (debug) write(*,*) me,' wait' pnti = 1 - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -373,7 +416,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -396,22 +439,22 @@ contains snd_pt = 1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,comm_indexes,beta) + call y%sct(snd_pt,nesd,idx,beta) pnti = pnti + nerv + nesd + 3 end do ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -420,7 +463,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -440,28 +485,31 @@ contains - subroutine psi_stran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) + + subroutine psi_stran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_spk_), intent(in) :: beta class(psb_s_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -471,7 +519,7 @@ contains info = psb_success_ name = 'psi_stran_neighbor_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -480,17 +528,30 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swaptran') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -498,8 +559,12 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -507,70 +572,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' - call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() + ! Wait for device (important for GPU subclasses) + call y%device_wait() - if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_r_spk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & & psb_mpi_r_spk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: done' + if (debug) write(*,*) me,' nbr_vect: done' - end if + end if ! do_wait call psb_erractionrestore(err_act) return @@ -583,10 +659,6 @@ contains - - - - ! ! ! @@ -597,7 +669,7 @@ contains ! Takes care of Y an encaspulated multivector. ! ! - module subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,info,data) + module subroutine psi_sswaptran_multivect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -607,7 +679,7 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_spk_), intent(in) :: beta class(psb_s_base_multivect_type), intent(inout) :: y type(psb_desc_type),target :: desc_a @@ -621,9 +693,8 @@ contains class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + integer(psb_ipk_) :: setflag + info = psb_success_ name = 'psi_sswaptran_multivect' @@ -633,7 +704,7 @@ contains icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -656,40 +727,74 @@ contains goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + setflag = swap_status + if (swap_status == psb_swap_start_) then + setflag = psb_comm_status_start_ + else if (swap_status == psb_swap_wait_) then + setflag = psb_comm_status_wait_ + else if ((iand(swap_status, psb_swap_send_) /= 0) .or. (iand(swap_status, psb_swap_recv_) /= 0) .or. & + & (iand(swap_status, psb_swap_mpi_) /= 0) .or. (iand(swap_status, psb_swap_sync_) /= 0)) then + setflag = psb_comm_status_sync_ + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + if ((setflag /= psb_comm_status_start_) .and. (setflag /= psb_comm_status_wait_) .and. & + & (setflag /= psb_comm_status_sync_)) then info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + call psb_errpush(info,name,a_err='Invalid swap_status') goto 9999 end if - if (baseline) then - call psi_stran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 end if - else if (neighbor_a2av) then - call psi_stran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') - goto 9999 - end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + end if + + call y%comm_handle%set_swap_status(setflag, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_stran_neighbor_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') + goto 9999 + end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_stran_neighbor_persistent_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_stran_rma_pull_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_stran_rma_push_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_stran_baseline_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select + call psb_erractionrestore(err_act) return @@ -698,9 +803,8 @@ contains return end subroutine psi_sswaptran_multivect - - subroutine psi_stran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + subroutine psi_stran_baseline_multivect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -711,19 +815,20 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info class(psb_s_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes + real(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - integer(psb_ipk_), intent(out) :: info - + class(psb_comm_handle_type), intent(inout) :: comm_handle ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& @@ -731,8 +836,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_stran_vidx_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -742,24 +847,30 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swaptran') + goto 9999 + end select + n = y%get_ncols() - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) total_recv_ = total_recv * n total_send_ = total_send * n - call comm_indexes%sync() + call idx%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -769,25 +880,25 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(idx%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt call mpi_irecv(y%combuf(snd_pt),n*nesd,& & psb_mpi_r_spk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd @@ -802,10 +913,10 @@ contains snd_pt = total_recv_+1 rcv_pt = 1 do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) + call y%gth(idx_pt,rcv_pt,nerv,idx) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -824,17 +935,17 @@ contains pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),n*nerv,& & psb_mpi_r_spk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -850,7 +961,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -864,14 +975,14 @@ contains pnti = 1 snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -879,7 +990,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -904,14 +1015,14 @@ contains snd_pt = total_recv_+1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -921,7 +1032,7 @@ contains ! ! Waited for com, cleanup comid ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -930,7 +1041,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -949,29 +1062,30 @@ contains end subroutine psi_stran_baseline_multivect - - subroutine psi_stran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_stran_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: swap_status real(psb_spk_), intent(in) :: beta class(psb_s_base_multivect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -979,9 +1093,9 @@ contains info = psb_success_ - name = 'psi_stran_neighbor_topology_vect' + name = 'psi_stran_neighbor_topology_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -990,17 +1104,30 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swaptran') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -1008,8 +1135,12 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -1017,70 +1148,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' - call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() + ! Wait for device (important for GPU subclasses) + call y%device_wait() - if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_r_spk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & & psb_mpi_r_spk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: done' + if (debug) write(*,*) me,' nbr_vect: done' - end if + end if ! do_wait call psb_erractionrestore(err_act) return @@ -1092,4 +1234,1334 @@ contains + subroutine psi_stran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_stran_neighbor_persistent_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes (we "send" recv data) + if (debug) write(*,*) my_rank,' tran_persistent_vect: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:topology_total_recv)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv counts in alltoallv_init + ! send = recv_indexes data with recv_counts/displs + ! recv = into send_indexes area with send_counts/displs + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_spk_, & + & y%combuf(topology_total_recv + 1), & + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_spk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_vect: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_stran_neighbor_persistent_topology_vect + + + subroutine psi_stran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! Effective sizes for transpose: + ! eff_send = total_recv (we expose recv_indexes data) + ! eff_recv = total_send (we GET into the send_indexes area) + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_stran_rma_pull_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_spk_, prc_rank, remote_disp, recv_count, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_stran_rma_pull_vect + + + subroutine psi_stran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_stran_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push our recv_indexes data to each peer's send_indexes area; notify after flush. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_r_spk_, prc_rank, remote_disp, send_count, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_stran_rma_push_vect + + + subroutine psi_stran_neighbor_persistent_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret, n + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_stran_neighbor_persistent_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor multivect swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:total_recv_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv in alltoallv_init + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_spk_, & + & y%combuf(total_recv_ + 1), & + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_spk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(total_recv_+1:total_recv_+total_send_), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_stran_neighbor_persistent_topology_multivect + + + subroutine psi_stran_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_stran_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull multivect') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_r_spk_, prc_rank, remote_disp, recv_count*n, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_stran_rma_pull_multivect + + + subroutine psi_stran_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_stran_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push multivect') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_r_spk_, prc_rank, remote_disp, send_count*n, psb_mpi_r_spk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_stran_rma_push_multivect + + end submodule psi_s_swaptran_impl diff --git a/base/comm/internals/psi_sswaptran_a.F90 b/base/comm/internals/psi_sswaptran_a.F90 index ff392aa0a..d3e35e4c2 100644 --- a/base/comm/internals/psi_sswaptran_a.F90 +++ b/base/comm/internals/psi_sswaptran_a.F90 @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D real(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -101,13 +101,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -149,7 +150,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +175,8 @@ contains integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta + real(psb_spk_), intent(inout) :: y(:,:) + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -360,7 +362,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),n*nesd,& & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) @@ -383,7 +385,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& & psb_mpi_r_spk_,prcid(i),& @@ -413,7 +415,7 @@ contains nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -525,7 +527,7 @@ contains ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D real(psb_spk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -579,12 +581,13 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta - real(psb_spk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + real(psb_spk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -659,7 +662,8 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta + real(psb_spk_), intent(inout) :: y(:) + real(psb_spk_), intent(in) :: beta real(psb_spk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -845,7 +849,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),nesd,& & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) @@ -868,7 +872,7 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),nerv,& & psb_mpi_r_spk_,prcid(i),& @@ -896,7 +900,7 @@ contains proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_real_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_zovrl_restr.f90 b/base/comm/internals/psi_zovrl_restr.f90 index 668d1d495..a281d2e13 100644 --- a/base/comm/internals/psi_zovrl_restr.f90 +++ b/base/comm/internals/psi_zovrl_restr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_restr_a.f90 b/base/comm/internals/psi_zovrl_restr_a.f90 index a83470083..bffd31032 100644 --- a/base/comm/internals/psi_zovrl_restr_a.f90 +++ b/base/comm/internals/psi_zovrl_restr_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_save.f90 b/base/comm/internals/psi_zovrl_save.f90 index 24f4011a0..c642f7898 100644 --- a/base/comm/internals/psi_zovrl_save.f90 +++ b/base/comm/internals/psi_zovrl_save.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_save_a.f90 b/base/comm/internals/psi_zovrl_save_a.f90 index c5cb81f75..b24f82522 100644 --- a/base/comm/internals/psi_zovrl_save_a.f90 +++ b/base/comm/internals/psi_zovrl_save_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_upd.f90 b/base/comm/internals/psi_zovrl_upd.f90 index b6a23f09e..cbe494643 100644 --- a/base/comm/internals/psi_zovrl_upd.f90 +++ b/base/comm/internals/psi_zovrl_upd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zovrl_upd_a.f90 b/base/comm/internals/psi_zovrl_upd_a.f90 index 7bfd56b16..b879e2636 100644 --- a/base/comm/internals/psi_zovrl_upd_a.f90 +++ b/base/comm/internals/psi_zovrl_upd_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index 601bc391a..5223ec5c8 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -41,7 +41,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D complex(psb_dpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -53,30 +53,22 @@ ! is scattered in the owned indices, and BETA=1. ! The first routine picks the desired exchange index list and passes it to the second. ! This version works on encapsulated vectors, and uses their methods to do GTH and SCT, -! so that special versions (i.e. GPU vectors can override them +! so that special versions (i.e. GPU vectors can override them) ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: -! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 -! if (swap_mpi): use underlying MPI_ALLTOALLV. -! if (swap_sync): use PSB_SND and PSB_RCV in -! synchronized pairs -! if (swap_send .and. swap_recv): use mpi_irecv -! and mpi_send -! if (swap_send): use psb_snd (but need another -! call with swap_recv to complete) -! if (swap_recv): use psb_rcv (completing a -! previous call with swap_send) +! swap_status - integer Swap status selector. +! It is interpreted as a communication status: +! psb_comm_status_start_ -> START phase +! psb_comm_status_wait_ -> WAIT phase +! psb_comm_status_unknown_ -> START+WAIT +! The communication scheme is selected from +! y%comm_handle%comm_type. ! ! ! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. +! beta - real Choose overwrite or sum. ! y - type(psb_@x@_vect_type) The data area -! desc_a - type(psb_desc_type). The communication descriptor. +! desc_a - type(psb_desc_type). The communication descriptor. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -90,9 +82,16 @@ submodule (psi_z_comm_v_mod) psi_z_swapdata_impl use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod + use psb_error_mod, only: psb_get_debug_level, psb_get_debug_unit, psb_debug_ext_ + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_handle_type + use psb_comm_rma_mod, only: psb_comm_rma_handle + use psb_comm_factory_mod + contains - module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_zswapdata_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -101,22 +100,24 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - class(psb_z_base_vect_type), intent(inout) :: y - complex(psb_dpk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + class(psb_z_base_vect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a ! TODO: should this be intent(in)? + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=30) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + ! error handling variables + integer(psb_ipk_) :: err_act + character(len=30) :: name info = psb_success_ name = 'psi_zswapdata_vect' @@ -124,14 +125,14 @@ contains ctxt = desc_a%get_context() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -143,327 +144,209 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 end if - if (baseline) then - call psi_zswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') - goto 9999 - end if - else if (neighbor_a2av) then - call psi_zswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 end if - call psb_erractionrestore(err_act) - return - -9999 call psb_error_handler(ctxt,err_act) - - return - end subroutine psi_zswapdata_vect - - - subroutine psi_zswap_baseline_vect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) - implicit none - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta - class(psb_z_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - integer(psb_ipk_), intent(out) :: info - - call psi_zswap_vidx_vect(ctxt,flag,beta,y,idx,num_neighbors,total_send,total_recv,info) - end subroutine psi_zswap_baseline_vect - - - subroutine psi_zswap_neighbor_topology_vect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) - -#ifdef PSB_MPI_MOD - use mpi -#endif - implicit none -#ifdef PSB_MPI_H - include 'mpif.h' -#endif - - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type), intent(inout) :: y - complex(psb_dpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) - integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size - logical :: do_start, do_wait - logical, parameter :: debug = .false. - character(len=30) :: name - - - info = psb_success_ - name = 'psi_zswap_nbr_vect' - call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) - if (np == -1) then - info=psb_err_context_error_ - call psb_errpush(info,name) + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 - endif - - icomm = ctxt%get_mpic() - - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 - - call idx%sync() - - if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') - goto 9999 - end if - end if + end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv - buffer_size = topology_total_send + topology_total_recv - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) + select case(y%comm_handle%comm_type) + case(psb_comm_isend_irecv_) + call psi_zswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') goto 9999 end if - y%communication_handle = mpi_request_null - - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) - - call y%device_wait() - - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_c_dpk_, & - & y%combuf(topology_total_send + 1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_c_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) + case(psb_comm_ineighbor_alltoallv_) + call psi_zswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor nonblocking swap') goto 9999 end if - - end if - - if (do_wait) then - - if (y%communication_handle == mpi_request_null) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_zswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,& + & total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') goto 9999 end if - - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv - - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) + case(psb_comm_rma_pull_) + call psi_zswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') goto 9999 end if - - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) - - y%communication_handle = mpi_request_null - call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) + case(psb_comm_rma_push_) + call psi_zswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') goto 9999 end if - if (debug) write(*,*) me,' nbr_vect: done' - - end if + case default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') + goto 9999 + end select call psb_erractionrestore(err_act) return 9999 call psb_error_handler(ctxt,err_act) - return - end subroutine psi_zswap_neighbor_topology_vect - + end subroutine psi_zswapdata_vect - ! - ! - ! Subroutine: psi_zswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_zswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_zswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& - & iret, nesd, nerv - integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size),& + & iret, nesd, nerv integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti, n - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti, n + logical :: do_send,do_recv + logical, parameter :: usersend=.false. + logical :: debug + character(len=20) :: name + + info = psb_success_ + name = 'psi_zswap_baseline_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif + icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv - - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() - - if (debug) write(*,*) me,'Internal buffer' + do_send = (swap_status == psb_comm_status_start_).or.(swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_).or.(swap_status == psb_comm_status_sync_) + + total_recv_ = total_recv * n + total_send_ = total_send * n + call comm_indexes%sync() + + if (debug) write(*,*) my_rank,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + call psb_errpush(info,name,a_err='Unfinished communication? Something is wrong....') goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_dcomplex_swap_tag + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' Gather ' + if (debug) write(*,*) my_rank,' Gather ' ! ! Then gather for sending. ! pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -472,7 +355,7 @@ contains ! call y%device_wait() - if (debug) write(*,*) me,' isend' + if (debug) write(*,*) my_rank,' isend' ! ! Then send ! @@ -480,18 +363,18 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if ((nesd>0).and.(proc_to_comm /= me)) then + if ((nesd>0).and.(proc_to_comm /= my_rank)) then call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -505,8 +388,8 @@ contains end if if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -514,21 +397,21 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' pnti = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (proc_to_comm /= me)then + if (proc_to_comm /= my_rank)then if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -536,59 +419,73 @@ contains end if end if if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if end if - else if (proc_to_comm == me) then + else if (proc_to_comm == my_rank) then if (nesd /= nerv) then write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd end if y%combuf(rcv_pt:rcv_pt+nerv-1) = y%combuf(snd_pt:snd_pt+nesd-1) end if - pnti = pnti + nerv + nesd + 3 + pnti = pnti + nerv + nesd + 3 end do - if (debug) write(*,*) me,' scatter' + if (debug) write(*,*) my_rank,' scatter' pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) - pnti = pnti + nerv + nesd + 3 + if ((idx_pt < 1) .or. (nerv < 0) .or. (idx_pt+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + + if (debug) write(*,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+nerv-1) + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 end do + ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device ! - if (debug) write(*,*) me,' wait' + if (debug) write(*,*) my_rank,' wait' call y%device_wait() - if (debug) write(*,*) me,' free buffer' + if (debug) write(*,*) my_rank,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call y%comm_handle%free(info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - if (debug) write(*,*) me,' done' + if (debug) write(*,*) my_rank,' done' end if @@ -598,105 +495,225 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_zswap_vidx_vect + end subroutine psi_zswap_baseline_vect - ! - ! - ! Subroutine: psi_zswapdata_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! - module subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,info,data) + + + subroutine psi_zswap_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - class(psb_z_base_multivect_type), intent(inout) :: y + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status complex(psb_dpk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=30) :: name + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical :: debug + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ - name = 'psi_zswapdata_multivect' + name = 'psi_zswap_neighbor_topology_vect' call psb_erractionsave(err_act) - - ctxt = desc_a%get_context() - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ - call psb_errpush(info,name) - goto 9999 - endif + icomm = ctxt%get_mpic() - if(present(data)) then - data_ = data - else - data_ = psb_comm_halo_ - end if + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swap') + goto 9999 + end select - call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + call comm_indexes%sync() - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') - goto 9999 - end if + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (baseline) then - call psi_zswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') - goto 9999 + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + neighbor_comm_handle%comm_request = mpi_request_null + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%comm_request = mpi_request_null end if - else if (neighbor_a2av) then - call psi_zswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%comm_request = mpi_request_null + else + if (neighbor_comm_handle%comm_request == mpi_request_null) then + write(psb_err_unit,*) my_rank, 'DBG: neighbor WAIT but comm_request is NULL; is_initialized=', & + & neighbor_comm_handle%is_initialized + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + end if + + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + pnti = 1 + snd_pt = 1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + rcv_pt = 1+pnti+psb_n_elem_recv_ + + if ((1+pnti+psb_n_elem_recv_ < 1) .or. (nerv < 0) .or. & + & (1+pnti+psb_n_elem_recv_+max(0,nerv)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') + goto 9999 + end if + if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') + goto 9999 + end if + call y%sct(rcv_pt,nerv,comm_indexes,beta) + pnti = pnti + nerv + nesd + 3 + end do + else + ! nothing to wait/scatter + end if + + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait call psb_erractionrestore(err_act) return @@ -704,57 +721,44 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_zswapdata_multivect - - - subroutine psi_zswap_baseline_multivect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) - implicit none - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta - class(psb_z_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - integer(psb_ipk_), intent(out) :: info - - call psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx,num_neighbors,total_send,total_recv,info) - end subroutine psi_zswap_baseline_multivect + end subroutine psi_zswap_neighbor_topology_vect - subroutine psi_zswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_zswap_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type), intent(inout) :: y - complex(psb_dpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv - - ! locals - integer(psb_mpk_) :: np, me - integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait - logical, parameter :: debug = .false. + logical :: debug character(len=30) :: name - + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ - name = 'psi_zswap_neighbor_topology_multivect' + name = 'psi_zswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -763,97 +767,208 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swap') + goto 9999 + end select + + if(swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status: psb_comm_status_unknown_ is not allowed in neighbor swap') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - call idx%sync() + call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_vect: building topology' - call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_, name, & - & a_err='neighbor_topology_init') + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') goto 9999 end if end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv - call y%new_buffer(buffer_size, info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into combuf using baseline-style gth calls + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data (baseline layout),', topology_total_send,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + snd_pt = 1+pnti+nerv+psb_n_elem_send_ + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(comm_indexes%v))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') + goto 9999 + end if + if ((snd_pt < 1) .or. (nesd < 0) .or. (snd_pt+max(0,nesd)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather combuf bounds error') + goto 9999 + end if + call y%gth(snd_pt,nesd,comm_indexes) + pnti = pnti + nerv + nesd + 3 + end do + else + neighbor_comm_handle%persistent_in_flight = .false. end if - y%communication_handle = mpi_request_null - - if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' - call y%gth(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & - & y%combuf(1:topology_total_send)) + ! Wait for device (important for GPU subclasses) call y%device_wait() - if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & - & psb_mpi_c_dpk_, & - & y%combuf(topology_total_send + 1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & - & psb_mpi_c_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + ! Lazy persistent-init: build the request once, then reuse with START/WAIT. + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if end if - end if + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if - if (do_wait) then + end if ! do_start - if (y%communication_handle == mpi_request_null) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/-2/)) - goto 9999 - end if + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) - if (iret /= mpi_success) then - info = psb_err_mpi_error_ - call psb_errpush(info, name, m_err=(/iret/)) - goto 9999 + if ((topology_total_send + topology_total_recv) == 0) then + ! Valid no-op exchange: nothing was posted in START and nothing to wait/scatter. + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if end if - if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' - call y%sct(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & - & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & - & beta) + ! Only wait and scatter if there's data + if ((topology_total_send + topology_total_recv) > 0) then + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Scatter received data to local vector positions (baseline-style sct) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data (baseline layout),', topology_total_recv,' elems' + pnti = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + rcv_pt = 1+pnti+psb_n_elem_recv_ + if (nerv > 0) then + call y%sct(rcv_pt,nerv,comm_indexes,beta) + end if + pnti = pnti + nerv + nesd + 3 + end do + end if - y%communication_handle = mpi_request_null call y%device_wait() - call y%maybe_free_buffer(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_, name) - goto 9999 - end if - if (debug) write(*,*) me,' nbr_vect: done' + if (debug) write(*,*) my_rank,' nbr_vect: done' - end if + end if ! do_wait call psb_erractionrestore(err_act) return @@ -861,25 +976,10 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_zswap_neighbor_topology_multivect - + end subroutine psi_zswap_neighbor_persistent_topology_vect - ! - ! - ! Subroutine: psi_zswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_zswap_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -888,236 +988,1759 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n - ! locals - integer(psb_mpk_) :: np, me, nesd, nerv, n - integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret - integer(psb_mpk_) :: icomm - integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& - & snd_pt, rcv_pt, pnti - logical :: swap_mpi, swap_sync, swap_send, swap_recv,& - & albf,do_send,do_recv - logical, parameter :: usersend=.false., debug=.false. - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' + + info = psb_success_ + name = 'psi_zswap_rma_pull_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,my_rank,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 - endif + end if icomm = ctxt%get_mpic() - n = y%get_ncols() + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - totrcv_ = totrcv * n - totsnd_ = totsnd * n + call comm_indexes%sync() - call idx%sync() + ! START phase: build the layout once, prepare the exposed buffer, then issue RMA. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if - if (debug) write(*,*) me,'Internal buffer' - if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then - ! - ! Unfinished communication? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') goto 9999 end if end if - if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) - y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) - ! First I post all the non blocking receives - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) - if ((nerv>0).and.(proc_to_comm /= me)) then - if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt - p2ptag = psb_dcomplex_swap_tag - call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - if (debug) write(*,*) me,' Gather ' - ! - ! Then gather for sending. - ! - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Expose combuf once and keep the window around until the descriptor changes. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if ((recv_pos < 1) .or. (recv_count < 0) .or. (recv_pos+max(0,recv_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull local receive bounds error') + goto 9999 + end if + + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if - ! - ! Then wait for device - ! call y%device_wait() + end if - if (debug) write(*,*) me,' isend' - ! - ! Then send - ! + call psb_erractionrestore(err_act) + return - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - - if ((nesd>0).and.(proc_to_comm /= me)) then - call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_zswap_rma_pull_vect + + + subroutine psi_zswap_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_zswap_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + ! START phase: identical layout handling, but the remote metadata describes the receive side. + if (do_start) then + buffer_size = total_send + total_recv + + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if end if - if(iret /= mpi_success) then - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/iret/)) + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') goto 9999 end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - end if - - if (do_recv) then - if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then - ! - ! No matching send? Something is wrong.... - ! - info=psb_err_mpi_error_ - call psb_errpush(info,name,m_err=(/-2/)) - goto 9999 end if - call psb_realloc(totxch,prcid,info) - if (debug) write(*,*) me,' wait' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - if (proc_to_comm /= me)then - if (nesd>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + ! Need a larger exposed memory area: recreate the RMA window first, + ! then reallocate combuf and lazily create a new window below. + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_open = .false. end if - if (nerv>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) - if(iret /= mpi_success) then - info=psb_err_mpi_error_ + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) goto 9999 end if + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null end if - else if (proc_to_comm == me) then - if (nesd /= nerv) then - write(psb_err_unit,*) & - & 'Fatal error in swapdata: mismatch on self send',& - & nerv,nesd + ! Allocate buffer with size of comm_indexes%v to include all metadata, + ! matching baseline and topology buffer layout + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 end if - y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) end if - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - - if (debug) write(*,*) me,' scatter' - pnti = 1 - snd_pt = totrcv_+1 - rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) - idx_pt = 1+pnti+psb_n_elem_recv_ - - if (debug) write(0,*)me,' Received from: ',prcid(i),& - & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) - rcv_pt = rcv_pt + n*nerv - snd_pt = snd_pt + n*nesd - pnti = pnti + nerv + nesd + 3 - end do - ! - ! Waited for com, cleanup comid - ! - y%comid = mpi_request_null + end if - ! - ! Then wait for device - ! - if (debug) write(*,*) me,' wait' - call y%device_wait() - if (debug) write(*,*) me,' free buffer' - call y%free_buffer(info) - if (info == 0) call y%free_comid(info) - if (info /= 0) then - call psb_errpush(psb_err_alloc_dealloc_,name) - goto 9999 + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + ! Keep the window alive across repetitions: it is created once and reused. + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. end if - if (debug) write(*,*) me,' done' - end if + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send)) + end if + call y%device_wait() - call psb_erractionrestore(err_act) - return + ! Pre-post notification receives before opening the window (prevents isend/irecv ordering issues). + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push data to each peer; after flush send a P2P notification so target knows data arrived. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = total_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if ((send_pos < 1) .or. (send_count < 0) .or. (send_pos+max(0,send_count)-1 > size(y%combuf))) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push local send bounds error') + goto 9999 + end if + + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_r_dpk_, prc_rank, remote_disp, send_count, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send+1:total_send+total_recv), beta) + end if + + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_zswap_rma_push_vect + + + + ! + ! + ! Subroutine: psi_zswapdata_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_zswapdata_multivect(swap_status,beta,y,desc_a,info,data) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + integer(psb_ipk_), intent(in) :: swap_status + class(psb_z_base_multivect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + + ! communication scheme/status selectors + logical :: baseline, ineighbor_a2av, ineighbor_a2av_persistent + + ! locals + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, my_rank, total_send, total_recv, num_neighbors, data_, err_act + integer(psb_mpk_) :: n, total_send_, total_recv_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name + + + info = psb_success_ + name = 'psi_zswapdata_multivect' + call psb_erractionsave(err_act) + + ctxt = desc_a%get_context() + icomm = ctxt%get_mpic() + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + if (.not.psb_is_asb_desc(desc_a)) then + info=psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + endif + + if(present(data)) then + data_ = data + else + data_ = psb_comm_halo_ + end if + + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + goto 9999 + end if + + if ((swap_status /= psb_comm_status_start_) .and. (swap_status /= psb_comm_status_wait_) & + & .and. (swap_status /= psb_comm_status_unknown_)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if + + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if + + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') + goto 9999 + end if + + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + baseline = .false. + ineighbor_a2av = .false. + ineighbor_a2av_persistent = .false. + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + ineighbor_a2av = .true. + case(psb_comm_persistent_ineighbor_alltoallv_) + ineighbor_a2av_persistent = .true. + case(psb_comm_rma_pull_) + call psi_zswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull swap') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_zswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,& + & y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push swap') + goto 9999 + end if + case default + baseline = .true. + end select + + if (baseline) then + call psi_zswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (ineighbor_a2av) then + call psi_zswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor nonblocking swap') + goto 9999 + end if + else if (ineighbor_a2av_persistent) then + call psi_zswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor persistent swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible swap_status settings: no valid communication mode selected') + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_zswapdata_multivect + + + + +subroutine psi_zswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, nesd, nerv, n + integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret + integer(psb_mpk_), allocatable :: prcid(:) + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& + & snd_pt, rcv_pt, pnti + logical :: do_send,do_recv + logical, parameter :: usersend=.false., debug=.false. + character(len=20) :: name + + info = psb_success_ + name = 'psi_zswap_baseline_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + n = y%get_ncols() + + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swap') + goto 9999 + end select + + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + total_recv_ = total_recv * n + total_send_ = total_send * n + + call comm_indexes%sync() + + if (debug) write(*,*) my_rank,'Internal buffer' + if (do_send) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + end if + if (debug) write(*,*) my_rank,'do_send start' + call y%new_buffer(total_send_+total_recv_,info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + baseline_comm_handle%comid = mpi_request_null + call psb_realloc(num_neighbors,prcid,info) + ! First I post all the non blocking receives + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) + if ((nerv>0).and.(proc_to_comm /= my_rank)) then + if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt + p2ptag = psb_double_swap_tag + call mpi_irecv(y%combuf(rcv_pt),n*nerv,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + if (debug) write(*,*) my_rank,' Gather ' + ! + ! Then gather for sending. + ! + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+nerv+psb_n_elem_send_ + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + ! + ! Then wait for device + ! + call y%device_wait() + + if (debug) write(*,*) my_rank,' isend' + ! + ! Then send + ! + + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + + if ((nesd>0).and.(proc_to_comm /= my_rank)) then + call mpi_isend(y%combuf(snd_pt),n*nesd,& + & psb_mpi_r_dpk_,prcid(i),& + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) + end if + + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + end if + + if (do_recv) then + if (debug) write(*,*) my_rank,' do_Recv' + if (.not.allocated(baseline_comm_handle%comid)) then + ! + ! No matching send? Something is wrong.... + ! + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/-2/)) + goto 9999 + end if + call psb_realloc(num_neighbors,prcid,info) + + if (debug) write(*,*) my_rank,' wait' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + p2ptag = psb_double_swap_tag + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + if (proc_to_comm /= my_rank)then + if (nesd>0) then + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (nerv>0) then + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) + if(iret /= mpi_success) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else if (proc_to_comm == my_rank) then + if (nesd /= nerv) then + write(psb_err_unit,*) & + & 'Fatal error in swapdata: mismatch on self send',& + & nerv,nesd + end if + y%combuf(rcv_pt:rcv_pt+n*nerv-1) = y%combuf(snd_pt:snd_pt+n*nesd-1) + end if + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + + if (debug) write(*,*) my_rank,' scatter' + pnti = 1 + snd_pt = total_recv_+1 + rcv_pt = 1 + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + idx_pt = 1+pnti+psb_n_elem_recv_ + + if (debug) write(0,*)my_rank,' Received from: ',prcid(i),& + & y%combuf(rcv_pt:rcv_pt+n*nerv-1) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) + rcv_pt = rcv_pt + n*nerv + snd_pt = snd_pt + n*nesd + pnti = pnti + nerv + nesd + 3 + end do + ! + ! Waited for com, cleanup comid + ! + baseline_comm_handle%comid = mpi_request_null + + ! + ! Then wait for device + ! + if (debug) write(*,*) my_rank,' wait' + call y%device_wait() + if (debug) write(*,*) my_rank,' free buffer' + call y%free_buffer(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' done' + end if + + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_zswap_baseline_multivect + + + +subroutine psi_zswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_zswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (nonblocking)' + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' + if (buffer_size > 0) then + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if ((topology_total_send + topology_total_recv) > 0) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + else + neighbor_comm_handle%comm_request = mpi_request_null + end if + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Wait for the non-blocking collective to complete + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if ((topology_total_send + topology_total_recv) > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & + & beta) + end if + + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_zswap_neighbor_topology_multivect + + + +subroutine psi_zswap_neighbor_topology_multivect_persistent(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, my_rank, n + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_zswap_neighbor_topology_multivect_persistent' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swap') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_unknown_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_unknown_) + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) my_rank,' nbr_vect: starting data exchange (persistent)' + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) my_rank,' nbr_vect: building topology via handle' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(1:total_send_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & ! send buffer + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(total_send_ + 1), & ! recv buffer + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) > 0) then + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + + ! Wait for the persistent collective to complete + if (debug) write(*,*) my_rank,' nbr_vect: waiting on persistent MPI request' + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) my_rank,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(total_send_+1:total_send_+total_recv_), & + & beta) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + if (debug) write(*,*) my_rank,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_zswap_neighbor_topology_multivect_persistent + + + subroutine psi_zswap_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_zswap_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for pull mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA pull init_memory_buffer_layout failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pull data from each peer with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count*n, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter received data into Y. + if (do_wait) then + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_zswap_rma_pull_multivect + + + subroutine psi_zswap_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, total_send_, total_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, memory_buffer_layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_zswap_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + total_send_ = total_send * n + total_recv_ = total_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for push mode') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_send_ + total_recv_ + memory_buffer_layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= total_send) .or. & + & (rma_handle%layout_recv /= total_recv) + + if (memory_buffer_layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA put rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA put ini_memory_buffer_layout') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (total_send > 0) then + call y%gth(int(total_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1) * n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_r_dpk_, prc_rank, remote_disp, send_count*n, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (total_recv > 0) then + call y%sct(int(total_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(total_send_+1:total_send_+total_recv_), beta) + end if + call y%device_wait() + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_zswap_rma_push_multivect -9999 call psb_error_handler(ctxt,err_act) - return - end subroutine psi_zswap_vidx_multivect end submodule psi_z_swapdata_impl diff --git a/base/comm/internals/psi_zswapdata_a.F90 b/base/comm/internals/psi_zswapdata_a.F90 index 471eecd55..d76ff7425 100644 --- a/base/comm/internals/psi_zswapdata_a.F90 +++ b/base/comm/internals/psi_zswapdata_a.F90 @@ -39,7 +39,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D complex(psb_dpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -70,10 +70,10 @@ ! ! ! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y(:,:) - complex The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -97,13 +97,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info -complex(psb_dpk_) :: y(:,:), beta -complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -165,12 +166,13 @@ complex(psb_dpk_), target :: work(:) #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info -complex(psb_dpk_) :: y(:,:), beta -complex(psb_dpk_), target :: work(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:,:) + complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv ! locals @@ -293,8 +295,8 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf ! swap elements using mpi_alltoallv call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_c_dpk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_c_dpk_,icomm,iret) + & psb_mpi_r_dpk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_r_dpk_,icomm,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -348,9 +350,9 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) end if rcv_pt = rcv_pt + n*nerv @@ -370,15 +372,15 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then call mpi_rsend(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,iret) else call mpi_send(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,iret) end if @@ -401,7 +403,7 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -510,7 +512,7 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D complex(psb_dpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -541,10 +543,10 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf ! ! ! n - integer Number of columns in Y - ! beta - complex Choose overwrite or sum. - ! y(:) - complex The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - complex Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -565,12 +567,13 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -648,7 +651,8 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:) complex(psb_dpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -775,8 +779,8 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf ! swap elements using mpi_alltoallv call mpi_alltoallv(sndbuf,sdsz,bsdidx,& - & psb_mpi_c_dpk_,rcvbuf,rvsz,& - & brvidx,psb_mpi_c_dpk_,icomm,iret) + & psb_mpi_r_dpk_,rcvbuf,rvsz,& + & brvidx,psb_mpi_r_dpk_,icomm,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -830,9 +834,9 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag, icomm,rvhd(i),iret) end if rcv_pt = rcv_pt + nerv @@ -852,16 +856,16 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag if ((nesd>0).and.(proc_to_comm /= me)) then if (usersend) then call mpi_rsend(sndbuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,iret) else call mpi_send(sndbuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,iret) end if @@ -882,7 +886,7 @@ complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nerv>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/internals/psi_zswaptran.F90 b/base/comm/internals/psi_zswaptran.F90 index 308d19be8..d262b5c2d 100644 --- a/base/comm/internals/psi_zswaptran.F90 +++ b/base/comm/internals/psi_zswaptran.F90 @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D complex(psb_dpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -59,12 +59,12 @@ ! ! ! Arguments: -! flag - integer Choose the algorithm for data exchange: +! swap_status - integer Choose the algorithm for data exchange: ! this is chosen through bit fields. -! swap_mpi = iand(flag,psb_swap_mpi_) /= 0 -! swap_sync = iand(flag,psb_swap_sync_) /= 0 -! swap_send = iand(flag,psb_swap_send_) /= 0 -! swap_recv = iand(flag,psb_swap_recv_) /= 0 +! swap_mpi = iand(swap_status,psb_swap_mpi_) /= 0 +! swap_sync = iand(swap_status,psb_swap_sync_) /= 0 +! swap_send = iand(swap_status,psb_swap_send_) /= 0 +! swap_recv = iand(swap_status,psb_swap_recv_) /= 0 ! if (swap_mpi): use underlying MPI_ALLTOALLV. ! if (swap_sync): use PSB_SND and PSB_RCV in ! synchronized pairs @@ -77,9 +77,10 @@ ! ! ! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y - type(psb_z_vect_type) The data area +! beta - real Choose overwrite or sum. +! y - type(psb_d_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. +! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -91,8 +92,9 @@ ! submodule (psi_z_comm_v_mod) psi_z_swaptran_impl use psb_base_mod + use psb_comm_factory_mod contains - module subroutine psi_zswaptran_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_zswaptran_vect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -102,24 +104,19 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta - class(psb_z_base_vect_type), intent(inout) :: y - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=20) :: name - - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av - + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name info = psb_success_ name = 'psi_zswaptran_vect' @@ -152,39 +149,64 @@ contains goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 + if( (swap_status /= psb_comm_status_start_).and.(swap_status /= psb_comm_status_wait_)& + & .and.(swap_status /= psb_comm_status_sync_) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid swap_status swap_status') + goto 9999 + end if - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') + goto 9999 + end if + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + ! Set the normalized swap status on the comm handle + call y%comm_handle%set_swap_status(swap_status, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if - if (baseline) then - call psi_ztran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_ztran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + call psb_errpush(info,name,a_err='neighbor a2av tran') goto 9999 end if - else if (neighbor_a2av) then - call psi_ztran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_ztran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') + call psb_errpush(info,name,a_err='persistent neighbor tran') goto 9999 end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') - goto 9999 - end if + case(psb_comm_rma_pull_) + call psi_ztran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_ztran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_ztran_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select call psb_erractionrestore(err_act) return @@ -194,8 +216,21 @@ contains return end subroutine psi_zswaptran_vect - subroutine psi_ztran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + ! + ! + ! Subroutine: psi_ztran_baseline_vect + ! Data exchange among processes. + ! + ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods + ! of vectors. + ! + ! The real workhorse: the outer routine will only choose the index list + ! this one takes the index list and does the actual exchange. + ! + ! + ! + module subroutine psi_ztran_baseline_vect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -206,11 +241,12 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta class(psb_z_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals @@ -218,7 +254,8 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -236,23 +273,29 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline swaptran') + goto 9999 + end select + n=1 - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - totrcv_ = total_recv * n - totsnd_ = total_send * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call comm_indexes%sync() + call idx%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -262,17 +305,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(idx%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -281,7 +324,7 @@ contains if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt call mpi_irecv(y%combuf(snd_pt),nesd,& & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 end do @@ -293,13 +336,13 @@ contains pnti = 1 snd_pt = 1 do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,comm_indexes) + call y%gth(idx_pt,nerv,idx) pnti = pnti + nerv + nesd + 3 end do @@ -317,18 +360,18 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),nerv,& & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -343,7 +386,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -355,17 +398,17 @@ contains if (debug) write(*,*) me,' wait' pnti = 1 - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -373,7 +416,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -396,22 +439,22 @@ contains snd_pt = 1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,comm_indexes,beta) + call y%sct(snd_pt,nesd,idx,beta) pnti = pnti + nerv + nesd + 3 end do ! ! Waited for everybody, clean up ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -420,7 +463,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -439,28 +484,32 @@ contains end subroutine psi_ztran_baseline_vect - subroutine psi_ztran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) + + + subroutine psi_ztran_neighbor_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta class(psb_z_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -470,7 +519,7 @@ contains info = psb_success_ name = 'psi_ztran_neighbor_topology_vect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -479,17 +528,30 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor swaptran') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -497,8 +559,12 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -506,70 +572,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' - call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() + ! Wait for device (important for GPU subclasses) + call y%device_wait() - if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_c_dpk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & & psb_mpi_c_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: done' + if (debug) write(*,*) me,' nbr_vect: done' - end if + end if ! do_wait call psb_erractionrestore(err_act) return @@ -581,7 +658,18 @@ contains - module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,info,data) + + ! + ! + ! + ! + ! Subroutine: psi_zswaptran_multivect + ! Data exchange among processes. + ! + ! Takes care of Y an encaspulated multivector. + ! + ! + module subroutine psi_zswaptran_multivect(swap_status,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -591,8 +679,8 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta class(psb_z_base_multivect_type), intent(inout) :: y type(psb_desc_type),target :: desc_a integer(psb_ipk_), intent(out) :: info @@ -605,9 +693,8 @@ contains class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name - ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + integer(psb_ipk_) :: setflag + info = psb_success_ name = 'psi_zswaptran_multivect' @@ -617,7 +704,7 @@ contains icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -639,40 +726,74 @@ contains call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - swap_start = iand(flag,psb_swap_start_) /= 0 - swap_wait = iand(flag,psb_swap_wait_) /= 0 - baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync - neighbor_a2av = swap_start .or. swap_wait + setflag = swap_status + if (swap_status == psb_swap_start_) then + setflag = psb_comm_status_start_ + else if (swap_status == psb_swap_wait_) then + setflag = psb_comm_status_wait_ + else if ((iand(swap_status, psb_swap_send_) /= 0) .or. (iand(swap_status, psb_swap_recv_) /= 0) .or. & + & (iand(swap_status, psb_swap_mpi_) /= 0) .or. (iand(swap_status, psb_swap_sync_) /= 0)) then + setflag = psb_comm_status_sync_ + end if - if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + if ((setflag /= psb_comm_status_start_) .and. (setflag /= psb_comm_status_wait_) .and. & + & (setflag /= psb_comm_status_sync_)) then info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + call psb_errpush(info,name,a_err='Invalid swap_status') goto 9999 end if - if (baseline) then - call psi_ztran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (.not. allocated(y%comm_handle)) then + call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) if (info /= psb_success_) then - call psb_errpush(info,name,a_err='baseline swap') + call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 end if - else if (neighbor_a2av) then - call psi_ztran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) - if (info /= psb_success_) then - call psb_errpush(info,name,a_err='neighbor a2av swap') - goto 9999 - end if - else - info = psb_err_mpi_error_ - call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + end if + + call y%comm_handle%set_swap_status(setflag, info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='set_swap_status') goto 9999 end if + select case(y%comm_handle%comm_type) + case(psb_comm_ineighbor_alltoallv_) + call psi_ztran_neighbor_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av tran') + goto 9999 + end if + case(psb_comm_persistent_ineighbor_alltoallv_) + call psi_ztran_neighbor_persistent_topology_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='persistent neighbor tran') + goto 9999 + end if + case(psb_comm_rma_pull_) + call psi_ztran_rma_pull_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma pull tran') + goto 9999 + end if + case(psb_comm_rma_push_) + call psi_ztran_rma_push_multivect(ctxt,setflag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='rma push tran') + goto 9999 + end if + case default + call psi_ztran_baseline_multivect(ctxt,setflag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline tran') + goto 9999 + end if + end select call psb_erractionrestore(err_act) return @@ -682,9 +803,8 @@ contains return end subroutine psi_zswaptran_multivect - - module subroutine psi_ztran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& - & num_neighbors,total_send,total_recv,info) + subroutine psi_ztran_baseline_multivect(ctxt,swap_status,beta,y,idx,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD use mpi @@ -695,19 +815,21 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta - class(psb_z_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: comm_indexes - integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(in) :: swap_status integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + type(psb_comm_baseline_handle), pointer :: baseline_comm_handle + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -715,7 +837,7 @@ contains character(len=20) :: name info = psb_success_ - name = 'psi_ztran_baseline_multivect' + name = 'psi_ztran_vidx_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -725,24 +847,30 @@ contains endif icomm = ctxt%get_mpic() + baseline_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_baseline_handle) + baseline_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected baseline comm_handle in baseline multivect swaptran') + goto 9999 + end select + n = y%get_ncols() - swap_mpi = iand(flag,psb_swap_mpi_) /= 0 - swap_sync = iand(flag,psb_swap_sync_) /= 0 - swap_send = iand(flag,psb_swap_send_) /= 0 - swap_recv = iand(flag,psb_swap_recv_) /= 0 - do_send = swap_mpi .or. swap_sync .or. swap_send - do_recv = swap_mpi .or. swap_sync .or. swap_recv + do_send = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_recv = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) - totrcv_ = total_recv * n - totsnd_ = total_send * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call comm_indexes%sync() + call idx%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then - if (allocated(y%comid)) then - if (any(y%comid /= mpi_request_null)) then + if (allocated(baseline_comm_handle%comid)) then + if (any(baseline_comm_handle%comid /= mpi_request_null)) then ! ! Unfinished communication? Something is wrong.... ! @@ -752,25 +880,25 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(comm_indexes%v),info) - call y%new_comid(num_neighbors,info) - y%comid = mpi_request_null + call y%new_buffer(ione*size(idx%v),info) + call psb_realloc(num_neighbors,2_psb_ipk_,baseline_comm_handle%comid,info) + baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt call mpi_irecv(y%combuf(snd_pt),n*nesd,& & psb_mpi_c_dpk_,prcid(i),& - & p2ptag, icomm,y%comid(i,2),iret) + & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd @@ -782,13 +910,13 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 do i=1, num_neighbors - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) + call y%gth(idx_pt,rcv_pt,nerv,idx) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -805,19 +933,19 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(rcv_pt),n*nerv,& & psb_mpi_c_dpk_,prcid(i),& - & p2ptag,icomm,y%comid(i,1),iret) + & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if if(iret /= mpi_success) then @@ -833,7 +961,7 @@ contains if (do_recv) then if (debug) write(*,*) me,' do_Recv' - if (.not.allocated(y%comid)) then + if (.not.allocated(baseline_comm_handle%comid)) then ! ! No matching send? Something is wrong.... ! @@ -845,16 +973,16 @@ contains if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then - call mpi_wait(y%comid(i,1),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,1),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -862,7 +990,7 @@ contains end if end if if (nesd>0) then - call mpi_wait(y%comid(i,2),p2pstat,iret) + call mpi_wait(baseline_comm_handle%comid(i,2),p2pstat,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -884,17 +1012,17 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 do i=1, num_neighbors - proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) - nerv = comm_indexes%v(pnti+psb_n_elem_recv_) - nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) + proc_to_comm = idx%v(pnti+psb_proc_id_) + nerv = idx%v(pnti+psb_n_elem_recv_) + nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) + call y%sct(idx_pt,snd_pt,nesd,idx,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -904,7 +1032,7 @@ contains ! ! Waited for com, cleanup comid ! - y%comid = mpi_request_null + baseline_comm_handle%comid = mpi_request_null ! ! Then wait for device @@ -913,7 +1041,9 @@ contains call y%device_wait() if (debug) write(*,*) me,' free buffer' call y%maybe_free_buffer(info) - if (info == 0) call y%free_comid(info) + if (info == 0) then + if (allocated(y%comm_handle)) call psb_comm_free(y%comm_handle, info) + end if if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 @@ -932,30 +1062,30 @@ contains end subroutine psi_ztran_baseline_multivect - - - subroutine psi_ztran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & - & num_neighbors,total_send,total_recv,info) + subroutine psi_ztran_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) #ifdef PSB_MPI_MOD - use mpi + use mpi #endif - implicit none + implicit none #ifdef PSB_MPI_H - include 'mpif.h' + include 'mpif.h' #endif type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta class(psb_z_base_multivect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: icomm integer(psb_mpk_) :: np, me integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size logical :: do_start, do_wait logical, parameter :: debug = .false. @@ -965,7 +1095,7 @@ contains info = psb_success_ name = 'psi_ztran_neighbor_topology_multivect' call psb_erractionsave(err_act) - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) @@ -974,17 +1104,30 @@ contains icomm = ctxt%get_mpic() - do_start = iand(flag,psb_swap_start_) /= 0 - do_wait = iand(flag,psb_swap_wait_) /= 0 + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in neighbor multivect swaptran') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) call comm_indexes%sync() + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- if (do_start) then - if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' - if (.not. y%neighbor_topology%is_initialized) then - if (debug) write(*,*) me,' nbr_tran_vect: building topology' - call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & - & ctxt, icomm, info) + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. neighbor_comm_handle%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, & & a_err='neighbor_topology_init') @@ -992,8 +1135,12 @@ contains end if end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area buffer_size = topology_total_send + topology_total_recv call y%new_buffer(buffer_size, info) @@ -1001,70 +1148,81 @@ contains call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - y%communication_handle = mpi_request_null + neighbor_comm_handle%comm_request = mpi_request_null - if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' - call y%gth(int(topology_total_recv,psb_mpk_), & - & y%neighbor_topology%recv_indexes, & + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & & y%combuf(1:topology_total_recv)) - call y%device_wait() + ! Wait for device (important for GPU subclasses) + call y%device_wait() - if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' - call mpi_ineighbor_alltoallv( & - & y%combuf(1), & - & y%neighbor_topology%recv_counts, & - & y%neighbor_topology%recv_displs, & + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & & psb_mpi_c_dpk_, & - & y%combuf(topology_total_recv + 1), & - & y%neighbor_topology%send_counts, & - & y%neighbor_topology%send_displs, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & & psb_mpi_c_dpk_, & - & y%neighbor_topology%graph_comm, & - & y%communication_handle, iret) + & neighbor_comm_handle%graph_comm, & + & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - end if + end if ! do_start + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- if (do_wait) then - if (y%communication_handle == mpi_request_null) then + if (neighbor_comm_handle%comm_request == mpi_request_null) then + ! No matching start? Something is wrong info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/-2/)) goto 9999 end if - topology_total_send = y%neighbor_topology%total_send - topology_total_recv = y%neighbor_topology%total_recv + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv - if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' - call mpi_wait(y%communication_handle, p2pstat, iret) + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(neighbor_comm_handle%comm_request, p2pstat, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ call psb_errpush(info, name, m_err=(/iret/)) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' - call y%sct(int(topology_total_send,psb_mpk_), & - & y%neighbor_topology%send_indexes, & + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & & beta) - y%communication_handle = mpi_request_null + + ! Clean up + neighbor_comm_handle%comm_request = mpi_request_null call y%device_wait() call y%maybe_free_buffer(info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - if (debug) write(*,*) me,' nbr_tran_vect: done' + if (debug) write(*,*) me,' nbr_vect: done' - end if + end if ! do_wait call psb_erractionrestore(err_act) return @@ -1074,4 +1232,1336 @@ contains return end subroutine psi_ztran_neighbor_topology_multivect + + + subroutine psi_ztran_neighbor_persistent_topology_vect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ztran_neighbor_persistent_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + buffer_size = topology_total_send + topology_total_recv + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes (we "send" recv data) + if (debug) write(*,*) my_rank,' tran_persistent_vect: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:topology_total_recv)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv counts in alltoallv_init + ! send = recv_indexes data with recv_counts/displs + ! recv = into send_indexes area with send_counts/displs + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_recv + 1), & + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs, & + & psb_mpi_c_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_vect: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ztran_neighbor_persistent_topology_vect + + + subroutine psi_ztran_rma_pull_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + ! Effective sizes for transpose: + ! eff_send = total_recv (we expose recv_indexes data) + ! eff_recv = total_send (we GET into the send_indexes area) + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ztran_rma_pull_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ztran_rma_pull_vect + + + subroutine psi_ztran_rma_push_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ztran_rma_push_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + eff_send = total_recv + eff_recv = total_send + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = eff_send + eff_recv + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push rank cache allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push init_memory_buffer_layout_tran failure') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < size(comm_indexes%v)) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(ione*size(comm_indexes%v), info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + ! Transpose: gather recv_indexes data into combuf(1:eff_send) + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:eff_send)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + ! Push our recv_indexes data to each peer's send_indexes area; notify after flush. + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx) + 1 + recv_pos = eff_send + rma_handle%peer_recv_displs(neighbor_idx) + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int(remote_base - 1, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count, psb_mpi_r_dpk_, prc_rank, remote_disp, send_count, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count-1) = y%combuf(send_pos:send_pos+send_count-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + ! Transpose: scatter to send_indexes (peer_recv_indexes in tran init = actual send_indexes) + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, y%combuf(eff_send+1:eff_send+eff_recv), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ztran_rma_push_vect + + + subroutine psi_ztran_neighbor_persistent_topology_multivect(ctxt,swap_status,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: icomm, np, my_rank, iret, n + integer(psb_mpk_) :: p2pstat(mpi_status_size) + type(psb_comm_neighbor_handle), pointer :: neighbor_comm_handle + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + integer(psb_mpk_) :: total_send_, total_recv_ + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ztran_neighbor_persistent_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + icomm = ctxt%get_mpic() + n = y%get_ncols() + + neighbor_comm_handle => null() + select type(ch => comm_handle) + type is(psb_comm_neighbor_handle) + neighbor_comm_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected neighbor comm_handle in persistent neighbor multivect swaptran') + goto 9999 + end select + + if (swap_status == psb_comm_status_unknown_) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='psb_comm_status_unknown_ not allowed in persistent neighbor multivect swaptran') + goto 9999 + end if + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + if (neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Invalid START: persistent neighbor request already in flight') + goto 9999 + end if + if (.not. neighbor_comm_handle%is_initialized) then + call neighbor_comm_handle%topology_init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + buffer_size = total_send_ + total_recv_ + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (neighbor_comm_handle%persistent_request_ready) then + if (neighbor_comm_handle%persistent_request /= mpi_request_null) then + call mpi_request_free(neighbor_comm_handle%persistent_request, iret) + end if + neighbor_comm_handle%persistent_request = mpi_request_null + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_in_flight = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + end if + end if + neighbor_comm_handle%comm_request = mpi_request_null + + if (buffer_size > 0) then + ! Transpose: gather from recv_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: gathering recv data,',topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & neighbor_comm_handle%recv_indexes, & + & y%combuf(1:total_recv_)) + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + + call y%device_wait() + + if (.not. neighbor_comm_handle%persistent_request_ready) then + if (buffer_size > 0) then + ! Transpose: swap send/recv in alltoallv_init + call mpi_neighbor_alltoallv_init( & + & y%combuf(1), & + & n*neighbor_comm_handle%recv_counts, & + & n*neighbor_comm_handle%recv_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(total_recv_ + 1), & + & n*neighbor_comm_handle%send_counts, & + & n*neighbor_comm_handle%send_displs, & + & psb_mpi_c_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & + & neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_request_ready = .true. + neighbor_comm_handle%persistent_buffer_size = buffer_size + else + neighbor_comm_handle%persistent_request_ready = .false. + neighbor_comm_handle%persistent_buffer_size = 0 + end if + end if + + if (buffer_size > 0) then + call mpi_start(neighbor_comm_handle%persistent_request, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .true. + else + neighbor_comm_handle%persistent_in_flight = .false. + end if + end if ! do_start + + if (do_wait) then + topology_total_send = neighbor_comm_handle%total_send + topology_total_recv = neighbor_comm_handle%total_recv + total_send_ = topology_total_send * n + total_recv_ = topology_total_recv * n + + if ((topology_total_send + topology_total_recv) == 0) then + neighbor_comm_handle%persistent_in_flight = .false. + else + if (.not. neighbor_comm_handle%persistent_in_flight) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, a_err='Invalid WAIT: no persistent neighbor request in flight') + goto 9999 + end if + end if + + if ((topology_total_send + topology_total_recv) > 0) then + call mpi_wait(neighbor_comm_handle%persistent_request, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + neighbor_comm_handle%persistent_in_flight = .false. + + ! Transpose: scatter to send_indexes + if (debug) write(*,*) my_rank,' tran_persistent_mv: scattering to send_indexes,',topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & neighbor_comm_handle%send_indexes, & + & y%combuf(total_recv_+1:total_recv_+total_send_), & + & beta) + end if + + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ztran_neighbor_persistent_topology_multivect + + + subroutine psi_ztran_rma_pull_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ztran_rma_pull_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran pull multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran pull multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran pull multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pull from each peer's recv_indexes area with per-neighbor passive lock (neighbor-only sync). + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_send_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran pull multivect') + goto 9999 + end if + if (recv_count > 0) then + call mpi_win_lock(MPI_LOCK_SHARED, prc_rank, 0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_get(y%combuf(recv_pos), recv_count*n, psb_mpi_r_dpk_, prc_rank, remote_disp, recv_count*n, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_win_unlock(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran pull multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: GETs already complete (per-neighbor unlock in START); scatter into send_indexes. + if (do_wait) then + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ztran_rma_pull_multivect + + + subroutine psi_ztran_rma_push_multivect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,comm_handle,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + class(psb_comm_handle_type), intent(inout) :: comm_handle + integer(psb_ipk_), intent(out) :: info + + integer(psb_mpk_) :: np, my_rank, iret, element_bytes, icomm, n + integer(psb_mpk_) :: proc_to_comm, prc_rank, recv_count, send_count, send_pos, recv_pos, list_pos + integer(psb_mpk_) :: remote_base + integer(kind=MPI_ADDRESS_KIND) :: remote_disp, exposed_bytes + integer(psb_ipk_) :: err_act, neighbor_idx, buffer_size, eff_send, eff_recv, total_eff_send_, total_eff_recv_ + integer(psb_ipk_), allocatable :: peer_mpi_rank(:) + integer(psb_mpk_), parameter :: rma_push_notify_tag = 914_psb_mpk_ + logical :: do_start, do_wait, layout_rebuild_needed + type(psb_comm_rma_handle), pointer :: rma_handle + character(len=30) :: name + + info = psb_success_ + name = 'psi_ztran_rma_push_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,my_rank,np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + end if + icomm = ctxt%get_mpic() + n = y%get_ncols() + eff_send = total_recv + eff_recv = total_send + total_eff_send_ = eff_send * n + total_eff_recv_ = eff_recv * n + + select type(ch => comm_handle) + type is(psb_comm_rma_handle) + rma_handle => ch + class default + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Expected RMA comm_handle for tran push multivect') + goto 9999 + end select + + do_start = (swap_status == psb_comm_status_start_) .or. (swap_status == psb_comm_status_sync_) + do_wait = (swap_status == psb_comm_status_wait_) .or. (swap_status == psb_comm_status_sync_) + + call comm_indexes%sync() + + if (do_start) then + buffer_size = total_eff_send_ + total_eff_recv_ + layout_rebuild_needed = (.not. rma_handle%layout_ready) .or. & + & (rma_handle%layout_nnbr /= num_neighbors) .or. & + & (rma_handle%layout_send /= eff_send) .or. & + & (rma_handle%layout_recv /= eff_recv) + + if (layout_rebuild_needed) then + if (allocated(peer_mpi_rank)) deallocate(peer_mpi_rank) + if (num_neighbors > 0) then + allocate(peer_mpi_rank(num_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info,name,a_err='RMA tran push multivect rank allocation') + goto 9999 + end if + end if + list_pos = 1 + do neighbor_idx = 1, num_neighbors + proc_to_comm = comm_indexes%v(list_pos+psb_proc_id_) + peer_mpi_rank(neighbor_idx) = psb_get_mpi_rank(ctxt,proc_to_comm) + recv_count = comm_indexes%v(list_pos+psb_n_elem_recv_) + send_count = comm_indexes%v(list_pos+recv_count+psb_n_elem_send_) + list_pos = list_pos + recv_count + send_count + 3 + end do + call rma_handle%init_memory_buffer_layout_tran(info, comm_indexes%v, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='RMA tran push multivect init_memory_buffer_layout_tran') + goto 9999 + end if + end if + + if (buffer_size > 0) then + if (.not. allocated(y%combuf)) then + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + else if (size(y%combuf) < buffer_size) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + rma_handle%window_open = .false. + end if + if (rma_handle%window_ready) then + call mpi_win_free(rma_handle%win, iret) + rma_handle%window_ready = .false. + rma_handle%win = mpi_win_null + end if + call y%new_buffer(buffer_size, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,name) + goto 9999 + end if + end if + end if + + if ((buffer_size > 0).and.(.not. rma_handle%window_ready)) then + element_bytes = storage_size(y%combuf(1))/8 + exposed_bytes = int(size(y%combuf),kind=MPI_ADDRESS_KIND) * int(element_bytes,kind=MPI_ADDRESS_KIND) + call mpi_win_create(y%combuf, exposed_bytes, element_bytes, & + & mpi_info_null, ctxt%get_mpic(), rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_ready = .true. + end if + + if (buffer_size > 0) then + if (eff_send > 0) then + call y%gth(int(eff_send,psb_mpk_), rma_handle%peer_send_indexes, y%combuf(1:total_eff_send_)) + end if + call y%device_wait() + + ! Pre-post notification receives before opening the window. + if (num_neighbors > 0) then + rma_handle%notify_recv_reqs(1:num_neighbors) = MPI_REQUEST_NULL + rma_handle%notify_send_reqs(1:num_neighbors) = MPI_REQUEST_NULL + end if + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + call mpi_irecv(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_recv_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + end do + + call mpi_win_lock_all(0, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .true. + + do neighbor_idx=1, num_neighbors + proc_to_comm = rma_handle%peer_proc(neighbor_idx) + send_count = rma_handle%peer_send_counts(neighbor_idx) + recv_count = rma_handle%peer_recv_counts(neighbor_idx) + prc_rank = rma_handle%peer_mpi_rank(neighbor_idx) + send_pos = rma_handle%peer_send_displs(neighbor_idx)*n + 1 + recv_pos = total_eff_send_ + rma_handle%peer_recv_displs(neighbor_idx)*n + 1 + + if (proc_to_comm /= my_rank) then + remote_base = rma_handle%peer_remote_recv_displs(neighbor_idx) + if (remote_base < 1) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='Invalid remote metadata in RMA tran push multivect') + goto 9999 + end if + if (send_count > 0) then + remote_disp = int((remote_base - 1)*n, kind=MPI_ADDRESS_KIND) + call mpi_put(y%combuf(send_pos), send_count*n, psb_mpi_r_dpk_, prc_rank, remote_disp, send_count*n, psb_mpi_r_dpk_, & + & rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + call mpi_win_flush(prc_rank, rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_isend(rma_handle%notify_buf(neighbor_idx), 1, psb_mpi_mpk_, prc_rank, & + & rma_push_notify_tag, icomm, rma_handle%notify_send_reqs(neighbor_idx), iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + else + if (send_count /= recv_count) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='RMA tran push multivect self-copy mismatch') + goto 9999 + end if + y%combuf(recv_pos:recv_pos+recv_count*n-1) = y%combuf(send_pos:send_pos+send_count*n-1) + end if + end do + end if + end if ! do_start + + ! WAIT phase: close epoch, wait for P2P notifications, then scatter into send_indexes. + if (do_wait) then + if (rma_handle%window_open) then + call mpi_win_unlock_all(rma_handle%win, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + rma_handle%window_open = .false. + end if + if (num_neighbors > 0) then + call mpi_waitall(num_neighbors, rma_handle%notify_recv_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + call mpi_waitall(num_neighbors, rma_handle%notify_send_reqs, MPI_STATUSES_IGNORE, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,m_err=(/iret/)) + goto 9999 + end if + end if + if (eff_recv > 0) then + call y%sct(int(eff_recv,psb_mpk_), rma_handle%peer_recv_indexes, & + & y%combuf(total_eff_send_+1:total_eff_send_+total_eff_recv_), beta) + end if + call y%device_wait() + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ztran_rma_push_multivect + + end submodule psi_z_swaptran_impl diff --git a/base/comm/internals/psi_zswaptran_a.F90 b/base/comm/internals/psi_zswaptran_a.F90 index 2ea4d2b86..1c06bef10 100644 --- a/base/comm/internals/psi_zswaptran_a.F90 +++ b/base/comm/internals/psi_zswaptran_a.F90 @@ -30,7 +30,7 @@ ! ! ! -! File: psi_zswaptran.F90 +! File: psi_zswaptran_a.F90 ! ! Subroutine: psi_zswaptranm ! Implements the data exchange among processes. This is similar to Xswapdata, but @@ -43,7 +43,7 @@ ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) -! D real(psb_dpk_) +! D complex(psb_dpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -74,10 +74,10 @@ ! ! ! n - integer Number of columns in Y -! beta - complex Choose overwrite or sum. -! y(:,:) - complex The data area +! beta - real Choose overwrite or sum. +! y(:,:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! work(:) - complex Buffer space. If not sufficient, will do +! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -101,13 +101,14 @@ contains include 'mpif.h' #endif - integer(psb_mpk_), intent(in) :: n - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_mpk_), intent(in) :: n + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:,:) + type(psb_desc_type),target :: desc_a + complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -149,7 +150,7 @@ contains goto 9999 end if - call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) + call psi_swaptran(ctxt,flag,n,beta,y,d_idx,totxch,idxs,idxr,work,info) if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) @@ -174,7 +175,8 @@ contains integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta + complex(psb_dpk_), intent(inout) :: y(:,:) + complex(psb_dpk_), intent(in) :: beta complex(psb_dpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -305,8 +307,8 @@ contains ! swap elements using mpi_alltoallv call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_c_dpk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_c_dpk_,icomm,iret) + & psb_mpi_r_dpk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_r_dpk_,icomm,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -360,9 +362,9 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),n*nesd,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) end if rcv_pt = rcv_pt + n*nerv @@ -383,14 +385,14 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,iret) else call mpi_send(rcvbuf(rcv_pt),n*nerv,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,iret) end if @@ -413,7 +415,7 @@ contains nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) @@ -525,7 +527,7 @@ contains ! application environment. All the variants have the same structure ! In all these subroutines X may be: I Integer ! S real(psb_spk_) - ! D real(psb_dpk_) + ! D complex(psb_dpk_) ! C complex(psb_spk_) ! Z complex(psb_dpk_) ! Basically the operation is as follows: on each process, we identify @@ -556,10 +558,10 @@ contains ! ! ! n - integer Number of columns in Y - ! beta - complex Choose overwrite or sum. - ! y(:) - complex The data area + ! beta - real Choose overwrite or sum. + ! y(:) - real The data area ! desc_a - type(psb_desc_type). The communication descriptor. - ! work(:) - complex Buffer space. If not sufficient, will do + ! work(:) - real Buffer space. If not sufficient, will do ! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data @@ -579,12 +581,13 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta - complex(psb_dpk_), target :: work(:) - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:) + type(psb_desc_type),target :: desc_a + complex(psb_dpk_), target :: work(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals type(psb_ctxt_type) :: ctxt @@ -659,7 +662,8 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), intent(inout) :: y(:) + complex(psb_dpk_), intent(in) :: beta complex(psb_dpk_), target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd, totrcv @@ -791,8 +795,8 @@ contains ! swap elements using mpi_alltoallv call mpi_alltoallv(rcvbuf,rvsz,brvidx,& - & psb_mpi_c_dpk_,& - & sndbuf,sdsz,bsdidx,psb_mpi_c_dpk_,icomm,iret) + & psb_mpi_r_dpk_,& + & sndbuf,sdsz,bsdidx,psb_mpi_r_dpk_,icomm,iret) if(iret /= mpi_success) then info=psb_err_mpi_error_ call psb_errpush(info,name,m_err=(/iret/)) @@ -845,9 +849,9 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag call mpi_irecv(sndbuf(snd_pt),nesd,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag,icomm,rvhd(i),iret) end if rcv_pt = rcv_pt + nerv @@ -868,14 +872,14 @@ contains nesd = idx(pnti+nerv+psb_n_elem_send_) if ((nerv>0).and.(proc_to_comm /= me)) then - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag if (usersend) then call mpi_rsend(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag, icomm,iret) else call mpi_send(rcvbuf(rcv_pt),nerv,& - & psb_mpi_c_dpk_,prcid(i),& + & psb_mpi_r_dpk_,prcid(i),& & p2ptag, icomm,iret) end if @@ -896,7 +900,7 @@ contains proc_to_comm = idx(pnti+psb_proc_id_) nerv = idx(pnti+psb_n_elem_recv_) nesd = idx(pnti+nerv+psb_n_elem_send_) - p2ptag = psb_dcomplex_swap_tag + p2ptag = psb_double_swap_tag if ((proc_to_comm /= me).and.(nesd>0)) then call mpi_wait(rvhd(i),p2pstat,iret) diff --git a/base/comm/psb_cgather.f90 b/base/comm/psb_cgather.f90 index bc5302f56..443d17290 100644 --- a/base/comm/psb_cgather.f90 +++ b/base/comm/psb_cgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cgather_a.f90 b/base/comm/psb_cgather_a.f90 index ac2e66e4a..ee1420d70 100644 --- a/base/comm/psb_cgather_a.f90 +++ b/base/comm/psb_cgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_cgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_chalo.f90 b/base/comm/psb_chalo.f90 index 4972afdd4..ba51ab33c 100644 --- a/base/comm/psb_chalo.f90 +++ b/base/comm/psb_chalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,35 +51,35 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_chalo_vect(x,desc_a,info,tran,mode,data) +subroutine psb_chalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_chalo_vect use psi_mod implicit none - type(psb_c_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_c_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw - - name = 'psb_chalo_vect' + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + & nrow, ncol, lldx, imode,data_ + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw + + name = 'psb_chalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ + info = psb_err_internal_error_ goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -116,7 +116,7 @@ subroutine psb_chalo_vect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) + imode = psb_comm_status_sync_ endif if ((info == 0).and.(lldx psb_chalo_multivect use psi_mod implicit none - type(psb_c_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_c_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & & nrow, ncol, lldx, imode, data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_chalo_multivect' + name = 'psb_chalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -238,7 +239,7 @@ subroutine psb_chalo_multivect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) + imode = psb_comm_status_sync_ endif if (lldx < ncol) call x%reall(ncol,x%get_ncols(),info) @@ -261,7 +262,7 @@ subroutine psb_chalo_multivect(x,desc_a,info,tran,mode,data) end if if (info /= psb_success_) then - ch_err = 'PSI_swapdata' + ch_err='PSI_swapdata' call psb_errpush(psb_err_from_subroutine_,name,a_err=ch_err) goto 9999 end if diff --git a/base/comm/psb_chalo_a.f90 b/base/comm/psb_chalo_a.f90 index d2e3480cb..2a0441071 100644 --- a/base/comm/psb_chalo_a.f90 +++ b/base/comm/psb_chalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: psb_chalo_a.f90 +! File: psb_chalo.f90 ! ! Subroutine: psb_chalom ! This subroutine performs the exchange of the halo elements in a @@ -52,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_chalom(x,desc_a,info,jx,ik,work,tran,mode,data) +subroutine psb_chalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_chalom use psi_mod implicit none @@ -217,7 +217,7 @@ end subroutine psb_chalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_covrl.f90 b/base/comm/psb_covrl.f90 index 913554159..adbd16173 100644 --- a/base/comm/psb_covrl.f90 +++ b/base/comm/psb_covrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -67,28 +67,28 @@ subroutine psb_covrl_vect(x,desc_a,info,update,mode) use psi_mod implicit none - type(psb_c_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_c_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_covrl_vect' + name = 'psb_covrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt = desc_a%get_context() + ctxt=desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -136,7 +136,8 @@ subroutine psb_covrl_vect(x,desc_a,info,update,mode) ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,cone,x%v,desc_a,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,cone,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -183,33 +184,33 @@ end subroutine psb_covrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_covrl_multivect(x,desc_a,info,update,mode) +subroutine psb_covrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_covrl_multivect use psi_mod implicit none - type(psb_c_multivect_type), intent(inout) :: x + type(psb_c_multivect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_covrl_multivect' + name = 'psb_covrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -244,7 +245,7 @@ subroutine psb_covrl_multivect(x,desc_a,info,update,mode) if (present(mode)) then mode_ = mode else - mode_ = IOR(psb_swap_send_,psb_swap_recv_) + mode_ = psb_comm_status_sync_ endif do_swap = (mode_ /= 0) @@ -252,14 +253,16 @@ subroutine psb_covrl_multivect(x,desc_a,info,update,mode) if (ldx < ncol) call x%reall(ncol,x%get_ncols(),info) if(info /= psb_success_) then - info=psb_err_from_subroutine_ ; ch_err='psb_reall' + info=psb_err_from_subroutine_ + ch_err='psb_reall' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,cone,x%v, desc_a,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,cone,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then diff --git a/base/comm/psb_covrl_a.f90 b/base/comm/psb_covrl_a.f90 index d42bcd943..98eae90e8 100644 --- a/base/comm/psb_covrl_a.f90 +++ b/base/comm/psb_covrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -30,7 +30,7 @@ ! ! ! -! File: psb_covrl_a.f90 +! File: psb_covrl.f90 ! ! Subroutine: psb_covrlm ! This subroutine performs the exchange of the overlap elements in a @@ -208,7 +208,7 @@ end subroutine psb_covrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cscatter.F90 b/base/comm/psb_cscatter.F90 index 8d1235dbe..5121c2152 100644 --- a/base/comm/psb_cscatter.F90 +++ b/base/comm/psb_cscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cscatter_a.F90 b/base/comm/psb_cscatter_a.F90 index f351b0b02..dadf13c5c 100644 --- a/base/comm/psb_cscatter_a.F90 +++ b/base/comm/psb_cscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_cscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_cspgather.F90 b/base/comm/psb_cspgather.F90 index 9cfb6b596..f31659a1d 100644 --- a/base/comm/psb_cspgather.F90 +++ b/base/comm/psb_cspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dgather.f90 b/base/comm/psb_dgather.f90 index ed0591e81..443ef2f08 100644 --- a/base/comm/psb_dgather.f90 +++ b/base/comm/psb_dgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dgather_a.f90 b/base/comm/psb_dgather_a.f90 index 1e03ccfd1..14ce53a12 100644 --- a/base/comm/psb_dgather_a.f90 +++ b/base/comm/psb_dgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_dgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dhalo.f90 b/base/comm/psb_dhalo.f90 index 24223485d..66be2ad7f 100644 --- a/base/comm/psb_dhalo.f90 +++ b/base/comm/psb_dhalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,36 +51,35 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) +subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalo_vect use psi_mod - use psb_comm_factory_mod - implicit none - type(psb_d_vect_type), intent(inout) :: x + type(psb_d_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - character, intent(in), optional :: tran integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & & nrow, ncol, lldx, imode,data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_dhalo_vect' + name = 'psb_dhalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -128,7 +127,6 @@ subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) goto 9999 end if - ! exchange halo elements if(tran_ == 'N') then call psi_swapdata(imode,dzero,x%v,desc_a,info,data=data_) @@ -141,7 +139,7 @@ subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) end if if (info /= psb_success_) then - ch_err = 'PSI_swapdata' + ch_err='PSI_swapdata' call psb_errpush(psb_err_from_subroutine_,name,a_err=ch_err) goto 9999 end if @@ -180,26 +178,27 @@ subroutine psb_dhalo_multivect(x,desc_a,info,tran,mode,data) use psi_mod implicit none - type(psb_d_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - character, intent(in), optional :: tran - integer(psb_ipk_), intent(in), optional :: mode,data + type(psb_d_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & & nrow, ncol, lldx, imode, data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_dhalo_multivect' + name = 'psb_dhalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -240,7 +239,7 @@ subroutine psb_dhalo_multivect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = psb_comm_mov_ + imode = psb_comm_status_sync_ endif if (lldx < ncol) call x%reall(ncol,x%get_ncols(),info) diff --git a/base/comm/psb_dhalo_a.f90 b/base/comm/psb_dhalo_a.f90 index f068db270..4fc2ef4de 100644 --- a/base/comm/psb_dhalo_a.f90 +++ b/base/comm/psb_dhalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_dhalom(x,desc_a,info,jx,ik,work,tran,mode,data) +subroutine psb_dhalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_dhalom use psi_mod implicit none @@ -217,7 +217,7 @@ end subroutine psb_dhalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dovrl.f90 b/base/comm/psb_dovrl.f90 index 77d1596cd..24d21897a 100644 --- a/base/comm/psb_dovrl.f90 +++ b/base/comm/psb_dovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -65,31 +65,30 @@ subroutine psb_dovrl_vect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_dovrl_vect use psi_mod - use psb_comm_factory_mod implicit none - type(psb_d_vect_type), intent(inout) :: x + type(psb_d_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_dovrl_vect' + name = 'psb_dovrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt = desc_a%get_context() + ctxt=desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -122,7 +121,7 @@ subroutine psb_dovrl_vect(x,desc_a,info,update,mode) if (present(mode)) then mode_ = mode else - mode_ = psb_comm_status_sync_ + mode_ = IOR(psb_swap_send_,psb_swap_recv_) endif do_swap = (mode_ /= 0) @@ -137,7 +136,8 @@ subroutine psb_dovrl_vect(x,desc_a,info,update,mode) ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_, done, x%v, desc_a, info, data=psb_comm_ovr_) + call psi_swapdata(mode_,done,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -184,33 +184,33 @@ end subroutine psb_dovrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_dovrl_multivect(x,desc_a,info,update,mode) +subroutine psb_dovrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_dovrl_multivect use psi_mod implicit none type(psb_d_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_dovrl_multivect' + name = 'psb_dovrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -245,7 +245,7 @@ subroutine psb_dovrl_multivect(x,desc_a,info,update,mode) if (present(mode)) then mode_ = mode else - mode_ = IOR(psb_swap_send_,psb_swap_recv_) + mode_ = psb_comm_status_sync_ endif do_swap = (mode_ /= 0) @@ -253,14 +253,16 @@ subroutine psb_dovrl_multivect(x,desc_a,info,update,mode) if (ldx < ncol) call x%reall(ncol,x%get_ncols(),info) if(info /= psb_success_) then - info=psb_err_from_subroutine_ ; ch_err='psb_reall' + info=psb_err_from_subroutine_ + ch_err='psb_reall' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_, done, x%v, desc_a, info, data=psb_comm_ovr_) + call psi_swapdata(mode_,done,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then diff --git a/base/comm/psb_dovrl_a.f90 b/base/comm/psb_dovrl_a.f90 index 464b8e31e..c45638213 100644 --- a/base/comm/psb_dovrl_a.f90 +++ b/base/comm/psb_dovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_dovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dscatter.F90 b/base/comm/psb_dscatter.F90 index 3465333b6..559922c8f 100644 --- a/base/comm/psb_dscatter.F90 +++ b/base/comm/psb_dscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dscatter_a.F90 b/base/comm/psb_dscatter_a.F90 index 8864cca8c..739e1aaa8 100644 --- a/base/comm/psb_dscatter_a.F90 +++ b/base/comm/psb_dscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_dscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_dspgather.F90 b/base/comm/psb_dspgather.F90 index c7348cd92..e38cb89ad 100644 --- a/base/comm/psb_dspgather.F90 +++ b/base/comm/psb_dspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_egather_a.f90 b/base/comm/psb_egather_a.f90 index b777cebd7..36ddb6abd 100644 --- a/base/comm/psb_egather_a.f90 +++ b/base/comm/psb_egather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_egatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_ehalo_a.f90 b/base/comm/psb_ehalo_a.f90 index 712ae961f..742d539a3 100644 --- a/base/comm/psb_ehalo_a.f90 +++ b/base/comm/psb_ehalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ehalom(x,desc_a,info,jx,ik,work,tran,mode,data) +subroutine psb_ehalom(x,desc_a,info,jx,ik,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ehalom use psi_mod implicit none @@ -174,7 +174,7 @@ subroutine psb_ehalom(x,desc_a,info,jx,ik,work,tran,mode,data) & desc_a,iwork,info,data=data_) else if((tran_ == 'T').or.(tran_ == 'C')) then call psi_swaptran(imode,k,eone,xp,& - & desc_a,iwork,info) + &desc_a,iwork,info) else info = psb_err_internal_error_ call psb_errpush(info,name,a_err='invalid tran') @@ -217,7 +217,7 @@ end subroutine psb_ehalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -254,7 +254,7 @@ end subroutine psb_ehalom ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ehalov(x,desc_a,info,work,tran,mode,data) +subroutine psb_ehalov(x,desc_a,info,work,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ehalov use psi_mod implicit none diff --git a/base/comm/psb_eovrl_a.f90 b/base/comm/psb_eovrl_a.f90 index b24e5ab83..5c2354dd6 100644 --- a/base/comm/psb_eovrl_a.f90 +++ b/base/comm/psb_eovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_eovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_escatter_a.F90 b/base/comm/psb_escatter_a.F90 index 9c5ed19df..f5cd08e8e 100644 --- a/base/comm/psb_escatter_a.F90 +++ b/base/comm/psb_escatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_escatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_i2gather_a.f90 b/base/comm/psb_i2gather_a.f90 index e0e1ed7a7..b8eb80bf9 100644 --- a/base/comm/psb_i2gather_a.f90 +++ b/base/comm/psb_i2gather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_i2gatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_i2halo_a.f90 b/base/comm/psb_i2halo_a.f90 index 054b61beb..1ae795a12 100644 --- a/base/comm/psb_i2halo_a.f90 +++ b/base/comm/psb_i2halo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_i2halom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_i2ovrl_a.f90 b/base/comm/psb_i2ovrl_a.f90 index 09cc3b5d1..1501efcea 100644 --- a/base/comm/psb_i2ovrl_a.f90 +++ b/base/comm/psb_i2ovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_i2ovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_i2scatter_a.F90 b/base/comm/psb_i2scatter_a.F90 index 1a07587f0..2da1bcab2 100644 --- a/base/comm/psb_i2scatter_a.F90 +++ b/base/comm/psb_i2scatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_i2scatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_igather.f90 b/base/comm/psb_igather.f90 index acfdf52aa..1d8db00d6 100644 --- a/base/comm/psb_igather.f90 +++ b/base/comm/psb_igather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_ihalo.f90 b/base/comm/psb_ihalo.f90 index 9ca4080cd..b5ffbbb49 100644 --- a/base/comm/psb_ihalo.f90 +++ b/base/comm/psb_ihalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,31 +51,32 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_ihalo_vect(x,desc_a,info,tran,mode,data) +subroutine psb_ihalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_ihalo_vect use psi_mod implicit none - type(psb_i_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_i_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & & nrow, ncol, lldx, imode,data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_ihalo_vect' + name = 'psb_ihalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -115,7 +116,7 @@ subroutine psb_ihalo_vect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) + imode = psb_comm_status_sync_ endif if ((info == 0).and.(lldx psb_iovrl_multivect use psi_mod implicit none - type(psb_i_multivect_type), intent(inout) :: x + type(psb_i_multivect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_iovrl_multivect' + name = 'psb_iovrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ - goto 9999 + info = psb_err_internal_error_ ; goto 9999 end if ctxt = desc_a%get_context() @@ -245,7 +245,7 @@ subroutine psb_iovrl_multivect(x,desc_a,info,update,mode) if (present(mode)) then mode_ = mode else - mode_ = IOR(psb_swap_send_,psb_swap_recv_) + mode_ = psb_comm_status_sync_ endif do_swap = (mode_ /= 0) @@ -253,14 +253,16 @@ subroutine psb_iovrl_multivect(x,desc_a,info,update,mode) if (ldx < ncol) call x%reall(ncol,x%get_ncols(),info) if(info /= psb_success_) then - info=psb_err_from_subroutine_ ; ch_err='psb_reall' + info=psb_err_from_subroutine_ + ch_err='psb_reall' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,ione,x%v,desc_a,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,ione,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then diff --git a/base/comm/psb_iscatter.F90 b/base/comm/psb_iscatter.F90 index 57268e71f..607a4c9be 100644 --- a/base/comm/psb_iscatter.F90 +++ b/base/comm/psb_iscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_ispgather.F90 b/base/comm/psb_ispgather.F90 index 50319debb..bfb43ce7c 100644 --- a/base/comm/psb_ispgather.F90 +++ b/base/comm/psb_ispgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_lgather.f90 b/base/comm/psb_lgather.f90 index 17359bce8..d629b90d5 100644 --- a/base/comm/psb_lgather.f90 +++ b/base/comm/psb_lgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_lhalo.f90 b/base/comm/psb_lhalo.f90 index 322ba72ae..b4fb42917 100644 --- a/base/comm/psb_lhalo.f90 +++ b/base/comm/psb_lhalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,31 +51,31 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_lhalo_vect(x,desc_a,info,tran,mode,data) +subroutine psb_lhalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_lhalo_vect use psi_mod implicit none - type(psb_l_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_l_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw - - name = 'psb_lhalo_vect' + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + & nrow, ncol, lldx, imode,data_ + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw + + name = 'psb_lhalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ + info = psb_err_internal_error_ goto 9999 end if @@ -116,14 +116,13 @@ subroutine psb_lhalo_vect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) + imode = psb_comm_status_sync_ endif if ((info == 0).and.(lldx psb_lovrl_multivect use psi_mod implicit none type(psb_l_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_lovrl_multivect' + name = 'psb_lovrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt=desc_a%get_context() + ctxt = desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -244,7 +245,7 @@ subroutine psb_lovrl_multivect(x,desc_a,info,update,mode) if (present(mode)) then mode_ = mode else - mode_ = IOR(psb_swap_send_,psb_swap_recv_) + mode_ = psb_comm_status_sync_ endif do_swap = (mode_ /= 0) @@ -252,14 +253,16 @@ subroutine psb_lovrl_multivect(x,desc_a,info,update,mode) if (ldx < ncol) call x%reall(ncol,x%get_ncols(),info) if(info /= psb_success_) then - info=psb_err_from_subroutine_ ; ch_err='psb_reall' + info=psb_err_from_subroutine_ + ch_err='psb_reall' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,lone,x%v,desc_a,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,lone,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then diff --git a/base/comm/psb_lscatter.F90 b/base/comm/psb_lscatter.F90 index 0ebbe28eb..fb80711bd 100644 --- a/base/comm/psb_lscatter.F90 +++ b/base/comm/psb_lscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_lspgather.F90 b/base/comm/psb_lspgather.F90 index 5bab14448..1e8dcf65d 100644 --- a/base/comm/psb_lspgather.F90 +++ b/base/comm/psb_lspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_mgather_a.f90 b/base/comm/psb_mgather_a.f90 index df574ea29..7f94883fc 100644 --- a/base/comm/psb_mgather_a.f90 +++ b/base/comm/psb_mgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_mgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_mhalo_a.f90 b/base/comm/psb_mhalo_a.f90 index c3f6a6889..0b020d81e 100644 --- a/base/comm/psb_mhalo_a.f90 +++ b/base/comm/psb_mhalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_mhalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_movrl_a.f90 b/base/comm/psb_movrl_a.f90 index 983bcbf81..607674dd2 100644 --- a/base/comm/psb_movrl_a.f90 +++ b/base/comm/psb_movrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_movrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_mscatter_a.F90 b/base/comm/psb_mscatter_a.F90 index 628fcf19d..847320adb 100644 --- a/base/comm/psb_mscatter_a.F90 +++ b/base/comm/psb_mscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_mscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sgather.f90 b/base/comm/psb_sgather.f90 index 59cecc175..d095ba456 100644 --- a/base/comm/psb_sgather.f90 +++ b/base/comm/psb_sgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sgather_a.f90 b/base/comm/psb_sgather_a.f90 index 28d5f5dca..d19d31a12 100644 --- a/base/comm/psb_sgather_a.f90 +++ b/base/comm/psb_sgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_sgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_shalo.f90 b/base/comm/psb_shalo.f90 index 366f3713f..0a4ce01d9 100644 --- a/base/comm/psb_shalo.f90 +++ b/base/comm/psb_shalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,31 +51,32 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_shalo_vect(x,desc_a,info,tran,mode,data) +subroutine psb_shalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_shalo_vect use psi_mod implicit none - type(psb_s_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_s_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw - - name = 'psb_shalo_vect' + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + & nrow, ncol, lldx, imode,data_ + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw + + name = 'psb_shalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -115,23 +116,22 @@ subroutine psb_shalo_vect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) + imode = psb_comm_status_sync_ endif if ((info == 0).and.(lldx psb_shalom use psi_mod implicit none @@ -217,7 +217,7 @@ end subroutine psb_shalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sovrl.f90 b/base/comm/psb_sovrl.f90 index 9ca9c6b4e..0300e10e6 100644 --- a/base/comm/psb_sovrl.f90 +++ b/base/comm/psb_sovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -67,28 +67,28 @@ subroutine psb_sovrl_vect(x,desc_a,info,update,mode) use psi_mod implicit none - type(psb_s_vect_type), intent(inout) :: x + type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_sovrl_vect' + name = 'psb_sovrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 end if - ctxt = desc_a%get_context() + ctxt=desc_a%get_context() ! check on blacs grid call psb_info(ctxt, me, np) @@ -136,14 +136,15 @@ subroutine psb_sovrl_vect(x,desc_a,info,update,mode) ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_, sone, x%v, desc_a, info, data=psb_comm_ovr_) + call psi_swapdata(mode_,sone,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') goto 9999 end if - + call psb_erractionrestore(err_act) return @@ -183,26 +184,26 @@ end subroutine psb_sovrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_sovrl_multivect(x,desc_a,info,update,mode) +subroutine psb_sovrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_sovrl_multivect use psi_mod implicit none - type(psb_s_multivect_type), intent(inout) :: x + type(psb_s_multivect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_sovrl_multivect' + name = 'psb_sovrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then @@ -244,7 +245,7 @@ subroutine psb_sovrl_multivect(x,desc_a,info,update,mode) if (present(mode)) then mode_ = mode else - mode_ = IOR(psb_swap_send_,psb_swap_recv_) + mode_ = psb_comm_status_sync_ endif do_swap = (mode_ /= 0) @@ -252,14 +253,16 @@ subroutine psb_sovrl_multivect(x,desc_a,info,update,mode) if (ldx < ncol) call x%reall(ncol,x%get_ncols(),info) if(info /= psb_success_) then - info=psb_err_from_subroutine_ ; ch_err='psb_reall' + info=psb_err_from_subroutine_ + ch_err='psb_reall' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_, sone, x%v, desc_a, info, data=psb_comm_ovr_) + call psi_swapdata(mode_,sone,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then diff --git a/base/comm/psb_sovrl_a.f90 b/base/comm/psb_sovrl_a.f90 index 6ced0fd57..ddce2b2bb 100644 --- a/base/comm/psb_sovrl_a.f90 +++ b/base/comm/psb_sovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_sovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sscatter.F90 b/base/comm/psb_sscatter.F90 index f2b79e839..802be716b 100644 --- a/base/comm/psb_sscatter.F90 +++ b/base/comm/psb_sscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sscatter_a.F90 b/base/comm/psb_sscatter_a.F90 index e060bd1c8..ae8525d32 100644 --- a/base/comm/psb_sscatter_a.F90 +++ b/base/comm/psb_sscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_sscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_sspgather.F90 b/base/comm/psb_sspgather.F90 index d6317de22..14efe3539 100644 --- a/base/comm/psb_sspgather.F90 +++ b/base/comm/psb_sspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zgather.f90 b/base/comm/psb_zgather.f90 index 5cf445a9b..b4bf15b7e 100644 --- a/base/comm/psb_zgather.f90 +++ b/base/comm/psb_zgather.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zgather_a.f90 b/base/comm/psb_zgather_a.f90 index fa5f288b5..0b702835d 100644 --- a/base/comm/psb_zgather_a.f90 +++ b/base/comm/psb_zgather_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -189,7 +189,7 @@ end subroutine psb_zgatherm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zhalo.f90 b/base/comm/psb_zhalo.f90 index b3e37d027..beed0238c 100644 --- a/base/comm/psb_zhalo.f90 +++ b/base/comm/psb_zhalo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,31 +51,32 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -subroutine psb_zhalo_vect(x,desc_a,info,tran,mode,data) +subroutine psb_zhalo_vect(x,desc_a,info,tran,mode,data) use psb_base_mod, psb_protect_name => psb_zhalo_vect use psi_mod implicit none - type(psb_z_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_z_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & - & nrow, ncol, lldx, imode, data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw - - name = 'psb_zhalo_vect' + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + & nrow, ncol, lldx, imode,data_ + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw + + name = 'psb_zhalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -115,7 +116,7 @@ subroutine psb_zhalo_vect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) + imode = psb_comm_status_sync_ endif if ((info == 0).and.(lldx psb_zhalo_multivect use psi_mod implicit none type(psb_z_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, iix, jjx, & & nrow, ncol, lldx, imode, data_ - integer(psb_lpk_) :: m, n, ix, ijx - character :: tran_ - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + character :: tran_ + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_zhalo_multivect' + name = 'psb_zhalov' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -237,7 +239,7 @@ subroutine psb_zhalo_multivect(x,desc_a,info,tran,mode,data) if (present(mode)) then imode = mode else - imode = IOR(psb_swap_send_,psb_swap_recv_) + imode = psb_comm_status_sync_ endif if (lldx < ncol) call x%reall(ncol,x%get_ncols(),info) diff --git a/base/comm/psb_zhalo_a.f90 b/base/comm/psb_zhalo_a.f90 index 2acc24631..fac264995 100644 --- a/base/comm/psb_zhalo_a.f90 +++ b/base/comm/psb_zhalo_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -217,7 +217,7 @@ end subroutine psb_zhalom !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zovrl.f90 b/base/comm/psb_zovrl.f90 index 60a8a76ad..00c376710 100644 --- a/base/comm/psb_zovrl.f90 +++ b/base/comm/psb_zovrl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -67,21 +67,21 @@ subroutine psb_zovrl_vect(x,desc_a,info,update,mode) use psi_mod implicit none - type(psb_z_vect_type), intent(inout) :: x + type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_zovrl_vect' + name = 'psb_zovrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then @@ -136,7 +136,8 @@ subroutine psb_zovrl_vect(x,desc_a,info,update,mode) ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,zone,x%v,desc_a,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,zone,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then @@ -183,26 +184,26 @@ end subroutine psb_zovrl_vect ! - if (swap_recv): use psb_rcv (completing a ! previous call with swap_send) ! -subroutine psb_zovrl_multivect(x,desc_a,info,update,mode) +subroutine psb_zovrl_multivect(x,desc_a,info,update,mode) use psb_base_mod, psb_protect_name => psb_zovrl_multivect use psi_mod implicit none type(psb_z_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & + integer(psb_ipk_) :: np, me, err_act, k, iix, jjx, & & nrow, ncol, ldx, data_, update_, mode_ - integer(psb_lpk_) :: m, n, ix, ijx - logical :: do_swap - character(len=20) :: name, ch_err - logical :: aliw + integer(psb_lpk_) :: m, n, ix, ijx + logical :: do_swap + character(len=20) :: name, ch_err + logical :: aliw - name = 'psb_zovrl_multivect' + name = 'psb_zovrlv' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then @@ -244,7 +245,7 @@ subroutine psb_zovrl_multivect(x,desc_a,info,update,mode) if (present(mode)) then mode_ = mode else - mode_ = IOR(psb_swap_send_,psb_swap_recv_) + mode_ = psb_comm_status_sync_ endif do_swap = (mode_ /= 0) @@ -252,14 +253,16 @@ subroutine psb_zovrl_multivect(x,desc_a,info,update,mode) if (ldx < ncol) call x%reall(ncol,x%get_ncols(),info) if(info /= psb_success_) then - info=psb_err_from_subroutine_ ; ch_err='psb_reall' + info=psb_err_from_subroutine_ + ch_err='psb_reall' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if ! exchange overlap elements if (do_swap) then - call psi_swapdata(mode_,zone,x%v,desc_a,info,data=psb_comm_ovr_) + call psi_swapdata(mode_,zone,x%v,& + & desc_a,info,data=psb_comm_ovr_) end if if (info == psb_success_) call psi_ovrl_upd(x%v,desc_a,update_,info) if (info /= psb_success_) then diff --git a/base/comm/psb_zovrl_a.f90 b/base/comm/psb_zovrl_a.f90 index e7a87cef8..f95b827ac 100644 --- a/base/comm/psb_zovrl_a.f90 +++ b/base/comm/psb_zovrl_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -208,7 +208,7 @@ end subroutine psb_zovrlm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zscatter.F90 b/base/comm/psb_zscatter.F90 index f8d2102b6..aae8efd34 100644 --- a/base/comm/psb_zscatter.F90 +++ b/base/comm/psb_zscatter.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zscatter_a.F90 b/base/comm/psb_zscatter_a.F90 index d51dc82ac..5321905ae 100644 --- a/base/comm/psb_zscatter_a.F90 +++ b/base/comm/psb_zscatter_a.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -262,7 +262,7 @@ end subroutine psb_zscatterm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/comm/psb_zspgather.F90 b/base/comm/psb_zspgather.F90 index 5d4a809b3..5533b5095 100644 --- a/base/comm/psb_zspgather.F90 +++ b/base/comm/psb_zspgather.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/Makefile b/base/modules/Makefile index 7d4a1b362..7ab71d300 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -33,22 +33,26 @@ SERIAL_MODS=serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o \ comm/comm_schemes/psb_comm_neighbor_impl_mod.o \ comm/comm_schemes/psb_comm_rma_mod.o \ comm/comm_schemes/psb_comm_factory_mod.o \ + serial/psb_i2_base_vect_mod.o serial/psb_i2_vect_mod.o\ serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o\ serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o\ serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o\ serial/psb_s_base_vect_mod.o serial/psb_s_vect_mod.o\ serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o\ serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o\ - serial/psb_vect_mod.o\ - auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o \ + serial/psb_vect_mod.o \ + auxil/psi_serial_mod.o \ + auxil/psi_i2_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o \ auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o \ auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o \ - psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o\ + psi_mod.o psi_i2_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o\ auxil/psb_ip_reord_mod.o\ auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o \ auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o \ auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o \ auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o \ + auxil/psb_i2_hsort_mod.o auxil/psb_i2_isort_mod.o \ + auxil/psb_i2_msort_mod.o auxil/psb_i2_qsort_mod.o \ auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o \ auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o \ auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o \ @@ -108,6 +112,7 @@ UTIL_MODS = desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o\ comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\ comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o \ comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o \ + comm/psi_i2_comm_a_mod.o comm/psi_i2_comm_v_mod.o \ comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o \ comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o \ comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o \ @@ -142,6 +147,7 @@ $(LIBDIR)/$(LIBNAME): objs $(OBJS): $(MODULES) psb_error_mod.o: psb_const_mod.o psb_realloc_mod.o \ + auxil/psb_i2_realloc_mod.o \ auxil/psb_m_realloc_mod.o \ auxil/psb_e_realloc_mod.o \ auxil/psb_s_realloc_mod.o \ @@ -154,6 +160,7 @@ penv/psi_collective_mod.o penv/psi_p2p_mod.o: penv/psi_penv_mod.o psb_realloc_mod.o: auxil/psb_m_realloc_mod.o \ auxil/psb_e_realloc_mod.o \ + auxil/psb_i2_realloc_mod.o \ auxil/psb_s_realloc_mod.o \ auxil/psb_d_realloc_mod.o \ auxil/psb_c_realloc_mod.o \ @@ -184,7 +191,7 @@ penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_m auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o \ -auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o \ +auxil/psb_string_mod.o auxil/psb_i2_realloc_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o \ auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o \ desc/psb_desc_const_mod.o psi_penv_mod.o: psb_const_mod.o @@ -209,6 +216,8 @@ auxil/psb_sort_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o \ auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o \ auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o \ auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o \ + auxil/psb_i2_hsort_mod.o auxil/psb_i2_isort_mod.o \ + auxil/psb_i2_msort_mod.o auxil/psb_i2_qsort_mod.o \ auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o \ auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o \ auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o \ @@ -230,6 +239,8 @@ auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o \ auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o \ auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o \ auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o \ +auxil/psb_i2_hsort_mod.o auxil/psb_i2_isort_mod.o \ +auxil/psb_i2_msort_mod.o auxil/psb_i2_qsort_mod.o \ auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o \ auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o \ auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o \ @@ -248,20 +259,20 @@ auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o \ auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o \ auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o : psb_realloc_mod.o psb_const_mod.o - -auxil/psb_i_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o +auxil/psb_i2_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_i2_hsort_mod.o +auxil/psb_i_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_i2_hsort_mod.o auxil/psb_l_hsort_x_mod.o: auxil/psb_m_hsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_s_hsort_x_mod.o: auxil/psb_s_hsort_mod.o auxil/psb_d_hsort_x_mod.o: auxil/psb_d_hsort_mod.o auxil/psb_c_hsort_x_mod.o: auxil/psb_c_hsort_mod.o auxil/psb_z_hsort_x_mod.o: auxil/psb_z_hsort_mod.o -auxil/psi_serial_mod.o: auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o \ +auxil/psi_serial_mod.o: auxil/psi_i2_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o \ auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o\ auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o \ auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o -auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o: psb_const_mod.o +auxil/psi_i2_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o: psb_const_mod.o auxil/psb_ip_reord_mod.o: auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o \ auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o \ @@ -276,13 +287,13 @@ serial/psb_s_base_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_c_base_mat_mo serial/psb_s_base_mat_mod.o: serial/psb_s_base_vect_mod.o serial/psb_d_base_mat_mod.o: serial/psb_d_base_vect_mod.o #serial/psb_ld_base_mat_mod.o: serial/psb_d_base_vect_mod.o -serial/psb_c_base_mat_mod.o: serial/psb_c_base_vect_mod.o -serial/psb_z_base_mat_mod.o: serial/psb_z_base_vect_mod.o -serial/psb_l_base_vect_mod.o: serial/psb_i_base_vect_mod.o -serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_z_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o -serial/psb_d_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_factory_mod.o +serial/psb_c_base_mat_mod.o: serial/psb_c_base_vect_mod.o +serial/psb_z_base_mat_mod.o: serial/psb_z_base_vect_mod.o +serial/psb_i2_base_vect_mod.o: serial/psb_i_base_vect_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_factory_mod.o +serial/psb_l_base_vect_mod.o: serial/psb_i_base_vect_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_factory_mod.o +serial/psb_d_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_z_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_factory_mod.o serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: auxil/psi_serial_mod.o psb_realloc_mod.o comm/comm_schemes/psb_comm_neighbor_impl_mod.o \ - comm/psb_neighbor_topology_mod.o + comm/psb_neighbor_topology_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_factory_mod.o comm/comm_schemes/psb_comm_schemes_mod.o comm/comm_schemes/psb_comm_factory_mod.o serial/psb_s_mat_mod.o: serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_vect_mod.o \ serial/psb_i_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_mat_mod.o: serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_vect_mod.o \ @@ -299,6 +310,7 @@ serial/psb_z_csc_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_lz_csr_mat_mod. serial/psb_mat_mod.o: serial/psb_vect_mod.o serial/psb_s_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_mat_mod.o serial/psb_serial_mod.o: serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o auxil/psi_serial_mod.o serial/psb_i_vect_mod.o: serial/psb_i_base_vect_mod.o +serial/psb_i2_vect_mod.o: serial/psb_i2_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_vect_mod.o: serial/psb_l_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_s_vect_mod.o: serial/psb_s_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_d_vect_mod.o: serial/psb_d_base_vect_mod.o serial/psb_i_vect_mod.o @@ -324,10 +336,12 @@ desc/psb_desc_mod.o: psb_penv_mod.o psb_realloc_mod.o\ desc/psb_repl_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_desc_const_mod.o\ desc/psb_indx_map_mod.o serial/psb_i_vect_mod.o +psi_i2_mod.o: desc/psb_desc_mod.o serial/psb_i2_vect_mod.o comm/psi_e_comm_a_mod.o \ + comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_i2_comm_a_mod.o comm/psi_i2_comm_v_mod.o psi_i_mod.o: desc/psb_desc_mod.o serial/psb_i_vect_mod.o comm/psi_e_comm_a_mod.o \ - comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o + comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_i2_comm_a_mod.o comm/psi_i2_comm_v_mod.o psi_l_mod.o: desc/psb_desc_mod.o serial/psb_l_vect_mod.o comm/psi_e_comm_a_mod.o \ - comm/psi_m_comm_a_mod.o comm/psi_l_comm_v_mod.o + comm/psi_m_comm_a_mod.o comm/psi_l_comm_v_mod.o comm/psi_i2_comm_a_mod.o comm/psi_i2_comm_v_mod.o psi_s_mod.o: desc/psb_desc_mod.o serial/psb_s_vect_mod.o comm/psi_s_comm_a_mod.o \ comm/psi_s_comm_v_mod.o psi_d_mod.o: desc/psb_desc_mod.o serial/psb_d_vect_mod.o comm/psi_d_comm_a_mod.o \ @@ -337,7 +351,7 @@ psi_c_mod.o: desc/psb_desc_mod.o serial/psb_c_vect_mod.o comm/psi_c_comm_a_mod.o psi_z_mod.o: desc/psb_desc_mod.o serial/psb_z_vect_mod.o comm/psi_z_comm_a_mod.o \ comm/psi_z_comm_v_mod.o psi_mod.o: psb_penv_mod.o desc/psb_desc_mod.o auxil/psi_serial_mod.o serial/psb_serial_mod.o\ - psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o + psi_i2_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o desc/psb_indx_map_mod.o: desc/psb_desc_const_mod.o psb_error_mod.o psb_penv_mod.o psb_realloc_mod.o auxil/psb_sort_mod.o desc/psb_hash_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_gen_block_map_mod.o:\ @@ -376,6 +390,8 @@ comm/psb_d_comm_mod.o: serial/psb_d_vect_mod.o desc/psb_desc_mod.o serial/psb_ma comm/psb_c_comm_mod.o: serial/psb_c_vect_mod.o desc/psb_desc_mod.o serial/psb_mat_mod.o comm/psb_z_comm_mod.o: serial/psb_z_vect_mod.o desc/psb_desc_mod.o serial/psb_mat_mod.o +comm/psi_i2_comm_v_mod.o: serial/psb_i2_vect_mod.o comm/psi_i2_comm_a_mod.o \ + comm/psi_m_comm_a_mod.o comm/psi_i_comm_v_mod.o: serial/psb_i_vect_mod.o comm/psi_e_comm_a_mod.o \ comm/psi_m_comm_a_mod.o comm/psi_l_comm_v_mod.o: serial/psb_l_vect_mod.o comm/psi_e_comm_a_mod.o \ @@ -385,7 +401,7 @@ comm/psi_d_comm_v_mod.o: serial/psb_d_vect_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_v_mod.o: serial/psb_c_vect_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_v_mod.o: serial/psb_z_vect_mod.o comm/psi_z_comm_a_mod.o -comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o \ +comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_i2_comm_a_mod.o \ comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o \ comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o: desc/psb_desc_mod.o diff --git a/base/modules/auxil/psb_c_hsort_mod.f90 b/base/modules/auxil/psb_c_hsort_mod.f90 index 863614c9a..ad375db79 100644 --- a/base/modules/auxil/psb_c_hsort_mod.f90 +++ b/base/modules/auxil/psb_c_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_hsort_x_mod.f90 b/base/modules/auxil/psb_c_hsort_x_mod.f90 index 8f0437f7c..1787a77b7 100644 --- a/base/modules/auxil/psb_c_hsort_x_mod.f90 +++ b/base/modules/auxil/psb_c_hsort_x_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_ip_reord_mod.F90 b/base/modules/auxil/psb_c_ip_reord_mod.F90 index daec3a65f..99b3354e9 100644 --- a/base/modules/auxil/psb_c_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_c_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_isort_mod.f90 b/base/modules/auxil/psb_c_isort_mod.f90 index 302a2d8ec..bc46e9516 100644 --- a/base/modules/auxil/psb_c_isort_mod.f90 +++ b/base/modules/auxil/psb_c_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_msort_mod.f90 b/base/modules/auxil/psb_c_msort_mod.f90 index 54103747c..efd5fb7ad 100644 --- a/base/modules/auxil/psb_c_msort_mod.f90 +++ b/base/modules/auxil/psb_c_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_qsort_mod.f90 b/base/modules/auxil/psb_c_qsort_mod.f90 index 178fdc721..b055fc07c 100644 --- a/base/modules/auxil/psb_c_qsort_mod.f90 +++ b/base/modules/auxil/psb_c_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_rb_idx_tree_mod.f90 b/base/modules/auxil/psb_c_rb_idx_tree_mod.f90 index 9b3ada6e4..f3669f69e 100644 --- a/base/modules/auxil/psb_c_rb_idx_tree_mod.f90 +++ b/base/modules/auxil/psb_c_rb_idx_tree_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_c_realloc_mod.F90 b/base/modules/auxil/psb_c_realloc_mod.F90 index 16be31838..dae4f8974 100644 --- a/base/modules/auxil/psb_c_realloc_mod.F90 +++ b/base/modules/auxil/psb_c_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_hsort_mod.f90 b/base/modules/auxil/psb_d_hsort_mod.f90 index e9d10a706..d54886471 100644 --- a/base/modules/auxil/psb_d_hsort_mod.f90 +++ b/base/modules/auxil/psb_d_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_hsort_x_mod.f90 b/base/modules/auxil/psb_d_hsort_x_mod.f90 index ba45d6833..adefb3c46 100644 --- a/base/modules/auxil/psb_d_hsort_x_mod.f90 +++ b/base/modules/auxil/psb_d_hsort_x_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_ip_reord_mod.F90 b/base/modules/auxil/psb_d_ip_reord_mod.F90 index 7cd0a2699..229cafc5e 100644 --- a/base/modules/auxil/psb_d_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_d_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_isort_mod.f90 b/base/modules/auxil/psb_d_isort_mod.f90 index e5e2a09a6..f59e1cc07 100644 --- a/base/modules/auxil/psb_d_isort_mod.f90 +++ b/base/modules/auxil/psb_d_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_msort_mod.f90 b/base/modules/auxil/psb_d_msort_mod.f90 index 3c4559bfe..b9acd7cdf 100644 --- a/base/modules/auxil/psb_d_msort_mod.f90 +++ b/base/modules/auxil/psb_d_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_qsort_mod.f90 b/base/modules/auxil/psb_d_qsort_mod.f90 index 4a9953d8b..ca547cd2e 100644 --- a/base/modules/auxil/psb_d_qsort_mod.f90 +++ b/base/modules/auxil/psb_d_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_rb_idx_tree_mod.f90 b/base/modules/auxil/psb_d_rb_idx_tree_mod.f90 index 099d1a305..b68326d0b 100644 --- a/base/modules/auxil/psb_d_rb_idx_tree_mod.f90 +++ b/base/modules/auxil/psb_d_rb_idx_tree_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_d_realloc_mod.F90 b/base/modules/auxil/psb_d_realloc_mod.F90 index ae093a4a3..96d094d5a 100644 --- a/base/modules/auxil/psb_d_realloc_mod.F90 +++ b/base/modules/auxil/psb_d_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_hsort_mod.f90 b/base/modules/auxil/psb_e_hsort_mod.f90 index 3bc38743a..5789c680e 100644 --- a/base/modules/auxil/psb_e_hsort_mod.f90 +++ b/base/modules/auxil/psb_e_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_ip_reord_mod.F90 b/base/modules/auxil/psb_e_ip_reord_mod.F90 index 7369d1f2f..7b018cab1 100644 --- a/base/modules/auxil/psb_e_ip_reord_mod.F90 +++ b/base/modules/auxil/psb_e_ip_reord_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_isort_mod.f90 b/base/modules/auxil/psb_e_isort_mod.f90 index 4006c4120..dd859b7ec 100644 --- a/base/modules/auxil/psb_e_isort_mod.f90 +++ b/base/modules/auxil/psb_e_isort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_msort_mod.f90 b/base/modules/auxil/psb_e_msort_mod.f90 index ef9d5b8d6..0f1637afd 100644 --- a/base/modules/auxil/psb_e_msort_mod.f90 +++ b/base/modules/auxil/psb_e_msort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_qsort_mod.f90 b/base/modules/auxil/psb_e_qsort_mod.f90 index bfd9aa0d2..f3d2457e7 100644 --- a/base/modules/auxil/psb_e_qsort_mod.f90 +++ b/base/modules/auxil/psb_e_qsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_e_realloc_mod.F90 b/base/modules/auxil/psb_e_realloc_mod.F90 index 688753d88..b3749ced6 100644 --- a/base/modules/auxil/psb_e_realloc_mod.F90 +++ b/base/modules/auxil/psb_e_realloc_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i2_hsort_mod.f90 b/base/modules/auxil/psb_i2_hsort_mod.f90 index 76f7c3fe8..9c5fc4985 100644 --- a/base/modules/auxil/psb_i2_hsort_mod.f90 +++ b/base/modules/auxil/psb_i2_hsort_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/auxil/psb_i2_hsort_x_mod.f90 b/base/modules/auxil/psb_i2_hsort_x_mod.f90 new file mode 100644 index 000000000..1c4d0ea8e --- /dev/null +++ b/base/modules/auxil/psb_i2_hsort_x_mod.f90 @@ -0,0 +1,312 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! Sorting routines +! References: +! D. Knuth +! The Art of Computer Programming, vol. 3 +! Addison-Wesley +! +! Aho, Hopcroft, Ullman +! Data Structures and Algorithms +! Addison-Wesley +! +module psb_i2_hsort_x_mod + use psb_const_mod + use psb_e_hsort_mod + use psb_m_hsort_mod + use psb_i2_hsort_mod + + type psb_i2_heap + integer(psb_ipk_) :: dir + integer(psb_ipk_) :: last + integer(psb_i2pk_), allocatable :: keys(:) + contains + procedure, pass(heap) :: init => psb_i2_init_heap + procedure, pass(heap) :: howmany => psb_i2_howmany + procedure, pass(heap) :: insert => psb_i2_insert_heap + procedure, pass(heap) :: get_first => psb_i2_heap_get_first + procedure, pass(heap) :: dump => psb_i2_dump_heap + procedure, pass(heap) :: free => psb_i2_free_heap + end type psb_i2_heap + + type psb_i2_idx_heap + integer(psb_ipk_) :: dir + integer(psb_ipk_) :: last + integer(psb_i2pk_), allocatable :: keys(:) + integer(psb_ipk_), allocatable :: idxs(:) + contains + procedure, pass(heap) :: init => psb_i2_idx_init_heap + procedure, pass(heap) :: howmany => psb_i2_idx_howmany + procedure, pass(heap) :: insert => psb_i2_idx_insert_heap + procedure, pass(heap) :: get_first => psb_i2_idx_heap_get_first + procedure, pass(heap) :: dump => psb_i2_idx_dump_heap + procedure, pass(heap) :: free => psb_i2_idx_free_heap + end type psb_i2_idx_heap + + +contains + + subroutine psb_i2_init_heap(heap,info,dir) + use psb_realloc_mod, only : psb_ensure_size + implicit none + class(psb_i2_heap), intent(inout) :: heap + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: dir + + info = psb_success_ + heap%last=0 + if (present(dir)) then + heap%dir = dir + else + heap%dir = psb_sort_up_ + endif + select case(heap%dir) + case (psb_sort_up_,psb_sort_down_,psb_asort_up_,psb_asort_down_) + ! ok, do nothing + case default + write(psb_err_unit,*) 'Invalid direction, defaulting to psb_sort_up_' + heap%dir = psb_sort_up_ + end select + call psb_ensure_size(psb_heap_resize,heap%keys,info) + + return + end subroutine psb_i2_init_heap + + + function psb_i2_howmany(heap) result(res) + implicit none + class(psb_i2_heap), intent(in) :: heap + integer(psb_ipk_) :: res + res = heap%last + end function psb_i2_howmany + + subroutine psb_i2_insert_heap(key,heap,info) + use psb_realloc_mod, only : psb_ensure_size + implicit none + + integer(psb_i2pk_), intent(in) :: key + class(psb_i2_heap), intent(inout) :: heap + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + if (heap%last < 0) then + write(psb_err_unit,*) 'Invalid last in heap ',heap%last + info = heap%last + return + endif + + call psb_ensure_size(heap%last+1,heap%keys,info) + if (info /= psb_success_) then + write(psb_err_unit,*) 'Memory allocation failure in heap_insert' + info = -5 + return + end if + call psi_insert_heap(key,& + & heap%last,heap%keys,heap%dir,info) + + return + end subroutine psb_i2_insert_heap + + subroutine psb_i2_heap_get_first(key,heap,info) + implicit none + + class(psb_i2_heap), intent(inout) :: heap + integer(psb_ipk_), intent(out) :: info + integer(psb_i2pk_), intent(out) :: key + + + info = psb_success_ + + call psi_heap_get_first(key,& + & heap%last,heap%keys,heap%dir,info) + + return + end subroutine psb_i2_heap_get_first + + subroutine psb_i2_dump_heap(iout,heap,info) + + implicit none + class(psb_i2_heap), intent(in) :: heap + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: iout + + info = psb_success_ + if (iout < 0) then + write(psb_err_unit,*) 'Invalid file ' + info =-1 + return + end if + + write(iout,*) 'Heap direction ',heap%dir + write(iout,*) 'Heap size ',heap%last + if ((heap%last > 0).and.((.not.allocated(heap%keys)).or.& + & (size(heap%keys) 0).and.((.not.allocated(heap%keys)).or.& + & (size(heap%keys) 0).and.((.not.allocated(heap%idxs)).or.& + & (size(heap%idxs) psb_comm_rma_init procedure, pass :: free => psb_comm_rma_free procedure, pass :: clear_memory_buffer_layout => psb_comm_rma_clear_memory_buffer_layout procedure, pass :: init_memory_buffer_layout => psb_comm_rma_ini_memory_buffer_layout + procedure, pass :: init_memory_buffer_layout_tran => psb_comm_rma_ini_memory_buffer_layout_tran procedure, pass :: set_swap_status => psb_comm_rma_set_swap_status procedure, pass :: get_swap_status => psb_comm_rma_get_swap_status end type psb_comm_rma_handle @@ -75,6 +79,9 @@ contains if (allocated(this%peer_remote_recv_displs)) deallocate(this%peer_remote_recv_displs) if (allocated(this%peer_send_indexes)) deallocate(this%peer_send_indexes) if (allocated(this%peer_recv_indexes)) deallocate(this%peer_recv_indexes) + if (allocated(this%notify_buf)) deallocate(this%notify_buf) + if (allocated(this%notify_recv_reqs)) deallocate(this%notify_recv_reqs) + if (allocated(this%notify_send_reqs)) deallocate(this%notify_send_reqs) this%layout_ready = .false. this%layout_nnbr = -1 @@ -115,6 +122,15 @@ contains info = psb_err_alloc_dealloc_ return end if + allocate(this%notify_buf(n_neighbors), this%notify_recv_reqs(n_neighbors), & + & this%notify_send_reqs(n_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + return + end if + this%notify_buf = 0_psb_mpk_ + this%notify_recv_reqs = MPI_REQUEST_NULL + this%notify_send_reqs = MPI_REQUEST_NULL end if if (send_total > 0) then @@ -221,6 +237,139 @@ contains call this%clear_memory_buffer_layout(info) end subroutine psb_comm_rma_free + ! Transpose variant: peer_send_* is filled from comm_list RECV area, + ! peer_recv_* from comm_list SEND area. Metadata exchange tells peers our + ! recv displacement so they can GET/PUT to the correct location in swaptran. + ! layout_send = total_recv (effective send), layout_recv = total_send. + subroutine psb_comm_rma_ini_memory_buffer_layout_tran(this, info, comm_list, peer_mpi_rank, & + & num_neighbors, total_send, total_recv, my_rank, icomm) + class(psb_comm_rma_handle), intent(inout) :: this + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: comm_list(:) + integer(psb_ipk_), intent(in) :: peer_mpi_rank(:) + integer(psb_ipk_), intent(in) :: num_neighbors, total_send, total_recv + integer(psb_ipk_), intent(in) :: my_rank + integer(psb_mpk_), intent(in) :: icomm + + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size), prc_rank + integer(psb_ipk_) :: n_neighbors, eff_send, eff_recv + integer(psb_ipk_) :: neighbor_idx, item_idx + integer(psb_ipk_) :: list_pos, send_offset, recv_offset + integer(psb_ipk_) :: proc_to_comm, actual_recv_count, actual_send_count + integer(psb_ipk_) :: local_meta(4), remote_meta(4) + + call this%clear_memory_buffer_layout(info) + if (info /= psb_success_) return + + n_neighbors = num_neighbors + ! For transpose: effective send = actual recv, effective recv = actual send + eff_send = total_recv + eff_recv = total_send + + if (n_neighbors > 0) then + allocate(this%peer_proc(n_neighbors), this%peer_send_counts(n_neighbors), & + & this%peer_recv_counts(n_neighbors), this%peer_send_displs(n_neighbors), & + & this%peer_recv_displs(n_neighbors), this%peer_mpi_rank(n_neighbors), & + & this%peer_remote_send_displs(n_neighbors), this%peer_remote_recv_displs(n_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + return + end if + allocate(this%notify_buf(n_neighbors), this%notify_recv_reqs(n_neighbors), & + & this%notify_send_reqs(n_neighbors), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + return + end if + this%notify_buf = 0_psb_mpk_ + this%notify_recv_reqs = MPI_REQUEST_NULL + this%notify_send_reqs = MPI_REQUEST_NULL + end if + + if (eff_send > 0) then + allocate(this%peer_send_indexes(eff_send), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + return + end if + end if + + if (eff_recv > 0) then + allocate(this%peer_recv_indexes(eff_recv), stat=iret) + if (iret /= 0) then + info = psb_err_alloc_dealloc_ + return + end if + end if + + list_pos = 1 + send_offset = 0 + recv_offset = 0 + do neighbor_idx = 1, n_neighbors + proc_to_comm = comm_list(list_pos + psb_proc_id_) + actual_recv_count = comm_list(list_pos + psb_n_elem_recv_) + actual_send_count = comm_list(list_pos + actual_recv_count + psb_n_elem_send_) + + this%peer_proc(neighbor_idx) = proc_to_comm + ! Swap: effective send = actual recv, effective recv = actual send + this%peer_send_counts(neighbor_idx) = actual_recv_count + this%peer_recv_counts(neighbor_idx) = actual_send_count + this%peer_send_displs(neighbor_idx) = send_offset + this%peer_recv_displs(neighbor_idx) = recv_offset + this%peer_mpi_rank(neighbor_idx) = peer_mpi_rank(neighbor_idx) + + ! peer_send_indexes from RECV area of comm_list (these are indices we gather for "sending") + if (actual_recv_count > 0) then + do item_idx = 1, actual_recv_count + this%peer_send_indexes(send_offset + item_idx) = comm_list(list_pos + psb_elem_recv_ + item_idx - 1) + end do + end if + + ! peer_recv_indexes from SEND area of comm_list (these are indices we scatter into) + if (actual_send_count > 0) then + do item_idx = 1, actual_send_count + this%peer_recv_indexes(recv_offset + item_idx) = comm_list(list_pos + actual_recv_count + psb_elem_send_ + item_idx - 1) + end do + end if + + send_offset = send_offset + actual_recv_count + recv_offset = recv_offset + actual_send_count + list_pos = list_pos + actual_recv_count + actual_send_count + 3 + end do + + do neighbor_idx = 1, n_neighbors + proc_to_comm = this%peer_proc(neighbor_idx) + if (proc_to_comm /= my_rank) then + prc_rank = this%peer_mpi_rank(neighbor_idx) + ! Tell peer: our effective-send (=actual recv) displacement and count, + ! our effective-recv (=actual send) displacement (offset past eff_send area). + local_meta = (/ this%peer_send_displs(neighbor_idx)+1, this%peer_send_counts(neighbor_idx), & + & this%peer_recv_displs(neighbor_idx)+1+eff_send, this%peer_recv_counts(neighbor_idx) /) + call mpi_sendrecv(local_meta, 4, psb_mpi_mpk_, prc_rank, psb_rma_meta_tag, & + & remote_meta, 4, psb_mpi_mpk_, prc_rank, psb_rma_meta_tag, icomm, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + return + end if + this%peer_remote_send_displs(neighbor_idx) = remote_meta(1) + this%peer_remote_recv_displs(neighbor_idx) = remote_meta(3) + else + this%peer_remote_send_displs(neighbor_idx) = this%peer_send_displs(neighbor_idx)+1 + this%peer_remote_recv_displs(neighbor_idx) = this%peer_recv_displs(neighbor_idx)+1+eff_send + end if + end do + + if ((send_offset /= eff_send) .or. (recv_offset /= eff_recv)) then + info = psb_err_internal_error_ + return + end if + + this%layout_nnbr = n_neighbors + this%layout_send = eff_send + this%layout_recv = eff_recv + this%layout_ready = .true. + end subroutine psb_comm_rma_ini_memory_buffer_layout_tran + subroutine psb_comm_rma_set_swap_status(this, flag, info) class(psb_comm_rma_handle), intent(inout) :: this integer(psb_ipk_), intent(in) :: flag diff --git a/base/modules/comm/psb_c_comm_a_mod.f90 b/base/modules/comm/psb_c_comm_a_mod.f90 index 0fbcf01ec..c25270ecd 100644 --- a/base/modules/comm/psb_c_comm_a_mod.f90 +++ b/base/modules/comm/psb_c_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_c_comm_mod.f90 b/base/modules/comm/psb_c_comm_mod.f90 index 44126faae..584589b9c 100644 --- a/base/modules/comm/psb_c_comm_mod.f90 +++ b/base/modules/comm/psb_c_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -40,7 +40,7 @@ module psb_c_comm_mod subroutine psb_covrl_vect(x,desc_a,info,update,mode) import implicit none - type(psb_c_vect_type), intent(inout) :: x + type(psb_c_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode @@ -49,9 +49,9 @@ module psb_c_comm_mod import implicit none type(psb_c_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_covrl_multivect end interface psb_ovrl @@ -59,7 +59,7 @@ module psb_c_comm_mod subroutine psb_chalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_c_vect_type), intent(inout) :: x + type(psb_c_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: mode,data @@ -69,16 +69,16 @@ module psb_c_comm_mod import implicit none type(psb_c_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_chalo_multivect end interface psb_halo interface psb_scatter - subroutine psb_cscatter_vect(globx, locx, desc_a, info, root, mold) + subroutine psb_cscatter_vect(globx, locx, desc_a, info, root, mold) import implicit none type(psb_c_vect_type), intent(inout) :: locx diff --git a/base/modules/comm/psb_c_linmap_mod.f90 b/base/modules/comm/psb_c_linmap_mod.f90 index 4ccc8d55d..99957b00b 100644 --- a/base/modules/comm/psb_c_linmap_mod.f90 +++ b/base/modules/comm/psb_c_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -76,11 +76,11 @@ module psb_c_linmap_mod subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_c_vect_mod, only : psb_c_vect_type import :: psb_ipk_, psb_spk_, psb_clinmap_type - implicit none + implicit none class(psb_clinmap_type), intent(in) :: map complex(psb_spk_), intent(in) :: alpha,beta type(psb_c_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info type(psb_c_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_c_map_U2V_v end interface @@ -99,11 +99,11 @@ module psb_c_linmap_mod subroutine psb_c_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_c_vect_mod, only : psb_c_vect_type import :: psb_ipk_, psb_spk_, psb_clinmap_type - implicit none + implicit none class(psb_clinmap_type), intent(in) :: map complex(psb_spk_), intent(in) :: alpha,beta type(psb_c_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info type(psb_c_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_c_map_V2U_v end interface diff --git a/base/modules/comm/psb_comm_mod.f90 b/base/modules/comm/psb_comm_mod.f90 index 17cffe4cd..d9fabfa9e 100644 --- a/base/modules/comm/psb_comm_mod.f90 +++ b/base/modules/comm/psb_comm_mod.f90 @@ -45,4 +45,16 @@ module psb_comm_mod use psb_c_comm_mod use psb_z_comm_mod + ! Import scheme symbols and re-export them as public symbols from this module. + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, & + & psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_rma_pull_, psb_comm_rma_push_, psb_comm_unknown_, & + & psb_comm_status_unknown_, psb_comm_status_start_, psb_comm_status_wait_, & + & psb_comm_status_sync_ + + public :: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & + & psb_comm_unknown_, psb_comm_status_unknown_, psb_comm_status_start_, & + & psb_comm_status_wait_, psb_comm_status_sync_ + end module psb_comm_mod diff --git a/base/modules/comm/psb_d_comm_a_mod.f90 b/base/modules/comm/psb_d_comm_a_mod.f90 index 0190225f8..aa3c6feb8 100644 --- a/base/modules/comm/psb_d_comm_a_mod.f90 +++ b/base/modules/comm/psb_d_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -36,11 +36,11 @@ module psb_d_comm_a_mod subroutine psb_dovrlm(x,desc_a,info,jx,ik,work,update,mode) import implicit none - real(psb_dpk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info real(psb_dpk_), intent(inout), optional, target :: work(:) - integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode + integer(psb_ipk_), intent(in), optional :: update,jx,ik,mode end subroutine psb_dovrlm subroutine psb_dovrlv(x,desc_a,info,work,update,mode) import @@ -57,22 +57,22 @@ module psb_d_comm_a_mod subroutine psb_dhalom(x,desc_a,info,jx,ik,work,tran,mode,data) import implicit none - real(psb_dpk_), intent(inout), target :: x(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info real(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data - character, intent(in), optional :: tran + integer(psb_ipk_), intent(in), optional :: mode,jx,ik,data + character, intent(in), optional :: tran end subroutine psb_dhalom subroutine psb_dhalov(x,desc_a,info,work,tran,mode,data) import implicit none - real(psb_dpk_), intent(inout) :: x(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(inout) :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info real(psb_dpk_), target, optional, intent(inout) :: work(:) - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_dhalov end interface psb_halo diff --git a/base/modules/comm/psb_d_comm_mod.f90 b/base/modules/comm/psb_d_comm_mod.f90 index 90cbfbc9d..51d2cb69f 100644 --- a/base/modules/comm/psb_d_comm_mod.f90 +++ b/base/modules/comm/psb_d_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -40,18 +40,18 @@ module psb_d_comm_mod subroutine psb_dovrl_vect(x,desc_a,info,update,mode) import implicit none - type(psb_d_vect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_d_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_dovrl_vect subroutine psb_dovrl_multivect(x,desc_a,info,update,mode) import implicit none type(psb_d_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_dovrl_multivect end interface psb_ovrl @@ -59,20 +59,20 @@ module psb_d_comm_mod subroutine psb_dhalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_d_vect_type), intent(inout) :: x + type(psb_d_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info - character, intent(in), optional :: tran integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_dhalo_vect subroutine psb_dhalo_multivect(x,desc_a,info,tran,mode,data) import implicit none type(psb_d_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - character, intent(in), optional :: tran - integer(psb_ipk_), intent(in), optional :: mode,data + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_dhalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_d_linmap_mod.f90 b/base/modules/comm/psb_d_linmap_mod.f90 index 2bef33fd9..8463cfb39 100644 --- a/base/modules/comm/psb_d_linmap_mod.f90 +++ b/base/modules/comm/psb_d_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -76,11 +76,11 @@ module psb_d_linmap_mod subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_d_vect_mod, only : psb_d_vect_type import :: psb_ipk_, psb_dpk_, psb_dlinmap_type - implicit none + implicit none class(psb_dlinmap_type), intent(in) :: map real(psb_dpk_), intent(in) :: alpha,beta type(psb_d_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info type(psb_d_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_d_map_U2V_v end interface @@ -99,11 +99,11 @@ module psb_d_linmap_mod subroutine psb_d_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_d_vect_mod, only : psb_d_vect_type import :: psb_ipk_, psb_dpk_, psb_dlinmap_type - implicit none + implicit none class(psb_dlinmap_type), intent(in) :: map real(psb_dpk_), intent(in) :: alpha,beta type(psb_d_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info type(psb_d_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_d_map_V2U_v end interface diff --git a/base/modules/comm/psb_e_comm_a_mod.f90 b/base/modules/comm/psb_e_comm_a_mod.f90 index 0e57a4594..b9c9b1fe0 100644 --- a/base/modules/comm/psb_e_comm_a_mod.f90 +++ b/base/modules/comm/psb_e_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_i2_comm_a_mod.f90 b/base/modules/comm/psb_i2_comm_a_mod.f90 index 72cdf228b..7ac24f9d1 100644 --- a/base/modules/comm/psb_i2_comm_a_mod.f90 +++ b/base/modules/comm/psb_i2_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_i2_comm_mod.f90 b/base/modules/comm/psb_i2_comm_mod.f90 new file mode 100644 index 000000000..30af74391 --- /dev/null +++ b/base/modules/comm/psb_i2_comm_mod.f90 @@ -0,0 +1,113 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +module psb_i2_comm_mod + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_lpk_, psb_epk_, psb_mpk_, psb_i2pk_ + + use psb_i2_vect_mod, only : psb_i2_vect_type, psb_i2_base_vect_type + use psb_i2_multivect_mod, only : psb_i2_multivect_type, psb_i2_base_multivect_type + + interface psb_ovrl + subroutine psb_i2ovrl_vect(x,desc_a,info,update,mode) + import + implicit none + type(psb_i2_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode + end subroutine psb_i2ovrl_vect + subroutine psb_i2ovrl_multivect(x,desc_a,info,update,mode) + import + implicit none + type(psb_i2_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode + end subroutine psb_i2ovrl_multivect + end interface psb_ovrl + + interface psb_halo + subroutine psb_i2halo_vect(x,desc_a,info,tran,mode,data) + import + implicit none + type(psb_i2_vect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran + end subroutine psb_i2halo_vect + subroutine psb_i2halo_multivect(x,desc_a,info,tran,mode,data) + import + implicit none + type(psb_i2_multivect_type), intent(inout) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran + end subroutine psb_i2halo_multivect + end interface psb_halo + + + interface psb_scatter + subroutine psb_i2scatter_vect(globx, locx, desc_a, info, root, mold) + import + implicit none + type(psb_i2_vect_type), intent(inout) :: locx + integer(psb_i2pk_), intent(in) :: globx(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: root + class(psb_i2_base_vect_type), intent(in), optional :: mold + end subroutine psb_i2scatter_vect + end interface psb_scatter + + interface psb_gather + subroutine psb_i2gather_vect(globx, locx, desc_a, info, root) + import + implicit none + type(psb_i2_vect_type), intent(inout) :: locx + integer(psb_i2pk_), intent(out), allocatable :: globx(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: root + end subroutine psb_i2gather_vect + subroutine psb_i2gather_multivect(globx, locx, desc_a, info, root) + import + implicit none + type(psb_i2_multivect_type), intent(inout) :: locx + integer(psb_i2pk_), intent(out), allocatable :: globx(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: root + end subroutine psb_i2gather_multivect + end interface psb_gather + +end module psb_i2_comm_mod diff --git a/base/modules/comm/psb_i_comm_mod.f90 b/base/modules/comm/psb_i_comm_mod.f90 index a6f243278..781a37403 100644 --- a/base/modules/comm/psb_i_comm_mod.f90 +++ b/base/modules/comm/psb_i_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -30,7 +30,7 @@ ! ! module psb_i_comm_mod - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_lpk_, psb_epk_, psb_mpk_ + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_lpk_, psb_epk_, psb_mpk_, psb_i2pk_ use psb_i_vect_mod, only : psb_i_vect_type, psb_i_base_vect_type use psb_i_multivect_mod, only : psb_i_multivect_type, psb_i_base_multivect_type @@ -39,7 +39,7 @@ module psb_i_comm_mod subroutine psb_iovrl_vect(x,desc_a,info,update,mode) import implicit none - type(psb_i_vect_type), intent(inout) :: x + type(psb_i_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode @@ -48,9 +48,9 @@ module psb_i_comm_mod import implicit none type(psb_i_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_iovrl_multivect end interface psb_ovrl @@ -58,7 +58,7 @@ module psb_i_comm_mod subroutine psb_ihalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_i_vect_type), intent(inout) :: x + type(psb_i_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: mode,data @@ -68,10 +68,10 @@ module psb_i_comm_mod import implicit none type(psb_i_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_ihalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_l_comm_mod.f90 b/base/modules/comm/psb_l_comm_mod.f90 index 0f55c7b10..aa70f622a 100644 --- a/base/modules/comm/psb_l_comm_mod.f90 +++ b/base/modules/comm/psb_l_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -30,7 +30,7 @@ ! ! module psb_l_comm_mod - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_lpk_, psb_epk_, psb_mpk_ + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_lpk_, psb_epk_, psb_mpk_, psb_i2pk_ use psb_l_vect_mod, only : psb_l_vect_type, psb_l_base_vect_type use psb_l_multivect_mod, only : psb_l_multivect_type, psb_l_base_multivect_type @@ -39,7 +39,7 @@ module psb_l_comm_mod subroutine psb_lovrl_vect(x,desc_a,info,update,mode) import implicit none - type(psb_l_vect_type), intent(inout) :: x + type(psb_l_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode @@ -48,9 +48,9 @@ module psb_l_comm_mod import implicit none type(psb_l_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_lovrl_multivect end interface psb_ovrl @@ -58,7 +58,7 @@ module psb_l_comm_mod subroutine psb_lhalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_l_vect_type), intent(inout) :: x + type(psb_l_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: mode,data @@ -68,10 +68,10 @@ module psb_l_comm_mod import implicit none type(psb_l_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_lhalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_m_comm_a_mod.f90 b/base/modules/comm/psb_m_comm_a_mod.f90 index 105f14d7e..83a07e2d2 100644 --- a/base/modules/comm/psb_m_comm_a_mod.f90 +++ b/base/modules/comm/psb_m_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_s_comm_a_mod.f90 b/base/modules/comm/psb_s_comm_a_mod.f90 index 5ceaad8bf..8f1a88905 100644 --- a/base/modules/comm/psb_s_comm_a_mod.f90 +++ b/base/modules/comm/psb_s_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_s_comm_mod.f90 b/base/modules/comm/psb_s_comm_mod.f90 index 3430af4ce..ddb7232a5 100644 --- a/base/modules/comm/psb_s_comm_mod.f90 +++ b/base/modules/comm/psb_s_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -40,7 +40,7 @@ module psb_s_comm_mod subroutine psb_sovrl_vect(x,desc_a,info,update,mode) import implicit none - type(psb_s_vect_type), intent(inout) :: x + type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode @@ -49,9 +49,9 @@ module psb_s_comm_mod import implicit none type(psb_s_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_sovrl_multivect end interface psb_ovrl @@ -59,7 +59,7 @@ module psb_s_comm_mod subroutine psb_shalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_s_vect_type), intent(inout) :: x + type(psb_s_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: mode,data @@ -69,10 +69,10 @@ module psb_s_comm_mod import implicit none type(psb_s_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_shalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_s_linmap_mod.f90 b/base/modules/comm/psb_s_linmap_mod.f90 index 7e248df88..8659ae1ed 100644 --- a/base/modules/comm/psb_s_linmap_mod.f90 +++ b/base/modules/comm/psb_s_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -76,11 +76,11 @@ module psb_s_linmap_mod subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_s_vect_mod, only : psb_s_vect_type import :: psb_ipk_, psb_spk_, psb_slinmap_type - implicit none + implicit none class(psb_slinmap_type), intent(in) :: map real(psb_spk_), intent(in) :: alpha,beta type(psb_s_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info type(psb_s_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_s_map_U2V_v end interface @@ -99,11 +99,11 @@ module psb_s_linmap_mod subroutine psb_s_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_s_vect_mod, only : psb_s_vect_type import :: psb_ipk_, psb_spk_, psb_slinmap_type - implicit none + implicit none class(psb_slinmap_type), intent(in) :: map real(psb_spk_), intent(in) :: alpha,beta type(psb_s_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info type(psb_s_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_s_map_V2U_v end interface diff --git a/base/modules/comm/psb_z_comm_a_mod.f90 b/base/modules/comm/psb_z_comm_a_mod.f90 index 708efead7..478cc99a5 100644 --- a/base/modules/comm/psb_z_comm_a_mod.f90 +++ b/base/modules/comm/psb_z_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/comm/psb_z_comm_mod.f90 b/base/modules/comm/psb_z_comm_mod.f90 index cac47f452..b73f441a8 100644 --- a/base/modules/comm/psb_z_comm_mod.f90 +++ b/base/modules/comm/psb_z_comm_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -40,7 +40,7 @@ module psb_z_comm_mod subroutine psb_zovrl_vect(x,desc_a,info,update,mode) import implicit none - type(psb_z_vect_type), intent(inout) :: x + type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: update,mode @@ -49,9 +49,9 @@ module psb_z_comm_mod import implicit none type(psb_z_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: update,mode + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: update,mode end subroutine psb_zovrl_multivect end interface psb_ovrl @@ -59,7 +59,7 @@ module psb_z_comm_mod subroutine psb_zhalo_vect(x,desc_a,info,tran,mode,data) import implicit none - type(psb_z_vect_type), intent(inout) :: x + type(psb_z_vect_type), intent(inout) :: x type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: mode,data @@ -69,10 +69,10 @@ module psb_z_comm_mod import implicit none type(psb_z_multivect_type), intent(inout) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), intent(in), optional :: mode,data - character, intent(in), optional :: tran + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in), optional :: mode,data + character, intent(in), optional :: tran end subroutine psb_zhalo_multivect end interface psb_halo diff --git a/base/modules/comm/psb_z_linmap_mod.f90 b/base/modules/comm/psb_z_linmap_mod.f90 index 24ec0db0c..fa0e7a734 100644 --- a/base/modules/comm/psb_z_linmap_mod.f90 +++ b/base/modules/comm/psb_z_linmap_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -76,11 +76,11 @@ module psb_z_linmap_mod subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_z_vect_mod, only : psb_z_vect_type import :: psb_ipk_, psb_dpk_, psb_zlinmap_type - implicit none + implicit none class(psb_zlinmap_type), intent(in) :: map complex(psb_dpk_), intent(in) :: alpha,beta type(psb_z_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info type(psb_z_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_z_map_U2V_v end interface @@ -99,11 +99,11 @@ module psb_z_linmap_mod subroutine psb_z_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_z_vect_mod, only : psb_z_vect_type import :: psb_ipk_, psb_dpk_, psb_zlinmap_type - implicit none + implicit none class(psb_zlinmap_type), intent(in) :: map complex(psb_dpk_), intent(in) :: alpha,beta type(psb_z_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info type(psb_z_vect_type), optional, target, intent(inout) :: vtx,vty end subroutine psb_z_map_V2U_v end interface diff --git a/base/modules/comm/psi_c_comm_a_mod.f90 b/base/modules/comm/psi_c_comm_a_mod.f90 index 97b5f9588..6676e36ba 100644 --- a/base/modules/comm/psi_c_comm_a_mod.f90 +++ b/base/modules/comm/psi_c_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,14 +31,16 @@ ! module psi_c_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_spk_, psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_spk_, psb_i_base_vect_type interface psi_swapdata module subroutine psi_cswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:,:) complex(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -46,7 +48,8 @@ module psi_c_comm_a_mod module subroutine psi_cswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:) complex(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -57,7 +60,8 @@ module psi_c_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:,:) complex(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_cswapidxm @@ -66,7 +70,8 @@ module psi_c_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:) complex(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_cswapidxv @@ -78,7 +83,8 @@ module psi_c_comm_a_mod integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:,:) complex(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -86,7 +92,8 @@ module psi_c_comm_a_mod module subroutine psi_cswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:) complex(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -97,7 +104,8 @@ module psi_c_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:,:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:,:) complex(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_ctranidxm @@ -106,7 +114,8 @@ module psi_c_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_spk_) :: y(:), beta + complex(psb_spk_), intent(in) :: beta + complex(psb_spk_), intent(inout) :: y(:) complex(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_ctranidxv diff --git a/base/modules/comm/psi_c_comm_v_mod.f90 b/base/modules/comm/psi_c_comm_v_mod.f90 index 9c573e7cf..d52062a65 100644 --- a/base/modules/comm/psi_c_comm_v_mod.f90 +++ b/base/modules/comm/psi_c_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,91 +31,132 @@ ! module psi_c_comm_v_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_spk_, psb_i_base_vect_type + use psb_i_base_vect_mod, only : psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_spk_ use psb_c_base_vect_mod, only : psb_c_base_vect_type use psb_c_base_multivect_mod, only : psb_c_base_multivect_type interface psi_swapdata - module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + module subroutine psi_cswapdata_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_vect - module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag + module subroutine psi_cswapdata_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_multivect_type), intent(inout) :: y - complex(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_multivect + module subroutine psi_cswap_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_vect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_cswap_vidx_vect + module subroutine psi_cswap_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_cswap_vidx_multivect end interface psi_swapdata interface psi_swaptran - module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + module subroutine psi_cswaptran_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_vect - module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - complex(psb_spk_), intent(in) :: beta + module subroutine psi_cswaptran_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_spk_), intent(in) :: beta class(psb_c_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_multivect + module subroutine psi_ctran_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_vect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_ctran_vidx_vect + module subroutine psi_ctran_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_ctran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd module subroutine psi_covrl_upd_vect(x,desc_a,update,info) - class(psb_c_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_c_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_upd_vect module subroutine psi_covrl_upd_multivect(x,desc_a,update,info) - class(psb_c_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_upd_multivect end interface psi_ovrl_upd interface psi_ovrl_save module subroutine psi_covrl_save_vect(x,xs,desc_a,info) - class(psb_c_base_vect_type) :: x - complex(psb_spk_), allocatable :: xs(:) + class(psb_c_base_vect_type) :: x + complex(psb_spk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_save_vect module subroutine psi_covrl_save_multivect(x,xs,desc_a,info) - class(psb_c_base_multivect_type) :: x - complex(psb_spk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type) :: x + complex(psb_spk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_save_multivect end interface psi_ovrl_save interface psi_ovrl_restore module subroutine psi_covrl_restr_vect(x,xs,desc_a,info) class(psb_c_base_vect_type) :: x - complex(psb_spk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_restr_vect module subroutine psi_covrl_restr_multivect(x,xs,desc_a,info) - class(psb_c_base_multivect_type) :: x - complex(psb_spk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type) :: x + complex(psb_spk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_covrl_restr_multivect end interface psi_ovrl_restore diff --git a/base/modules/comm/psi_d_comm_a_mod.f90 b/base/modules/comm/psi_d_comm_a_mod.f90 index ca1aa9471..323c151c9 100644 --- a/base/modules/comm/psi_d_comm_a_mod.f90 +++ b/base/modules/comm/psi_d_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,48 +31,49 @@ ! module psi_d_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_dpk_, psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_dpk_, psb_i_base_vect_type interface psi_swapdata module subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data) - integer(psb_ipk_), intent(in) :: flag integer(psb_mpk_), intent(in) :: n - real(psb_dpk_),intent(in) :: beta - real(psb_dpk_),intent(inout) :: y(:,:) - type(psb_desc_type), target :: desc_a - real(psb_dpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:,:) + real(psb_dpk_),target :: work(:) + type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdatam module subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag - real(psb_dpk_),intent(in) :: beta - real(psb_dpk_),intent(inout) :: y(:) - type(psb_desc_type), target :: desc_a - real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:) + real(psb_dpk_),target :: work(:) + type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data end subroutine psi_dswapdatav module subroutine psi_dswapidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag integer(psb_mpk_), intent(in) :: n - real(psb_dpk_),intent(in) :: beta - real(psb_dpk_),intent(inout) :: y(:,:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv - real(psb_dpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:,:) + real(psb_dpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dswapidxm module subroutine psi_dswapidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag - real(psb_dpk_),intent(in) :: beta - real(psb_dpk_),intent(inout) :: y(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv - real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:) + real(psb_dpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dswapidxv end interface psi_swapdata @@ -81,42 +82,42 @@ module psi_d_comm_a_mod module subroutine psi_dswaptranm(flag,n,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n - real(psb_dpk_),intent(in) :: beta - real(psb_dpk_),intent(inout) :: y(:,:) - type(psb_desc_type), target :: desc_a - real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data !! TODO: Is this used in the code? If not, remove it. + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:,:) + real(psb_dpk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data end subroutine psi_dswaptranm module subroutine psi_dswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag - real(psb_dpk_),intent(in) :: beta - real(psb_dpk_),intent(inout) :: y(:) - type(psb_desc_type), target :: desc_a - real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data !! TODO: Is this used in the code? If not, remove it. + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:) + real(psb_dpk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data end subroutine psi_dswaptranv module subroutine psi_dtranidxm(ctxt,flag,n,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag integer(psb_mpk_), intent(in) :: n - real(psb_dpk_),intent(in) :: beta - real(psb_dpk_),intent(inout) :: y(:,:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv - real(psb_dpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:,:) + real(psb_dpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dtranidxm module subroutine psi_dtranidxv(ctxt,flag,beta,y,idx,& & totxch,totsnd,totrcv,work,info) type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag - real(psb_dpk_),intent(in) :: beta - real(psb_dpk_),intent(inout) :: y(:) - integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv - real(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(out) :: info + real(psb_dpk_), intent(in) :: beta + real(psb_dpk_), intent(inout) :: y(:) + real(psb_dpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_dtranidxv end interface psi_swaptran diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index fdc624b46..ee6ba89fa 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,101 +31,132 @@ ! module psi_d_comm_v_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_dpk_, psb_i_base_vect_type + use psb_i_base_vect_mod, only : psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_dpk_ use psb_d_base_vect_mod, only : psb_d_base_vect_type use psb_d_base_multivect_mod, only : psb_d_base_multivect_type interface psi_swapdata - ! --------------------------------------------------------------- - ! Wrapper that calls different communications schemes depending on - ! swap_status variable using communication buff obtained from desc_a%get_list_p - ! --------------------------------------------------------------- module subroutine psi_dswapdata_vect(swap_status,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: swap_status - real(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_vect module subroutine psi_dswapdata_multivect(swap_status,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: swap_status - real(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta class(psb_d_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_dswapdata_multivect + module subroutine psi_dswap_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_dswap_vidx_vect + module subroutine psi_dswap_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_dswap_vidx_multivect end interface psi_swapdata interface psi_swaptran - ! --------------------------------------------------------------- - ! Upper call in order to populate idx using desc_a%get_list_p - ! and then call different communications schemes depending - ! on swap_status variable - ! --------------------------------------------------------------- module subroutine psi_dswaptran_vect(swap_status,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: swap_status - real(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_vect module subroutine psi_dswaptran_multivect(swap_status,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: swap_status - real(psb_dpk_), intent(in) :: beta + integer(psb_ipk_), intent(in) :: swap_status + real(psb_dpk_), intent(in) :: beta class(psb_d_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_multivect - ! --------------------------------------------------------------- + module subroutine psi_dtran_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_dtran_vidx_vect + module subroutine psi_dtran_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type), intent(inout) :: y + real(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_dtran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd module subroutine psi_dovrl_upd_vect(x,desc_a,update,info) - class(psb_d_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_d_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_upd_vect module subroutine psi_dovrl_upd_multivect(x,desc_a,update,info) - class(psb_d_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_upd_multivect end interface psi_ovrl_upd interface psi_ovrl_save module subroutine psi_dovrl_save_vect(x,xs,desc_a,info) - class(psb_d_base_vect_type) :: x - real(psb_dpk_), allocatable :: xs(:) + class(psb_d_base_vect_type) :: x + real(psb_dpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_save_vect module subroutine psi_dovrl_save_multivect(x,xs,desc_a,info) - class(psb_d_base_multivect_type) :: x - real(psb_dpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: x + real(psb_dpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_save_multivect end interface psi_ovrl_save interface psi_ovrl_restore module subroutine psi_dovrl_restr_vect(x,xs,desc_a,info) class(psb_d_base_vect_type) :: x - real(psb_dpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_restr_vect module subroutine psi_dovrl_restr_multivect(x,xs,desc_a,info) - class(psb_d_base_multivect_type) :: x - real(psb_dpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_d_base_multivect_type) :: x + real(psb_dpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_dovrl_restr_multivect end interface psi_ovrl_restore diff --git a/base/modules/comm/psi_e_comm_a_mod.f90 b/base/modules/comm/psi_e_comm_a_mod.f90 index 9e215e7cc..d87180d9e 100644 --- a/base/modules/comm/psi_e_comm_a_mod.f90 +++ b/base/modules/comm/psi_e_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,14 +31,16 @@ ! module psi_e_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_epk_, psb_i2pk_ interface psi_swapdata module subroutine psi_eswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:,:) integer(psb_epk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -46,7 +48,8 @@ module psi_e_comm_a_mod module subroutine psi_eswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:) integer(psb_epk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -57,7 +60,8 @@ module psi_e_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:,:) integer(psb_epk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_eswapidxm @@ -66,7 +70,8 @@ module psi_e_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:) integer(psb_epk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_eswapidxv @@ -78,7 +83,8 @@ module psi_e_comm_a_mod integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:,:) integer(psb_epk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -86,7 +92,8 @@ module psi_e_comm_a_mod module subroutine psi_eswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:) integer(psb_epk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -97,7 +104,8 @@ module psi_e_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:,:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:,:) integer(psb_epk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_etranidxm @@ -106,7 +114,8 @@ module psi_e_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_epk_) :: y(:), beta + integer(psb_epk_), intent(in) :: beta + integer(psb_epk_), intent(inout) :: y(:) integer(psb_epk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_etranidxv diff --git a/base/modules/comm/psi_i2_comm_a_mod.f90 b/base/modules/comm/psi_i2_comm_a_mod.f90 index d6c282f96..a12ffd8e1 100644 --- a/base/modules/comm/psi_i2_comm_a_mod.f90 +++ b/base/modules/comm/psi_i2_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,14 +31,16 @@ ! module psi_i2_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_epk_, psb_i2pk_ interface psi_swapdata module subroutine psi_i2swapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:,:) integer(psb_i2pk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -46,7 +48,8 @@ module psi_i2_comm_a_mod module subroutine psi_i2swapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:) integer(psb_i2pk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -57,7 +60,8 @@ module psi_i2_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:,:) integer(psb_i2pk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_i2swapidxm @@ -66,7 +70,8 @@ module psi_i2_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:) integer(psb_i2pk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_i2swapidxv @@ -78,7 +83,8 @@ module psi_i2_comm_a_mod integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:,:) integer(psb_i2pk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -86,7 +92,8 @@ module psi_i2_comm_a_mod module subroutine psi_i2swaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:) integer(psb_i2pk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -97,7 +104,8 @@ module psi_i2_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:,:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:,:) integer(psb_i2pk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_i2tranidxm @@ -106,7 +114,8 @@ module psi_i2_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_i2pk_) :: y(:), beta + integer(psb_i2pk_), intent(in) :: beta + integer(psb_i2pk_), intent(inout) :: y(:) integer(psb_i2pk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_i2tranidxv diff --git a/base/modules/comm/psi_i2_comm_v_mod.f90 b/base/modules/comm/psi_i2_comm_v_mod.f90 new file mode 100644 index 000000000..87f4a8b33 --- /dev/null +++ b/base/modules/comm/psi_i2_comm_v_mod.f90 @@ -0,0 +1,164 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +module psi_i2_comm_v_mod + use psi_penv_mod, only : psb_ctxt_type + use psb_i_base_vect_mod, only : psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_i2pk_ + use psb_i2_base_vect_mod, only : psb_i2_base_vect_type + use psb_i2_base_multivect_mod, only : psb_i2_base_multivect_type + + interface psi_swapdata + module subroutine psi_i2swapdata_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_i2pk_), intent(in) :: beta + class(psb_i2_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + end subroutine psi_i2swapdata_vect + module subroutine psi_i2swapdata_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_i2pk_), intent(in) :: beta + class(psb_i2_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + end subroutine psi_i2swapdata_multivect + module subroutine psi_i2swap_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_i2_base_vect_type), intent(inout) :: y + integer(psb_i2pk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_i2swap_vidx_vect + module subroutine psi_i2swap_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_i2_base_multivect_type), intent(inout) :: y + integer(psb_i2pk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_i2swap_vidx_multivect + end interface psi_swapdata + + + interface psi_swaptran + module subroutine psi_i2swaptran_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_i2pk_), intent(in) :: beta + class(psb_i2_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + end subroutine psi_i2swaptran_vect + module subroutine psi_i2swaptran_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_i2pk_), intent(in) :: beta + class(psb_i2_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + end subroutine psi_i2swaptran_multivect + module subroutine psi_i2tran_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_i2_base_vect_type), intent(inout) :: y + integer(psb_i2pk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_i2tran_vidx_vect + module subroutine psi_i2tran_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_i2_base_multivect_type), intent(inout) :: y + integer(psb_i2pk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_i2tran_vidx_multivect + end interface psi_swaptran + + interface psi_ovrl_upd + module subroutine psi_i2ovrl_upd_vect(x,desc_a,update,info) + class(psb_i2_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + end subroutine psi_i2ovrl_upd_vect + module subroutine psi_i2ovrl_upd_multivect(x,desc_a,update,info) + class(psb_i2_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + end subroutine psi_i2ovrl_upd_multivect + end interface psi_ovrl_upd + + interface psi_ovrl_save + module subroutine psi_i2ovrl_save_vect(x,xs,desc_a,info) + class(psb_i2_base_vect_type) :: x + integer(psb_i2pk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_i2ovrl_save_vect + module subroutine psi_i2ovrl_save_multivect(x,xs,desc_a,info) + class(psb_i2_base_multivect_type) :: x + integer(psb_i2pk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_i2ovrl_save_multivect + end interface psi_ovrl_save + + interface psi_ovrl_restore + module subroutine psi_i2ovrl_restr_vect(x,xs,desc_a,info) + class(psb_i2_base_vect_type) :: x + integer(psb_i2pk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_i2ovrl_restr_vect + module subroutine psi_i2ovrl_restr_multivect(x,xs,desc_a,info) + class(psb_i2_base_multivect_type) :: x + integer(psb_i2pk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_i2ovrl_restr_multivect + end interface psi_ovrl_restore + +end module psi_i2_comm_v_mod + diff --git a/base/modules/comm/psi_i_comm_a_mod.f90 b/base/modules/comm/psi_i_comm_a_mod.f90 new file mode 100644 index 000000000..920a23f9b --- /dev/null +++ b/base/modules/comm/psi_i_comm_a_mod.f90 @@ -0,0 +1,170 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +module psi_i_comm_a_mod + use psi_penv_mod, only : psb_ctxt_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_epk_, psb_i2pk_ + + interface psi_swapdata + module subroutine psi_iswapdatam(flag,n,beta,y,desc_a,work,info,data) + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(inout) :: y(:,:) + integer(psb_ipk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + end subroutine psi_iswapdatam + module subroutine psi_iswapdatav(flag,beta,y,desc_a,work,info,data) + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(inout) :: y(:) + integer(psb_ipk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + end subroutine psi_iswapdatav + module subroutine psi_iswapidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(inout) :: y(:,:) + integer(psb_ipk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_iswapidxm + module subroutine psi_iswapidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(inout) :: y(:) + integer(psb_ipk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_iswapidxv + end interface psi_swapdata + + + interface psi_swaptran + module subroutine psi_iswaptranm(flag,n,beta,y,desc_a,work,info,data) + integer(psb_ipk_), intent(in) :: flag + integer(psb_Mpk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(inout) :: y(:,:) + integer(psb_ipk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + end subroutine psi_iswaptranm + module subroutine psi_iswaptranv(flag,beta,y,desc_a,work,info,data) + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(inout) :: y(:) + integer(psb_ipk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + end subroutine psi_iswaptranv + module subroutine psi_itranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(inout) :: y(:,:) + integer(psb_ipk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_itranidxm + module subroutine psi_itranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(in) :: beta + integer(psb_ipk_), intent(inout) :: y(:) + integer(psb_ipk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_itranidxv + end interface psi_swaptran + + interface psi_ovrl_upd + module subroutine psi_iovrl_updr1(x,desc_a,update,info) + integer(psb_ipk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + end subroutine psi_iovrl_updr1 + module subroutine psi_iovrl_updr2(x,desc_a,update,info) + integer(psb_ipk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + end subroutine psi_iovrl_updr2 + end interface psi_ovrl_upd + + interface psi_ovrl_save + module subroutine psi_iovrl_saver1(x,xs,desc_a,info) + integer(psb_ipk_), intent(inout) :: x(:) + integer(psb_ipk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_iovrl_saver1 + module subroutine psi_iovrl_saver2(x,xs,desc_a,info) + integer(psb_ipk_), intent(inout) :: x(:,:) + integer(psb_ipk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_iovrl_saver2 + end interface psi_ovrl_save + + interface psi_ovrl_restore + module subroutine psi_iovrl_restrr1(x,xs,desc_a,info) + integer(psb_ipk_), intent(inout) :: x(:) + integer(psb_ipk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_iovrl_restrr1 + module subroutine psi_iovrl_restrr2(x,xs,desc_a,info) + integer(psb_ipk_), intent(inout) :: x(:,:) + integer(psb_ipk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_iovrl_restrr2 + end interface psi_ovrl_restore + +end module psi_i_comm_a_mod + diff --git a/base/modules/comm/psi_i_comm_v_mod.f90 b/base/modules/comm/psi_i_comm_v_mod.f90 index b729ece67..73292eb1f 100644 --- a/base/modules/comm/psi_i_comm_v_mod.f90 +++ b/base/modules/comm/psi_i_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,92 +31,132 @@ ! module psi_i_comm_v_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, & - & psb_lpk_, psb_epk_, psb_i2pk_ + use psb_i_base_vect_mod, only : psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_ipk_ use psb_i_base_vect_mod, only : psb_i_base_vect_type use psb_i_base_multivect_mod, only : psb_i_base_multivect_type interface psi_swapdata - module subroutine psi_iswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + module subroutine psi_iswapdata_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_vect - module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + module subroutine psi_iswapdata_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_multivect + module subroutine psi_iswap_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type), intent(inout) :: y + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_iswap_vidx_vect + module subroutine psi_iswap_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type), intent(inout) :: y + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_iswap_vidx_multivect end interface psi_swapdata interface psi_swaptran - module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + module subroutine psi_iswaptran_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_vect - module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(in) :: beta + module subroutine psi_iswaptran_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(in) :: beta class(psb_i_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_multivect + module subroutine psi_itran_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type), intent(inout) :: y + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_itran_vidx_vect + module subroutine psi_itran_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type), intent(inout) :: y + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_itran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd module subroutine psi_iovrl_upd_vect(x,desc_a,update,info) - class(psb_i_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_i_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_upd_vect module subroutine psi_iovrl_upd_multivect(x,desc_a,update,info) - class(psb_i_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_upd_multivect end interface psi_ovrl_upd interface psi_ovrl_save module subroutine psi_iovrl_save_vect(x,xs,desc_a,info) - class(psb_i_base_vect_type) :: x - integer(psb_ipk_), allocatable :: xs(:) + class(psb_i_base_vect_type) :: x + integer(psb_ipk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_save_vect module subroutine psi_iovrl_save_multivect(x,xs,desc_a,info) - class(psb_i_base_multivect_type) :: x - integer(psb_ipk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type) :: x + integer(psb_ipk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_save_multivect end interface psi_ovrl_save interface psi_ovrl_restore module subroutine psi_iovrl_restr_vect(x,xs,desc_a,info) class(psb_i_base_vect_type) :: x - integer(psb_ipk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_restr_vect module subroutine psi_iovrl_restr_multivect(x,xs,desc_a,info) - class(psb_i_base_multivect_type) :: x - integer(psb_ipk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_i_base_multivect_type) :: x + integer(psb_ipk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_iovrl_restr_multivect end interface psi_ovrl_restore diff --git a/base/modules/comm/psi_l_comm_a_mod.f90 b/base/modules/comm/psi_l_comm_a_mod.f90 new file mode 100644 index 000000000..600da3a18 --- /dev/null +++ b/base/modules/comm/psi_l_comm_a_mod.f90 @@ -0,0 +1,170 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +module psi_l_comm_a_mod + use psi_penv_mod, only : psb_ctxt_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_epk_, psb_i2pk_ + + interface psi_swapdata + module subroutine psi_lswapdatam(flag,n,beta,y,desc_a,work,info,data) + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), intent(in) :: beta + integer(psb_lpk_), intent(inout) :: y(:,:) + integer(psb_lpk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + end subroutine psi_lswapdatam + module subroutine psi_lswapdatav(flag,beta,y,desc_a,work,info,data) + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), intent(in) :: beta + integer(psb_lpk_), intent(inout) :: y(:) + integer(psb_lpk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + end subroutine psi_lswapdatav + module subroutine psi_lswapidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), intent(in) :: beta + integer(psb_lpk_), intent(inout) :: y(:,:) + integer(psb_lpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_lswapidxm + module subroutine psi_lswapidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), intent(in) :: beta + integer(psb_lpk_), intent(inout) :: y(:) + integer(psb_lpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_lswapidxv + end interface psi_swapdata + + + interface psi_swaptran + module subroutine psi_lswaptranm(flag,n,beta,y,desc_a,work,info,data) + integer(psb_ipk_), intent(in) :: flag + integer(psb_Mpk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), intent(in) :: beta + integer(psb_lpk_), intent(inout) :: y(:,:) + integer(psb_lpk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + end subroutine psi_lswaptranm + module subroutine psi_lswaptranv(flag,beta,y,desc_a,work,info,data) + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), intent(in) :: beta + integer(psb_lpk_), intent(inout) :: y(:) + integer(psb_lpk_),target :: work(:) + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + end subroutine psi_lswaptranv + module subroutine psi_ltranidxm(ctxt,flag,n,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: n + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), intent(in) :: beta + integer(psb_lpk_), intent(inout) :: y(:,:) + integer(psb_lpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_ltranidxm + module subroutine psi_ltranidxv(ctxt,flag,beta,y,idx,& + & totxch,totsnd,totrcv,work,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), intent(in) :: beta + integer(psb_lpk_), intent(inout) :: y(:) + integer(psb_lpk_),target :: work(:) + integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv + end subroutine psi_ltranidxv + end interface psi_swaptran + + interface psi_ovrl_upd + module subroutine psi_lovrl_updr1(x,desc_a,update,info) + integer(psb_lpk_), intent(inout), target :: x(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + end subroutine psi_lovrl_updr1 + module subroutine psi_lovrl_updr2(x,desc_a,update,info) + integer(psb_lpk_), intent(inout), target :: x(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info + end subroutine psi_lovrl_updr2 + end interface psi_ovrl_upd + + interface psi_ovrl_save + module subroutine psi_lovrl_saver1(x,xs,desc_a,info) + integer(psb_lpk_), intent(inout) :: x(:) + integer(psb_lpk_), allocatable :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_lovrl_saver1 + module subroutine psi_lovrl_saver2(x,xs,desc_a,info) + integer(psb_lpk_), intent(inout) :: x(:,:) + integer(psb_lpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_lovrl_saver2 + end interface psi_ovrl_save + + interface psi_ovrl_restore + module subroutine psi_lovrl_restrr1(x,xs,desc_a,info) + integer(psb_lpk_), intent(inout) :: x(:) + integer(psb_lpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_lovrl_restrr1 + module subroutine psi_lovrl_restrr2(x,xs,desc_a,info) + integer(psb_lpk_), intent(inout) :: x(:,:) + integer(psb_lpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info + end subroutine psi_lovrl_restrr2 + end interface psi_ovrl_restore + +end module psi_l_comm_a_mod + diff --git a/base/modules/comm/psi_l_comm_v_mod.f90 b/base/modules/comm/psi_l_comm_v_mod.f90 index bcc33a2c8..bb29386df 100644 --- a/base/modules/comm/psi_l_comm_v_mod.f90 +++ b/base/modules/comm/psi_l_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,93 +31,132 @@ ! module psi_l_comm_v_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, & - & psb_lpk_, psb_epk_, psb_i2pk_ - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_lpk_, psb_epk_, psb_i_base_vect_type + use psb_i_base_vect_mod, only : psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_lpk_ use psb_l_base_vect_mod, only : psb_l_base_vect_type use psb_l_base_multivect_mod, only : psb_l_base_multivect_type interface psi_swapdata - module subroutine psi_lswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta + module subroutine psi_lswapdata_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta class(psb_l_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_vect - module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta + module subroutine psi_lswapdata_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta class(psb_l_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_multivect + module subroutine psi_lswap_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_lswap_vidx_vect + module subroutine psi_lswap_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_lswap_vidx_multivect end interface psi_swapdata interface psi_swaptran - module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta + module subroutine psi_lswaptran_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta class(psb_l_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_vect - module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_lpk_), intent(in) :: beta + module subroutine psi_lswaptran_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_lpk_), intent(in) :: beta class(psb_l_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_multivect + module subroutine psi_ltran_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_ltran_vidx_vect + module subroutine psi_ltran_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_ltran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd module subroutine psi_lovrl_upd_vect(x,desc_a,update,info) - class(psb_l_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_upd_vect module subroutine psi_lovrl_upd_multivect(x,desc_a,update,info) - class(psb_l_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_upd_multivect end interface psi_ovrl_upd interface psi_ovrl_save module subroutine psi_lovrl_save_vect(x,xs,desc_a,info) - class(psb_l_base_vect_type) :: x - integer(psb_lpk_), allocatable :: xs(:) + class(psb_l_base_vect_type) :: x + integer(psb_lpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_save_vect module subroutine psi_lovrl_save_multivect(x,xs,desc_a,info) - class(psb_l_base_multivect_type) :: x - integer(psb_lpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: x + integer(psb_lpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_save_multivect end interface psi_ovrl_save interface psi_ovrl_restore module subroutine psi_lovrl_restr_vect(x,xs,desc_a,info) class(psb_l_base_vect_type) :: x - integer(psb_lpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_restr_vect module subroutine psi_lovrl_restr_multivect(x,xs,desc_a,info) - class(psb_l_base_multivect_type) :: x - integer(psb_lpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: x + integer(psb_lpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_lovrl_restr_multivect end interface psi_ovrl_restore diff --git a/base/modules/comm/psi_m_comm_a_mod.f90 b/base/modules/comm/psi_m_comm_a_mod.f90 index ac134e655..8ed2ac7e6 100644 --- a/base/modules/comm/psi_m_comm_a_mod.f90 +++ b/base/modules/comm/psi_m_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,14 +31,16 @@ ! module psi_m_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_epk_ + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_epk_, psb_i2pk_ interface psi_swapdata module subroutine psi_mswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:,:) integer(psb_mpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -46,7 +48,8 @@ module psi_m_comm_a_mod module subroutine psi_mswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:) integer(psb_mpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -57,7 +60,8 @@ module psi_m_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:,:) integer(psb_mpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_mswapidxm @@ -66,7 +70,8 @@ module psi_m_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:) integer(psb_mpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_mswapidxv @@ -78,7 +83,8 @@ module psi_m_comm_a_mod integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:,:) integer(psb_mpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -86,7 +92,8 @@ module psi_m_comm_a_mod module subroutine psi_mswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:) integer(psb_mpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -97,7 +104,8 @@ module psi_m_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:,:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:,:) integer(psb_mpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_mtranidxm @@ -106,7 +114,8 @@ module psi_m_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - integer(psb_mpk_) :: y(:), beta + integer(psb_mpk_), intent(in) :: beta + integer(psb_mpk_), intent(inout) :: y(:) integer(psb_mpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_mtranidxv diff --git a/base/modules/comm/psi_s_comm_a_mod.f90 b/base/modules/comm/psi_s_comm_a_mod.f90 index 3615bb6c0..f9a2fdc8a 100644 --- a/base/modules/comm/psi_s_comm_a_mod.f90 +++ b/base/modules/comm/psi_s_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,14 +31,16 @@ ! module psi_s_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_spk_, psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_spk_, psb_i_base_vect_type interface psi_swapdata module subroutine psi_sswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:,:) real(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -46,7 +48,8 @@ module psi_s_comm_a_mod module subroutine psi_sswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:) real(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -57,7 +60,8 @@ module psi_s_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:,:) real(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_sswapidxm @@ -66,7 +70,8 @@ module psi_s_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:) real(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_sswapidxv @@ -78,7 +83,8 @@ module psi_s_comm_a_mod integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:,:) real(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -86,7 +92,8 @@ module psi_s_comm_a_mod module subroutine psi_sswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:) real(psb_spk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -97,7 +104,8 @@ module psi_s_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:,:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:,:) real(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_stranidxm @@ -106,7 +114,8 @@ module psi_s_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - real(psb_spk_) :: y(:), beta + real(psb_spk_), intent(in) :: beta + real(psb_spk_), intent(inout) :: y(:) real(psb_spk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_stranidxv diff --git a/base/modules/comm/psi_s_comm_v_mod.f90 b/base/modules/comm/psi_s_comm_v_mod.f90 index 65cb904fc..67fbaa25e 100644 --- a/base/modules/comm/psi_s_comm_v_mod.f90 +++ b/base/modules/comm/psi_s_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,92 +31,132 @@ ! module psi_s_comm_v_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_spk_, psb_i_base_vect_type + use psb_i_base_vect_mod, only : psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_spk_ use psb_s_base_vect_mod, only : psb_s_base_vect_type use psb_s_base_multivect_mod, only : psb_s_base_multivect_type interface psi_swapdata - module subroutine psi_sswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta + module subroutine psi_sswapdata_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta class(psb_s_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_sswapdata_vect - module subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta + module subroutine psi_sswapdata_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta class(psb_s_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_sswapdata_multivect + module subroutine psi_sswap_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type), intent(inout) :: y + real(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_sswap_vidx_vect + module subroutine psi_sswap_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type), intent(inout) :: y + real(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_sswap_vidx_multivect end interface psi_swapdata - interface psi_swaptran - module subroutine psi_sswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info + module subroutine psi_sswaptran_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta class(psb_s_base_vect_type), intent(inout) :: y - real(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_sswaptran_vect - module subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag + module subroutine psi_sswaptran_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + real(psb_spk_), intent(in) :: beta class(psb_s_base_multivect_type), intent(inout) :: y - real(psb_spk_), intent(in) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_sswaptran_multivect + module subroutine psi_stran_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type), intent(inout) :: y + real(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_stran_vidx_vect + module subroutine psi_stran_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type), intent(inout) :: y + real(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_stran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd module subroutine psi_sovrl_upd_vect(x,desc_a,update,info) - class(psb_s_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_s_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_upd_vect module subroutine psi_sovrl_upd_multivect(x,desc_a,update,info) - class(psb_s_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_upd_multivect end interface psi_ovrl_upd interface psi_ovrl_save module subroutine psi_sovrl_save_vect(x,xs,desc_a,info) - class(psb_s_base_vect_type) :: x - real(psb_spk_), allocatable :: xs(:) + class(psb_s_base_vect_type) :: x + real(psb_spk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_save_vect module subroutine psi_sovrl_save_multivect(x,xs,desc_a,info) - class(psb_s_base_multivect_type) :: x - real(psb_spk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: x + real(psb_spk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_save_multivect end interface psi_ovrl_save interface psi_ovrl_restore module subroutine psi_sovrl_restr_vect(x,xs,desc_a,info) class(psb_s_base_vect_type) :: x - real(psb_spk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_restr_vect module subroutine psi_sovrl_restr_multivect(x,xs,desc_a,info) - class(psb_s_base_multivect_type) :: x - real(psb_spk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_s_base_multivect_type) :: x + real(psb_spk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_sovrl_restr_multivect end interface psi_ovrl_restore diff --git a/base/modules/comm/psi_z_comm_a_mod.f90 b/base/modules/comm/psi_z_comm_a_mod.f90 index 28393467b..0203660d8 100644 --- a/base/modules/comm/psi_z_comm_a_mod.f90 +++ b/base/modules/comm/psi_z_comm_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,14 +31,16 @@ ! module psi_z_comm_a_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, psb_dpk_, psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_mpk_, psb_ipk_, & + & psb_dpk_, psb_i_base_vect_type interface psi_swapdata module subroutine psi_zswapdatam(flag,n,beta,y,desc_a,work,info,data) integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:,:) complex(psb_dpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -46,7 +48,8 @@ module psi_z_comm_a_mod module subroutine psi_zswapdatav(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:) complex(psb_dpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -57,7 +60,8 @@ module psi_z_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:,:) complex(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_zswapidxm @@ -66,7 +70,8 @@ module psi_z_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:) complex(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_zswapidxv @@ -78,7 +83,8 @@ module psi_z_comm_a_mod integer(psb_ipk_), intent(in) :: flag integer(psb_Mpk_), intent(in) :: n integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:,:) complex(psb_dpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -86,7 +92,8 @@ module psi_z_comm_a_mod module subroutine psi_zswaptranv(flag,beta,y,desc_a,work,info,data) integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:) complex(psb_dpk_),target :: work(:) type(psb_desc_type), target :: desc_a integer(psb_ipk_), optional :: data @@ -97,7 +104,8 @@ module psi_z_comm_a_mod integer(psb_mpk_), intent(in) :: n integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:,:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:,:) complex(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_ztranidxm @@ -106,7 +114,8 @@ module psi_z_comm_a_mod type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - complex(psb_dpk_) :: y(:), beta + complex(psb_dpk_), intent(in) :: beta + complex(psb_dpk_), intent(inout) :: y(:) complex(psb_dpk_),target :: work(:) integer(psb_ipk_), intent(in) :: idx(:),totxch,totsnd,totrcv end subroutine psi_ztranidxv diff --git a/base/modules/comm/psi_z_comm_v_mod.f90 b/base/modules/comm/psi_z_comm_v_mod.f90 index 745d45318..e1eb6ed52 100644 --- a/base/modules/comm/psi_z_comm_v_mod.f90 +++ b/base/modules/comm/psi_z_comm_v_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,91 +31,132 @@ ! module psi_z_comm_v_mod use psi_penv_mod, only : psb_ctxt_type - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_dpk_, psb_i_base_vect_type + use psb_i_base_vect_mod, only : psb_i_base_vect_type + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_dpk_ use psb_z_base_vect_mod, only : psb_z_base_vect_type use psb_z_base_multivect_mod, only : psb_z_base_multivect_type interface psi_swapdata - module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta + module subroutine psi_zswapdata_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta class(psb_z_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_vect - module subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta + module subroutine psi_zswapdata_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta class(psb_z_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_multivect + module subroutine psi_zswap_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_zswap_vidx_vect + module subroutine psi_zswap_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_zswap_vidx_multivect end interface psi_swapdata interface psi_swaptran - module subroutine psi_zswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta + module subroutine psi_zswaptran_vect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta class(psb_z_base_vect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_vect - module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - complex(psb_dpk_), intent(in) :: beta + module subroutine psi_zswaptran_multivect(swap_status,beta,y,desc_a,info,data) + integer(psb_ipk_), intent(in) :: swap_status + complex(psb_dpk_), intent(in) :: beta class(psb_z_base_multivect_type), intent(inout) :: y - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_multivect + module subroutine psi_ztran_vidx_vect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_ztran_vidx_vect + module subroutine psi_ztran_vidx_multivect(ctxt,swap_status,beta,y,idx,& + & totxch,totsnd,totrcv,info) + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: swap_status + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: totxch, totsnd, totrcv + end subroutine psi_ztran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd module subroutine psi_zovrl_upd_vect(x,desc_a,update,info) - class(psb_z_base_vect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_upd_vect module subroutine psi_zovrl_upd_multivect(x,desc_a,update,info) - class(psb_z_base_multivect_type) :: x - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(in) :: update - integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type) :: x + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(in) :: update + integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_upd_multivect end interface psi_ovrl_upd interface psi_ovrl_save module subroutine psi_zovrl_save_vect(x,xs,desc_a,info) - class(psb_z_base_vect_type) :: x - complex(psb_dpk_), allocatable :: xs(:) + class(psb_z_base_vect_type) :: x + complex(psb_dpk_), allocatable :: xs(:) type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_save_vect module subroutine psi_zovrl_save_multivect(x,xs,desc_a,info) - class(psb_z_base_multivect_type) :: x - complex(psb_dpk_), allocatable :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type) :: x + complex(psb_dpk_), allocatable :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_save_multivect end interface psi_ovrl_save interface psi_ovrl_restore module subroutine psi_zovrl_restr_vect(x,xs,desc_a,info) class(psb_z_base_vect_type) :: x - complex(psb_dpk_) :: xs(:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: xs(:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_restr_vect module subroutine psi_zovrl_restr_multivect(x,xs,desc_a,info) - class(psb_z_base_multivect_type) :: x - complex(psb_dpk_) :: xs(:,:) - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type) :: x + complex(psb_dpk_) :: xs(:,:) + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(out) :: info end subroutine psi_zovrl_restr_multivect end interface psi_ovrl_restore diff --git a/base/modules/penv/psi_c_collective_mod.F90 b/base/modules/penv/psi_c_collective_mod.F90 index 0e04fd5ed..dedd8503c 100644 --- a/base/modules/penv/psi_c_collective_mod.F90 +++ b/base/modules/penv/psi_c_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_c_p2p_mod.F90 b/base/modules/penv/psi_c_p2p_mod.F90 index 183584ff9..8a5f2c20b 100644 --- a/base/modules/penv/psi_c_p2p_mod.F90 +++ b/base/modules/penv/psi_c_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_d_collective_mod.F90 b/base/modules/penv/psi_d_collective_mod.F90 index bf66dc470..14e4f48a5 100644 --- a/base/modules/penv/psi_d_collective_mod.F90 +++ b/base/modules/penv/psi_d_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_d_p2p_mod.F90 b/base/modules/penv/psi_d_p2p_mod.F90 index 280f328de..99369d4a1 100644 --- a/base/modules/penv/psi_d_p2p_mod.F90 +++ b/base/modules/penv/psi_d_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_e_collective_mod.F90 b/base/modules/penv/psi_e_collective_mod.F90 index 15c69864f..63ad5627d 100644 --- a/base/modules/penv/psi_e_collective_mod.F90 +++ b/base/modules/penv/psi_e_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_e_p2p_mod.F90 b/base/modules/penv/psi_e_p2p_mod.F90 index f6c37d8a8..f3c4d2bac 100644 --- a/base/modules/penv/psi_e_p2p_mod.F90 +++ b/base/modules/penv/psi_e_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_i2_collective_mod.F90 b/base/modules/penv/psi_i2_collective_mod.F90 index 7ca2de155..cb2fe435c 100644 --- a/base/modules/penv/psi_i2_collective_mod.F90 +++ b/base/modules/penv/psi_i2_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_i2_p2p_mod.F90 b/base/modules/penv/psi_i2_p2p_mod.F90 index 4d2d33858..eb70385e5 100644 --- a/base/modules/penv/psi_i2_p2p_mod.F90 +++ b/base/modules/penv/psi_i2_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_m_collective_mod.F90 b/base/modules/penv/psi_m_collective_mod.F90 index 0e858c03a..8db430045 100644 --- a/base/modules/penv/psi_m_collective_mod.F90 +++ b/base/modules/penv/psi_m_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_m_p2p_mod.F90 b/base/modules/penv/psi_m_p2p_mod.F90 index 0132ce02c..1f1683a88 100644 --- a/base/modules/penv/psi_m_p2p_mod.F90 +++ b/base/modules/penv/psi_m_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_s_collective_mod.F90 b/base/modules/penv/psi_s_collective_mod.F90 index 9936395ad..809ca2865 100644 --- a/base/modules/penv/psi_s_collective_mod.F90 +++ b/base/modules/penv/psi_s_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_s_p2p_mod.F90 b/base/modules/penv/psi_s_p2p_mod.F90 index d8352bd5d..a1b70392d 100644 --- a/base/modules/penv/psi_s_p2p_mod.F90 +++ b/base/modules/penv/psi_s_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_z_collective_mod.F90 b/base/modules/penv/psi_z_collective_mod.F90 index de4e5bcc7..cbe434ac3 100644 --- a/base/modules/penv/psi_z_collective_mod.F90 +++ b/base/modules/penv/psi_z_collective_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/penv/psi_z_p2p_mod.F90 b/base/modules/penv/psi_z_p2p_mod.F90 index 6606d4ed1..c8ed01eb7 100644 --- a/base/modules/penv/psi_z_p2p_mod.F90 +++ b/base/modules/penv/psi_z_p2p_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psb_realloc_mod.F90 b/base/modules/psb_realloc_mod.F90 index fba5fd0d7..df71bd95e 100644 --- a/base/modules/psb_realloc_mod.F90 +++ b/base/modules/psb_realloc_mod.F90 @@ -31,6 +31,7 @@ ! module psb_realloc_mod use psb_const_mod + use psb_i2_realloc_mod use psb_m_realloc_mod use psb_e_realloc_mod use psb_s_realloc_mod diff --git a/base/modules/psblas/psb_c_psblas_mod.F90 b/base/modules/psblas/psb_c_psblas_mod.F90 index e77a9325f..6b82493bc 100644 --- a/base/modules/psblas/psb_c_psblas_mod.F90 +++ b/base/modules/psblas/psb_c_psblas_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -424,14 +424,14 @@ module psb_c_psblas_mod & desc_a, info, trans,doswap) import :: psb_desc_type, psb_spk_, psb_ipk_, & & psb_c_vect_type, psb_cspmat_type - type(psb_cspmat_type), intent(in) :: a - type(psb_c_vect_type), intent(inout) :: x - type(psb_c_vect_type), intent(inout) :: y - complex(psb_spk_), intent(in) :: alpha, beta - type(psb_desc_type), intent(in) :: desc_a - character, optional, intent(in) :: trans - logical, optional, intent(in) :: doswap - integer(psb_ipk_), intent(out) :: info + type(psb_cspmat_type), intent(in) :: a + type(psb_c_vect_type), intent(inout) :: x + type(psb_c_vect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: alpha, beta + type(psb_desc_type), intent(in) :: desc_a + character, optional, intent(in) :: trans + logical, optional, intent(in) :: doswap + integer(psb_ipk_), intent(out) :: info end subroutine psb_cspmv_vect end interface diff --git a/base/modules/psblas/psb_d_psblas_mod.F90 b/base/modules/psblas/psb_d_psblas_mod.F90 index 095c46039..1d5558c7b 100644 --- a/base/modules/psblas/psb_d_psblas_mod.F90 +++ b/base/modules/psblas/psb_d_psblas_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psblas/psb_s_psblas_mod.F90 b/base/modules/psblas/psb_s_psblas_mod.F90 index 330775c94..6be3aca2e 100644 --- a/base/modules/psblas/psb_s_psblas_mod.F90 +++ b/base/modules/psblas/psb_s_psblas_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psblas/psb_z_psblas_mod.F90 b/base/modules/psblas/psb_z_psblas_mod.F90 index e9d03f371..1e65f3d44 100644 --- a/base/modules/psblas/psb_z_psblas_mod.F90 +++ b/base/modules/psblas/psb_z_psblas_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_c_mod.F90 b/base/modules/psi_c_mod.F90 index d59d26a21..9028315c3 100644 --- a/base/modules/psi_c_mod.F90 +++ b/base/modules/psi_c_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_d_mod.F90 b/base/modules/psi_d_mod.F90 index f39527f12..833e32fc8 100644 --- a/base/modules/psi_d_mod.F90 +++ b/base/modules/psi_d_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_i2_mod.F90 b/base/modules/psi_i2_mod.F90 new file mode 100644 index 000000000..031bcf208 --- /dev/null +++ b/base/modules/psi_i2_mod.F90 @@ -0,0 +1,44 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +module psi_i2_mod + + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, & + & psb_lpk_, psb_i2pk_ + use psi_m_comm_a_mod + use psi_e_comm_a_mod + use psi_i2_comm_a_mod + use psb_i2_base_vect_mod, only : psb_i2_base_vect_type + use psb_i2_base_multivect_mod, only : psb_i2_base_multivect_type + use psi_i2_comm_v_mod + +end module psi_i2_mod + diff --git a/base/modules/psi_i_mod.F90 b/base/modules/psi_i_mod.F90 index 881ae078f..22df34627 100644 --- a/base/modules/psi_i_mod.F90 +++ b/base/modules/psi_i_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,9 +31,11 @@ ! module psi_i_mod - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, psb_lpk_ + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, & + & psb_lpk_, psb_i2pk_ use psi_m_comm_a_mod use psi_e_comm_a_mod + use psi_i2_comm_a_mod use psb_i_base_vect_mod, only : psb_i_base_vect_type use psb_i_base_multivect_mod, only : psb_i_base_multivect_type use psi_i_comm_v_mod diff --git a/base/modules/psi_l_mod.F90 b/base/modules/psi_l_mod.F90 index 1ea56ad0a..6be25a134 100644 --- a/base/modules/psi_l_mod.F90 +++ b/base/modules/psi_l_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -31,9 +31,11 @@ ! module psi_l_mod - use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, psb_lpk_ + use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpk_, psb_epk_, & + & psb_lpk_, psb_i2pk_ use psi_m_comm_a_mod use psi_e_comm_a_mod + use psi_i2_comm_a_mod use psb_l_base_vect_mod, only : psb_l_base_vect_type use psb_l_base_multivect_mod, only : psb_l_base_multivect_type use psi_l_comm_v_mod diff --git a/base/modules/psi_s_mod.F90 b/base/modules/psi_s_mod.F90 index cac4d0f6d..b87cade1c 100644 --- a/base/modules/psi_s_mod.F90 +++ b/base/modules/psi_s_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/psi_z_mod.F90 b/base/modules/psi_z_mod.F90 index dc102323f..1ce783151 100644 --- a/base/modules/psi_z_mod.F90 +++ b/base/modules/psi_z_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_base_mat_mod.F90 b/base/modules/serial/psb_c_base_mat_mod.F90 index a5537034e..2e83ab4e5 100644 --- a/base/modules/serial/psb_c_base_mat_mod.F90 +++ b/base/modules/serial/psb_c_base_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index dc16f63b2..b2106a545 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -33,7 +33,7 @@ ! package: psb_c_base_vect_mod ! ! This module contains the definition of the psb_c_base_vect type which -! is a container for dense vectors. +! is a container for dense vectors.\ ! This is encapsulated instead of being just a simple array to allow for ! more complicated situations, such as GPU programming, where the memory ! area we are interested in is not easily accessible from the host/Fortran @@ -47,9 +47,10 @@ module psb_c_base_vect_mod use psb_const_mod use psb_error_mod use psb_realloc_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_unknown_ + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free use psb_i_base_vect_mod use psb_l_base_vect_mod - use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_c_base_vect_type !! The psb_c_base_vect_type @@ -63,10 +64,10 @@ module psb_c_base_vect_mod !! type psb_c_base_vect_type !> Values. - complex(psb_spk_), allocatable :: v(:) - complex(psb_spk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + complex(psb_spk_), allocatable :: v(:) + complex(psb_spk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -75,12 +76,10 @@ module psb_c_base_vect_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_vect_mod. - integer(psb_ipk_), private :: bldstate = psb_vect_null_ - integer(psb_ipk_), private :: dupl = psb_dupl_null_ - integer(psb_ipk_), private :: ncfs = 0 - integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -144,9 +143,7 @@ module psb_c_base_vect_mod procedure, nopass :: device_wait => c_base_device_wait procedure, pass(x) :: maybe_free_buffer => c_base_maybe_free_buffer procedure, pass(x) :: free_buffer => c_base_free_buffer - procedure, pass(x) :: new_comid => c_base_new_comid - procedure, pass(x) :: free_comid => c_base_free_comid - + ! ! Basic info procedure, pass(x) :: get_nrows => c_base_get_nrows @@ -161,6 +158,7 @@ module psb_c_base_vect_mod procedure, pass(x) :: set_vect => c_base_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: get_entry=> c_base_get_entry + procedure, pass(x) :: set_entry=> c_base_set_entry ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -245,10 +243,6 @@ module psb_c_base_vect_mod procedure, pass(z) :: addconst_v2 => c_base_addconst_v2 generic, public :: addconst => addconst_a2,addconst_v2 - ! Methods used to handle topology in neighbor_alltoallv communication scheme - procedure, pass(x) :: init_topology => c_base_init_topology - procedure, pass(x) :: free_topology => c_base_free_topology - end type psb_c_base_vect_type @@ -430,11 +424,12 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_c_base_vect_type), intent(out) :: x + class(psb_c_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -824,13 +819,17 @@ contains use psb_realloc_mod implicit none class(psb_c_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: info_comm + integer(psb_ipk_), intent(out) :: info info = 0 if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) - if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) - if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%comm_handle)) then + call psb_comm_free(x%comm_handle, info_comm) + if (info_comm /= psb_success_) info = info_comm + end if if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') call x%set_null() @@ -876,24 +875,6 @@ contains & call x%free_buffer(info) end subroutine c_base_maybe_free_buffer - - ! - !> Function base_free_comid: - !! \memberof psb_c_base_vect_type - !! \brief Free aux MPI communication id buffer - !! - !! \param info return code - !! - ! - subroutine c_base_free_comid(x,info) - use psb_realloc_mod - implicit none - class(psb_c_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%comid)) & - & deallocate(x%comid,stat=info) - end subroutine c_base_free_comid function c_base_get_ncfs(x) result(res) implicit none @@ -1282,15 +1263,33 @@ contains ! function c_base_get_entry(x, index) result(res) implicit none - class(psb_c_base_vect_type), intent(in) :: x + class(psb_c_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index complex(psb_spk_) :: res res = 0 - if (allocated(x%v)) res = x%v(index) + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + res = x%v(index) + end if end function c_base_get_entry + subroutine c_base_set_entry(x, index, val) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + complex(psb_spk_) :: val + + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(index) =val + call x%set_host() + end if + + end subroutine c_base_set_entry + ! ! Overwrite with absolute value ! @@ -2289,17 +2288,6 @@ contains call psb_realloc(n,x%combuf,info) end subroutine c_base_new_buffer - subroutine c_base_new_comid(n,x,info) - use psb_realloc_mod - implicit none - class(psb_c_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_), intent(out) :: info - - call psb_realloc(n,2_psb_ipk_,x%comid,info) - end subroutine c_base_new_comid - - ! ! shortcut alpha=1 beta=0 ! @@ -2438,35 +2426,6 @@ contains if (x%is_dev()) call x%sync() call z%addconst(x%v,b,info) end subroutine c_base_addconst_v2 - - - ! -------------------------------------------------------------------- - ! Implementation of methods used for neighbor alltoallv communication - ! -------------------------------------------------------------------- - subroutine c_base_init_topology(x, halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - implicit none - class(psb_c_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: halo_index(:) - integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%init(halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - - end subroutine c_base_init_topology - - subroutine c_base_free_topology(x, info) - implicit none - class(psb_c_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%free(info) - - end subroutine c_base_free_topology - ! -------------------------------------------------------------------- end module psb_c_base_vect_mod @@ -2476,7 +2435,6 @@ module psb_c_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_c_base_vect_mod - use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_c_base_vect_type !! The psb_c_base_vect_type @@ -2493,10 +2451,10 @@ module psb_c_base_multivect_mod type psb_c_base_multivect_type !> Values. - complex(psb_spk_), allocatable :: v(:,:) - complex(psb_spk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + complex(psb_spk_), allocatable :: v(:,:) + complex(psb_spk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2509,8 +2467,6 @@ module psb_c_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -2618,8 +2574,6 @@ module psb_c_base_multivect_mod procedure, nopass :: device_wait => c_base_mlv_device_wait procedure, pass(x) :: maybe_free_buffer => c_base_mlv_maybe_free_buffer procedure, pass(x) :: free_buffer => c_base_mlv_free_buffer - procedure, pass(x) :: new_comid => c_base_mlv_new_comid - procedure, pass(x) :: free_comid => c_base_mlv_free_comid ! ! Gather/scatter. These are needed for MPI interfacing. @@ -2636,10 +2590,6 @@ module psb_c_base_multivect_mod procedure, pass(y) :: sctb_x => c_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => c_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf - - ! Neighbor alltoallv communication topology handling - procedure, pass(x) :: init_topology => c_base_mlv_init_topology - procedure, pass(x) :: free_topology => c_base_mlv_free_topology end type psb_c_base_multivect_type interface psb_c_base_multivect @@ -2721,7 +2671,7 @@ contains logical, intent(in), optional :: scratch call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info,scratch) + call x%asb(m,n,info,scratch=scratch) end subroutine c_base_mlv_bld_n @@ -2773,6 +2723,7 @@ contains class(psb_c_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = czero @@ -3001,23 +2952,26 @@ contains case(psb_dupl_err_) do i=1,ncfs if (any(vv(x%iv(i),:).ne.czero)) then - call psb_errpush(psb_err_duplicate_coo,'vect-asb') + info = psb_err_duplicate_coo + call psb_errpush(info,'mvect-asb') return else vv(x%iv(i),:) = x%v(i,:) end if end do case default - write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + write(psb_err_unit,*) 'Error in mvect_asb: unsafe dupl',x%get_dupl() info =-7 end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) else if (x%is_upd().or.x%is_asb().or.scratch_) then - if (x%get_nrows() < m) & + if ((x%get_nrows() < m).or.(x%get_ncols() c_vect_check_addr procedure, pass(x) :: get_entry => c_vect_get_entry + procedure, pass(x) :: set_entry => c_vect_set_entry procedure, pass(x) :: dot_v => c_vect_dot_v procedure, pass(x) :: dot_a => c_vect_dot_a @@ -855,13 +856,21 @@ contains function c_vect_get_entry(x,index) result(res) implicit none - class(psb_c_vect_type), intent(in) :: x + class(psb_c_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index complex(psb_spk_) :: res - res = 0 + res = czero if (allocated(x%v)) res = x%v%get_entry(index) end function c_vect_get_entry + subroutine c_vect_set_entry(x,index,val) + implicit none + class(psb_c_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + complex(psb_spk_) :: val + if (allocated(x%v)) call x%v%set_entry(index,val) + end subroutine c_vect_set_entry + function c_vect_dot_v(n,x,y) result(res) implicit none class(psb_c_vect_type), intent(inout) :: x, y @@ -1660,19 +1669,20 @@ contains end subroutine c_mvect_bld_x - subroutine c_mvect_bld_n(x,m,n,mold) + subroutine c_mvect_bld_n(x,m,n,mold,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_c_multivect_type), intent(out) :: x class(psb_c_base_multivect_type), intent(in), optional :: mold integer(psb_ipk_) :: info - + logical, intent(in), optional :: scratch + info = psb_success_ if (present(mold)) then allocate(x%v,stat=info,mold=mold) else allocate(x%v,stat=info, mold=psb_c_get_base_multivect_default()) endif - if (info == psb_success_) call x%v%bld(m,n) + if (info == psb_success_) call x%v%bld(m,n,scratch=scratch) end subroutine c_mvect_bld_n @@ -2153,3 +2163,4 @@ contains !!$ end function c_mvect_asum end module psb_c_multivect_mod + diff --git a/base/modules/serial/psb_d_base_mat_mod.F90 b/base/modules/serial/psb_d_base_mat_mod.F90 index b2f49f2d2..24c2097f7 100644 --- a/base/modules/serial/psb_d_base_mat_mod.F90 +++ b/base/modules/serial/psb_d_base_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_d_base_vect_mod.F90 b/base/modules/serial/psb_d_base_vect_mod.F90 index 8a303ba95..df7b45f80 100644 --- a/base/modules/serial/psb_d_base_vect_mod.F90 +++ b/base/modules/serial/psb_d_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -33,7 +33,7 @@ ! package: psb_d_base_vect_mod ! ! This module contains the definition of the psb_d_base_vect type which -! is a container for dense vectors. +! is a container for dense vectors.\ ! This is encapsulated instead of being just a simple array to allow for ! more complicated situations, such as GPU programming, where the memory ! area we are interested in is not easily accessible from the host/Fortran @@ -47,11 +47,10 @@ module psb_d_base_vect_mod use psb_const_mod use psb_error_mod use psb_realloc_mod - use psb_i_base_vect_mod - use psb_l_base_vect_mod use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_unknown_ use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free - + use psb_i_base_vect_mod + use psb_l_base_vect_mod !> \namespace psb_base_mod \class psb_d_base_vect_type !! The psb_d_base_vect_type @@ -65,9 +64,8 @@ module psb_d_base_vect_mod !! type psb_d_base_vect_type !> Values. - real(psb_dpk_), allocatable :: v(:) - real(psb_dpk_), allocatable :: combuf(:) - ! Polymorphic communication handle stored at vector level. + real(psb_dpk_), allocatable :: v(:) + real(psb_dpk_), allocatable :: combuf(:) class(psb_comm_handle_type), allocatable :: comm_handle !> vector bldstate: @@ -78,10 +76,10 @@ module psb_d_base_vect_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_vect_mod. - integer(psb_ipk_), private :: bldstate = psb_vect_null_ - integer(psb_ipk_), private :: dupl = psb_dupl_null_ - integer(psb_ipk_), private :: ncfs = 0 - integer(psb_ipk_), allocatable :: iv(:) + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -145,7 +143,7 @@ module psb_d_base_vect_mod procedure, nopass :: device_wait => d_base_device_wait procedure, pass(x) :: maybe_free_buffer => d_base_maybe_free_buffer procedure, pass(x) :: free_buffer => d_base_free_buffer - + ! ! Basic info procedure, pass(x) :: get_nrows => d_base_get_nrows @@ -160,6 +158,7 @@ module psb_d_base_vect_mod procedure, pass(x) :: set_vect => d_base_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: get_entry=> d_base_get_entry + procedure, pass(x) :: set_entry=> d_base_set_entry ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -175,7 +174,8 @@ module psb_d_base_vect_mod generic, public :: sct => sctb, sctb_x, sctb_buf procedure, pass(x) :: check_addr => d_base_check_addr - + + ! ! Dot product and AXPBY @@ -250,6 +250,7 @@ module psb_d_base_vect_mod procedure, pass(x) :: minquotient_v => d_base_minquotient_v procedure, pass(x) :: minquotient_a2 => d_base_minquotient_a2 generic, public :: minquotient => minquotient_v, minquotient_a2 + end type psb_d_base_vect_type public :: psb_d_base_vect @@ -405,11 +406,6 @@ contains call psb_realloc(n,x%iv,info) call x%set_ncfs(0) end if - if (info == psb_success_) then - if (.not. allocated(x%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, x%comm_handle, info) - end if - end if end subroutine d_base_all @@ -428,9 +424,6 @@ contains integer(psb_ipk_), intent(out) :: info allocate(psb_d_base_vect_type :: y, stat=info) - if (info == psb_success_) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) - end if end subroutine d_base_mold @@ -438,11 +431,12 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_d_base_vect_type), intent(inout) :: x + class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -455,11 +449,6 @@ contains call x%set_host() call x%set_upd() end if - if (info == psb_success_) then - if (.not. allocated(x%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, x%comm_handle, info) - end if - end if end subroutine d_base_reinit @@ -837,18 +826,17 @@ contains use psb_realloc_mod implicit none class(psb_d_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - integer(psb_ipk_) :: info_comm + integer(psb_ipk_) :: info_comm + integer(psb_ipk_), intent(out) :: info info = 0 if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) - if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) if ((info == 0).and.allocated(x%comm_handle)) then call psb_comm_free(x%comm_handle, info_comm) if (info_comm /= psb_success_) info = info_comm - end if + end if if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') call x%set_null() @@ -894,7 +882,7 @@ contains & call x%free_buffer(info) end subroutine d_base_maybe_free_buffer - + function d_base_get_ncfs(x) result(res) implicit none class(psb_d_base_vect_type), intent(in) :: x @@ -1098,25 +1086,12 @@ contains implicit none class(psb_d_base_vect_type), intent(in) :: x class(psb_d_base_vect_type), intent(out) :: y - integer(psb_ipk_) :: info - integer(psb_ipk_) :: swap_status if (allocated(x%v)) call y%bld(x%v) call y%set_state(x%get_state()) call y%set_dupl(x%get_dupl()) call y%set_ncfs(x%get_ncfs()) if (allocated(x%iv)) y%iv = x%iv - if (allocated(x%comm_handle)) then - call psb_comm_set(x%comm_handle%comm_type, y%comm_handle, info) - if (info /= psb_success_) return - y%comm_handle%id = x%comm_handle%id - call x%comm_handle%get_swap_status(swap_status, info) - if (info /= psb_success_) return - call y%comm_handle%set_swap_status(swap_status, info) - if (info /= psb_success_) return - else - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) - end if end subroutine d_base_cpy ! @@ -1295,15 +1270,33 @@ contains ! function d_base_get_entry(x, index) result(res) implicit none - class(psb_d_base_vect_type), intent(in) :: x + class(psb_d_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index real(psb_dpk_) :: res res = 0 - if (allocated(x%v)) res = x%v(index) + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + res = x%v(index) + end if end function d_base_get_entry + subroutine d_base_set_entry(x, index, val) + implicit none + class(psb_d_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + real(psb_dpk_) :: val + + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(index) =val + call x%set_host() + end if + + end subroutine d_base_set_entry + ! ! Overwrite with absolute value ! @@ -2202,6 +2195,10 @@ contains res = min(res,abs(x%v(i))) end do #else + ! + ! From M&R&C: if the array is of size zero, MINVAL + ! returns the largest positive value + ! res = minval(x%v(1:n)) #endif end function d_base_min @@ -2366,56 +2363,6 @@ contains end subroutine d_base_device_wait - - subroutine d_base_init_comm(x, comm_handle, info) - ! `init_comm` is intentionally a configuration step. - ! It does not define the communication API surface itself; instead it: - ! 1) resets local communication buffers, - ! 2) ensures a handle exists with the requested concrete scheme, - ! recreating it only when needed (missing handle or type change), - ! 3) copies runtime state (`id`, swap status) from the input handle. - implicit none - class(psb_d_base_vect_type), intent(inout) :: x - class(psb_comm_handle_type), intent(in), pointer :: comm_handle - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_) :: comm_type, swap_status - logical :: need_new_handle - - info = psb_success_ - - ! Reset/initialize communication related storage. Actual - ! topology/building is done lazily by neighbor_topology_init - if (allocated(x%combuf)) then - deallocate(x%combuf) - end if - - comm_type = psb_comm_isend_irecv_ - if (associated(comm_handle)) then - comm_type = comm_handle%comm_type - if (comm_type == psb_comm_unknown_) comm_type = psb_comm_isend_irecv_ - end if - - ! Recreate only when needed (missing handle or scheme change). - need_new_handle = .not. allocated(x%comm_handle) - if (.not. need_new_handle) then - need_new_handle = (x%comm_handle%comm_type /= comm_type) - end if - - if (need_new_handle) then - call psb_comm_set(comm_type, x%comm_handle, info) - if (info /= psb_success_) return - end if - - if (associated(comm_handle)) then - x%comm_handle%id = comm_handle%id - call comm_handle%get_swap_status(swap_status, info) - if (info /= psb_success_) return - call x%comm_handle%set_swap_status(swap_status, info) - if (info /= psb_success_) return - end if - - end subroutine d_base_init_comm - function d_base_use_buffer() result(res) logical :: res @@ -2432,7 +2379,6 @@ contains call psb_realloc(n,x%combuf,info) end subroutine d_base_new_buffer - ! ! shortcut alpha=1 beta=0 ! @@ -2663,7 +2609,6 @@ contains if (x%is_dev()) call x%sync() call z%addconst(x%v,b,info) end subroutine d_base_addconst_v2 - end module psb_d_base_vect_mod @@ -2673,7 +2618,6 @@ module psb_d_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_d_base_vect_mod - use psb_comm_schemes_mod, only: psb_comm_handle_type !> \namespace psb_base_mod \class psb_d_base_vect_type !! The psb_d_base_vect_type @@ -2690,9 +2634,9 @@ module psb_d_base_multivect_mod type psb_d_base_multivect_type !> Values. - real(psb_dpk_), allocatable :: v(:,:) - real(psb_dpk_), allocatable :: combuf(:) - ! neighbor-specific communication state removed; comm_handle owned below + real(psb_dpk_), allocatable :: v(:,:) + real(psb_dpk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle !> vector bldstate: !! null: pristine; @@ -2706,9 +2650,6 @@ module psb_d_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) - - class(psb_comm_handle_type), allocatable :: comm_handle - contains ! ! Constructors/allocators @@ -2832,7 +2773,6 @@ module psb_d_base_multivect_mod procedure, pass(y) :: sctb_x => d_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => d_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf - end type psb_d_base_multivect_type interface psb_d_base_multivect @@ -2914,7 +2854,7 @@ contains logical, intent(in), optional :: scratch call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info,scratch) + call x%asb(m,n,info,scratch=scratch) end subroutine d_base_mlv_bld_n @@ -2966,6 +2906,7 @@ contains class(psb_d_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = dzero @@ -3194,23 +3135,26 @@ contains case(psb_dupl_err_) do i=1,ncfs if (any(vv(x%iv(i),:).ne.dzero)) then - call psb_errpush(psb_err_duplicate_coo,'vect-asb') + info = psb_err_duplicate_coo + call psb_errpush(info,'mvect-asb') return else vv(x%iv(i),:) = x%v(i,:) end if end do case default - write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + write(psb_err_unit,*) 'Error in mvect_asb: unsafe dupl',x%get_dupl() info =-7 end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) else if (x%is_upd().or.x%is_asb().or.scratch_) then - if (x%get_nrows() < m) & + if ((x%get_nrows() < m).or.(x%get_ncols() d_vect_check_addr procedure, pass(x) :: get_entry => d_vect_get_entry + procedure, pass(x) :: set_entry => d_vect_set_entry procedure, pass(x) :: dot_v => d_vect_dot_v procedure, pass(x) :: dot_a => d_vect_dot_a @@ -862,13 +863,21 @@ contains function d_vect_get_entry(x,index) result(res) implicit none - class(psb_d_vect_type), intent(in) :: x + class(psb_d_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index real(psb_dpk_) :: res - res = 0 + res = dzero if (allocated(x%v)) res = x%v%get_entry(index) end function d_vect_get_entry + subroutine d_vect_set_entry(x,index,val) + implicit none + class(psb_d_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + real(psb_dpk_) :: val + if (allocated(x%v)) call x%v%set_entry(index,val) + end subroutine d_vect_set_entry + function d_vect_dot_v(n,x,y) result(res) implicit none class(psb_d_vect_type), intent(inout) :: x, y @@ -1430,7 +1439,7 @@ contains if (allocated(x%v)) then res = x%v%minreal(n) else - res = dzero + res = HUGE(done) end if end function d_vect_min @@ -1739,19 +1748,20 @@ contains end subroutine d_mvect_bld_x - subroutine d_mvect_bld_n(x,m,n,mold) + subroutine d_mvect_bld_n(x,m,n,mold,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_d_multivect_type), intent(out) :: x class(psb_d_base_multivect_type), intent(in), optional :: mold integer(psb_ipk_) :: info - + logical, intent(in), optional :: scratch + info = psb_success_ if (present(mold)) then allocate(x%v,stat=info,mold=mold) else allocate(x%v,stat=info, mold=psb_d_get_base_multivect_default()) endif - if (info == psb_success_) call x%v%bld(m,n) + if (info == psb_success_) call x%v%bld(m,n,scratch=scratch) end subroutine d_mvect_bld_n @@ -2232,3 +2242,4 @@ contains !!$ end function d_mvect_asum end module psb_d_multivect_mod + diff --git a/base/modules/serial/psb_i2_base_vect_mod.F90 b/base/modules/serial/psb_i2_base_vect_mod.F90 new file mode 100644 index 000000000..01e665949 --- /dev/null +++ b/base/modules/serial/psb_i2_base_vect_mod.F90 @@ -0,0 +1,2526 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! package: psb_i2_base_vect_mod +! +! This module contains the definition of the psb_i2_base_vect type which +! is a container for dense vectors.\ +! This is encapsulated instead of being just a simple array to allow for +! more complicated situations, such as GPU programming, where the memory +! area we are interested in is not easily accessible from the host/Fortran +! side. It is also meant to be encapsulated in an outer type, to allow +! runtime switching as per the STATE design pattern, similar to the +! sparse matrix types. +! +! +module psb_i2_base_vect_mod + + use psb_const_mod + use psb_error_mod + use psb_realloc_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_unknown_ + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free + use psb_i_base_vect_mod + + !> \namespace psb_base_mod \class psb_i2_base_vect_type + !! The psb_i2_base_vect_type + !! defines a middle level integer(psb_i2pk_) encapsulated dense vector. + !! The encapsulation is needed, in place of a simple array, to allow + !! for complicated situations, such as GPU programming, where the memory + !! area we are interested in is not easily accessible from the host/Fortran + !! side. It is also meant to be encapsulated in an outer type, to allow + !! runtime switching as per the STATE design pattern, similar to the + !! sparse matrix types. + !! + type psb_i2_base_vect_type + !> Values. + integer(psb_i2pk_), allocatable :: v(:) + integer(psb_i2pk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle + + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) + contains + ! + ! Constructors/allocators + ! + procedure, pass(x) :: bld_x => i2_base_bld_x + procedure, pass(x) :: bld_mn => i2_base_bld_mn + procedure, pass(x) :: bld_en => i2_base_bld_en + generic, public :: bld => bld_x, bld_mn, bld_en + procedure, pass(x) :: all => i2_base_all + procedure, pass(x) :: mold => i2_base_mold + ! + ! Insert/set. Assembly and free. + ! Assembly does almost nothing here, but is important + ! in derived classes. + ! + procedure, pass(x) :: ins_a => i2_base_ins_a + procedure, pass(x) :: ins_v => i2_base_ins_v + generic, public :: ins => ins_a, ins_v + procedure, pass(x) :: zero => i2_base_zero + procedure, pass(x) :: asb_m => i2_base_asb_m + procedure, pass(x) :: asb_e => i2_base_asb_e + generic, public :: asb => asb_m, asb_e + procedure, pass(x) :: free => i2_base_free + procedure, pass(x) :: reinit => i2_base_reinit + procedure, pass(x) :: set_ncfs => i2_base_set_ncfs + procedure, pass(x) :: get_ncfs => i2_base_get_ncfs + procedure, pass(x) :: set_dupl => i2_base_set_dupl + procedure, pass(x) :: get_dupl => i2_base_get_dupl + procedure, pass(x) :: set_state => i2_base_set_state + procedure, pass(x) :: set_null => i2_base_set_null + procedure, pass(x) :: set_bld => i2_base_set_bld + procedure, pass(x) :: set_upd => i2_base_set_upd + procedure, pass(x) :: set_asb => i2_base_set_asb + procedure, pass(x) :: get_state => i2_base_get_state + procedure, pass(x) :: is_null => i2_base_is_null + procedure, pass(x) :: is_bld => i2_base_is_bld + procedure, pass(x) :: is_upd => i2_base_is_upd + procedure, pass(x) :: is_asb => i2_base_is_asb + procedure, pass(x) :: base_cpy => i2_base_cpy + ! + ! Sync: centerpiece of handling of external storage. + ! Any derived class having extra storage upon sync + ! will guarantee that both fortran/host side and + ! external side contain the same data. The base + ! version is only a placeholder. + ! + procedure, pass(x) :: sync => i2_base_sync + procedure, pass(x) :: is_host => i2_base_is_host + procedure, pass(x) :: is_dev => i2_base_is_dev + procedure, pass(x) :: is_sync => i2_base_is_sync + procedure, pass(x) :: set_host => i2_base_set_host + procedure, pass(x) :: set_dev => i2_base_set_dev + procedure, pass(x) :: set_sync => i2_base_set_sync + + ! + ! These are for handling gather/scatter in new + ! comm internals implementation. + ! + procedure, nopass :: use_buffer => i2_base_use_buffer + procedure, pass(x) :: new_buffer => i2_base_new_buffer + procedure, nopass :: device_wait => i2_base_device_wait + procedure, pass(x) :: maybe_free_buffer => i2_base_maybe_free_buffer + procedure, pass(x) :: free_buffer => i2_base_free_buffer + + ! + ! Basic info + procedure, pass(x) :: get_nrows => i2_base_get_nrows + procedure, pass(x) :: sizeof => i2_base_sizeof + procedure, nopass :: get_fmt => i2_base_get_fmt + ! + ! Set/get data from/to an external array; also + ! overload assignment. + ! + procedure, pass(x) :: get_vect => i2_base_get_vect + procedure, pass(x) :: set_scal => i2_base_set_scal + procedure, pass(x) :: set_vect => i2_base_set_vect + generic, public :: set => set_vect, set_scal + ! + ! Gather/scatter. These are needed for MPI interfacing. + ! May have to be reworked. + ! + procedure, pass(x) :: gthab => i2_base_gthab + procedure, pass(x) :: gthzv => i2_base_gthzv + procedure, pass(x) :: gthzv_x => i2_base_gthzv_x + procedure, pass(x) :: gthzbuf => i2_base_gthzbuf + generic, public :: gth => gthab, gthzv, gthzv_x, gthzbuf + procedure, pass(y) :: sctb => i2_base_sctb + procedure, pass(y) :: sctb_x => i2_base_sctb_x + procedure, pass(y) :: sctb_buf => i2_base_sctb_buf + generic, public :: sct => sctb, sctb_x, sctb_buf + + procedure, pass(x) :: check_addr => i2_base_check_addr + + + + + + + end type psb_i2_base_vect_type + + public :: psb_i2_base_vect + private :: constructor, size_const + interface psb_i2_base_vect + module procedure constructor, size_const + end interface psb_i2_base_vect + +contains + + ! + ! Constructors. + ! + + !> Function constructor: + !! \brief Constructor from an array + !! \param x(:) input array to be copied + !! + function constructor(x) result(this) + integer(psb_i2pk_) :: x(:) + type(psb_i2_base_vect_type) :: this + integer(psb_ipk_) :: info + + this%v = x + call this%asb(size(x,kind=psb_ipk_),info) + end function constructor + + + !> Function constructor: + !! \brief Constructor from size + !! \param n Size of vector to be built. + !! + function size_const(n) result(this) + integer(psb_ipk_), intent(in) :: n + type(psb_i2_base_vect_type) :: this + integer(psb_ipk_) :: info + + call this%asb(n,info) + + end function size_const + + ! + ! Build from a sample + ! + + !> Function bld_x: + !! \memberof psb_i2_base_vect_type + !! \brief Build method from an array + !! \param x(:) input array to be copied + !! + subroutine i2_base_bld_x(x,this,scratch) + use psb_realloc_mod + implicit none + integer(psb_i2pk_), intent(in) :: this(:) + class(psb_i2_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + integer(psb_ipk_) :: i + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + call psb_realloc(size(this),x%v,info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,'base_vect_bld') + return + end if +#if defined (PSB_OPENMP) + !$omp parallel do private(i) + do i = 1, size(this) + x%v(i) = this(i) + end do +#else + x%v(:) = this(:) +#endif + end subroutine i2_base_bld_x + + ! + ! Create with size, but no initialization + ! + + !> Function bld_mn: + !! \memberof psb_i2_base_vect_type + !! \brief Build method with size (uninitialized data) + !! \param n size to be allocated. + !! + subroutine i2_base_bld_mn(x,n,scratch) + use psb_realloc_mod + implicit none + integer(psb_mpk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + call psb_realloc(n,x%v,info) + call x%asb(n,info,scratch=scratch_) + + end subroutine i2_base_bld_mn + + !> Function bld_en: + !! \memberof psb_i2_base_vect_type + !! \brief Build method with size (uninitialized data) + !! \param n size to be allocated. + !! + subroutine i2_base_bld_en(x,n,scratch) + use psb_realloc_mod + implicit none + integer(psb_epk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(inout) :: x + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + call psb_realloc(n,x%v,info) + call x%asb(n,info,scratch=scratch_) + + end subroutine i2_base_bld_en + + !> Function base_all: + !! \memberof psb_i2_base_vect_type + !! \brief Build method with size (uninitialized data) and + !! allocation return code. + !! \param n size to be allocated. + !! \param info return code + !! + subroutine i2_base_all(n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + call psb_realloc(n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if + + end subroutine i2_base_all + + !> Function base_mold: + !! \memberof psb_i2_base_vect_type + !! \brief Mold method: return a variable with the same dynamic type + !! \param y returned variable + !! \param info return code + !! + subroutine i2_base_mold(x, y, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + class(psb_i2_base_vect_type), intent(out), allocatable :: y + integer(psb_ipk_), intent(out) :: info + + allocate(psb_i2_base_vect_type :: y, stat=info) + + end subroutine i2_base_mold + + subroutine i2_base_reinit(x, info,clear) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + logical :: clear_ + + info = 0 + if (present(clear)) then + clear_ = clear + else + clear_ = .true. + end if + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + if (clear_) x%v(:) = i2zero + call x%set_host() + call x%set_upd() + end if + + end subroutine i2_base_reinit + + ! + ! Insert a bunch of values at specified positions. + ! + !> Function base_ins: + !! \memberof psb_i2_base_vect_type + !! \brief Insert coefficients. + !! + !! + !! Given a list of N pairs + !! (IRL(i),VAL(i)) + !! record a new coefficient in X such that + !! X(IRL(1:N)) = VAL(1:N). + !! + !! - the update operation will perform either + !! X(IRL(1:n)) = VAL(1:N) + !! or + !! X(IRL(1:n)) = X(IRL(1:n))+VAL(1:N) + !! according to the value of DUPLICATE. + !! + !! + !! \param n number of pairs in input + !! \param irl(:) the input row indices + !! \param val(:) the input coefficients + !! \param dupl how to treat duplicate entries + !! \param info return code + !! + ! + subroutine i2_base_ins_a(n,irl,val,dupl,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl, maxr + integer(psb_ipk_), intent(in) :: irl(:) + integer(psb_i2pk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, isz, dupl_, ncfs_, k + + info = 0 + if (psb_errstatus_fatal()) return + + if (try_newins) then + if (x%is_bld()) then + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_ensure_size(isz,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 + ! this row belongs to me + ! copy i-th row of block val in x + x%v(k) = val(i) + x%iv(k) = irl(i) + end if + enddo + call x%set_ncfs(k) + + else if (x%is_upd()) then + + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = val(i) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i)) = x%v(irl(i)) + val(i) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + end if + call x%set_host() + if (info /= 0) then + call psb_errpush(info,'base_vect_ins') + return + end if + + end subroutine i2_base_ins_a + + subroutine i2_base_ins_v(n,irl,val,dupl,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl, maxr + class(psb_i_base_vect_type), intent(inout) :: irl + class(psb_i2_base_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: isz + + info = 0 + if (psb_errstatus_fatal()) return + + if (irl%is_dev()) call irl%sync() + if (val%is_dev()) call val%sync() + if (x%is_dev()) call x%sync() + call x%ins(n,irl%v,val%v,dupl,maxr,info) + + if (info /= 0) then + call psb_errpush(info,'base_vect_ins') + return + end if + + end subroutine i2_base_ins_v + + + ! + !> Function base_zero + !! \memberof psb_i2_base_vect_type + !! \brief Zero out contents + !! + ! + subroutine i2_base_zero(x) + use psi_serial_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + if (allocated(x%v)) then + !$omp workshare + x%v(:)=i2zero + !$omp end workshare + end if + call x%set_host() + end subroutine i2_base_zero + + + ! + ! Assembly. + ! For derived classes: after this the vector + ! storage is supposed to be in sync. + ! + !> Function base_asb: + !! \memberof psb_i2_base_vect_type + !! \brief Assemble vector: reallocate as necessary. + !! + !! \param n final size + !! \param info return code + !! + ! + + subroutine i2_base_asb_m(n, x, info, scratch) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_mpk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_i2pk_), allocatable :: vv(:) + + info = 0 + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(n,vv,info) + vv(:) = i2zero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (vv(x%iv(i)).ne. i2zero) then + call psb_errpush(psb_err_duplicate_coo,'vect-asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.x%is_asb().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if + call x%set_host() + call x%set_asb() + call x%sync() + end subroutine i2_base_asb_m + + ! + ! Assembly. + ! For derived classes: after this the vector + ! storage is supposed to be in sync. + ! + !> Function base_asb: + !! \memberof psb_i2_base_vect_type + !! \brief Assemble vector: reallocate as necessary. + !! + !! \param n final size + !! \param info return code + !! + ! + + subroutine i2_base_asb_e(n, x, info, scratch) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_epk_), intent(in) :: n + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_i2pk_), allocatable :: vv(:) + + info = 0 + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb unhandled') + if (x%is_bld()) then + call psb_realloc(n,vv,info) + vv(:) = i2zero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = vv(x%iv(i)) + x%v(i) + end do + case(psb_dupl_ovwrt_) + do i=1,x%get_ncfs() + vv(x%iv(i)) = x%v(i) + end do + case(psb_dupl_err_) + do i=1,x%get_ncfs() + if (vv(x%iv(i)).ne. i2zero) then + call psb_errpush(psb_err_duplicate_coo,'vect_asb') + return + else + vv(x%iv(i)) = x%v(i) + end if + end do + case default + write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.x%is_asb().or.scratch_) then + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + else + info = psb_err_invalid_vect_state_ + call psb_errpush(info,'vect_asb') + end if + else + if (x%get_nrows() < n) & + & call psb_realloc(n,x%v,info) + if (info /= 0) & + & call psb_errpush(psb_err_alloc_dealloc_,'vect_asb') + end if + call x%set_host() + call x%set_asb() + call x%sync() + end subroutine i2_base_asb_e + + ! + !> Function base_free: + !! \memberof psb_i2_base_vect_type + !! \brief Free vector + !! + !! \param info return code + !! + ! + subroutine i2_base_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_) :: info_comm + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) deallocate(x%v, stat=info) + if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%comm_handle)) then + call psb_comm_free(x%comm_handle, info_comm) + if (info_comm /= psb_success_) info = info_comm + end if + if (info /= 0) call & + & psb_errpush(psb_err_alloc_dealloc_,'vect_free') + call x%set_null() + end subroutine i2_base_free + + ! + !> Function base_free_buffer: + !! \memberof psb_i2_base_vect_type + !! \brief Free aux buffer + !! + !! \param info return code + !! + ! + subroutine i2_base_free_buffer(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%combuf)) & + & deallocate(x%combuf,stat=info) + end subroutine i2_base_free_buffer + + ! + !> Function base_maybe_free_buffer: + !! \memberof psb_i2_base_vect_type + !! \brief Conditionally Free aux buffer. + !! In some derived classes, e.g. GPU, + !! does not really frees to avoid runtime + !! costs + !! + !! \param info return code + !! + ! + subroutine i2_base_maybe_free_buffer(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (psb_get_maybe_free_buffer())& + & call x%free_buffer(info) + + end subroutine i2_base_maybe_free_buffer + + function i2_base_get_ncfs(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function i2_base_get_ncfs + + function i2_base_get_dupl(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function i2_base_get_dupl + + function i2_base_get_state(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function i2_base_get_state + + function i2_base_is_null(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function i2_base_is_null + + function i2_base_is_bld(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function i2_base_is_bld + + function i2_base_is_upd(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function i2_base_is_upd + + function i2_base_is_asb(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function i2_base_is_asb + + subroutine i2_base_set_ncfs(n,x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine i2_base_set_ncfs + + subroutine i2_base_set_dupl(n,x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine i2_base_set_dupl + + subroutine i2_base_set_state(n,x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine i2_base_set_state + + subroutine i2_base_set_null(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine i2_base_set_null + + subroutine i2_base_set_bld(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine i2_base_set_bld + + subroutine i2_base_set_upd(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine i2_base_set_upd + + subroutine i2_base_set_asb(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + x%bldstate = psb_vect_asb_ + end subroutine i2_base_set_asb + + ! + ! The base version of SYNC & friends does nothing, it's just + ! a placeholder. + ! + ! + !> Function base_sync: + !! \memberof psb_i2_base_vect_type + !! \brief Sync: base version is a no-op. + !! + ! + subroutine i2_base_sync(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + end subroutine i2_base_sync + + ! + !> Function base_set_host: + !! \memberof psb_i2_base_vect_type + !! \brief Set_host: base version is a no-op. + !! + ! + subroutine i2_base_set_host(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + end subroutine i2_base_set_host + + ! + !> Function base_set_dev: + !! \memberof psb_i2_base_vect_type + !! \brief Set_dev: base version is a no-op. + !! + ! + subroutine i2_base_set_dev(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + end subroutine i2_base_set_dev + + ! + !> Function base_set_sync: + !! \memberof psb_i2_base_vect_type + !! \brief Set_sync: base version is a no-op. + !! + ! + subroutine i2_base_set_sync(x) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + + end subroutine i2_base_set_sync + + ! + !> Function base_is_dev: + !! \memberof psb_i2_base_vect_type + !! \brief Is vector on external device . + !! + ! + function i2_base_is_dev(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + + res = .false. + end function i2_base_is_dev + + ! + !> Function base_is_host + !! \memberof psb_i2_base_vect_type + !! \brief Is vector on standard memory . + !! + ! + function i2_base_is_host(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + + res = .true. + end function i2_base_is_host + + ! + !> Function base_is_sync + !! \memberof psb_i2_base_vect_type + !! \brief Is vector on sync . + !! + ! + function i2_base_is_sync(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + logical :: res + + res = .true. + end function i2_base_is_sync + + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine i2_base_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + class(psb_i2_base_vect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine i2_base_cpy + + ! + ! Size info. + ! + ! + !> Function base_get_nrows + !! \memberof psb_i2_base_vect_type + !! \brief Number of entries + !! + ! + function i2_base_get_nrows(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + + res = 0 + if (allocated(x%v)) res = size(x%v) + + end function i2_base_get_nrows + + ! + !> Function base_get_sizeof + !! \memberof psb_i2_base_vect_type + !! \brief Size in bytes + !! + ! + function i2_base_sizeof(x) result(res) + implicit none + class(psb_i2_base_vect_type), intent(in) :: x + integer(psb_epk_) :: res + + ! Force 8-byte integers. + res = (1_psb_epk_ * psb_sizeof_i2p) * x%get_nrows() + + end function i2_base_sizeof + + ! + !> Function base_get_fmt + !! \memberof psb_i2_base_vect_type + !! \brief Format + !! + ! + function i2_base_get_fmt() result(res) + implicit none + character(len=5) :: res + res = 'BASE' + end function i2_base_get_fmt + + + ! + ! + ! + !> Function base_get_vect + !! \memberof psb_i2_base_vect_type + !! \brief Extract a copy of the contents + !! + ! + function i2_base_get_vect(x,n) result(res) + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_i2pk_), allocatable :: res(:) + integer(psb_ipk_) :: info + integer(psb_ipk_), optional :: n + ! Local variables + integer(psb_ipk_) :: isz, i + + if (.not.allocated(x%v)) return + if (.not.x%is_host()) call x%sync() + isz = x%get_nrows() + if (present(n)) isz = max(0,min(isz,n)) + allocate(res(isz),stat=info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,'base_get_vect') + return + end if + if (.false.) then + res(1:isz) = x%v(1:isz) + else + !$omp parallel do private(i) + do i=1, isz + res(i) = x%v(i) + end do + end if + + end function i2_base_get_vect + + ! + ! Reset all values + ! + ! + !> Function base_set_scal + !! \memberof psb_i2_base_vect_type + !! \brief Set all entries + !! \param val The value to set + !! + subroutine i2_base_set_scal(x,val,first,last) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: first_, last_, i + + first_=1 + last_=size(x%v) + if (present(first)) first_ = max(1,first) + if (present(last)) last_ = min(last,last_) + + if (x%is_dev()) call x%sync() +#if defined(PSB_OPENMP) + !$omp parallel do private(i) + do i = first_, last_ + x%v(i) = val + end do +#else + x%v(first_:last_) = val +#endif + call x%set_host() + + end subroutine i2_base_set_scal + + + ! + !> Function base_set_vect + !! \memberof psb_i2_base_vect_type + !! \brief Set all entries + !! \param val(:) The vector to be copied in + !! + subroutine i2_base_set_vect(x,val,first,last) + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: first_, last_, i, info + + if (.not.allocated(x%v)) then + call psb_realloc(size(val),x%v,info) + end if + + first_ = 1 + if (present(first)) first_ = max(1,first) + last_ = min(psb_size(x%v),first_+size(val)-1) + if (present(last)) last_ = min(last,last_) + + if (x%is_dev()) call x%sync() + +#if defined(PSB_OPENMP) + !$omp parallel do private(i) + do i = first_, last_ + x%v(i) = val(i-first_+1) + end do +#else + x%v(first_:last_) = val(1:last_-first_+1) +#endif + call x%set_host() + + end subroutine i2_base_set_vect + + subroutine i2_base_check_addr(x) + class(psb_i2_base_vect_type), intent(inout) :: x + + write(0,*) 'Check addr: base version, do nothing' + + end subroutine i2_base_check_addr + + + + ! + ! Gather: Y = beta * Y + alpha * X(IDX(:)) + ! + ! + !> Function base_gthab + !! \memberof psb_i2_base_vect_type + !! \brief gather into an array + !! Y = beta * Y + alpha * X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + !! \param alpha + !! \param beta + subroutine i2_base_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: alpha, beta, y(:) + class(psb_i2_base_vect_type) :: x + + if (x%is_dev()) call x%sync() + call psi_gth(n,idx,alpha,x%v,beta,y) + + end subroutine i2_base_gthab + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_gthzv + !! \memberof psb_i2_base_vect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_gthzv_x(i,n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_ipk_) :: i + integer(psb_mpk_) :: n + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: y(:) + class(psb_i2_base_vect_type) :: x + + if (idx%is_dev()) call idx%sync() + call x%gth(n,idx%v(i:),y) + + end subroutine i2_base_gthzv_x + + ! + ! New comm internals impl. + ! + subroutine i2_base_gthzbuf(i,n,idx,x) + use psi_serial_mod + implicit none + integer(psb_ipk_) :: i + integer(psb_mpk_) :: n + class(psb_i_base_vect_type) :: idx + class(psb_i2_base_vect_type) :: x + + if (.not.allocated(x%combuf)) then + call psb_errpush(psb_err_alloc_dealloc_,'gthzbuf') + return + end if + if (idx%is_dev()) call idx%sync() + if (x%is_dev()) call x%sync() + call x%gth(n,idx%v(i:),x%combuf(i:)) + + end subroutine i2_base_gthzbuf + ! + !> Function base_device_wait: + !! \memberof psb_i2_base_vect_type + !! \brief device_wait: base version is a no-op. + !! + ! + subroutine i2_base_device_wait() + implicit none + + end subroutine i2_base_device_wait + + function i2_base_use_buffer() result(res) + logical :: res + + res = .true. + end function i2_base_use_buffer + + subroutine i2_base_new_buffer(n,x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + + call psb_realloc(n,x%combuf,info) + end subroutine i2_base_new_buffer + + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_gthzv + !! \memberof psb_i2_base_vect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_gthzv(n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:) + class(psb_i2_base_vect_type) :: x + + if (x%is_dev()) call x%sync() + call psi_gth(n,idx,x%v,y) + + end subroutine i2_base_gthzv + + ! + ! Scatter: + ! Y(IDX(:)) = beta*Y(IDX(:)) + X(:) + ! + ! + !> Function base_sctb + !! \memberof psb_i2_base_vect_type + !! \brief scatter into a class(base_vect) + !! Y(IDX(:)) = beta * Y(IDX(:)) + X(:) + !! \param n how many entries to consider + !! \param idx(:) indices + !! \param beta + !! \param x(:) + subroutine i2_base_sctb(n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_base_vect_type) :: y + + if (y%is_dev()) call y%sync() + call psi_sct(n,idx,x,beta,y%v) + call y%set_host() + + end subroutine i2_base_sctb + + subroutine i2_base_sctb_x(i,n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_base_vect_type) :: y + + if (idx%is_dev()) call idx%sync() + call y%sct(n,idx%v(i:),x,beta) + call y%set_host() + + end subroutine i2_base_sctb_x + + subroutine i2_base_sctb_buf(i,n,idx,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: beta + class(psb_i2_base_vect_type) :: y + + + if (.not.allocated(y%combuf)) then + call psb_errpush(psb_err_alloc_dealloc_,'sctb_buf') + return + end if + if (y%is_dev()) call y%sync() + if (idx%is_dev()) call idx%sync() + call y%sct(n,idx%v(i:),y%combuf(i:),beta) + call y%set_host() + + end subroutine i2_base_sctb_buf + + +end module psb_i2_base_vect_mod + + +module psb_i2_base_multivect_mod + + use psb_const_mod + use psb_error_mod + use psb_realloc_mod + use psb_i2_base_vect_mod + + !> \namespace psb_base_mod \class psb_i2_base_vect_type + !! The psb_i2_base_vect_type + !! defines a middle level integer(psb_ipk_) encapsulated dense vector. + !! The encapsulation is needed, in place of a simple array, to allow + !! for complicated situations, such as GPU programming, where the memory + !! area we are interested in is not easily accessible from the host/Fortran + !! side. It is also meant to be encapsulated in an outer type, to allow + !! runtime switching as per the STATE design pattern, similar to the + !! sparse matrix types. + !! + private + public :: psb_i2_base_multivect, psb_i2_base_multivect_type + + type psb_i2_base_multivect_type + !> Values. + integer(psb_i2pk_), allocatable :: v(:,:) + integer(psb_i2pk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle + + !> vector bldstate: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_vect_mod. + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) + contains + ! + ! Constructors/allocators + ! + procedure, pass(x) :: bld_x => i2_base_mlv_bld_x + procedure, pass(x) :: bld_n => i2_base_mlv_bld_n + generic, public :: bld => bld_x, bld_n + procedure, pass(x) :: all => i2_base_mlv_all + procedure, pass(x) :: mold => i2_base_mlv_mold + ! + ! Insert/set. Assembly and free. + ! Assembly does almost nothing here, but is important + ! in derived classes. + ! + procedure, pass(x) :: ins => i2_base_mlv_ins + procedure, pass(x) :: zero => i2_base_mlv_zero + procedure, pass(x) :: asb => i2_base_mlv_asb + procedure, pass(x) :: free => i2_base_mlv_free + procedure, pass(x) :: reinit => i2_base_mlv_reinit + procedure, pass(x) :: set_ncfs => i2_base_mlv_set_ncfs + procedure, pass(x) :: get_ncfs => i2_base_mlv_get_ncfs + procedure, pass(x) :: set_dupl => i2_base_mlv_set_dupl + procedure, pass(x) :: get_dupl => i2_base_mlv_get_dupl + procedure, pass(x) :: set_state => i2_base_mlv_set_state + procedure, pass(x) :: set_null => i2_base_mlv_set_null + procedure, pass(x) :: set_bld => i2_base_mlv_set_bld + procedure, pass(x) :: set_upd => i2_base_mlv_set_upd + procedure, pass(x) :: set_asb => i2_base_mlv_set_asb + procedure, pass(x) :: get_state => i2_base_mlv_get_state + procedure, pass(x) :: is_null => i2_base_mlv_is_null + procedure, pass(x) :: is_bld => i2_base_mlv_is_bld + procedure, pass(x) :: is_upd => i2_base_mlv_is_upd + procedure, pass(x) :: is_asb => i2_base_mlv_is_asb + procedure, pass(x) :: base_cpy => i2_base_mlv_cpy + ! + ! Sync: centerpiece of handling of external storage. + ! Any derived class having extra storage upon sync + ! will guarantee that both fortran/host side and + ! external side contain the same data. The base + ! version is only a placeholder. + ! + procedure, pass(x) :: sync => i2_base_mlv_sync + procedure, pass(x) :: is_host => i2_base_mlv_is_host + procedure, pass(x) :: is_dev => i2_base_mlv_is_dev + procedure, pass(x) :: is_sync => i2_base_mlv_is_sync + procedure, pass(x) :: set_host => i2_base_mlv_set_host + procedure, pass(x) :: set_dev => i2_base_mlv_set_dev + procedure, pass(x) :: set_sync => i2_base_mlv_set_sync + + ! + ! Basic info + procedure, pass(x) :: get_nrows => i2_base_mlv_get_nrows + procedure, pass(x) :: get_ncols => i2_base_mlv_get_ncols + procedure, pass(x) :: sizeof => i2_base_mlv_sizeof + procedure, nopass :: get_fmt => i2_base_mlv_get_fmt + ! + ! Set/get data from/to an external array; also + ! overload assignment. + ! + procedure, pass(x) :: get_vect => i2_base_mlv_get_vect + procedure, pass(x) :: set_scal => i2_base_mlv_set_scal + procedure, pass(x) :: set_vect => i2_base_mlv_set_vect + generic, public :: set => set_vect, set_scal + + + ! + ! These are for handling gather/scatter in new + ! comm internals implementation. + ! + procedure, nopass :: use_buffer => i2_base_mlv_use_buffer + procedure, pass(x) :: new_buffer => i2_base_mlv_new_buffer + procedure, nopass :: device_wait => i2_base_mlv_device_wait + procedure, pass(x) :: maybe_free_buffer => i2_base_mlv_maybe_free_buffer + procedure, pass(x) :: free_buffer => i2_base_mlv_free_buffer + + ! + ! Gather/scatter. These are needed for MPI interfacing. + ! May have to be reworked. + ! + procedure, pass(x) :: gthab => i2_base_mlv_gthab + procedure, pass(x) :: gthzv => i2_base_mlv_gthzv + procedure, pass(x) :: gthzm => i2_base_mlv_gthzm + procedure, pass(x) :: gthzv_x => i2_base_mlv_gthzv_x + procedure, pass(x) :: gthzbuf => i2_base_mlv_gthzbuf + generic, public :: gth => gthab, gthzv, gthzm, gthzv_x, gthzbuf + procedure, pass(y) :: sctb => i2_base_mlv_sctb + procedure, pass(y) :: sctbr2 => i2_base_mlv_sctbr2 + procedure, pass(y) :: sctb_x => i2_base_mlv_sctb_x + procedure, pass(y) :: sctb_buf => i2_base_mlv_sctb_buf + generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + end type psb_i2_base_multivect_type + + interface psb_i2_base_multivect + module procedure constructor, size_const + end interface psb_i2_base_multivect + +contains + + ! + ! Constructors. + ! + + !> Function constructor: + !! \brief Constructor from an array + !! \param x(:) input array to be copied + !! + function constructor(x) result(this) + integer(psb_i2pk_) :: x(:,:) + type(psb_i2_base_multivect_type) :: this + integer(psb_ipk_) :: info + + this%v = x + call this%asb(size(x,dim=1,kind=psb_ipk_),& + & size(x,dim=2,kind=psb_ipk_),info) + end function constructor + + + !> Function constructor: + !! \brief Constructor from size + !! \param n Size of vector to be built. + !! + function size_const(m,n) result(this) + integer(psb_ipk_), intent(in) :: m,n + type(psb_i2_base_multivect_type) :: this + integer(psb_ipk_) :: info + + call this%asb(m,n,info) + + end function size_const + + ! + ! Build from a sample + ! + + !> Function bld_x: + !! \memberof psb_i2_base_multivect_type + !! \brief Build method from an array + !! \param x(:) input array to be copied + !! + subroutine i2_base_mlv_bld_x(x,this) + use psb_realloc_mod + integer(psb_i2pk_), intent(in) :: this(:,:) + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_) :: info + + call psb_realloc(size(this,1),size(this,2),x%v,info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,'base_mlv_vect_bld') + return + end if + x%v(:,:) = this(:,:) + + end subroutine i2_base_mlv_bld_x + + ! + ! Create with size, but no initialization + ! + + !> Function bld_n: + !! \memberof psb_i2_base_multivect_type + !! \brief Build method with size (uninitialized data) + !! \param n size to be allocated. + !! + subroutine i2_base_mlv_bld_n(x,m,n,scratch) + use psb_realloc_mod + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + call psb_realloc(m,n,x%v,info) + call x%asb(m,n,info,scratch=scratch) + + end subroutine i2_base_mlv_bld_n + + !> Function base_mlv_all: + !! \memberof psb_i2_base_multivect_type + !! \brief Build method with size (uninitialized data) and + !! allocation return code. + !! \param n size to be allocated. + !! \param info return code + !! + subroutine i2_base_mlv_all(m,n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + call psb_realloc(m,n,x%v,info) + if (try_newins) then + call psb_realloc(n,x%iv,info) + call x%set_ncfs(0) + end if + + end subroutine i2_base_mlv_all + + !> Function base_mlv_mold: + !! \memberof psb_i2_base_multivect_type + !! \brief Mold method: return a variable with the same dynamic type + !! \param y returned variable + !! \param info return code + !! + subroutine i2_base_mlv_mold(x, y, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + class(psb_i2_base_multivect_type), intent(out), allocatable :: y + integer(psb_ipk_), intent(out) :: info + + allocate(psb_i2_base_multivect_type :: y, stat=info) + + end subroutine i2_base_mlv_mold + + subroutine i2_base_mlv_reinit(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(out) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%sync() + x%v(:,:) = i2zero + call x%set_host() + call x%set_upd() + end if + + end subroutine i2_base_mlv_reinit + + ! + ! Insert a bunch of values at specified positions. + ! + !> Function base_mlv_ins: + !! \memberof psb_i2_base_multivect_type + !! \brief Insert coefficients. + !! + !! + !! Given a list of N pairs + !! (IRL(i),VAL(i)) + !! record a new coefficient in X such that + !! X(IRL(1:N)) = VAL(1:N). + !! + !! - the update operation will perform either + !! X(IRL(1:n)) = VAL(1:N) + !! or + !! X(IRL(1:n)) = X(IRL(1:n))+VAL(1:N) + !! according to the value of DUPLICATE. + !! + !! + !! \param n number of pairs in input + !! \param irl(:) the input row indices + !! \param val(:) the input coefficients + !! \param dupl how to treat duplicate entries + !! \param info return code + !! + ! + subroutine i2_base_mlv_ins(n,irl,val,dupl,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, dupl,maxr + integer(psb_ipk_), intent(in) :: irl(:) + integer(psb_i2pk_), intent(in) :: val(:,:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, isz, nc, dupl_, ncfs_, k + + info = 0 + if (psb_errstatus_fatal()) return + + if (try_newins) then + if (x%is_bld()) then + nc = size(x%v,2) + ncfs_ = x%get_ncfs() + isz = ncfs_ + n + call psb_realloc(isz,nc,x%v,info) + call psb_ensure_size(isz,x%iv,info) + k = ncfs_ + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + k = k + 1 + ! this row belongs to me + ! copy i-th row of block val in x + x%v(k,:) = val(i,:) + x%iv(k) = irl(i) + end if + enddo + call x%set_ncfs(k) + + else if (x%is_upd()) then + + dupl_ = x%get_dupl() + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl_) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= maxr)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + else + info = psb_err_invalid_vect_state_ + end if + else + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + else if (n > min(size(irl),size(val))) then + info = psb_err_invalid_input_ + + else + isz = size(x%v,1) + nc = size(x%v,2) + select case(dupl) + case(psb_dupl_ovwrt_) + do i = 1, n + !loop over all val's rows + ! row actual block row + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = val(i,:) + end if + enddo + + case(psb_dupl_add_) + + do i = 1, n + !loop over all val's rows + if ((1 <= irl(i)).and.(irl(i) <= isz)) then + ! this row belongs to me + ! copy i-th row of block val in x + x%v(irl(i),:) = x%v(irl(i),:) + val(i,:) + end if + enddo + + case default + info = 321 + ! !$ call psb_errpush(info,name) + ! !$ goto 9999 + end select + end if + end if + call x%set_host() + if (info /= 0) then + call psb_errpush(info,'base_mlv_vect_ins') + return + end if + + end subroutine i2_base_mlv_ins + + ! + !> Function base_mlv_zero + !! \memberof psb_i2_base_multivect_type + !! \brief Zero out contents + !! + ! + subroutine i2_base_mlv_zero(x) + use psi_serial_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + if (allocated(x%v)) x%v=i2zero + call x%set_host() + + end subroutine i2_base_mlv_zero + + + ! + ! Assembly. + ! For derived classes: after this the vector + ! storage is supposed to be in sync. + ! + !> Function base_mlv_asb: + !! \memberof psb_i2_base_multivect_type + !! \brief Assemble vector: reallocate as necessary. + !! + !! \param n final size + !! \param info return code + !! + ! + + subroutine i2_base_mlv_asb(m,n, x, info, scratch) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: i, ncfs, xvsz + integer(psb_i2pk_), allocatable :: vv(:,:) + + info = 0 + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + if (try_newins) then + if (x%is_bld()) then + ncfs = x%get_ncfs() + xvsz = psb_size(x%v) + call psb_realloc(m,n,vv,info) + vv(:,:) = i2zero + select case(x%get_dupl()) + case(psb_dupl_add_) + do i=1,ncfs + vv(x%iv(i),:) = vv(x%iv(i),:) + x%v(i,:) + end do + case(psb_dupl_ovwrt_) + do i=1,ncfs + vv(x%iv(i),:) = x%v(i,:) + end do + case(psb_dupl_err_) + do i=1,ncfs + if (any(vv(x%iv(i),:).ne.i2zero)) then + info = psb_err_duplicate_coo + call psb_errpush(info,'mvect-asb') + return + else + vv(x%iv(i),:) = x%v(i,:) + end if + end do + case default + write(psb_err_unit,*) 'Error in mvect_asb: unsafe dupl',x%get_dupl() + info =-7 + end select + call psb_move_alloc(vv,x%v,info) + if (allocated(x%iv)) deallocate(x%iv,stat=info) + else if (x%is_upd().or.x%is_asb().or.scratch_) then + if ((x%get_nrows() < m).or.(x%get_ncols() Function base_mlv_free: + !! \memberof psb_i2_base_multivect_type + !! \brief Free vector + !! + !! \param info return code + !! + ! + subroutine i2_base_mlv_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) deallocate(x%v, stat=info) + if (info /= 0) call & + & psb_errpush(psb_err_alloc_dealloc_,'vect_free') + + end subroutine i2_base_mlv_free + + function i2_base_mlv_get_ncfs(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%ncfs + end function i2_base_mlv_get_ncfs + + function i2_base_mlv_get_dupl(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function i2_base_mlv_get_dupl + + function i2_base_mlv_get_state(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%bldstate + end function i2_base_mlv_get_state + + function i2_base_mlv_is_null(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_null_) + end function i2_base_mlv_is_null + + function i2_base_mlv_is_bld(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_bld_) + end function i2_base_mlv_is_bld + + function i2_base_mlv_is_upd(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_upd_) + end function i2_base_mlv_is_upd + + function i2_base_mlv_is_asb(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + res = (x%bldstate == psb_vect_asb_) + end function i2_base_mlv_is_asb + + subroutine i2_base_mlv_set_ncfs(n,x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%ncfs = n + end subroutine i2_base_mlv_set_ncfs + + subroutine i2_base_mlv_set_dupl(n,x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%dupl = n + end subroutine i2_base_mlv_set_dupl + + subroutine i2_base_mlv_set_state(n,x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + x%bldstate = n + end subroutine i2_base_mlv_set_state + + subroutine i2_base_mlv_set_null(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + x%bldstate = psb_vect_null_ + end subroutine i2_base_mlv_set_null + + subroutine i2_base_mlv_set_bld(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + x%bldstate = psb_vect_bld_ + end subroutine i2_base_mlv_set_bld + + subroutine i2_base_mlv_set_upd(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + x%bldstate = psb_vect_upd_ + end subroutine i2_base_mlv_set_upd + + subroutine i2_base_mlv_set_asb(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + x%bldstate = psb_vect_asb_ + end subroutine i2_base_mlv_set_asb + + + ! + ! The base version of SYNC & friends does nothing, it's just + ! a placeholder. + ! + ! + !> Function base_mlv_sync: + !! \memberof psb_i2_base_multivect_type + !! \brief Sync: base version is a no-op. + !! + ! + subroutine i2_base_mlv_sync(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + end subroutine i2_base_mlv_sync + + ! + !> Function base_mlv_set_host: + !! \memberof psb_i2_base_multivect_type + !! \brief Set_host: base version is a no-op. + !! + ! + subroutine i2_base_mlv_set_host(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + end subroutine i2_base_mlv_set_host + + ! + !> Function base_mlv_set_dev: + !! \memberof psb_i2_base_multivect_type + !! \brief Set_dev: base version is a no-op. + !! + ! + subroutine i2_base_mlv_set_dev(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + end subroutine i2_base_mlv_set_dev + + ! + !> Function base_mlv_set_sync: + !! \memberof psb_i2_base_multivect_type + !! \brief Set_sync: base version is a no-op. + !! + ! + subroutine i2_base_mlv_set_sync(x) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + + end subroutine i2_base_mlv_set_sync + + ! + !> Function base_mlv_is_dev: + !! \memberof psb_i2_base_multivect_type + !! \brief Is vector on external device . + !! + ! + function i2_base_mlv_is_dev(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + + res = .false. + end function i2_base_mlv_is_dev + + ! + !> Function base_mlv_is_host + !! \memberof psb_i2_base_multivect_type + !! \brief Is vector on standard memory . + !! + ! + function i2_base_mlv_is_host(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + + res = .true. + end function i2_base_mlv_is_host + + ! + !> Function base_mlv_is_sync + !! \memberof psb_i2_base_multivect_type + !! \brief Is vector on sync . + !! + ! + function i2_base_mlv_is_sync(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + logical :: res + + res = .true. + end function i2_base_mlv_is_sync + + !> Function base_cpy: + !! \memberof psb_d_base_vect_type + !! \brief base_cpy: copy base contents + !! \param y returned variable + !! + subroutine i2_base_mlv_cpy(x, y) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + class(psb_i2_base_multivect_type), intent(out) :: y + + if (allocated(x%v)) call y%bld(x%v) + call y%set_state(x%get_state()) + call y%set_dupl(x%get_dupl()) + call y%set_ncfs(x%get_ncfs()) + if (allocated(x%iv)) y%iv = x%iv + end subroutine i2_base_mlv_cpy + + + ! + ! Size info. + ! + ! + !> Function base_mlv_get_nrows + !! \memberof psb_i2_base_multivect_type + !! \brief Number of entries + !! + ! + function i2_base_mlv_get_nrows(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + + res = 0 + if (allocated(x%v)) res = size(x%v,1) + + end function i2_base_mlv_get_nrows + + function i2_base_mlv_get_ncols(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + + res = 0 + if (allocated(x%v)) res = size(x%v,2) + + end function i2_base_mlv_get_ncols + + ! + !> Function base_mlv_get_sizeof + !! \memberof psb_i2_base_multivect_type + !! \brief Size in bytesa + !! + ! + function i2_base_mlv_sizeof(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: x + integer(psb_epk_) :: res + + ! Force 8-byte integers. + res = (1_psb_epk_ * psb_sizeof_i2p) * x%get_nrows() * x%get_ncols() + + end function i2_base_mlv_sizeof + + ! + !> Function base_mlv_get_fmt + !! \memberof psb_i2_base_multivect_type + !! \brief Format + !! + ! + function i2_base_mlv_get_fmt() result(res) + implicit none + character(len=5) :: res + res = 'BASE' + end function i2_base_mlv_get_fmt + + + ! + ! + ! + !> Function base_mlv_get_vect + !! \memberof psb_i2_base_multivect_type + !! \brief Extract a copy of the contents + !! + ! + function i2_base_mlv_get_vect(x) result(res) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_i2pk_), allocatable :: res(:,:) + integer(psb_ipk_) :: info,m,n + m = x%get_nrows() + n = x%get_ncols() + if (.not.allocated(x%v)) return + call x%sync() + allocate(res(m,n),stat=info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_,'base_mlv_get_vect') + return + end if + res(1:m,1:n) = x%v(1:m,1:n) + end function i2_base_mlv_get_vect + + ! + ! Reset all values + ! + ! + !> Function base_mlv_set_scal + !! \memberof psb_i2_base_multivect_type + !! \brief Set all entries + !! \param val The value to set + !! + subroutine i2_base_mlv_set_scal(x,val) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val + + integer(psb_ipk_) :: info + x%v = val + + end subroutine i2_base_mlv_set_scal + + ! + !> Function base_mlv_set_vect + !! \memberof psb_i2_base_multivect_type + !! \brief Set all entries + !! \param val(:) The vector to be copied in + !! + subroutine i2_base_mlv_set_vect(x,val) + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val(:,:) + integer(psb_ipk_) :: nr, nc + integer(psb_ipk_) :: info + + if (allocated(x%v)) then + nr = min(size(x%v,1),size(val,1)) + nc = min(size(x%v,2),size(val,2)) + + x%v(1:nr,1:nc) = val(1:nr,1:nc) + else + x%v = val + end if + + end subroutine i2_base_mlv_set_vect + + + function i2_base_mlv_use_buffer() result(res) + implicit none + logical :: res + + res = .true. + end function i2_base_mlv_use_buffer + + subroutine i2_base_mlv_new_buffer(n,x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: nc + nc = x%get_ncols() + call psb_realloc(n*nc,x%combuf,info) + end subroutine i2_base_mlv_new_buffer + + + subroutine i2_base_mlv_maybe_free_buffer(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + + info = 0 + if (psb_get_maybe_free_buffer())& + & call x%free_buffer(info) + + end subroutine i2_base_mlv_maybe_free_buffer + + subroutine i2_base_mlv_free_buffer(x,info) + use psb_realloc_mod + implicit none + class(psb_i2_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%combuf)) & + & deallocate(x%combuf,stat=info) + end subroutine i2_base_mlv_free_buffer + + ! + ! Gather: Y = beta * Y + alpha * X(IDX(:)) + ! + ! + !> Function base_mlv_gthab + !! \memberof psb_i2_base_multivect_type + !! \brief gather into an array + !! Y = beta * Y + alpha * X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + !! \param alpha + !! \param beta + subroutine i2_base_mlv_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: alpha, beta, y(:) + class(psb_i2_base_multivect_type) :: x + integer(psb_mpk_) :: nc + + if (x%is_dev()) call x%sync() + if (.not.allocated(x%v)) then + return + end if + nc = psb_size(x%v,2_psb_ipk_) + call psi_gth(n,nc,idx,alpha,x%v,beta,y) + + end subroutine i2_base_mlv_gthab + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_mlv_gthzv + !! \memberof psb_i2_base_multivect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_mlv_gthzv_x(i,n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: y(:) + class(psb_i2_base_multivect_type) :: x + + if (x%is_dev()) call x%sync() + call x%gth(n,idx%v(i:),y) + + end subroutine i2_base_mlv_gthzv_x + + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_mlv_gthzv + !! \memberof psb_i2_base_multivect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_mlv_gthzv(n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:) + class(psb_i2_base_multivect_type) :: x + integer(psb_mpk_) :: nc + + if (x%is_dev()) call x%sync() + if (.not.allocated(x%v)) then + return + end if + nc = psb_size(x%v,2_psb_ipk_) + + call psi_gth(n,nc,idx,x%v,y) + + end subroutine i2_base_mlv_gthzv + ! + ! shortcut alpha=1 beta=0 + ! + !> Function base_mlv_gthzv + !! \memberof psb_i2_base_multivect_type + !! \brief gather into an array special alpha=1 beta=0 + !! Y = X(IDX(:)) + !! \param n how many entries to consider + !! \param idx(:) indices + subroutine i2_base_mlv_gthzm(n,idx,x,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:,:) + class(psb_i2_base_multivect_type) :: x + integer(psb_mpk_) :: nc + + if (x%is_dev()) call x%sync() + if (.not.allocated(x%v)) then + return + end if + nc = psb_size(x%v,2_psb_ipk_) + + call psi_gth(n,nc,idx,x%v,y) + + end subroutine i2_base_mlv_gthzm + + ! + ! New comm internals impl. + ! + subroutine i2_base_mlv_gthzbuf(i,ixb,n,idx,x) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i, ixb + class(psb_i_base_vect_type) :: idx + class(psb_i2_base_multivect_type) :: x + integer(psb_ipk_) :: nc + + if (.not.allocated(x%combuf)) then + call psb_errpush(psb_err_alloc_dealloc_,'gthzbuf') + return + end if + if (idx%is_dev()) call idx%sync() + if (x%is_dev()) call x%sync() + nc = x%get_ncols() + call x%gth(n,idx%v(i:),x%combuf(ixb:)) + + end subroutine i2_base_mlv_gthzbuf + + ! + ! Scatter: + ! Y(IDX(:),:) = beta*Y(IDX(:),:) + X(:) + ! + ! + !> Function base_mlv_sctb + !! \memberof psb_i2_base_multivect_type + !! \brief scatter into a class(base_mlv_vect) + !! Y(IDX(:)) = beta * Y(IDX(:)) + X(:) + !! \param n how many entries to consider + !! \param idx(:) indices + !! \param beta + !! \param x(:) + subroutine i2_base_mlv_sctb(n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_base_multivect_type) :: y + integer(psb_mpk_) :: nc + + if (y%is_dev()) call y%sync() + nc = psb_size(y%v,2_psb_ipk_) + call psi_sct(n,nc,idx,x,beta,y%v) + call y%set_host() + + end subroutine i2_base_mlv_sctb + + subroutine i2_base_mlv_sctbr2(n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:,:) + class(psb_i2_base_multivect_type) :: y + integer(psb_mpk_) :: nc + + if (y%is_dev()) call y%sync() + nc = y%get_ncols() + call psi_sct(n,nc,idx,x,beta,y%v) + call y%set_host() + + end subroutine i2_base_mlv_sctbr2 + + subroutine i2_base_mlv_sctb_x(i,n,idx,x,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer( psb_i2pk_) :: beta, x(:) + class(psb_i2_base_multivect_type) :: y + + call y%sct(n,idx%v(i:),x,beta) + + end subroutine i2_base_mlv_sctb_x + + subroutine i2_base_mlv_sctb_buf(i,iyb,n,idx,beta,y) + use psi_serial_mod + implicit none + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i, iyb + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: beta + class(psb_i2_base_multivect_type) :: y + integer(psb_ipk_) :: nc + + if (.not.allocated(y%combuf)) then + call psb_errpush(psb_err_alloc_dealloc_,'sctb_buf') + return + end if + if (y%is_dev()) call y%sync() + if (idx%is_dev()) call idx%sync() + nc = y%get_ncols() + call y%sct(n,idx%v(i:),y%combuf(iyb:),beta) + call y%set_host() + + end subroutine i2_base_mlv_sctb_buf + + ! + !> Function base_device_wait: + !! \memberof psb_i2_base_vect_type + !! \brief device_wait: base version is a no-op. + !! + ! + subroutine i2_base_mlv_device_wait() + implicit none + + end subroutine i2_base_mlv_device_wait + +end module psb_i2_base_multivect_mod diff --git a/base/modules/serial/psb_i2_vect_mod.F90 b/base/modules/serial/psb_i2_vect_mod.F90 new file mode 100644 index 000000000..136d9329f --- /dev/null +++ b/base/modules/serial/psb_i2_vect_mod.F90 @@ -0,0 +1,1273 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! package: psb_i2_vect_mod +! +! This module contains the definition of the psb_i2_vect type which +! is the outer container for dense vectors. +! Therefore all methods simply invoke the corresponding methods of the +! inner component. +! +module psb_i2_vect_mod + + use psb_realloc_mod + use psb_i2_base_vect_mod + use psb_i_vect_mod + + type psb_i2_vect_type + class(psb_i2_base_vect_type), allocatable :: v + integer(psb_ipk_) :: nrmv = 0 + integer(psb_ipk_) :: remote_build=psb_matbld_noremote_ + integer(psb_ipk_) :: dupl = psb_dupl_add_ + integer(psb_i2pk_), allocatable :: rmtv(:) + integer(psb_lpk_), allocatable :: rmidx(:) + contains + procedure, pass(x) :: get_nrows => i2_vect_get_nrows + procedure, pass(x) :: sizeof => i2_vect_sizeof + procedure, pass(x) :: get_fmt => i2_vect_get_fmt + procedure, pass(x) :: is_remote_build => i2_vect_is_remote_build + procedure, pass(x) :: set_remote_build => i2_vect_set_remote_build + procedure, pass(x) :: get_nrmv => i2_vect_get_nrmv + procedure, pass(x) :: set_nrmv => i2_vect_set_nrmv + procedure, pass(x) :: all => i2_vect_all + procedure, pass(x) :: reall => i2_vect_reall + procedure, pass(x) :: zero => i2_vect_zero + procedure, pass(x) :: asb => i2_vect_asb + procedure, pass(x) :: set_dupl => i2_vect_set_dupl + procedure, pass(x) :: get_dupl => i2_vect_get_dupl + procedure, pass(x) :: set_ncfs => i2_vect_set_ncfs + procedure, pass(x) :: get_ncfs => i2_vect_get_ncfs + procedure, pass(x) :: set_state => i2_vect_set_state + procedure, pass(x) :: set_null => i2_vect_set_null + procedure, pass(x) :: set_bld => i2_vect_set_bld + procedure, pass(x) :: set_upd => i2_vect_set_upd + procedure, pass(x) :: set_asb => i2_vect_set_asb + procedure, pass(x) :: get_state => i2_vect_get_state + procedure, pass(x) :: is_null => i2_vect_is_null + procedure, pass(x) :: is_bld => i2_vect_is_bld + procedure, pass(x) :: is_upd => i2_vect_is_upd + procedure, pass(x) :: is_asb => i2_vect_is_asb + procedure, pass(x) :: reinit => i2_vect_reinit + + procedure, pass(x) :: gthab => i2_vect_gthab + procedure, pass(x) :: gthzv => i2_vect_gthzv + generic, public :: gth => gthab, gthzv + procedure, pass(y) :: sctb => i2_vect_sctb + generic, public :: sct => sctb + procedure, pass(x) :: free => i2_vect_free + procedure, pass(x) :: ins_a => i2_vect_ins_a + procedure, pass(x) :: ins_v => i2_vect_ins_v + generic, public :: ins => ins_v, ins_a + procedure, pass(x) :: bld_x => i2_vect_bld_x + procedure, pass(x) :: bld_mn => i2_vect_bld_mn + procedure, pass(x) :: bld_en => i2_vect_bld_en + generic, public :: bld => bld_x, bld_mn, bld_en + procedure, pass(x) :: get_vect => i2_vect_get_vect + procedure, pass(x) :: cnv => i2_vect_cnv + procedure, pass(x) :: set_scal => i2_vect_set_scal + procedure, pass(x) :: set_vect => i2_vect_set_vect + generic, public :: set => set_vect, set_scal + procedure, pass(x) :: clone => i2_vect_clone + + procedure, pass(x) :: sync => i2_vect_sync + procedure, pass(x) :: is_host => i2_vect_is_host + procedure, pass(x) :: is_dev => i2_vect_is_dev + procedure, pass(x) :: is_sync => i2_vect_is_sync + procedure, pass(x) :: set_host => i2_vect_set_host + procedure, pass(x) :: set_dev => i2_vect_set_dev + procedure, pass(x) :: set_sync => i2_vect_set_sync + procedure, pass(x) :: check_addr => i2_vect_check_addr + + + + end type psb_i2_vect_type + + public :: psb_i2_vect + private :: constructor, size_const + interface psb_i2_vect + module procedure constructor, size_const + end interface psb_i2_vect + + private :: i2_vect_get_nrows, i2_vect_sizeof, i2_vect_get_fmt, & + & i2_vect_all, i2_vect_reall, i2_vect_zero, i2_vect_asb, & + & i2_vect_gthab, i2_vect_gthzv, i2_vect_sctb, & + & i2_vect_free, i2_vect_ins_a, i2_vect_ins_v, i2_vect_bld_x, & + & i2_vect_bld_mn, i2_vect_bld_en, i2_vect_get_vect, & + & i2_vect_cnv, i2_vect_set_scal, & + & i2_vect_set_vect, i2_vect_clone, i2_vect_sync, i2_vect_is_host, & + & i2_vect_is_dev, i2_vect_is_sync, i2_vect_set_host, & + & i2_vect_set_dev, i2_vect_set_sync, & + & i2_vect_set_remote_build, i2_is_remote_build, & + & i2_vect_set_dupl, i2_get_dupl, i2_vect_set_nrmv, i2_get_nrmv + + + class(psb_i2_base_vect_type), allocatable, target,& + & save, private :: psb_i2_base_vect_default + + interface psb_set_vect_default + module procedure psb_i2_set_vect_default + end interface psb_set_vect_default + + interface psb_get_vect_default + module procedure psb_i2_get_vect_default + end interface psb_get_vect_default + + +contains + + function i2_vect_get_dupl(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_dupl() + else + res = psb_dupl_null_ + end if + end function i2_vect_get_dupl + + subroutine i2_vect_set_dupl(x,val) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_dupl(val) + else + call x%v%set_dupl(psb_dupl_def_) + end if + end if + end subroutine i2_vect_set_dupl + + function i2_vect_get_ncfs(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_ncfs() + else + res = 0 + end if + end function i2_vect_get_ncfs + + subroutine i2_vect_set_ncfs(x,val) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (allocated(x%v)) then + if (present(val)) then + call x%v%set_ncfs(val) + else + call x%v%set_ncfs(0) + end if + end if + end subroutine i2_vect_set_ncfs + + function i2_vect_get_state(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + if (allocated(x%v)) then + res = x%v%get_state() + else + res = psb_vect_null_ + end if + end function i2_vect_get_state + + function i2_vect_is_null(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_null_) + end function i2_vect_is_null + + function i2_vect_is_bld(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_bld_) + end function i2_vect_is_bld + + function i2_vect_is_upd(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_upd_) + end function i2_vect_is_upd + + function i2_vect_is_asb(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%get_state() == psb_vect_asb_) + end function i2_vect_is_asb + + subroutine i2_vect_set_state(n,x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n + if (allocated(x%v)) then + call x%v%set_state(n) + end if + end subroutine i2_vect_set_state + + + subroutine i2_vect_set_null(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_null_) + end subroutine i2_vect_set_null + + subroutine i2_vect_set_bld(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_bld_) + end subroutine i2_vect_set_bld + + subroutine i2_vect_set_upd(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_upd_) + end subroutine i2_vect_set_upd + + subroutine i2_vect_set_asb(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + call x%set_state(psb_vect_asb_) + end subroutine i2_vect_set_asb + + function i2_vect_get_nrmv(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%nrmv + end function i2_vect_get_nrmv + + subroutine i2_vect_set_nrmv(x,val) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: val + + x%nrmv = val + end subroutine i2_vect_set_nrmv + + function i2_vect_is_remote_build(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + logical :: res + res = (x%remote_build == psb_matbld_remote_) + end function i2_vect_is_remote_build + + subroutine i2_vect_set_remote_build(x,val) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (present(val)) then + x%remote_build = val + else + x%remote_build = psb_matbld_remote_ + end if + end subroutine i2_vect_set_remote_build + + subroutine psb_i2_set_vect_default(v) + implicit none + class(psb_i2_base_vect_type), intent(in) :: v + + if (allocated(psb_i2_base_vect_default)) then + deallocate(psb_i2_base_vect_default) + end if + allocate(psb_i2_base_vect_default, mold=v) + + end subroutine psb_i2_set_vect_default + + function psb_i2_get_vect_default(v) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: v + class(psb_i2_base_vect_type), pointer :: res + + res => psb_i2_get_base_vect_default() + + end function psb_i2_get_vect_default + + subroutine psb_i2_clear_vect_default() + implicit none + + if (allocated(psb_i2_base_vect_default)) then + deallocate(psb_i2_base_vect_default) + end if + + end subroutine psb_i2_clear_vect_default + + function psb_i2_get_base_vect_default() result(res) + implicit none + class(psb_i2_base_vect_type), pointer :: res + + if (.not.allocated(psb_i2_base_vect_default)) then + allocate(psb_i2_base_vect_type :: psb_i2_base_vect_default) + end if + + res => psb_i2_base_vect_default + + end function psb_i2_get_base_vect_default + + subroutine i2_vect_clone(x,y,info) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_vect_type), intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + call y%free(info) + if ((info==0).and.allocated(x%v)) then + ! + ! Using sourced allocation here creates + ! problems with handling of memory allocated + ! elsewhere (e.g. accelerators), hence delegation + ! to %bld method + ! + call y%bld(x%get_vect(),mold=x%v) + end if + end subroutine i2_vect_clone + + subroutine i2_vect_bld_x(x,invect,mold,scratch) + integer(psb_i2pk_), intent(in) :: invect(:) + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + + info = psb_success_ + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_vect_default()) + endif + + if (info == psb_success_) call x%v%bld(invect,scratch=scratch_) + + end subroutine i2_vect_bld_x + + + subroutine i2_vect_bld_mn(x,n,mold,scratch) + integer(psb_mpk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + class(psb_i2_base_vect_type), pointer :: mld + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + + info = psb_success_ + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_vect_default()) + endif + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) + + end subroutine i2_vect_bld_mn + + subroutine i2_vect_bld_en(x,n,mold,scratch) + integer(psb_epk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_base_vect_type), intent(in), optional :: mold + logical, intent(in), optional :: scratch + + logical :: scratch_ + integer(psb_ipk_) :: info + + info = psb_success_ + if (present(scratch)) then + scratch_ = scratch + else + scratch_ = .false. + end if + + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_vect_default()) + endif + if (info == psb_success_) call x%v%bld(n,scratch=scratch_) + + end subroutine i2_vect_bld_en + + function i2_vect_get_vect(x,n) result(res) + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_i2pk_), allocatable :: res(:) + integer(psb_ipk_) :: info + integer(psb_ipk_), optional :: n + + if (allocated(x%v)) then + res = x%v%get_vect(n) + end if + end function i2_vect_get_vect + + subroutine i2_vect_set_scal(x,val,first,last) + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%set(val,first,last) + + end subroutine i2_vect_set_scal + + subroutine i2_vect_set_vect(x,val,first,last) + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val(:) + integer(psb_ipk_), optional :: first, last + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%set(val,first,last) + + end subroutine i2_vect_set_vect + + subroutine i2_vect_check_addr(x) + class(psb_i2_vect_type), intent(inout) :: x + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%check_addr() + + end subroutine i2_vect_check_addr + + function constructor(x) result(this) + integer(psb_i2pk_) :: x(:) + type(psb_i2_vect_type) :: this + integer(psb_ipk_) :: info + + call this%bld(x) + call this%asb(size(x,kind=psb_ipk_),info) + + end function constructor + + + function size_const(n) result(this) + integer(psb_ipk_), intent(in) :: n + type(psb_i2_vect_type) :: this + integer(psb_ipk_) :: info + + call this%bld(n) + call this%asb(n,info) + + end function size_const + + function i2_vect_get_nrows(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%get_nrows() + end function i2_vect_get_nrows + + function i2_vect_sizeof(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + integer(psb_epk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%sizeof() + end function i2_vect_sizeof + + function i2_vect_get_fmt(x) result(res) + implicit none + class(psb_i2_vect_type), intent(in) :: x + character(len=5) :: res + res = 'NULL' + if (allocated(x%v)) res = x%v%get_fmt() + end function i2_vect_get_fmt + + subroutine i2_vect_all(n, x, info, mold) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + class(psb_i2_base_vect_type), intent(in), optional :: mold + + if (allocated(x%v)) & + & call x%free(info) + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(psb_i2_base_vect_type :: x%v,stat=info) + endif + if (info == 0) then + call x%v%all(n,info) + else + info = psb_err_alloc_dealloc_ + end if + call x%set_bld() + end subroutine i2_vect_all + + subroutine i2_vect_reinit(x, info, clear) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: clear + + if (allocated(x%v)) call x%v%reinit(info,clear) + call x%set_upd() + + end subroutine i2_vect_reinit + + subroutine i2_vect_reall(n, x, info) + + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not.allocated(x%v)) & + & call x%all(n,info) + if (info == 0) & + & call x%asb(n,info) + + end subroutine i2_vect_reall + + subroutine i2_vect_zero(x) + use psi_serial_mod + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) call x%v%zero() + + end subroutine i2_vect_zero + + subroutine i2_vect_asb(n, x, info, scratch) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: n + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: scratch + + if (allocated(x%v)) then + call x%v%asb(n,info,scratch=scratch) + call x%set_asb() + end if + end subroutine i2_vect_asb + + subroutine i2_vect_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: alpha, beta, y(:) + class(psb_i2_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,alpha,beta,y) + + end subroutine i2_vect_gthab + + subroutine i2_vect_gthzv(n,idx,x,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:) + class(psb_i2_vect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,y) + + end subroutine i2_vect_gthzv + + subroutine i2_vect_sctb(n,idx,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_vect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(n,idx,x,beta) + + end subroutine i2_vect_sctb + + subroutine i2_vect_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%v%free(info) + if (info == 0) deallocate(x%v,stat=info) + end if + + end subroutine i2_vect_free + + subroutine i2_vect_ins_a(n,irl,val,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, maxr + integer(psb_ipk_), intent(in) :: irl(:) + integer(psb_i2pk_), intent(in) :: val(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, dupl + + info = 0 + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + return + end if + dupl = x%get_dupl() + call x%v%ins(n,irl,val,dupl,maxr,info) + + end subroutine i2_vect_ins_a + + subroutine i2_vect_ins_v(n,irl,val,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n, maxr + class(psb_i_vect_type), intent(inout) :: irl + class(psb_i2_vect_type), intent(inout) :: val + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, dupl + + info = 0 + if (.not.(allocated(x%v).and.allocated(irl%v).and.allocated(val%v))) then + info = psb_err_invalid_vect_state_ + return + end if + dupl = x%get_dupl() + call x%v%ins(n,irl%v,val%v,dupl,maxr,info) + + end subroutine i2_vect_ins_v + + + subroutine i2_vect_cnv(x,mold) + class(psb_i2_vect_type), intent(inout) :: x + class(psb_i2_base_vect_type), intent(in), optional :: mold + class(psb_i2_base_vect_type), allocatable :: tmp + + integer(psb_ipk_) :: info + + info = psb_success_ + if (present(mold)) then + allocate(tmp,stat=info,mold=mold) + else + allocate(tmp,stat=info,mold=psb_i2_get_base_vect_default()) + end if + if (allocated(x%v)) then + if (allocated(x%v%v)) then + call x%v%sync() + if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%base_cpy(tmp) + call x%v%free(info) + endif + end if + call move_alloc(tmp,x%v) + + end subroutine i2_vect_cnv + + + subroutine i2_vect_sync(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%sync() + + end subroutine i2_vect_sync + + subroutine i2_vect_set_sync(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%set_sync() + + end subroutine i2_vect_set_sync + + subroutine i2_vect_set_host(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%set_host() + + end subroutine i2_vect_set_host + + subroutine i2_vect_set_dev(x) + implicit none + class(psb_i2_vect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%set_dev() + + end subroutine i2_vect_set_dev + + function i2_vect_is_sync(x) result(res) + implicit none + logical :: res + class(psb_i2_vect_type), intent(inout) :: x + + res = .true. + if (allocated(x%v)) & + & res = x%v%is_sync() + + end function i2_vect_is_sync + + function i2_vect_is_host(x) result(res) + implicit none + logical :: res + class(psb_i2_vect_type), intent(inout) :: x + + res = .true. + if (allocated(x%v)) & + & res = x%v%is_host() + + end function i2_vect_is_host + + function i2_vect_is_dev(x) result(res) + implicit none + logical :: res + class(psb_i2_vect_type), intent(inout) :: x + + res = .false. + if (allocated(x%v)) & + & res = x%v%is_dev() + + end function i2_vect_is_dev + + + + +end module psb_i2_vect_mod + + +module psb_i2_multivect_mod + + use psb_i2_base_multivect_mod + use psb_const_mod + use psb_i_vect_mod + + + !private + + type psb_i2_multivect_type + class(psb_i2_base_multivect_type), allocatable :: v + integer(psb_ipk_) :: nrmv = 0 + integer(psb_ipk_) :: remote_build=psb_matbld_noremote_ + integer(psb_ipk_) :: dupl = psb_dupl_add_ + integer(psb_i2pk_), allocatable :: rmtv(:,:) + contains + procedure, pass(x) :: get_nrows => i2_mvect_get_nrows + procedure, pass(x) :: get_ncols => i2_mvect_get_ncols + procedure, pass(x) :: sizeof => i2_mvect_sizeof + procedure, pass(x) :: get_fmt => i2_mvect_get_fmt + procedure, pass(x) :: is_remote_build => i2_mvect_is_remote_build + procedure, pass(x) :: set_remote_build => i2_mvect_set_remote_build + procedure, pass(x) :: get_dupl => i2_mvect_get_dupl + procedure, pass(x) :: set_dupl => i2_mvect_set_dupl + + procedure, pass(x) :: all => i2_mvect_all + procedure, pass(x) :: reall => i2_mvect_reall + procedure, pass(x) :: zero => i2_mvect_zero + procedure, pass(x) :: asb => i2_mvect_asb + procedure, pass(x) :: sync => i2_mvect_sync + procedure, pass(x) :: free => i2_mvect_free + procedure, pass(x) :: ins => i2_mvect_ins + procedure, pass(x) :: bld_x => i2_mvect_bld_x + procedure, pass(x) :: bld_n => i2_mvect_bld_n + generic, public :: bld => bld_x, bld_n + procedure, pass(x) :: get_vect => i2_mvect_get_vect + procedure, pass(x) :: cnv => i2_mvect_cnv + procedure, pass(x) :: set_scal => i2_mvect_set_scal + procedure, pass(x) :: set_vect => i2_mvect_set_vect + generic, public :: set => set_vect, set_scal + procedure, pass(x) :: clone => i2_mvect_clone + procedure, pass(x) :: gthab => i2_mvect_gthab + procedure, pass(x) :: gthzv => i2_mvect_gthzv + procedure, pass(x) :: gthzv_x => i2_mvect_gthzv_x + generic, public :: gth => gthab, gthzv + procedure, pass(y) :: sctb => i2_mvect_sctb + procedure, pass(y) :: sctb_x => i2_mvect_sctb_x + generic, public :: sct => sctb, sctb_x + end type psb_i2_multivect_type + + public :: psb_i2_multivect, psb_i2_multivect_type,& + & psb_set_multivect_default, psb_get_multivect_default, & + & psb_i2_base_multivect_type + + private + interface psb_i2_multivect + module procedure constructor, size_const + end interface psb_i2_multivect + + class(psb_i2_base_multivect_type), allocatable, target,& + & save, private :: psb_i2_base_multivect_default + + interface psb_set_multivect_default + module procedure psb_i2_set_multivect_default + end interface psb_set_multivect_default + + interface psb_get_multivect_default + module procedure psb_i2_get_multivect_default + end interface psb_get_multivect_default + + +contains + + + function i2_mvect_get_dupl(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = x%dupl + end function i2_mvect_get_dupl + + subroutine i2_mvect_set_dupl(x,val) + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (present(val)) then + x%dupl = val + else + x%dupl = psb_dupl_def_ + end if + end subroutine i2_mvect_set_dupl + + + function i2_mvect_is_remote_build(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + logical :: res + res = (x%remote_build == psb_matbld_remote_) + end function i2_mvect_is_remote_build + + subroutine i2_mvect_set_remote_build(x,val) + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in), optional :: val + + if (present(val)) then + x%remote_build = val + else + x%remote_build = psb_matbld_remote_ + end if + end subroutine i2_mvect_set_remote_build + + + subroutine psb_i2_set_multivect_default(v) + implicit none + class(psb_i2_base_multivect_type), intent(in) :: v + + if (allocated(psb_i2_base_multivect_default)) then + deallocate(psb_i2_base_multivect_default) + end if + allocate(psb_i2_base_multivect_default, mold=v) + + end subroutine psb_i2_set_multivect_default + + function psb_i2_get_multivect_default(v) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: v + class(psb_i2_base_multivect_type), pointer :: res + + res => psb_i2_get_base_multivect_default() + + end function psb_i2_get_multivect_default + + + function psb_i2_get_base_multivect_default() result(res) + implicit none + class(psb_i2_base_multivect_type), pointer :: res + + if (.not.allocated(psb_i2_base_multivect_default)) then + allocate(psb_i2_base_multivect_type :: psb_i2_base_multivect_default) + end if + + res => psb_i2_base_multivect_default + + end function psb_i2_get_base_multivect_default + + + subroutine i2_mvect_clone(x,y,info) + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + class(psb_i2_multivect_type), intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + call y%free(info) + if ((info==0).and.allocated(x%v)) then + call y%bld_x(x%get_vect(),mold=x%v) + end if + end subroutine i2_mvect_clone + + subroutine i2_mvect_bld_x(x,invect,mold) + integer(psb_i2pk_), intent(in) :: invect(:,:) + class(psb_i2_multivect_type), intent(out) :: x + class(psb_i2_base_multivect_type), intent(in), optional :: mold + integer(psb_ipk_) :: info + class(psb_i2_base_multivect_type), pointer :: mld + + info = psb_success_ + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_multivect_default()) + endif + + if (info == psb_success_) call x%v%bld(invect) + + end subroutine i2_mvect_bld_x + + + subroutine i2_mvect_bld_n(x,m,n,mold,scratch) + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_multivect_type), intent(out) :: x + class(psb_i2_base_multivect_type), intent(in), optional :: mold + integer(psb_ipk_) :: info + logical, intent(in), optional :: scratch + + info = psb_success_ + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(x%v,stat=info, mold=psb_i2_get_base_multivect_default()) + endif + if (info == psb_success_) call x%v%bld(m,n,scratch=scratch) + + end subroutine i2_mvect_bld_n + + function i2_mvect_get_vect(x) result(res) + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_i2pk_), allocatable :: res(:,:) + integer(psb_ipk_) :: info + + if (allocated(x%v)) then + res = x%v%get_vect() + end if + end function i2_mvect_get_vect + + subroutine i2_mvect_set_scal(x,val) + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%set(val) + + end subroutine i2_mvect_set_scal + + subroutine i2_mvect_set_vect(x,val) + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_i2pk_), intent(in) :: val(:,:) + + integer(psb_ipk_) :: info + if (allocated(x%v)) call x%v%set(val) + + end subroutine i2_mvect_set_vect + + + function constructor(x) result(this) + integer(psb_i2pk_) :: x(:,:) + type(psb_i2_multivect_type) :: this + integer(psb_ipk_) :: info + + call this%bld_x(x) + call this%asb(size(x,dim=1,kind=psb_ipk_),size(x,dim=2,kind=psb_ipk_),info) + + end function constructor + + + function size_const(m,n) result(this) + integer(psb_ipk_), intent(in) :: m,n + type(psb_i2_multivect_type) :: this + integer(psb_ipk_) :: info + + call this%bld_n(m,n) + call this%asb(m,n,info) + + end function size_const + + function i2_mvect_get_nrows(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%get_nrows() + end function i2_mvect_get_nrows + + function i2_mvect_get_ncols(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + integer(psb_ipk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%get_ncols() + end function i2_mvect_get_ncols + + function i2_mvect_sizeof(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + integer(psb_epk_) :: res + res = 0 + if (allocated(x%v)) res = x%v%sizeof() + end function i2_mvect_sizeof + + function i2_mvect_get_fmt(x) result(res) + implicit none + class(psb_i2_multivect_type), intent(in) :: x + character(len=5) :: res + res = 'NULL' + if (allocated(x%v)) res = x%v%get_fmt() + end function i2_mvect_get_fmt + + subroutine i2_mvect_all(m,n, x, info, mold) + + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_multivect_type), intent(out) :: x + class(psb_i2_base_multivect_type), intent(in), optional :: mold + integer(psb_ipk_), intent(out) :: info + + if (present(mold)) then + allocate(x%v,stat=info,mold=mold) + else + allocate(psb_i2_base_multivect_type :: x%v,stat=info) + endif + if (info == 0) then + call x%v%all(m,n,info) + else + info = psb_err_alloc_dealloc_ + end if + + end subroutine i2_mvect_all + + subroutine i2_mvect_reall(m,n, x, info) + + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (.not.allocated(x%v)) & + & call x%all(m,n,info) + if (info == 0) & + & call x%asb(m,n,info) + + end subroutine i2_mvect_reall + + subroutine i2_mvect_zero(x) + use psi_serial_mod + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + + if (allocated(x%v)) call x%v%zero() + + end subroutine i2_mvect_zero + + subroutine i2_mvect_asb(m,n, x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + integer(psb_ipk_), intent(in) :: m,n + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + if (allocated(x%v)) & + & call x%v%asb(m,n,info) + + end subroutine i2_mvect_asb + + subroutine i2_mvect_sync(x) + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + + if (allocated(x%v)) & + & call x%v%sync() + + end subroutine i2_mvect_sync + + subroutine i2_mvect_gthab(n,idx,alpha,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: alpha, beta, y(:) + class(psb_i2_multivect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,alpha,beta,y) + + end subroutine i2_mvect_gthab + + subroutine i2_mvect_gthzv(n,idx,x,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: y(:) + class(psb_i2_multivect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(n,idx,y) + + end subroutine i2_mvect_gthzv + + subroutine i2_mvect_gthzv_x(i,n,idx,x,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: y(:) + class(psb_i2_multivect_type) :: x + + if (allocated(x%v)) & + & call x%v%gth(i,n,idx,y) + + end subroutine i2_mvect_gthzv_x + + subroutine i2_mvect_sctb(n,idx,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: idx(:) + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_multivect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(n,idx,x,beta) + + end subroutine i2_mvect_sctb + + subroutine i2_mvect_sctb_x(i,n,idx,x,beta,y) + use psi_serial_mod + integer(psb_mpk_) :: n + integer(psb_ipk_) :: i + class(psb_i_base_vect_type) :: idx + integer(psb_i2pk_) :: beta, x(:) + class(psb_i2_multivect_type) :: y + + if (allocated(y%v)) & + & call y%v%sct(i,n,idx,x,beta) + + end subroutine i2_mvect_sctb_x + + subroutine i2_mvect_free(x, info) + use psi_serial_mod + use psb_realloc_mod + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + info = 0 + if (allocated(x%v)) then + call x%v%free(info) + if (info == 0) deallocate(x%v,stat=info) + end if + + end subroutine i2_mvect_free + + subroutine i2_mvect_ins(n,irl,val,x,maxr,info) + use psi_serial_mod + implicit none + class(psb_i2_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: n,maxr + integer(psb_ipk_), intent(in) :: irl(:) + integer(psb_i2pk_), intent(in) :: val(:,:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, dupl + + info = 0 + if (.not.allocated(x%v)) then + info = psb_err_invalid_vect_state_ + return + end if + dupl = x%get_dupl() + call x%v%ins(n,irl,val,dupl,maxr,info) + + end subroutine i2_mvect_ins + + + subroutine i2_mvect_cnv(x,mold) + class(psb_i2_multivect_type), intent(inout) :: x + class(psb_i2_base_multivect_type), intent(in), optional :: mold + class(psb_i2_base_multivect_type), allocatable :: tmp + integer(psb_ipk_) :: info + + if (present(mold)) then + allocate(tmp,stat=info,mold=mold) + else + allocate(tmp,stat=info, mold=psb_i2_get_base_multivect_default()) + endif + if (allocated(x%v)) then + call x%v%sync() + if (info == psb_success_) call tmp%bld(x%v%v) + call x%v%free(info) + end if + call move_alloc(tmp,x%v) + end subroutine i2_mvect_cnv + + +end module psb_i2_multivect_mod + diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 92fa7d9db..b95d4a6bc 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -33,7 +33,7 @@ ! package: psb_i_base_vect_mod ! ! This module contains the definition of the psb_i_base_vect type which -! is a container for dense vectors. +! is a container for dense vectors.\ ! This is encapsulated instead of being just a simple array to allow for ! more complicated situations, such as GPU programming, where the memory ! area we are interested in is not easily accessible from the host/Fortran @@ -47,7 +47,8 @@ module psb_i_base_vect_mod use psb_const_mod use psb_error_mod use psb_realloc_mod - use psb_neighbor_topology_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_unknown_ + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free !> \namespace psb_base_mod \class psb_i_base_vect_type !! The psb_i_base_vect_type @@ -61,10 +62,9 @@ module psb_i_base_vect_mod !! type psb_i_base_vect_type !> Values. - integer(psb_ipk_), allocatable :: v(:) - integer(psb_ipk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + integer(psb_ipk_), allocatable :: v(:) + integer(psb_ipk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle !> vector bldstate: !! null: pristine; @@ -74,13 +74,10 @@ module psb_i_base_vect_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_vect_mod. - integer(psb_ipk_), private :: bldstate = psb_vect_null_ - integer(psb_ipk_), private :: dupl = psb_dupl_null_ - integer(psb_ipk_), private :: ncfs = 0 - integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology - + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -144,9 +141,7 @@ module psb_i_base_vect_mod procedure, nopass :: device_wait => i_base_device_wait procedure, pass(x) :: maybe_free_buffer => i_base_maybe_free_buffer procedure, pass(x) :: free_buffer => i_base_free_buffer - procedure, pass(x) :: new_comid => i_base_new_comid - procedure, pass(x) :: free_comid => i_base_free_comid - + ! ! Basic info procedure, pass(x) :: get_nrows => i_base_get_nrows @@ -176,9 +171,9 @@ module psb_i_base_vect_mod procedure, pass(x) :: check_addr => i_base_check_addr - ! Methods used to handle topology in neighbor_alltoallv communication scheme - procedure, pass(x) :: init_topology => i_base_init_topology - procedure, pass(x) :: free_topology => i_base_free_topology + + + end type psb_i_base_vect_type @@ -361,11 +356,12 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_i_base_vect_type), intent(out) :: x + class(psb_i_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -755,13 +751,17 @@ contains use psb_realloc_mod implicit none class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: info_comm + integer(psb_ipk_), intent(out) :: info info = 0 if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) - if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) - if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%comm_handle)) then + call psb_comm_free(x%comm_handle, info_comm) + if (info_comm /= psb_success_) info = info_comm + end if if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') call x%set_null() @@ -807,24 +807,6 @@ contains & call x%free_buffer(info) end subroutine i_base_maybe_free_buffer - - ! - !> Function base_free_comid: - !! \memberof psb_i_base_vect_type - !! \brief Free aux MPI communication id buffer - !! - !! \param info return code - !! - ! - subroutine i_base_free_comid(x,info) - use psb_realloc_mod - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%comid)) & - & deallocate(x%comid,stat=info) - end subroutine i_base_free_comid function i_base_get_ncfs(x) result(res) implicit none @@ -1297,17 +1279,6 @@ contains call psb_realloc(n,x%combuf,info) end subroutine i_base_new_buffer - subroutine i_base_new_comid(n,x,info) - use psb_realloc_mod - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_), intent(out) :: info - - call psb_realloc(n,2_psb_ipk_,x%comid,info) - end subroutine i_base_new_comid - - ! ! shortcut alpha=1 beta=0 ! @@ -1393,33 +1364,6 @@ contains end subroutine i_base_sctb_buf - ! -------------------------------------------------------------------- - ! Implementation of methods used for neighbor alltoallv communication - ! -------------------------------------------------------------------- - subroutine i_base_init_topology(x, halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: halo_index(:) - integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%init(halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - - end subroutine i_base_init_topology - - subroutine i_base_free_topology(x, info) - implicit none - class(psb_i_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%free(info) - - end subroutine i_base_free_topology - ! -------------------------------------------------------------------- end module psb_i_base_vect_mod @@ -1430,7 +1374,6 @@ module psb_i_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_i_base_vect_mod - use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_i_base_vect_type !! The psb_i_base_vect_type @@ -1447,10 +1390,9 @@ module psb_i_base_multivect_mod type psb_i_base_multivect_type !> Values. - integer(psb_ipk_), allocatable :: v(:,:) - integer(psb_ipk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + integer(psb_ipk_), allocatable :: v(:,:) + integer(psb_ipk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle !> vector bldstate: !! null: pristine; @@ -1464,9 +1406,6 @@ module psb_i_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology - contains ! ! Constructors/allocators @@ -1541,8 +1480,6 @@ module psb_i_base_multivect_mod procedure, nopass :: device_wait => i_base_mlv_device_wait procedure, pass(x) :: maybe_free_buffer => i_base_mlv_maybe_free_buffer procedure, pass(x) :: free_buffer => i_base_mlv_free_buffer - procedure, pass(x) :: new_comid => i_base_mlv_new_comid - procedure, pass(x) :: free_comid => i_base_mlv_free_comid ! ! Gather/scatter. These are needed for MPI interfacing. @@ -1559,11 +1496,6 @@ module psb_i_base_multivect_mod procedure, pass(y) :: sctb_x => i_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => i_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf - - ! Neighbor alltoallv communication topology handling - procedure, pass(x) :: init_topology => i_base_mlv_init_topology - procedure, pass(x) :: free_topology => i_base_mlv_free_topology - end type psb_i_base_multivect_type interface psb_i_base_multivect @@ -1645,7 +1577,7 @@ contains logical, intent(in), optional :: scratch call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info,scratch) + call x%asb(m,n,info,scratch=scratch) end subroutine i_base_mlv_bld_n @@ -1697,6 +1629,7 @@ contains class(psb_i_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = izero @@ -1925,23 +1858,26 @@ contains case(psb_dupl_err_) do i=1,ncfs if (any(vv(x%iv(i),:).ne.izero)) then - call psb_errpush(psb_err_duplicate_coo,'vect-asb') + info = psb_err_duplicate_coo + call psb_errpush(info,'mvect-asb') return else vv(x%iv(i),:) = x%v(i,:) end if end do case default - write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + write(psb_err_unit,*) 'Error in mvect_asb: unsafe dupl',x%get_dupl() info =-7 end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) else if (x%is_upd().or.x%is_asb().or.scratch_) then - if (x%get_nrows() < m) & + if ((x%get_nrows() < m).or.(x%get_ncols() \namespace psb_base_mod \class psb_l_base_vect_type !! The psb_l_base_vect_type @@ -62,10 +63,9 @@ module psb_l_base_vect_mod !! type psb_l_base_vect_type !> Values. - integer(psb_lpk_), allocatable :: v(:) - integer(psb_lpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + integer(psb_lpk_), allocatable :: v(:) + integer(psb_lpk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle !> vector bldstate: !! null: pristine; @@ -75,14 +75,10 @@ module psb_l_base_vect_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_vect_mod. - integer(psb_ipk_), private :: bldstate = psb_vect_null_ - integer(psb_ipk_), private :: dupl = psb_dupl_null_ - integer(psb_ipk_), private :: ncfs = 0 - integer(psb_ipk_), allocatable :: iv(:) - - - type(psb_neighbor_topology_type) :: neighbor_topology - + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -146,9 +142,7 @@ module psb_l_base_vect_mod procedure, nopass :: device_wait => l_base_device_wait procedure, pass(x) :: maybe_free_buffer => l_base_maybe_free_buffer procedure, pass(x) :: free_buffer => l_base_free_buffer - procedure, pass(x) :: new_comid => l_base_new_comid - procedure, pass(x) :: free_comid => l_base_free_comid - + ! ! Basic info procedure, pass(x) :: get_nrows => l_base_get_nrows @@ -179,9 +173,9 @@ module psb_l_base_vect_mod procedure, pass(x) :: check_addr => l_base_check_addr - ! Methods used to handle topology in neighbor_alltoallv communication scheme - procedure, pass(x) :: init_topology => l_base_init_topology - procedure, pass(x) :: free_topology => l_base_free_topology + + + end type psb_l_base_vect_type @@ -363,11 +357,12 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_l_base_vect_type), intent(out) :: x + class(psb_l_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -757,13 +752,17 @@ contains use psb_realloc_mod implicit none class(psb_l_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: info_comm + integer(psb_ipk_), intent(out) :: info info = 0 if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) - if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) - if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%comm_handle)) then + call psb_comm_free(x%comm_handle, info_comm) + if (info_comm /= psb_success_) info = info_comm + end if if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') call x%set_null() @@ -809,24 +808,6 @@ contains & call x%free_buffer(info) end subroutine l_base_maybe_free_buffer - - ! - !> Function base_free_comid: - !! \memberof psb_l_base_vect_type - !! \brief Free aux MPI communication id buffer - !! - !! \param info return code - !! - ! - subroutine l_base_free_comid(x,info) - use psb_realloc_mod - implicit none - class(psb_l_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%comid)) & - & deallocate(x%comid,stat=info) - end subroutine l_base_free_comid function l_base_get_ncfs(x) result(res) implicit none @@ -1299,17 +1280,6 @@ contains call psb_realloc(n,x%combuf,info) end subroutine l_base_new_buffer - subroutine l_base_new_comid(n,x,info) - use psb_realloc_mod - implicit none - class(psb_l_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_), intent(out) :: info - - call psb_realloc(n,2_psb_ipk_,x%comid,info) - end subroutine l_base_new_comid - - ! ! shortcut alpha=1 beta=0 ! @@ -1395,34 +1365,6 @@ contains end subroutine l_base_sctb_buf - ! -------------------------------------------------------------------- - ! Implementation of methods used for neighbor alltoallv communication - ! -------------------------------------------------------------------- - subroutine l_base_init_topology(x, halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - implicit none - class(psb_l_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: halo_index(:) - integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%init(halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - - end subroutine l_base_init_topology - - subroutine l_base_free_topology(x, info) - implicit none - class(psb_l_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%free(info) - - end subroutine l_base_free_topology - ! -------------------------------------------------------------------- - end module psb_l_base_vect_mod @@ -1433,7 +1375,6 @@ module psb_l_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_l_base_vect_mod - use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_l_base_vect_type !! The psb_l_base_vect_type @@ -1450,10 +1391,9 @@ module psb_l_base_multivect_mod type psb_l_base_multivect_type !> Values. - integer(psb_lpk_), allocatable :: v(:,:) - integer(psb_lpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + integer(psb_lpk_), allocatable :: v(:,:) + integer(psb_lpk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle !> vector bldstate: !! null: pristine; @@ -1467,9 +1407,6 @@ module psb_l_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology - contains ! ! Constructors/allocators @@ -1544,8 +1481,6 @@ module psb_l_base_multivect_mod procedure, nopass :: device_wait => l_base_mlv_device_wait procedure, pass(x) :: maybe_free_buffer => l_base_mlv_maybe_free_buffer procedure, pass(x) :: free_buffer => l_base_mlv_free_buffer - procedure, pass(x) :: new_comid => l_base_mlv_new_comid - procedure, pass(x) :: free_comid => l_base_mlv_free_comid ! ! Gather/scatter. These are needed for MPI interfacing. @@ -1562,12 +1497,6 @@ module psb_l_base_multivect_mod procedure, pass(y) :: sctb_x => l_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => l_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf - - - ! Neighbor alltoallv communication topology handling - procedure, pass(x) :: init_topology => l_base_mlv_init_topology - procedure, pass(x) :: free_topology => l_base_mlv_free_topology - end type psb_l_base_multivect_type interface psb_l_base_multivect @@ -1649,7 +1578,7 @@ contains logical, intent(in), optional :: scratch call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info,scratch) + call x%asb(m,n,info,scratch=scratch) end subroutine l_base_mlv_bld_n @@ -1701,6 +1630,7 @@ contains class(psb_l_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = lzero @@ -1929,23 +1859,26 @@ contains case(psb_dupl_err_) do i=1,ncfs if (any(vv(x%iv(i),:).ne.lzero)) then - call psb_errpush(psb_err_duplicate_coo,'vect-asb') + info = psb_err_duplicate_coo + call psb_errpush(info,'mvect-asb') return else vv(x%iv(i),:) = x%v(i,:) end if end do case default - write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + write(psb_err_unit,*) 'Error in mvect_asb: unsafe dupl',x%get_dupl() info =-7 end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) else if (x%is_upd().or.x%is_asb().or.scratch_) then - if (x%get_nrows() < m) & + if ((x%get_nrows() < m).or.(x%get_ncols() \namespace psb_base_mod \class psb_s_base_vect_type !! The psb_s_base_vect_type @@ -63,10 +64,10 @@ module psb_s_base_vect_mod !! type psb_s_base_vect_type !> Values. - real(psb_spk_), allocatable :: v(:) - real(psb_spk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + real(psb_spk_), allocatable :: v(:) + real(psb_spk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -75,12 +76,10 @@ module psb_s_base_vect_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_vect_mod. - integer(psb_ipk_), private :: bldstate = psb_vect_null_ - integer(psb_ipk_), private :: dupl = psb_dupl_null_ - integer(psb_ipk_), private :: ncfs = 0 - integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -144,9 +143,7 @@ module psb_s_base_vect_mod procedure, nopass :: device_wait => s_base_device_wait procedure, pass(x) :: maybe_free_buffer => s_base_maybe_free_buffer procedure, pass(x) :: free_buffer => s_base_free_buffer - procedure, pass(x) :: new_comid => s_base_new_comid - procedure, pass(x) :: free_comid => s_base_free_comid - + ! ! Basic info procedure, pass(x) :: get_nrows => s_base_get_nrows @@ -161,6 +158,7 @@ module psb_s_base_vect_mod procedure, pass(x) :: set_vect => s_base_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: get_entry=> s_base_get_entry + procedure, pass(x) :: set_entry=> s_base_set_entry ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -433,11 +431,12 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_s_base_vect_type), intent(out) :: x + class(psb_s_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -827,13 +826,17 @@ contains use psb_realloc_mod implicit none class(psb_s_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: info_comm + integer(psb_ipk_), intent(out) :: info info = 0 if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) - if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) - if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%comm_handle)) then + call psb_comm_free(x%comm_handle, info_comm) + if (info_comm /= psb_success_) info = info_comm + end if if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') call x%set_null() @@ -879,24 +882,6 @@ contains & call x%free_buffer(info) end subroutine s_base_maybe_free_buffer - - ! - !> Function base_free_comid: - !! \memberof psb_s_base_vect_type - !! \brief Free aux MPI communication id buffer - !! - !! \param info return code - !! - ! - subroutine s_base_free_comid(x,info) - use psb_realloc_mod - implicit none - class(psb_s_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%comid)) & - & deallocate(x%comid,stat=info) - end subroutine s_base_free_comid function s_base_get_ncfs(x) result(res) implicit none @@ -1285,15 +1270,33 @@ contains ! function s_base_get_entry(x, index) result(res) implicit none - class(psb_s_base_vect_type), intent(in) :: x + class(psb_s_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index real(psb_spk_) :: res res = 0 - if (allocated(x%v)) res = x%v(index) + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + res = x%v(index) + end if end function s_base_get_entry + subroutine s_base_set_entry(x, index, val) + implicit none + class(psb_s_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + real(psb_spk_) :: val + + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(index) =val + call x%set_host() + end if + + end subroutine s_base_set_entry + ! ! Overwrite with absolute value ! @@ -2192,6 +2195,10 @@ contains res = min(res,abs(x%v(i))) end do #else + ! + ! From M&R&C: if the array is of size zero, MINVAL + ! returns the largest positive value + ! res = minval(x%v(1:n)) #endif end function s_base_min @@ -2372,17 +2379,6 @@ contains call psb_realloc(n,x%combuf,info) end subroutine s_base_new_buffer - subroutine s_base_new_comid(n,x,info) - use psb_realloc_mod - implicit none - class(psb_s_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_), intent(out) :: info - - call psb_realloc(n,2_psb_ipk_,x%comid,info) - end subroutine s_base_new_comid - - ! ! shortcut alpha=1 beta=0 ! @@ -2622,7 +2618,6 @@ module psb_s_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_s_base_vect_mod - use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_s_base_vect_type !! The psb_s_base_vect_type @@ -2639,10 +2634,10 @@ module psb_s_base_multivect_mod type psb_s_base_multivect_type !> Values. - real(psb_spk_), allocatable :: v(:,:) - real(psb_spk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + real(psb_spk_), allocatable :: v(:,:) + real(psb_spk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2655,8 +2650,6 @@ module psb_s_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -2764,8 +2757,6 @@ module psb_s_base_multivect_mod procedure, nopass :: device_wait => s_base_mlv_device_wait procedure, pass(x) :: maybe_free_buffer => s_base_mlv_maybe_free_buffer procedure, pass(x) :: free_buffer => s_base_mlv_free_buffer - procedure, pass(x) :: new_comid => s_base_mlv_new_comid - procedure, pass(x) :: free_comid => s_base_mlv_free_comid ! ! Gather/scatter. These are needed for MPI interfacing. @@ -2863,7 +2854,7 @@ contains logical, intent(in), optional :: scratch call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info,scratch) + call x%asb(m,n,info,scratch=scratch) end subroutine s_base_mlv_bld_n @@ -2915,6 +2906,7 @@ contains class(psb_s_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = szero @@ -3143,23 +3135,26 @@ contains case(psb_dupl_err_) do i=1,ncfs if (any(vv(x%iv(i),:).ne.szero)) then - call psb_errpush(psb_err_duplicate_coo,'vect-asb') + info = psb_err_duplicate_coo + call psb_errpush(info,'mvect-asb') return else vv(x%iv(i),:) = x%v(i,:) end if end do case default - write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + write(psb_err_unit,*) 'Error in mvect_asb: unsafe dupl',x%get_dupl() info =-7 end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) else if (x%is_upd().or.x%is_asb().or.scratch_) then - if (x%get_nrows() < m) & + if ((x%get_nrows() < m).or.(x%get_ncols() s_vect_check_addr procedure, pass(x) :: get_entry => s_vect_get_entry + procedure, pass(x) :: set_entry => s_vect_set_entry procedure, pass(x) :: dot_v => s_vect_dot_v procedure, pass(x) :: dot_a => s_vect_dot_a @@ -862,13 +863,21 @@ contains function s_vect_get_entry(x,index) result(res) implicit none - class(psb_s_vect_type), intent(in) :: x + class(psb_s_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index real(psb_spk_) :: res - res = 0 + res = szero if (allocated(x%v)) res = x%v%get_entry(index) end function s_vect_get_entry + subroutine s_vect_set_entry(x,index,val) + implicit none + class(psb_s_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + real(psb_spk_) :: val + if (allocated(x%v)) call x%v%set_entry(index,val) + end subroutine s_vect_set_entry + function s_vect_dot_v(n,x,y) result(res) implicit none class(psb_s_vect_type), intent(inout) :: x, y @@ -1430,7 +1439,7 @@ contains if (allocated(x%v)) then res = x%v%minreal(n) else - res = szero + res = HUGE(sone) end if end function s_vect_min @@ -1739,19 +1748,20 @@ contains end subroutine s_mvect_bld_x - subroutine s_mvect_bld_n(x,m,n,mold) + subroutine s_mvect_bld_n(x,m,n,mold,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_s_multivect_type), intent(out) :: x class(psb_s_base_multivect_type), intent(in), optional :: mold integer(psb_ipk_) :: info - + logical, intent(in), optional :: scratch + info = psb_success_ if (present(mold)) then allocate(x%v,stat=info,mold=mold) else allocate(x%v,stat=info, mold=psb_s_get_base_multivect_default()) endif - if (info == psb_success_) call x%v%bld(m,n) + if (info == psb_success_) call x%v%bld(m,n,scratch=scratch) end subroutine s_mvect_bld_n @@ -2232,3 +2242,4 @@ contains !!$ end function s_mvect_asum end module psb_s_multivect_mod + diff --git a/base/modules/serial/psb_z_base_mat_mod.F90 b/base/modules/serial/psb_z_base_mat_mod.F90 index 0d2c9e768..4aa6c3465 100644 --- a/base/modules/serial/psb_z_base_mat_mod.F90 +++ b/base/modules/serial/psb_z_base_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 7b08c25ee..c4dfe1511 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -33,7 +33,7 @@ ! package: psb_z_base_vect_mod ! ! This module contains the definition of the psb_z_base_vect type which -! is a container for dense vectors. +! is a container for dense vectors.\ ! This is encapsulated instead of being just a simple array to allow for ! more complicated situations, such as GPU programming, where the memory ! area we are interested in is not easily accessible from the host/Fortran @@ -47,9 +47,10 @@ module psb_z_base_vect_mod use psb_const_mod use psb_error_mod use psb_realloc_mod + use psb_comm_schemes_mod, only: psb_comm_handle_type, psb_comm_isend_irecv_, psb_comm_unknown_ + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free use psb_i_base_vect_mod use psb_l_base_vect_mod - use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_z_base_vect_type !! The psb_z_base_vect_type @@ -63,10 +64,10 @@ module psb_z_base_vect_mod !! type psb_z_base_vect_type !> Values. - complex(psb_dpk_), allocatable :: v(:) - complex(psb_dpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + complex(psb_dpk_), allocatable :: v(:) + complex(psb_dpk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -75,12 +76,10 @@ module psb_z_base_vect_mod !! in already existing entries. !! The transitions among the states are detailed in !! psb_T_vect_mod. - integer(psb_ipk_), private :: bldstate = psb_vect_null_ - integer(psb_ipk_), private :: dupl = psb_dupl_null_ - integer(psb_ipk_), private :: ncfs = 0 - integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology + integer(psb_ipk_), private :: bldstate = psb_vect_null_ + integer(psb_ipk_), private :: dupl = psb_dupl_null_ + integer(psb_ipk_), private :: ncfs = 0 + integer(psb_ipk_), allocatable :: iv(:) contains ! ! Constructors/allocators @@ -144,9 +143,7 @@ module psb_z_base_vect_mod procedure, nopass :: device_wait => z_base_device_wait procedure, pass(x) :: maybe_free_buffer => z_base_maybe_free_buffer procedure, pass(x) :: free_buffer => z_base_free_buffer - procedure, pass(x) :: new_comid => z_base_new_comid - procedure, pass(x) :: free_comid => z_base_free_comid - + ! ! Basic info procedure, pass(x) :: get_nrows => z_base_get_nrows @@ -161,6 +158,7 @@ module psb_z_base_vect_mod procedure, pass(x) :: set_vect => z_base_set_vect generic, public :: set => set_vect, set_scal procedure, pass(x) :: get_entry=> z_base_get_entry + procedure, pass(x) :: set_entry=> z_base_set_entry ! ! Gather/scatter. These are needed for MPI interfacing. ! May have to be reworked. @@ -245,10 +243,6 @@ module psb_z_base_vect_mod procedure, pass(z) :: addconst_v2 => z_base_addconst_v2 generic, public :: addconst => addconst_a2,addconst_v2 - ! Methods used to handle topology in neighbor_alltoallv communication scheme - procedure, pass(x) :: init_topology => z_base_init_topology - procedure, pass(x) :: free_topology => z_base_free_topology - end type psb_z_base_vect_type @@ -430,11 +424,12 @@ contains use psi_serial_mod use psb_realloc_mod implicit none - class(psb_z_base_vect_type), intent(out) :: x + class(psb_z_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: clear logical :: clear_ + info = 0 if (present(clear)) then clear_ = clear else @@ -824,13 +819,17 @@ contains use psb_realloc_mod implicit none class(psb_z_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: info_comm + integer(psb_ipk_), intent(out) :: info info = 0 if (allocated(x%v)) deallocate(x%v, stat=info) if ((info == 0).and.allocated(x%combuf)) call x%free_buffer(info) - if ((info == 0).and.allocated(x%comid)) call x%free_comid(info) - if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%iv)) deallocate(x%iv, stat=info) + if ((info == 0).and.allocated(x%comm_handle)) then + call psb_comm_free(x%comm_handle, info_comm) + if (info_comm /= psb_success_) info = info_comm + end if if (info /= 0) call & & psb_errpush(psb_err_alloc_dealloc_,'vect_free') call x%set_null() @@ -876,24 +875,6 @@ contains & call x%free_buffer(info) end subroutine z_base_maybe_free_buffer - - ! - !> Function base_free_comid: - !! \memberof psb_z_base_vect_type - !! \brief Free aux MPI communication id buffer - !! - !! \param info return code - !! - ! - subroutine z_base_free_comid(x,info) - use psb_realloc_mod - implicit none - class(psb_z_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - if (allocated(x%comid)) & - & deallocate(x%comid,stat=info) - end subroutine z_base_free_comid function z_base_get_ncfs(x) result(res) implicit none @@ -1282,15 +1263,33 @@ contains ! function z_base_get_entry(x, index) result(res) implicit none - class(psb_z_base_vect_type), intent(in) :: x + class(psb_z_base_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index complex(psb_dpk_) :: res res = 0 - if (allocated(x%v)) res = x%v(index) + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + res = x%v(index) + end if end function z_base_get_entry + subroutine z_base_set_entry(x, index, val) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + complex(psb_dpk_) :: val + + + if (allocated(x%v)) then + if (x%is_dev()) call x%sync() + x%v(index) =val + call x%set_host() + end if + + end subroutine z_base_set_entry + ! ! Overwrite with absolute value ! @@ -2289,17 +2288,6 @@ contains call psb_realloc(n,x%combuf,info) end subroutine z_base_new_buffer - subroutine z_base_new_comid(n,x,info) - use psb_realloc_mod - implicit none - class(psb_z_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: n - integer(psb_ipk_), intent(out) :: info - - call psb_realloc(n,2_psb_ipk_,x%comid,info) - end subroutine z_base_new_comid - - ! ! shortcut alpha=1 beta=0 ! @@ -2438,35 +2426,6 @@ contains if (x%is_dev()) call x%sync() call z%addconst(x%v,b,info) end subroutine z_base_addconst_v2 - - - ! -------------------------------------------------------------------- - ! Implementation of methods used for neighbor alltoallv communication - ! -------------------------------------------------------------------- - subroutine z_base_init_topology(x, halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - implicit none - class(psb_z_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(in) :: halo_index(:) - integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_mpk_), intent(in) :: icomm - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%init(halo_index, num_exchanges, & - & total_send_elems, total_recv_elems, ctxt, icomm, info) - - end subroutine z_base_init_topology - - subroutine z_base_free_topology(x, info) - implicit none - class(psb_z_base_vect_type), intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - - call x%neighbor_topology%free(info) - - end subroutine z_base_free_topology - ! -------------------------------------------------------------------- end module psb_z_base_vect_mod @@ -2476,7 +2435,6 @@ module psb_z_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_z_base_vect_mod - use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_z_base_vect_type !! The psb_z_base_vect_type @@ -2493,10 +2451,10 @@ module psb_z_base_multivect_mod type psb_z_base_multivect_type !> Values. - complex(psb_dpk_), allocatable :: v(:,:) - complex(psb_dpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) - integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + complex(psb_dpk_), allocatable :: v(:,:) + complex(psb_dpk_), allocatable :: combuf(:) + class(psb_comm_handle_type), allocatable :: comm_handle + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2509,8 +2467,6 @@ module psb_z_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) - - type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -2618,8 +2574,6 @@ module psb_z_base_multivect_mod procedure, nopass :: device_wait => z_base_mlv_device_wait procedure, pass(x) :: maybe_free_buffer => z_base_mlv_maybe_free_buffer procedure, pass(x) :: free_buffer => z_base_mlv_free_buffer - procedure, pass(x) :: new_comid => z_base_mlv_new_comid - procedure, pass(x) :: free_comid => z_base_mlv_free_comid ! ! Gather/scatter. These are needed for MPI interfacing. @@ -2636,10 +2590,6 @@ module psb_z_base_multivect_mod procedure, pass(y) :: sctb_x => z_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => z_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf - - ! Neighbor alltoallv communication topology handling - procedure, pass(x) :: init_topology => z_base_mlv_init_topology - procedure, pass(x) :: free_topology => z_base_mlv_free_topology end type psb_z_base_multivect_type interface psb_z_base_multivect @@ -2721,7 +2671,7 @@ contains logical, intent(in), optional :: scratch call psb_realloc(m,n,x%v,info) - call x%asb(m,n,info,scratch) + call x%asb(m,n,info,scratch=scratch) end subroutine z_base_mlv_bld_n @@ -2773,6 +2723,7 @@ contains class(psb_z_base_multivect_type), intent(out) :: x integer(psb_ipk_), intent(out) :: info + info = 0 if (allocated(x%v)) then call x%sync() x%v(:,:) = zzero @@ -3001,23 +2952,26 @@ contains case(psb_dupl_err_) do i=1,ncfs if (any(vv(x%iv(i),:).ne.zzero)) then - call psb_errpush(psb_err_duplicate_coo,'vect-asb') + info = psb_err_duplicate_coo + call psb_errpush(info,'mvect-asb') return else vv(x%iv(i),:) = x%v(i,:) end if end do case default - write(psb_err_unit,*) 'Error in vect_asb: unsafe dupl',x%get_dupl() + write(psb_err_unit,*) 'Error in mvect_asb: unsafe dupl',x%get_dupl() info =-7 end select call psb_move_alloc(vv,x%v,info) if (allocated(x%iv)) deallocate(x%iv,stat=info) else if (x%is_upd().or.x%is_asb().or.scratch_) then - if (x%get_nrows() < m) & + if ((x%get_nrows() < m).or.(x%get_ncols() z_vect_check_addr procedure, pass(x) :: get_entry => z_vect_get_entry + procedure, pass(x) :: set_entry => z_vect_set_entry procedure, pass(x) :: dot_v => z_vect_dot_v procedure, pass(x) :: dot_a => z_vect_dot_a @@ -855,13 +856,21 @@ contains function z_vect_get_entry(x,index) result(res) implicit none - class(psb_z_vect_type), intent(in) :: x + class(psb_z_vect_type), intent(inout) :: x integer(psb_ipk_), intent(in) :: index complex(psb_dpk_) :: res - res = 0 + res = zzero if (allocated(x%v)) res = x%v%get_entry(index) end function z_vect_get_entry + subroutine z_vect_set_entry(x,index,val) + implicit none + class(psb_z_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: index + complex(psb_dpk_) :: val + if (allocated(x%v)) call x%v%set_entry(index,val) + end subroutine z_vect_set_entry + function z_vect_dot_v(n,x,y) result(res) implicit none class(psb_z_vect_type), intent(inout) :: x, y @@ -1660,19 +1669,20 @@ contains end subroutine z_mvect_bld_x - subroutine z_mvect_bld_n(x,m,n,mold) + subroutine z_mvect_bld_n(x,m,n,mold,scratch) integer(psb_ipk_), intent(in) :: m,n class(psb_z_multivect_type), intent(out) :: x class(psb_z_base_multivect_type), intent(in), optional :: mold integer(psb_ipk_) :: info - + logical, intent(in), optional :: scratch + info = psb_success_ if (present(mold)) then allocate(x%v,stat=info,mold=mold) else allocate(x%v,stat=info, mold=psb_z_get_base_multivect_default()) endif - if (info == psb_success_) call x%v%bld(m,n) + if (info == psb_success_) call x%v%bld(m,n,scratch=scratch) end subroutine z_mvect_bld_n @@ -2153,3 +2163,4 @@ contains !!$ end function z_mvect_asum end module psb_z_multivect_mod + diff --git a/base/modules/tools/psb_c_tools_a_mod.f90 b/base/modules/tools/psb_c_tools_a_mod.f90 index 8dd592b37..60e934748 100644 --- a/base/modules/tools/psb_c_tools_a_mod.f90 +++ b/base/modules/tools/psb_c_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_c_tools_mod.F90 b/base/modules/tools/psb_c_tools_mod.F90 index 813ef370a..148ddf59f 100644 --- a/base/modules/tools/psb_c_tools_mod.F90 +++ b/base/modules/tools/psb_c_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -444,6 +444,14 @@ Module psb_c_tools_mod integer(psb_ipk_), intent(out) :: info complex(psb_spk_) :: res end function + function psb_c_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + import + type(psb_cspmat_type), intent(inout) :: a + integer(psb_lpk_), intent(in) :: rowindex, colindex + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: res + end function end interface interface psb_remap diff --git a/base/modules/tools/psb_d_tools_a_mod.f90 b/base/modules/tools/psb_d_tools_a_mod.f90 index 638953b4f..fd7b9ca57 100644 --- a/base/modules/tools/psb_d_tools_a_mod.f90 +++ b/base/modules/tools/psb_d_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_d_tools_mod.F90 b/base/modules/tools/psb_d_tools_mod.F90 index 6ea554cd1..97f70fc13 100644 --- a/base/modules/tools/psb_d_tools_mod.F90 +++ b/base/modules/tools/psb_d_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -444,6 +444,14 @@ Module psb_d_tools_mod integer(psb_ipk_), intent(out) :: info real(psb_dpk_) :: res end function + function psb_d_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + import + type(psb_dspmat_type), intent(inout) :: a + integer(psb_lpk_), intent(in) :: rowindex, colindex + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: res + end function end interface interface psb_remap diff --git a/base/modules/tools/psb_e_tools_a_mod.f90 b/base/modules/tools/psb_e_tools_a_mod.f90 index f8a27cb54..b54a593c8 100644 --- a/base/modules/tools/psb_e_tools_a_mod.f90 +++ b/base/modules/tools/psb_e_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_i2_tools_a_mod.f90 b/base/modules/tools/psb_i2_tools_a_mod.f90 index b8d52bb42..7471adcc9 100644 --- a/base/modules/tools/psb_i2_tools_a_mod.f90 +++ b/base/modules/tools/psb_i2_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_i_tools_mod.F90 b/base/modules/tools/psb_i_tools_mod.F90 index 767dc8e56..28899c9fe 100644 --- a/base/modules/tools/psb_i_tools_mod.F90 +++ b/base/modules/tools/psb_i_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_l_tools_mod.F90 b/base/modules/tools/psb_l_tools_mod.F90 index 92fe875bd..078f06dc7 100644 --- a/base/modules/tools/psb_l_tools_mod.F90 +++ b/base/modules/tools/psb_l_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_m_tools_a_mod.f90 b/base/modules/tools/psb_m_tools_a_mod.f90 index a1de6caa5..65211e353 100644 --- a/base/modules/tools/psb_m_tools_a_mod.f90 +++ b/base/modules/tools/psb_m_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_s_tools_a_mod.f90 b/base/modules/tools/psb_s_tools_a_mod.f90 index 85a2b0296..1881202b1 100644 --- a/base/modules/tools/psb_s_tools_a_mod.f90 +++ b/base/modules/tools/psb_s_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_s_tools_mod.F90 b/base/modules/tools/psb_s_tools_mod.F90 index d4fa78924..c87607bc9 100644 --- a/base/modules/tools/psb_s_tools_mod.F90 +++ b/base/modules/tools/psb_s_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -444,6 +444,14 @@ Module psb_s_tools_mod integer(psb_ipk_), intent(out) :: info real(psb_spk_) :: res end function + function psb_s_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + import + type(psb_sspmat_type), intent(inout) :: a + integer(psb_lpk_), intent(in) :: rowindex, colindex + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: res + end function end interface interface psb_remap diff --git a/base/modules/tools/psb_z_tools_a_mod.f90 b/base/modules/tools/psb_z_tools_a_mod.f90 index 4c421f266..1052e57db 100644 --- a/base/modules/tools/psb_z_tools_a_mod.f90 +++ b/base/modules/tools/psb_z_tools_a_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/modules/tools/psb_z_tools_mod.F90 b/base/modules/tools/psb_z_tools_mod.F90 index 2c105b2bb..8a6c2d34c 100644 --- a/base/modules/tools/psb_z_tools_mod.F90 +++ b/base/modules/tools/psb_z_tools_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -444,6 +444,14 @@ Module psb_z_tools_mod integer(psb_ipk_), intent(out) :: info complex(psb_dpk_) :: res end function + function psb_z_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + import + type(psb_zspmat_type), intent(inout) :: a + integer(psb_lpk_), intent(in) :: rowindex, colindex + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: res + end function end interface interface psb_remap diff --git a/base/psblas/psb_cabs_vect.f90 b/base/psblas/psb_cabs_vect.f90 index cb1921953..29780abe5 100644 --- a/base/psblas/psb_cabs_vect.f90 +++ b/base/psblas/psb_cabs_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_camax.f90 b/base/psblas/psb_camax.f90 index e30ba8fe2..90ef18ead 100644 --- a/base/psblas/psb_camax.f90 +++ b/base/psblas/psb_camax.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -148,7 +148,7 @@ end function psb_camax !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -371,7 +371,7 @@ end function psb_camax_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,7 +496,7 @@ end subroutine psb_camaxvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_casum.f90 b/base/psblas/psb_casum.f90 index 7b9b32759..7b336ebd9 100644 --- a/base/psblas/psb_casum.f90 +++ b/base/psblas/psb_casum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -261,7 +261,7 @@ end function psb_casum_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -391,7 +391,7 @@ end function psb_casumv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_caxpby.f90 b/base/psblas/psb_caxpby.f90 index da9458490..bb93f7eb8 100644 --- a/base/psblas/psb_caxpby.f90 +++ b/base/psblas/psb_caxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -146,7 +146,7 @@ end subroutine psb_caxpby_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -418,7 +418,7 @@ end subroutine psb_caxpby !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -538,7 +538,7 @@ end subroutine psb_caxpbyv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_ccmp_vect.f90 b/base/psblas/psb_ccmp_vect.f90 index 5de955138..a77631556 100644 --- a/base/psblas/psb_ccmp_vect.f90 +++ b/base/psblas/psb_ccmp_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cdiv_vect.f90 b/base/psblas/psb_cdiv_vect.f90 index 0fe4594a1..9a2525a13 100644 --- a/base/psblas/psb_cdiv_vect.f90 +++ b/base/psblas/psb_cdiv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cdot.f90 b/base/psblas/psb_cdot.f90 index ed300b7ce..7be3f6663 100644 --- a/base/psblas/psb_cdot.f90 +++ b/base/psblas/psb_cdot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -301,7 +301,7 @@ end function psb_cdot !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -437,7 +437,7 @@ end function psb_cdotv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -572,7 +572,7 @@ end subroutine psb_cdotvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cgetmatinfo.F90 b/base/psblas/psb_cgetmatinfo.F90 index 66db76936..eade65178 100644 --- a/base/psblas/psb_cgetmatinfo.F90 +++ b/base/psblas/psb_cgetmatinfo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cinv_vect.f90 b/base/psblas/psb_cinv_vect.f90 index 25589f32b..d5a4ac1f7 100644 --- a/base/psblas/psb_cinv_vect.f90 +++ b/base/psblas/psb_cinv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cmlt_vect.f90 b/base/psblas/psb_cmlt_vect.f90 index 9b4037bf0..c88514992 100644 --- a/base/psblas/psb_cmlt_vect.f90 +++ b/base/psblas/psb_cmlt_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cnrm2.f90 b/base/psblas/psb_cnrm2.f90 index 0de8ed162..de99ca703 100644 --- a/base/psblas/psb_cnrm2.f90 +++ b/base/psblas/psb_cnrm2.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -155,7 +155,7 @@ end function psb_cnrm2 !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -610,7 +610,7 @@ end function psb_cnrm2_weightmask_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cnrmi.f90 b/base/psblas/psb_cnrmi.f90 index f28719ea5..38cdc45fb 100644 --- a/base/psblas/psb_cnrmi.f90 +++ b/base/psblas/psb_cnrmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cspmm.f90 b/base/psblas/psb_cspmm.f90 index 540ddde3e..f3e96c2f2 100644 --- a/base/psblas/psb_cspmm.f90 +++ b/base/psblas/psb_cspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -85,8 +85,8 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_), save :: mv_phase1=-1, mv_phase2=-1, mv_phase3=-1, mv_phase4=-1 integer(psb_ipk_), save :: mv_phase11=-1, mv_phase12=-1 - name = 'psb_cspmv_vect' - info = psb_success_ + name='psb_cspmv' + info=psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -155,14 +155,12 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy= psb_debug_comp_) & - & write(debug_unit,*) me,' ',trim(name),' Allocated work ', info if (trans_ == 'N') then ! Matrix is not transposed @@ -174,12 +172,14 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(psb_swap_send_,czero,x%v,desc_a,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_send_,& + & czero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(psb_swap_recv_,czero,x%v,desc_a,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_recv_,& + & czero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,cone,y%v,info) @@ -194,7 +194,8 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase11) if (doswap_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),czero,x%v,desc_a,info,data=psb_comm_halo_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & czero,x%v,desc_a,info,data=psb_comm_halo_) end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) @@ -237,8 +238,10 @@ subroutine psb_cspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),cone,y%v,desc_a,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),cone,y%v,desc_a,info,data=psb_comm_ovr_) + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& + & cone,y%v,desc_a,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & cone,y%v,desc_a,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -295,7 +298,7 @@ end subroutine psb_cspmv_vect ! work(:) - complex,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,& & trans, k, jx, jy, work, doswap) use psb_base_mod, psb_protect_name => psb_cspmm use psi_mod @@ -326,8 +329,8 @@ subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,& logical :: aliw, doswap_ integer(psb_ipk_) :: debug_level, debug_unit - name = 'psb_cspmm' - info = psb_success_ + name='psb_cspmm' + info=psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -606,7 +609,7 @@ end subroutine psb_cspmm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -644,7 +647,7 @@ end subroutine psb_cspmm ! work(:) - complex,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_cspmv(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_cspmv(alpha,a,x,beta,y,desc_a,info,& & trans, work, doswap) use psb_base_mod, psb_protect_name => psb_cspmv use psi_mod diff --git a/base/psblas/psb_cspnrm1.f90 b/base/psblas/psb_cspnrm1.f90 index 92b04ebb4..a912bfd1a 100644 --- a/base/psblas/psb_cspnrm1.f90 +++ b/base/psblas/psb_cspnrm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_cspsm.f90 b/base/psblas/psb_cspsm.f90 index cd5dd8416..1f2e8e430 100644 --- a/base/psblas/psb_cspsm.f90 +++ b/base/psblas/psb_cspsm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -71,35 +71,36 @@ subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& use psi_mod implicit none - complex(psb_spk_), intent(in) :: alpha, beta - type(psb_c_vect_type), intent(inout) :: x - type(psb_c_vect_type), intent(inout) :: y - type(psb_cspmat_type), intent(inout) :: a - type(psb_desc_type), intent(in) :: desc_a + complex(psb_spk_), intent(in) :: alpha, beta + type(psb_c_vect_type), intent(inout) :: x + type(psb_c_vect_type), intent(inout) :: y + type(psb_cspmat_type), intent(inout) :: a + type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info type(psb_c_vect_type), intent(inout), optional :: diag - character, intent(in), optional :: trans, scale + character, intent(in), optional :: trans, scale integer(psb_ipk_), intent(in), optional :: choice ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, & + integer(psb_ipk_) :: np, me, & & err_act, iix, jjx, ia, ja, iia, jja, lldx,lldy, choice_,& & ix, iy, ik, jx, jy, i, lld,& - & m, nrow, ncol, iiy, jjy, idx, ndm + & m, nrow, ncol, liwork, llwork, iiy, jjy, idx, ndm - character :: lscale - integer(psb_ipk_), parameter :: nb=4 - complex(psb_spk_),pointer :: xp(:), yp(:) - character :: itrans - character(len=20) :: name, ch_err - logical :: aliw + character :: lscale + integer(psb_ipk_), parameter :: nb=4 + complex(psb_spk_),pointer :: xp(:), yp(:) + character :: itrans + character(len=20) :: name, ch_err + logical :: aliw name = 'psb_cspsv_vect' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -157,8 +158,8 @@ subroutine psb_cspsv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy 0) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),cone,y%v,desc_a,info,data=psb_comm_ovr_) - + call psi_swapdata(psb_comm_status_sync_,cone,y%v,desc_a,info,data=psb_comm_ovr_) if (info == psb_success_) call psi_ovrl_upd(y%v,desc_a,choice_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') diff --git a/base/psblas/psb_dabs_vect.f90 b/base/psblas/psb_dabs_vect.f90 index 0b655d9cd..29e0ec6ea 100644 --- a/base/psblas/psb_dabs_vect.f90 +++ b/base/psblas/psb_dabs_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_damax.f90 b/base/psblas/psb_damax.f90 index 490d4ffe3..db45d5687 100644 --- a/base/psblas/psb_damax.f90 +++ b/base/psblas/psb_damax.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -148,7 +148,7 @@ end function psb_damax !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -371,7 +371,7 @@ end function psb_damax_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,7 +496,7 @@ end subroutine psb_damaxvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -689,11 +689,11 @@ function psb_dmin_vect(x, desc_a, info,global) result(res) goto 9999 end if - ! compute local max + ! compute local min if ((desc_a%get_local_rows() > 0).and.(m /= 0)) then res = x%minreal(desc_a%get_local_rows()) else - res = dzero + res = HUGE(done) end if ! compute global min diff --git a/base/psblas/psb_dasum.f90 b/base/psblas/psb_dasum.f90 index ff4399de3..dbb8e5ee1 100644 --- a/base/psblas/psb_dasum.f90 +++ b/base/psblas/psb_dasum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -261,7 +261,7 @@ end function psb_dasum_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -391,7 +391,7 @@ end function psb_dasumv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_daxpby.f90 b/base/psblas/psb_daxpby.f90 index f86b7fe9f..20b7f71b9 100644 --- a/base/psblas/psb_daxpby.f90 +++ b/base/psblas/psb_daxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -146,7 +146,7 @@ end subroutine psb_daxpby_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -418,7 +418,7 @@ end subroutine psb_daxpby !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -538,7 +538,7 @@ end subroutine psb_daxpbyv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dcmp_vect.f90 b/base/psblas/psb_dcmp_vect.f90 index b52b34d12..c9549be6c 100644 --- a/base/psblas/psb_dcmp_vect.f90 +++ b/base/psblas/psb_dcmp_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -121,7 +121,7 @@ end subroutine psb_dcmp_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_ddiv_vect.f90 b/base/psblas/psb_ddiv_vect.f90 index 7f958e19b..37fe59e1b 100644 --- a/base/psblas/psb_ddiv_vect.f90 +++ b/base/psblas/psb_ddiv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_ddot.f90 b/base/psblas/psb_ddot.f90 index 633c75498..611e43067 100644 --- a/base/psblas/psb_ddot.f90 +++ b/base/psblas/psb_ddot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -301,7 +301,7 @@ end function psb_ddot !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -437,7 +437,7 @@ end function psb_ddotv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -572,7 +572,7 @@ end subroutine psb_ddotvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dgetmatinfo.F90 b/base/psblas/psb_dgetmatinfo.F90 index 9b3270118..0b743a86d 100644 --- a/base/psblas/psb_dgetmatinfo.F90 +++ b/base/psblas/psb_dgetmatinfo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dinv_vect.f90 b/base/psblas/psb_dinv_vect.f90 index 2159398f0..5c238c4b8 100644 --- a/base/psblas/psb_dinv_vect.f90 +++ b/base/psblas/psb_dinv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dmlt_vect.f90 b/base/psblas/psb_dmlt_vect.f90 index 80a138c16..b8ff807b4 100644 --- a/base/psblas/psb_dmlt_vect.f90 +++ b/base/psblas/psb_dmlt_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dnrm2.f90 b/base/psblas/psb_dnrm2.f90 index 7ebe94391..cce877f32 100644 --- a/base/psblas/psb_dnrm2.f90 +++ b/base/psblas/psb_dnrm2.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -155,7 +155,7 @@ end function psb_dnrm2 !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -610,7 +610,7 @@ end function psb_dnrm2_weightmask_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dnrmi.f90 b/base/psblas/psb_dnrmi.f90 index e06bc71bb..a251ae825 100644 --- a/base/psblas/psb_dnrmi.f90 +++ b/base/psblas/psb_dnrmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dspmm.f90 b/base/psblas/psb_dspmm.f90 index 4a18227df..84dc5f2c7 100644 --- a/base/psblas/psb_dspmm.f90 +++ b/base/psblas/psb_dspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -57,8 +57,6 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& & trans, doswap) use psb_base_mod, psb_protect_name => psb_dspmv_vect use psi_mod - use psb_comm_factory_mod - implicit none real(psb_dpk_), intent(in) :: alpha, beta @@ -87,8 +85,8 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_), save :: mv_phase1=-1, mv_phase2=-1, mv_phase3=-1, mv_phase4=-1 integer(psb_ipk_), save :: mv_phase11=-1, mv_phase12=-1 - name = 'psb_dspmv_vect' - info = psb_success_ + name='psb_dspmv' + info=psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -96,7 +94,7 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - ctxt = desc_a%get_context() + ctxt=desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then info = psb_err_context_error_ @@ -157,14 +155,12 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy= psb_debug_comp_) & - & write(debug_unit,*) me,' ',trim(name),' Allocated work ', info if (trans_ == 'N') then ! Matrix is not transposed @@ -185,7 +181,8 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(psb_comm_status_wait_, dzero, x%v, desc_a, info, data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_recv_,& + & dzero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,done,y%v,info) @@ -241,10 +238,10 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swaptran(psb_comm_status_sync_, done, y%v, desc_a, info) - if (info == psb_success_) then - call psi_swapdata(psb_comm_status_sync_, done, y%v, desc_a, info, data=psb_comm_ovr_) - end if + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& + & done,y%v,desc_a,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & done,y%v,desc_a,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -301,12 +298,10 @@ end subroutine psb_dspmv_vect ! work(:) - real,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& & trans, k, jx, jy, work, doswap) use psb_base_mod, psb_protect_name => psb_dspmm use psi_mod - use psb_comm_factory_mod - implicit none real(psb_dpk_), intent(in) :: alpha, beta @@ -334,8 +329,8 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& logical :: aliw, doswap_ integer(psb_ipk_) :: debug_level, debug_unit - name = 'psb_dspmm' - info = psb_success_ + name='psb_dspmm' + info=psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -470,9 +465,9 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& if (doswap_.and.(np>1)) then ib1=min(nb,lik) xp => x(iix:lldx,jjx:jjx+ib1-1) - if (doswap_) & - & call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& - & ib1,dzero,xp,desc_a,iwork,info) + if (doswap_)& + & call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & ib1,dzero,xp,desc_a,iwork,info) blk: do i=1, lik, nb @@ -558,17 +553,14 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,& call psb_errpush(info,name,a_err=ch_err) goto 9999 end if - if (info == psb_success_) call psi_ovrl_restore(x,xvsave,desc_a,info) - - if (doswap_)then ik = lik ! This should not be an issue, we are expecting the values ! to be small, within PSB_IPK - call psi_swaptran(psb_comm_status_sync_,& - & ik,done,y(:,1:ik),desc_a,iwork,info,data=psb_comm_ovr_) - if (info == psb_success_) call psi_swapdata(psb_comm_status_sync_,& + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& + & ik,done,y(:,1:ik),desc_a,iwork,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& & ik,done,y(:,1:ik),desc_a,iwork,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & @@ -617,7 +609,7 @@ end subroutine psb_dspmm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -655,11 +647,10 @@ end subroutine psb_dspmm ! work(:) - real,(optional). Working area. ! doswap - logical(optional). Whether to performe halo updates. ! -subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& & trans, work, doswap) use psb_base_mod, psb_protect_name => psb_dspmv use psi_mod - use psb_comm_factory_mod implicit none real(psb_dpk_), intent(in) :: alpha, beta @@ -686,8 +677,8 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& logical :: aliw, doswap_ integer(psb_ipk_) :: debug_level, debug_unit - name = 'psb_dspmv' - info = psb_success_ + name='psb_dspmv' + info=psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -806,7 +797,8 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swapdata(psb_comm_status_sync_,dzero,x,desc_a,iwork,info,data=psb_comm_halo_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & dzero,x,desc_a,iwork,info,data=psb_comm_halo_) end if call psb_csmm(alpha,a,x,beta,y,info) @@ -872,10 +864,11 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swaptran(psb_comm_status_sync_,done,yp,desc_a,iwork,info) - if (info == psb_success_) then - call psi_swapdata(psb_comm_status_sync_,done,yp,desc_a,iwork,info,data=psb_comm_ovr_) - end if + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& + & done,yp,desc_a,iwork,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & done,yp,desc_a,iwork,info,data=psb_comm_ovr_) + if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info if(info /= psb_success_) then diff --git a/base/psblas/psb_dspnrm1.f90 b/base/psblas/psb_dspnrm1.f90 index 6bdb4eea3..c415bc526 100644 --- a/base/psblas/psb_dspnrm1.f90 +++ b/base/psblas/psb_dspnrm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_dspsm.f90 b/base/psblas/psb_dspsm.f90 index 317a3d7b8..be8db5d74 100644 --- a/base/psblas/psb_dspsm.f90 +++ b/base/psblas/psb_dspsm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -71,35 +71,36 @@ subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& use psi_mod implicit none - real(psb_dpk_), intent(in) :: alpha, beta - type(psb_d_vect_type), intent(inout) :: x - type(psb_d_vect_type), intent(inout) :: y - type(psb_dspmat_type), intent(inout) :: a - type(psb_desc_type), intent(in) :: desc_a + real(psb_dpk_), intent(in) :: alpha, beta + type(psb_d_vect_type), intent(inout) :: x + type(psb_d_vect_type), intent(inout) :: y + type(psb_dspmat_type), intent(inout) :: a + type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info type(psb_d_vect_type), intent(inout), optional :: diag - character, intent(in), optional :: trans, scale + character, intent(in), optional :: trans, scale integer(psb_ipk_), intent(in), optional :: choice ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, & + integer(psb_ipk_) :: np, me, & & err_act, iix, jjx, ia, ja, iia, jja, lldx,lldy, choice_,& & ix, iy, ik, jx, jy, i, lld,& - & m, nrow, ncol, iiy, jjy, idx, ndm + & m, nrow, ncol, liwork, llwork, iiy, jjy, idx, ndm - character :: lscale - integer(psb_ipk_), parameter :: nb=4 - real(psb_dpk_),pointer :: xp(:), yp(:) - character :: itrans - character(len=20) :: name, ch_err - logical :: aliw + character :: lscale + integer(psb_ipk_), parameter :: nb=4 + real(psb_dpk_),pointer :: xp(:), yp(:) + character :: itrans + character(len=20) :: name, ch_err + logical :: aliw name = 'psb_dspsv_vect' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -157,8 +158,8 @@ subroutine psb_dspsv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy 0) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),done,y%v,desc_a,info,data=psb_comm_ovr_) - - + call psi_swapdata(psb_comm_status_sync_,done,y%v,desc_a,info,data=psb_comm_ovr_) if (info == psb_success_) call psi_ovrl_upd(y%v,desc_a,choice_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') @@ -238,7 +237,7 @@ end subroutine psb_dspsv_vect ! jy - integer(optional). The column offset for ( Y ). Default: 1 ! work(:) - real, optional Working area. ! -subroutine psb_dspsm(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_dspsm(alpha,a,x,beta,y,desc_a,info,& & trans, scale, choice, diag, k, jx, jy, work) use psb_base_mod, psb_protect_name => psb_dspsm use psi_mod @@ -484,7 +483,7 @@ end subroutine psb_dspsm ! d(:) - real, optional Matrix for diagonal scaling. ! work(:) - real, optional Working area. ! -subroutine psb_dspsv(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_dspsv(alpha,a,x,beta,y,desc_a,info,& & trans, scale, choice, diag, work) use psb_base_mod, psb_protect_name => psb_dspsv use psi_mod diff --git a/base/psblas/psb_sabs_vect.f90 b/base/psblas/psb_sabs_vect.f90 index 2eb22d73c..aad75a030 100644 --- a/base/psblas/psb_sabs_vect.f90 +++ b/base/psblas/psb_sabs_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_samax.f90 b/base/psblas/psb_samax.f90 index b2858d965..ca923b94b 100644 --- a/base/psblas/psb_samax.f90 +++ b/base/psblas/psb_samax.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -148,7 +148,7 @@ end function psb_samax !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -371,7 +371,7 @@ end function psb_samax_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,7 +496,7 @@ end subroutine psb_samaxvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -689,11 +689,11 @@ function psb_smin_vect(x, desc_a, info,global) result(res) goto 9999 end if - ! compute local max + ! compute local min if ((desc_a%get_local_rows() > 0).and.(m /= 0)) then res = x%minreal(desc_a%get_local_rows()) else - res = szero + res = HUGE(sone) end if ! compute global min diff --git a/base/psblas/psb_sasum.f90 b/base/psblas/psb_sasum.f90 index 6ca62d244..b4e503d0b 100644 --- a/base/psblas/psb_sasum.f90 +++ b/base/psblas/psb_sasum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -261,7 +261,7 @@ end function psb_sasum_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -391,7 +391,7 @@ end function psb_sasumv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_saxpby.f90 b/base/psblas/psb_saxpby.f90 index 61f71b5a7..f47c866b6 100644 --- a/base/psblas/psb_saxpby.f90 +++ b/base/psblas/psb_saxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -146,7 +146,7 @@ end subroutine psb_saxpby_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -418,7 +418,7 @@ end subroutine psb_saxpby !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -538,7 +538,7 @@ end subroutine psb_saxpbyv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_scmp_vect.f90 b/base/psblas/psb_scmp_vect.f90 index 7a7ff0028..d4678486b 100644 --- a/base/psblas/psb_scmp_vect.f90 +++ b/base/psblas/psb_scmp_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -121,7 +121,7 @@ end subroutine psb_scmp_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sdiv_vect.f90 b/base/psblas/psb_sdiv_vect.f90 index 70bb96d03..223ce77ff 100644 --- a/base/psblas/psb_sdiv_vect.f90 +++ b/base/psblas/psb_sdiv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sdot.f90 b/base/psblas/psb_sdot.f90 index cf0678a71..00671c7d5 100644 --- a/base/psblas/psb_sdot.f90 +++ b/base/psblas/psb_sdot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -301,7 +301,7 @@ end function psb_sdot !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -437,7 +437,7 @@ end function psb_sdotv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -572,7 +572,7 @@ end subroutine psb_sdotvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sgetmatinfo.F90 b/base/psblas/psb_sgetmatinfo.F90 index 5d5ae9c42..25c626ab1 100644 --- a/base/psblas/psb_sgetmatinfo.F90 +++ b/base/psblas/psb_sgetmatinfo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sinv_vect.f90 b/base/psblas/psb_sinv_vect.f90 index f658b1779..757899097 100644 --- a/base/psblas/psb_sinv_vect.f90 +++ b/base/psblas/psb_sinv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_smlt_vect.f90 b/base/psblas/psb_smlt_vect.f90 index 04b3150cb..b9dcff878 100644 --- a/base/psblas/psb_smlt_vect.f90 +++ b/base/psblas/psb_smlt_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_snrm2.f90 b/base/psblas/psb_snrm2.f90 index bb9b3effb..fcc36eaa9 100644 --- a/base/psblas/psb_snrm2.f90 +++ b/base/psblas/psb_snrm2.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -155,7 +155,7 @@ end function psb_snrm2 !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -610,7 +610,7 @@ end function psb_snrm2_weightmask_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_snrmi.f90 b/base/psblas/psb_snrmi.f90 index d48bb5f9a..0f9ba9dae 100644 --- a/base/psblas/psb_snrmi.f90 +++ b/base/psblas/psb_snrmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sspmm.f90 b/base/psblas/psb_sspmm.f90 index e660c3e61..acb656ca3 100644 --- a/base/psblas/psb_sspmm.f90 +++ b/base/psblas/psb_sspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -72,7 +72,7 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me,& & err_act, iix, jjx, iia, jja, nrow, ncol, lldx, lldy, & - & liwork, iiy, jjy, ib, ip, idx + & iiy, jjy, ib, ip, idx integer(psb_lpk_) :: ix, ijx, iy, ijy, m, n, ia, ja integer(psb_ipk_), parameter :: nb=4 real(psb_spk_), pointer :: xp(:), yp(:) @@ -85,8 +85,8 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_), save :: mv_phase1=-1, mv_phase2=-1, mv_phase3=-1, mv_phase4=-1 integer(psb_ipk_), save :: mv_phase11=-1, mv_phase12=-1 - name = 'psb_sspmv_vect' - info = psb_success_ + name='psb_sspmv' + info=psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -94,7 +94,7 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - ctxt = desc_a%get_context() + ctxt=desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then info = psb_err_context_error_ @@ -155,14 +155,12 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy= psb_debug_comp_) & - & write(debug_unit,*) me,' ',trim(name),' Allocated work ', info if (trans_ == 'N') then ! Matrix is not transposed @@ -174,12 +172,14 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(psb_swap_send_,szero,x%v,desc_a,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_send_,& + & szero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(psb_swap_recv_,szero,x%v,desc_a,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_recv_,& + & szero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,sone,y%v,info) @@ -194,7 +194,8 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase11) if (doswap_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),szero,x%v,desc_a,info,data=psb_comm_halo_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & szero,x%v,desc_a,info,data=psb_comm_halo_) end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) @@ -237,8 +238,10 @@ subroutine psb_sspmv_vect(alpha,a,x,beta,y,desc_a,info,& end if if (doswap_) then - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),sone,y%v,desc_a,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),sone,y%v,desc_a,info,data=psb_comm_ovr_) + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& + & sone,y%v,desc_a,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & sone,y%v,desc_a,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -606,7 +609,7 @@ end subroutine psb_sspmm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sspnrm1.f90 b/base/psblas/psb_sspnrm1.f90 index 09ea96fbd..3f1bf39cd 100644 --- a/base/psblas/psb_sspnrm1.f90 +++ b/base/psblas/psb_sspnrm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_sspsm.f90 b/base/psblas/psb_sspsm.f90 index 0299cdfa8..ab2eb9bd9 100644 --- a/base/psblas/psb_sspsm.f90 +++ b/base/psblas/psb_sspsm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -71,35 +71,36 @@ subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& use psi_mod implicit none - real(psb_spk_), intent(in) :: alpha, beta - type(psb_s_vect_type), intent(inout) :: x - type(psb_s_vect_type), intent(inout) :: y - type(psb_sspmat_type), intent(inout) :: a - type(psb_desc_type), intent(in) :: desc_a + real(psb_spk_), intent(in) :: alpha, beta + type(psb_s_vect_type), intent(inout) :: x + type(psb_s_vect_type), intent(inout) :: y + type(psb_sspmat_type), intent(inout) :: a + type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info type(psb_s_vect_type), intent(inout), optional :: diag - character, intent(in), optional :: trans, scale + character, intent(in), optional :: trans, scale integer(psb_ipk_), intent(in), optional :: choice ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, & + integer(psb_ipk_) :: np, me, & & err_act, iix, jjx, ia, ja, iia, jja, lldx,lldy, choice_,& & ix, iy, ik, jx, jy, i, lld,& - & m, nrow, ncol, iiy, jjy, idx, ndm + & m, nrow, ncol, liwork, llwork, iiy, jjy, idx, ndm - character :: lscale - integer(psb_ipk_), parameter :: nb=4 - real(psb_spk_),pointer :: xp(:), yp(:) - character :: itrans - character(len=20) :: name, ch_err - logical :: aliw + character :: lscale + integer(psb_ipk_), parameter :: nb=4 + real(psb_spk_),pointer :: xp(:), yp(:) + character :: itrans + character(len=20) :: name, ch_err + logical :: aliw name = 'psb_sspsv_vect' info = psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then - info = psb_err_internal_error_ ; goto 9999 + info = psb_err_internal_error_ + goto 9999 end if ctxt = desc_a%get_context() @@ -178,9 +179,7 @@ subroutine psb_sspsv_vect(alpha,a,x,beta,y,desc_a,info,& ! update overlap elements if (choice_ > 0) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),sone,y%v,desc_a,info,data=psb_comm_ovr_) - - + call psi_swapdata(psb_comm_status_sync_,sone,y%v,desc_a,info,data=psb_comm_ovr_) if (info == psb_success_) call psi_ovrl_upd(y%v,desc_a,choice_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') @@ -484,7 +483,7 @@ end subroutine psb_sspsm ! d(:) - real, optional Matrix for diagonal scaling. ! work(:) - real, optional Working area. ! -subroutine psb_sspsv(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_sspsv(alpha,a,x,beta,y,desc_a,info,& & trans, scale, choice, diag, work) use psb_base_mod, psb_protect_name => psb_sspsv use psi_mod diff --git a/base/psblas/psb_zabs_vect.f90 b/base/psblas/psb_zabs_vect.f90 index 8c027727f..17d064f8a 100644 --- a/base/psblas/psb_zabs_vect.f90 +++ b/base/psblas/psb_zabs_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zamax.f90 b/base/psblas/psb_zamax.f90 index 79cc6d96d..ff3331e4c 100644 --- a/base/psblas/psb_zamax.f90 +++ b/base/psblas/psb_zamax.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -148,7 +148,7 @@ end function psb_zamax !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -371,7 +371,7 @@ end function psb_zamax_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,7 +496,7 @@ end subroutine psb_zamaxvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zasum.f90 b/base/psblas/psb_zasum.f90 index 63061d0b7..4e07c9970 100644 --- a/base/psblas/psb_zasum.f90 +++ b/base/psblas/psb_zasum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -261,7 +261,7 @@ end function psb_zasum_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -391,7 +391,7 @@ end function psb_zasumv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zaxpby.f90 b/base/psblas/psb_zaxpby.f90 index e47a871d1..df5d7f773 100644 --- a/base/psblas/psb_zaxpby.f90 +++ b/base/psblas/psb_zaxpby.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -146,7 +146,7 @@ end subroutine psb_zaxpby_vect ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -418,7 +418,7 @@ end subroutine psb_zaxpby !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -538,7 +538,7 @@ end subroutine psb_zaxpbyv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zcmp_vect.f90 b/base/psblas/psb_zcmp_vect.f90 index 01e1cecf8..4729b4465 100644 --- a/base/psblas/psb_zcmp_vect.f90 +++ b/base/psblas/psb_zcmp_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zdiv_vect.f90 b/base/psblas/psb_zdiv_vect.f90 index 22d8b21ce..ad4d069d8 100644 --- a/base/psblas/psb_zdiv_vect.f90 +++ b/base/psblas/psb_zdiv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zdot.f90 b/base/psblas/psb_zdot.f90 index 97ecbedf3..0b03c30a6 100644 --- a/base/psblas/psb_zdot.f90 +++ b/base/psblas/psb_zdot.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -301,7 +301,7 @@ end function psb_zdot !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -437,7 +437,7 @@ end function psb_zdotv !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -572,7 +572,7 @@ end subroutine psb_zdotvs !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zgetmatinfo.F90 b/base/psblas/psb_zgetmatinfo.F90 index 7cc3bfaea..cdf74d0e3 100644 --- a/base/psblas/psb_zgetmatinfo.F90 +++ b/base/psblas/psb_zgetmatinfo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zinv_vect.f90 b/base/psblas/psb_zinv_vect.f90 index 593d342b9..b631f2365 100644 --- a/base/psblas/psb_zinv_vect.f90 +++ b/base/psblas/psb_zinv_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zmlt_vect.f90 b/base/psblas/psb_zmlt_vect.f90 index 5db9cdb47..2dc83fd84 100644 --- a/base/psblas/psb_zmlt_vect.f90 +++ b/base/psblas/psb_zmlt_vect.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_znrm2.f90 b/base/psblas/psb_znrm2.f90 index 5612a01db..76f51ffc1 100644 --- a/base/psblas/psb_znrm2.f90 +++ b/base/psblas/psb_znrm2.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -155,7 +155,7 @@ end function psb_znrm2 !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -610,7 +610,7 @@ end function psb_znrm2_weightmask_vect !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_znrmi.f90 b/base/psblas/psb_znrmi.f90 index 9afae6e7f..f1ba036bd 100644 --- a/base/psblas/psb_znrmi.f90 +++ b/base/psblas/psb_znrmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zspmm.f90 b/base/psblas/psb_zspmm.f90 index 8055a7d01..2d687c7b1 100644 --- a/base/psblas/psb_zspmm.f90 +++ b/base/psblas/psb_zspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -72,7 +72,7 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np, me,& & err_act, iix, jjx, iia, jja, nrow, ncol, lldx, lldy, & - & liwork, iiy, jjy, ib, ip, idx + & iiy, jjy, ib, ip, idx integer(psb_lpk_) :: ix, ijx, iy, ijy, m, n, ia, ja integer(psb_ipk_), parameter :: nb=4 complex(psb_dpk_), pointer :: xp(:), yp(:) @@ -85,8 +85,8 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& integer(psb_ipk_), save :: mv_phase1=-1, mv_phase2=-1, mv_phase3=-1, mv_phase4=-1 integer(psb_ipk_), save :: mv_phase11=-1, mv_phase12=-1 - name = 'psb_zspmv_vect' - info = psb_success_ + name='psb_zspmv' + info=psb_success_ call psb_erractionsave(err_act) if (psb_errstatus_fatal()) then info = psb_err_internal_error_ ; goto 9999 @@ -94,7 +94,7 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& debug_unit = psb_get_debug_unit() debug_level = psb_get_debug_level() - ctxt = desc_a%get_context() + ctxt=desc_a%get_context() call psb_info(ctxt, me, np) if (np == -1) then info = psb_err_context_error_ @@ -155,14 +155,12 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy= psb_debug_comp_) & - & write(debug_unit,*) me,' ',trim(name),' Allocated work ', info if (trans_ == 'N') then ! Matrix is not transposed @@ -174,12 +172,14 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) call psi_swapdata(psb_swap_send_,zzero,x%v,desc_a,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_send_,& + & zzero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) if (do_timings) call psb_tic(mv_phase3) - if (doswap_) call psi_swapdata(psb_swap_recv_,zzero,x%v,desc_a,info,data=psb_comm_halo_) + if (doswap_) call psi_swapdata(psb_swap_recv_,& + & zzero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase3) if (do_timings) call psb_tic(mv_phase4) call a%and%spmm(alpha,x%v,zone,y%v,info) @@ -194,7 +194,8 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_tic(mv_phase11) if (doswap_) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),zzero,x%v,desc_a,info,data=psb_comm_halo_) + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & zzero,x%v,desc_a,info,data=psb_comm_halo_) end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) @@ -231,14 +232,16 @@ subroutine psb_zspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (info == psb_success_) call psi_ovrl_restore(x%v,xvsave,desc_a,info) if (info /= psb_success_) then info = psb_err_from_subroutine_ - ch_err = 'psb_csmm' + ch_err='psb_csmm' call psb_errpush(info,name,a_err=ch_err) goto 9999 end if if (doswap_) then - call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),zone,y%v,desc_a,info) - if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),zone,y%v,desc_a,info,data=psb_comm_ovr_) + call psi_swaptran(ior(psb_swap_send_,psb_swap_recv_),& + & zone,y%v,desc_a,info) + if (info == psb_success_) call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & zone,y%v,desc_a,info,data=psb_comm_ovr_) if (debug_level >= psb_debug_comp_) & & write(debug_unit,*) me,' ',trim(name),' swaptran ', info @@ -606,7 +609,7 @@ end subroutine psb_zspmm !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zspnrm1.f90 b/base/psblas/psb_zspnrm1.f90 index cb568ab87..a6dc8e88f 100644 --- a/base/psblas/psb_zspnrm1.f90 +++ b/base/psblas/psb_zspnrm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/psblas/psb_zspsm.f90 b/base/psblas/psb_zspsm.f90 index d48ca3a45..6f0a2797d 100644 --- a/base/psblas/psb_zspsm.f90 +++ b/base/psblas/psb_zspsm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -71,29 +71,29 @@ subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& use psi_mod implicit none - complex(psb_dpk_), intent(in) :: alpha, beta - type(psb_z_vect_type), intent(inout) :: x - type(psb_z_vect_type), intent(inout) :: y - type(psb_zspmat_type), intent(inout) :: a - type(psb_desc_type), intent(in) :: desc_a + complex(psb_dpk_), intent(in) :: alpha, beta + type(psb_z_vect_type), intent(inout) :: x + type(psb_z_vect_type), intent(inout) :: y + type(psb_zspmat_type), intent(inout) :: a + type(psb_desc_type), intent(in) :: desc_a integer(psb_ipk_), intent(out) :: info type(psb_z_vect_type), intent(inout), optional :: diag - character, intent(in), optional :: trans, scale + character, intent(in), optional :: trans, scale integer(psb_ipk_), intent(in), optional :: choice ! locals type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, & + integer(psb_ipk_) :: np, me, & & err_act, iix, jjx, ia, ja, iia, jja, lldx,lldy, choice_,& & ix, iy, ik, jx, jy, i, lld,& - & m, nrow, ncol, iiy, jjy, idx, ndm + & m, nrow, ncol, liwork, llwork, iiy, jjy, idx, ndm - character :: lscale - integer(psb_ipk_), parameter :: nb=4 - complex(psb_dpk_),pointer :: xp(:), yp(:) - character :: itrans - character(len=20) :: name, ch_err - logical :: aliw + character :: lscale + integer(psb_ipk_), parameter :: nb=4 + complex(psb_dpk_),pointer :: xp(:), yp(:) + character :: itrans + character(len=20) :: name, ch_err + logical :: aliw name = 'psb_zspsv_vect' info = psb_success_ @@ -158,8 +158,8 @@ subroutine psb_zspsv_vect(alpha,a,x,beta,y,desc_a,info,& if ((info == 0).and.(lldy 0) then - call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),zone,y%v,desc_a,info,data=psb_comm_ovr_) - - + call psi_swapdata(psb_comm_status_sync_,zone,y%v,desc_a,info,data=psb_comm_ovr_) if (info == psb_success_) call psi_ovrl_upd(y%v,desc_a,choice_,info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Inner updates') @@ -239,7 +237,7 @@ end subroutine psb_zspsv_vect ! jy - integer(optional). The column offset for ( Y ). Default: 1 ! work(:) - complex, optional Working area. ! -subroutine psb_zspsm(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_zspsm(alpha,a,x,beta,y,desc_a,info,& & trans, scale, choice, diag, k, jx, jy, work) use psb_base_mod, psb_protect_name => psb_zspsm use psi_mod @@ -485,7 +483,7 @@ end subroutine psb_zspsm ! d(:) - complex, optional Matrix for diagonal scaling. ! work(:) - complex, optional Working area. ! -subroutine psb_zspsv(alpha,a,x,beta,y,desc_a,info,& +subroutine psb_zspsv(alpha,a,x,beta,y,desc_a,info,& & trans, scale, choice, diag, work) use psb_base_mod, psb_protect_name => psb_zspsv use psi_mod diff --git a/base/serial/impl/psb_c_base_mat_impl.F90 b/base/serial/impl/psb_c_base_mat_impl.F90 index 25cd290a3..e04a742c4 100644 --- a/base/serial/impl/psb_c_base_mat_impl.F90 +++ b/base/serial/impl/psb_c_base_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_coo_impl.F90 b/base/serial/impl/psb_c_coo_impl.F90 index 53ffcea91..3b9ff2758 100644 --- a/base/serial/impl/psb_c_coo_impl.F90 +++ b/base/serial/impl/psb_c_coo_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_csc_impl.F90 b/base/serial/impl/psb_c_csc_impl.F90 index 4073a1ac7..7553ec01b 100644 --- a/base/serial/impl/psb_c_csc_impl.F90 +++ b/base/serial/impl/psb_c_csc_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_csr_impl.F90 b/base/serial/impl/psb_c_csr_impl.F90 index af5812da9..d0fe429d8 100644 --- a/base/serial/impl/psb_c_csr_impl.F90 +++ b/base/serial/impl/psb_c_csr_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_mat_impl.F90 b/base/serial/impl/psb_c_mat_impl.F90 index 81479084f..e796d5431 100644 --- a/base/serial/impl/psb_c_mat_impl.F90 +++ b/base/serial/impl/psb_c_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_c_rb_idx_tree_impl.F90 b/base/serial/impl/psb_c_rb_idx_tree_impl.F90 index 04730aaa2..0a99b6de7 100644 --- a/base/serial/impl/psb_c_rb_idx_tree_impl.F90 +++ b/base/serial/impl/psb_c_rb_idx_tree_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_base_mat_impl.F90 b/base/serial/impl/psb_d_base_mat_impl.F90 index 5f849bea1..0b54601ac 100644 --- a/base/serial/impl/psb_d_base_mat_impl.F90 +++ b/base/serial/impl/psb_d_base_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_coo_impl.F90 b/base/serial/impl/psb_d_coo_impl.F90 index 7a79847eb..99d4e2f63 100644 --- a/base/serial/impl/psb_d_coo_impl.F90 +++ b/base/serial/impl/psb_d_coo_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_csc_impl.F90 b/base/serial/impl/psb_d_csc_impl.F90 index e91285cd0..d11cd14da 100644 --- a/base/serial/impl/psb_d_csc_impl.F90 +++ b/base/serial/impl/psb_d_csc_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_csr_impl.F90 b/base/serial/impl/psb_d_csr_impl.F90 index 5ff34a2f6..763bd4f22 100644 --- a/base/serial/impl/psb_d_csr_impl.F90 +++ b/base/serial/impl/psb_d_csr_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_mat_impl.F90 b/base/serial/impl/psb_d_mat_impl.F90 index c744f7f5b..9b6fe8795 100644 --- a/base/serial/impl/psb_d_mat_impl.F90 +++ b/base/serial/impl/psb_d_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_d_rb_idx_tree_impl.F90 b/base/serial/impl/psb_d_rb_idx_tree_impl.F90 index 241338fb3..62af7430c 100644 --- a/base/serial/impl/psb_d_rb_idx_tree_impl.F90 +++ b/base/serial/impl/psb_d_rb_idx_tree_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_base_mat_impl.F90 b/base/serial/impl/psb_s_base_mat_impl.F90 index c070e7167..7fe841e3f 100644 --- a/base/serial/impl/psb_s_base_mat_impl.F90 +++ b/base/serial/impl/psb_s_base_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_coo_impl.F90 b/base/serial/impl/psb_s_coo_impl.F90 index b4e6a8df9..d03103f81 100644 --- a/base/serial/impl/psb_s_coo_impl.F90 +++ b/base/serial/impl/psb_s_coo_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_csc_impl.F90 b/base/serial/impl/psb_s_csc_impl.F90 index 9dd32d589..dec7ccfb2 100644 --- a/base/serial/impl/psb_s_csc_impl.F90 +++ b/base/serial/impl/psb_s_csc_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_csr_impl.F90 b/base/serial/impl/psb_s_csr_impl.F90 index a7dd2c159..92bdc0f02 100644 --- a/base/serial/impl/psb_s_csr_impl.F90 +++ b/base/serial/impl/psb_s_csr_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_mat_impl.F90 b/base/serial/impl/psb_s_mat_impl.F90 index a27a24a5d..dda59ee8e 100644 --- a/base/serial/impl/psb_s_mat_impl.F90 +++ b/base/serial/impl/psb_s_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_s_rb_idx_tree_impl.F90 b/base/serial/impl/psb_s_rb_idx_tree_impl.F90 index 5241225ea..88e4fc82c 100644 --- a/base/serial/impl/psb_s_rb_idx_tree_impl.F90 +++ b/base/serial/impl/psb_s_rb_idx_tree_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_base_mat_impl.F90 b/base/serial/impl/psb_z_base_mat_impl.F90 index 2d68d1527..b488fd0da 100644 --- a/base/serial/impl/psb_z_base_mat_impl.F90 +++ b/base/serial/impl/psb_z_base_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_coo_impl.F90 b/base/serial/impl/psb_z_coo_impl.F90 index 949d0384c..d7439be9d 100644 --- a/base/serial/impl/psb_z_coo_impl.F90 +++ b/base/serial/impl/psb_z_coo_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_csc_impl.F90 b/base/serial/impl/psb_z_csc_impl.F90 index 4a06d8d83..c987996ee 100644 --- a/base/serial/impl/psb_z_csc_impl.F90 +++ b/base/serial/impl/psb_z_csc_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_csr_impl.F90 b/base/serial/impl/psb_z_csr_impl.F90 index 9f6c9b941..17dbd4abc 100644 --- a/base/serial/impl/psb_z_csr_impl.F90 +++ b/base/serial/impl/psb_z_csr_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_mat_impl.F90 b/base/serial/impl/psb_z_mat_impl.F90 index e1f9310b1..ee1895177 100644 --- a/base/serial/impl/psb_z_mat_impl.F90 +++ b/base/serial/impl/psb_z_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/impl/psb_z_rb_idx_tree_impl.F90 b/base/serial/impl/psb_z_rb_idx_tree_impl.F90 index 42695158e..26b4d88e5 100644 --- a/base/serial/impl/psb_z_rb_idx_tree_impl.F90 +++ b/base/serial/impl/psb_z_rb_idx_tree_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_camax_s.f90 b/base/serial/psb_camax_s.f90 index d9073d0f9..99f51840d 100644 --- a/base/serial/psb_camax_s.f90 +++ b/base/serial/psb_camax_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_casum_s.f90 b/base/serial/psb_casum_s.f90 index 1c357cc89..32977f2f3 100644 --- a/base/serial/psb_casum_s.f90 +++ b/base/serial/psb_casum_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_cgeprt.f90 b/base/serial/psb_cgeprt.f90 index e05d673b6..1ec98f32f 100644 --- a/base/serial/psb_cgeprt.f90 +++ b/base/serial/psb_cgeprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_cnumbmm.f90 b/base/serial/psb_cnumbmm.f90 index 920187b3d..9559ad44d 100644 --- a/base/serial/psb_cnumbmm.f90 +++ b/base/serial/psb_cnumbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_crwextd.f90 b/base/serial/psb_crwextd.f90 index 9676ad247..243f91535 100644 --- a/base/serial/psb_crwextd.f90 +++ b/base/serial/psb_crwextd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_cspspmm.F90 b/base/serial/psb_cspspmm.F90 index 64fedbfea..e7ab8ec20 100644 --- a/base/serial/psb_cspspmm.F90 +++ b/base/serial/psb_cspspmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_csymbmm.f90 b/base/serial/psb_csymbmm.f90 index 0f8c18ab8..519b1689c 100644 --- a/base/serial/psb_csymbmm.f90 +++ b/base/serial/psb_csymbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_damax_s.f90 b/base/serial/psb_damax_s.f90 index 66aef2882..372dd3082 100644 --- a/base/serial/psb_damax_s.f90 +++ b/base/serial/psb_damax_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dasum_s.f90 b/base/serial/psb_dasum_s.f90 index 1ab42614f..88b7925ea 100644 --- a/base/serial/psb_dasum_s.f90 +++ b/base/serial/psb_dasum_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dgeprt.f90 b/base/serial/psb_dgeprt.f90 index ae4c5b11c..6d1a540d6 100644 --- a/base/serial/psb_dgeprt.f90 +++ b/base/serial/psb_dgeprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dnumbmm.f90 b/base/serial/psb_dnumbmm.f90 index 4719b2bc7..6763774e6 100644 --- a/base/serial/psb_dnumbmm.f90 +++ b/base/serial/psb_dnumbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_drwextd.f90 b/base/serial/psb_drwextd.f90 index 70c73f831..5b7dab4db 100644 --- a/base/serial/psb_drwextd.f90 +++ b/base/serial/psb_drwextd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dspspmm.F90 b/base/serial/psb_dspspmm.F90 index 4b37df0e7..e2b394ad9 100644 --- a/base/serial/psb_dspspmm.F90 +++ b/base/serial/psb_dspspmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_dsymbmm.f90 b/base/serial/psb_dsymbmm.f90 index d647d2707..b892ecbab 100644 --- a/base/serial/psb_dsymbmm.f90 +++ b/base/serial/psb_dsymbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_samax_s.f90 b/base/serial/psb_samax_s.f90 index f2b1fee2c..df39aa244 100644 --- a/base/serial/psb_samax_s.f90 +++ b/base/serial/psb_samax_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_sasum_s.f90 b/base/serial/psb_sasum_s.f90 index c692cbd48..e7307d772 100644 --- a/base/serial/psb_sasum_s.f90 +++ b/base/serial/psb_sasum_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_sgeprt.f90 b/base/serial/psb_sgeprt.f90 index 9f3205fdf..b3afeb855 100644 --- a/base/serial/psb_sgeprt.f90 +++ b/base/serial/psb_sgeprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_snumbmm.f90 b/base/serial/psb_snumbmm.f90 index 99075a8b5..8cc1c38dd 100644 --- a/base/serial/psb_snumbmm.f90 +++ b/base/serial/psb_snumbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_srwextd.f90 b/base/serial/psb_srwextd.f90 index 3ecd7a8e9..4cceb8f57 100644 --- a/base/serial/psb_srwextd.f90 +++ b/base/serial/psb_srwextd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_sspspmm.F90 b/base/serial/psb_sspspmm.F90 index bc3352ee7..5ab8b62a9 100644 --- a/base/serial/psb_sspspmm.F90 +++ b/base/serial/psb_sspspmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_ssymbmm.f90 b/base/serial/psb_ssymbmm.f90 index d76b48ea3..97108ee11 100644 --- a/base/serial/psb_ssymbmm.f90 +++ b/base/serial/psb_ssymbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zamax_s.f90 b/base/serial/psb_zamax_s.f90 index 4a4085664..2adca0c5b 100644 --- a/base/serial/psb_zamax_s.f90 +++ b/base/serial/psb_zamax_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zasum_s.f90 b/base/serial/psb_zasum_s.f90 index 35a043ed9..13fdc6f1b 100644 --- a/base/serial/psb_zasum_s.f90 +++ b/base/serial/psb_zasum_s.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zgeprt.f90 b/base/serial/psb_zgeprt.f90 index 3fc0eb0c2..3788600d1 100644 --- a/base/serial/psb_zgeprt.f90 +++ b/base/serial/psb_zgeprt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_znumbmm.f90 b/base/serial/psb_znumbmm.f90 index 31b8f6b28..30fee807a 100644 --- a/base/serial/psb_znumbmm.f90 +++ b/base/serial/psb_znumbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zrwextd.f90 b/base/serial/psb_zrwextd.f90 index 393a3d9d4..c8cd0e43d 100644 --- a/base/serial/psb_zrwextd.f90 +++ b/base/serial/psb_zrwextd.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zspspmm.F90 b/base/serial/psb_zspspmm.F90 index a37bd013f..b7faf46aa 100644 --- a/base/serial/psb_zspspmm.F90 +++ b/base/serial/psb_zspspmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psb_zsymbmm.f90 b/base/serial/psb_zsymbmm.f90 index 9c31b0e73..a9703d446 100644 --- a/base/serial/psb_zsymbmm.f90 +++ b/base/serial/psb_zsymbmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_c_serial_impl.F90 b/base/serial/psi_c_serial_impl.F90 index d6706c887..441211e54 100644 --- a/base/serial/psi_c_serial_impl.F90 +++ b/base/serial/psi_c_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_cgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_cgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_d_serial_impl.F90 b/base/serial/psi_d_serial_impl.F90 index 772f28ea8..aafd9d983 100644 --- a/base/serial/psi_d_serial_impl.F90 +++ b/base/serial/psi_d_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_dgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_dgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_e_serial_impl.F90 b/base/serial/psi_e_serial_impl.F90 index 10ea49cf7..5ede8afbf 100644 --- a/base/serial/psi_e_serial_impl.F90 +++ b/base/serial/psi_e_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_egelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_egelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_i2_serial_impl.F90 b/base/serial/psi_i2_serial_impl.F90 index ae6ee65a6..8eccd73c9 100644 --- a/base/serial/psi_i2_serial_impl.F90 +++ b/base/serial/psi_i2_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_i2gelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_i2gelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_m_serial_impl.F90 b/base/serial/psi_m_serial_impl.F90 index 25eaca324..0b6a69831 100644 --- a/base/serial/psi_m_serial_impl.F90 +++ b/base/serial/psi_m_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_mgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_mgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_s_serial_impl.F90 b/base/serial/psi_s_serial_impl.F90 index 6baa8dd75..580975c10 100644 --- a/base/serial/psi_s_serial_impl.F90 +++ b/base/serial/psi_s_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_sgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_sgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/psi_z_serial_impl.F90 b/base/serial/psi_z_serial_impl.F90 index dcd02540b..7292320e8 100644 --- a/base/serial/psi_z_serial_impl.F90 +++ b/base/serial/psi_z_serial_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -230,7 +230,7 @@ end subroutine psb_m_zgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -431,7 +431,7 @@ end subroutine psb_e_zgelp !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_c_hsort_impl.f90 b/base/serial/sort/psb_c_hsort_impl.f90 index 4251ddaad..674ff8d47 100644 --- a/base/serial/sort/psb_c_hsort_impl.f90 +++ b/base/serial/sort/psb_c_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_c_isort_impl.f90 b/base/serial/sort/psb_c_isort_impl.f90 index 0251d37e2..cf3857ad6 100644 --- a/base/serial/sort/psb_c_isort_impl.f90 +++ b/base/serial/sort/psb_c_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_c_msort_impl.f90 b/base/serial/sort/psb_c_msort_impl.f90 index e61ee9e1e..e94fcd7ab 100644 --- a/base/serial/sort/psb_c_msort_impl.f90 +++ b/base/serial/sort/psb_c_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_c_qsort_impl.f90 b/base/serial/sort/psb_c_qsort_impl.f90 index 0111e9c23..300b3fec4 100644 --- a/base/serial/sort/psb_c_qsort_impl.f90 +++ b/base/serial/sort/psb_c_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_d_hsort_impl.f90 b/base/serial/sort/psb_d_hsort_impl.f90 index dac327d16..7f5a48bda 100644 --- a/base/serial/sort/psb_d_hsort_impl.f90 +++ b/base/serial/sort/psb_d_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_d_isort_impl.f90 b/base/serial/sort/psb_d_isort_impl.f90 index 62b6eed14..da6338709 100644 --- a/base/serial/sort/psb_d_isort_impl.f90 +++ b/base/serial/sort/psb_d_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_d_msort_impl.f90 b/base/serial/sort/psb_d_msort_impl.f90 index 7c38f27dc..43ef089ff 100644 --- a/base/serial/sort/psb_d_msort_impl.f90 +++ b/base/serial/sort/psb_d_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_d_qsort_impl.f90 b/base/serial/sort/psb_d_qsort_impl.f90 index c397ba233..6cd35eb01 100644 --- a/base/serial/sort/psb_d_qsort_impl.f90 +++ b/base/serial/sort/psb_d_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_e_hsort_impl.f90 b/base/serial/sort/psb_e_hsort_impl.f90 index 8fa00a834..7d9d6104b 100644 --- a/base/serial/sort/psb_e_hsort_impl.f90 +++ b/base/serial/sort/psb_e_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_e_isort_impl.f90 b/base/serial/sort/psb_e_isort_impl.f90 index 20d3600ca..68c1d35d6 100644 --- a/base/serial/sort/psb_e_isort_impl.f90 +++ b/base/serial/sort/psb_e_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_e_msort_impl.f90 b/base/serial/sort/psb_e_msort_impl.f90 index 93ac8a6eb..beeabf5a0 100644 --- a/base/serial/sort/psb_e_msort_impl.f90 +++ b/base/serial/sort/psb_e_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_e_qsort_impl.f90 b/base/serial/sort/psb_e_qsort_impl.f90 index ea3bfd140..9057ff36f 100644 --- a/base/serial/sort/psb_e_qsort_impl.f90 +++ b/base/serial/sort/psb_e_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_i2_hsort_impl.f90 b/base/serial/sort/psb_i2_hsort_impl.f90 new file mode 100644 index 000000000..06fff6bae --- /dev/null +++ b/base/serial/sort/psb_i2_hsort_impl.f90 @@ -0,0 +1,721 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! The merge-sort and quicksort routines are implemented in the +! serial/aux directory +! References: +! D. Knuth +! The Art of Computer Programming, vol. 3 +! Addison-Wesley +! +! Aho, Hopcroft, Ullman +! Data Structures and Algorithms +! Addison-Wesley +! +subroutine psb_i2hsort(x,ix,dir,flag,reord) + use psb_sort_mod, psb_protect_name => psb_i2hsort + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord + integer(psb_ipk_), optional, intent(inout) :: ix(:) + + integer(psb_ipk_) :: flag_, err_act, info, reord_ + integer(psb_ipk_) :: n, i, l, dir_ + integer(psb_i2pk_) :: key + integer(psb_ipk_) :: index + integer(psb_i2pk_), allocatable :: tx(:) + + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_hsort' + call psb_erractionsave(err_act) + + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + + if (present(flag)) then + flag_ = flag + else + flag_ = psb_sort_ovw_idx_ + end if + select case(flag_) + case( psb_sort_ovw_idx_, psb_sort_keep_idx_) + ! OK keep going + case default + ierr(1) = 4; ierr(2) = flag_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + if (present(dir)) then + dir_ = dir + else + dir_= psb_sort_up_ + end if + + select case(dir_) + case(psb_sort_up_,psb_sort_down_) + ! OK + case (psb_asort_up_,psb_asort_down_) + ! OK + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + n = size(x) + + ! + ! Dirty trick to sort with heaps: if we want + ! to sort in place upwards, first we set up a heap so that + ! we can easily get the LARGEST element, then we take it out + ! and put it in the last entry, and so on. + ! So, we invert dir_ + ! + dir_ = -dir_ + + if (present(ix)) then + if (size(ix) < n) then + ierr(1) = 2; ierr(2) = size(ix); + call psb_errpush(psb_err_input_asize_invalid_i_,name,i_err=ierr) + goto 9999 + end if + if (flag_ == psb_sort_ovw_idx_) then + do i=1, n + ix(i) = i + end do + end if + select case(reord_) + case (psb_sort_reord_x_) + + l = 0 + do i=1, n + key = x(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + ix(i) = index + end do + case(psb_sort_noreord_x_) + tx = x + + l = 0 + do i=1, n + key = tx(i) + index = ix(i) + call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ' + end if + end do + do i=n, 2, -1 + call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + tx(i) = key + ix(i) = index + end do + end select + else if (.not.present(ix)) then + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + l = 0 + do i=1, n + key = x(i) + call psi_insert_heap(key,l,x,dir_,info) + if (l /= i) then + write(psb_err_unit,*) 'Mismatch while heapifying ! ',l,i + end if + end do + do i=n, 2, -1 + call psi_i2_heap_get_first(key,l,x,dir_,info) + if (l /= i-1) then + write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i + end if + x(i) = key + end do + end if + + + return + +9999 call psb_error_handler(err_act) + + return +end subroutine psb_i2hsort + + + +! +! These are packaged so that they can be used to implement +! a heapsort. +! +! +! Programming note: +! In the implementation of the heap_get_first function +! we have code like this +! +! if ( ( heap(2*i) < heap(2*i+1) ) .or.& +! & (2*i == last)) then +! j = 2*i +! else +! j = 2*i + 1 +! end if +! +! It looks like the 2*i+1 could overflow the array, but this +! is not true because there is a guard statement +! if (i>last/2) exit +! and because last has just been reduced by 1 when defining the return value, +! therefore 2*i+1 may be greater than the current value of last, +! but cannot be greater than the value of last when the routine was entered +! hence it is safe. +! +! +! + +subroutine psi_i2_insert_heap(key,last,heap,dir,info) + use psb_sort_mod, psb_protect_name => psi_i2_insert_heap + implicit none + + ! + ! Input: + ! key: the new value + ! last: pointer to the last occupied element in heap + ! heap: the heap + ! dir: sorting direction + + integer(psb_i2pk_), intent(in) :: key + integer(psb_ipk_), intent(in) :: dir + integer(psb_i2pk_), intent(inout) :: heap(:) + integer(psb_ipk_), intent(inout) :: last + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, i2 + integer(psb_i2pk_) :: temp + + info = psb_success_ + if (last < 0) then + write(psb_err_unit,*) 'Invalid last in heap ',last + info = last + return + endif + last = last + 1 + if (last > size(heap)) then + write(psb_err_unit,*) 'out of bounds ' + info = -1 + return + end if + i = last + heap(i) = key + + select case(dir) + case (psb_sort_up_) + + do + if (i<=1) exit + i2 = i/2 + if (heap(i) < heap(i2)) then + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case (psb_sort_down_) + + do + if (i<=1) exit + i2 = i/2 + if (heap(i) > heap(i2)) then + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + case (psb_asort_up_) + + do + if (i<=1) exit + i2 = i/2 + if (abs(heap(i)) < abs(heap(i2))) then + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case (psb_asort_down_) + + do + if (i<=1) exit + i2 = i/2 + if (abs(heap(i)) > abs(heap(i2))) then + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case default + write(psb_err_unit,*) 'Invalid direction in heap ',dir + end select + + return +end subroutine psi_i2_insert_heap + + +subroutine psi_i2_heap_get_first(key,last,heap,dir,info) + use psb_sort_mod, psb_protect_name => psi_i2_heap_get_first + implicit none + + integer(psb_i2pk_), intent(inout) :: key + integer(psb_ipk_), intent(inout) :: last + integer(psb_ipk_), intent(in) :: dir + integer(psb_i2pk_), intent(inout) :: heap(:) + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: i, j + integer(psb_i2pk_) :: temp + + + info = psb_success_ + if (last <= 0) then + key = 0 + info = -1 + return + endif + + key = heap(1) + heap(1) = heap(last) + last = last - 1 + + select case(dir) + case (psb_sort_up_) + + i = 1 + do + if (i > (last/2)) exit + if ( (heap(2*i) < heap(2*i+1)) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (heap(i) > heap(j)) then + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + + case (psb_sort_down_) + + i = 1 + do + if (i > (last/2)) exit + if ( (heap(2*i) > heap(2*i+1)) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (heap(i) < heap(j)) then + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + case (psb_asort_up_) + + i = 1 + do + if (i > (last/2)) exit + if ( (abs(heap(2*i)) < abs(heap(2*i+1))) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (abs(heap(i)) > abs(heap(j))) then + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + + case (psb_asort_down_) + + i = 1 + do + if (i > (last/2)) exit + if ( (abs(heap(2*i)) > abs(heap(2*i+1))) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (abs(heap(i)) < abs(heap(j))) then + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + case default + write(psb_err_unit,*) 'Invalid direction in heap ',dir + end select + + return +end subroutine psi_i2_heap_get_first + + +subroutine psi_i2_idx_insert_heap(key,index,last,heap,idxs,dir,info) + use psb_sort_mod, psb_protect_name => psi_i2_idx_insert_heap + + implicit none + ! + ! Input: + ! key: the new value + ! index: the new index + ! last: pointer to the last occupied element in heap + ! heap: the heap + ! idxs: the indices + ! dir: sorting direction + + integer(psb_i2pk_), intent(in) :: key + integer(psb_ipk_), intent(in) :: index,dir + integer(psb_i2pk_), intent(inout) :: heap(:) + integer(psb_ipk_), intent(inout) :: idxs(:),last + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, i2, itemp + integer(psb_i2pk_) :: temp + + info = psb_success_ + if (last < 0) then + write(psb_err_unit,*) 'Invalid last in heap ',last + info = last + return + endif + + last = last + 1 + if (last > size(heap)) then + write(psb_err_unit,*) 'out of bounds ' + info = -1 + return + end if + + i = last + heap(i) = key + idxs(i) = index + + select case(dir) + case (psb_sort_up_) + + do + if (i<=1) exit + i2 = i/2 + if (heap(i) < heap(i2)) then + itemp = idxs(i) + idxs(i) = idxs(i2) + idxs(i2) = itemp + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case (psb_sort_down_) + + do + if (i<=1) exit + i2 = i/2 + if (heap(i) > heap(i2)) then + itemp = idxs(i) + idxs(i) = idxs(i2) + idxs(i2) = itemp + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + case (psb_asort_up_) + + do + if (i<=1) exit + i2 = i/2 + if (abs(heap(i)) < abs(heap(i2))) then + itemp = idxs(i) + idxs(i) = idxs(i2) + idxs(i2) = itemp + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case (psb_asort_down_) + + do + if (i<=1) exit + i2 = i/2 + if (abs(heap(i)) > abs(heap(i2))) then + itemp = idxs(i) + idxs(i) = idxs(i2) + idxs(i2) = itemp + temp = heap(i) + heap(i) = heap(i2) + heap(i2) = temp + i = i2 + else + exit + end if + end do + + + case default + write(psb_err_unit,*) 'Invalid direction in heap ',dir + end select + + return +end subroutine psi_i2_idx_insert_heap + +subroutine psi_i2_idx_heap_get_first(key,index,last,heap,idxs,dir,info) + use psb_sort_mod, psb_protect_name => psi_i2_idx_heap_get_first + implicit none + + integer(psb_i2pk_), intent(inout) :: key + integer(psb_i2pk_), intent(inout) :: heap(:) + integer(psb_ipk_), intent(out) :: index + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), intent(inout) :: last,idxs(:) + integer(psb_ipk_), intent(in) :: dir + + integer(psb_ipk_) :: i, j,itemp + integer(psb_i2pk_) :: temp + + info = psb_success_ + if (last <= 0) then + key = 0 + index = 0 + info = -1 + return + endif + + key = heap(1) + index = idxs(1) + heap(1) = heap(last) + idxs(1) = idxs(last) + last = last - 1 + + select case(dir) + case (psb_sort_up_) + + i = 1 + do + if (i > (last/2)) exit + if ( (heap(2*i) < heap(2*i+1)) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (heap(i) > heap(j)) then + itemp = idxs(i) + idxs(i) = idxs(j) + idxs(j) = itemp + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + + case (psb_sort_down_) + + i = 1 + do + if (i > (last/2)) exit + if ( (heap(2*i) > heap(2*i+1)) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (heap(i) < heap(j)) then + itemp = idxs(i) + idxs(i) = idxs(j) + idxs(j) = itemp + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + case (psb_asort_up_) + + i = 1 + do + if (i > (last/2)) exit + if ( (abs(heap(2*i)) < abs(heap(2*i+1))) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (abs(heap(i)) > abs(heap(j))) then + itemp = idxs(i) + idxs(i) = idxs(j) + idxs(j) = itemp + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + + case (psb_asort_down_) + + i = 1 + do + if (i > (last/2)) exit + if ( (abs(heap(2*i)) > abs(heap(2*i+1))) .or.& + & (2*i == last)) then + j = 2*i + else + j = 2*i + 1 + end if + + if (abs(heap(i)) < abs(heap(j))) then + itemp = idxs(i) + idxs(i) = idxs(j) + idxs(j) = itemp + temp = heap(i) + heap(i) = heap(j) + heap(j) = temp + i = j + else + exit + end if + end do + + case default + write(psb_err_unit,*) 'Invalid direction in heap ',dir + end select + + return +end subroutine psi_i2_idx_heap_get_first + + + + diff --git a/base/serial/sort/psb_i2_isort_impl.f90 b/base/serial/sort/psb_i2_isort_impl.f90 new file mode 100644 index 000000000..f582d2689 --- /dev/null +++ b/base/serial/sort/psb_i2_isort_impl.f90 @@ -0,0 +1,378 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! The insertion sort routines +! References: +! D. Knuth +! The Art of Computer Programming, vol. 3 +! Addison-Wesley +! +! Aho, Hopcroft, Ullman +! Data Structures and Algorithms +! Addison-Wesley +! +subroutine psb_i2isort(x,ix,dir,flag,reord) + use psb_sort_mod, psb_protect_name => psb_i2isort + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord + integer(psb_ipk_), optional, intent(inout) :: ix(:) + + integer(psb_ipk_) :: dir_, flag_, err_act, reord_ + integer(psb_ipk_) :: n, i + integer(psb_i2pk_), allocatable :: tx(:) + + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_i2isort' + call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + + if (present(flag)) then + flag_ = flag + else + flag_ = psb_sort_ovw_idx_ + end if + select case(flag_) + case( psb_sort_ovw_idx_, psb_sort_keep_idx_) + ! OK keep going + case default + ierr(1) = 4; ierr(2) = flag_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + if (present(dir)) then + dir_ = dir + else + dir_= psb_sort_up_ + end if + + n = size(x) + + if (present(ix)) then + if (size(ix) < n) then + ierr(1) = 2; ierr(2) = size(ix); + call psb_errpush(psb_err_input_asize_invalid_i_,name,i_err=ierr) + goto 9999 + end if + if (flag_==psb_sort_ovw_idx_) then + do i=1,n + ix(i) = i + end do + end if + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_i2isrx_up(n,x,ix) + case (psb_sort_down_) + call psi_i2isrx_dw(n,x,ix) + case (psb_asort_up_) + call psi_i2aisrx_up(n,x,ix) + case (psb_asort_down_) + call psi_i2aisrx_dw(n,x,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_i2isrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_i2isrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_i2aisrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_i2aisrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + select case(dir_) + case (psb_sort_up_) + call psi_i2isr_up(n,x) + case (psb_sort_down_) + call psi_i2isr_dw(n,x) + case (psb_asort_up_) + call psi_i2aisr_up(n,x) + case (psb_asort_down_) + call psi_i2aisr_dw(n,x) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + end if + + return + +9999 call psb_error_handler(err_act) + + return +end subroutine psb_i2isort + +subroutine psi_i2isrx_up(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2isrx_up + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j,ix + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (x(j+1) < x(j)) then + xx = x(j) + ix = idx(j) + i=j+1 + do + x(i-1) = x(i) + idx(i-1) = idx(i) + i = i+1 + if (i>n) exit + if (x(i) >= xx) exit + end do + x(i-1) = xx + idx(i-1) = ix + endif + enddo +end subroutine psi_i2isrx_up + +subroutine psi_i2isrx_dw(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2isrx_dw + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j,ix + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (x(j+1) > x(j)) then + xx = x(j) + ix = idx(j) + i=j+1 + do + x(i-1) = x(i) + idx(i-1) = idx(i) + i = i+1 + if (i>n) exit + if (x(i) <= xx) exit + end do + x(i-1) = xx + idx(i-1) = ix + endif + enddo +end subroutine psi_i2isrx_dw + + +subroutine psi_i2isr_up(n,x) + use psb_sort_mod, psb_protect_name => psi_i2isr_up + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (x(j+1) < x(j)) then + xx = x(j) + i=j+1 + do + x(i-1) = x(i) + i = i+1 + if (i>n) exit + if (x(i) >= xx) exit + end do + x(i-1) = xx + endif + enddo +end subroutine psi_i2isr_up + +subroutine psi_i2isr_dw(n,x) + use psb_sort_mod, psb_protect_name => psi_i2isr_dw + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (x(j+1) > x(j)) then + xx = x(j) + i=j+1 + do + x(i-1) = x(i) + i = i+1 + if (i>n) exit + if (x(i) <= xx) exit + end do + x(i-1) = xx + endif + enddo +end subroutine psi_i2isr_dw + +subroutine psi_i2aisrx_up(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2aisrx_up + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j,ix + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (abs(x(j+1)) < abs(x(j))) then + xx = x(j) + ix = idx(j) + i=j+1 + do + x(i-1) = x(i) + idx(i-1) = idx(i) + i = i+1 + if (i>n) exit + if (abs(x(i)) >= abs(xx)) exit + end do + x(i-1) = xx + idx(i-1) = ix + endif + enddo +end subroutine psi_i2aisrx_up + +subroutine psi_i2aisrx_dw(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2aisrx_dw + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j,ix + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (abs(x(j+1)) > abs(x(j))) then + xx = x(j) + ix = idx(j) + i=j+1 + do + x(i-1) = x(i) + idx(i-1) = idx(i) + i = i+1 + if (i>n) exit + if (abs(x(i)) <= abs(xx)) exit + end do + x(i-1) = xx + idx(i-1) = ix + endif + enddo +end subroutine psi_i2aisrx_dw + +subroutine psi_i2aisr_up(n,x) + use psb_sort_mod, psb_protect_name => psi_i2aisr_up + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (abs(x(j+1)) < abs(x(j))) then + xx = x(j) + i=j+1 + do + x(i-1) = x(i) + i = i+1 + if (i>n) exit + if (abs(x(i)) >= abs(xx)) exit + end do + x(i-1) = xx + endif + enddo +end subroutine psi_i2aisr_up + +subroutine psi_i2aisr_dw(n,x) + use psb_sort_mod, psb_protect_name => psi_i2aisr_dw + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + integer(psb_ipk_) :: i,j + integer(psb_i2pk_) :: xx + + do j=n-1,1,-1 + if (abs(x(j+1)) > abs(x(j))) then + xx = x(j) + i=j+1 + do + x(i-1) = x(i) + i = i+1 + if (i>n) exit + if (abs(x(i)) <= abs(xx)) exit + end do + x(i-1) = xx + endif + enddo +end subroutine psi_i2aisr_dw + diff --git a/base/serial/sort/psb_i2_msort_impl.f90 b/base/serial/sort/psb_i2_msort_impl.f90 new file mode 100644 index 000000000..67835351d --- /dev/null +++ b/base/serial/sort/psb_i2_msort_impl.f90 @@ -0,0 +1,667 @@ + ! + ! Parallel Sparse BLAS version 3.5 + ! (C) Copyright 2006-2018 + ! Salvatore Filippone + ! Alfredo Buttari + ! + ! Redistribution and use in source and binary forms, with or without + ! modification, are permitted provided that the following conditions + ! are met: + ! 1. Redistributions of source code must retain the above copyright + ! notice, this list of conditions and the following disclaimer. + ! 2. Redistributions in binary form must reproduce the above copyright + ! notice, this list of conditions, and the following disclaimer in the + ! documentation and/or other materials provided with the distribution. + ! 3. The name of the PSBLAS group or the names of its contributors may + ! not be used to endorse or promote products derived from this + ! software without specific prior written permission. + ! + ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + ! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS + ! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ! POSSIBILITY OF SUCH DAMAGE. + ! + ! + ! + ! The merge-sort routines + ! References: + ! D. Knuth + ! The Art of Computer Programming, vol. 3 + ! Addison-Wesley + ! + ! Aho, Hopcroft, Ullman + ! Data Structures and Algorithms + ! Addison-Wesley + ! +logical function psb_i2isaperm(n,eip) + use psb_sort_mod, psb_protect_name => psb_i2isaperm + implicit none + + integer(psb_i2pk_), intent(in) :: n + integer(psb_i2pk_), intent(in) :: eip(n) + integer(psb_i2pk_), allocatable :: ip(:) + integer(psb_i2pk_) :: i,j,m, info + + + psb_i2isaperm = .true. + if (n <= 0) return + allocate(ip(n), stat=info) + if (info /= psb_success_) return + ! + ! sanity check first + ! + do i=1, n + ip(i) = eip(i) + if ((ip(i) < 1).or.(ip(i) > n)) then + write(psb_err_unit,*) 'Out of bounds in isaperm' ,ip(i), n + psb_i2isaperm = .false. + return + endif + enddo + + ! + ! now work through the cycles, by marking each successive item as negative. + ! no cycle should intersect with any other, hence the >= 1 check. + ! + do m = 1, n + i = ip(m) + if (i < 0) then + ip(m) = -i + else if (i /= m) then + j = ip(i) + ip(i) = -j + i = j + do while ((j >= 1).and.(j /= m)) + j = ip(i) + ip(i) = -j + i = j + enddo + ip(m) = abs(ip(m)) + if (j /= m) then + psb_i2isaperm = .false. + goto 9999 + endif + end if + enddo +9999 continue + + return +end function psb_i2isaperm + + +subroutine psb_i2msort_u(x,nout,dir) + use psb_sort_mod, psb_protect_name => psb_i2msort_u + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: nout + integer(psb_ipk_), optional, intent(in) :: dir + + integer(psb_ipk_) :: n, k + integer(psb_ipk_) :: err_act + + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_msort_u' + call psb_erractionsave(err_act) + + n = size(x) + + call psb_msort(x,dir=dir) + nout = min(1,n) + do k=2,n + if (x(k) /= x(nout)) then + nout = nout + 1 + x(nout) = x(k) + endif + enddo + + return + +9999 call psb_error_handler(err_act) + + return +end subroutine psb_i2msort_u + +subroutine psb_i2msort(x,ix,dir,flag,reord) + use psb_sort_mod, psb_protect_name => psb_i2msort + use psb_error_mod + use psb_ip_reord_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), optional, intent(in) :: dir, flag, reord + integer(psb_ipk_), optional, intent(inout) :: ix(:) + + integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_ + + integer(psb_ipk_), allocatable :: iaux(:) + integer(psb_ipk_) :: iret, info, i + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_i2msort' + call psb_erractionsave(err_act) + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(dir)) then + dir_ = dir + else + dir_= psb_sort_up_ + end if + select case(dir_) + case( psb_sort_up_, psb_sort_down_, psb_asort_up_, psb_asort_down_) + ! OK keep going + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + n = size(x) + + if (present(ix)) then + if (size(ix) < n) then + ierr(1) = 2; ierr(2) = size(ix); + call psb_errpush(psb_err_input_asize_invalid_i_,name,i_err=ierr) + goto 9999 + end if + if (present(flag)) then + flag_ = flag + else + flag_ = psb_sort_ovw_idx_ + end if + select case(flag_) + case(psb_sort_ovw_idx_) + do i=1,n + ix(i) = i + end do + case (psb_sort_keep_idx_) + ! OK keep going + case default + ierr(1) = 4; ierr(2) = flag_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + end if + + allocate(iaux(0:n+1),stat=info) + if (info /= psb_success_) then + call psb_errpush(psb_err_alloc_dealloc_,r_name='psb_i2_msort') + goto 9999 + endif + + select case(dir_) + case (psb_sort_up_) + call psi_i2_msort_up(n,x,iaux,iret) + case (psb_sort_down_) + call psi_i2_msort_dw(n,x,iaux,iret) + case (psb_asort_up_) + call psi_i2_amsort_up(n,x,iaux,iret) + case (psb_asort_down_) + call psi_i2_amsort_dw(n,x,iaux,iret) + end select + ! + ! Do the actual reordering, since the inner routines + ! only provide linked pointers. + ! + if (iret == 0 ) then + select case(reord_) + case(psb_sort_reord_x_) + if (present(ix)) then + call psb_ip_reord(n,x,ix,iaux) + else + call psb_ip_reord(n,x,iaux) + end if + case(psb_sort_noreord_x_) + if (present(ix)) then + call psb_ip_reord(n,ix,iaux) + else + call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix") + goto 9999 + end if + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end if + + return + +9999 call psb_error_handler(err_act) + + return + + +end subroutine psb_i2msort + +subroutine psi_i2_msort_up(n,k,l,iret) + use psb_const_mod + implicit none + integer(psb_ipk_) :: n, iret + integer(psb_i2pk_) :: k(n) + integer(psb_ipk_) :: l(0:n+1) + ! + integer(psb_ipk_) :: p,q,s,t + ! .. + iret = 0 + ! first step: we are preparing ordered sublists, exploiting + ! what order was already in the input data; negative links + ! mark the end of the sublists + l(0) = 1 + t = n + 1 + do p = 1,n - 1 + if (k(p) <= k(p+1)) then + l(p) = p + 1 + else + l(t) = - (p+1) + t = p + end if + end do + l(t) = 0 + l(n) = 0 + ! see if the input was already sorted + if (l(n+1) == 0) then + iret = 1 + return + else + l(n+1) = abs(l(n+1)) + end if + + mergepass: do + ! otherwise, begin a pass through the list. + ! throughout all the subroutine we have: + ! p, q: pointing to the sublists being merged + ! s: pointing to the most recently processed record + ! t: pointing to the end of previously completed sublist + s = 0 + t = n + 1 + p = l(s) + q = l(t) + if (q == 0) exit mergepass + + outer: do + + if (k(p) > k(q)) then + + l(s) = sign(q,l(s)) + s = q + q = l(q) + if (q > 0) then + do + if (k(p) <= k(q)) cycle outer + s = q + q = l(q) + if (q <= 0) exit + end do + end if + l(s) = p + s = t + do + t = p + p = l(p) + if (p <= 0) exit + end do + + else + + l(s) = sign(p,l(s)) + s = p + p = l(p) + if (p>0) then + do + if (k(p) > k(q)) cycle outer + s = p + p = l(p) + if (p <= 0) exit + end do + end if + ! otherwise, one sublist ended, and we append to it the rest + ! of the other one. + l(s) = q + s = t + do + t = q + q = l(q) + if (q <= 0) exit + end do + end if + + p = -p + q = -q + if (q == 0) then + l(s) = sign(p,l(s)) + l(t) = 0 + exit outer + end if + end do outer + end do mergepass + +end subroutine psi_i2_msort_up + +subroutine psi_i2_msort_dw(n,k,l,iret) + use psb_const_mod + implicit none + integer(psb_ipk_) :: n, iret + integer(psb_i2pk_) :: k(n) + integer(psb_ipk_) :: l(0:n+1) + ! + integer(psb_ipk_) :: p,q,s,t + ! .. + iret = 0 + ! first step: we are preparing ordered sublists, exploiting + ! what order was already in the input data; negative links + ! mark the end of the sublists + l(0) = 1 + t = n + 1 + do p = 1,n - 1 + if (k(p) >= k(p+1)) then + l(p) = p + 1 + else + l(t) = - (p+1) + t = p + end if + end do + l(t) = 0 + l(n) = 0 + ! see if the input was already sorted + if (l(n+1) == 0) then + iret = 1 + return + else + l(n+1) = abs(l(n+1)) + end if + + mergepass: do + ! otherwise, begin a pass through the list. + ! throughout all the subroutine we have: + ! p, q: pointing to the sublists being merged + ! s: pointing to the most recently processed record + ! t: pointing to the end of previously completed sublist + s = 0 + t = n + 1 + p = l(s) + q = l(t) + if (q == 0) exit mergepass + + outer: do + + if (k(p) < k(q)) then + + l(s) = sign(q,l(s)) + s = q + q = l(q) + if (q > 0) then + do + if (k(p) >= k(q)) cycle outer + s = q + q = l(q) + if (q <= 0) exit + end do + end if + l(s) = p + s = t + do + t = p + p = l(p) + if (p <= 0) exit + end do + + else + + l(s) = sign(p,l(s)) + s = p + p = l(p) + if (p>0) then + do + if (k(p) < k(q)) cycle outer + s = p + p = l(p) + if (p <= 0) exit + end do + end if + ! otherwise, one sublist ended, and we append to it the rest + ! of the other one. + l(s) = q + s = t + do + t = q + q = l(q) + if (q <= 0) exit + end do + end if + + p = -p + q = -q + if (q == 0) then + l(s) = sign(p,l(s)) + l(t) = 0 + exit outer + end if + end do outer + end do mergepass + +end subroutine psi_i2_msort_dw + +subroutine psi_i2_amsort_up(n,k,l,iret) + use psb_const_mod + implicit none + integer(psb_ipk_) :: n, iret + integer(psb_i2pk_) :: k(n) + integer(psb_ipk_) :: l(0:n+1) + ! + integer(psb_ipk_) :: p,q,s,t + ! .. + iret = 0 + ! first step: we are preparing ordered sublists, exploiting + ! what order was already in the input data; negative links + ! mark the end of the sublists + l(0) = 1 + t = n + 1 + do p = 1,n - 1 + if (abs(k(p)) <= abs(k(p+1))) then + l(p) = p + 1 + else + l(t) = - (p+1) + t = p + end if + end do + l(t) = 0 + l(n) = 0 + ! see if the input was already sorted + if (l(n+1) == 0) then + iret = 1 + return + else + l(n+1) = abs(l(n+1)) + end if + + mergepass: do + ! otherwise, begin a pass through the list. + ! throughout all the subroutine we have: + ! p, q: pointing to the sublists being merged + ! s: pointing to the most recently processed record + ! t: pointing to the end of previously completed sublist + s = 0 + t = n + 1 + p = l(s) + q = l(t) + if (q == 0) exit mergepass + + outer: do + + if (abs(k(p)) > abs(k(q))) then + + l(s) = sign(q,l(s)) + s = q + q = l(q) + if (q > 0) then + do + if (abs(k(p)) <= abs(k(q))) cycle outer + s = q + q = l(q) + if (q <= 0) exit + end do + end if + l(s) = p + s = t + do + t = p + p = l(p) + if (p <= 0) exit + end do + + else + + l(s) = sign(p,l(s)) + s = p + p = l(p) + if (p>0) then + do + if (abs(k(p)) > abs(k(q))) cycle outer + s = p + p = l(p) + if (p <= 0) exit + end do + end if + ! otherwise, one sublist ended, and we append to it the rest + ! of the other one. + l(s) = q + s = t + do + t = q + q = l(q) + if (q <= 0) exit + end do + end if + + p = -p + q = -q + if (q == 0) then + l(s) = sign(p,l(s)) + l(t) = 0 + exit outer + end if + end do outer + end do mergepass + +end subroutine psi_i2_amsort_up + +subroutine psi_i2_amsort_dw(n,k,l,iret) + use psb_const_mod + implicit none + integer(psb_ipk_) :: n, iret + integer(psb_i2pk_) :: k(n) + integer(psb_ipk_) :: l(0:n+1) + ! + integer(psb_ipk_) :: p,q,s,t + ! .. + iret = 0 + ! first step: we are preparing ordered sublists, exploiting + ! what order was already in the input data; negative links + ! mark the end of the sublists + l(0) = 1 + t = n + 1 + do p = 1,n - 1 + if (abs(k(p)) >= abs(k(p+1))) then + l(p) = p + 1 + else + l(t) = - (p+1) + t = p + end if + end do + l(t) = 0 + l(n) = 0 + ! see if the input was already sorted + if (l(n+1) == 0) then + iret = 1 + return + else + l(n+1) = abs(l(n+1)) + end if + + mergepass: do + ! otherwise, begin a pass through the list. + ! throughout all the subroutine we have: + ! p, q: pointing to the sublists being merged + ! s: pointing to the most recently processed record + ! t: pointing to the end of previously completed sublist + s = 0 + t = n + 1 + p = l(s) + q = l(t) + if (q == 0) exit mergepass + + outer: do + + if (abs(k(p)) < abs(k(q))) then + + l(s) = sign(q,l(s)) + s = q + q = l(q) + if (q > 0) then + do + if (abs(k(p)) >= abs(k(q))) cycle outer + s = q + q = l(q) + if (q <= 0) exit + end do + end if + l(s) = p + s = t + do + t = p + p = l(p) + if (p <= 0) exit + end do + + else + + l(s) = sign(p,l(s)) + s = p + p = l(p) + if (p>0) then + do + if (abs(k(p)) < abs(k(q))) cycle outer + s = p + p = l(p) + if (p <= 0) exit + end do + end if + ! otherwise, one sublist ended, and we append to it the rest + ! of the other one. + l(s) = q + s = t + do + t = q + q = l(q) + if (q <= 0) exit + end do + end if + + p = -p + q = -q + if (q == 0) then + l(s) = sign(p,l(s)) + l(t) = 0 + exit outer + end if + end do outer + end do mergepass + +end subroutine psi_i2_amsort_dw + + diff --git a/base/serial/sort/psb_i2_qsort_impl.f90 b/base/serial/sort/psb_i2_qsort_impl.f90 new file mode 100644 index 000000000..cc0ee95bb --- /dev/null +++ b/base/serial/sort/psb_i2_qsort_impl.f90 @@ -0,0 +1,1472 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! The quicksort routines +! References: +! D. Knuth +! The Art of Computer Programming, vol. 3 +! Addison-Wesley +! +! Aho, Hopcroft, Ullman +! Data Structures and Algorithms +! Addison-Wesley +! +function psb_i2bsrch(key,n,v,dir,find) result(ipos) + use psb_sort_mod, psb_protect_name => psb_i2bsrch + implicit none + integer(psb_ipk_) :: ipos, n + integer(psb_i2pk_) :: key + integer(psb_i2pk_) :: v(:) + integer(psb_ipk_), optional :: dir, find + + integer(psb_ipk_) :: lb, ub, m, i, k, dir_, find_ + + if (present(dir)) then + dir_ = dir + else + dir_ = psb_sort_up_ + end if + if (present(find)) then + find_ = find + else + find_ = psb_find_any_ + end if + + ipos = -1 + if (dir_ == psb_sort_up_) then + if (n<=5) then + do m=1,n + if (key == v(m)) then + ipos = m + exit + end if + enddo + + else + + lb = 1 + ub = n + + do while (lb.le.ub) + m = (lb+ub)/2 + if (key.eq.v(m)) then + ipos = m + exit + else if (key < v(m)) then + ub = m-1 + else + lb = m + 1 + end if + enddo + end if + select case(find_) + case (psb_find_any_ ) + ! do nothing + case (psb_find_last_le_ ) + if ((m>n) .or. (m<1)) then + m = n + do while (m>=1) + if (v(m)<=key) exit + m = m - 1 + end do + else + do while (mn) .or. (m<1)) then + m = 1 + do while (m<=n) + if (v(m)>=key) exit + m = m + 1 + end do + else + do while (m>1) + if (v(m-1)>=key) then + m=m-1 + else + exit + end if + end do + end if + ipos = max(m,1) + + case default + write(0,*) 'Wrong FIND' + end select + + + else if (dir_ == psb_sort_down_) then + write(0,*) ' bsrch on sort down not implemented' + else + write(0,*) ' bsrch wrong DIR ',dir_,psb_sort_up_,psb_sort_down_ + end if + return +end function psb_i2bsrch + +function psb_i2ssrch(key,n,v) result(ipos) + use psb_sort_mod, psb_protect_name => psb_i2ssrch + implicit none + integer(psb_ipk_) :: ipos, n + integer(psb_i2pk_) :: key + integer(psb_i2pk_) :: v(:) + + integer(psb_ipk_) :: i + + ipos = -1 + do i=1,n + if (key.eq.v(i)) then + ipos = i + return + end if + enddo + + return +end function psb_i2ssrch + +subroutine psb_i2qsort(x,ix,dir,flag,reord) + use psb_sort_mod, psb_protect_name => psb_i2qsort + use psb_error_mod + implicit none + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), optional, intent(in) :: dir, flag,reord + integer(psb_ipk_), optional, intent(inout) :: ix(:) + + integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_ + integer(psb_ipk_) :: n + integer(psb_i2pk_), allocatable :: tx(:) + integer(psb_ipk_) :: ierr(5) + character(len=20) :: name + + name='psb_i2qsort' + call psb_erractionsave(err_act) + + + if (present(reord)) then + reord_ = reord + else + reord_= psb_sort_reord_x_ + end if + if (present(flag)) then + flag_ = flag + else + flag_ = psb_sort_ovw_idx_ + end if + select case(flag_) + case( psb_sort_ovw_idx_, psb_sort_keep_idx_) + ! OK keep going + case default + ierr(1) = 4; ierr(2) = flag_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + if (present(dir)) then + dir_ = dir + else + dir_= psb_sort_up_ + end if + + n = size(x) + + if (present(ix)) then + if (size(ix) < n) then + ierr(1) = 2; ierr(2) = size(ix); + call psb_errpush(psb_err_input_asize_invalid_i_,name,i_err=ierr) + goto 9999 + end if + if (flag_==psb_sort_ovw_idx_) then + do i=1,n + ix(i) = i + end do + end if + + select case(reord_) + case (psb_sort_reord_x_) + select case(dir_) + case (psb_sort_up_) + call psi_i2qsrx_up(n,x,ix) + case (psb_sort_down_) + call psi_i2qsrx_dw(n,x,ix) + case (psb_asort_up_) + call psi_i2aqsrx_up(n,x,ix) + case (psb_asort_down_) + call psi_i2aqsrx_dw(n,x,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + case(psb_sort_noreord_x_) + tx = x + select case(dir_) + case (psb_sort_up_) + call psi_i2qsrx_up(n,tx,ix) + case (psb_sort_down_) + call psi_i2qsrx_dw(n,tx,ix) + case (psb_asort_up_) + call psi_i2aqsrx_up(n,tx,ix) + case (psb_asort_down_) + call psi_i2aqsrx_dw(n,tx,ix) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + end select + else + select case(reord_) + case (psb_sort_reord_x_) + !OK + case default + ierr(1) = 5; ierr(2) = reord_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + select case(dir_) + case (psb_sort_up_) + call psi_i2qsr_up(n,x) + case (psb_sort_down_) + call psi_i2qsr_dw(n,x) + case (psb_asort_up_) + call psi_i2aqsr_up(n,x) + case (psb_asort_down_) + call psi_i2aqsr_dw(n,x) + case default + ierr(1) = 3; ierr(2) = dir_; + call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) + goto 9999 + end select + + end if + + return + +9999 call psb_error_handler(err_act) + + return +end subroutine psb_i2qsort + +subroutine psi_i2qsrx_up(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2qsrx_up + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk, xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = x(lpiv) + if (piv < x(i)) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + if (piv > x(j)) then + xt = x(j) + ixt = idx(j) + x(j) = x(lpiv) + idx(j) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + if (piv < x(i)) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + ! + ! now piv is correct; place it into first location + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + + i = ilx - 1 + j = iux + 1 + + outer_up: do + in_up1: do + i = i + 1 + xk = x(i) + if (xk >= piv) exit in_up1 + end do in_up1 + ! + ! Ensure finite termination for next loop + ! + xt = xk + x(i) = piv + in_up2:do + j = j - 1 + xk = x(j) + if (xk <= piv) exit in_up2 + end do in_up2 + x(i) = xt + + if (j > i) then + xt = x(i) + ixt = idx(i) + x(i) = x(j) + idx(i) = idx(j) + x(j) = xt + idx(j) = ixt + else + exit outer_up + end if + end do outer_up + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2qsrx',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isrx_up(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isrx_up(n2,x(i:iux),idx(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isrx_up(n2,x(i:iux),idx(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isrx_up(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + endif + enddo + else + call psi_i2isrx_up(n,x,idx) + endif +end subroutine psi_i2qsrx_up + +subroutine psi_i2qsrx_dw(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2qsrx_dw + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk, xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = x(lpiv) + if (piv > x(i)) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + if (piv < x(j)) then + xt = x(j) + ixt = idx(j) + x(j) = x(lpiv) + idx(j) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + if (piv > x(i)) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + endif + ! + ! now piv is correct; place it into first location + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = x(lpiv) + + i = ilx - 1 + j = iux + 1 + + outer_dw: do + in_dw1: do + i = i + 1 + xk = x(i) + if (xk <= piv) exit in_dw1 + end do in_dw1 + ! + ! Ensure finite termination for next loop + ! + xt = xk + x(i) = piv + in_dw2:do + j = j - 1 + xk = x(j) + if (xk >= piv) exit in_dw2 + end do in_dw2 + x(i) = xt + + if (j > i) then + xt = x(i) + ixt = idx(i) + x(i) = x(j) + idx(i) = idx(j) + x(j) = xt + idx(j) = ixt + else + exit outer_dw + end if + end do outer_dw + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2qsrx',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isrx_dw(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isrx_dw(n2,x(i:iux),idx(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isrx_dw(n2,x(i:iux),idx(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isrx_dw(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + endif + enddo + else + call psi_i2isrx_dw(n,x,idx) + endif + +end subroutine psi_i2qsrx_dw + +subroutine psi_i2qsr_up(n,x) + use psb_sort_mod, psb_protect_name => psi_i2qsr_up + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + ! .. + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xt, xk + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = x(lpiv) + if (piv < x(i)) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + if (piv > x(j)) then + xt = x(j) + x(j) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + if (piv < x(i)) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + ! + ! now piv is correct; place it into first location + + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + + i = ilx - 1 + j = iux + 1 + + outer_up: do + in_up1: do + i = i + 1 + xk = x(i) + if (xk >= piv) exit in_up1 + end do in_up1 + ! + ! Ensure finite termination for next loop + ! + xt = xk + x(i) = piv + in_up2:do + j = j - 1 + xk = x(j) + if (xk <= piv) exit in_up2 + end do in_up2 + x(i) = xt + + if (j > i) then + xt = x(i) + x(i) = x(j) + x(j) = xt + else + exit outer_up + end if + end do outer_up + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2qsr',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isr_up(n1,x(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isr_up(n2,x(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isr_up(n2,x(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isr_up(n1,x(ilx:i-1)) + endif + endif + enddo + else + call psi_i2isr_up(n,x) + endif + +end subroutine psi_i2qsr_up + +subroutine psi_i2qsr_dw(n,x) + use psb_sort_mod, psb_protect_name => psi_i2qsr_dw + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + ! .. + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xt, xk + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = x(lpiv) + if (piv > x(i)) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + if (piv < x(j)) then + xt = x(j) + x(j) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + if (piv > x(i)) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = x(lpiv) + endif + ! + ! now piv is correct; place it into first location + + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + + i = ilx - 1 + j = iux + 1 + + outer_dw: do + in_dw1: do + i = i + 1 + xk = x(i) + if (xk <= piv) exit in_dw1 + end do in_dw1 + ! + ! Ensure finite termination for next loop + ! + xt = xk + x(i) = piv + in_dw2:do + j = j - 1 + xk = x(j) + if (xk >= piv) exit in_dw2 + end do in_dw2 + x(i) = xt + + if (j > i) then + xt = x(i) + x(i) = x(j) + x(j) = xt + else + exit outer_dw + end if + end do outer_dw + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_, & + & r_name='psi_i2qsr',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isr_dw(n1,x(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isr_dw(n2,x(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2isr_dw(n2,x(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2isr_dw(n1,x(ilx:i-1)) + endif + endif + enddo + else + call psi_i2isr_dw(n,x) + endif + +end subroutine psi_i2qsr_dw + +subroutine psi_i2aqsrx_up(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2aqsrx_up + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk + integer(psb_i2pk_) :: xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = abs(x(lpiv)) + if (piv < abs(x(i))) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + if (piv > abs(x(j))) then + xt = x(j) + ixt = idx(j) + x(j) = x(lpiv) + idx(j) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + if (piv < abs(x(i))) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + ! + ! now piv is correct; place it into first location + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + + i = ilx - 1 + j = iux + 1 + + outer_up: do + in_up1: do + i = i + 1 + xk = abs(x(i)) + if (xk >= piv) exit in_up1 + end do in_up1 + ! + ! Ensure finite termination for next loop + ! + xt = x(i) + x(i) = piv + in_up2:do + j = j - 1 + xk = abs(x(j)) + if (xk <= piv) exit in_up2 + end do in_up2 + x(i) = xt + + if (j > i) then + xt = x(i) + ixt = idx(i) + x(i) = x(j) + idx(i) = idx(j) + x(j) = xt + idx(j) = ixt + else + exit outer_up + end if + end do outer_up + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_, & + & r_name='psi_i2aqsrx',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisrx_up(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisrx_up(n2,x(i:iux),idx(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisrx_up(n2,x(i:iux),idx(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisrx_up(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + endif + enddo + else + call psi_i2aisrx_up(n,x,idx) + endif + + +end subroutine psi_i2aqsrx_up + +subroutine psi_i2aqsrx_dw(n,x,idx) + use psb_sort_mod, psb_protect_name => psi_i2aqsrx_dw + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk + integer(psb_i2pk_) :: xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = abs(x(lpiv)) + if (piv > abs(x(i))) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + if (piv < abs(x(j))) then + xt = x(j) + ixt = idx(j) + x(j) = x(lpiv) + idx(j) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + if (piv > abs(x(i))) then + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + piv = abs(x(lpiv)) + endif + ! + ! now piv is correct; place it into first location + xt = x(i) + ixt = idx(i) + x(i) = x(lpiv) + idx(i) = idx(lpiv) + x(lpiv) = xt + idx(lpiv) = ixt + + i = ilx - 1 + j = iux + 1 + + outer_dw: do + in_dw1: do + i = i + 1 + xk = abs(x(i)) + if (xk <= piv) exit in_dw1 + end do in_dw1 + ! + ! Ensure finite termination for next loop + ! + xt = x(i) + x(i) = piv + in_dw2:do + j = j - 1 + xk = abs(x(j)) + if (xk >= piv) exit in_dw2 + end do in_dw2 + x(i) = xt + + if (j > i) then + xt = x(i) + ixt = idx(i) + x(i) = x(j) + idx(i) = idx(j) + x(j) = xt + idx(j) = ixt + else + exit outer_dw + end if + end do outer_dw + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2aqsrx',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisrx_dw(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisrx_dw(n2,x(i:iux),idx(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisrx_dw(n2,x(i:iux),idx(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisrx_dw(n1,x(ilx:i-1),idx(ilx:i-1)) + endif + endif + enddo + else + call psi_i2aisrx_dw(n,x,idx) + endif + +end subroutine psi_i2aqsrx_dw + +subroutine psi_i2aqsr_up(n,x) + use psb_sort_mod, psb_protect_name => psi_i2aqsr_up + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk + integer(psb_i2pk_) :: xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = abs(x(lpiv)) + if (piv < abs(x(i))) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + if (piv > abs(x(j))) then + xt = x(j) + x(j) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + if (piv < abs(x(i))) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + ! + ! now piv is correct; place it into first location + + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + + i = ilx - 1 + j = iux + 1 + + outer_up: do + in_up1: do + i = i + 1 + xk = abs(x(i)) + if (xk >= piv) exit in_up1 + end do in_up1 + ! + ! Ensure finite termination for next loop + ! + xt = x(i) + x(i) = piv + in_up2:do + j = j - 1 + xk = abs(x(j)) + if (xk <= piv) exit in_up2 + end do in_up2 + x(i) = xt + + if (j > i) then + xt = x(i) + x(i) = x(j) + x(j) = xt + else + exit outer_up + end if + end do outer_up + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_, & + & r_name='psi_i2qasr',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisr_up(n1,x(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisr_up(n2,x(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisr_up(n2,x(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisr_up(n1,x(ilx:i-1)) + endif + endif + enddo + else + call psi_i2aisr_up(n,x) + endif + +end subroutine psi_i2aqsr_up + +subroutine psi_i2aqsr_dw(n,x) + use psb_sort_mod, psb_protect_name => psi_i2aqsr_dw + use psb_error_mod + implicit none + + integer(psb_i2pk_), intent(inout) :: x(:) + integer(psb_ipk_), intent(in) :: n + ! .. Local Scalars .. + integer(psb_i2pk_) :: piv, xk + integer(psb_i2pk_) :: xt + integer(psb_ipk_) :: i, j, ilx, iux, istp, lpiv + integer(psb_ipk_) :: n1, n2 + integer(psb_ipk_) :: ixt + + integer(psb_ipk_), parameter :: maxstack=64,nparms=3,ithrs=72 + integer(psb_ipk_) :: istack(nparms,maxstack) + + if (n > ithrs) then + ! + ! Init stack pointer + ! + istp = 1 + istack(1,istp) = 1 + istack(2,istp) = n + + do + if (istp <= 0) exit + ilx = istack(1,istp) + iux = istack(2,istp) + istp = istp - 1 + ! + ! Choose a pivot with median-of-three heuristics, leave it + ! in the LPIV location + ! + i = ilx + j = iux + lpiv = (i+j)/2 + piv = abs(x(lpiv)) + if (piv > abs(x(i))) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + if (piv < abs(x(j))) then + xt = x(j) + x(j) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + if (piv > abs(x(i))) then + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + piv = abs(x(lpiv)) + endif + ! + ! now piv is correct; place it into first location + + xt = x(i) + x(i) = x(lpiv) + x(lpiv) = xt + + i = ilx - 1 + j = iux + 1 + + outer_dw: do + in_dw1: do + i = i + 1 + xk = abs(x(i)) + if (xk <= piv) exit in_dw1 + end do in_dw1 + ! + ! Ensure finite termination for next loop + ! + xt = x(i) + x(i) = piv + in_dw2:do + j = j - 1 + xk = abs(x(j)) + if (xk >= piv) exit in_dw2 + end do in_dw2 + x(i) = xt + + if (j > i) then + xt = x(i) + x(i) = x(j) + x(j) = xt + else + exit outer_dw + end if + end do outer_dw + if (i == ilx) then + if (x(i) /= piv) then + call psb_errpush(psb_err_internal_error_,& + & r_name='psi_i2qasr',a_err='impossible pivot condition') + call psb_error() + endif + i = i + 1 + endif + + n1 = (i-1)-ilx+1 + n2 = iux-(i)+1 + if (n1 > n2) then + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisr_dw(n1,x(ilx:i-1)) + endif + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisr_dw(n2,x(i:iux)) + endif + else + if (n2 > ithrs) then + istp = istp + 1 + istack(1,istp) = i + istack(2,istp) = iux + else + call psi_i2aisr_dw(n2,x(i:iux)) + endif + if (n1 > ithrs) then + istp = istp + 1 + istack(1,istp) = ilx + istack(2,istp) = i-1 + else + call psi_i2aisr_dw(n1,x(ilx:i-1)) + endif + endif + enddo + else + call psi_i2aisr_dw(n,x) + endif + +end subroutine psi_i2aqsr_dw + + diff --git a/base/serial/sort/psb_m_hsort_impl.f90 b/base/serial/sort/psb_m_hsort_impl.f90 index 92f67d8b0..743fe0381 100644 --- a/base/serial/sort/psb_m_hsort_impl.f90 +++ b/base/serial/sort/psb_m_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_m_isort_impl.f90 b/base/serial/sort/psb_m_isort_impl.f90 index ae6c0ce23..3d2001dc0 100644 --- a/base/serial/sort/psb_m_isort_impl.f90 +++ b/base/serial/sort/psb_m_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_m_msort_impl.f90 b/base/serial/sort/psb_m_msort_impl.f90 index d3af46737..69de7cc6e 100644 --- a/base/serial/sort/psb_m_msort_impl.f90 +++ b/base/serial/sort/psb_m_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_m_qsort_impl.f90 b/base/serial/sort/psb_m_qsort_impl.f90 index 2dd009b3d..112f5db0d 100644 --- a/base/serial/sort/psb_m_qsort_impl.f90 +++ b/base/serial/sort/psb_m_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_s_hsort_impl.f90 b/base/serial/sort/psb_s_hsort_impl.f90 index 559f92c51..3e0a5a7f7 100644 --- a/base/serial/sort/psb_s_hsort_impl.f90 +++ b/base/serial/sort/psb_s_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_s_isort_impl.f90 b/base/serial/sort/psb_s_isort_impl.f90 index a8be6d46c..048ed943a 100644 --- a/base/serial/sort/psb_s_isort_impl.f90 +++ b/base/serial/sort/psb_s_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_s_msort_impl.f90 b/base/serial/sort/psb_s_msort_impl.f90 index e3c0a1845..a602cb34a 100644 --- a/base/serial/sort/psb_s_msort_impl.f90 +++ b/base/serial/sort/psb_s_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_s_qsort_impl.f90 b/base/serial/sort/psb_s_qsort_impl.f90 index 6b2d48218..e0868ce4b 100644 --- a/base/serial/sort/psb_s_qsort_impl.f90 +++ b/base/serial/sort/psb_s_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_z_hsort_impl.f90 b/base/serial/sort/psb_z_hsort_impl.f90 index 9e886dde9..018ede744 100644 --- a/base/serial/sort/psb_z_hsort_impl.f90 +++ b/base/serial/sort/psb_z_hsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_z_isort_impl.f90 b/base/serial/sort/psb_z_isort_impl.f90 index 465699dab..a7783925e 100644 --- a/base/serial/sort/psb_z_isort_impl.f90 +++ b/base/serial/sort/psb_z_isort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_z_msort_impl.f90 b/base/serial/sort/psb_z_msort_impl.f90 index 24934e14d..6eb8babe8 100644 --- a/base/serial/sort/psb_z_msort_impl.f90 +++ b/base/serial/sort/psb_z_msort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this - ! software without specific written permission. + ! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/serial/sort/psb_z_qsort_impl.f90 b/base/serial/sort/psb_z_qsort_impl.f90 index ce3061ea9..6b9a7ca54 100644 --- a/base/serial/sort/psb_z_qsort_impl.f90 +++ b/base/serial/sort/psb_z_qsort_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_glob_transpose.F90 b/base/tools/psb_c_glob_transpose.F90 index 8c8b3fd45..9285c18a0 100644 --- a/base/tools/psb_c_glob_transpose.F90 +++ b/base/tools/psb_c_glob_transpose.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_map.f90 b/base/tools/psb_c_map.f90 index 40ca3fe8c..6d11a7c94 100644 --- a/base/tools/psb_c_map.f90 +++ b/base/tools/psb_c_map.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -71,7 +71,7 @@ subroutine psb_c_map_U2V_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_V%get_global_rows() nc2 = map%p_desc_V%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) if (info == psb_success_) call psb_csmm(cone,map%mat_U2V,x,czero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -91,7 +91,7 @@ subroutine psb_c_map_U2V_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_V%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work) + if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work=work) if (info == psb_success_) call psb_csmm(cone,map%mat_U2V,xt,czero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -115,19 +115,19 @@ end subroutine psb_c_map_U2V_a subroutine psb_c_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_c_map_U2V_v implicit none - class(psb_clinmap_type), intent(in) :: map - complex(psb_spk_), intent(in) :: alpha,beta - type(psb_c_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + class(psb_clinmap_type), intent(in) :: map + complex(psb_spk_), intent(in) :: alpha,beta + type(psb_c_vect_type), intent(inout) :: x,y + integer(psb_ipk_), intent(out) :: info type(psb_c_vect_type), optional, target, intent(inout) :: vtx,vty ! Local - type(psb_c_vect_type), target :: xt, yt - type(psb_c_vect_type),pointer :: ptx, pty - complex(psb_spk_), allocatable :: xta(:), yta(:) - integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2 ,& + type(psb_c_vect_type), target :: xt, yt + type(psb_c_vect_type),pointer :: ptx, pty + complex(psb_spk_), allocatable :: xta(:), yta(:) + integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2 ,& & map_kind, nr, iam, np - type(psb_ctxt_type) :: ctxt - character(len=20), parameter :: name='psb_map_U2V_v' + type(psb_ctxt_type) :: ctxt + character(len=20), parameter :: name = 'psb_map_U2V_v' info = psb_success_ if (.not.map%is_asb()) then @@ -253,7 +253,7 @@ subroutine psb_c_map_V2U_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_U%get_global_rows() nc2 = map%p_desc_U%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) if (info == psb_success_) call psb_csmm(cone,map%mat_V2U,x,czero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -273,7 +273,7 @@ subroutine psb_c_map_V2U_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_U%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work) + if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work=work) if (info == psb_success_) call psb_csmm(cone,map%mat_V2U,xt,czero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -296,19 +296,19 @@ end subroutine psb_c_map_V2U_a subroutine psb_c_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_c_map_V2U_v implicit none - class(psb_clinmap_type), intent(in) :: map - complex(psb_spk_), intent(in) :: alpha,beta - type(psb_c_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + class(psb_clinmap_type), intent(in) :: map + complex(psb_spk_), intent(in) :: alpha,beta + type(psb_c_vect_type), intent(inout) :: x,y + integer(psb_ipk_), intent(out) :: info type(psb_c_vect_type), optional, target, intent(inout) :: vtx,vty ! Local - type(psb_c_vect_type), target :: xt, yt - type(psb_c_vect_type),pointer :: ptx, pty - complex(psb_spk_), allocatable :: xta(:), yta(:) - integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2,& + type(psb_c_vect_type), target :: xt, yt + type(psb_c_vect_type),pointer :: ptx, pty + complex(psb_spk_), allocatable :: xta(:), yta(:) + integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2,& & map_kind, nr, iam, np - type(psb_ctxt_type) :: ctxt - character(len=20), parameter :: name='psb_map_V2U_v' + type(psb_ctxt_type) :: ctxt + character(len=20), parameter :: name = 'psb_map_V2U_v' info = psb_success_ if (.not.map%is_asb()) then diff --git a/base/tools/psb_c_par_csr_spspmm.f90 b/base/tools/psb_c_par_csr_spspmm.f90 index 0d8e59899..de14df0c3 100644 --- a/base/tools/psb_c_par_csr_spspmm.f90 +++ b/base/tools/psb_c_par_csr_spspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_remap.F90 b/base/tools/psb_c_remap.F90 index ccab6c928..9b40dd29c 100644 --- a/base/tools/psb_c_remap.F90 +++ b/base/tools/psb_c_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_remote_mat.F90 b/base/tools/psb_c_remote_mat.F90 index c3ef56022..ecfac5098 100644 --- a/base/tools/psb_c_remote_mat.F90 +++ b/base/tools/psb_c_remote_mat.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_c_remote_vect.F90 b/base/tools/psb_c_remote_vect.F90 index 855aea992..00e7415ae 100644 --- a/base/tools/psb_c_remote_vect.F90 +++ b/base/tools/psb_c_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_callc.f90 b/base/tools/psb_callc.f90 index d42118720..f0d8f4203 100644 --- a/base/tools/psb_callc.f90 +++ b/base/tools/psb_callc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_callc_a.f90 b/base/tools/psb_callc_a.f90 index 5ae9dac5d..806f809d1 100644 --- a/base/tools/psb_callc_a.f90 +++ b/base/tools/psb_callc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_calloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_casb.f90 b/base/tools/psb_casb.f90 index c8d2834c6..c72a43d3d 100644 --- a/base/tools/psb_casb.f90 +++ b/base/tools/psb_casb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -309,7 +309,7 @@ subroutine psb_casb_multivect(x, desc_a, info, mold, scratch,n) dupl_ = x%get_dupl() if (scratch_) then call x%free(info) - call x%bld(ncol,n_,mold=mold) + call x%bld(ncol,n_,mold=mold,scratch=.true.) else call x%asb(ncol,n_,info) ! ..update halo elements.. diff --git a/base/tools/psb_casb_a.f90 b/base/tools/psb_casb_a.f90 index db7b23c8b..9fa846d87 100644 --- a/base/tools/psb_casb_a.f90 +++ b/base/tools/psb_casb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_casb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_ccdbldext.F90 b/base/tools/psb_ccdbldext.F90 index b9064212b..4f20bad67 100644 --- a/base/tools/psb_ccdbldext.F90 +++ b/base/tools/psb_ccdbldext.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cfree.f90 b/base/tools/psb_cfree.f90 index 54c728f59..524cdbe6b 100644 --- a/base/tools/psb_cfree.f90 +++ b/base/tools/psb_cfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cfree_a.f90 b/base/tools/psb_cfree_a.f90 index a8746071a..85fa57c32 100644 --- a/base/tools/psb_cfree_a.f90 +++ b/base/tools/psb_cfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cgetelem.f90 b/base/tools/psb_cgetelem.f90 index 3c4151c9f..952ae251a 100644 --- a/base/tools/psb_cgetelem.f90 +++ b/base/tools/psb_cgetelem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -108,3 +108,92 @@ function psb_c_getelem(x,index,desc_a,info) result(res) end function +! Function: psb_c_getmatelem +! Extract entries from a sparse matrix. Note: the row and column indices in index +! are assumed to be in global numbering and are converted on the fly. +! +! Arguments: +! a - type(psb_cspmat_type) The source matrix +! desc_a - type(psb_desc_type). The communication descriptor. +! rowindex - integer. Row index of x of the value to extract +! colindex - integer. Column index of x of the value to extract +! iam - integer. Index of the process requesting the value +! info - integer. return code + + +function psb_c_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + use psb_base_mod, psb_protect_name => psb_c_getmatelem + use psi_mod + implicit none + + type(psb_cspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_lpk_), intent(in) :: rowindex, colindex + integer(psb_ipk_), intent(out) :: info + complex(psb_spk_) :: res + + !locals + integer(psb_ipk_) :: localrowindex(1), localcolindex(1), jmin, jmax, imin, imax + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_lpk_) :: growindex(1), gcolindex(1) + integer(psb_lpk_), allocatable :: myidx(:),mylocal(:) + integer(psb_ipk_), allocatable, dimension(:) :: ia, ja + integer(psb_ipk_) :: nz + complex(psb_spk_), allocatable, dimension(:) :: val + character(len=20) :: name + logical, parameter :: debug = .false. + + growindex(1) = rowindex + gcolindex(1) = colindex + res = czero + if (psb_errstatus_fatal()) return + info=psb_success_ + call psb_erractionsave(err_act) + name = 'psb_c_getmatelem' + + if (.not.desc_a%is_ok()) then + info = psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if + + ctxt = desc_a%get_context() + + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + call desc_a%indxmap%g2l(growindex,localrowindex,info,owned=.false.) + call desc_a%indxmap%g2l(gcolindex,localcolindex,info,owned=.false.) + imin = localrowindex(1) + imax = localrowindex(1) + jmin = localcolindex(1) + jmax = localcolindex(1) + if(debug.and.(localrowindex(1) < 1 .or. localcolindex(1) < 1)) then + write(*,*)"Process ",me," owns ",desc_a%get_local_rows()," rows"," Global row index is ", & + growindex,"Local row index is ",localrowindex + write(*,*)"Process ",me," owns ",desc_a%get_local_cols()," cols"," Global col index is ", & + gcolindex,"Local col index is ",localcolindex + myidx = desc_a%get_global_indices(owned=.false.) + mylocal = desc_a%get_global_indices(owned=.true.) + write(*,*)"My (local+halo) indexes are: ",myidx + write(*,*)"My (local) indexes are: ",mylocal + end if + if ( localrowindex(1) < 1 .or. localcolindex(1) < 1) then + res = czero + else + call a%csget(imin, imax, nz, ia, ja, val, info, jmin=jmin, jmax=jmax) + res = val(1) + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + +end function diff --git a/base/tools/psb_cins.f90 b/base/tools/psb_cins.f90 index 1c14b7b27..be0655d49 100644 --- a/base/tools/psb_cins.f90 +++ b/base/tools/psb_cins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cins_a.f90 b/base/tools/psb_cins_a.f90 index 688d06e9f..bcd9e572f 100644 --- a/base/tools/psb_cins_a.f90 +++ b/base/tools/psb_cins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_cinsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cspalloc.f90 b/base/tools/psb_cspalloc.f90 index 7bec040c3..afa2170ad 100644 --- a/base/tools/psb_cspalloc.f90 +++ b/base/tools/psb_cspalloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cspasb.f90 b/base/tools/psb_cspasb.f90 index 1ada38e96..ac229b12c 100644 --- a/base/tools/psb_cspasb.f90 +++ b/base/tools/psb_cspasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cspfree.f90 b/base/tools/psb_cspfree.f90 index 51f40259e..4a6aff419 100644 --- a/base/tools/psb_cspfree.f90 +++ b/base/tools/psb_cspfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_csphalo.F90 b/base/tools/psb_csphalo.F90 index cd053056b..1b6102548 100644 --- a/base/tools/psb_csphalo.F90 +++ b/base/tools/psb_csphalo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_cspins.F90 b/base/tools/psb_cspins.F90 index 6ed5c6296..4b40d4ce9 100644 --- a/base/tools/psb_cspins.F90 +++ b/base/tools/psb_cspins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_csprn.f90 b/base/tools/psb_csprn.f90 index 82fb5be2f..eaeadf66d 100644 --- a/base/tools/psb_csprn.f90 +++ b/base/tools/psb_csprn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_glob_transpose.F90 b/base/tools/psb_d_glob_transpose.F90 index 2fc4a4580..f884222f6 100644 --- a/base/tools/psb_d_glob_transpose.F90 +++ b/base/tools/psb_d_glob_transpose.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_map.f90 b/base/tools/psb_d_map.f90 index a36c07b36..9c009dbf1 100644 --- a/base/tools/psb_d_map.f90 +++ b/base/tools/psb_d_map.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -71,7 +71,7 @@ subroutine psb_d_map_U2V_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_V%get_global_rows() nc2 = map%p_desc_V%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) if (info == psb_success_) call psb_csmm(done,map%mat_U2V,x,dzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -91,7 +91,7 @@ subroutine psb_d_map_U2V_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_V%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work) + if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work=work) if (info == psb_success_) call psb_csmm(done,map%mat_U2V,xt,dzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -115,19 +115,19 @@ end subroutine psb_d_map_U2V_a subroutine psb_d_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_d_map_U2V_v implicit none - class(psb_dlinmap_type), intent(in) :: map - real(psb_dpk_), intent(in) :: alpha,beta - type(psb_d_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + class(psb_dlinmap_type), intent(in) :: map + real(psb_dpk_), intent(in) :: alpha,beta + type(psb_d_vect_type), intent(inout) :: x,y + integer(psb_ipk_), intent(out) :: info type(psb_d_vect_type), optional, target, intent(inout) :: vtx,vty ! Local - type(psb_d_vect_type), target :: xt, yt - type(psb_d_vect_type),pointer :: ptx, pty - real(psb_dpk_), allocatable :: xta(:), yta(:) - integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2 ,& + type(psb_d_vect_type), target :: xt, yt + type(psb_d_vect_type),pointer :: ptx, pty + real(psb_dpk_), allocatable :: xta(:), yta(:) + integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2 ,& & map_kind, nr, iam, np - type(psb_ctxt_type) :: ctxt - character(len=20), parameter :: name='psb_map_U2V_v' + type(psb_ctxt_type) :: ctxt + character(len=20), parameter :: name = 'psb_map_U2V_v' info = psb_success_ if (.not.map%is_asb()) then @@ -253,7 +253,7 @@ subroutine psb_d_map_V2U_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_U%get_global_rows() nc2 = map%p_desc_U%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) if (info == psb_success_) call psb_csmm(done,map%mat_V2U,x,dzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -273,7 +273,7 @@ subroutine psb_d_map_V2U_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_U%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work) + if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work=work) if (info == psb_success_) call psb_csmm(done,map%mat_V2U,xt,dzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -296,19 +296,19 @@ end subroutine psb_d_map_V2U_a subroutine psb_d_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_d_map_V2U_v implicit none - class(psb_dlinmap_type), intent(in) :: map - real(psb_dpk_), intent(in) :: alpha,beta - type(psb_d_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + class(psb_dlinmap_type), intent(in) :: map + real(psb_dpk_), intent(in) :: alpha,beta + type(psb_d_vect_type), intent(inout) :: x,y + integer(psb_ipk_), intent(out) :: info type(psb_d_vect_type), optional, target, intent(inout) :: vtx,vty ! Local - type(psb_d_vect_type), target :: xt, yt - type(psb_d_vect_type),pointer :: ptx, pty - real(psb_dpk_), allocatable :: xta(:), yta(:) - integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2,& + type(psb_d_vect_type), target :: xt, yt + type(psb_d_vect_type),pointer :: ptx, pty + real(psb_dpk_), allocatable :: xta(:), yta(:) + integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2,& & map_kind, nr, iam, np - type(psb_ctxt_type) :: ctxt - character(len=20), parameter :: name='psb_map_V2U_v' + type(psb_ctxt_type) :: ctxt + character(len=20), parameter :: name = 'psb_map_V2U_v' info = psb_success_ if (.not.map%is_asb()) then diff --git a/base/tools/psb_d_par_csr_spspmm.f90 b/base/tools/psb_d_par_csr_spspmm.f90 index 3ab675615..3b0a8671c 100644 --- a/base/tools/psb_d_par_csr_spspmm.f90 +++ b/base/tools/psb_d_par_csr_spspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_remap.F90 b/base/tools/psb_d_remap.F90 index dc3219189..a2c9c291f 100644 --- a/base/tools/psb_d_remap.F90 +++ b/base/tools/psb_d_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_remote_mat.F90 b/base/tools/psb_d_remote_mat.F90 index 095474699..56f7b3d3c 100644 --- a/base/tools/psb_d_remote_mat.F90 +++ b/base/tools/psb_d_remote_mat.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_d_remote_vect.F90 b/base/tools/psb_d_remote_vect.F90 index 78a089fd2..38ea57b6c 100644 --- a/base/tools/psb_d_remote_vect.F90 +++ b/base/tools/psb_d_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dallc.f90 b/base/tools/psb_dallc.f90 index 8a02d3ad5..c726db862 100644 --- a/base/tools/psb_dallc.f90 +++ b/base/tools/psb_dallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dallc_a.f90 b/base/tools/psb_dallc_a.f90 index 8cd927fe8..027b64a60 100644 --- a/base/tools/psb_dallc_a.f90 +++ b/base/tools/psb_dallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_dalloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dasb.f90 b/base/tools/psb_dasb.f90 index 74970cc76..a4b5a3e38 100644 --- a/base/tools/psb_dasb.f90 +++ b/base/tools/psb_dasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -309,7 +309,7 @@ subroutine psb_dasb_multivect(x, desc_a, info, mold, scratch,n) dupl_ = x%get_dupl() if (scratch_) then call x%free(info) - call x%bld(ncol,n_,mold=mold) + call x%bld(ncol,n_,mold=mold,scratch=.true.) else call x%asb(ncol,n_,info) ! ..update halo elements.. diff --git a/base/tools/psb_dasb_a.f90 b/base/tools/psb_dasb_a.f90 index 2a62fedf8..305c2e31d 100644 --- a/base/tools/psb_dasb_a.f90 +++ b/base/tools/psb_dasb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_dasb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dcdbldext.F90 b/base/tools/psb_dcdbldext.F90 index d6721c764..f16402b7c 100644 --- a/base/tools/psb_dcdbldext.F90 +++ b/base/tools/psb_dcdbldext.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dfree.f90 b/base/tools/psb_dfree.f90 index 8e092dfa3..e3c8482ec 100644 --- a/base/tools/psb_dfree.f90 +++ b/base/tools/psb_dfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dfree_a.f90 b/base/tools/psb_dfree_a.f90 index 0ce49ecca..b71aba123 100644 --- a/base/tools/psb_dfree_a.f90 +++ b/base/tools/psb_dfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dgetelem.f90 b/base/tools/psb_dgetelem.f90 index 38d398aa8..805204b08 100644 --- a/base/tools/psb_dgetelem.f90 +++ b/base/tools/psb_dgetelem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -108,3 +108,92 @@ function psb_d_getelem(x,index,desc_a,info) result(res) end function +! Function: psb_d_getmatelem +! Extract entries from a sparse matrix. Note: the row and column indices in index +! are assumed to be in global numbering and are converted on the fly. +! +! Arguments: +! a - type(psb_dspmat_type) The source matrix +! desc_a - type(psb_desc_type). The communication descriptor. +! rowindex - integer. Row index of x of the value to extract +! colindex - integer. Column index of x of the value to extract +! iam - integer. Index of the process requesting the value +! info - integer. return code + + +function psb_d_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + use psb_base_mod, psb_protect_name => psb_d_getmatelem + use psi_mod + implicit none + + type(psb_dspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_lpk_), intent(in) :: rowindex, colindex + integer(psb_ipk_), intent(out) :: info + real(psb_dpk_) :: res + + !locals + integer(psb_ipk_) :: localrowindex(1), localcolindex(1), jmin, jmax, imin, imax + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_lpk_) :: growindex(1), gcolindex(1) + integer(psb_lpk_), allocatable :: myidx(:),mylocal(:) + integer(psb_ipk_), allocatable, dimension(:) :: ia, ja + integer(psb_ipk_) :: nz + real(psb_dpk_), allocatable, dimension(:) :: val + character(len=20) :: name + logical, parameter :: debug = .false. + + growindex(1) = rowindex + gcolindex(1) = colindex + res = dzero + if (psb_errstatus_fatal()) return + info=psb_success_ + call psb_erractionsave(err_act) + name = 'psb_d_getmatelem' + + if (.not.desc_a%is_ok()) then + info = psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if + + ctxt = desc_a%get_context() + + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + call desc_a%indxmap%g2l(growindex,localrowindex,info,owned=.false.) + call desc_a%indxmap%g2l(gcolindex,localcolindex,info,owned=.false.) + imin = localrowindex(1) + imax = localrowindex(1) + jmin = localcolindex(1) + jmax = localcolindex(1) + if(debug.and.(localrowindex(1) < 1 .or. localcolindex(1) < 1)) then + write(*,*)"Process ",me," owns ",desc_a%get_local_rows()," rows"," Global row index is ", & + growindex,"Local row index is ",localrowindex + write(*,*)"Process ",me," owns ",desc_a%get_local_cols()," cols"," Global col index is ", & + gcolindex,"Local col index is ",localcolindex + myidx = desc_a%get_global_indices(owned=.false.) + mylocal = desc_a%get_global_indices(owned=.true.) + write(*,*)"My (local+halo) indexes are: ",myidx + write(*,*)"My (local) indexes are: ",mylocal + end if + if ( localrowindex(1) < 1 .or. localcolindex(1) < 1) then + res = dzero + else + call a%csget(imin, imax, nz, ia, ja, val, info, jmin=jmin, jmax=jmax) + res = val(1) + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + +end function diff --git a/base/tools/psb_dins.f90 b/base/tools/psb_dins.f90 index eca13da7c..3141ffc84 100644 --- a/base/tools/psb_dins.f90 +++ b/base/tools/psb_dins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dins_a.f90 b/base/tools/psb_dins_a.f90 index eb04ebaff..dd53275df 100644 --- a/base/tools/psb_dins_a.f90 +++ b/base/tools/psb_dins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_dinsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dspalloc.f90 b/base/tools/psb_dspalloc.f90 index 433d71298..192267c83 100644 --- a/base/tools/psb_dspalloc.f90 +++ b/base/tools/psb_dspalloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dspasb.f90 b/base/tools/psb_dspasb.f90 index 7f00d8bc1..f8e26a2a0 100644 --- a/base/tools/psb_dspasb.f90 +++ b/base/tools/psb_dspasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dspfree.f90 b/base/tools/psb_dspfree.f90 index 060043487..9015907f2 100644 --- a/base/tools/psb_dspfree.f90 +++ b/base/tools/psb_dspfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dsphalo.F90 b/base/tools/psb_dsphalo.F90 index 53b671b2b..b40a7c514 100644 --- a/base/tools/psb_dsphalo.F90 +++ b/base/tools/psb_dsphalo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dspins.F90 b/base/tools/psb_dspins.F90 index a9cbbe4b6..e88be0840 100644 --- a/base/tools/psb_dspins.F90 +++ b/base/tools/psb_dspins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_dsprn.f90 b/base/tools/psb_dsprn.f90 index 36e0531f4..a3b613a3f 100644 --- a/base/tools/psb_dsprn.f90 +++ b/base/tools/psb_dsprn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_e_remote_vect.F90 b/base/tools/psb_e_remote_vect.F90 index 0ca38c022..91423486f 100644 --- a/base/tools/psb_e_remote_vect.F90 +++ b/base/tools/psb_e_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_eallc_a.f90 b/base/tools/psb_eallc_a.f90 index c9c65634d..ba1a60338 100644 --- a/base/tools/psb_eallc_a.f90 +++ b/base/tools/psb_eallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_ealloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_easb_a.f90 b/base/tools/psb_easb_a.f90 index baa8514d3..e0819bc2b 100644 --- a/base/tools/psb_easb_a.f90 +++ b/base/tools/psb_easb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_easb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_efree_a.f90 b/base/tools/psb_efree_a.f90 index 85baa0c0c..9439f65b2 100644 --- a/base/tools/psb_efree_a.f90 +++ b/base/tools/psb_efree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_eins_a.f90 b/base/tools/psb_eins_a.f90 index 25744f5ad..3db771844 100644 --- a/base/tools/psb_eins_a.f90 +++ b/base/tools/psb_eins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_einsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2_remote_vect.F90 b/base/tools/psb_i2_remote_vect.F90 index 4c4ce8b54..c2a7706f3 100644 --- a/base/tools/psb_i2_remote_vect.F90 +++ b/base/tools/psb_i2_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2allc_a.f90 b/base/tools/psb_i2allc_a.f90 index 525983041..55c152152 100644 --- a/base/tools/psb_i2allc_a.f90 +++ b/base/tools/psb_i2allc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_i2alloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2asb_a.f90 b/base/tools/psb_i2asb_a.f90 index 97879105f..397703452 100644 --- a/base/tools/psb_i2asb_a.f90 +++ b/base/tools/psb_i2asb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_i2asb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2free_a.f90 b/base/tools/psb_i2free_a.f90 index d5c7509ca..1aa9c9c06 100644 --- a/base/tools/psb_i2free_a.f90 +++ b/base/tools/psb_i2free_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_i2ins_a.f90 b/base/tools/psb_i2ins_a.f90 index 975e619b2..81e321baf 100644 --- a/base/tools/psb_i2ins_a.f90 +++ b/base/tools/psb_i2ins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_i2insvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_iallc.f90 b/base/tools/psb_iallc.f90 index 68b94e59e..6ecb6d270 100644 --- a/base/tools/psb_iallc.f90 +++ b/base/tools/psb_iallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_iasb.f90 b/base/tools/psb_iasb.f90 index 474b8934c..b962b28ec 100644 --- a/base/tools/psb_iasb.f90 +++ b/base/tools/psb_iasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -309,7 +309,7 @@ subroutine psb_iasb_multivect(x, desc_a, info, mold, scratch,n) dupl_ = x%get_dupl() if (scratch_) then call x%free(info) - call x%bld(ncol,n_,mold=mold) + call x%bld(ncol,n_,mold=mold,scratch=.true.) else call x%asb(ncol,n_,info) ! ..update halo elements.. diff --git a/base/tools/psb_ifree.f90 b/base/tools/psb_ifree.f90 index a804913a3..7e0d67587 100644 --- a/base/tools/psb_ifree.f90 +++ b/base/tools/psb_ifree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_iins.f90 b/base/tools/psb_iins.f90 index bf02deb19..bbe666ed6 100644 --- a/base/tools/psb_iins.f90 +++ b/base/tools/psb_iins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_lallc.f90 b/base/tools/psb_lallc.f90 index ba8cc415e..8d3767989 100644 --- a/base/tools/psb_lallc.f90 +++ b/base/tools/psb_lallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_lasb.f90 b/base/tools/psb_lasb.f90 index 3f0ba4670..c9dba3ab6 100644 --- a/base/tools/psb_lasb.f90 +++ b/base/tools/psb_lasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -309,7 +309,7 @@ subroutine psb_lasb_multivect(x, desc_a, info, mold, scratch,n) dupl_ = x%get_dupl() if (scratch_) then call x%free(info) - call x%bld(ncol,n_,mold=mold) + call x%bld(ncol,n_,mold=mold,scratch=.true.) else call x%asb(ncol,n_,info) ! ..update halo elements.. diff --git a/base/tools/psb_lfree.f90 b/base/tools/psb_lfree.f90 index 6630601c0..42c28eb25 100644 --- a/base/tools/psb_lfree.f90 +++ b/base/tools/psb_lfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_lins.f90 b/base/tools/psb_lins.f90 index a3548571e..1070173d1 100644 --- a/base/tools/psb_lins.f90 +++ b/base/tools/psb_lins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_m_remote_vect.F90 b/base/tools/psb_m_remote_vect.F90 index 2266cc800..94cbba4dc 100644 --- a/base/tools/psb_m_remote_vect.F90 +++ b/base/tools/psb_m_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_mallc_a.f90 b/base/tools/psb_mallc_a.f90 index c815e8f93..0f67dda4b 100644 --- a/base/tools/psb_mallc_a.f90 +++ b/base/tools/psb_mallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_malloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_masb_a.f90 b/base/tools/psb_masb_a.f90 index 50f2b7685..46c3ccd44 100644 --- a/base/tools/psb_masb_a.f90 +++ b/base/tools/psb_masb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_masb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_mfree_a.f90 b/base/tools/psb_mfree_a.f90 index c2f57f216..5beae30ca 100644 --- a/base/tools/psb_mfree_a.f90 +++ b/base/tools/psb_mfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_mins_a.f90 b/base/tools/psb_mins_a.f90 index d1549c921..7af8a44d2 100644 --- a/base/tools/psb_mins_a.f90 +++ b/base/tools/psb_mins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_minsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_glob_transpose.F90 b/base/tools/psb_s_glob_transpose.F90 index d663ea3e5..bee763ac0 100644 --- a/base/tools/psb_s_glob_transpose.F90 +++ b/base/tools/psb_s_glob_transpose.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_map.f90 b/base/tools/psb_s_map.f90 index 47faf8c7a..8cd31e10f 100644 --- a/base/tools/psb_s_map.f90 +++ b/base/tools/psb_s_map.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -71,7 +71,7 @@ subroutine psb_s_map_U2V_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_V%get_global_rows() nc2 = map%p_desc_V%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) if (info == psb_success_) call psb_csmm(sone,map%mat_U2V,x,szero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -91,7 +91,7 @@ subroutine psb_s_map_U2V_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_V%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work) + if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work=work) if (info == psb_success_) call psb_csmm(sone,map%mat_U2V,xt,szero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -115,19 +115,19 @@ end subroutine psb_s_map_U2V_a subroutine psb_s_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_s_map_U2V_v implicit none - class(psb_slinmap_type), intent(in) :: map - real(psb_spk_), intent(in) :: alpha,beta - type(psb_s_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + class(psb_slinmap_type), intent(in) :: map + real(psb_spk_), intent(in) :: alpha,beta + type(psb_s_vect_type), intent(inout) :: x,y + integer(psb_ipk_), intent(out) :: info type(psb_s_vect_type), optional, target, intent(inout) :: vtx,vty ! Local - type(psb_s_vect_type), target :: xt, yt - type(psb_s_vect_type),pointer :: ptx, pty - real(psb_spk_), allocatable :: xta(:), yta(:) - integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2 ,& + type(psb_s_vect_type), target :: xt, yt + type(psb_s_vect_type),pointer :: ptx, pty + real(psb_spk_), allocatable :: xta(:), yta(:) + integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2 ,& & map_kind, nr, iam, np - type(psb_ctxt_type) :: ctxt - character(len=20), parameter :: name='psb_map_U2V_v' + type(psb_ctxt_type) :: ctxt + character(len=20), parameter :: name = 'psb_map_U2V_v' info = psb_success_ if (.not.map%is_asb()) then @@ -253,7 +253,7 @@ subroutine psb_s_map_V2U_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_U%get_global_rows() nc2 = map%p_desc_U%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) if (info == psb_success_) call psb_csmm(sone,map%mat_V2U,x,szero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -273,7 +273,7 @@ subroutine psb_s_map_V2U_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_U%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work) + if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work=work) if (info == psb_success_) call psb_csmm(sone,map%mat_V2U,xt,szero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -296,19 +296,19 @@ end subroutine psb_s_map_V2U_a subroutine psb_s_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_s_map_V2U_v implicit none - class(psb_slinmap_type), intent(in) :: map - real(psb_spk_), intent(in) :: alpha,beta - type(psb_s_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + class(psb_slinmap_type), intent(in) :: map + real(psb_spk_), intent(in) :: alpha,beta + type(psb_s_vect_type), intent(inout) :: x,y + integer(psb_ipk_), intent(out) :: info type(psb_s_vect_type), optional, target, intent(inout) :: vtx,vty ! Local - type(psb_s_vect_type), target :: xt, yt - type(psb_s_vect_type),pointer :: ptx, pty - real(psb_spk_), allocatable :: xta(:), yta(:) - integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2,& + type(psb_s_vect_type), target :: xt, yt + type(psb_s_vect_type),pointer :: ptx, pty + real(psb_spk_), allocatable :: xta(:), yta(:) + integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2,& & map_kind, nr, iam, np - type(psb_ctxt_type) :: ctxt - character(len=20), parameter :: name='psb_map_V2U_v' + type(psb_ctxt_type) :: ctxt + character(len=20), parameter :: name = 'psb_map_V2U_v' info = psb_success_ if (.not.map%is_asb()) then diff --git a/base/tools/psb_s_par_csr_spspmm.f90 b/base/tools/psb_s_par_csr_spspmm.f90 index 17bf4e449..ca21351a0 100644 --- a/base/tools/psb_s_par_csr_spspmm.f90 +++ b/base/tools/psb_s_par_csr_spspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_remap.F90 b/base/tools/psb_s_remap.F90 index b7cf73696..6f5365b32 100644 --- a/base/tools/psb_s_remap.F90 +++ b/base/tools/psb_s_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_remote_mat.F90 b/base/tools/psb_s_remote_mat.F90 index 631777ecf..a9bc2a7a5 100644 --- a/base/tools/psb_s_remote_mat.F90 +++ b/base/tools/psb_s_remote_mat.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_s_remote_vect.F90 b/base/tools/psb_s_remote_vect.F90 index 260d03bd2..cd7fe19ea 100644 --- a/base/tools/psb_s_remote_vect.F90 +++ b/base/tools/psb_s_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sallc.f90 b/base/tools/psb_sallc.f90 index 3c4f9a993..518b269dd 100644 --- a/base/tools/psb_sallc.f90 +++ b/base/tools/psb_sallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sallc_a.f90 b/base/tools/psb_sallc_a.f90 index 3b511d61b..9a50199fd 100644 --- a/base/tools/psb_sallc_a.f90 +++ b/base/tools/psb_sallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_salloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sasb.f90 b/base/tools/psb_sasb.f90 index 6d667dc96..24670a0e9 100644 --- a/base/tools/psb_sasb.f90 +++ b/base/tools/psb_sasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -309,7 +309,7 @@ subroutine psb_sasb_multivect(x, desc_a, info, mold, scratch,n) dupl_ = x%get_dupl() if (scratch_) then call x%free(info) - call x%bld(ncol,n_,mold=mold) + call x%bld(ncol,n_,mold=mold,scratch=.true.) else call x%asb(ncol,n_,info) ! ..update halo elements.. diff --git a/base/tools/psb_sasb_a.f90 b/base/tools/psb_sasb_a.f90 index 76dbdafbe..a6a4ef347 100644 --- a/base/tools/psb_sasb_a.f90 +++ b/base/tools/psb_sasb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_sasb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_scdbldext.F90 b/base/tools/psb_scdbldext.F90 index 812ca8aa0..d7a5f7223 100644 --- a/base/tools/psb_scdbldext.F90 +++ b/base/tools/psb_scdbldext.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sfree.f90 b/base/tools/psb_sfree.f90 index add6162b5..90c397c28 100644 --- a/base/tools/psb_sfree.f90 +++ b/base/tools/psb_sfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sfree_a.f90 b/base/tools/psb_sfree_a.f90 index 036bb903c..b8f1e7c7f 100644 --- a/base/tools/psb_sfree_a.f90 +++ b/base/tools/psb_sfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sgetelem.f90 b/base/tools/psb_sgetelem.f90 index 723a2f7df..73ab33efa 100644 --- a/base/tools/psb_sgetelem.f90 +++ b/base/tools/psb_sgetelem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -108,3 +108,92 @@ function psb_s_getelem(x,index,desc_a,info) result(res) end function +! Function: psb_s_getmatelem +! Extract entries from a sparse matrix. Note: the row and column indices in index +! are assumed to be in global numbering and are converted on the fly. +! +! Arguments: +! a - type(psb_sspmat_type) The source matrix +! desc_a - type(psb_desc_type). The communication descriptor. +! rowindex - integer. Row index of x of the value to extract +! colindex - integer. Column index of x of the value to extract +! iam - integer. Index of the process requesting the value +! info - integer. return code + + +function psb_s_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + use psb_base_mod, psb_protect_name => psb_s_getmatelem + use psi_mod + implicit none + + type(psb_sspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_lpk_), intent(in) :: rowindex, colindex + integer(psb_ipk_), intent(out) :: info + real(psb_spk_) :: res + + !locals + integer(psb_ipk_) :: localrowindex(1), localcolindex(1), jmin, jmax, imin, imax + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_lpk_) :: growindex(1), gcolindex(1) + integer(psb_lpk_), allocatable :: myidx(:),mylocal(:) + integer(psb_ipk_), allocatable, dimension(:) :: ia, ja + integer(psb_ipk_) :: nz + real(psb_spk_), allocatable, dimension(:) :: val + character(len=20) :: name + logical, parameter :: debug = .false. + + growindex(1) = rowindex + gcolindex(1) = colindex + res = szero + if (psb_errstatus_fatal()) return + info=psb_success_ + call psb_erractionsave(err_act) + name = 'psb_s_getmatelem' + + if (.not.desc_a%is_ok()) then + info = psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if + + ctxt = desc_a%get_context() + + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + call desc_a%indxmap%g2l(growindex,localrowindex,info,owned=.false.) + call desc_a%indxmap%g2l(gcolindex,localcolindex,info,owned=.false.) + imin = localrowindex(1) + imax = localrowindex(1) + jmin = localcolindex(1) + jmax = localcolindex(1) + if(debug.and.(localrowindex(1) < 1 .or. localcolindex(1) < 1)) then + write(*,*)"Process ",me," owns ",desc_a%get_local_rows()," rows"," Global row index is ", & + growindex,"Local row index is ",localrowindex + write(*,*)"Process ",me," owns ",desc_a%get_local_cols()," cols"," Global col index is ", & + gcolindex,"Local col index is ",localcolindex + myidx = desc_a%get_global_indices(owned=.false.) + mylocal = desc_a%get_global_indices(owned=.true.) + write(*,*)"My (local+halo) indexes are: ",myidx + write(*,*)"My (local) indexes are: ",mylocal + end if + if ( localrowindex(1) < 1 .or. localcolindex(1) < 1) then + res = szero + else + call a%csget(imin, imax, nz, ia, ja, val, info, jmin=jmin, jmax=jmax) + res = val(1) + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + +end function diff --git a/base/tools/psb_sins.f90 b/base/tools/psb_sins.f90 index ec9988f8b..bc3a73db0 100644 --- a/base/tools/psb_sins.f90 +++ b/base/tools/psb_sins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sins_a.f90 b/base/tools/psb_sins_a.f90 index 629ad7832..d1e8db110 100644 --- a/base/tools/psb_sins_a.f90 +++ b/base/tools/psb_sins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_sinsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sspalloc.f90 b/base/tools/psb_sspalloc.f90 index 8004e7421..3e421d5a3 100644 --- a/base/tools/psb_sspalloc.f90 +++ b/base/tools/psb_sspalloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sspasb.f90 b/base/tools/psb_sspasb.f90 index 60d1c25f8..971efe06c 100644 --- a/base/tools/psb_sspasb.f90 +++ b/base/tools/psb_sspasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sspfree.f90 b/base/tools/psb_sspfree.f90 index 968e9f9a6..073f8cdc6 100644 --- a/base/tools/psb_sspfree.f90 +++ b/base/tools/psb_sspfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_ssphalo.F90 b/base/tools/psb_ssphalo.F90 index 9a94b4383..c33a560b7 100644 --- a/base/tools/psb_ssphalo.F90 +++ b/base/tools/psb_ssphalo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_sspins.F90 b/base/tools/psb_sspins.F90 index 377c6e23a..74497707f 100644 --- a/base/tools/psb_sspins.F90 +++ b/base/tools/psb_sspins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_ssprn.f90 b/base/tools/psb_ssprn.f90 index 602867e67..6b687306f 100644 --- a/base/tools/psb_ssprn.f90 +++ b/base/tools/psb_ssprn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_glob_transpose.F90 b/base/tools/psb_z_glob_transpose.F90 index de952682d..339d2804e 100644 --- a/base/tools/psb_z_glob_transpose.F90 +++ b/base/tools/psb_z_glob_transpose.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_map.f90 b/base/tools/psb_z_map.f90 index 55500f583..e7c8a7409 100644 --- a/base/tools/psb_z_map.f90 +++ b/base/tools/psb_z_map.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -71,7 +71,7 @@ subroutine psb_z_map_U2V_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_V%get_global_rows() nc2 = map%p_desc_V%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work) + if (info == psb_success_) call psb_halo(x,map%p_desc_U,info,work=work) if (info == psb_success_) call psb_csmm(zone,map%mat_U2V,x,zzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -91,7 +91,7 @@ subroutine psb_z_map_U2V_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_V%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work) + if (info == psb_success_) call psb_halo(xt,map%desc_U,info,work=work) if (info == psb_success_) call psb_csmm(zone,map%mat_U2V,xt,zzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_V)) then call psb_sum(ctxt,yt(1:nr2)) @@ -115,19 +115,19 @@ end subroutine psb_z_map_U2V_a subroutine psb_z_map_U2V_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_z_map_U2V_v implicit none - class(psb_zlinmap_type), intent(in) :: map - complex(psb_dpk_), intent(in) :: alpha,beta - type(psb_z_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + class(psb_zlinmap_type), intent(in) :: map + complex(psb_dpk_), intent(in) :: alpha,beta + type(psb_z_vect_type), intent(inout) :: x,y + integer(psb_ipk_), intent(out) :: info type(psb_z_vect_type), optional, target, intent(inout) :: vtx,vty ! Local - type(psb_z_vect_type), target :: xt, yt - type(psb_z_vect_type),pointer :: ptx, pty - complex(psb_dpk_), allocatable :: xta(:), yta(:) - integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2 ,& + type(psb_z_vect_type), target :: xt, yt + type(psb_z_vect_type),pointer :: ptx, pty + complex(psb_dpk_), allocatable :: xta(:), yta(:) + integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2 ,& & map_kind, nr, iam, np - type(psb_ctxt_type) :: ctxt - character(len=20), parameter :: name='psb_map_U2V_v' + type(psb_ctxt_type) :: ctxt + character(len=20), parameter :: name = 'psb_map_U2V_v' info = psb_success_ if (.not.map%is_asb()) then @@ -253,7 +253,7 @@ subroutine psb_z_map_V2U_a(alpha,x,beta,y,map,info,work) nr2 = map%p_desc_U%get_global_rows() nc2 = map%p_desc_U%get_local_cols() allocate(yt(nc2),stat=info) - if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work) + if (info == psb_success_) call psb_halo(x,map%p_desc_V,info,work=work) if (info == psb_success_) call psb_csmm(zone,map%mat_V2U,x,zzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%p_desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -273,7 +273,7 @@ subroutine psb_z_map_V2U_a(alpha,x,beta,y,map,info,work) nc2 = map%desc_U%get_local_cols() allocate(xt(nc1),yt(nc2),stat=info) xt(1:nr1) = x(1:nr1) - if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work) + if (info == psb_success_) call psb_halo(xt,map%desc_V,info,work=work) if (info == psb_success_) call psb_csmm(zone,map%mat_V2U,xt,zzero,yt,info) if ((info == psb_success_) .and. psb_is_repl_desc(map%desc_U)) then call psb_sum(ctxt,yt(1:nr2)) @@ -296,19 +296,19 @@ end subroutine psb_z_map_V2U_a subroutine psb_z_map_V2U_v(alpha,x,beta,y,map,info,vtx,vty) use psb_base_mod, psb_protect_name => psb_z_map_V2U_v implicit none - class(psb_zlinmap_type), intent(in) :: map - complex(psb_dpk_), intent(in) :: alpha,beta - type(psb_z_vect_type), intent(inout) :: x,y - integer(psb_ipk_), intent(out) :: info + class(psb_zlinmap_type), intent(in) :: map + complex(psb_dpk_), intent(in) :: alpha,beta + type(psb_z_vect_type), intent(inout) :: x,y + integer(psb_ipk_), intent(out) :: info type(psb_z_vect_type), optional, target, intent(inout) :: vtx,vty ! Local - type(psb_z_vect_type), target :: xt, yt - type(psb_z_vect_type),pointer :: ptx, pty - complex(psb_dpk_), allocatable :: xta(:), yta(:) - integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2,& + type(psb_z_vect_type), target :: xt, yt + type(psb_z_vect_type),pointer :: ptx, pty + complex(psb_dpk_), allocatable :: xta(:), yta(:) + integer(psb_ipk_) :: i, j, nr1, nc1,nr2, nc2,& & map_kind, nr, iam, np - type(psb_ctxt_type) :: ctxt - character(len=20), parameter :: name='psb_map_V2U_v' + type(psb_ctxt_type) :: ctxt + character(len=20), parameter :: name = 'psb_map_V2U_v' info = psb_success_ if (.not.map%is_asb()) then diff --git a/base/tools/psb_z_par_csr_spspmm.f90 b/base/tools/psb_z_par_csr_spspmm.f90 index 6629aee25..455d2128f 100644 --- a/base/tools/psb_z_par_csr_spspmm.f90 +++ b/base/tools/psb_z_par_csr_spspmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_remap.F90 b/base/tools/psb_z_remap.F90 index 661ae3cc9..c8d23a600 100644 --- a/base/tools/psb_z_remap.F90 +++ b/base/tools/psb_z_remap.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_remote_mat.F90 b/base/tools/psb_z_remote_mat.F90 index 5542f2260..c30f7896f 100644 --- a/base/tools/psb_z_remote_mat.F90 +++ b/base/tools/psb_z_remote_mat.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_z_remote_vect.F90 b/base/tools/psb_z_remote_vect.F90 index 319ab38fd..083d23d7e 100644 --- a/base/tools/psb_z_remote_vect.F90 +++ b/base/tools/psb_z_remote_vect.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zallc.f90 b/base/tools/psb_zallc.f90 index bfc3d6780..a3ffa1ee7 100644 --- a/base/tools/psb_zallc.f90 +++ b/base/tools/psb_zallc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zallc_a.f90 b/base/tools/psb_zallc_a.f90 index 1af815e4a..a9fe74fd8 100644 --- a/base/tools/psb_zallc_a.f90 +++ b/base/tools/psb_zallc_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -147,7 +147,7 @@ end subroutine psb_zalloc !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zasb.f90 b/base/tools/psb_zasb.f90 index b8d797ecc..9e516dbce 100644 --- a/base/tools/psb_zasb.f90 +++ b/base/tools/psb_zasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -309,7 +309,7 @@ subroutine psb_zasb_multivect(x, desc_a, info, mold, scratch,n) dupl_ = x%get_dupl() if (scratch_) then call x%free(info) - call x%bld(ncol,n_,mold=mold) + call x%bld(ncol,n_,mold=mold,scratch=.true.) else call x%asb(ncol,n_,info) ! ..update halo elements.. diff --git a/base/tools/psb_zasb_a.f90 b/base/tools/psb_zasb_a.f90 index e8c9db992..1d6cae4da 100644 --- a/base/tools/psb_zasb_a.f90 +++ b/base/tools/psb_zasb_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -153,7 +153,7 @@ end subroutine psb_zasb !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zcdbldext.F90 b/base/tools/psb_zcdbldext.F90 index 0db84d7a0..fe83b784d 100644 --- a/base/tools/psb_zcdbldext.F90 +++ b/base/tools/psb_zcdbldext.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zfree.f90 b/base/tools/psb_zfree.f90 index 6f7f057b1..862432f42 100644 --- a/base/tools/psb_zfree.f90 +++ b/base/tools/psb_zfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zfree_a.f90 b/base/tools/psb_zfree_a.f90 index 95fa38d14..67e94de19 100644 --- a/base/tools/psb_zfree_a.f90 +++ b/base/tools/psb_zfree_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zgetelem.f90 b/base/tools/psb_zgetelem.f90 index ac130e826..a4cb114be 100644 --- a/base/tools/psb_zgetelem.f90 +++ b/base/tools/psb_zgetelem.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -108,3 +108,92 @@ function psb_z_getelem(x,index,desc_a,info) result(res) end function +! Function: psb_z_getmatelem +! Extract entries from a sparse matrix. Note: the row and column indices in index +! are assumed to be in global numbering and are converted on the fly. +! +! Arguments: +! a - type(psb_zspmat_type) The source matrix +! desc_a - type(psb_desc_type). The communication descriptor. +! rowindex - integer. Row index of x of the value to extract +! colindex - integer. Column index of x of the value to extract +! iam - integer. Index of the process requesting the value +! info - integer. return code + + +function psb_z_getmatelem(a,rowindex,colindex,desc_a,info) result(res) + use psb_base_mod, psb_protect_name => psb_z_getmatelem + use psi_mod + implicit none + + type(psb_zspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_lpk_), intent(in) :: rowindex, colindex + integer(psb_ipk_), intent(out) :: info + complex(psb_dpk_) :: res + + !locals + integer(psb_ipk_) :: localrowindex(1), localcolindex(1), jmin, jmax, imin, imax + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, err_act + integer(psb_lpk_) :: growindex(1), gcolindex(1) + integer(psb_lpk_), allocatable :: myidx(:),mylocal(:) + integer(psb_ipk_), allocatable, dimension(:) :: ia, ja + integer(psb_ipk_) :: nz + complex(psb_dpk_), allocatable, dimension(:) :: val + character(len=20) :: name + logical, parameter :: debug = .false. + + growindex(1) = rowindex + gcolindex(1) = colindex + res = zzero + if (psb_errstatus_fatal()) return + info=psb_success_ + call psb_erractionsave(err_act) + name = 'psb_z_getmatelem' + + if (.not.desc_a%is_ok()) then + info = psb_err_invalid_cd_state_ + call psb_errpush(info,name) + goto 9999 + end if + + ctxt = desc_a%get_context() + + call psb_info(ctxt, me, np) + if (np == -1) then + info = psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + call desc_a%indxmap%g2l(growindex,localrowindex,info,owned=.false.) + call desc_a%indxmap%g2l(gcolindex,localcolindex,info,owned=.false.) + imin = localrowindex(1) + imax = localrowindex(1) + jmin = localcolindex(1) + jmax = localcolindex(1) + if(debug.and.(localrowindex(1) < 1 .or. localcolindex(1) < 1)) then + write(*,*)"Process ",me," owns ",desc_a%get_local_rows()," rows"," Global row index is ", & + growindex,"Local row index is ",localrowindex + write(*,*)"Process ",me," owns ",desc_a%get_local_cols()," cols"," Global col index is ", & + gcolindex,"Local col index is ",localcolindex + myidx = desc_a%get_global_indices(owned=.false.) + mylocal = desc_a%get_global_indices(owned=.true.) + write(*,*)"My (local+halo) indexes are: ",myidx + write(*,*)"My (local) indexes are: ",mylocal + end if + if ( localrowindex(1) < 1 .or. localcolindex(1) < 1) then + res = zzero + else + call a%csget(imin, imax, nz, ia, ja, val, info, jmin=jmin, jmax=jmax) + res = val(1) + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + +end function diff --git a/base/tools/psb_zins.f90 b/base/tools/psb_zins.f90 index 8e8b2afd0..a966c0130 100644 --- a/base/tools/psb_zins.f90 +++ b/base/tools/psb_zins.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zins_a.f90 b/base/tools/psb_zins_a.f90 index 4b068117f..7bd8b1f9c 100644 --- a/base/tools/psb_zins_a.f90 +++ b/base/tools/psb_zins_a.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -195,7 +195,7 @@ end subroutine psb_zinsvi !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zspalloc.f90 b/base/tools/psb_zspalloc.f90 index 308774ef8..58a71b85c 100644 --- a/base/tools/psb_zspalloc.f90 +++ b/base/tools/psb_zspalloc.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zspasb.f90 b/base/tools/psb_zspasb.f90 index deba9edc2..163f0d5e5 100644 --- a/base/tools/psb_zspasb.f90 +++ b/base/tools/psb_zspasb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zspfree.f90 b/base/tools/psb_zspfree.f90 index 73f0bb273..3d89e4cbd 100644 --- a/base/tools/psb_zspfree.f90 +++ b/base/tools/psb_zspfree.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zsphalo.F90 b/base/tools/psb_zsphalo.F90 index 3a878172d..90151d451 100644 --- a/base/tools/psb_zsphalo.F90 +++ b/base/tools/psb_zsphalo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zspins.F90 b/base/tools/psb_zspins.F90 index f5181030b..2e73b7ae4 100644 --- a/base/tools/psb_zspins.F90 +++ b/base/tools/psb_zspins.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/base/tools/psb_zsprn.f90 b/base/tools/psb_zsprn.f90 index c1676bed0..0d797d482 100644 --- a/base/tools/psb_zsprn.f90 +++ b/base/tools/psb_zsprn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED From 29248d366f3f38d397e02c6c8f4de874b5fa28fb Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Tue, 26 May 2026 13:15:31 +0200 Subject: [PATCH 172/175] [UPDATE] Refactor after template update for RMA routines --- cbind/base/psb_c_psblas_cbind_mod.f90 | 3 +- cbind/base/psb_c_serial_cbind_mod.F90 | 45 +++++++++++ cbind/base/psb_c_tools_cbind_mod.F90 | 58 ++++++++++++-- cbind/base/psb_d_psblas_cbind_mod.f90 | 3 +- cbind/base/psb_d_serial_cbind_mod.F90 | 45 +++++++++++ cbind/base/psb_d_tools_cbind_mod.F90 | 58 ++++++++++++-- cbind/base/psb_s_psblas_cbind_mod.f90 | 3 +- cbind/base/psb_s_serial_cbind_mod.F90 | 45 +++++++++++ cbind/base/psb_s_tools_cbind_mod.F90 | 58 ++++++++++++-- cbind/base/psb_z_psblas_cbind_mod.f90 | 3 +- cbind/base/psb_z_serial_cbind_mod.F90 | 45 +++++++++++ cbind/base/psb_z_tools_cbind_mod.F90 | 58 ++++++++++++-- cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_csmm.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_from_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_mold.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_scal.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_scals.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_csrg_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_diag_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_diag_mold.F90 | 2 +- cuda/impl/psb_c_cuda_diag_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_diag_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 | 2 +- cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_c_cuda_elg_asb.f90 | 2 +- cuda/impl/psb_c_cuda_elg_csmm.F90 | 2 +- cuda/impl/psb_c_cuda_elg_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_elg_csput.F90 | 2 +- cuda/impl/psb_c_cuda_elg_from_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_c_cuda_elg_mold.F90 | 2 +- cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 | 2 +- cuda/impl/psb_c_cuda_elg_scal.F90 | 2 +- cuda/impl/psb_c_cuda_elg_scals.F90 | 2 +- cuda/impl/psb_c_cuda_elg_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_elg_trim.f90 | 2 +- cuda/impl/psb_c_cuda_elg_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_hdiag_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_hdiag_mold.F90 | 2 +- cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_csmm.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_from_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_mold.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_scal.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_scals.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_hlg_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_csmm.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_csmv.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_mold.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_scal.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_scals.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_to_gpu.F90 | 2 +- cuda/impl/psb_c_cuda_hybg_vect_mv.F90 | 2 +- cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 | 2 +- cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_csmm.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_from_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_mold.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_scal.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_scals.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_csrg_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_diag_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_diag_mold.F90 | 2 +- cuda/impl/psb_d_cuda_diag_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_diag_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 | 2 +- cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_d_cuda_elg_asb.f90 | 2 +- cuda/impl/psb_d_cuda_elg_csmm.F90 | 2 +- cuda/impl/psb_d_cuda_elg_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_elg_csput.F90 | 2 +- cuda/impl/psb_d_cuda_elg_from_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_d_cuda_elg_mold.F90 | 2 +- cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 | 2 +- cuda/impl/psb_d_cuda_elg_scal.F90 | 2 +- cuda/impl/psb_d_cuda_elg_scals.F90 | 2 +- cuda/impl/psb_d_cuda_elg_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_elg_trim.f90 | 2 +- cuda/impl/psb_d_cuda_elg_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_hdiag_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_hdiag_mold.F90 | 2 +- cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_csmm.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_from_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_mold.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_scal.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_scals.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_hlg_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_csmm.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_csmv.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_mold.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_scal.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_scals.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_to_gpu.F90 | 2 +- cuda/impl/psb_d_cuda_hybg_vect_mv.F90 | 2 +- cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 | 2 +- cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_csmm.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_from_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_mold.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_scal.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_scals.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_csrg_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_diag_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_diag_mold.F90 | 2 +- cuda/impl/psb_s_cuda_diag_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_diag_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 | 2 +- cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_s_cuda_elg_asb.f90 | 2 +- cuda/impl/psb_s_cuda_elg_csmm.F90 | 2 +- cuda/impl/psb_s_cuda_elg_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_elg_csput.F90 | 2 +- cuda/impl/psb_s_cuda_elg_from_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_s_cuda_elg_mold.F90 | 2 +- cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 | 2 +- cuda/impl/psb_s_cuda_elg_scal.F90 | 2 +- cuda/impl/psb_s_cuda_elg_scals.F90 | 2 +- cuda/impl/psb_s_cuda_elg_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_elg_trim.f90 | 2 +- cuda/impl/psb_s_cuda_elg_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_hdiag_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_hdiag_mold.F90 | 2 +- cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_csmm.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_from_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_mold.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_scal.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_scals.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_hlg_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_csmm.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_csmv.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_mold.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_scal.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_scals.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_to_gpu.F90 | 2 +- cuda/impl/psb_s_cuda_hybg_vect_mv.F90 | 2 +- cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 | 2 +- cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_csmm.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_from_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_mold.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_scal.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_scals.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_csrg_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_diag_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_diag_mold.F90 | 2 +- cuda/impl/psb_z_cuda_diag_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_diag_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 | 2 +- cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_z_cuda_elg_asb.f90 | 2 +- cuda/impl/psb_z_cuda_elg_csmm.F90 | 2 +- cuda/impl/psb_z_cuda_elg_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_elg_csput.F90 | 2 +- cuda/impl/psb_z_cuda_elg_from_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_z_cuda_elg_mold.F90 | 2 +- cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 | 2 +- cuda/impl/psb_z_cuda_elg_scal.F90 | 2 +- cuda/impl/psb_z_cuda_elg_scals.F90 | 2 +- cuda/impl/psb_z_cuda_elg_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_elg_trim.f90 | 2 +- cuda/impl/psb_z_cuda_elg_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_hdiag_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_hdiag_mold.F90 | 2 +- cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_csmm.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_from_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_mold.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_scal.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_scals.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_hlg_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_csmm.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_csmv.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_mold.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_scal.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_scals.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_to_gpu.F90 | 2 +- cuda/impl/psb_z_cuda_hybg_vect_mv.F90 | 2 +- cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 | 2 +- cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 | 2 +- cuda/psb_c_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_c_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_c_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_c_cuda_vect_mod.F90 | 2 +- cuda/psb_c_vectordev_mod.F90 | 2 +- cuda/psb_d_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_d_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_d_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_d_cuda_vect_mod.F90 | 2 +- cuda/psb_d_vectordev_mod.F90 | 2 +- cuda/psb_i_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_i_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_i_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_i_cuda_vect_mod.F90 | 2 +- cuda/psb_i_vectordev_mod.F90 | 2 +- cuda/psb_s_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_s_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_s_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_s_cuda_vect_mod.F90 | 2 +- cuda/psb_s_vectordev_mod.F90 | 2 +- cuda/psb_z_cuda_csrg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_diag_mat_mod.F90 | 2 +- cuda/psb_z_cuda_dnsg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_elg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_hdiag_mat_mod.F90 | 2 +- cuda/psb_z_cuda_hlg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_hybg_mat_mod.F90 | 2 +- cuda/psb_z_cuda_vect_mod.F90 | 2 +- cuda/psb_z_vectordev_mod.F90 | 2 +- ext/impl/psb_c_cp_dia_from_coo.f90 | 2 +- ext/impl/psb_c_cp_dia_to_coo.f90 | 2 +- ext/impl/psb_c_cp_ell_from_coo.f90 | 2 +- ext/impl/psb_c_cp_ell_from_fmt.f90 | 2 +- ext/impl/psb_c_cp_ell_to_coo.f90 | 2 +- ext/impl/psb_c_cp_ell_to_fmt.f90 | 2 +- ext/impl/psb_c_cp_hdia_from_coo.f90 | 2 +- ext/impl/psb_c_cp_hdia_to_coo.f90 | 2 +- ext/impl/psb_c_cp_hll_from_coo.f90 | 2 +- ext/impl/psb_c_cp_hll_from_fmt.f90 | 2 +- ext/impl/psb_c_cp_hll_to_coo.f90 | 2 +- ext/impl/psb_c_cp_hll_to_fmt.f90 | 2 +- ext/impl/psb_c_dia_aclsum.f90 | 2 +- ext/impl/psb_c_dia_allocate_mnnz.f90 | 2 +- ext/impl/psb_c_dia_arwsum.f90 | 2 +- ext/impl/psb_c_dia_colsum.f90 | 2 +- ext/impl/psb_c_dia_csgetptn.f90 | 2 +- ext/impl/psb_c_dia_csgetrow.f90 | 2 +- ext/impl/psb_c_dia_csmm.f90 | 2 +- ext/impl/psb_c_dia_csmv.f90 | 2 +- ext/impl/psb_c_dia_get_diag.f90 | 2 +- ext/impl/psb_c_dia_maxval.f90 | 2 +- ext/impl/psb_c_dia_mold.f90 | 2 +- ext/impl/psb_c_dia_print.f90 | 2 +- ext/impl/psb_c_dia_reallocate_nz.f90 | 2 +- ext/impl/psb_c_dia_reinit.f90 | 2 +- ext/impl/psb_c_dia_rowsum.f90 | 2 +- ext/impl/psb_c_dia_scal.f90 | 2 +- ext/impl/psb_c_dia_scals.f90 | 2 +- ext/impl/psb_c_ell_aclsum.f90 | 2 +- ext/impl/psb_c_ell_allocate_mnnz.f90 | 2 +- ext/impl/psb_c_ell_arwsum.f90 | 2 +- ext/impl/psb_c_ell_colsum.f90 | 2 +- ext/impl/psb_c_ell_csgetblk.f90 | 2 +- ext/impl/psb_c_ell_csgetptn.f90 | 2 +- ext/impl/psb_c_ell_csgetrow.f90 | 2 +- ext/impl/psb_c_ell_csmm.f90 | 2 +- ext/impl/psb_c_ell_csmv.f90 | 2 +- ext/impl/psb_c_ell_csnm1.f90 | 2 +- ext/impl/psb_c_ell_csnmi.f90 | 2 +- ext/impl/psb_c_ell_csput.f90 | 2 +- ext/impl/psb_c_ell_cssm.f90 | 2 +- ext/impl/psb_c_ell_cssv.f90 | 2 +- ext/impl/psb_c_ell_get_diag.f90 | 2 +- ext/impl/psb_c_ell_maxval.f90 | 2 +- ext/impl/psb_c_ell_mold.f90 | 2 +- ext/impl/psb_c_ell_print.f90 | 2 +- ext/impl/psb_c_ell_reallocate_nz.f90 | 2 +- ext/impl/psb_c_ell_reinit.f90 | 2 +- ext/impl/psb_c_ell_rowsum.f90 | 2 +- ext/impl/psb_c_ell_scal.f90 | 2 +- ext/impl/psb_c_ell_scals.f90 | 2 +- ext/impl/psb_c_ell_trim.f90 | 2 +- ext/impl/psb_c_hdia_allocate_mnnz.f90 | 2 +- ext/impl/psb_c_hdia_csmv.f90 | 2 +- ext/impl/psb_c_hdia_mold.f90 | 2 +- ext/impl/psb_c_hdia_print.f90 | 2 +- ext/impl/psb_c_hll_aclsum.f90 | 2 +- ext/impl/psb_c_hll_allocate_mnnz.f90 | 2 +- ext/impl/psb_c_hll_arwsum.f90 | 2 +- ext/impl/psb_c_hll_colsum.f90 | 2 +- ext/impl/psb_c_hll_csgetblk.f90 | 2 +- ext/impl/psb_c_hll_csgetptn.f90 | 2 +- ext/impl/psb_c_hll_csgetrow.f90 | 2 +- ext/impl/psb_c_hll_csmm.f90 | 2 +- ext/impl/psb_c_hll_csmv.f90 | 2 +- ext/impl/psb_c_hll_csnm1.f90 | 2 +- ext/impl/psb_c_hll_csnmi.f90 | 2 +- ext/impl/psb_c_hll_csput.f90 | 2 +- ext/impl/psb_c_hll_cssm.f90 | 2 +- ext/impl/psb_c_hll_cssv.f90 | 2 +- ext/impl/psb_c_hll_get_diag.f90 | 2 +- ext/impl/psb_c_hll_maxval.f90 | 2 +- ext/impl/psb_c_hll_mold.f90 | 2 +- ext/impl/psb_c_hll_print.f90 | 2 +- ext/impl/psb_c_hll_reallocate_nz.f90 | 2 +- ext/impl/psb_c_hll_reinit.f90 | 2 +- ext/impl/psb_c_hll_rowsum.f90 | 2 +- ext/impl/psb_c_hll_scal.f90 | 2 +- ext/impl/psb_c_hll_scals.f90 | 2 +- ext/impl/psb_c_mv_dia_from_coo.f90 | 2 +- ext/impl/psb_c_mv_dia_to_coo.f90 | 2 +- ext/impl/psb_c_mv_ell_from_coo.f90 | 2 +- ext/impl/psb_c_mv_ell_from_fmt.f90 | 2 +- ext/impl/psb_c_mv_ell_to_coo.f90 | 2 +- ext/impl/psb_c_mv_ell_to_fmt.f90 | 2 +- ext/impl/psb_c_mv_hdia_from_coo.f90 | 2 +- ext/impl/psb_c_mv_hdia_to_coo.f90 | 2 +- ext/impl/psb_c_mv_hll_from_coo.f90 | 2 +- ext/impl/psb_c_mv_hll_from_fmt.f90 | 2 +- ext/impl/psb_c_mv_hll_to_coo.f90 | 2 +- ext/impl/psb_c_mv_hll_to_fmt.f90 | 2 +- ext/impl/psb_d_cp_dia_from_coo.f90 | 2 +- ext/impl/psb_d_cp_dia_to_coo.f90 | 2 +- ext/impl/psb_d_cp_ell_from_coo.f90 | 2 +- ext/impl/psb_d_cp_ell_from_fmt.f90 | 2 +- ext/impl/psb_d_cp_ell_to_coo.f90 | 2 +- ext/impl/psb_d_cp_ell_to_fmt.f90 | 2 +- ext/impl/psb_d_cp_hdia_from_coo.f90 | 2 +- ext/impl/psb_d_cp_hdia_to_coo.f90 | 2 +- ext/impl/psb_d_cp_hll_from_coo.f90 | 2 +- ext/impl/psb_d_cp_hll_from_fmt.f90 | 2 +- ext/impl/psb_d_cp_hll_to_coo.f90 | 2 +- ext/impl/psb_d_cp_hll_to_fmt.f90 | 2 +- ext/impl/psb_d_dia_aclsum.f90 | 2 +- ext/impl/psb_d_dia_allocate_mnnz.f90 | 2 +- ext/impl/psb_d_dia_arwsum.f90 | 2 +- ext/impl/psb_d_dia_colsum.f90 | 2 +- ext/impl/psb_d_dia_csgetptn.f90 | 2 +- ext/impl/psb_d_dia_csgetrow.f90 | 2 +- ext/impl/psb_d_dia_csmm.f90 | 2 +- ext/impl/psb_d_dia_csmv.f90 | 2 +- ext/impl/psb_d_dia_get_diag.f90 | 2 +- ext/impl/psb_d_dia_maxval.f90 | 2 +- ext/impl/psb_d_dia_mold.f90 | 2 +- ext/impl/psb_d_dia_print.f90 | 2 +- ext/impl/psb_d_dia_reallocate_nz.f90 | 2 +- ext/impl/psb_d_dia_reinit.f90 | 2 +- ext/impl/psb_d_dia_rowsum.f90 | 2 +- ext/impl/psb_d_dia_scal.f90 | 2 +- ext/impl/psb_d_dia_scals.f90 | 2 +- ext/impl/psb_d_ell_aclsum.f90 | 2 +- ext/impl/psb_d_ell_allocate_mnnz.f90 | 2 +- ext/impl/psb_d_ell_arwsum.f90 | 2 +- ext/impl/psb_d_ell_colsum.f90 | 2 +- ext/impl/psb_d_ell_csgetblk.f90 | 2 +- ext/impl/psb_d_ell_csgetptn.f90 | 2 +- ext/impl/psb_d_ell_csgetrow.f90 | 2 +- ext/impl/psb_d_ell_csmm.f90 | 2 +- ext/impl/psb_d_ell_csmv.f90 | 2 +- ext/impl/psb_d_ell_csnm1.f90 | 2 +- ext/impl/psb_d_ell_csnmi.f90 | 2 +- ext/impl/psb_d_ell_csput.f90 | 2 +- ext/impl/psb_d_ell_cssm.f90 | 2 +- ext/impl/psb_d_ell_cssv.f90 | 2 +- ext/impl/psb_d_ell_get_diag.f90 | 2 +- ext/impl/psb_d_ell_maxval.f90 | 2 +- ext/impl/psb_d_ell_mold.f90 | 2 +- ext/impl/psb_d_ell_print.f90 | 2 +- ext/impl/psb_d_ell_reallocate_nz.f90 | 2 +- ext/impl/psb_d_ell_reinit.f90 | 2 +- ext/impl/psb_d_ell_rowsum.f90 | 2 +- ext/impl/psb_d_ell_scal.f90 | 2 +- ext/impl/psb_d_ell_scals.f90 | 2 +- ext/impl/psb_d_ell_trim.f90 | 2 +- ext/impl/psb_d_hdia_allocate_mnnz.f90 | 2 +- ext/impl/psb_d_hdia_csmv.f90 | 2 +- ext/impl/psb_d_hdia_mold.f90 | 2 +- ext/impl/psb_d_hdia_print.f90 | 2 +- ext/impl/psb_d_hll_aclsum.f90 | 2 +- ext/impl/psb_d_hll_allocate_mnnz.f90 | 2 +- ext/impl/psb_d_hll_arwsum.f90 | 2 +- ext/impl/psb_d_hll_colsum.f90 | 2 +- ext/impl/psb_d_hll_csgetblk.f90 | 2 +- ext/impl/psb_d_hll_csgetptn.f90 | 2 +- ext/impl/psb_d_hll_csgetrow.f90 | 2 +- ext/impl/psb_d_hll_csmm.f90 | 2 +- ext/impl/psb_d_hll_csmv.f90 | 2 +- ext/impl/psb_d_hll_csnm1.f90 | 2 +- ext/impl/psb_d_hll_csnmi.f90 | 2 +- ext/impl/psb_d_hll_csput.f90 | 2 +- ext/impl/psb_d_hll_cssm.f90 | 2 +- ext/impl/psb_d_hll_cssv.f90 | 2 +- ext/impl/psb_d_hll_get_diag.f90 | 2 +- ext/impl/psb_d_hll_maxval.f90 | 2 +- ext/impl/psb_d_hll_mold.f90 | 2 +- ext/impl/psb_d_hll_print.f90 | 2 +- ext/impl/psb_d_hll_reallocate_nz.f90 | 2 +- ext/impl/psb_d_hll_reinit.f90 | 2 +- ext/impl/psb_d_hll_rowsum.f90 | 2 +- ext/impl/psb_d_hll_scal.f90 | 2 +- ext/impl/psb_d_hll_scals.f90 | 2 +- ext/impl/psb_d_mv_dia_from_coo.f90 | 2 +- ext/impl/psb_d_mv_dia_to_coo.f90 | 2 +- ext/impl/psb_d_mv_ell_from_coo.f90 | 2 +- ext/impl/psb_d_mv_ell_from_fmt.f90 | 2 +- ext/impl/psb_d_mv_ell_to_coo.f90 | 2 +- ext/impl/psb_d_mv_ell_to_fmt.f90 | 2 +- ext/impl/psb_d_mv_hdia_from_coo.f90 | 2 +- ext/impl/psb_d_mv_hdia_to_coo.f90 | 2 +- ext/impl/psb_d_mv_hll_from_coo.f90 | 2 +- ext/impl/psb_d_mv_hll_from_fmt.f90 | 2 +- ext/impl/psb_d_mv_hll_to_coo.f90 | 2 +- ext/impl/psb_d_mv_hll_to_fmt.f90 | 2 +- ext/impl/psb_s_cp_dia_from_coo.f90 | 2 +- ext/impl/psb_s_cp_dia_to_coo.f90 | 2 +- ext/impl/psb_s_cp_ell_from_coo.f90 | 2 +- ext/impl/psb_s_cp_ell_from_fmt.f90 | 2 +- ext/impl/psb_s_cp_ell_to_coo.f90 | 2 +- ext/impl/psb_s_cp_ell_to_fmt.f90 | 2 +- ext/impl/psb_s_cp_hdia_from_coo.f90 | 2 +- ext/impl/psb_s_cp_hdia_to_coo.f90 | 2 +- ext/impl/psb_s_cp_hll_from_coo.f90 | 2 +- ext/impl/psb_s_cp_hll_from_fmt.f90 | 2 +- ext/impl/psb_s_cp_hll_to_coo.f90 | 2 +- ext/impl/psb_s_cp_hll_to_fmt.f90 | 2 +- ext/impl/psb_s_dia_aclsum.f90 | 2 +- ext/impl/psb_s_dia_allocate_mnnz.f90 | 2 +- ext/impl/psb_s_dia_arwsum.f90 | 2 +- ext/impl/psb_s_dia_colsum.f90 | 2 +- ext/impl/psb_s_dia_csgetptn.f90 | 2 +- ext/impl/psb_s_dia_csgetrow.f90 | 2 +- ext/impl/psb_s_dia_csmm.f90 | 2 +- ext/impl/psb_s_dia_csmv.f90 | 2 +- ext/impl/psb_s_dia_get_diag.f90 | 2 +- ext/impl/psb_s_dia_maxval.f90 | 2 +- ext/impl/psb_s_dia_mold.f90 | 2 +- ext/impl/psb_s_dia_print.f90 | 2 +- ext/impl/psb_s_dia_reallocate_nz.f90 | 2 +- ext/impl/psb_s_dia_reinit.f90 | 2 +- ext/impl/psb_s_dia_rowsum.f90 | 2 +- ext/impl/psb_s_dia_scal.f90 | 2 +- ext/impl/psb_s_dia_scals.f90 | 2 +- ext/impl/psb_s_ell_aclsum.f90 | 2 +- ext/impl/psb_s_ell_allocate_mnnz.f90 | 2 +- ext/impl/psb_s_ell_arwsum.f90 | 2 +- ext/impl/psb_s_ell_colsum.f90 | 2 +- ext/impl/psb_s_ell_csgetblk.f90 | 2 +- ext/impl/psb_s_ell_csgetptn.f90 | 2 +- ext/impl/psb_s_ell_csgetrow.f90 | 2 +- ext/impl/psb_s_ell_csmm.f90 | 2 +- ext/impl/psb_s_ell_csmv.f90 | 2 +- ext/impl/psb_s_ell_csnm1.f90 | 2 +- ext/impl/psb_s_ell_csnmi.f90 | 2 +- ext/impl/psb_s_ell_csput.f90 | 2 +- ext/impl/psb_s_ell_cssm.f90 | 2 +- ext/impl/psb_s_ell_cssv.f90 | 2 +- ext/impl/psb_s_ell_get_diag.f90 | 2 +- ext/impl/psb_s_ell_maxval.f90 | 2 +- ext/impl/psb_s_ell_mold.f90 | 2 +- ext/impl/psb_s_ell_print.f90 | 2 +- ext/impl/psb_s_ell_reallocate_nz.f90 | 2 +- ext/impl/psb_s_ell_reinit.f90 | 2 +- ext/impl/psb_s_ell_rowsum.f90 | 2 +- ext/impl/psb_s_ell_scal.f90 | 2 +- ext/impl/psb_s_ell_scals.f90 | 2 +- ext/impl/psb_s_ell_trim.f90 | 2 +- ext/impl/psb_s_hdia_allocate_mnnz.f90 | 2 +- ext/impl/psb_s_hdia_csmv.f90 | 2 +- ext/impl/psb_s_hdia_mold.f90 | 2 +- ext/impl/psb_s_hdia_print.f90 | 2 +- ext/impl/psb_s_hll_aclsum.f90 | 2 +- ext/impl/psb_s_hll_allocate_mnnz.f90 | 2 +- ext/impl/psb_s_hll_arwsum.f90 | 2 +- ext/impl/psb_s_hll_colsum.f90 | 2 +- ext/impl/psb_s_hll_csgetblk.f90 | 2 +- ext/impl/psb_s_hll_csgetptn.f90 | 2 +- ext/impl/psb_s_hll_csgetrow.f90 | 2 +- ext/impl/psb_s_hll_csmm.f90 | 2 +- ext/impl/psb_s_hll_csmv.f90 | 2 +- ext/impl/psb_s_hll_csnm1.f90 | 2 +- ext/impl/psb_s_hll_csnmi.f90 | 2 +- ext/impl/psb_s_hll_csput.f90 | 2 +- ext/impl/psb_s_hll_cssm.f90 | 2 +- ext/impl/psb_s_hll_cssv.f90 | 2 +- ext/impl/psb_s_hll_get_diag.f90 | 2 +- ext/impl/psb_s_hll_maxval.f90 | 2 +- ext/impl/psb_s_hll_mold.f90 | 2 +- ext/impl/psb_s_hll_print.f90 | 2 +- ext/impl/psb_s_hll_reallocate_nz.f90 | 2 +- ext/impl/psb_s_hll_reinit.f90 | 2 +- ext/impl/psb_s_hll_rowsum.f90 | 2 +- ext/impl/psb_s_hll_scal.f90 | 2 +- ext/impl/psb_s_hll_scals.f90 | 2 +- ext/impl/psb_s_mv_dia_from_coo.f90 | 2 +- ext/impl/psb_s_mv_dia_to_coo.f90 | 2 +- ext/impl/psb_s_mv_ell_from_coo.f90 | 2 +- ext/impl/psb_s_mv_ell_from_fmt.f90 | 2 +- ext/impl/psb_s_mv_ell_to_coo.f90 | 2 +- ext/impl/psb_s_mv_ell_to_fmt.f90 | 2 +- ext/impl/psb_s_mv_hdia_from_coo.f90 | 2 +- ext/impl/psb_s_mv_hdia_to_coo.f90 | 2 +- ext/impl/psb_s_mv_hll_from_coo.f90 | 2 +- ext/impl/psb_s_mv_hll_from_fmt.f90 | 2 +- ext/impl/psb_s_mv_hll_to_coo.f90 | 2 +- ext/impl/psb_s_mv_hll_to_fmt.f90 | 2 +- ext/impl/psb_z_cp_dia_from_coo.f90 | 2 +- ext/impl/psb_z_cp_dia_to_coo.f90 | 2 +- ext/impl/psb_z_cp_ell_from_coo.f90 | 2 +- ext/impl/psb_z_cp_ell_from_fmt.f90 | 2 +- ext/impl/psb_z_cp_ell_to_coo.f90 | 2 +- ext/impl/psb_z_cp_ell_to_fmt.f90 | 2 +- ext/impl/psb_z_cp_hdia_from_coo.f90 | 2 +- ext/impl/psb_z_cp_hdia_to_coo.f90 | 2 +- ext/impl/psb_z_cp_hll_from_coo.f90 | 2 +- ext/impl/psb_z_cp_hll_from_fmt.f90 | 2 +- ext/impl/psb_z_cp_hll_to_coo.f90 | 2 +- ext/impl/psb_z_cp_hll_to_fmt.f90 | 2 +- ext/impl/psb_z_dia_aclsum.f90 | 2 +- ext/impl/psb_z_dia_allocate_mnnz.f90 | 2 +- ext/impl/psb_z_dia_arwsum.f90 | 2 +- ext/impl/psb_z_dia_colsum.f90 | 2 +- ext/impl/psb_z_dia_csgetptn.f90 | 2 +- ext/impl/psb_z_dia_csgetrow.f90 | 2 +- ext/impl/psb_z_dia_csmm.f90 | 2 +- ext/impl/psb_z_dia_csmv.f90 | 2 +- ext/impl/psb_z_dia_get_diag.f90 | 2 +- ext/impl/psb_z_dia_maxval.f90 | 2 +- ext/impl/psb_z_dia_mold.f90 | 2 +- ext/impl/psb_z_dia_print.f90 | 2 +- ext/impl/psb_z_dia_reallocate_nz.f90 | 2 +- ext/impl/psb_z_dia_reinit.f90 | 2 +- ext/impl/psb_z_dia_rowsum.f90 | 2 +- ext/impl/psb_z_dia_scal.f90 | 2 +- ext/impl/psb_z_dia_scals.f90 | 2 +- ext/impl/psb_z_ell_aclsum.f90 | 2 +- ext/impl/psb_z_ell_allocate_mnnz.f90 | 2 +- ext/impl/psb_z_ell_arwsum.f90 | 2 +- ext/impl/psb_z_ell_colsum.f90 | 2 +- ext/impl/psb_z_ell_csgetblk.f90 | 2 +- ext/impl/psb_z_ell_csgetptn.f90 | 2 +- ext/impl/psb_z_ell_csgetrow.f90 | 2 +- ext/impl/psb_z_ell_csmm.f90 | 2 +- ext/impl/psb_z_ell_csmv.f90 | 2 +- ext/impl/psb_z_ell_csnm1.f90 | 2 +- ext/impl/psb_z_ell_csnmi.f90 | 2 +- ext/impl/psb_z_ell_csput.f90 | 2 +- ext/impl/psb_z_ell_cssm.f90 | 2 +- ext/impl/psb_z_ell_cssv.f90 | 2 +- ext/impl/psb_z_ell_get_diag.f90 | 2 +- ext/impl/psb_z_ell_maxval.f90 | 2 +- ext/impl/psb_z_ell_mold.f90 | 2 +- ext/impl/psb_z_ell_print.f90 | 2 +- ext/impl/psb_z_ell_reallocate_nz.f90 | 2 +- ext/impl/psb_z_ell_reinit.f90 | 2 +- ext/impl/psb_z_ell_rowsum.f90 | 2 +- ext/impl/psb_z_ell_scal.f90 | 2 +- ext/impl/psb_z_ell_scals.f90 | 2 +- ext/impl/psb_z_ell_trim.f90 | 2 +- ext/impl/psb_z_hdia_allocate_mnnz.f90 | 2 +- ext/impl/psb_z_hdia_csmv.f90 | 2 +- ext/impl/psb_z_hdia_mold.f90 | 2 +- ext/impl/psb_z_hdia_print.f90 | 2 +- ext/impl/psb_z_hll_aclsum.f90 | 2 +- ext/impl/psb_z_hll_allocate_mnnz.f90 | 2 +- ext/impl/psb_z_hll_arwsum.f90 | 2 +- ext/impl/psb_z_hll_colsum.f90 | 2 +- ext/impl/psb_z_hll_csgetblk.f90 | 2 +- ext/impl/psb_z_hll_csgetptn.f90 | 2 +- ext/impl/psb_z_hll_csgetrow.f90 | 2 +- ext/impl/psb_z_hll_csmm.f90 | 2 +- ext/impl/psb_z_hll_csmv.f90 | 2 +- ext/impl/psb_z_hll_csnm1.f90 | 2 +- ext/impl/psb_z_hll_csnmi.f90 | 2 +- ext/impl/psb_z_hll_csput.f90 | 2 +- ext/impl/psb_z_hll_cssm.f90 | 2 +- ext/impl/psb_z_hll_cssv.f90 | 2 +- ext/impl/psb_z_hll_get_diag.f90 | 2 +- ext/impl/psb_z_hll_maxval.f90 | 2 +- ext/impl/psb_z_hll_mold.f90 | 2 +- ext/impl/psb_z_hll_print.f90 | 2 +- ext/impl/psb_z_hll_reallocate_nz.f90 | 2 +- ext/impl/psb_z_hll_reinit.f90 | 2 +- ext/impl/psb_z_hll_rowsum.f90 | 2 +- ext/impl/psb_z_hll_scal.f90 | 2 +- ext/impl/psb_z_hll_scals.f90 | 2 +- ext/impl/psb_z_mv_dia_from_coo.f90 | 2 +- ext/impl/psb_z_mv_dia_to_coo.f90 | 2 +- ext/impl/psb_z_mv_ell_from_coo.f90 | 2 +- ext/impl/psb_z_mv_ell_from_fmt.f90 | 2 +- ext/impl/psb_z_mv_ell_to_coo.f90 | 2 +- ext/impl/psb_z_mv_ell_to_fmt.f90 | 2 +- ext/impl/psb_z_mv_hdia_from_coo.f90 | 2 +- ext/impl/psb_z_mv_hdia_to_coo.f90 | 2 +- ext/impl/psb_z_mv_hll_from_coo.f90 | 2 +- ext/impl/psb_z_mv_hll_from_fmt.f90 | 2 +- ext/impl/psb_z_mv_hll_to_coo.f90 | 2 +- ext/impl/psb_z_mv_hll_to_fmt.f90 | 2 +- ext/impl/psi_c_convert_dia_from_coo.f90 | 2 +- ext/impl/psi_c_convert_ell_from_coo.f90 | 2 +- ext/impl/psi_c_convert_hll_from_coo.f90 | 2 +- ext/impl/psi_c_xtr_coo_from_dia.f90 | 2 +- ext/impl/psi_c_xtr_dia_from_coo.f90 | 2 +- ext/impl/psi_c_xtr_ell_from_coo.f90 | 2 +- ext/impl/psi_d_convert_dia_from_coo.f90 | 2 +- ext/impl/psi_d_convert_ell_from_coo.f90 | 2 +- ext/impl/psi_d_convert_hll_from_coo.f90 | 2 +- ext/impl/psi_d_xtr_coo_from_dia.f90 | 2 +- ext/impl/psi_d_xtr_dia_from_coo.f90 | 2 +- ext/impl/psi_d_xtr_ell_from_coo.f90 | 2 +- ext/impl/psi_s_convert_dia_from_coo.f90 | 2 +- ext/impl/psi_s_convert_ell_from_coo.f90 | 2 +- ext/impl/psi_s_convert_hll_from_coo.f90 | 2 +- ext/impl/psi_s_xtr_coo_from_dia.f90 | 2 +- ext/impl/psi_s_xtr_dia_from_coo.f90 | 2 +- ext/impl/psi_s_xtr_ell_from_coo.f90 | 2 +- ext/impl/psi_z_convert_dia_from_coo.f90 | 2 +- ext/impl/psi_z_convert_ell_from_coo.f90 | 2 +- ext/impl/psi_z_convert_hll_from_coo.f90 | 2 +- ext/impl/psi_z_xtr_coo_from_dia.f90 | 2 +- ext/impl/psi_z_xtr_dia_from_coo.f90 | 2 +- ext/impl/psi_z_xtr_ell_from_coo.f90 | 2 +- ext/psb_c_dia_mat_mod.f90 | 2 +- ext/psb_c_dns_mat_mod.f90 | 2 +- ext/psb_c_ell_mat_mod.f90 | 2 +- ext/psb_c_hdia_mat_mod.f90 | 2 +- ext/psb_c_hll_mat_mod.f90 | 4 +- ext/psb_d_dia_mat_mod.f90 | 2 +- ext/psb_d_dns_mat_mod.f90 | 2 +- ext/psb_d_ell_mat_mod.f90 | 2 +- ext/psb_d_hdia_mat_mod.f90 | 2 +- ext/psb_d_hll_mat_mod.f90 | 4 +- ext/psb_s_dia_mat_mod.f90 | 2 +- ext/psb_s_dns_mat_mod.f90 | 2 +- ext/psb_s_ell_mat_mod.f90 | 2 +- ext/psb_s_hdia_mat_mod.f90 | 2 +- ext/psb_s_hll_mat_mod.f90 | 4 +- ext/psb_z_dia_mat_mod.f90 | 2 +- ext/psb_z_dns_mat_mod.f90 | 2 +- ext/psb_z_ell_mat_mod.f90 | 2 +- ext/psb_z_hdia_mat_mod.f90 | 2 +- ext/psb_z_hll_mat_mod.f90 | 4 +- ext/psi_c_ext_util_mod.f90 | 2 +- ext/psi_d_ext_util_mod.f90 | 2 +- ext/psi_s_ext_util_mod.f90 | 2 +- ext/psi_z_ext_util_mod.f90 | 2 +- linsolve/impl/psb_cbicg.f90 | 12 +-- linsolve/impl/psb_ccg.F90 | 11 +-- linsolve/impl/psb_ccgs.f90 | 7 +- linsolve/impl/psb_ccgstab.f90 | 11 +-- linsolve/impl/psb_ccgstabl.f90 | 2 +- linsolve/impl/psb_cfcg.F90 | 3 +- linsolve/impl/psb_cgcr.f90 | 3 +- linsolve/impl/psb_ckrylov.f90 | 2 +- linsolve/impl/psb_crgmres.f90 | 4 +- linsolve/impl/psb_crichardson.f90 | 11 +-- linsolve/impl/psb_dbicg.f90 | 13 +--- linsolve/impl/psb_dcg.F90 | 30 +------ linsolve/impl/psb_dcgs.f90 | 7 +- linsolve/impl/psb_dcgstab.f90 | 13 +--- linsolve/impl/psb_dcgstabl.f90 | 2 +- linsolve/impl/psb_dfcg.F90 | 3 +- linsolve/impl/psb_dgcr.f90 | 2 +- linsolve/impl/psb_dkrylov.f90 | 2 +- linsolve/impl/psb_drgmres.f90 | 2 +- linsolve/impl/psb_drichardson.f90 | 13 +--- linsolve/impl/psb_sbicg.f90 | 9 +-- linsolve/impl/psb_scg.F90 | 11 +-- linsolve/impl/psb_scgs.f90 | 7 +- linsolve/impl/psb_scgstab.f90 | 4 +- linsolve/impl/psb_scgstabl.f90 | 2 +- linsolve/impl/psb_sfcg.F90 | 3 +- linsolve/impl/psb_sgcr.f90 | 10 ++- linsolve/impl/psb_skrylov.f90 | 2 +- linsolve/impl/psb_srgmres.f90 | 2 +- linsolve/impl/psb_srichardson.f90 | 9 +-- linsolve/impl/psb_zbicg.f90 | 8 +- linsolve/impl/psb_zcg.F90 | 11 +-- linsolve/impl/psb_zcgs.f90 | 7 +- linsolve/impl/psb_zcgstab.f90 | 5 +- linsolve/impl/psb_zcgstabl.f90 | 2 +- linsolve/impl/psb_zfcg.F90 | 2 +- linsolve/impl/psb_zgcr.f90 | 7 +- linsolve/impl/psb_zkrylov.f90 | 2 +- linsolve/impl/psb_zrgmres.f90 | 2 +- linsolve/impl/psb_zrichardson.f90 | 9 +-- linsolve/psb_c_linsolve_conv_mod.f90 | 2 +- linsolve/psb_d_linsolve_conv_mod.f90 | 2 +- linsolve/psb_s_linsolve_conv_mod.f90 | 2 +- linsolve/psb_z_linsolve_conv_mod.f90 | 2 +- prec/impl/psb_c_ainv_bld.f90 | 4 +- prec/impl/psb_c_bjacprec_impl.f90 | 37 ++++----- prec/impl/psb_c_diagprec_impl.f90 | 2 +- prec/impl/psb_c_ilu0_fact.f90 | 4 +- prec/impl/psb_c_iluk_fact.f90 | 4 +- prec/impl/psb_c_ilut_fact.f90 | 4 +- prec/impl/psb_c_invk_fact.f90 | 2 +- prec/impl/psb_c_invt_fact.f90 | 4 +- prec/impl/psb_c_nullprec_impl.f90 | 2 +- prec/impl/psb_c_prec_type_impl.f90 | 73 ++++++----------- prec/impl/psb_c_sp_drop.f90 | 4 +- prec/impl/psb_c_sparsify.f90 | 4 +- prec/impl/psb_cprecbld.f90 | 10 +-- prec/impl/psb_cprecinit.f90 | 2 +- prec/impl/psb_crwclip.f90 | 4 +- prec/impl/psb_csparse_biconjg_llk.F90 | 2 +- prec/impl/psb_csparse_biconjg_llk_noth.F90 | 2 +- prec/impl/psb_csparse_biconjg_mlk.F90 | 2 +- prec/impl/psb_csparse_biconjg_s_ft_llk.F90 | 2 +- prec/impl/psb_csparse_biconjg_s_llk.F90 | 2 +- prec/impl/psb_d_ainv_bld.f90 | 4 +- prec/impl/psb_d_bjacprec_impl.f90 | 56 +++++++------- prec/impl/psb_d_diagprec_impl.f90 | 2 +- prec/impl/psb_d_ilu0_fact.f90 | 4 +- prec/impl/psb_d_iluk_fact.f90 | 4 +- prec/impl/psb_d_ilut_fact.f90 | 4 +- prec/impl/psb_d_invk_fact.f90 | 2 +- prec/impl/psb_d_invt_fact.f90 | 4 +- prec/impl/psb_d_nullprec_impl.f90 | 2 +- prec/impl/psb_d_prec_type_impl.f90 | 76 +++++++----------- prec/impl/psb_d_sp_drop.f90 | 4 +- prec/impl/psb_d_sparsify.f90 | 4 +- prec/impl/psb_dprecbld.f90 | 10 +-- prec/impl/psb_dprecinit.f90 | 2 +- prec/impl/psb_drwclip.f90 | 4 +- prec/impl/psb_dsparse_biconjg_llk.F90 | 2 +- prec/impl/psb_dsparse_biconjg_llk_noth.F90 | 2 +- prec/impl/psb_dsparse_biconjg_mlk.F90 | 2 +- prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 | 2 +- prec/impl/psb_dsparse_biconjg_s_llk.F90 | 2 +- prec/impl/psb_s_ainv_bld.f90 | 4 +- prec/impl/psb_s_bjacprec_impl.f90 | 57 +++++++------- prec/impl/psb_s_diagprec_impl.f90 | 2 +- prec/impl/psb_s_ilu0_fact.f90 | 4 +- prec/impl/psb_s_iluk_fact.f90 | 4 +- prec/impl/psb_s_ilut_fact.f90 | 4 +- prec/impl/psb_s_invk_fact.f90 | 2 +- prec/impl/psb_s_invt_fact.f90 | 4 +- prec/impl/psb_s_nullprec_impl.f90 | 2 +- prec/impl/psb_s_prec_type_impl.f90 | 80 +++++++------------ prec/impl/psb_s_sp_drop.f90 | 4 +- prec/impl/psb_s_sparsify.f90 | 4 +- prec/impl/psb_sprecbld.f90 | 10 +-- prec/impl/psb_sprecinit.f90 | 2 +- prec/impl/psb_srwclip.f90 | 4 +- prec/impl/psb_ssparse_biconjg_llk.F90 | 2 +- prec/impl/psb_ssparse_biconjg_llk_noth.F90 | 2 +- prec/impl/psb_ssparse_biconjg_mlk.F90 | 2 +- prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 | 2 +- prec/impl/psb_ssparse_biconjg_s_llk.F90 | 2 +- prec/impl/psb_z_ainv_bld.f90 | 4 +- prec/impl/psb_z_bjacprec_impl.f90 | 42 +++++----- prec/impl/psb_z_diagprec_impl.f90 | 2 +- prec/impl/psb_z_ilu0_fact.f90 | 4 +- prec/impl/psb_z_iluk_fact.f90 | 4 +- prec/impl/psb_z_ilut_fact.f90 | 4 +- prec/impl/psb_z_invk_fact.f90 | 2 +- prec/impl/psb_z_invt_fact.f90 | 4 +- prec/impl/psb_z_nullprec_impl.f90 | 2 +- prec/impl/psb_z_prec_type_impl.f90 | 86 ++++++++------------- prec/impl/psb_z_sp_drop.f90 | 4 +- prec/impl/psb_z_sparsify.f90 | 4 +- prec/impl/psb_zprecbld.f90 | 10 +-- prec/impl/psb_zprecinit.f90 | 2 +- prec/impl/psb_zrwclip.f90 | 4 +- prec/impl/psb_zsparse_biconjg_llk.F90 | 2 +- prec/impl/psb_zsparse_biconjg_llk_noth.F90 | 2 +- prec/impl/psb_zsparse_biconjg_mlk.F90 | 2 +- prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 | 2 +- prec/impl/psb_zsparse_biconjg_s_llk.F90 | 2 +- prec/psb_c_ainv_fact_mod.f90 | 4 +- prec/psb_c_ainv_tools_mod.f90 | 4 +- prec/psb_c_base_prec_mod.f90 | 15 ++-- prec/psb_c_biconjg_mod.F90 | 6 +- prec/psb_c_bjacprec.f90 | 15 ++-- prec/psb_c_diagprec.f90 | 2 +- prec/psb_c_ilu_fact_mod.f90 | 4 +- prec/psb_c_invk_fact_mod.f90 | 4 +- prec/psb_c_invt_fact_mod.f90 | 4 +- prec/psb_c_nullprec.f90 | 14 ++-- prec/psb_c_prec_mod.f90 | 2 +- prec/psb_c_prec_type.f90 | 41 +++++----- prec/psb_d_ainv_fact_mod.f90 | 4 +- prec/psb_d_ainv_tools_mod.f90 | 4 +- prec/psb_d_base_prec_mod.f90 | 14 ++-- prec/psb_d_biconjg_mod.F90 | 6 +- prec/psb_d_bjacprec.f90 | 14 ++-- prec/psb_d_diagprec.f90 | 2 +- prec/psb_d_ilu_fact_mod.f90 | 4 +- prec/psb_d_invk_fact_mod.f90 | 4 +- prec/psb_d_invt_fact_mod.f90 | 4 +- prec/psb_d_nullprec.f90 | 14 ++-- prec/psb_d_prec_mod.f90 | 2 +- prec/psb_d_prec_type.f90 | 51 ++++++------ prec/psb_s_ainv_fact_mod.f90 | 4 +- prec/psb_s_ainv_tools_mod.f90 | 4 +- prec/psb_s_base_prec_mod.f90 | 27 ++++--- prec/psb_s_biconjg_mod.F90 | 6 +- prec/psb_s_bjacprec.f90 | 14 ++-- prec/psb_s_diagprec.f90 | 2 +- prec/psb_s_ilu_fact_mod.f90 | 4 +- prec/psb_s_invk_fact_mod.f90 | 4 +- prec/psb_s_invt_fact_mod.f90 | 4 +- prec/psb_s_nullprec.f90 | 14 ++-- prec/psb_s_prec_mod.f90 | 2 +- prec/psb_s_prec_type.f90 | 51 ++++++------ prec/psb_z_ainv_fact_mod.f90 | 4 +- prec/psb_z_ainv_tools_mod.f90 | 4 +- prec/psb_z_base_prec_mod.f90 | 14 ++-- prec/psb_z_biconjg_mod.F90 | 6 +- prec/psb_z_bjacprec.f90 | 14 ++-- prec/psb_z_diagprec.f90 | 2 +- prec/psb_z_ilu_fact_mod.f90 | 4 +- prec/psb_z_invk_fact_mod.f90 | 4 +- prec/psb_z_invt_fact_mod.f90 | 4 +- prec/psb_z_nullprec.f90 | 14 ++-- prec/psb_z_prec_mod.f90 | 2 +- prec/psb_z_prec_type.f90 | 57 +++++++------- test/comm/spmv/psb_spmv_overlap_sbatch.sh | 50 ------------ test/comm/spmv/psb_spmv_test.f90 | 6 -- test/fileread/psb_cf_sample.f90 | 2 +- test/fileread/psb_df_sample.f90 | 2 +- test/fileread/psb_sf_sample.f90 | 2 +- test/fileread/psb_zf_sample.f90 | 2 +- test/pdegen/psb_d_pde2d.F90 | 6 +- test/pdegen/psb_d_pde3d.F90 | 10 +-- test/pdegen/psb_s_pde2d.F90 | 6 +- test/pdegen/psb_s_pde3d.F90 | 8 +- util/psb_c_mat_dist_impl.f90 | 2 +- util/psb_c_mat_dist_mod.f90 | 2 +- util/psb_c_renum_impl.F90 | 2 +- util/psb_c_renum_mod.f90 | 2 +- util/psb_d_mat_dist_impl.f90 | 2 +- util/psb_d_mat_dist_mod.f90 | 2 +- util/psb_d_renum_impl.F90 | 2 +- util/psb_d_renum_mod.f90 | 2 +- util/psb_s_mat_dist_impl.f90 | 2 +- util/psb_s_mat_dist_mod.f90 | 2 +- util/psb_s_renum_impl.F90 | 2 +- util/psb_s_renum_mod.f90 | 2 +- util/psb_z_mat_dist_impl.f90 | 2 +- util/psb_z_mat_dist_mod.f90 | 2 +- util/psb_z_renum_impl.F90 | 2 +- util/psb_z_renum_mod.f90 | 2 +- 971 files changed, 1850 insertions(+), 1755 deletions(-) delete mode 100644 test/comm/spmv/psb_spmv_overlap_sbatch.sh diff --git a/cbind/base/psb_c_psblas_cbind_mod.f90 b/cbind/base/psb_c_psblas_cbind_mod.f90 index cad716578..ad3aee04c 100644 --- a/cbind/base/psb_c_psblas_cbind_mod.f90 +++ b/cbind/base/psb_c_psblas_cbind_mod.f90 @@ -429,14 +429,13 @@ contains function psb_c_cgecmp(xh,ch,zh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res - + real(c_float_complex), value :: ch type(psb_c_cvector) :: xh,zh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_c_vect_type), pointer :: xp,zp integer(psb_c_ipk_) :: info - real(c_float_complex), value :: ch res = -1 diff --git a/cbind/base/psb_c_serial_cbind_mod.F90 b/cbind/base/psb_c_serial_cbind_mod.F90 index 805f4965a..7de87ccce 100644 --- a/cbind/base/psb_c_serial_cbind_mod.F90 +++ b/cbind/base/psb_c_serial_cbind_mod.F90 @@ -200,6 +200,51 @@ contains end function psb_c_cvect_set_vect + function psb_c_cvect_set_entry(x,index,val) bind(c) result(info) + use psb_base_mod + implicit none + + type(psb_c_cvector) :: x + type(psb_c_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + integer(psb_c_ipk_), value :: index + complex(c_float_complex), value :: val + integer(psb_c_ipk_) :: ixb + + info = -1; + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + call xp%set_entry((index+(1-ixb)),val) + info = 0 + + end function psb_c_cvect_set_entry + + + function psb_c_cvect_get_entry(x,index) bind(c) result(res) + use psb_base_mod + implicit none + + type(psb_c_cvector) :: x + type(psb_c_vect_type), pointer :: xp + integer(psb_c_ipk_), value :: index + complex(c_float_complex) :: res + integer(psb_c_ipk_) :: ixb + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + res = xp%get_entry((index+(1-ixb))) + end function psb_c_cvect_get_entry function psb_c_cvect_clone(xh,yh) bind(c) result(info) implicit none diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index a3fa17721..05267b7a8 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -281,13 +281,19 @@ contains end if ixb = psb_c_get_index_base() - if (ixb == 1) then - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info) - else + select case(ixb) + case (0) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz) call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info) - end if + case(1) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz) + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info) + case default + write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb + info =-2 + end select res = min(0,info) @@ -440,6 +446,7 @@ contains #endif type(psb_c_ell_sparse_mat), target :: aell type(psb_c_csr_sparse_mat), target :: acsr + type(psb_c_csc_sparse_mat), target :: acsc type(psb_c_coo_sparse_mat), target :: acoo type(psb_c_hll_sparse_mat), target :: ahll type(psb_c_hdia_sparse_mat), target :: ahdia @@ -484,6 +491,8 @@ contains amold => ahll case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -498,6 +507,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -514,7 +525,7 @@ contains & upd=upd,mold=arsb) #endif #endif - case('ELL','HLL','CSR','DNS') + case('ELL','HLL','CSR','DNS','CSC') call psb_spasb(ap,descp,info,upd=upd,mold=amold) #if defined(PSB_HAVE_CUDA) case('ELG','HLG','CSRG') @@ -654,4 +665,39 @@ contains end function psb_c_cgetelem + function psb_c_cmatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res) + implicit none + + type(psb_c_cspmat) :: ah + integer(psb_c_lpk_), value :: rowindex, colindex + type(psb_c_descriptor) :: cdh + complex(c_float_complex) :: res + + type(psb_cspmat_type), pointer :: ap + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + ixb = psb_c_get_index_base() + if (ixb == 1) then + res = psb_getelem(ap,rowindex,colindex,descp,info) + else + res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info) + end if + + return + + end function psb_c_cmatgetelem + end module psb_c_tools_cbind_mod diff --git a/cbind/base/psb_d_psblas_cbind_mod.f90 b/cbind/base/psb_d_psblas_cbind_mod.f90 index 1a8874c53..bb77272e0 100644 --- a/cbind/base/psb_d_psblas_cbind_mod.f90 +++ b/cbind/base/psb_d_psblas_cbind_mod.f90 @@ -429,14 +429,13 @@ contains function psb_c_dgecmp(xh,ch,zh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res - + real(c_double), value :: ch type(psb_c_dvector) :: xh,zh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp,zp integer(psb_c_ipk_) :: info - real(c_double), value :: ch res = -1 diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index 04d840bd7..c365eb55b 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -200,6 +200,51 @@ contains end function psb_c_dvect_set_vect + function psb_c_dvect_set_entry(x,index,val) bind(c) result(info) + use psb_base_mod + implicit none + + type(psb_c_dvector) :: x + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + integer(psb_c_ipk_), value :: index + real(c_double), value :: val + integer(psb_c_ipk_) :: ixb + + info = -1; + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + call xp%set_entry((index+(1-ixb)),val) + info = 0 + + end function psb_c_dvect_set_entry + + + function psb_c_dvect_get_entry(x,index) bind(c) result(res) + use psb_base_mod + implicit none + + type(psb_c_dvector) :: x + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_), value :: index + real(c_double) :: res + integer(psb_c_ipk_) :: ixb + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + res = xp%get_entry((index+(1-ixb))) + end function psb_c_dvect_get_entry function psb_c_dvect_clone(xh,yh) bind(c) result(info) implicit none diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 935b6cc6f..11d56d2b9 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -281,13 +281,19 @@ contains end if ixb = psb_c_get_index_base() - if (ixb == 1) then - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info) - else + select case(ixb) + case (0) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz) call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info) - end if + case(1) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz) + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info) + case default + write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb + info =-2 + end select res = min(0,info) @@ -440,6 +446,7 @@ contains #endif type(psb_d_ell_sparse_mat), target :: aell type(psb_d_csr_sparse_mat), target :: acsr + type(psb_d_csc_sparse_mat), target :: acsc type(psb_d_coo_sparse_mat), target :: acoo type(psb_d_hll_sparse_mat), target :: ahll type(psb_d_hdia_sparse_mat), target :: ahdia @@ -489,6 +496,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -504,6 +513,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -520,7 +531,7 @@ contains & upd=upd,mold=arsb) #endif #endif - case('ELL','HLL','CSR','DNS') + case('ELL','HLL','CSR','DNS','CSC') call psb_spasb(ap,descp,info,upd=upd,mold=amold) case('HDIA') call psb_spasb(ap,descp,info,upd=upd,mold=amold) @@ -664,4 +675,39 @@ contains end function psb_c_dgetelem + function psb_c_dmatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res) + implicit none + + type(psb_c_dspmat) :: ah + integer(psb_c_lpk_), value :: rowindex, colindex + type(psb_c_descriptor) :: cdh + real(c_double) :: res + + type(psb_dspmat_type), pointer :: ap + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + ixb = psb_c_get_index_base() + if (ixb == 1) then + res = psb_getelem(ap,rowindex,colindex,descp,info) + else + res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info) + end if + + return + + end function psb_c_dmatgetelem + end module psb_d_tools_cbind_mod diff --git a/cbind/base/psb_s_psblas_cbind_mod.f90 b/cbind/base/psb_s_psblas_cbind_mod.f90 index eeabfdbcf..382cabd00 100644 --- a/cbind/base/psb_s_psblas_cbind_mod.f90 +++ b/cbind/base/psb_s_psblas_cbind_mod.f90 @@ -429,14 +429,13 @@ contains function psb_c_sgecmp(xh,ch,zh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res - + real(c_float), value :: ch type(psb_c_svector) :: xh,zh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_s_vect_type), pointer :: xp,zp integer(psb_c_ipk_) :: info - real(c_float), value :: ch res = -1 diff --git a/cbind/base/psb_s_serial_cbind_mod.F90 b/cbind/base/psb_s_serial_cbind_mod.F90 index e9f65bab7..d78cc5495 100644 --- a/cbind/base/psb_s_serial_cbind_mod.F90 +++ b/cbind/base/psb_s_serial_cbind_mod.F90 @@ -200,6 +200,51 @@ contains end function psb_c_svect_set_vect + function psb_c_svect_set_entry(x,index,val) bind(c) result(info) + use psb_base_mod + implicit none + + type(psb_c_svector) :: x + type(psb_s_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + integer(psb_c_ipk_), value :: index + real(c_float), value :: val + integer(psb_c_ipk_) :: ixb + + info = -1; + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + call xp%set_entry((index+(1-ixb)),val) + info = 0 + + end function psb_c_svect_set_entry + + + function psb_c_svect_get_entry(x,index) bind(c) result(res) + use psb_base_mod + implicit none + + type(psb_c_svector) :: x + type(psb_s_vect_type), pointer :: xp + integer(psb_c_ipk_), value :: index + real(c_float) :: res + integer(psb_c_ipk_) :: ixb + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + res = xp%get_entry((index+(1-ixb))) + end function psb_c_svect_get_entry function psb_c_svect_clone(xh,yh) bind(c) result(info) implicit none diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 7633564f6..fe6b0aae7 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -281,13 +281,19 @@ contains end if ixb = psb_c_get_index_base() - if (ixb == 1) then - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info) - else + select case(ixb) + case (0) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz) call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info) - end if + case(1) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz) + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info) + case default + write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb + info =-2 + end select res = min(0,info) @@ -440,6 +446,7 @@ contains #endif type(psb_s_ell_sparse_mat), target :: aell type(psb_s_csr_sparse_mat), target :: acsr + type(psb_s_csc_sparse_mat), target :: acsc type(psb_s_coo_sparse_mat), target :: acoo type(psb_s_hll_sparse_mat), target :: ahll type(psb_s_hdia_sparse_mat), target :: ahdia @@ -489,6 +496,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -504,6 +513,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -520,7 +531,7 @@ contains & upd=upd,mold=arsb) #endif #endif - case('ELL','HLL','CSR','DNS') + case('ELL','HLL','CSR','DNS','CSC') call psb_spasb(ap,descp,info,upd=upd,mold=amold) case('HDIA') call psb_spasb(ap,descp,info,upd=upd,mold=amold) @@ -664,4 +675,39 @@ contains end function psb_c_sgetelem + function psb_c_smatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res) + implicit none + + type(psb_c_sspmat) :: ah + integer(psb_c_lpk_), value :: rowindex, colindex + type(psb_c_descriptor) :: cdh + real(c_float) :: res + + type(psb_sspmat_type), pointer :: ap + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + ixb = psb_c_get_index_base() + if (ixb == 1) then + res = psb_getelem(ap,rowindex,colindex,descp,info) + else + res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info) + end if + + return + + end function psb_c_smatgetelem + end module psb_s_tools_cbind_mod diff --git a/cbind/base/psb_z_psblas_cbind_mod.f90 b/cbind/base/psb_z_psblas_cbind_mod.f90 index 511b390f1..5255485f2 100644 --- a/cbind/base/psb_z_psblas_cbind_mod.f90 +++ b/cbind/base/psb_z_psblas_cbind_mod.f90 @@ -429,14 +429,13 @@ contains function psb_c_zgecmp(xh,ch,zh,cdh) bind(c) result(res) implicit none integer(psb_c_ipk_) :: res - + real(c_double_complex), value :: ch type(psb_c_zvector) :: xh,zh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_z_vect_type), pointer :: xp,zp integer(psb_c_ipk_) :: info - real(c_double_complex), value :: ch res = -1 diff --git a/cbind/base/psb_z_serial_cbind_mod.F90 b/cbind/base/psb_z_serial_cbind_mod.F90 index fa3d7e12c..8c6154af9 100644 --- a/cbind/base/psb_z_serial_cbind_mod.F90 +++ b/cbind/base/psb_z_serial_cbind_mod.F90 @@ -200,6 +200,51 @@ contains end function psb_c_zvect_set_vect + function psb_c_zvect_set_entry(x,index,val) bind(c) result(info) + use psb_base_mod + implicit none + + type(psb_c_zvector) :: x + type(psb_z_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + integer(psb_c_ipk_), value :: index + complex(c_double_complex), value :: val + integer(psb_c_ipk_) :: ixb + + info = -1; + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + call xp%set_entry((index+(1-ixb)),val) + info = 0 + + end function psb_c_zvect_set_entry + + + function psb_c_zvect_get_entry(x,index) bind(c) result(res) + use psb_base_mod + implicit none + + type(psb_c_zvector) :: x + type(psb_z_vect_type), pointer :: xp + integer(psb_c_ipk_), value :: index + complex(c_double_complex) :: res + integer(psb_c_ipk_) :: ixb + + if (c_associated(x%item)) then + call c_f_pointer(x%item,xp) + else + return + end if + + ixb = psb_c_get_index_base() + res = xp%get_entry((index+(1-ixb))) + end function psb_c_zvect_get_entry function psb_c_zvect_clone(xh,yh) bind(c) result(info) implicit none diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 0ca9424df..2721924cd 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -281,13 +281,19 @@ contains end if ixb = psb_c_get_index_base() - if (ixb == 1) then - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info) - else + select case(ixb) + case (0) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz)+(1-ixb),val(1:nz) call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info) - end if + case(1) + !write(0,*) 'C_GEINS: IDX_BASE',ixb,' :',irw(1:nz),val(1:nz) + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info) + case default + write(0,*) 'C_GEINS: Unkonwn inndex base ',ixb + info =-2 + end select res = min(0,info) @@ -440,6 +446,7 @@ contains #endif type(psb_z_ell_sparse_mat), target :: aell type(psb_z_csr_sparse_mat), target :: acsr + type(psb_z_csc_sparse_mat), target :: acsc type(psb_z_coo_sparse_mat), target :: acoo type(psb_z_hll_sparse_mat), target :: ahll type(psb_z_hdia_sparse_mat), target :: ahdia @@ -484,6 +491,8 @@ contains amold => ahll case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -498,6 +507,8 @@ contains amold => ahdia case('CSR') amold => acsr + case('CSC') + amold => acsc case('DNS') amold => adns case default @@ -514,7 +525,7 @@ contains & upd=upd,mold=arsb) #endif #endif - case('ELL','HLL','CSR','DNS') + case('ELL','HLL','CSR','DNS','CSC') call psb_spasb(ap,descp,info,upd=upd,mold=amold) #if defined(PSB_HAVE_CUDA) case('ELG','HLG','CSRG') @@ -654,4 +665,39 @@ contains end function psb_c_zgetelem + function psb_c_zmatgetelem(ah,rowindex,colindex,cdh) bind(c) result(res) + implicit none + + type(psb_c_zspmat) :: ah + integer(psb_c_lpk_), value :: rowindex, colindex + type(psb_c_descriptor) :: cdh + complex(c_double_complex) :: res + + type(psb_zspmat_type), pointer :: ap + type(psb_desc_type), pointer :: descp + integer(psb_c_ipk_) :: info, ixb + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + ixb = psb_c_get_index_base() + if (ixb == 1) then + res = psb_getelem(ap,rowindex,colindex,descp,info) + else + res = psb_getelem(ap,rowindex+(1-ixb),colindex+(1-ixb),descp,info) + end if + + return + + end function psb_c_zmatgetelem + end module psb_z_tools_cbind_mod diff --git a/cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 index aa6a3ba35..3ee98b177 100644 --- a/cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 b/cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 index e9d42139f..54dfa69ff 100644 --- a/cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_cp_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 index e70a044e8..88dfec87f 100644 --- a/cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 index c6105e886..d70fdabac 100644 --- a/cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 b/cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 index f7e5351ed..bdd39f00b 100644 --- a/cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_cp_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 index 9be741c98..2d1c01d1f 100644 --- a/cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 index 8b0d9f2a6..e6c6b894b 100644 --- a/cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 b/cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 index 96a5c5e8d..06d8a1869 100644 --- a/cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_cp_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 b/cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 index d69247d0e..35c972510 100644 --- a/cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_cp_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 b/cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 index a6e87518d..4b6b6a578 100644 --- a/cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_cp_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 b/cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 index f1e002f39..d5bea71c1 100644 --- a/cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 +++ b/cuda/impl/psb_c_cuda_csrg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_csmm.F90 b/cuda/impl/psb_c_cuda_csrg_csmm.F90 index b30129521..9b2dfba78 100644 --- a/cuda/impl/psb_c_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_csrg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_csmv.F90 b/cuda/impl/psb_c_cuda_csrg_csmv.F90 index ae90cb7eb..9d323f923 100644 --- a/cuda/impl/psb_c_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_csrg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_from_gpu.F90 b/cuda/impl/psb_c_cuda_csrg_from_gpu.F90 index 1b18195d1..7622cc410 100644 --- a/cuda/impl/psb_c_cuda_csrg_from_gpu.F90 +++ b/cuda/impl/psb_c_cuda_csrg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 b/cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 index 7e5bb6143..43c2aa3aa 100644 --- a/cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 +++ b/cuda/impl/psb_c_cuda_csrg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_mold.F90 b/cuda/impl/psb_c_cuda_csrg_mold.F90 index 405f2736c..4f531d14e 100644 --- a/cuda/impl/psb_c_cuda_csrg_mold.F90 +++ b/cuda/impl/psb_c_cuda_csrg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 b/cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 index a757f4776..9db2fe74f 100644 --- a/cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 +++ b/cuda/impl/psb_c_cuda_csrg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_scal.F90 b/cuda/impl/psb_c_cuda_csrg_scal.F90 index 137163394..1c9af3056 100644 --- a/cuda/impl/psb_c_cuda_csrg_scal.F90 +++ b/cuda/impl/psb_c_cuda_csrg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_scals.F90 b/cuda/impl/psb_c_cuda_csrg_scals.F90 index 5334be3db..aa5db9d6b 100644 --- a/cuda/impl/psb_c_cuda_csrg_scals.F90 +++ b/cuda/impl/psb_c_cuda_csrg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_to_gpu.F90 b/cuda/impl/psb_c_cuda_csrg_to_gpu.F90 index 8dac41c0f..fe6a2e7e2 100644 --- a/cuda/impl/psb_c_cuda_csrg_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_csrg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 index c58e7ec09..dd9fab0d7 100644 --- a/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_diag_csmv.F90 b/cuda/impl/psb_c_cuda_diag_csmv.F90 index c09409035..e1bdec7a0 100644 --- a/cuda/impl/psb_c_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_c_cuda_diag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_diag_mold.F90 b/cuda/impl/psb_c_cuda_diag_mold.F90 index 4c8a3c567..f916322ee 100644 --- a/cuda/impl/psb_c_cuda_diag_mold.F90 +++ b/cuda/impl/psb_c_cuda_diag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_diag_to_gpu.F90 b/cuda/impl/psb_c_cuda_diag_to_gpu.F90 index 88bbd8b53..916cb0cd1 100644 --- a/cuda/impl/psb_c_cuda_diag_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_diag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_diag_vect_mv.F90 b/cuda/impl/psb_c_cuda_diag_vect_mv.F90 index fba22bc5d..41fdbda62 100644 --- a/cuda/impl/psb_c_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_diag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 b/cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 index 65a42640e..746011ae9 100644 --- a/cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 +++ b/cuda/impl/psb_c_cuda_dnsg_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 b/cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 index 7f50d547e..f9e660520 100644 --- a/cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 +++ b/cuda/impl/psb_c_cuda_elg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_asb.f90 b/cuda/impl/psb_c_cuda_elg_asb.f90 index 16d70736f..5b83ae948 100644 --- a/cuda/impl/psb_c_cuda_elg_asb.f90 +++ b/cuda/impl/psb_c_cuda_elg_asb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_csmm.F90 b/cuda/impl/psb_c_cuda_elg_csmm.F90 index f7ae98926..0a450cd1d 100644 --- a/cuda/impl/psb_c_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_elg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_csmv.F90 b/cuda/impl/psb_c_cuda_elg_csmv.F90 index a23d4a60e..0f04f193f 100644 --- a/cuda/impl/psb_c_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_elg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_csput.F90 b/cuda/impl/psb_c_cuda_elg_csput.F90 index 3da928f0e..98dea017a 100644 --- a/cuda/impl/psb_c_cuda_elg_csput.F90 +++ b/cuda/impl/psb_c_cuda_elg_csput.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_from_gpu.F90 b/cuda/impl/psb_c_cuda_elg_from_gpu.F90 index 34c6e4a62..4a21bd7fa 100644 --- a/cuda/impl/psb_c_cuda_elg_from_gpu.F90 +++ b/cuda/impl/psb_c_cuda_elg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 b/cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 index 148d72d20..a4d1a5430 100644 --- a/cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 +++ b/cuda/impl/psb_c_cuda_elg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_mold.F90 b/cuda/impl/psb_c_cuda_elg_mold.F90 index bb94bf075..22bc84580 100644 --- a/cuda/impl/psb_c_cuda_elg_mold.F90 +++ b/cuda/impl/psb_c_cuda_elg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 b/cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 index 6a1f87639..3f5618196 100644 --- a/cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 +++ b/cuda/impl/psb_c_cuda_elg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_scal.F90 b/cuda/impl/psb_c_cuda_elg_scal.F90 index 65f847684..49bf887fb 100644 --- a/cuda/impl/psb_c_cuda_elg_scal.F90 +++ b/cuda/impl/psb_c_cuda_elg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_scals.F90 b/cuda/impl/psb_c_cuda_elg_scals.F90 index 966f2e918..291dddf5a 100644 --- a/cuda/impl/psb_c_cuda_elg_scals.F90 +++ b/cuda/impl/psb_c_cuda_elg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_to_gpu.F90 b/cuda/impl/psb_c_cuda_elg_to_gpu.F90 index 495207c73..3cf6e7710 100644 --- a/cuda/impl/psb_c_cuda_elg_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_elg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_trim.f90 b/cuda/impl/psb_c_cuda_elg_trim.f90 index 78dbe1937..bea106719 100644 --- a/cuda/impl/psb_c_cuda_elg_trim.f90 +++ b/cuda/impl/psb_c_cuda_elg_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_elg_vect_mv.F90 b/cuda/impl/psb_c_cuda_elg_vect_mv.F90 index 9da6a34ac..903047d46 100644 --- a/cuda/impl/psb_c_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_elg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hdiag_csmv.F90 b/cuda/impl/psb_c_cuda_hdiag_csmv.F90 index 36928062a..8385d743d 100644 --- a/cuda/impl/psb_c_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hdiag_mold.F90 b/cuda/impl/psb_c_cuda_hdiag_mold.F90 index 27402cfc7..64bde1349 100644 --- a/cuda/impl/psb_c_cuda_hdiag_mold.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 b/cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 index 8d1b61a1b..65705d115 100644 --- a/cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 index 0c7ce856f..4b661c77b 100644 --- a/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 b/cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 index 1b41f1326..c122f7ca6 100644 --- a/cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 +++ b/cuda/impl/psb_c_cuda_hlg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_csmm.F90 b/cuda/impl/psb_c_cuda_hlg_csmm.F90 index 88aa53a84..3acfc1156 100644 --- a/cuda/impl/psb_c_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_hlg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_csmv.F90 b/cuda/impl/psb_c_cuda_hlg_csmv.F90 index 18db6ad10..ee3649434 100644 --- a/cuda/impl/psb_c_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hlg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_from_gpu.F90 b/cuda/impl/psb_c_cuda_hlg_from_gpu.F90 index d06d54888..e197a5dbe 100644 --- a/cuda/impl/psb_c_cuda_hlg_from_gpu.F90 +++ b/cuda/impl/psb_c_cuda_hlg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 b/cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 index 87d7c662e..cc36e4089 100644 --- a/cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 +++ b/cuda/impl/psb_c_cuda_hlg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_mold.F90 b/cuda/impl/psb_c_cuda_hlg_mold.F90 index a702e2110..be1cebf90 100644 --- a/cuda/impl/psb_c_cuda_hlg_mold.F90 +++ b/cuda/impl/psb_c_cuda_hlg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 b/cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 index 2ec5fa2ca..2b5d6f7ec 100644 --- a/cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 +++ b/cuda/impl/psb_c_cuda_hlg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_scal.F90 b/cuda/impl/psb_c_cuda_hlg_scal.F90 index 770d17345..267ee7808 100644 --- a/cuda/impl/psb_c_cuda_hlg_scal.F90 +++ b/cuda/impl/psb_c_cuda_hlg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_scals.F90 b/cuda/impl/psb_c_cuda_hlg_scals.F90 index ef6bc1e39..1a5ba0295 100644 --- a/cuda/impl/psb_c_cuda_hlg_scals.F90 +++ b/cuda/impl/psb_c_cuda_hlg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_to_gpu.F90 b/cuda/impl/psb_c_cuda_hlg_to_gpu.F90 index d7d179e75..5d28e9f8e 100644 --- a/cuda/impl/psb_c_cuda_hlg_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_hlg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 index 3789ef17a..af4ae84ec 100644 --- a/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 b/cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 index dbbeb1f2a..1a2cd1293 100644 --- a/cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 +++ b/cuda/impl/psb_c_cuda_hybg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_csmm.F90 b/cuda/impl/psb_c_cuda_hybg_csmm.F90 index 8899f54e6..817c30f8e 100644 --- a/cuda/impl/psb_c_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_hybg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_csmv.F90 b/cuda/impl/psb_c_cuda_hybg_csmv.F90 index 5832cf347..898e6ebbd 100644 --- a/cuda/impl/psb_c_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hybg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 b/cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 index 4444397ca..cdfe30fd6 100644 --- a/cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 +++ b/cuda/impl/psb_c_cuda_hybg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_mold.F90 b/cuda/impl/psb_c_cuda_hybg_mold.F90 index ba0e31a06..57a658fd9 100644 --- a/cuda/impl/psb_c_cuda_hybg_mold.F90 +++ b/cuda/impl/psb_c_cuda_hybg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 b/cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 index c3bd728bd..78f631e49 100644 --- a/cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 +++ b/cuda/impl/psb_c_cuda_hybg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_scal.F90 b/cuda/impl/psb_c_cuda_hybg_scal.F90 index d7e360190..0c86f603f 100644 --- a/cuda/impl/psb_c_cuda_hybg_scal.F90 +++ b/cuda/impl/psb_c_cuda_hybg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_scals.F90 b/cuda/impl/psb_c_cuda_hybg_scals.F90 index 03106f7af..c3e162480 100644 --- a/cuda/impl/psb_c_cuda_hybg_scals.F90 +++ b/cuda/impl/psb_c_cuda_hybg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_to_gpu.F90 b/cuda/impl/psb_c_cuda_hybg_to_gpu.F90 index a424c7959..f2e585c78 100644 --- a/cuda/impl/psb_c_cuda_hybg_to_gpu.F90 +++ b/cuda/impl/psb_c_cuda_hybg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 index cb38321f9..34da8f889 100644 --- a/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 index f0a74c093..2667c3a4d 100644 --- a/cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 b/cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 index eb3698b0f..aac8298c2 100644 --- a/cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_mv_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 index c1ee2ba99..39a8b8ab0 100644 --- a/cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 index f9555729b..a836f2232 100644 --- a/cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 b/cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 index 59615e25b..7332c1f42 100644 --- a/cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_mv_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 index 21ee731d4..9b044d95c 100644 --- a/cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 index 50c20fad9..c7380d813 100644 --- a/cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 b/cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 index 3fba905a8..0c5e5e5ed 100644 --- a/cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_mv_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 b/cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 index 72837aa69..83a445329 100644 --- a/cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 +++ b/cuda/impl/psb_c_cuda_mv_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 b/cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 index da910175a..3a3d36566 100644 --- a/cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 +++ b/cuda/impl/psb_c_cuda_mv_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 index ab3a72561..ceb85ec2e 100644 --- a/cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 b/cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 index 8f8e8cbed..41455df8a 100644 --- a/cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_cp_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 index dc0401d52..66b9e1b3e 100644 --- a/cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 index 890bdc392..dd82d1b4d 100644 --- a/cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 b/cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 index 7beea7f16..be6fbce8a 100644 --- a/cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_cp_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 index 82ef48766..7729b1bb0 100644 --- a/cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 index 34b999a9c..503d737d9 100644 --- a/cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 b/cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 index ecb15157b..cc5de351e 100644 --- a/cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_cp_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 b/cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 index 6405c61d1..b26f2bc11 100644 --- a/cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_cp_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 b/cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 index a6f9391ba..2029bab87 100644 --- a/cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_cp_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 b/cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 index 056f2deb3..0aa23bd9b 100644 --- a/cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 +++ b/cuda/impl/psb_d_cuda_csrg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_csmm.F90 b/cuda/impl/psb_d_cuda_csrg_csmm.F90 index ddac1373c..eca4fc5cf 100644 --- a/cuda/impl/psb_d_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_csrg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_csmv.F90 b/cuda/impl/psb_d_cuda_csrg_csmv.F90 index c1c889f83..98b98100c 100644 --- a/cuda/impl/psb_d_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_csrg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_from_gpu.F90 b/cuda/impl/psb_d_cuda_csrg_from_gpu.F90 index 9b5c4e4c1..509fea629 100644 --- a/cuda/impl/psb_d_cuda_csrg_from_gpu.F90 +++ b/cuda/impl/psb_d_cuda_csrg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 b/cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 index 9a45ee176..cf964bea9 100644 --- a/cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 +++ b/cuda/impl/psb_d_cuda_csrg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_mold.F90 b/cuda/impl/psb_d_cuda_csrg_mold.F90 index eec34975f..8fe1d44fc 100644 --- a/cuda/impl/psb_d_cuda_csrg_mold.F90 +++ b/cuda/impl/psb_d_cuda_csrg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 b/cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 index c27cb943a..74d3f786f 100644 --- a/cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 +++ b/cuda/impl/psb_d_cuda_csrg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_scal.F90 b/cuda/impl/psb_d_cuda_csrg_scal.F90 index 860e93962..a518de842 100644 --- a/cuda/impl/psb_d_cuda_csrg_scal.F90 +++ b/cuda/impl/psb_d_cuda_csrg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_scals.F90 b/cuda/impl/psb_d_cuda_csrg_scals.F90 index 87ef588d9..cadbb53bd 100644 --- a/cuda/impl/psb_d_cuda_csrg_scals.F90 +++ b/cuda/impl/psb_d_cuda_csrg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_to_gpu.F90 b/cuda/impl/psb_d_cuda_csrg_to_gpu.F90 index b4067e880..f173522fe 100644 --- a/cuda/impl/psb_d_cuda_csrg_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_csrg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 index 03fefbdd5..a0beaeba8 100644 --- a/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_diag_csmv.F90 b/cuda/impl/psb_d_cuda_diag_csmv.F90 index 0317a3699..4ba861fae 100644 --- a/cuda/impl/psb_d_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_d_cuda_diag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_diag_mold.F90 b/cuda/impl/psb_d_cuda_diag_mold.F90 index 7cea069e3..61efcb7e9 100644 --- a/cuda/impl/psb_d_cuda_diag_mold.F90 +++ b/cuda/impl/psb_d_cuda_diag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_diag_to_gpu.F90 b/cuda/impl/psb_d_cuda_diag_to_gpu.F90 index 9b6489622..46f526478 100644 --- a/cuda/impl/psb_d_cuda_diag_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_diag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_diag_vect_mv.F90 b/cuda/impl/psb_d_cuda_diag_vect_mv.F90 index 3bc2372d8..bbe8d8d6c 100644 --- a/cuda/impl/psb_d_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_diag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 b/cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 index e4419d810..7724db91e 100644 --- a/cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 +++ b/cuda/impl/psb_d_cuda_dnsg_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 b/cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 index 6db20c966..a827921f5 100644 --- a/cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 +++ b/cuda/impl/psb_d_cuda_elg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_asb.f90 b/cuda/impl/psb_d_cuda_elg_asb.f90 index 7d510ee27..1ae9a4150 100644 --- a/cuda/impl/psb_d_cuda_elg_asb.f90 +++ b/cuda/impl/psb_d_cuda_elg_asb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_csmm.F90 b/cuda/impl/psb_d_cuda_elg_csmm.F90 index f77d72d83..aa588fa38 100644 --- a/cuda/impl/psb_d_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_elg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_csmv.F90 b/cuda/impl/psb_d_cuda_elg_csmv.F90 index 351ad99d8..49d94fa74 100644 --- a/cuda/impl/psb_d_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_elg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_csput.F90 b/cuda/impl/psb_d_cuda_elg_csput.F90 index 0d16de1f8..18c055e9e 100644 --- a/cuda/impl/psb_d_cuda_elg_csput.F90 +++ b/cuda/impl/psb_d_cuda_elg_csput.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_from_gpu.F90 b/cuda/impl/psb_d_cuda_elg_from_gpu.F90 index 720a6d733..296e950c4 100644 --- a/cuda/impl/psb_d_cuda_elg_from_gpu.F90 +++ b/cuda/impl/psb_d_cuda_elg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 b/cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 index 5e5d72eff..4fcbad08d 100644 --- a/cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 +++ b/cuda/impl/psb_d_cuda_elg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_mold.F90 b/cuda/impl/psb_d_cuda_elg_mold.F90 index 107f19afb..538c4ec55 100644 --- a/cuda/impl/psb_d_cuda_elg_mold.F90 +++ b/cuda/impl/psb_d_cuda_elg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 b/cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 index 474647605..c9e60e49f 100644 --- a/cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 +++ b/cuda/impl/psb_d_cuda_elg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_scal.F90 b/cuda/impl/psb_d_cuda_elg_scal.F90 index 420c710ee..b1828a73c 100644 --- a/cuda/impl/psb_d_cuda_elg_scal.F90 +++ b/cuda/impl/psb_d_cuda_elg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_scals.F90 b/cuda/impl/psb_d_cuda_elg_scals.F90 index ff22002e4..9986d613d 100644 --- a/cuda/impl/psb_d_cuda_elg_scals.F90 +++ b/cuda/impl/psb_d_cuda_elg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_to_gpu.F90 b/cuda/impl/psb_d_cuda_elg_to_gpu.F90 index 9b88af69b..8bcfdb41e 100644 --- a/cuda/impl/psb_d_cuda_elg_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_elg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_trim.f90 b/cuda/impl/psb_d_cuda_elg_trim.f90 index a371c6738..d50d3f62d 100644 --- a/cuda/impl/psb_d_cuda_elg_trim.f90 +++ b/cuda/impl/psb_d_cuda_elg_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_elg_vect_mv.F90 b/cuda/impl/psb_d_cuda_elg_vect_mv.F90 index f0b83c2bd..f8a165d64 100644 --- a/cuda/impl/psb_d_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_elg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hdiag_csmv.F90 b/cuda/impl/psb_d_cuda_hdiag_csmv.F90 index bf4dacc18..c4553b0ec 100644 --- a/cuda/impl/psb_d_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hdiag_mold.F90 b/cuda/impl/psb_d_cuda_hdiag_mold.F90 index b858b56d0..212f6aa2f 100644 --- a/cuda/impl/psb_d_cuda_hdiag_mold.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 b/cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 index 73c4a47de..b413397b6 100644 --- a/cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 index c18c80ac9..537234447 100644 --- a/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 b/cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 index 68d9ab50e..f6a1f2202 100644 --- a/cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 +++ b/cuda/impl/psb_d_cuda_hlg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_csmm.F90 b/cuda/impl/psb_d_cuda_hlg_csmm.F90 index ee8424e69..972cddbd0 100644 --- a/cuda/impl/psb_d_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_hlg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_csmv.F90 b/cuda/impl/psb_d_cuda_hlg_csmv.F90 index 58892c1fe..4f7cce512 100644 --- a/cuda/impl/psb_d_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hlg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_from_gpu.F90 b/cuda/impl/psb_d_cuda_hlg_from_gpu.F90 index 752fd944d..05890c0e6 100644 --- a/cuda/impl/psb_d_cuda_hlg_from_gpu.F90 +++ b/cuda/impl/psb_d_cuda_hlg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 b/cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 index f4a0424d2..5394605d3 100644 --- a/cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 +++ b/cuda/impl/psb_d_cuda_hlg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_mold.F90 b/cuda/impl/psb_d_cuda_hlg_mold.F90 index e41d56f27..a188bdd0b 100644 --- a/cuda/impl/psb_d_cuda_hlg_mold.F90 +++ b/cuda/impl/psb_d_cuda_hlg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 b/cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 index e696d304b..68fef0650 100644 --- a/cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 +++ b/cuda/impl/psb_d_cuda_hlg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_scal.F90 b/cuda/impl/psb_d_cuda_hlg_scal.F90 index 042e58050..026b45204 100644 --- a/cuda/impl/psb_d_cuda_hlg_scal.F90 +++ b/cuda/impl/psb_d_cuda_hlg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_scals.F90 b/cuda/impl/psb_d_cuda_hlg_scals.F90 index 4c81faa99..7a01fa943 100644 --- a/cuda/impl/psb_d_cuda_hlg_scals.F90 +++ b/cuda/impl/psb_d_cuda_hlg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_to_gpu.F90 b/cuda/impl/psb_d_cuda_hlg_to_gpu.F90 index 566c94bd5..5fa80c1ba 100644 --- a/cuda/impl/psb_d_cuda_hlg_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_hlg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 index cccba74bb..9feee7074 100644 --- a/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 b/cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 index b9c5d3d03..33cf91e8e 100644 --- a/cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 +++ b/cuda/impl/psb_d_cuda_hybg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_csmm.F90 b/cuda/impl/psb_d_cuda_hybg_csmm.F90 index dbf339907..825ea9887 100644 --- a/cuda/impl/psb_d_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_hybg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_csmv.F90 b/cuda/impl/psb_d_cuda_hybg_csmv.F90 index 1565c6481..acd05eeca 100644 --- a/cuda/impl/psb_d_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hybg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 b/cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 index 902f871dc..ea6d8db0a 100644 --- a/cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 +++ b/cuda/impl/psb_d_cuda_hybg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_mold.F90 b/cuda/impl/psb_d_cuda_hybg_mold.F90 index 3e51acf60..1ebac3548 100644 --- a/cuda/impl/psb_d_cuda_hybg_mold.F90 +++ b/cuda/impl/psb_d_cuda_hybg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 b/cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 index e9699e773..3b876f8ae 100644 --- a/cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 +++ b/cuda/impl/psb_d_cuda_hybg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_scal.F90 b/cuda/impl/psb_d_cuda_hybg_scal.F90 index 15a33d7b6..2bd149b76 100644 --- a/cuda/impl/psb_d_cuda_hybg_scal.F90 +++ b/cuda/impl/psb_d_cuda_hybg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_scals.F90 b/cuda/impl/psb_d_cuda_hybg_scals.F90 index 34faa15d9..303fe312f 100644 --- a/cuda/impl/psb_d_cuda_hybg_scals.F90 +++ b/cuda/impl/psb_d_cuda_hybg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_to_gpu.F90 b/cuda/impl/psb_d_cuda_hybg_to_gpu.F90 index ba8596224..76893ea13 100644 --- a/cuda/impl/psb_d_cuda_hybg_to_gpu.F90 +++ b/cuda/impl/psb_d_cuda_hybg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 index 49060c3c1..5b72c916f 100644 --- a/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 index 559bfb2ce..cdbe2552f 100644 --- a/cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 b/cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 index c2411e90c..11b160e60 100644 --- a/cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_mv_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 index a6a39a1c5..6ebbabddd 100644 --- a/cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 index 9886e90c9..7742ccd2e 100644 --- a/cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 b/cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 index da2d47a19..046051098 100644 --- a/cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_mv_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 index b3c4f650a..d163e3892 100644 --- a/cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 index 95e862938..f162c2897 100644 --- a/cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 b/cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 index 02578b192..f39a93a4c 100644 --- a/cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_mv_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 b/cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 index 42f3aca31..33d43beea 100644 --- a/cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 +++ b/cuda/impl/psb_d_cuda_mv_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 b/cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 index f9c34f358..49aeac74d 100644 --- a/cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 +++ b/cuda/impl/psb_d_cuda_mv_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 index 0e3f9113a..f0b7f1622 100644 --- a/cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 b/cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 index 76871b59f..487d9cb3c 100644 --- a/cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_cp_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 index 07025d776..de773e834 100644 --- a/cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 index 66abf76ad..8268419a0 100644 --- a/cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 b/cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 index 77df12b3a..1e8010a7e 100644 --- a/cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_cp_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 index 75210478e..c2a89511a 100644 --- a/cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 index c254b15a8..ea1a425e6 100644 --- a/cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 b/cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 index f04b65e5e..160080557 100644 --- a/cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_cp_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 b/cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 index bf33a7a45..0bc7e7cb2 100644 --- a/cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_cp_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 b/cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 index 2f22252d3..9dd4c8691 100644 --- a/cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_cp_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 b/cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 index 7e6f0c862..aa5fbcdc4 100644 --- a/cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 +++ b/cuda/impl/psb_s_cuda_csrg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_csmm.F90 b/cuda/impl/psb_s_cuda_csrg_csmm.F90 index 453f5260d..9f8416cfc 100644 --- a/cuda/impl/psb_s_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_csrg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_csmv.F90 b/cuda/impl/psb_s_cuda_csrg_csmv.F90 index a387fd34c..c526f4a54 100644 --- a/cuda/impl/psb_s_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_csrg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_from_gpu.F90 b/cuda/impl/psb_s_cuda_csrg_from_gpu.F90 index da1a71842..67c4c972d 100644 --- a/cuda/impl/psb_s_cuda_csrg_from_gpu.F90 +++ b/cuda/impl/psb_s_cuda_csrg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 b/cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 index df11952c4..ed3fa3bc9 100644 --- a/cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 +++ b/cuda/impl/psb_s_cuda_csrg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_mold.F90 b/cuda/impl/psb_s_cuda_csrg_mold.F90 index 5e33850b2..05fdd12ce 100644 --- a/cuda/impl/psb_s_cuda_csrg_mold.F90 +++ b/cuda/impl/psb_s_cuda_csrg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 b/cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 index dfd115e78..90658038a 100644 --- a/cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 +++ b/cuda/impl/psb_s_cuda_csrg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_scal.F90 b/cuda/impl/psb_s_cuda_csrg_scal.F90 index ea3406a1a..ae509f191 100644 --- a/cuda/impl/psb_s_cuda_csrg_scal.F90 +++ b/cuda/impl/psb_s_cuda_csrg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_scals.F90 b/cuda/impl/psb_s_cuda_csrg_scals.F90 index 307d58494..282bd582c 100644 --- a/cuda/impl/psb_s_cuda_csrg_scals.F90 +++ b/cuda/impl/psb_s_cuda_csrg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_to_gpu.F90 b/cuda/impl/psb_s_cuda_csrg_to_gpu.F90 index 0c918dd40..ea4d57bb5 100644 --- a/cuda/impl/psb_s_cuda_csrg_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_csrg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 index 528204360..d8516c5ac 100644 --- a/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_diag_csmv.F90 b/cuda/impl/psb_s_cuda_diag_csmv.F90 index 016b82bcd..0f0e261f8 100644 --- a/cuda/impl/psb_s_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_s_cuda_diag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_diag_mold.F90 b/cuda/impl/psb_s_cuda_diag_mold.F90 index 9e6c58a62..d3dd61d33 100644 --- a/cuda/impl/psb_s_cuda_diag_mold.F90 +++ b/cuda/impl/psb_s_cuda_diag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_diag_to_gpu.F90 b/cuda/impl/psb_s_cuda_diag_to_gpu.F90 index c8578e75d..2e556d819 100644 --- a/cuda/impl/psb_s_cuda_diag_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_diag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_diag_vect_mv.F90 b/cuda/impl/psb_s_cuda_diag_vect_mv.F90 index d68e5193e..d2ec5143c 100644 --- a/cuda/impl/psb_s_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_diag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 b/cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 index 3f12b2935..731ce670b 100644 --- a/cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 +++ b/cuda/impl/psb_s_cuda_dnsg_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 b/cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 index b771ca1b0..e370a6315 100644 --- a/cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 +++ b/cuda/impl/psb_s_cuda_elg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_asb.f90 b/cuda/impl/psb_s_cuda_elg_asb.f90 index 53a17a32b..6c5735ad1 100644 --- a/cuda/impl/psb_s_cuda_elg_asb.f90 +++ b/cuda/impl/psb_s_cuda_elg_asb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_csmm.F90 b/cuda/impl/psb_s_cuda_elg_csmm.F90 index ff7b78487..d16189410 100644 --- a/cuda/impl/psb_s_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_elg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_csmv.F90 b/cuda/impl/psb_s_cuda_elg_csmv.F90 index caf106cb5..2b8310130 100644 --- a/cuda/impl/psb_s_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_elg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_csput.F90 b/cuda/impl/psb_s_cuda_elg_csput.F90 index d43294bf8..280def3f1 100644 --- a/cuda/impl/psb_s_cuda_elg_csput.F90 +++ b/cuda/impl/psb_s_cuda_elg_csput.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_from_gpu.F90 b/cuda/impl/psb_s_cuda_elg_from_gpu.F90 index d995157ed..0b571a32e 100644 --- a/cuda/impl/psb_s_cuda_elg_from_gpu.F90 +++ b/cuda/impl/psb_s_cuda_elg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 b/cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 index 537365a6a..f5b88c8a6 100644 --- a/cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 +++ b/cuda/impl/psb_s_cuda_elg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_mold.F90 b/cuda/impl/psb_s_cuda_elg_mold.F90 index 7ff9c7aeb..9f5f3aa04 100644 --- a/cuda/impl/psb_s_cuda_elg_mold.F90 +++ b/cuda/impl/psb_s_cuda_elg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 b/cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 index 5b99b9adb..a49b889ca 100644 --- a/cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 +++ b/cuda/impl/psb_s_cuda_elg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_scal.F90 b/cuda/impl/psb_s_cuda_elg_scal.F90 index dfa99cf19..440e0d2aa 100644 --- a/cuda/impl/psb_s_cuda_elg_scal.F90 +++ b/cuda/impl/psb_s_cuda_elg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_scals.F90 b/cuda/impl/psb_s_cuda_elg_scals.F90 index f0aa2504b..8b0fe49a3 100644 --- a/cuda/impl/psb_s_cuda_elg_scals.F90 +++ b/cuda/impl/psb_s_cuda_elg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_to_gpu.F90 b/cuda/impl/psb_s_cuda_elg_to_gpu.F90 index 9c16ea8d1..6ba09d055 100644 --- a/cuda/impl/psb_s_cuda_elg_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_elg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_trim.f90 b/cuda/impl/psb_s_cuda_elg_trim.f90 index 2d3903436..c703e696e 100644 --- a/cuda/impl/psb_s_cuda_elg_trim.f90 +++ b/cuda/impl/psb_s_cuda_elg_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_elg_vect_mv.F90 b/cuda/impl/psb_s_cuda_elg_vect_mv.F90 index 6c898fda5..bca9b3f58 100644 --- a/cuda/impl/psb_s_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_elg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hdiag_csmv.F90 b/cuda/impl/psb_s_cuda_hdiag_csmv.F90 index 3f34c2e79..093437890 100644 --- a/cuda/impl/psb_s_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hdiag_mold.F90 b/cuda/impl/psb_s_cuda_hdiag_mold.F90 index c11283ddc..f4621492c 100644 --- a/cuda/impl/psb_s_cuda_hdiag_mold.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 b/cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 index bc3fa3253..2442f162b 100644 --- a/cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 index 03215047c..5a9302d1d 100644 --- a/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 b/cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 index 480f6677a..3852392e3 100644 --- a/cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 +++ b/cuda/impl/psb_s_cuda_hlg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_csmm.F90 b/cuda/impl/psb_s_cuda_hlg_csmm.F90 index 0dc28c7f6..2d6428882 100644 --- a/cuda/impl/psb_s_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_hlg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_csmv.F90 b/cuda/impl/psb_s_cuda_hlg_csmv.F90 index c029c9081..4fff1ab5b 100644 --- a/cuda/impl/psb_s_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hlg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_from_gpu.F90 b/cuda/impl/psb_s_cuda_hlg_from_gpu.F90 index 8d9a315b7..39526c34a 100644 --- a/cuda/impl/psb_s_cuda_hlg_from_gpu.F90 +++ b/cuda/impl/psb_s_cuda_hlg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 b/cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 index 2985a1ab3..77c392375 100644 --- a/cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 +++ b/cuda/impl/psb_s_cuda_hlg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_mold.F90 b/cuda/impl/psb_s_cuda_hlg_mold.F90 index 89e329e7f..783fe71ed 100644 --- a/cuda/impl/psb_s_cuda_hlg_mold.F90 +++ b/cuda/impl/psb_s_cuda_hlg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 b/cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 index 037429586..33bff84f5 100644 --- a/cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 +++ b/cuda/impl/psb_s_cuda_hlg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_scal.F90 b/cuda/impl/psb_s_cuda_hlg_scal.F90 index 7074b8b68..116b29db1 100644 --- a/cuda/impl/psb_s_cuda_hlg_scal.F90 +++ b/cuda/impl/psb_s_cuda_hlg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_scals.F90 b/cuda/impl/psb_s_cuda_hlg_scals.F90 index 2c9f5ae88..faf1b411c 100644 --- a/cuda/impl/psb_s_cuda_hlg_scals.F90 +++ b/cuda/impl/psb_s_cuda_hlg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_to_gpu.F90 b/cuda/impl/psb_s_cuda_hlg_to_gpu.F90 index 91cfd5ad0..ab158c2fa 100644 --- a/cuda/impl/psb_s_cuda_hlg_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_hlg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 index 946969491..9b5197d7d 100644 --- a/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 b/cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 index a8e31ad81..349043ecc 100644 --- a/cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 +++ b/cuda/impl/psb_s_cuda_hybg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_csmm.F90 b/cuda/impl/psb_s_cuda_hybg_csmm.F90 index 85250fe33..d0705ce4d 100644 --- a/cuda/impl/psb_s_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_hybg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_csmv.F90 b/cuda/impl/psb_s_cuda_hybg_csmv.F90 index 993195f17..880253e08 100644 --- a/cuda/impl/psb_s_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hybg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 b/cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 index 6a230f827..f4b6af83c 100644 --- a/cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 +++ b/cuda/impl/psb_s_cuda_hybg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_mold.F90 b/cuda/impl/psb_s_cuda_hybg_mold.F90 index d1b41c2b0..015beb36e 100644 --- a/cuda/impl/psb_s_cuda_hybg_mold.F90 +++ b/cuda/impl/psb_s_cuda_hybg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 b/cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 index d43da4d9d..d69ff47dd 100644 --- a/cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 +++ b/cuda/impl/psb_s_cuda_hybg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_scal.F90 b/cuda/impl/psb_s_cuda_hybg_scal.F90 index b1e244261..9084af3eb 100644 --- a/cuda/impl/psb_s_cuda_hybg_scal.F90 +++ b/cuda/impl/psb_s_cuda_hybg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_scals.F90 b/cuda/impl/psb_s_cuda_hybg_scals.F90 index 93c747568..39eefed8b 100644 --- a/cuda/impl/psb_s_cuda_hybg_scals.F90 +++ b/cuda/impl/psb_s_cuda_hybg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_to_gpu.F90 b/cuda/impl/psb_s_cuda_hybg_to_gpu.F90 index 3f85a5c67..b34bd4ef5 100644 --- a/cuda/impl/psb_s_cuda_hybg_to_gpu.F90 +++ b/cuda/impl/psb_s_cuda_hybg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 index e786afe10..bbc6c5756 100644 --- a/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 index b61e94d68..a3837a91c 100644 --- a/cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 b/cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 index 52643a10c..f8f80e4b5 100644 --- a/cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_mv_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 index 1b2fe8a1c..53cbbfb2c 100644 --- a/cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 index e8dbbabfc..dff1437d9 100644 --- a/cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 b/cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 index 21d9a339b..0be48fca2 100644 --- a/cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_mv_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 index b0370ebb0..5c852d9c8 100644 --- a/cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 index 4c8aab71a..bf6021fc4 100644 --- a/cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 b/cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 index a162e2aaf..b21482cf8 100644 --- a/cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_mv_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 b/cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 index a22741fcd..7e78211b3 100644 --- a/cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 +++ b/cuda/impl/psb_s_cuda_mv_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 b/cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 index 53865e65b..567bc4ad5 100644 --- a/cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 +++ b/cuda/impl/psb_s_cuda_mv_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 index 90f3fb4f7..a96a7272b 100644 --- a/cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 b/cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 index e086c8a49..037573029 100644 --- a/cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_cp_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 index 347065024..a13f40548 100644 --- a/cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 index e8553cbf0..15d32d5a8 100644 --- a/cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 b/cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 index 85066cef7..eaad3b87f 100644 --- a/cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_cp_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 index 36013faa1..cac0954df 100644 --- a/cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 index f7be08358..121dea29b 100644 --- a/cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 b/cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 index 253a034f0..4054c90ad 100644 --- a/cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_cp_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 b/cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 index f49742cd2..33f900951 100644 --- a/cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_cp_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 b/cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 index bc59cdba7..d062bca94 100644 --- a/cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_cp_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 b/cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 index a7988dd37..ea7ee2a7f 100644 --- a/cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 +++ b/cuda/impl/psb_z_cuda_csrg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_csmm.F90 b/cuda/impl/psb_z_cuda_csrg_csmm.F90 index 731b7417e..4395f0dbc 100644 --- a/cuda/impl/psb_z_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_csrg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_csmv.F90 b/cuda/impl/psb_z_cuda_csrg_csmv.F90 index f6b01e7e4..b74d446b7 100644 --- a/cuda/impl/psb_z_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_csrg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_from_gpu.F90 b/cuda/impl/psb_z_cuda_csrg_from_gpu.F90 index 202f9f751..f40c25d30 100644 --- a/cuda/impl/psb_z_cuda_csrg_from_gpu.F90 +++ b/cuda/impl/psb_z_cuda_csrg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 b/cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 index 9a3f8281c..31600091b 100644 --- a/cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 +++ b/cuda/impl/psb_z_cuda_csrg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_mold.F90 b/cuda/impl/psb_z_cuda_csrg_mold.F90 index 23bb658ae..59079041d 100644 --- a/cuda/impl/psb_z_cuda_csrg_mold.F90 +++ b/cuda/impl/psb_z_cuda_csrg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 b/cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 index 964cd84e0..fbffb371c 100644 --- a/cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 +++ b/cuda/impl/psb_z_cuda_csrg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_scal.F90 b/cuda/impl/psb_z_cuda_csrg_scal.F90 index 9d97433e3..d9d5c172f 100644 --- a/cuda/impl/psb_z_cuda_csrg_scal.F90 +++ b/cuda/impl/psb_z_cuda_csrg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_scals.F90 b/cuda/impl/psb_z_cuda_csrg_scals.F90 index 1479ea3aa..712858290 100644 --- a/cuda/impl/psb_z_cuda_csrg_scals.F90 +++ b/cuda/impl/psb_z_cuda_csrg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_to_gpu.F90 b/cuda/impl/psb_z_cuda_csrg_to_gpu.F90 index 154c91f8e..781bb8d8e 100644 --- a/cuda/impl/psb_z_cuda_csrg_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_csrg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 index 977d7ff99..7f9d63013 100644 --- a/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_diag_csmv.F90 b/cuda/impl/psb_z_cuda_diag_csmv.F90 index fde7147e7..8a7943f38 100644 --- a/cuda/impl/psb_z_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_z_cuda_diag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_diag_mold.F90 b/cuda/impl/psb_z_cuda_diag_mold.F90 index 5b11b41c9..4ed593703 100644 --- a/cuda/impl/psb_z_cuda_diag_mold.F90 +++ b/cuda/impl/psb_z_cuda_diag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_diag_to_gpu.F90 b/cuda/impl/psb_z_cuda_diag_to_gpu.F90 index 672ce9385..4e8e866d8 100644 --- a/cuda/impl/psb_z_cuda_diag_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_diag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_diag_vect_mv.F90 b/cuda/impl/psb_z_cuda_diag_vect_mv.F90 index c6d11f045..fd55c4f1f 100644 --- a/cuda/impl/psb_z_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_diag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 b/cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 index 7f41b22d4..66dfa7595 100644 --- a/cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 +++ b/cuda/impl/psb_z_cuda_dnsg_mat_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 b/cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 index 5c54d00bc..cf9e1533d 100644 --- a/cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 +++ b/cuda/impl/psb_z_cuda_elg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_asb.f90 b/cuda/impl/psb_z_cuda_elg_asb.f90 index 65b584257..7f5a10ab3 100644 --- a/cuda/impl/psb_z_cuda_elg_asb.f90 +++ b/cuda/impl/psb_z_cuda_elg_asb.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_csmm.F90 b/cuda/impl/psb_z_cuda_elg_csmm.F90 index 4414f0e60..78be93e3a 100644 --- a/cuda/impl/psb_z_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_elg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_csmv.F90 b/cuda/impl/psb_z_cuda_elg_csmv.F90 index 060147b91..2b875c838 100644 --- a/cuda/impl/psb_z_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_elg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_csput.F90 b/cuda/impl/psb_z_cuda_elg_csput.F90 index a9eb7c433..b55c5ba9b 100644 --- a/cuda/impl/psb_z_cuda_elg_csput.F90 +++ b/cuda/impl/psb_z_cuda_elg_csput.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_from_gpu.F90 b/cuda/impl/psb_z_cuda_elg_from_gpu.F90 index b1291ab2f..4aa5c0cff 100644 --- a/cuda/impl/psb_z_cuda_elg_from_gpu.F90 +++ b/cuda/impl/psb_z_cuda_elg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 b/cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 index 443e7cbb1..dbce28980 100644 --- a/cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 +++ b/cuda/impl/psb_z_cuda_elg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_mold.F90 b/cuda/impl/psb_z_cuda_elg_mold.F90 index e9a3891da..86b0d56cc 100644 --- a/cuda/impl/psb_z_cuda_elg_mold.F90 +++ b/cuda/impl/psb_z_cuda_elg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 b/cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 index 3a8c2760f..233f44162 100644 --- a/cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 +++ b/cuda/impl/psb_z_cuda_elg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_scal.F90 b/cuda/impl/psb_z_cuda_elg_scal.F90 index a98463625..9863c7264 100644 --- a/cuda/impl/psb_z_cuda_elg_scal.F90 +++ b/cuda/impl/psb_z_cuda_elg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_scals.F90 b/cuda/impl/psb_z_cuda_elg_scals.F90 index b44625890..02a505ab4 100644 --- a/cuda/impl/psb_z_cuda_elg_scals.F90 +++ b/cuda/impl/psb_z_cuda_elg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_to_gpu.F90 b/cuda/impl/psb_z_cuda_elg_to_gpu.F90 index 3a0ecd140..18d0e359c 100644 --- a/cuda/impl/psb_z_cuda_elg_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_elg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_trim.f90 b/cuda/impl/psb_z_cuda_elg_trim.f90 index 98f92efe5..9c51bdc1f 100644 --- a/cuda/impl/psb_z_cuda_elg_trim.f90 +++ b/cuda/impl/psb_z_cuda_elg_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_elg_vect_mv.F90 b/cuda/impl/psb_z_cuda_elg_vect_mv.F90 index 1b1a0720b..7000de4b0 100644 --- a/cuda/impl/psb_z_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_elg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hdiag_csmv.F90 b/cuda/impl/psb_z_cuda_hdiag_csmv.F90 index 187655a8c..51a9cf8b1 100644 --- a/cuda/impl/psb_z_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hdiag_mold.F90 b/cuda/impl/psb_z_cuda_hdiag_mold.F90 index 7b86b3a37..4221211ea 100644 --- a/cuda/impl/psb_z_cuda_hdiag_mold.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 b/cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 index a11409612..9bde8c6c2 100644 --- a/cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 index aef5628c5..667ba8a9e 100644 --- a/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 b/cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 index f85666612..aebcca1d1 100644 --- a/cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 +++ b/cuda/impl/psb_z_cuda_hlg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_csmm.F90 b/cuda/impl/psb_z_cuda_hlg_csmm.F90 index 8eb30ef9f..3bf65cc15 100644 --- a/cuda/impl/psb_z_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_hlg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_csmv.F90 b/cuda/impl/psb_z_cuda_hlg_csmv.F90 index 1a8070169..81229f362 100644 --- a/cuda/impl/psb_z_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hlg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_from_gpu.F90 b/cuda/impl/psb_z_cuda_hlg_from_gpu.F90 index 8260ecd73..0cd72c4d2 100644 --- a/cuda/impl/psb_z_cuda_hlg_from_gpu.F90 +++ b/cuda/impl/psb_z_cuda_hlg_from_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 b/cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 index 6a914fc0c..d776a0ca1 100644 --- a/cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 +++ b/cuda/impl/psb_z_cuda_hlg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_mold.F90 b/cuda/impl/psb_z_cuda_hlg_mold.F90 index bc631eced..964abb264 100644 --- a/cuda/impl/psb_z_cuda_hlg_mold.F90 +++ b/cuda/impl/psb_z_cuda_hlg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 b/cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 index ac3fbbd10..5862c55cf 100644 --- a/cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 +++ b/cuda/impl/psb_z_cuda_hlg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_scal.F90 b/cuda/impl/psb_z_cuda_hlg_scal.F90 index 7b9df998a..d96300539 100644 --- a/cuda/impl/psb_z_cuda_hlg_scal.F90 +++ b/cuda/impl/psb_z_cuda_hlg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_scals.F90 b/cuda/impl/psb_z_cuda_hlg_scals.F90 index b867e3b85..0284be5d9 100644 --- a/cuda/impl/psb_z_cuda_hlg_scals.F90 +++ b/cuda/impl/psb_z_cuda_hlg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_to_gpu.F90 b/cuda/impl/psb_z_cuda_hlg_to_gpu.F90 index 8f81842a7..22656cd92 100644 --- a/cuda/impl/psb_z_cuda_hlg_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_hlg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 index e2e93b851..2b0f123f2 100644 --- a/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 b/cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 index dbfbfb916..69a89007a 100644 --- a/cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 +++ b/cuda/impl/psb_z_cuda_hybg_allocate_mnnz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_csmm.F90 b/cuda/impl/psb_z_cuda_hybg_csmm.F90 index 3c53acbd2..0da8702b3 100644 --- a/cuda/impl/psb_z_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_hybg_csmm.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_csmv.F90 b/cuda/impl/psb_z_cuda_hybg_csmv.F90 index 17b35b405..9f0c2606d 100644 --- a/cuda/impl/psb_z_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hybg_csmv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 b/cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 index 9b06d4993..b6bf86ff4 100644 --- a/cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 +++ b/cuda/impl/psb_z_cuda_hybg_inner_vect_sv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_mold.F90 b/cuda/impl/psb_z_cuda_hybg_mold.F90 index 236c83599..27517ea34 100644 --- a/cuda/impl/psb_z_cuda_hybg_mold.F90 +++ b/cuda/impl/psb_z_cuda_hybg_mold.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 b/cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 index 2479226c7..a6631661d 100644 --- a/cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 +++ b/cuda/impl/psb_z_cuda_hybg_reallocate_nz.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_scal.F90 b/cuda/impl/psb_z_cuda_hybg_scal.F90 index c365499f2..58fe7c289 100644 --- a/cuda/impl/psb_z_cuda_hybg_scal.F90 +++ b/cuda/impl/psb_z_cuda_hybg_scal.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_scals.F90 b/cuda/impl/psb_z_cuda_hybg_scals.F90 index 95bb12733..1bc9e81d2 100644 --- a/cuda/impl/psb_z_cuda_hybg_scals.F90 +++ b/cuda/impl/psb_z_cuda_hybg_scals.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_to_gpu.F90 b/cuda/impl/psb_z_cuda_hybg_to_gpu.F90 index b75f9df7e..6295c929f 100644 --- a/cuda/impl/psb_z_cuda_hybg_to_gpu.F90 +++ b/cuda/impl/psb_z_cuda_hybg_to_gpu.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 index a5c082de7..0432f2bde 100644 --- a/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 index 7cfd4f191..0691bcf8a 100644 --- a/cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_csrg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 b/cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 index f03294c8d..4ad93f174 100644 --- a/cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_mv_csrg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 index 8e702e7ea..3d8678d2f 100644 --- a/cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_diag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 index f0cb23f39..c161b7d44 100644 --- a/cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_elg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 b/cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 index 29f634233..e247442d7 100644 --- a/cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_mv_elg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 index dd6dae1e5..f3d05ace7 100644 --- a/cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_hdiag_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 index 609680b92..3c3e3278a 100644 --- a/cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_hlg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 b/cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 index e67c8d83c..66eed8793 100644 --- a/cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_mv_hlg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 b/cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 index dbf0e5122..dc694ae2e 100644 --- a/cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 +++ b/cuda/impl/psb_z_cuda_mv_hybg_from_coo.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 b/cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 index d39da2913..a820ac42e 100644 --- a/cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 +++ b/cuda/impl/psb_z_cuda_mv_hybg_from_fmt.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_csrg_mat_mod.F90 b/cuda/psb_c_cuda_csrg_mat_mod.F90 index 1fdeec4a7..e86106603 100644 --- a/cuda/psb_c_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_c_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_diag_mat_mod.F90 b/cuda/psb_c_cuda_diag_mat_mod.F90 index d3232965f..20bff37fc 100644 --- a/cuda/psb_c_cuda_diag_mat_mod.F90 +++ b/cuda/psb_c_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_dnsg_mat_mod.F90 b/cuda/psb_c_cuda_dnsg_mat_mod.F90 index 97bacb7df..736fc505f 100644 --- a/cuda/psb_c_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_c_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_elg_mat_mod.F90 b/cuda/psb_c_cuda_elg_mat_mod.F90 index c507a6c71..a152f413a 100644 --- a/cuda/psb_c_cuda_elg_mat_mod.F90 +++ b/cuda/psb_c_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_hdiag_mat_mod.F90 b/cuda/psb_c_cuda_hdiag_mat_mod.F90 index f06e501ea..070dc0d53 100644 --- a/cuda/psb_c_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_c_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_hlg_mat_mod.F90 b/cuda/psb_c_cuda_hlg_mat_mod.F90 index 5b80d3f6f..07fb159bf 100644 --- a/cuda/psb_c_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_c_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_hybg_mat_mod.F90 b/cuda/psb_c_cuda_hybg_mat_mod.F90 index 89ec14a53..5ebff1e96 100644 --- a/cuda/psb_c_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_c_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_cuda_vect_mod.F90 b/cuda/psb_c_cuda_vect_mod.F90 index 4513b2f5f..8d49f7a4b 100644 --- a/cuda/psb_c_cuda_vect_mod.F90 +++ b/cuda/psb_c_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_c_vectordev_mod.F90 b/cuda/psb_c_vectordev_mod.F90 index ea94f435e..9a38d3d32 100644 --- a/cuda/psb_c_vectordev_mod.F90 +++ b/cuda/psb_c_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_csrg_mat_mod.F90 b/cuda/psb_d_cuda_csrg_mat_mod.F90 index 101959bde..276637283 100644 --- a/cuda/psb_d_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_d_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_diag_mat_mod.F90 b/cuda/psb_d_cuda_diag_mat_mod.F90 index 3f570799c..5d72ae501 100644 --- a/cuda/psb_d_cuda_diag_mat_mod.F90 +++ b/cuda/psb_d_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_dnsg_mat_mod.F90 b/cuda/psb_d_cuda_dnsg_mat_mod.F90 index ffa17eeb4..1fdaba933 100644 --- a/cuda/psb_d_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_d_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_elg_mat_mod.F90 b/cuda/psb_d_cuda_elg_mat_mod.F90 index 3fde2075f..74313ce99 100644 --- a/cuda/psb_d_cuda_elg_mat_mod.F90 +++ b/cuda/psb_d_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_hdiag_mat_mod.F90 b/cuda/psb_d_cuda_hdiag_mat_mod.F90 index 46b63b43d..25a7f9249 100644 --- a/cuda/psb_d_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_d_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_hlg_mat_mod.F90 b/cuda/psb_d_cuda_hlg_mat_mod.F90 index a1a2539d4..2f474ce41 100644 --- a/cuda/psb_d_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_d_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_hybg_mat_mod.F90 b/cuda/psb_d_cuda_hybg_mat_mod.F90 index 4ff72f51f..220e8b680 100644 --- a/cuda/psb_d_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_d_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_cuda_vect_mod.F90 b/cuda/psb_d_cuda_vect_mod.F90 index b6e38ed6d..0dacc511a 100644 --- a/cuda/psb_d_cuda_vect_mod.F90 +++ b/cuda/psb_d_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_d_vectordev_mod.F90 b/cuda/psb_d_vectordev_mod.F90 index 368eda346..749c11157 100644 --- a/cuda/psb_d_vectordev_mod.F90 +++ b/cuda/psb_d_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_csrg_mat_mod.F90 b/cuda/psb_i_cuda_csrg_mat_mod.F90 index 0867a8a5b..f358ce304 100644 --- a/cuda/psb_i_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_i_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_diag_mat_mod.F90 b/cuda/psb_i_cuda_diag_mat_mod.F90 index 2862d2eb3..814cfd906 100644 --- a/cuda/psb_i_cuda_diag_mat_mod.F90 +++ b/cuda/psb_i_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_dnsg_mat_mod.F90 b/cuda/psb_i_cuda_dnsg_mat_mod.F90 index f3079d9ef..195cf4806 100644 --- a/cuda/psb_i_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_i_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_elg_mat_mod.F90 b/cuda/psb_i_cuda_elg_mat_mod.F90 index bd975d513..086071885 100644 --- a/cuda/psb_i_cuda_elg_mat_mod.F90 +++ b/cuda/psb_i_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_hdiag_mat_mod.F90 b/cuda/psb_i_cuda_hdiag_mat_mod.F90 index 22277f3a9..347ce3b16 100644 --- a/cuda/psb_i_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_i_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_hlg_mat_mod.F90 b/cuda/psb_i_cuda_hlg_mat_mod.F90 index 8b9dc654d..888e18459 100644 --- a/cuda/psb_i_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_i_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_hybg_mat_mod.F90 b/cuda/psb_i_cuda_hybg_mat_mod.F90 index eb38e498b..d96ddd1f0 100644 --- a/cuda/psb_i_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_i_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_cuda_vect_mod.F90 b/cuda/psb_i_cuda_vect_mod.F90 index 3274a85ef..f8bcf5e83 100644 --- a/cuda/psb_i_cuda_vect_mod.F90 +++ b/cuda/psb_i_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_i_vectordev_mod.F90 b/cuda/psb_i_vectordev_mod.F90 index ad9d6cefd..8fa762bbc 100644 --- a/cuda/psb_i_vectordev_mod.F90 +++ b/cuda/psb_i_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_csrg_mat_mod.F90 b/cuda/psb_s_cuda_csrg_mat_mod.F90 index bd654dbb8..4cb9d28c5 100644 --- a/cuda/psb_s_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_s_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_diag_mat_mod.F90 b/cuda/psb_s_cuda_diag_mat_mod.F90 index 30386618f..b4406d8f5 100644 --- a/cuda/psb_s_cuda_diag_mat_mod.F90 +++ b/cuda/psb_s_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_dnsg_mat_mod.F90 b/cuda/psb_s_cuda_dnsg_mat_mod.F90 index 07b49f034..ebbc51aac 100644 --- a/cuda/psb_s_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_s_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_elg_mat_mod.F90 b/cuda/psb_s_cuda_elg_mat_mod.F90 index 0626fd24e..eb7c2069f 100644 --- a/cuda/psb_s_cuda_elg_mat_mod.F90 +++ b/cuda/psb_s_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_hdiag_mat_mod.F90 b/cuda/psb_s_cuda_hdiag_mat_mod.F90 index cac72c86b..0e7d73934 100644 --- a/cuda/psb_s_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_s_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_hlg_mat_mod.F90 b/cuda/psb_s_cuda_hlg_mat_mod.F90 index 7b8c49b56..de49bbbc3 100644 --- a/cuda/psb_s_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_s_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_hybg_mat_mod.F90 b/cuda/psb_s_cuda_hybg_mat_mod.F90 index b4a7cd75b..0fb3785e8 100644 --- a/cuda/psb_s_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_s_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_cuda_vect_mod.F90 b/cuda/psb_s_cuda_vect_mod.F90 index 87fd12542..6127ea4ee 100644 --- a/cuda/psb_s_cuda_vect_mod.F90 +++ b/cuda/psb_s_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_s_vectordev_mod.F90 b/cuda/psb_s_vectordev_mod.F90 index 28dd14606..e95dde5ed 100644 --- a/cuda/psb_s_vectordev_mod.F90 +++ b/cuda/psb_s_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_csrg_mat_mod.F90 b/cuda/psb_z_cuda_csrg_mat_mod.F90 index 389149aa4..bc91f0e88 100644 --- a/cuda/psb_z_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_z_cuda_csrg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_diag_mat_mod.F90 b/cuda/psb_z_cuda_diag_mat_mod.F90 index 8b0d2168a..5b9bc8ba4 100644 --- a/cuda/psb_z_cuda_diag_mat_mod.F90 +++ b/cuda/psb_z_cuda_diag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_dnsg_mat_mod.F90 b/cuda/psb_z_cuda_dnsg_mat_mod.F90 index 6f687a759..5b881bff3 100644 --- a/cuda/psb_z_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_z_cuda_dnsg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_elg_mat_mod.F90 b/cuda/psb_z_cuda_elg_mat_mod.F90 index 1348a7cb2..3d32ad48f 100644 --- a/cuda/psb_z_cuda_elg_mat_mod.F90 +++ b/cuda/psb_z_cuda_elg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_hdiag_mat_mod.F90 b/cuda/psb_z_cuda_hdiag_mat_mod.F90 index 708976649..ee16a37ef 100644 --- a/cuda/psb_z_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_z_cuda_hdiag_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_hlg_mat_mod.F90 b/cuda/psb_z_cuda_hlg_mat_mod.F90 index f7150250a..3cdfce58f 100644 --- a/cuda/psb_z_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_z_cuda_hlg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_hybg_mat_mod.F90 b/cuda/psb_z_cuda_hybg_mat_mod.F90 index efcd73f7a..1d88380f1 100644 --- a/cuda/psb_z_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_z_cuda_hybg_mat_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_cuda_vect_mod.F90 b/cuda/psb_z_cuda_vect_mod.F90 index b30488e6f..c6014d535 100644 --- a/cuda/psb_z_cuda_vect_mod.F90 +++ b/cuda/psb_z_cuda_vect_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/cuda/psb_z_vectordev_mod.F90 b/cuda/psb_z_vectordev_mod.F90 index 90f30ce68..0d4382f3b 100644 --- a/cuda/psb_z_vectordev_mod.F90 +++ b/cuda/psb_z_vectordev_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_dia_from_coo.f90 b/ext/impl/psb_c_cp_dia_from_coo.f90 index 2d2b1caa0..a7a8f83ca 100644 --- a/ext/impl/psb_c_cp_dia_from_coo.f90 +++ b/ext/impl/psb_c_cp_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_dia_to_coo.f90 b/ext/impl/psb_c_cp_dia_to_coo.f90 index 9975bec02..8d2093221 100644 --- a/ext/impl/psb_c_cp_dia_to_coo.f90 +++ b/ext/impl/psb_c_cp_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_ell_from_coo.f90 b/ext/impl/psb_c_cp_ell_from_coo.f90 index 28d7d2420..0a5f389f9 100644 --- a/ext/impl/psb_c_cp_ell_from_coo.f90 +++ b/ext/impl/psb_c_cp_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_ell_from_fmt.f90 b/ext/impl/psb_c_cp_ell_from_fmt.f90 index 309063b9d..39074b727 100644 --- a/ext/impl/psb_c_cp_ell_from_fmt.f90 +++ b/ext/impl/psb_c_cp_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_ell_to_coo.f90 b/ext/impl/psb_c_cp_ell_to_coo.f90 index ec6bcff51..8fea05179 100644 --- a/ext/impl/psb_c_cp_ell_to_coo.f90 +++ b/ext/impl/psb_c_cp_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_ell_to_fmt.f90 b/ext/impl/psb_c_cp_ell_to_fmt.f90 index 0c6a6903b..40d79bec9 100644 --- a/ext/impl/psb_c_cp_ell_to_fmt.f90 +++ b/ext/impl/psb_c_cp_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hdia_from_coo.f90 b/ext/impl/psb_c_cp_hdia_from_coo.f90 index a9e1ca215..e787e70a5 100644 --- a/ext/impl/psb_c_cp_hdia_from_coo.f90 +++ b/ext/impl/psb_c_cp_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hdia_to_coo.f90 b/ext/impl/psb_c_cp_hdia_to_coo.f90 index 328016534..a607f008e 100644 --- a/ext/impl/psb_c_cp_hdia_to_coo.f90 +++ b/ext/impl/psb_c_cp_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hll_from_coo.f90 b/ext/impl/psb_c_cp_hll_from_coo.f90 index 506196c2d..39b8cdba6 100644 --- a/ext/impl/psb_c_cp_hll_from_coo.f90 +++ b/ext/impl/psb_c_cp_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hll_from_fmt.f90 b/ext/impl/psb_c_cp_hll_from_fmt.f90 index 0849561f3..fa08338e0 100644 --- a/ext/impl/psb_c_cp_hll_from_fmt.f90 +++ b/ext/impl/psb_c_cp_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hll_to_coo.f90 b/ext/impl/psb_c_cp_hll_to_coo.f90 index 0ff46352a..38dd22d90 100644 --- a/ext/impl/psb_c_cp_hll_to_coo.f90 +++ b/ext/impl/psb_c_cp_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_cp_hll_to_fmt.f90 b/ext/impl/psb_c_cp_hll_to_fmt.f90 index df8fa3b76..ff8da74a8 100644 --- a/ext/impl/psb_c_cp_hll_to_fmt.f90 +++ b/ext/impl/psb_c_cp_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_aclsum.f90 b/ext/impl/psb_c_dia_aclsum.f90 index 4bd8d4408..0c09d910b 100644 --- a/ext/impl/psb_c_dia_aclsum.f90 +++ b/ext/impl/psb_c_dia_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_allocate_mnnz.f90 b/ext/impl/psb_c_dia_allocate_mnnz.f90 index 37fb34e1a..731eea94f 100644 --- a/ext/impl/psb_c_dia_allocate_mnnz.f90 +++ b/ext/impl/psb_c_dia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_arwsum.f90 b/ext/impl/psb_c_dia_arwsum.f90 index fe40deb8d..ede166d54 100644 --- a/ext/impl/psb_c_dia_arwsum.f90 +++ b/ext/impl/psb_c_dia_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_colsum.f90 b/ext/impl/psb_c_dia_colsum.f90 index ed43fa12c..0a2125c23 100644 --- a/ext/impl/psb_c_dia_colsum.f90 +++ b/ext/impl/psb_c_dia_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_csgetptn.f90 b/ext/impl/psb_c_dia_csgetptn.f90 index ad479d357..ac4a1bd2e 100644 --- a/ext/impl/psb_c_dia_csgetptn.f90 +++ b/ext/impl/psb_c_dia_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_csgetrow.f90 b/ext/impl/psb_c_dia_csgetrow.f90 index 2989b20f0..1344cc7a3 100644 --- a/ext/impl/psb_c_dia_csgetrow.f90 +++ b/ext/impl/psb_c_dia_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_csmm.f90 b/ext/impl/psb_c_dia_csmm.f90 index b65c4651a..e146d9537 100644 --- a/ext/impl/psb_c_dia_csmm.f90 +++ b/ext/impl/psb_c_dia_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_csmv.f90 b/ext/impl/psb_c_dia_csmv.f90 index cf1ef677e..fdb664e14 100644 --- a/ext/impl/psb_c_dia_csmv.f90 +++ b/ext/impl/psb_c_dia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_get_diag.f90 b/ext/impl/psb_c_dia_get_diag.f90 index d868b62d3..278e98377 100644 --- a/ext/impl/psb_c_dia_get_diag.f90 +++ b/ext/impl/psb_c_dia_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_maxval.f90 b/ext/impl/psb_c_dia_maxval.f90 index 03a2be82c..99bbadd8e 100644 --- a/ext/impl/psb_c_dia_maxval.f90 +++ b/ext/impl/psb_c_dia_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_mold.f90 b/ext/impl/psb_c_dia_mold.f90 index 1d6948286..2a89b5231 100644 --- a/ext/impl/psb_c_dia_mold.f90 +++ b/ext/impl/psb_c_dia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_print.f90 b/ext/impl/psb_c_dia_print.f90 index f3233366d..86c7b7bf7 100644 --- a/ext/impl/psb_c_dia_print.f90 +++ b/ext/impl/psb_c_dia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_reallocate_nz.f90 b/ext/impl/psb_c_dia_reallocate_nz.f90 index c46cd4654..86f161925 100644 --- a/ext/impl/psb_c_dia_reallocate_nz.f90 +++ b/ext/impl/psb_c_dia_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_reinit.f90 b/ext/impl/psb_c_dia_reinit.f90 index 04a345eb3..415d7f4c4 100644 --- a/ext/impl/psb_c_dia_reinit.f90 +++ b/ext/impl/psb_c_dia_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_rowsum.f90 b/ext/impl/psb_c_dia_rowsum.f90 index 1f36dab4c..5cef3e0f5 100644 --- a/ext/impl/psb_c_dia_rowsum.f90 +++ b/ext/impl/psb_c_dia_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_scal.f90 b/ext/impl/psb_c_dia_scal.f90 index 8f35b7c1b..25fc48853 100644 --- a/ext/impl/psb_c_dia_scal.f90 +++ b/ext/impl/psb_c_dia_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_dia_scals.f90 b/ext/impl/psb_c_dia_scals.f90 index a9ca5db14..d82790f51 100644 --- a/ext/impl/psb_c_dia_scals.f90 +++ b/ext/impl/psb_c_dia_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_aclsum.f90 b/ext/impl/psb_c_ell_aclsum.f90 index 3d5a292ae..ce09dc137 100644 --- a/ext/impl/psb_c_ell_aclsum.f90 +++ b/ext/impl/psb_c_ell_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_allocate_mnnz.f90 b/ext/impl/psb_c_ell_allocate_mnnz.f90 index b137eb044..7cb2f5d55 100644 --- a/ext/impl/psb_c_ell_allocate_mnnz.f90 +++ b/ext/impl/psb_c_ell_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_arwsum.f90 b/ext/impl/psb_c_ell_arwsum.f90 index c047c742f..a17caf70e 100644 --- a/ext/impl/psb_c_ell_arwsum.f90 +++ b/ext/impl/psb_c_ell_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_colsum.f90 b/ext/impl/psb_c_ell_colsum.f90 index 6d06b5894..15fba919d 100644 --- a/ext/impl/psb_c_ell_colsum.f90 +++ b/ext/impl/psb_c_ell_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csgetblk.f90 b/ext/impl/psb_c_ell_csgetblk.f90 index deb07c25f..f07f0825a 100644 --- a/ext/impl/psb_c_ell_csgetblk.f90 +++ b/ext/impl/psb_c_ell_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csgetptn.f90 b/ext/impl/psb_c_ell_csgetptn.f90 index 821daa89b..da19391c3 100644 --- a/ext/impl/psb_c_ell_csgetptn.f90 +++ b/ext/impl/psb_c_ell_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csgetrow.f90 b/ext/impl/psb_c_ell_csgetrow.f90 index 39eff5a2f..735539146 100644 --- a/ext/impl/psb_c_ell_csgetrow.f90 +++ b/ext/impl/psb_c_ell_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csmm.f90 b/ext/impl/psb_c_ell_csmm.f90 index 86d15e29b..ac2f46e36 100644 --- a/ext/impl/psb_c_ell_csmm.f90 +++ b/ext/impl/psb_c_ell_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csmv.f90 b/ext/impl/psb_c_ell_csmv.f90 index 46d5ac004..a8e3bedcc 100644 --- a/ext/impl/psb_c_ell_csmv.f90 +++ b/ext/impl/psb_c_ell_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csnm1.f90 b/ext/impl/psb_c_ell_csnm1.f90 index e83dcb282..a02933a42 100644 --- a/ext/impl/psb_c_ell_csnm1.f90 +++ b/ext/impl/psb_c_ell_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csnmi.f90 b/ext/impl/psb_c_ell_csnmi.f90 index 6dc9cfa47..918fdb9e5 100644 --- a/ext/impl/psb_c_ell_csnmi.f90 +++ b/ext/impl/psb_c_ell_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_csput.f90 b/ext/impl/psb_c_ell_csput.f90 index e0b0f47f4..261275e01 100644 --- a/ext/impl/psb_c_ell_csput.f90 +++ b/ext/impl/psb_c_ell_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_cssm.f90 b/ext/impl/psb_c_ell_cssm.f90 index 26e760307..204fe19f1 100644 --- a/ext/impl/psb_c_ell_cssm.f90 +++ b/ext/impl/psb_c_ell_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_cssv.f90 b/ext/impl/psb_c_ell_cssv.f90 index e65e81dce..f37d4dd16 100644 --- a/ext/impl/psb_c_ell_cssv.f90 +++ b/ext/impl/psb_c_ell_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_get_diag.f90 b/ext/impl/psb_c_ell_get_diag.f90 index edcdae419..19434edc1 100644 --- a/ext/impl/psb_c_ell_get_diag.f90 +++ b/ext/impl/psb_c_ell_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_maxval.f90 b/ext/impl/psb_c_ell_maxval.f90 index 4de58b110..11102f1f5 100644 --- a/ext/impl/psb_c_ell_maxval.f90 +++ b/ext/impl/psb_c_ell_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_mold.f90 b/ext/impl/psb_c_ell_mold.f90 index c7c5d621b..fd0a3dc0b 100644 --- a/ext/impl/psb_c_ell_mold.f90 +++ b/ext/impl/psb_c_ell_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_print.f90 b/ext/impl/psb_c_ell_print.f90 index 1b8117a82..1212c3942 100644 --- a/ext/impl/psb_c_ell_print.f90 +++ b/ext/impl/psb_c_ell_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_reallocate_nz.f90 b/ext/impl/psb_c_ell_reallocate_nz.f90 index b0d775688..c10739cfb 100644 --- a/ext/impl/psb_c_ell_reallocate_nz.f90 +++ b/ext/impl/psb_c_ell_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_reinit.f90 b/ext/impl/psb_c_ell_reinit.f90 index 2b15dfeaf..a3590e07e 100644 --- a/ext/impl/psb_c_ell_reinit.f90 +++ b/ext/impl/psb_c_ell_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_rowsum.f90 b/ext/impl/psb_c_ell_rowsum.f90 index 5ae7d42cd..002a8e473 100644 --- a/ext/impl/psb_c_ell_rowsum.f90 +++ b/ext/impl/psb_c_ell_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_scal.f90 b/ext/impl/psb_c_ell_scal.f90 index 63150f32f..cf2db8f93 100644 --- a/ext/impl/psb_c_ell_scal.f90 +++ b/ext/impl/psb_c_ell_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_scals.f90 b/ext/impl/psb_c_ell_scals.f90 index 3e4cd92a0..ed2e90135 100644 --- a/ext/impl/psb_c_ell_scals.f90 +++ b/ext/impl/psb_c_ell_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_ell_trim.f90 b/ext/impl/psb_c_ell_trim.f90 index 22aafefde..c1a13248b 100644 --- a/ext/impl/psb_c_ell_trim.f90 +++ b/ext/impl/psb_c_ell_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hdia_allocate_mnnz.f90 b/ext/impl/psb_c_hdia_allocate_mnnz.f90 index 17a49ffe1..a6cbc7d96 100644 --- a/ext/impl/psb_c_hdia_allocate_mnnz.f90 +++ b/ext/impl/psb_c_hdia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hdia_csmv.f90 b/ext/impl/psb_c_hdia_csmv.f90 index a04fde071..c486cbebf 100644 --- a/ext/impl/psb_c_hdia_csmv.f90 +++ b/ext/impl/psb_c_hdia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hdia_mold.f90 b/ext/impl/psb_c_hdia_mold.f90 index d9f85ec94..545ca3de0 100644 --- a/ext/impl/psb_c_hdia_mold.f90 +++ b/ext/impl/psb_c_hdia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hdia_print.f90 b/ext/impl/psb_c_hdia_print.f90 index 477a54330..a042d9eb6 100644 --- a/ext/impl/psb_c_hdia_print.f90 +++ b/ext/impl/psb_c_hdia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_aclsum.f90 b/ext/impl/psb_c_hll_aclsum.f90 index f1bd8e898..2190f7489 100644 --- a/ext/impl/psb_c_hll_aclsum.f90 +++ b/ext/impl/psb_c_hll_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_allocate_mnnz.f90 b/ext/impl/psb_c_hll_allocate_mnnz.f90 index 97b996bdb..400d68174 100644 --- a/ext/impl/psb_c_hll_allocate_mnnz.f90 +++ b/ext/impl/psb_c_hll_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_arwsum.f90 b/ext/impl/psb_c_hll_arwsum.f90 index 9c48e1c04..0f13f4141 100644 --- a/ext/impl/psb_c_hll_arwsum.f90 +++ b/ext/impl/psb_c_hll_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_colsum.f90 b/ext/impl/psb_c_hll_colsum.f90 index fbcb0934c..cff3c9ef3 100644 --- a/ext/impl/psb_c_hll_colsum.f90 +++ b/ext/impl/psb_c_hll_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csgetblk.f90 b/ext/impl/psb_c_hll_csgetblk.f90 index 9bf0b869c..a2c26cd60 100644 --- a/ext/impl/psb_c_hll_csgetblk.f90 +++ b/ext/impl/psb_c_hll_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csgetptn.f90 b/ext/impl/psb_c_hll_csgetptn.f90 index 0f6481ed8..7c6f07f7b 100644 --- a/ext/impl/psb_c_hll_csgetptn.f90 +++ b/ext/impl/psb_c_hll_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csgetrow.f90 b/ext/impl/psb_c_hll_csgetrow.f90 index 798ffa853..111639044 100644 --- a/ext/impl/psb_c_hll_csgetrow.f90 +++ b/ext/impl/psb_c_hll_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csmm.f90 b/ext/impl/psb_c_hll_csmm.f90 index 24024c72f..77bab41e3 100644 --- a/ext/impl/psb_c_hll_csmm.f90 +++ b/ext/impl/psb_c_hll_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csmv.f90 b/ext/impl/psb_c_hll_csmv.f90 index fe26e4bb5..ce597e2e3 100644 --- a/ext/impl/psb_c_hll_csmv.f90 +++ b/ext/impl/psb_c_hll_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csnm1.f90 b/ext/impl/psb_c_hll_csnm1.f90 index 25daa75da..5c3ca5c4b 100644 --- a/ext/impl/psb_c_hll_csnm1.f90 +++ b/ext/impl/psb_c_hll_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csnmi.f90 b/ext/impl/psb_c_hll_csnmi.f90 index c70be9ceb..23097aa24 100644 --- a/ext/impl/psb_c_hll_csnmi.f90 +++ b/ext/impl/psb_c_hll_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_csput.f90 b/ext/impl/psb_c_hll_csput.f90 index e46ae30a0..b7db2c6a9 100644 --- a/ext/impl/psb_c_hll_csput.f90 +++ b/ext/impl/psb_c_hll_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_cssm.f90 b/ext/impl/psb_c_hll_cssm.f90 index 90e3b9786..2c20996bf 100644 --- a/ext/impl/psb_c_hll_cssm.f90 +++ b/ext/impl/psb_c_hll_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_cssv.f90 b/ext/impl/psb_c_hll_cssv.f90 index 2a157849f..e71b12526 100644 --- a/ext/impl/psb_c_hll_cssv.f90 +++ b/ext/impl/psb_c_hll_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_get_diag.f90 b/ext/impl/psb_c_hll_get_diag.f90 index 0a4a37e37..2ea40bb6a 100644 --- a/ext/impl/psb_c_hll_get_diag.f90 +++ b/ext/impl/psb_c_hll_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_maxval.f90 b/ext/impl/psb_c_hll_maxval.f90 index ff82bb40a..042e840f1 100644 --- a/ext/impl/psb_c_hll_maxval.f90 +++ b/ext/impl/psb_c_hll_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_mold.f90 b/ext/impl/psb_c_hll_mold.f90 index 4a6204b0d..3e281a58d 100644 --- a/ext/impl/psb_c_hll_mold.f90 +++ b/ext/impl/psb_c_hll_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_print.f90 b/ext/impl/psb_c_hll_print.f90 index a5eec378f..c576503f6 100644 --- a/ext/impl/psb_c_hll_print.f90 +++ b/ext/impl/psb_c_hll_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_reallocate_nz.f90 b/ext/impl/psb_c_hll_reallocate_nz.f90 index 44d9cfc92..6a08c1802 100644 --- a/ext/impl/psb_c_hll_reallocate_nz.f90 +++ b/ext/impl/psb_c_hll_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_reinit.f90 b/ext/impl/psb_c_hll_reinit.f90 index 82d5cb169..0471a2275 100644 --- a/ext/impl/psb_c_hll_reinit.f90 +++ b/ext/impl/psb_c_hll_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_rowsum.f90 b/ext/impl/psb_c_hll_rowsum.f90 index e6eea2272..09d11a609 100644 --- a/ext/impl/psb_c_hll_rowsum.f90 +++ b/ext/impl/psb_c_hll_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_scal.f90 b/ext/impl/psb_c_hll_scal.f90 index 0fd59f15b..a1bc8bb2c 100644 --- a/ext/impl/psb_c_hll_scal.f90 +++ b/ext/impl/psb_c_hll_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_hll_scals.f90 b/ext/impl/psb_c_hll_scals.f90 index 13a03a225..9e307b566 100644 --- a/ext/impl/psb_c_hll_scals.f90 +++ b/ext/impl/psb_c_hll_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_dia_from_coo.f90 b/ext/impl/psb_c_mv_dia_from_coo.f90 index 998713488..a5c3379a3 100644 --- a/ext/impl/psb_c_mv_dia_from_coo.f90 +++ b/ext/impl/psb_c_mv_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_dia_to_coo.f90 b/ext/impl/psb_c_mv_dia_to_coo.f90 index 1382cec33..278bbee05 100644 --- a/ext/impl/psb_c_mv_dia_to_coo.f90 +++ b/ext/impl/psb_c_mv_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_ell_from_coo.f90 b/ext/impl/psb_c_mv_ell_from_coo.f90 index 64da3e8d8..c94b1ff38 100644 --- a/ext/impl/psb_c_mv_ell_from_coo.f90 +++ b/ext/impl/psb_c_mv_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_ell_from_fmt.f90 b/ext/impl/psb_c_mv_ell_from_fmt.f90 index d0fa9bc42..faac5743b 100644 --- a/ext/impl/psb_c_mv_ell_from_fmt.f90 +++ b/ext/impl/psb_c_mv_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_ell_to_coo.f90 b/ext/impl/psb_c_mv_ell_to_coo.f90 index a49e2e3cf..82edaac47 100644 --- a/ext/impl/psb_c_mv_ell_to_coo.f90 +++ b/ext/impl/psb_c_mv_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_ell_to_fmt.f90 b/ext/impl/psb_c_mv_ell_to_fmt.f90 index 3ea02d6be..15f23e52c 100644 --- a/ext/impl/psb_c_mv_ell_to_fmt.f90 +++ b/ext/impl/psb_c_mv_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hdia_from_coo.f90 b/ext/impl/psb_c_mv_hdia_from_coo.f90 index 4247fdf82..cc3835ac7 100644 --- a/ext/impl/psb_c_mv_hdia_from_coo.f90 +++ b/ext/impl/psb_c_mv_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hdia_to_coo.f90 b/ext/impl/psb_c_mv_hdia_to_coo.f90 index 3a91917a2..149e369a3 100644 --- a/ext/impl/psb_c_mv_hdia_to_coo.f90 +++ b/ext/impl/psb_c_mv_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hll_from_coo.f90 b/ext/impl/psb_c_mv_hll_from_coo.f90 index b78bdd807..e86217467 100644 --- a/ext/impl/psb_c_mv_hll_from_coo.f90 +++ b/ext/impl/psb_c_mv_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hll_from_fmt.f90 b/ext/impl/psb_c_mv_hll_from_fmt.f90 index add903558..1d258ab5f 100644 --- a/ext/impl/psb_c_mv_hll_from_fmt.f90 +++ b/ext/impl/psb_c_mv_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hll_to_coo.f90 b/ext/impl/psb_c_mv_hll_to_coo.f90 index fbf5dfcd1..2d74d9940 100644 --- a/ext/impl/psb_c_mv_hll_to_coo.f90 +++ b/ext/impl/psb_c_mv_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_c_mv_hll_to_fmt.f90 b/ext/impl/psb_c_mv_hll_to_fmt.f90 index 37d77e857..0138b8862 100644 --- a/ext/impl/psb_c_mv_hll_to_fmt.f90 +++ b/ext/impl/psb_c_mv_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_dia_from_coo.f90 b/ext/impl/psb_d_cp_dia_from_coo.f90 index b640565f1..d774f95e9 100644 --- a/ext/impl/psb_d_cp_dia_from_coo.f90 +++ b/ext/impl/psb_d_cp_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_dia_to_coo.f90 b/ext/impl/psb_d_cp_dia_to_coo.f90 index 527c96d0e..bace6af91 100644 --- a/ext/impl/psb_d_cp_dia_to_coo.f90 +++ b/ext/impl/psb_d_cp_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_ell_from_coo.f90 b/ext/impl/psb_d_cp_ell_from_coo.f90 index cf23a0e02..038b1b7a2 100644 --- a/ext/impl/psb_d_cp_ell_from_coo.f90 +++ b/ext/impl/psb_d_cp_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_ell_from_fmt.f90 b/ext/impl/psb_d_cp_ell_from_fmt.f90 index ce8a8d7eb..a88155c85 100644 --- a/ext/impl/psb_d_cp_ell_from_fmt.f90 +++ b/ext/impl/psb_d_cp_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_ell_to_coo.f90 b/ext/impl/psb_d_cp_ell_to_coo.f90 index 8e7ad7352..76fd587c6 100644 --- a/ext/impl/psb_d_cp_ell_to_coo.f90 +++ b/ext/impl/psb_d_cp_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_ell_to_fmt.f90 b/ext/impl/psb_d_cp_ell_to_fmt.f90 index fd05d0fda..b6c8f9c8c 100644 --- a/ext/impl/psb_d_cp_ell_to_fmt.f90 +++ b/ext/impl/psb_d_cp_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hdia_from_coo.f90 b/ext/impl/psb_d_cp_hdia_from_coo.f90 index bbc341959..4d9440089 100644 --- a/ext/impl/psb_d_cp_hdia_from_coo.f90 +++ b/ext/impl/psb_d_cp_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hdia_to_coo.f90 b/ext/impl/psb_d_cp_hdia_to_coo.f90 index bfa77b082..615b0401c 100644 --- a/ext/impl/psb_d_cp_hdia_to_coo.f90 +++ b/ext/impl/psb_d_cp_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hll_from_coo.f90 b/ext/impl/psb_d_cp_hll_from_coo.f90 index 03028d209..dbb22cd83 100644 --- a/ext/impl/psb_d_cp_hll_from_coo.f90 +++ b/ext/impl/psb_d_cp_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hll_from_fmt.f90 b/ext/impl/psb_d_cp_hll_from_fmt.f90 index 785b23ac0..d8d979001 100644 --- a/ext/impl/psb_d_cp_hll_from_fmt.f90 +++ b/ext/impl/psb_d_cp_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hll_to_coo.f90 b/ext/impl/psb_d_cp_hll_to_coo.f90 index b20144c55..2722b4938 100644 --- a/ext/impl/psb_d_cp_hll_to_coo.f90 +++ b/ext/impl/psb_d_cp_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_cp_hll_to_fmt.f90 b/ext/impl/psb_d_cp_hll_to_fmt.f90 index 6c60c5b5b..75cd9ace2 100644 --- a/ext/impl/psb_d_cp_hll_to_fmt.f90 +++ b/ext/impl/psb_d_cp_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_aclsum.f90 b/ext/impl/psb_d_dia_aclsum.f90 index 0f4df6ca1..566c41a81 100644 --- a/ext/impl/psb_d_dia_aclsum.f90 +++ b/ext/impl/psb_d_dia_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_allocate_mnnz.f90 b/ext/impl/psb_d_dia_allocate_mnnz.f90 index 309b7d4a3..aec538a8c 100644 --- a/ext/impl/psb_d_dia_allocate_mnnz.f90 +++ b/ext/impl/psb_d_dia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_arwsum.f90 b/ext/impl/psb_d_dia_arwsum.f90 index 98eefc447..b1427fde8 100644 --- a/ext/impl/psb_d_dia_arwsum.f90 +++ b/ext/impl/psb_d_dia_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_colsum.f90 b/ext/impl/psb_d_dia_colsum.f90 index 6a6eb81c5..780f19553 100644 --- a/ext/impl/psb_d_dia_colsum.f90 +++ b/ext/impl/psb_d_dia_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_csgetptn.f90 b/ext/impl/psb_d_dia_csgetptn.f90 index ad0e040a2..a7e4d768c 100644 --- a/ext/impl/psb_d_dia_csgetptn.f90 +++ b/ext/impl/psb_d_dia_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_csgetrow.f90 b/ext/impl/psb_d_dia_csgetrow.f90 index 7e05a26e4..b4595beaf 100644 --- a/ext/impl/psb_d_dia_csgetrow.f90 +++ b/ext/impl/psb_d_dia_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_csmm.f90 b/ext/impl/psb_d_dia_csmm.f90 index 81ad967de..1b4ed8e9b 100644 --- a/ext/impl/psb_d_dia_csmm.f90 +++ b/ext/impl/psb_d_dia_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_csmv.f90 b/ext/impl/psb_d_dia_csmv.f90 index 166b4c580..9a007d415 100644 --- a/ext/impl/psb_d_dia_csmv.f90 +++ b/ext/impl/psb_d_dia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_get_diag.f90 b/ext/impl/psb_d_dia_get_diag.f90 index bbcb4a12f..dbcc51ea1 100644 --- a/ext/impl/psb_d_dia_get_diag.f90 +++ b/ext/impl/psb_d_dia_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_maxval.f90 b/ext/impl/psb_d_dia_maxval.f90 index f57be1ff1..84c2082e6 100644 --- a/ext/impl/psb_d_dia_maxval.f90 +++ b/ext/impl/psb_d_dia_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_mold.f90 b/ext/impl/psb_d_dia_mold.f90 index 2b3cef81c..9ae8dffc9 100644 --- a/ext/impl/psb_d_dia_mold.f90 +++ b/ext/impl/psb_d_dia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_print.f90 b/ext/impl/psb_d_dia_print.f90 index e32dc2edb..f3d358e47 100644 --- a/ext/impl/psb_d_dia_print.f90 +++ b/ext/impl/psb_d_dia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_reallocate_nz.f90 b/ext/impl/psb_d_dia_reallocate_nz.f90 index 83864dd88..6bd56d54d 100644 --- a/ext/impl/psb_d_dia_reallocate_nz.f90 +++ b/ext/impl/psb_d_dia_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_reinit.f90 b/ext/impl/psb_d_dia_reinit.f90 index f1e91ade8..aefeeb1dc 100644 --- a/ext/impl/psb_d_dia_reinit.f90 +++ b/ext/impl/psb_d_dia_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_rowsum.f90 b/ext/impl/psb_d_dia_rowsum.f90 index 7a5875bae..de97870d0 100644 --- a/ext/impl/psb_d_dia_rowsum.f90 +++ b/ext/impl/psb_d_dia_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_scal.f90 b/ext/impl/psb_d_dia_scal.f90 index d87c0d258..7c63425d5 100644 --- a/ext/impl/psb_d_dia_scal.f90 +++ b/ext/impl/psb_d_dia_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_dia_scals.f90 b/ext/impl/psb_d_dia_scals.f90 index a3958f57d..95d3ad462 100644 --- a/ext/impl/psb_d_dia_scals.f90 +++ b/ext/impl/psb_d_dia_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_aclsum.f90 b/ext/impl/psb_d_ell_aclsum.f90 index e0bfc18d8..83c46b446 100644 --- a/ext/impl/psb_d_ell_aclsum.f90 +++ b/ext/impl/psb_d_ell_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_allocate_mnnz.f90 b/ext/impl/psb_d_ell_allocate_mnnz.f90 index 95e4558cc..bec159d62 100644 --- a/ext/impl/psb_d_ell_allocate_mnnz.f90 +++ b/ext/impl/psb_d_ell_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_arwsum.f90 b/ext/impl/psb_d_ell_arwsum.f90 index 6bf3b8881..224c24f59 100644 --- a/ext/impl/psb_d_ell_arwsum.f90 +++ b/ext/impl/psb_d_ell_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_colsum.f90 b/ext/impl/psb_d_ell_colsum.f90 index 9eb30ca0b..862b39607 100644 --- a/ext/impl/psb_d_ell_colsum.f90 +++ b/ext/impl/psb_d_ell_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csgetblk.f90 b/ext/impl/psb_d_ell_csgetblk.f90 index 9725518fc..c30adcfba 100644 --- a/ext/impl/psb_d_ell_csgetblk.f90 +++ b/ext/impl/psb_d_ell_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csgetptn.f90 b/ext/impl/psb_d_ell_csgetptn.f90 index a050fe546..86748fb83 100644 --- a/ext/impl/psb_d_ell_csgetptn.f90 +++ b/ext/impl/psb_d_ell_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csgetrow.f90 b/ext/impl/psb_d_ell_csgetrow.f90 index 08e10cab1..1d54d1d9a 100644 --- a/ext/impl/psb_d_ell_csgetrow.f90 +++ b/ext/impl/psb_d_ell_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csmm.f90 b/ext/impl/psb_d_ell_csmm.f90 index dca837c8d..21a889359 100644 --- a/ext/impl/psb_d_ell_csmm.f90 +++ b/ext/impl/psb_d_ell_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csmv.f90 b/ext/impl/psb_d_ell_csmv.f90 index cb247432a..38453fecb 100644 --- a/ext/impl/psb_d_ell_csmv.f90 +++ b/ext/impl/psb_d_ell_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csnm1.f90 b/ext/impl/psb_d_ell_csnm1.f90 index 418d97394..bcc15e7d8 100644 --- a/ext/impl/psb_d_ell_csnm1.f90 +++ b/ext/impl/psb_d_ell_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csnmi.f90 b/ext/impl/psb_d_ell_csnmi.f90 index b4e3d03e5..b76962047 100644 --- a/ext/impl/psb_d_ell_csnmi.f90 +++ b/ext/impl/psb_d_ell_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_csput.f90 b/ext/impl/psb_d_ell_csput.f90 index d38d9d512..0e21676db 100644 --- a/ext/impl/psb_d_ell_csput.f90 +++ b/ext/impl/psb_d_ell_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_cssm.f90 b/ext/impl/psb_d_ell_cssm.f90 index 3c8b5f217..1e2704c74 100644 --- a/ext/impl/psb_d_ell_cssm.f90 +++ b/ext/impl/psb_d_ell_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_cssv.f90 b/ext/impl/psb_d_ell_cssv.f90 index 8c559e652..2541c917c 100644 --- a/ext/impl/psb_d_ell_cssv.f90 +++ b/ext/impl/psb_d_ell_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_get_diag.f90 b/ext/impl/psb_d_ell_get_diag.f90 index 71998f7bc..c6b8d3d31 100644 --- a/ext/impl/psb_d_ell_get_diag.f90 +++ b/ext/impl/psb_d_ell_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_maxval.f90 b/ext/impl/psb_d_ell_maxval.f90 index d0cb24d3e..b7f284e14 100644 --- a/ext/impl/psb_d_ell_maxval.f90 +++ b/ext/impl/psb_d_ell_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_mold.f90 b/ext/impl/psb_d_ell_mold.f90 index 48814f3c4..950ffd1b4 100644 --- a/ext/impl/psb_d_ell_mold.f90 +++ b/ext/impl/psb_d_ell_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_print.f90 b/ext/impl/psb_d_ell_print.f90 index cf5396622..c068e858b 100644 --- a/ext/impl/psb_d_ell_print.f90 +++ b/ext/impl/psb_d_ell_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_reallocate_nz.f90 b/ext/impl/psb_d_ell_reallocate_nz.f90 index 8f92ffadc..4af6927f3 100644 --- a/ext/impl/psb_d_ell_reallocate_nz.f90 +++ b/ext/impl/psb_d_ell_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_reinit.f90 b/ext/impl/psb_d_ell_reinit.f90 index ab9a7ba22..2fcee3988 100644 --- a/ext/impl/psb_d_ell_reinit.f90 +++ b/ext/impl/psb_d_ell_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_rowsum.f90 b/ext/impl/psb_d_ell_rowsum.f90 index 782775d4c..d0c545828 100644 --- a/ext/impl/psb_d_ell_rowsum.f90 +++ b/ext/impl/psb_d_ell_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_scal.f90 b/ext/impl/psb_d_ell_scal.f90 index 15be8a669..566982ea5 100644 --- a/ext/impl/psb_d_ell_scal.f90 +++ b/ext/impl/psb_d_ell_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_scals.f90 b/ext/impl/psb_d_ell_scals.f90 index 501f42b03..f651798af 100644 --- a/ext/impl/psb_d_ell_scals.f90 +++ b/ext/impl/psb_d_ell_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_ell_trim.f90 b/ext/impl/psb_d_ell_trim.f90 index 8b1d52f71..e7aaa144e 100644 --- a/ext/impl/psb_d_ell_trim.f90 +++ b/ext/impl/psb_d_ell_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hdia_allocate_mnnz.f90 b/ext/impl/psb_d_hdia_allocate_mnnz.f90 index e5721754e..7b2f9f504 100644 --- a/ext/impl/psb_d_hdia_allocate_mnnz.f90 +++ b/ext/impl/psb_d_hdia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hdia_csmv.f90 b/ext/impl/psb_d_hdia_csmv.f90 index 825993425..4944dff82 100644 --- a/ext/impl/psb_d_hdia_csmv.f90 +++ b/ext/impl/psb_d_hdia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hdia_mold.f90 b/ext/impl/psb_d_hdia_mold.f90 index cebedd441..8e8079a08 100644 --- a/ext/impl/psb_d_hdia_mold.f90 +++ b/ext/impl/psb_d_hdia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hdia_print.f90 b/ext/impl/psb_d_hdia_print.f90 index 437532992..660658f93 100644 --- a/ext/impl/psb_d_hdia_print.f90 +++ b/ext/impl/psb_d_hdia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_aclsum.f90 b/ext/impl/psb_d_hll_aclsum.f90 index 1f868edc8..3d32ef87d 100644 --- a/ext/impl/psb_d_hll_aclsum.f90 +++ b/ext/impl/psb_d_hll_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_allocate_mnnz.f90 b/ext/impl/psb_d_hll_allocate_mnnz.f90 index f58d0e4a4..555d09b7e 100644 --- a/ext/impl/psb_d_hll_allocate_mnnz.f90 +++ b/ext/impl/psb_d_hll_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_arwsum.f90 b/ext/impl/psb_d_hll_arwsum.f90 index e5ae24fbd..d5870340f 100644 --- a/ext/impl/psb_d_hll_arwsum.f90 +++ b/ext/impl/psb_d_hll_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_colsum.f90 b/ext/impl/psb_d_hll_colsum.f90 index 8c2020ec1..163ebf3b9 100644 --- a/ext/impl/psb_d_hll_colsum.f90 +++ b/ext/impl/psb_d_hll_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csgetblk.f90 b/ext/impl/psb_d_hll_csgetblk.f90 index 185baf297..7d7538ec0 100644 --- a/ext/impl/psb_d_hll_csgetblk.f90 +++ b/ext/impl/psb_d_hll_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csgetptn.f90 b/ext/impl/psb_d_hll_csgetptn.f90 index a7cdc1482..872060d87 100644 --- a/ext/impl/psb_d_hll_csgetptn.f90 +++ b/ext/impl/psb_d_hll_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csgetrow.f90 b/ext/impl/psb_d_hll_csgetrow.f90 index 38ed3f5d5..5ee914e84 100644 --- a/ext/impl/psb_d_hll_csgetrow.f90 +++ b/ext/impl/psb_d_hll_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csmm.f90 b/ext/impl/psb_d_hll_csmm.f90 index 33f68ef82..1840e5229 100644 --- a/ext/impl/psb_d_hll_csmm.f90 +++ b/ext/impl/psb_d_hll_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csmv.f90 b/ext/impl/psb_d_hll_csmv.f90 index f849a54a7..52816fd78 100644 --- a/ext/impl/psb_d_hll_csmv.f90 +++ b/ext/impl/psb_d_hll_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csnm1.f90 b/ext/impl/psb_d_hll_csnm1.f90 index 4627a4d23..3aeed5d4f 100644 --- a/ext/impl/psb_d_hll_csnm1.f90 +++ b/ext/impl/psb_d_hll_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csnmi.f90 b/ext/impl/psb_d_hll_csnmi.f90 index 2b758fa38..66f17aa97 100644 --- a/ext/impl/psb_d_hll_csnmi.f90 +++ b/ext/impl/psb_d_hll_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_csput.f90 b/ext/impl/psb_d_hll_csput.f90 index 064e6c598..8d02953a8 100644 --- a/ext/impl/psb_d_hll_csput.f90 +++ b/ext/impl/psb_d_hll_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_cssm.f90 b/ext/impl/psb_d_hll_cssm.f90 index f4f6e3496..ee5ddc5ad 100644 --- a/ext/impl/psb_d_hll_cssm.f90 +++ b/ext/impl/psb_d_hll_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_cssv.f90 b/ext/impl/psb_d_hll_cssv.f90 index 39da6115f..378fe8d3f 100644 --- a/ext/impl/psb_d_hll_cssv.f90 +++ b/ext/impl/psb_d_hll_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_get_diag.f90 b/ext/impl/psb_d_hll_get_diag.f90 index 081a60255..2cc7462ca 100644 --- a/ext/impl/psb_d_hll_get_diag.f90 +++ b/ext/impl/psb_d_hll_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_maxval.f90 b/ext/impl/psb_d_hll_maxval.f90 index 8408cc96a..119ba5054 100644 --- a/ext/impl/psb_d_hll_maxval.f90 +++ b/ext/impl/psb_d_hll_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_mold.f90 b/ext/impl/psb_d_hll_mold.f90 index e9d721f0d..cd0d77877 100644 --- a/ext/impl/psb_d_hll_mold.f90 +++ b/ext/impl/psb_d_hll_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_print.f90 b/ext/impl/psb_d_hll_print.f90 index 93c56d5cc..93c396231 100644 --- a/ext/impl/psb_d_hll_print.f90 +++ b/ext/impl/psb_d_hll_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_reallocate_nz.f90 b/ext/impl/psb_d_hll_reallocate_nz.f90 index 7abdd58f0..5761687a1 100644 --- a/ext/impl/psb_d_hll_reallocate_nz.f90 +++ b/ext/impl/psb_d_hll_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_reinit.f90 b/ext/impl/psb_d_hll_reinit.f90 index 6a0f34fad..c7d66df90 100644 --- a/ext/impl/psb_d_hll_reinit.f90 +++ b/ext/impl/psb_d_hll_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_rowsum.f90 b/ext/impl/psb_d_hll_rowsum.f90 index bfa2d2e16..3f909bc96 100644 --- a/ext/impl/psb_d_hll_rowsum.f90 +++ b/ext/impl/psb_d_hll_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_scal.f90 b/ext/impl/psb_d_hll_scal.f90 index ed9dd9cec..7a2231b65 100644 --- a/ext/impl/psb_d_hll_scal.f90 +++ b/ext/impl/psb_d_hll_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_hll_scals.f90 b/ext/impl/psb_d_hll_scals.f90 index 8e05cddd3..ebe80e77e 100644 --- a/ext/impl/psb_d_hll_scals.f90 +++ b/ext/impl/psb_d_hll_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_dia_from_coo.f90 b/ext/impl/psb_d_mv_dia_from_coo.f90 index e38e975a0..4fe6670ce 100644 --- a/ext/impl/psb_d_mv_dia_from_coo.f90 +++ b/ext/impl/psb_d_mv_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_dia_to_coo.f90 b/ext/impl/psb_d_mv_dia_to_coo.f90 index d8ac7a692..83e102334 100644 --- a/ext/impl/psb_d_mv_dia_to_coo.f90 +++ b/ext/impl/psb_d_mv_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_ell_from_coo.f90 b/ext/impl/psb_d_mv_ell_from_coo.f90 index 8f98daaba..5e09dc5d9 100644 --- a/ext/impl/psb_d_mv_ell_from_coo.f90 +++ b/ext/impl/psb_d_mv_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_ell_from_fmt.f90 b/ext/impl/psb_d_mv_ell_from_fmt.f90 index 6589fd0a5..630c6db22 100644 --- a/ext/impl/psb_d_mv_ell_from_fmt.f90 +++ b/ext/impl/psb_d_mv_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_ell_to_coo.f90 b/ext/impl/psb_d_mv_ell_to_coo.f90 index a1220a6e0..11944346f 100644 --- a/ext/impl/psb_d_mv_ell_to_coo.f90 +++ b/ext/impl/psb_d_mv_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_ell_to_fmt.f90 b/ext/impl/psb_d_mv_ell_to_fmt.f90 index a59753601..4f6447d04 100644 --- a/ext/impl/psb_d_mv_ell_to_fmt.f90 +++ b/ext/impl/psb_d_mv_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hdia_from_coo.f90 b/ext/impl/psb_d_mv_hdia_from_coo.f90 index 68caea345..bcb2880a4 100644 --- a/ext/impl/psb_d_mv_hdia_from_coo.f90 +++ b/ext/impl/psb_d_mv_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hdia_to_coo.f90 b/ext/impl/psb_d_mv_hdia_to_coo.f90 index 595e20a26..95d47bc41 100644 --- a/ext/impl/psb_d_mv_hdia_to_coo.f90 +++ b/ext/impl/psb_d_mv_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hll_from_coo.f90 b/ext/impl/psb_d_mv_hll_from_coo.f90 index 78faed4b1..de6775a26 100644 --- a/ext/impl/psb_d_mv_hll_from_coo.f90 +++ b/ext/impl/psb_d_mv_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hll_from_fmt.f90 b/ext/impl/psb_d_mv_hll_from_fmt.f90 index 76a2f2fb2..1a202b921 100644 --- a/ext/impl/psb_d_mv_hll_from_fmt.f90 +++ b/ext/impl/psb_d_mv_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hll_to_coo.f90 b/ext/impl/psb_d_mv_hll_to_coo.f90 index fbc9111b9..6423ed586 100644 --- a/ext/impl/psb_d_mv_hll_to_coo.f90 +++ b/ext/impl/psb_d_mv_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_d_mv_hll_to_fmt.f90 b/ext/impl/psb_d_mv_hll_to_fmt.f90 index 8022b2e5b..929039728 100644 --- a/ext/impl/psb_d_mv_hll_to_fmt.f90 +++ b/ext/impl/psb_d_mv_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_dia_from_coo.f90 b/ext/impl/psb_s_cp_dia_from_coo.f90 index 6d9a0749d..620d80f35 100644 --- a/ext/impl/psb_s_cp_dia_from_coo.f90 +++ b/ext/impl/psb_s_cp_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_dia_to_coo.f90 b/ext/impl/psb_s_cp_dia_to_coo.f90 index c0cd5d325..4c103287d 100644 --- a/ext/impl/psb_s_cp_dia_to_coo.f90 +++ b/ext/impl/psb_s_cp_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_ell_from_coo.f90 b/ext/impl/psb_s_cp_ell_from_coo.f90 index f178a05c8..afe344702 100644 --- a/ext/impl/psb_s_cp_ell_from_coo.f90 +++ b/ext/impl/psb_s_cp_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_ell_from_fmt.f90 b/ext/impl/psb_s_cp_ell_from_fmt.f90 index bffe3d854..63504c976 100644 --- a/ext/impl/psb_s_cp_ell_from_fmt.f90 +++ b/ext/impl/psb_s_cp_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_ell_to_coo.f90 b/ext/impl/psb_s_cp_ell_to_coo.f90 index b8acddfcd..b866edcd2 100644 --- a/ext/impl/psb_s_cp_ell_to_coo.f90 +++ b/ext/impl/psb_s_cp_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_ell_to_fmt.f90 b/ext/impl/psb_s_cp_ell_to_fmt.f90 index 58fe3756e..c1beb7441 100644 --- a/ext/impl/psb_s_cp_ell_to_fmt.f90 +++ b/ext/impl/psb_s_cp_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hdia_from_coo.f90 b/ext/impl/psb_s_cp_hdia_from_coo.f90 index b3d427d95..5cd7353c8 100644 --- a/ext/impl/psb_s_cp_hdia_from_coo.f90 +++ b/ext/impl/psb_s_cp_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hdia_to_coo.f90 b/ext/impl/psb_s_cp_hdia_to_coo.f90 index 8e90e236d..9648e11ca 100644 --- a/ext/impl/psb_s_cp_hdia_to_coo.f90 +++ b/ext/impl/psb_s_cp_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hll_from_coo.f90 b/ext/impl/psb_s_cp_hll_from_coo.f90 index 9d75f994b..c3ba656f9 100644 --- a/ext/impl/psb_s_cp_hll_from_coo.f90 +++ b/ext/impl/psb_s_cp_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hll_from_fmt.f90 b/ext/impl/psb_s_cp_hll_from_fmt.f90 index 8f0109029..8e94e7004 100644 --- a/ext/impl/psb_s_cp_hll_from_fmt.f90 +++ b/ext/impl/psb_s_cp_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hll_to_coo.f90 b/ext/impl/psb_s_cp_hll_to_coo.f90 index 74502ba29..944bb69bd 100644 --- a/ext/impl/psb_s_cp_hll_to_coo.f90 +++ b/ext/impl/psb_s_cp_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_cp_hll_to_fmt.f90 b/ext/impl/psb_s_cp_hll_to_fmt.f90 index f7adaa542..b701e7494 100644 --- a/ext/impl/psb_s_cp_hll_to_fmt.f90 +++ b/ext/impl/psb_s_cp_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_aclsum.f90 b/ext/impl/psb_s_dia_aclsum.f90 index 718a24243..7781f5ed9 100644 --- a/ext/impl/psb_s_dia_aclsum.f90 +++ b/ext/impl/psb_s_dia_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_allocate_mnnz.f90 b/ext/impl/psb_s_dia_allocate_mnnz.f90 index df56c4a65..fa434c100 100644 --- a/ext/impl/psb_s_dia_allocate_mnnz.f90 +++ b/ext/impl/psb_s_dia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_arwsum.f90 b/ext/impl/psb_s_dia_arwsum.f90 index 5a974bbfa..8174c71ae 100644 --- a/ext/impl/psb_s_dia_arwsum.f90 +++ b/ext/impl/psb_s_dia_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_colsum.f90 b/ext/impl/psb_s_dia_colsum.f90 index e60eb88f9..6f671bcc3 100644 --- a/ext/impl/psb_s_dia_colsum.f90 +++ b/ext/impl/psb_s_dia_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_csgetptn.f90 b/ext/impl/psb_s_dia_csgetptn.f90 index f946eb73a..93f8d12a2 100644 --- a/ext/impl/psb_s_dia_csgetptn.f90 +++ b/ext/impl/psb_s_dia_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_csgetrow.f90 b/ext/impl/psb_s_dia_csgetrow.f90 index b79e2470a..615bca558 100644 --- a/ext/impl/psb_s_dia_csgetrow.f90 +++ b/ext/impl/psb_s_dia_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_csmm.f90 b/ext/impl/psb_s_dia_csmm.f90 index 9f586dbb2..079f7091f 100644 --- a/ext/impl/psb_s_dia_csmm.f90 +++ b/ext/impl/psb_s_dia_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_csmv.f90 b/ext/impl/psb_s_dia_csmv.f90 index 1a23932e5..e7d64d806 100644 --- a/ext/impl/psb_s_dia_csmv.f90 +++ b/ext/impl/psb_s_dia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_get_diag.f90 b/ext/impl/psb_s_dia_get_diag.f90 index 5909c72a9..3dc35378d 100644 --- a/ext/impl/psb_s_dia_get_diag.f90 +++ b/ext/impl/psb_s_dia_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_maxval.f90 b/ext/impl/psb_s_dia_maxval.f90 index 5f6726440..4a95733a9 100644 --- a/ext/impl/psb_s_dia_maxval.f90 +++ b/ext/impl/psb_s_dia_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_mold.f90 b/ext/impl/psb_s_dia_mold.f90 index a65379a47..05d8a8276 100644 --- a/ext/impl/psb_s_dia_mold.f90 +++ b/ext/impl/psb_s_dia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_print.f90 b/ext/impl/psb_s_dia_print.f90 index a0de1ba84..448465304 100644 --- a/ext/impl/psb_s_dia_print.f90 +++ b/ext/impl/psb_s_dia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_reallocate_nz.f90 b/ext/impl/psb_s_dia_reallocate_nz.f90 index d37d9e5f0..5fbbbba43 100644 --- a/ext/impl/psb_s_dia_reallocate_nz.f90 +++ b/ext/impl/psb_s_dia_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_reinit.f90 b/ext/impl/psb_s_dia_reinit.f90 index dd1097834..d270013b8 100644 --- a/ext/impl/psb_s_dia_reinit.f90 +++ b/ext/impl/psb_s_dia_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_rowsum.f90 b/ext/impl/psb_s_dia_rowsum.f90 index 3f32a2b28..22b246e23 100644 --- a/ext/impl/psb_s_dia_rowsum.f90 +++ b/ext/impl/psb_s_dia_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_scal.f90 b/ext/impl/psb_s_dia_scal.f90 index 7ccf881a2..91e619c39 100644 --- a/ext/impl/psb_s_dia_scal.f90 +++ b/ext/impl/psb_s_dia_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_dia_scals.f90 b/ext/impl/psb_s_dia_scals.f90 index da1bc94e4..142afaf75 100644 --- a/ext/impl/psb_s_dia_scals.f90 +++ b/ext/impl/psb_s_dia_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_aclsum.f90 b/ext/impl/psb_s_ell_aclsum.f90 index 2eea0cc9a..e0634ac4c 100644 --- a/ext/impl/psb_s_ell_aclsum.f90 +++ b/ext/impl/psb_s_ell_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_allocate_mnnz.f90 b/ext/impl/psb_s_ell_allocate_mnnz.f90 index fd9f1b490..6cd47c33b 100644 --- a/ext/impl/psb_s_ell_allocate_mnnz.f90 +++ b/ext/impl/psb_s_ell_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_arwsum.f90 b/ext/impl/psb_s_ell_arwsum.f90 index a47f87215..00f4154cf 100644 --- a/ext/impl/psb_s_ell_arwsum.f90 +++ b/ext/impl/psb_s_ell_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_colsum.f90 b/ext/impl/psb_s_ell_colsum.f90 index 0924d8a97..8ca6e53c5 100644 --- a/ext/impl/psb_s_ell_colsum.f90 +++ b/ext/impl/psb_s_ell_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csgetblk.f90 b/ext/impl/psb_s_ell_csgetblk.f90 index 5468e93c5..df5c118f0 100644 --- a/ext/impl/psb_s_ell_csgetblk.f90 +++ b/ext/impl/psb_s_ell_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csgetptn.f90 b/ext/impl/psb_s_ell_csgetptn.f90 index 074637574..fe21394c0 100644 --- a/ext/impl/psb_s_ell_csgetptn.f90 +++ b/ext/impl/psb_s_ell_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csgetrow.f90 b/ext/impl/psb_s_ell_csgetrow.f90 index 0164fadba..5d98b7491 100644 --- a/ext/impl/psb_s_ell_csgetrow.f90 +++ b/ext/impl/psb_s_ell_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csmm.f90 b/ext/impl/psb_s_ell_csmm.f90 index 1abce00ff..8dafa2f48 100644 --- a/ext/impl/psb_s_ell_csmm.f90 +++ b/ext/impl/psb_s_ell_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csmv.f90 b/ext/impl/psb_s_ell_csmv.f90 index 35151439b..e1aceaf37 100644 --- a/ext/impl/psb_s_ell_csmv.f90 +++ b/ext/impl/psb_s_ell_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csnm1.f90 b/ext/impl/psb_s_ell_csnm1.f90 index d4d604dfe..6ac3d908e 100644 --- a/ext/impl/psb_s_ell_csnm1.f90 +++ b/ext/impl/psb_s_ell_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csnmi.f90 b/ext/impl/psb_s_ell_csnmi.f90 index 1df9bafaf..69d657c34 100644 --- a/ext/impl/psb_s_ell_csnmi.f90 +++ b/ext/impl/psb_s_ell_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_csput.f90 b/ext/impl/psb_s_ell_csput.f90 index c0d69067c..7c2f84116 100644 --- a/ext/impl/psb_s_ell_csput.f90 +++ b/ext/impl/psb_s_ell_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_cssm.f90 b/ext/impl/psb_s_ell_cssm.f90 index ca50fa359..2c4594c78 100644 --- a/ext/impl/psb_s_ell_cssm.f90 +++ b/ext/impl/psb_s_ell_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_cssv.f90 b/ext/impl/psb_s_ell_cssv.f90 index 94ac01044..7b11ccf8d 100644 --- a/ext/impl/psb_s_ell_cssv.f90 +++ b/ext/impl/psb_s_ell_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_get_diag.f90 b/ext/impl/psb_s_ell_get_diag.f90 index fb91a2290..07207f585 100644 --- a/ext/impl/psb_s_ell_get_diag.f90 +++ b/ext/impl/psb_s_ell_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_maxval.f90 b/ext/impl/psb_s_ell_maxval.f90 index 6e2635b88..9ba1ebf8f 100644 --- a/ext/impl/psb_s_ell_maxval.f90 +++ b/ext/impl/psb_s_ell_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_mold.f90 b/ext/impl/psb_s_ell_mold.f90 index 4d137112d..e7a24b2af 100644 --- a/ext/impl/psb_s_ell_mold.f90 +++ b/ext/impl/psb_s_ell_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_print.f90 b/ext/impl/psb_s_ell_print.f90 index aec15a6d7..93fdadca6 100644 --- a/ext/impl/psb_s_ell_print.f90 +++ b/ext/impl/psb_s_ell_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_reallocate_nz.f90 b/ext/impl/psb_s_ell_reallocate_nz.f90 index ff7dabdae..4895f45ab 100644 --- a/ext/impl/psb_s_ell_reallocate_nz.f90 +++ b/ext/impl/psb_s_ell_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_reinit.f90 b/ext/impl/psb_s_ell_reinit.f90 index 088e83986..f6442dc66 100644 --- a/ext/impl/psb_s_ell_reinit.f90 +++ b/ext/impl/psb_s_ell_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_rowsum.f90 b/ext/impl/psb_s_ell_rowsum.f90 index 092329c9c..2fc556753 100644 --- a/ext/impl/psb_s_ell_rowsum.f90 +++ b/ext/impl/psb_s_ell_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_scal.f90 b/ext/impl/psb_s_ell_scal.f90 index 7f39f63d7..bcab2e920 100644 --- a/ext/impl/psb_s_ell_scal.f90 +++ b/ext/impl/psb_s_ell_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_scals.f90 b/ext/impl/psb_s_ell_scals.f90 index 4bc77626a..66952cfe4 100644 --- a/ext/impl/psb_s_ell_scals.f90 +++ b/ext/impl/psb_s_ell_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_ell_trim.f90 b/ext/impl/psb_s_ell_trim.f90 index 758a8bb50..333cd1080 100644 --- a/ext/impl/psb_s_ell_trim.f90 +++ b/ext/impl/psb_s_ell_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hdia_allocate_mnnz.f90 b/ext/impl/psb_s_hdia_allocate_mnnz.f90 index 2c4e16fc4..aba20270f 100644 --- a/ext/impl/psb_s_hdia_allocate_mnnz.f90 +++ b/ext/impl/psb_s_hdia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hdia_csmv.f90 b/ext/impl/psb_s_hdia_csmv.f90 index d945f9643..8f45a82b1 100644 --- a/ext/impl/psb_s_hdia_csmv.f90 +++ b/ext/impl/psb_s_hdia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hdia_mold.f90 b/ext/impl/psb_s_hdia_mold.f90 index a62630c06..d3990aae3 100644 --- a/ext/impl/psb_s_hdia_mold.f90 +++ b/ext/impl/psb_s_hdia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hdia_print.f90 b/ext/impl/psb_s_hdia_print.f90 index f4b927bcf..c83e18db8 100644 --- a/ext/impl/psb_s_hdia_print.f90 +++ b/ext/impl/psb_s_hdia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_aclsum.f90 b/ext/impl/psb_s_hll_aclsum.f90 index cf75dfb2c..d23ad0154 100644 --- a/ext/impl/psb_s_hll_aclsum.f90 +++ b/ext/impl/psb_s_hll_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_allocate_mnnz.f90 b/ext/impl/psb_s_hll_allocate_mnnz.f90 index 549eccb48..7249d8261 100644 --- a/ext/impl/psb_s_hll_allocate_mnnz.f90 +++ b/ext/impl/psb_s_hll_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_arwsum.f90 b/ext/impl/psb_s_hll_arwsum.f90 index b93efb12e..5ec343bf8 100644 --- a/ext/impl/psb_s_hll_arwsum.f90 +++ b/ext/impl/psb_s_hll_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_colsum.f90 b/ext/impl/psb_s_hll_colsum.f90 index 02cceac2f..2a9a1300c 100644 --- a/ext/impl/psb_s_hll_colsum.f90 +++ b/ext/impl/psb_s_hll_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csgetblk.f90 b/ext/impl/psb_s_hll_csgetblk.f90 index c925e3a2e..2bc896655 100644 --- a/ext/impl/psb_s_hll_csgetblk.f90 +++ b/ext/impl/psb_s_hll_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csgetptn.f90 b/ext/impl/psb_s_hll_csgetptn.f90 index ccb1b6a18..a346214a4 100644 --- a/ext/impl/psb_s_hll_csgetptn.f90 +++ b/ext/impl/psb_s_hll_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csgetrow.f90 b/ext/impl/psb_s_hll_csgetrow.f90 index 9c87313d3..5ce408bff 100644 --- a/ext/impl/psb_s_hll_csgetrow.f90 +++ b/ext/impl/psb_s_hll_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csmm.f90 b/ext/impl/psb_s_hll_csmm.f90 index 985d8e34c..30d429745 100644 --- a/ext/impl/psb_s_hll_csmm.f90 +++ b/ext/impl/psb_s_hll_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csmv.f90 b/ext/impl/psb_s_hll_csmv.f90 index 84f0e391e..a3ead4c5c 100644 --- a/ext/impl/psb_s_hll_csmv.f90 +++ b/ext/impl/psb_s_hll_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csnm1.f90 b/ext/impl/psb_s_hll_csnm1.f90 index 6e7450810..439532ea8 100644 --- a/ext/impl/psb_s_hll_csnm1.f90 +++ b/ext/impl/psb_s_hll_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csnmi.f90 b/ext/impl/psb_s_hll_csnmi.f90 index 3be15f9b3..1838c653d 100644 --- a/ext/impl/psb_s_hll_csnmi.f90 +++ b/ext/impl/psb_s_hll_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_csput.f90 b/ext/impl/psb_s_hll_csput.f90 index b12678d49..fd206112a 100644 --- a/ext/impl/psb_s_hll_csput.f90 +++ b/ext/impl/psb_s_hll_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_cssm.f90 b/ext/impl/psb_s_hll_cssm.f90 index 30c77c8fb..361bfe9c9 100644 --- a/ext/impl/psb_s_hll_cssm.f90 +++ b/ext/impl/psb_s_hll_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_cssv.f90 b/ext/impl/psb_s_hll_cssv.f90 index 899b30eea..197225bbe 100644 --- a/ext/impl/psb_s_hll_cssv.f90 +++ b/ext/impl/psb_s_hll_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_get_diag.f90 b/ext/impl/psb_s_hll_get_diag.f90 index fb4e473bf..745898364 100644 --- a/ext/impl/psb_s_hll_get_diag.f90 +++ b/ext/impl/psb_s_hll_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_maxval.f90 b/ext/impl/psb_s_hll_maxval.f90 index 846253288..fafe9fb66 100644 --- a/ext/impl/psb_s_hll_maxval.f90 +++ b/ext/impl/psb_s_hll_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_mold.f90 b/ext/impl/psb_s_hll_mold.f90 index eb04ccd90..4a5adb34f 100644 --- a/ext/impl/psb_s_hll_mold.f90 +++ b/ext/impl/psb_s_hll_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_print.f90 b/ext/impl/psb_s_hll_print.f90 index fb6bb38d9..6dbc8557c 100644 --- a/ext/impl/psb_s_hll_print.f90 +++ b/ext/impl/psb_s_hll_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_reallocate_nz.f90 b/ext/impl/psb_s_hll_reallocate_nz.f90 index f7a3076f8..b727a1eb8 100644 --- a/ext/impl/psb_s_hll_reallocate_nz.f90 +++ b/ext/impl/psb_s_hll_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_reinit.f90 b/ext/impl/psb_s_hll_reinit.f90 index 170abe086..65168b714 100644 --- a/ext/impl/psb_s_hll_reinit.f90 +++ b/ext/impl/psb_s_hll_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_rowsum.f90 b/ext/impl/psb_s_hll_rowsum.f90 index c74846980..cbe38ca70 100644 --- a/ext/impl/psb_s_hll_rowsum.f90 +++ b/ext/impl/psb_s_hll_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_scal.f90 b/ext/impl/psb_s_hll_scal.f90 index c8f3ddd5f..60624ad8d 100644 --- a/ext/impl/psb_s_hll_scal.f90 +++ b/ext/impl/psb_s_hll_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_hll_scals.f90 b/ext/impl/psb_s_hll_scals.f90 index 8f823a204..255c07f69 100644 --- a/ext/impl/psb_s_hll_scals.f90 +++ b/ext/impl/psb_s_hll_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_dia_from_coo.f90 b/ext/impl/psb_s_mv_dia_from_coo.f90 index d7dcfc1bc..2289b677a 100644 --- a/ext/impl/psb_s_mv_dia_from_coo.f90 +++ b/ext/impl/psb_s_mv_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_dia_to_coo.f90 b/ext/impl/psb_s_mv_dia_to_coo.f90 index c0944b214..343a8cf25 100644 --- a/ext/impl/psb_s_mv_dia_to_coo.f90 +++ b/ext/impl/psb_s_mv_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_ell_from_coo.f90 b/ext/impl/psb_s_mv_ell_from_coo.f90 index 90965e418..fe78947e1 100644 --- a/ext/impl/psb_s_mv_ell_from_coo.f90 +++ b/ext/impl/psb_s_mv_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_ell_from_fmt.f90 b/ext/impl/psb_s_mv_ell_from_fmt.f90 index 03ebf8e4e..ad968275d 100644 --- a/ext/impl/psb_s_mv_ell_from_fmt.f90 +++ b/ext/impl/psb_s_mv_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_ell_to_coo.f90 b/ext/impl/psb_s_mv_ell_to_coo.f90 index 151cbeff6..3fbe8be58 100644 --- a/ext/impl/psb_s_mv_ell_to_coo.f90 +++ b/ext/impl/psb_s_mv_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_ell_to_fmt.f90 b/ext/impl/psb_s_mv_ell_to_fmt.f90 index 66f335085..acc2ad1fa 100644 --- a/ext/impl/psb_s_mv_ell_to_fmt.f90 +++ b/ext/impl/psb_s_mv_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hdia_from_coo.f90 b/ext/impl/psb_s_mv_hdia_from_coo.f90 index 88765079d..ec3e352dd 100644 --- a/ext/impl/psb_s_mv_hdia_from_coo.f90 +++ b/ext/impl/psb_s_mv_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hdia_to_coo.f90 b/ext/impl/psb_s_mv_hdia_to_coo.f90 index 56399b2ae..d574686d7 100644 --- a/ext/impl/psb_s_mv_hdia_to_coo.f90 +++ b/ext/impl/psb_s_mv_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hll_from_coo.f90 b/ext/impl/psb_s_mv_hll_from_coo.f90 index c8e460860..55938296d 100644 --- a/ext/impl/psb_s_mv_hll_from_coo.f90 +++ b/ext/impl/psb_s_mv_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hll_from_fmt.f90 b/ext/impl/psb_s_mv_hll_from_fmt.f90 index 19bda0a6f..7cb40597b 100644 --- a/ext/impl/psb_s_mv_hll_from_fmt.f90 +++ b/ext/impl/psb_s_mv_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hll_to_coo.f90 b/ext/impl/psb_s_mv_hll_to_coo.f90 index d36286a58..bfb8a7aa0 100644 --- a/ext/impl/psb_s_mv_hll_to_coo.f90 +++ b/ext/impl/psb_s_mv_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_s_mv_hll_to_fmt.f90 b/ext/impl/psb_s_mv_hll_to_fmt.f90 index 17618f69b..cdbf09964 100644 --- a/ext/impl/psb_s_mv_hll_to_fmt.f90 +++ b/ext/impl/psb_s_mv_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_dia_from_coo.f90 b/ext/impl/psb_z_cp_dia_from_coo.f90 index e87bfb349..85614118c 100644 --- a/ext/impl/psb_z_cp_dia_from_coo.f90 +++ b/ext/impl/psb_z_cp_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_dia_to_coo.f90 b/ext/impl/psb_z_cp_dia_to_coo.f90 index 26fac30b3..570aeca49 100644 --- a/ext/impl/psb_z_cp_dia_to_coo.f90 +++ b/ext/impl/psb_z_cp_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_ell_from_coo.f90 b/ext/impl/psb_z_cp_ell_from_coo.f90 index 7559621d3..1c4bd8c55 100644 --- a/ext/impl/psb_z_cp_ell_from_coo.f90 +++ b/ext/impl/psb_z_cp_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_ell_from_fmt.f90 b/ext/impl/psb_z_cp_ell_from_fmt.f90 index 6d63b64e8..606dc6611 100644 --- a/ext/impl/psb_z_cp_ell_from_fmt.f90 +++ b/ext/impl/psb_z_cp_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_ell_to_coo.f90 b/ext/impl/psb_z_cp_ell_to_coo.f90 index 38a1696ba..04e1c7eef 100644 --- a/ext/impl/psb_z_cp_ell_to_coo.f90 +++ b/ext/impl/psb_z_cp_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_ell_to_fmt.f90 b/ext/impl/psb_z_cp_ell_to_fmt.f90 index 7fb64a90e..ea443a0fa 100644 --- a/ext/impl/psb_z_cp_ell_to_fmt.f90 +++ b/ext/impl/psb_z_cp_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hdia_from_coo.f90 b/ext/impl/psb_z_cp_hdia_from_coo.f90 index ed77914e6..4f46bafb9 100644 --- a/ext/impl/psb_z_cp_hdia_from_coo.f90 +++ b/ext/impl/psb_z_cp_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hdia_to_coo.f90 b/ext/impl/psb_z_cp_hdia_to_coo.f90 index c0544ff01..87a3f1d7b 100644 --- a/ext/impl/psb_z_cp_hdia_to_coo.f90 +++ b/ext/impl/psb_z_cp_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hll_from_coo.f90 b/ext/impl/psb_z_cp_hll_from_coo.f90 index 15a8d1c2f..96e5ac602 100644 --- a/ext/impl/psb_z_cp_hll_from_coo.f90 +++ b/ext/impl/psb_z_cp_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hll_from_fmt.f90 b/ext/impl/psb_z_cp_hll_from_fmt.f90 index 3bdb22716..7bdde1f38 100644 --- a/ext/impl/psb_z_cp_hll_from_fmt.f90 +++ b/ext/impl/psb_z_cp_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hll_to_coo.f90 b/ext/impl/psb_z_cp_hll_to_coo.f90 index 409fe7b5e..817d54475 100644 --- a/ext/impl/psb_z_cp_hll_to_coo.f90 +++ b/ext/impl/psb_z_cp_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_cp_hll_to_fmt.f90 b/ext/impl/psb_z_cp_hll_to_fmt.f90 index b0417c923..b1c321bcf 100644 --- a/ext/impl/psb_z_cp_hll_to_fmt.f90 +++ b/ext/impl/psb_z_cp_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_aclsum.f90 b/ext/impl/psb_z_dia_aclsum.f90 index 5aed7ff03..da9df10da 100644 --- a/ext/impl/psb_z_dia_aclsum.f90 +++ b/ext/impl/psb_z_dia_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_allocate_mnnz.f90 b/ext/impl/psb_z_dia_allocate_mnnz.f90 index e9c614f65..8f05fb19b 100644 --- a/ext/impl/psb_z_dia_allocate_mnnz.f90 +++ b/ext/impl/psb_z_dia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_arwsum.f90 b/ext/impl/psb_z_dia_arwsum.f90 index 428053499..f9fa8cc96 100644 --- a/ext/impl/psb_z_dia_arwsum.f90 +++ b/ext/impl/psb_z_dia_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_colsum.f90 b/ext/impl/psb_z_dia_colsum.f90 index 69919736f..623142b22 100644 --- a/ext/impl/psb_z_dia_colsum.f90 +++ b/ext/impl/psb_z_dia_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_csgetptn.f90 b/ext/impl/psb_z_dia_csgetptn.f90 index d63304f87..fd805e738 100644 --- a/ext/impl/psb_z_dia_csgetptn.f90 +++ b/ext/impl/psb_z_dia_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_csgetrow.f90 b/ext/impl/psb_z_dia_csgetrow.f90 index 6571264e6..ef69265ae 100644 --- a/ext/impl/psb_z_dia_csgetrow.f90 +++ b/ext/impl/psb_z_dia_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_csmm.f90 b/ext/impl/psb_z_dia_csmm.f90 index cbebd10ec..1e4a55314 100644 --- a/ext/impl/psb_z_dia_csmm.f90 +++ b/ext/impl/psb_z_dia_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_csmv.f90 b/ext/impl/psb_z_dia_csmv.f90 index 9d1f5a2ae..9d37ff878 100644 --- a/ext/impl/psb_z_dia_csmv.f90 +++ b/ext/impl/psb_z_dia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_get_diag.f90 b/ext/impl/psb_z_dia_get_diag.f90 index 9b4039233..f8a3c67b4 100644 --- a/ext/impl/psb_z_dia_get_diag.f90 +++ b/ext/impl/psb_z_dia_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_maxval.f90 b/ext/impl/psb_z_dia_maxval.f90 index d3518c17b..fe845c7d6 100644 --- a/ext/impl/psb_z_dia_maxval.f90 +++ b/ext/impl/psb_z_dia_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_mold.f90 b/ext/impl/psb_z_dia_mold.f90 index 421af2841..aa212a4e8 100644 --- a/ext/impl/psb_z_dia_mold.f90 +++ b/ext/impl/psb_z_dia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_print.f90 b/ext/impl/psb_z_dia_print.f90 index 1f7853ef2..bc5bffd65 100644 --- a/ext/impl/psb_z_dia_print.f90 +++ b/ext/impl/psb_z_dia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_reallocate_nz.f90 b/ext/impl/psb_z_dia_reallocate_nz.f90 index 2d204a642..eac201d19 100644 --- a/ext/impl/psb_z_dia_reallocate_nz.f90 +++ b/ext/impl/psb_z_dia_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_reinit.f90 b/ext/impl/psb_z_dia_reinit.f90 index 0f58a9ed7..2e6315bc7 100644 --- a/ext/impl/psb_z_dia_reinit.f90 +++ b/ext/impl/psb_z_dia_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_rowsum.f90 b/ext/impl/psb_z_dia_rowsum.f90 index 6918ada1a..3c5e53a19 100644 --- a/ext/impl/psb_z_dia_rowsum.f90 +++ b/ext/impl/psb_z_dia_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_scal.f90 b/ext/impl/psb_z_dia_scal.f90 index 65957e607..6f07e9819 100644 --- a/ext/impl/psb_z_dia_scal.f90 +++ b/ext/impl/psb_z_dia_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_dia_scals.f90 b/ext/impl/psb_z_dia_scals.f90 index 895763d9e..fd9a67f2a 100644 --- a/ext/impl/psb_z_dia_scals.f90 +++ b/ext/impl/psb_z_dia_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_aclsum.f90 b/ext/impl/psb_z_ell_aclsum.f90 index b03121fd5..d2ffd4c77 100644 --- a/ext/impl/psb_z_ell_aclsum.f90 +++ b/ext/impl/psb_z_ell_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_allocate_mnnz.f90 b/ext/impl/psb_z_ell_allocate_mnnz.f90 index f7f7f67e4..a707f5b8e 100644 --- a/ext/impl/psb_z_ell_allocate_mnnz.f90 +++ b/ext/impl/psb_z_ell_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_arwsum.f90 b/ext/impl/psb_z_ell_arwsum.f90 index 9d4b4949a..52f9e1044 100644 --- a/ext/impl/psb_z_ell_arwsum.f90 +++ b/ext/impl/psb_z_ell_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_colsum.f90 b/ext/impl/psb_z_ell_colsum.f90 index e9c2bc0b2..e34fd6247 100644 --- a/ext/impl/psb_z_ell_colsum.f90 +++ b/ext/impl/psb_z_ell_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csgetblk.f90 b/ext/impl/psb_z_ell_csgetblk.f90 index d2e56e1db..e6e4fcc45 100644 --- a/ext/impl/psb_z_ell_csgetblk.f90 +++ b/ext/impl/psb_z_ell_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csgetptn.f90 b/ext/impl/psb_z_ell_csgetptn.f90 index 97ed7d90c..d2aec0161 100644 --- a/ext/impl/psb_z_ell_csgetptn.f90 +++ b/ext/impl/psb_z_ell_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csgetrow.f90 b/ext/impl/psb_z_ell_csgetrow.f90 index 5716f9c1b..c6d0941ad 100644 --- a/ext/impl/psb_z_ell_csgetrow.f90 +++ b/ext/impl/psb_z_ell_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csmm.f90 b/ext/impl/psb_z_ell_csmm.f90 index 33c7bdb95..ad076c655 100644 --- a/ext/impl/psb_z_ell_csmm.f90 +++ b/ext/impl/psb_z_ell_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csmv.f90 b/ext/impl/psb_z_ell_csmv.f90 index 2ed4042bd..e0a2df4df 100644 --- a/ext/impl/psb_z_ell_csmv.f90 +++ b/ext/impl/psb_z_ell_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csnm1.f90 b/ext/impl/psb_z_ell_csnm1.f90 index 9669b20bf..ebcf5ca7a 100644 --- a/ext/impl/psb_z_ell_csnm1.f90 +++ b/ext/impl/psb_z_ell_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csnmi.f90 b/ext/impl/psb_z_ell_csnmi.f90 index ecbfb1e1e..db82d8801 100644 --- a/ext/impl/psb_z_ell_csnmi.f90 +++ b/ext/impl/psb_z_ell_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_csput.f90 b/ext/impl/psb_z_ell_csput.f90 index cf45070f3..cda18850a 100644 --- a/ext/impl/psb_z_ell_csput.f90 +++ b/ext/impl/psb_z_ell_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_cssm.f90 b/ext/impl/psb_z_ell_cssm.f90 index 2e26c656e..199d997e5 100644 --- a/ext/impl/psb_z_ell_cssm.f90 +++ b/ext/impl/psb_z_ell_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_cssv.f90 b/ext/impl/psb_z_ell_cssv.f90 index d17238a28..2ed0ae4c8 100644 --- a/ext/impl/psb_z_ell_cssv.f90 +++ b/ext/impl/psb_z_ell_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_get_diag.f90 b/ext/impl/psb_z_ell_get_diag.f90 index af9c37a8c..e01ba2d4b 100644 --- a/ext/impl/psb_z_ell_get_diag.f90 +++ b/ext/impl/psb_z_ell_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_maxval.f90 b/ext/impl/psb_z_ell_maxval.f90 index 9596f1241..a792d66e1 100644 --- a/ext/impl/psb_z_ell_maxval.f90 +++ b/ext/impl/psb_z_ell_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_mold.f90 b/ext/impl/psb_z_ell_mold.f90 index 3e1db6ccb..9391ae0f0 100644 --- a/ext/impl/psb_z_ell_mold.f90 +++ b/ext/impl/psb_z_ell_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_print.f90 b/ext/impl/psb_z_ell_print.f90 index 502abb94b..d4d384045 100644 --- a/ext/impl/psb_z_ell_print.f90 +++ b/ext/impl/psb_z_ell_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_reallocate_nz.f90 b/ext/impl/psb_z_ell_reallocate_nz.f90 index 582375080..880bfd1a1 100644 --- a/ext/impl/psb_z_ell_reallocate_nz.f90 +++ b/ext/impl/psb_z_ell_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_reinit.f90 b/ext/impl/psb_z_ell_reinit.f90 index d73620d87..75c14daa8 100644 --- a/ext/impl/psb_z_ell_reinit.f90 +++ b/ext/impl/psb_z_ell_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_rowsum.f90 b/ext/impl/psb_z_ell_rowsum.f90 index 60eb70af3..196947a68 100644 --- a/ext/impl/psb_z_ell_rowsum.f90 +++ b/ext/impl/psb_z_ell_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_scal.f90 b/ext/impl/psb_z_ell_scal.f90 index 7f2f8944b..7500bd0cc 100644 --- a/ext/impl/psb_z_ell_scal.f90 +++ b/ext/impl/psb_z_ell_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_scals.f90 b/ext/impl/psb_z_ell_scals.f90 index 4086d8cce..1160f5260 100644 --- a/ext/impl/psb_z_ell_scals.f90 +++ b/ext/impl/psb_z_ell_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_ell_trim.f90 b/ext/impl/psb_z_ell_trim.f90 index 7cc2ed650..acde75e84 100644 --- a/ext/impl/psb_z_ell_trim.f90 +++ b/ext/impl/psb_z_ell_trim.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hdia_allocate_mnnz.f90 b/ext/impl/psb_z_hdia_allocate_mnnz.f90 index abed0c587..e856ac7c5 100644 --- a/ext/impl/psb_z_hdia_allocate_mnnz.f90 +++ b/ext/impl/psb_z_hdia_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hdia_csmv.f90 b/ext/impl/psb_z_hdia_csmv.f90 index 73d11da66..34e736f38 100644 --- a/ext/impl/psb_z_hdia_csmv.f90 +++ b/ext/impl/psb_z_hdia_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hdia_mold.f90 b/ext/impl/psb_z_hdia_mold.f90 index d91bdb351..a67cda16c 100644 --- a/ext/impl/psb_z_hdia_mold.f90 +++ b/ext/impl/psb_z_hdia_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hdia_print.f90 b/ext/impl/psb_z_hdia_print.f90 index 46f7769d1..09d11df25 100644 --- a/ext/impl/psb_z_hdia_print.f90 +++ b/ext/impl/psb_z_hdia_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_aclsum.f90 b/ext/impl/psb_z_hll_aclsum.f90 index e4add2994..bcc3732b7 100644 --- a/ext/impl/psb_z_hll_aclsum.f90 +++ b/ext/impl/psb_z_hll_aclsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_allocate_mnnz.f90 b/ext/impl/psb_z_hll_allocate_mnnz.f90 index 6ba9d7f1d..2bd4c3559 100644 --- a/ext/impl/psb_z_hll_allocate_mnnz.f90 +++ b/ext/impl/psb_z_hll_allocate_mnnz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_arwsum.f90 b/ext/impl/psb_z_hll_arwsum.f90 index a6e020fda..ebbd62d26 100644 --- a/ext/impl/psb_z_hll_arwsum.f90 +++ b/ext/impl/psb_z_hll_arwsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_colsum.f90 b/ext/impl/psb_z_hll_colsum.f90 index 196a694ec..91ad04882 100644 --- a/ext/impl/psb_z_hll_colsum.f90 +++ b/ext/impl/psb_z_hll_colsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csgetblk.f90 b/ext/impl/psb_z_hll_csgetblk.f90 index 0cdf1fefe..e58abc250 100644 --- a/ext/impl/psb_z_hll_csgetblk.f90 +++ b/ext/impl/psb_z_hll_csgetblk.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csgetptn.f90 b/ext/impl/psb_z_hll_csgetptn.f90 index 9d4c6714a..1ef36b0cd 100644 --- a/ext/impl/psb_z_hll_csgetptn.f90 +++ b/ext/impl/psb_z_hll_csgetptn.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csgetrow.f90 b/ext/impl/psb_z_hll_csgetrow.f90 index f6d563dd1..160c6623c 100644 --- a/ext/impl/psb_z_hll_csgetrow.f90 +++ b/ext/impl/psb_z_hll_csgetrow.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csmm.f90 b/ext/impl/psb_z_hll_csmm.f90 index fb48d5aa6..c5e0dec31 100644 --- a/ext/impl/psb_z_hll_csmm.f90 +++ b/ext/impl/psb_z_hll_csmm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csmv.f90 b/ext/impl/psb_z_hll_csmv.f90 index e1b9e73f3..cf871d601 100644 --- a/ext/impl/psb_z_hll_csmv.f90 +++ b/ext/impl/psb_z_hll_csmv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csnm1.f90 b/ext/impl/psb_z_hll_csnm1.f90 index eb5c5b6b4..4ca5de7ce 100644 --- a/ext/impl/psb_z_hll_csnm1.f90 +++ b/ext/impl/psb_z_hll_csnm1.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csnmi.f90 b/ext/impl/psb_z_hll_csnmi.f90 index 6243e5cfd..949cc1915 100644 --- a/ext/impl/psb_z_hll_csnmi.f90 +++ b/ext/impl/psb_z_hll_csnmi.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_csput.f90 b/ext/impl/psb_z_hll_csput.f90 index e47664c7e..84de26d64 100644 --- a/ext/impl/psb_z_hll_csput.f90 +++ b/ext/impl/psb_z_hll_csput.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_cssm.f90 b/ext/impl/psb_z_hll_cssm.f90 index ba1aa1504..a377fe34c 100644 --- a/ext/impl/psb_z_hll_cssm.f90 +++ b/ext/impl/psb_z_hll_cssm.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_cssv.f90 b/ext/impl/psb_z_hll_cssv.f90 index 75606bbd3..ffb758cb6 100644 --- a/ext/impl/psb_z_hll_cssv.f90 +++ b/ext/impl/psb_z_hll_cssv.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_get_diag.f90 b/ext/impl/psb_z_hll_get_diag.f90 index 1fe3ae046..0ddc1c504 100644 --- a/ext/impl/psb_z_hll_get_diag.f90 +++ b/ext/impl/psb_z_hll_get_diag.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_maxval.f90 b/ext/impl/psb_z_hll_maxval.f90 index 22258c3a9..922d9dc74 100644 --- a/ext/impl/psb_z_hll_maxval.f90 +++ b/ext/impl/psb_z_hll_maxval.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_mold.f90 b/ext/impl/psb_z_hll_mold.f90 index e108e9ce9..4d571b9c2 100644 --- a/ext/impl/psb_z_hll_mold.f90 +++ b/ext/impl/psb_z_hll_mold.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_print.f90 b/ext/impl/psb_z_hll_print.f90 index 438822641..83d6bc106 100644 --- a/ext/impl/psb_z_hll_print.f90 +++ b/ext/impl/psb_z_hll_print.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_reallocate_nz.f90 b/ext/impl/psb_z_hll_reallocate_nz.f90 index 23432f9f0..27273b05e 100644 --- a/ext/impl/psb_z_hll_reallocate_nz.f90 +++ b/ext/impl/psb_z_hll_reallocate_nz.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_reinit.f90 b/ext/impl/psb_z_hll_reinit.f90 index b6851c612..b551dd86b 100644 --- a/ext/impl/psb_z_hll_reinit.f90 +++ b/ext/impl/psb_z_hll_reinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_rowsum.f90 b/ext/impl/psb_z_hll_rowsum.f90 index 027c5b22e..28e6034d5 100644 --- a/ext/impl/psb_z_hll_rowsum.f90 +++ b/ext/impl/psb_z_hll_rowsum.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_scal.f90 b/ext/impl/psb_z_hll_scal.f90 index a11d0da81..f7827258c 100644 --- a/ext/impl/psb_z_hll_scal.f90 +++ b/ext/impl/psb_z_hll_scal.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_hll_scals.f90 b/ext/impl/psb_z_hll_scals.f90 index 432f11e6a..af846fdb1 100644 --- a/ext/impl/psb_z_hll_scals.f90 +++ b/ext/impl/psb_z_hll_scals.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_dia_from_coo.f90 b/ext/impl/psb_z_mv_dia_from_coo.f90 index 29e27dfc5..ae052501f 100644 --- a/ext/impl/psb_z_mv_dia_from_coo.f90 +++ b/ext/impl/psb_z_mv_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_dia_to_coo.f90 b/ext/impl/psb_z_mv_dia_to_coo.f90 index 1679c9e00..63affd553 100644 --- a/ext/impl/psb_z_mv_dia_to_coo.f90 +++ b/ext/impl/psb_z_mv_dia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_ell_from_coo.f90 b/ext/impl/psb_z_mv_ell_from_coo.f90 index de39604e9..90f2b1ed1 100644 --- a/ext/impl/psb_z_mv_ell_from_coo.f90 +++ b/ext/impl/psb_z_mv_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_ell_from_fmt.f90 b/ext/impl/psb_z_mv_ell_from_fmt.f90 index a2c7c1901..942d421ec 100644 --- a/ext/impl/psb_z_mv_ell_from_fmt.f90 +++ b/ext/impl/psb_z_mv_ell_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_ell_to_coo.f90 b/ext/impl/psb_z_mv_ell_to_coo.f90 index 3f8afb0a9..20da30833 100644 --- a/ext/impl/psb_z_mv_ell_to_coo.f90 +++ b/ext/impl/psb_z_mv_ell_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_ell_to_fmt.f90 b/ext/impl/psb_z_mv_ell_to_fmt.f90 index d34ae80e0..c31475228 100644 --- a/ext/impl/psb_z_mv_ell_to_fmt.f90 +++ b/ext/impl/psb_z_mv_ell_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hdia_from_coo.f90 b/ext/impl/psb_z_mv_hdia_from_coo.f90 index b9593f343..61c706a62 100644 --- a/ext/impl/psb_z_mv_hdia_from_coo.f90 +++ b/ext/impl/psb_z_mv_hdia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hdia_to_coo.f90 b/ext/impl/psb_z_mv_hdia_to_coo.f90 index f4c8df558..8ae285bd6 100644 --- a/ext/impl/psb_z_mv_hdia_to_coo.f90 +++ b/ext/impl/psb_z_mv_hdia_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hll_from_coo.f90 b/ext/impl/psb_z_mv_hll_from_coo.f90 index abe988b3e..3b84be4f7 100644 --- a/ext/impl/psb_z_mv_hll_from_coo.f90 +++ b/ext/impl/psb_z_mv_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hll_from_fmt.f90 b/ext/impl/psb_z_mv_hll_from_fmt.f90 index 81626aba4..3f3beb895 100644 --- a/ext/impl/psb_z_mv_hll_from_fmt.f90 +++ b/ext/impl/psb_z_mv_hll_from_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hll_to_coo.f90 b/ext/impl/psb_z_mv_hll_to_coo.f90 index af0330047..705dcbe0e 100644 --- a/ext/impl/psb_z_mv_hll_to_coo.f90 +++ b/ext/impl/psb_z_mv_hll_to_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psb_z_mv_hll_to_fmt.f90 b/ext/impl/psb_z_mv_hll_to_fmt.f90 index a2fd7027c..8f0ac8e6c 100644 --- a/ext/impl/psb_z_mv_hll_to_fmt.f90 +++ b/ext/impl/psb_z_mv_hll_to_fmt.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_convert_dia_from_coo.f90 b/ext/impl/psi_c_convert_dia_from_coo.f90 index 295657485..7735c2e3a 100644 --- a/ext/impl/psi_c_convert_dia_from_coo.f90 +++ b/ext/impl/psi_c_convert_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_convert_ell_from_coo.f90 b/ext/impl/psi_c_convert_ell_from_coo.f90 index b4e0c7e4a..c208ef44e 100644 --- a/ext/impl/psi_c_convert_ell_from_coo.f90 +++ b/ext/impl/psi_c_convert_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_convert_hll_from_coo.f90 b/ext/impl/psi_c_convert_hll_from_coo.f90 index 2ebb86a6e..4a4b34ce4 100644 --- a/ext/impl/psi_c_convert_hll_from_coo.f90 +++ b/ext/impl/psi_c_convert_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_xtr_coo_from_dia.f90 b/ext/impl/psi_c_xtr_coo_from_dia.f90 index eab82a11b..59bc97e5a 100644 --- a/ext/impl/psi_c_xtr_coo_from_dia.f90 +++ b/ext/impl/psi_c_xtr_coo_from_dia.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_xtr_dia_from_coo.f90 b/ext/impl/psi_c_xtr_dia_from_coo.f90 index f72a03df1..5075ae824 100644 --- a/ext/impl/psi_c_xtr_dia_from_coo.f90 +++ b/ext/impl/psi_c_xtr_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_c_xtr_ell_from_coo.f90 b/ext/impl/psi_c_xtr_ell_from_coo.f90 index 706e6c1f7..329a9dfb7 100644 --- a/ext/impl/psi_c_xtr_ell_from_coo.f90 +++ b/ext/impl/psi_c_xtr_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_convert_dia_from_coo.f90 b/ext/impl/psi_d_convert_dia_from_coo.f90 index 5f821967a..a0dbdb1ce 100644 --- a/ext/impl/psi_d_convert_dia_from_coo.f90 +++ b/ext/impl/psi_d_convert_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_convert_ell_from_coo.f90 b/ext/impl/psi_d_convert_ell_from_coo.f90 index 51471c19d..19ccaa2b7 100644 --- a/ext/impl/psi_d_convert_ell_from_coo.f90 +++ b/ext/impl/psi_d_convert_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_convert_hll_from_coo.f90 b/ext/impl/psi_d_convert_hll_from_coo.f90 index cb07e52cf..62ce1a31c 100644 --- a/ext/impl/psi_d_convert_hll_from_coo.f90 +++ b/ext/impl/psi_d_convert_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_xtr_coo_from_dia.f90 b/ext/impl/psi_d_xtr_coo_from_dia.f90 index 5fc98b827..4e19ba783 100644 --- a/ext/impl/psi_d_xtr_coo_from_dia.f90 +++ b/ext/impl/psi_d_xtr_coo_from_dia.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_xtr_dia_from_coo.f90 b/ext/impl/psi_d_xtr_dia_from_coo.f90 index cd95b64e8..3c76ddcfa 100644 --- a/ext/impl/psi_d_xtr_dia_from_coo.f90 +++ b/ext/impl/psi_d_xtr_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_d_xtr_ell_from_coo.f90 b/ext/impl/psi_d_xtr_ell_from_coo.f90 index ec520797d..0014ed995 100644 --- a/ext/impl/psi_d_xtr_ell_from_coo.f90 +++ b/ext/impl/psi_d_xtr_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_convert_dia_from_coo.f90 b/ext/impl/psi_s_convert_dia_from_coo.f90 index d2f587787..65946d76b 100644 --- a/ext/impl/psi_s_convert_dia_from_coo.f90 +++ b/ext/impl/psi_s_convert_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_convert_ell_from_coo.f90 b/ext/impl/psi_s_convert_ell_from_coo.f90 index ecdd9b1e6..6cd161271 100644 --- a/ext/impl/psi_s_convert_ell_from_coo.f90 +++ b/ext/impl/psi_s_convert_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_convert_hll_from_coo.f90 b/ext/impl/psi_s_convert_hll_from_coo.f90 index dcf6c4e25..b560ee761 100644 --- a/ext/impl/psi_s_convert_hll_from_coo.f90 +++ b/ext/impl/psi_s_convert_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_xtr_coo_from_dia.f90 b/ext/impl/psi_s_xtr_coo_from_dia.f90 index 3745365b4..db58cd4c1 100644 --- a/ext/impl/psi_s_xtr_coo_from_dia.f90 +++ b/ext/impl/psi_s_xtr_coo_from_dia.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_xtr_dia_from_coo.f90 b/ext/impl/psi_s_xtr_dia_from_coo.f90 index a8ee7c4b3..236c44746 100644 --- a/ext/impl/psi_s_xtr_dia_from_coo.f90 +++ b/ext/impl/psi_s_xtr_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_s_xtr_ell_from_coo.f90 b/ext/impl/psi_s_xtr_ell_from_coo.f90 index 0bac2ec08..eff8fe7d8 100644 --- a/ext/impl/psi_s_xtr_ell_from_coo.f90 +++ b/ext/impl/psi_s_xtr_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_convert_dia_from_coo.f90 b/ext/impl/psi_z_convert_dia_from_coo.f90 index ddc9d2fd5..34623e893 100644 --- a/ext/impl/psi_z_convert_dia_from_coo.f90 +++ b/ext/impl/psi_z_convert_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_convert_ell_from_coo.f90 b/ext/impl/psi_z_convert_ell_from_coo.f90 index 3d37c11f9..b646948db 100644 --- a/ext/impl/psi_z_convert_ell_from_coo.f90 +++ b/ext/impl/psi_z_convert_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_convert_hll_from_coo.f90 b/ext/impl/psi_z_convert_hll_from_coo.f90 index bc9fdde17..6904d3ab2 100644 --- a/ext/impl/psi_z_convert_hll_from_coo.f90 +++ b/ext/impl/psi_z_convert_hll_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_xtr_coo_from_dia.f90 b/ext/impl/psi_z_xtr_coo_from_dia.f90 index 70d0938f6..61cc65751 100644 --- a/ext/impl/psi_z_xtr_coo_from_dia.f90 +++ b/ext/impl/psi_z_xtr_coo_from_dia.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_xtr_dia_from_coo.f90 b/ext/impl/psi_z_xtr_dia_from_coo.f90 index 6b2542c6f..bc88c174b 100644 --- a/ext/impl/psi_z_xtr_dia_from_coo.f90 +++ b/ext/impl/psi_z_xtr_dia_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/impl/psi_z_xtr_ell_from_coo.f90 b/ext/impl/psi_z_xtr_ell_from_coo.f90 index 7133f2aee..cc018f611 100644 --- a/ext/impl/psi_z_xtr_ell_from_coo.f90 +++ b/ext/impl/psi_z_xtr_ell_from_coo.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_dia_mat_mod.f90 b/ext/psb_c_dia_mat_mod.f90 index 8311487b9..80e933376 100644 --- a/ext/psb_c_dia_mat_mod.f90 +++ b/ext/psb_c_dia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_dns_mat_mod.f90 b/ext/psb_c_dns_mat_mod.f90 index 5e5a191dd..2ff21d0ab 100644 --- a/ext/psb_c_dns_mat_mod.f90 +++ b/ext/psb_c_dns_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_ell_mat_mod.f90 b/ext/psb_c_ell_mat_mod.f90 index 6954946f5..12b8bd5b6 100644 --- a/ext/psb_c_ell_mat_mod.f90 +++ b/ext/psb_c_ell_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_hdia_mat_mod.f90 b/ext/psb_c_hdia_mat_mod.f90 index fbac05dee..5f0059999 100644 --- a/ext/psb_c_hdia_mat_mod.f90 +++ b/ext/psb_c_hdia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_c_hll_mat_mod.f90 b/ext/psb_c_hll_mat_mod.f90 index 343d779e5..1876ccb1e 100644 --- a/ext/psb_c_hll_mat_mod.f90 +++ b/ext/psb_c_hll_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -534,7 +534,7 @@ contains if (allocated(a%irn)) deallocate(a%irn) if (allocated(a%ja)) deallocate(a%ja) if (allocated(a%val)) deallocate(a%val) - if (allocated(a%hkoffs)) deallocate(a%hkoffs) + if (allocated(a%val)) deallocate(a%hkoffs) call a%set_null() call a%set_nrows(izero) call a%set_ncols(izero) diff --git a/ext/psb_d_dia_mat_mod.f90 b/ext/psb_d_dia_mat_mod.f90 index 7df615acf..92d47f52d 100644 --- a/ext/psb_d_dia_mat_mod.f90 +++ b/ext/psb_d_dia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_dns_mat_mod.f90 b/ext/psb_d_dns_mat_mod.f90 index f8c977bce..5bc038851 100644 --- a/ext/psb_d_dns_mat_mod.f90 +++ b/ext/psb_d_dns_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_ell_mat_mod.f90 b/ext/psb_d_ell_mat_mod.f90 index cc945baf6..479695aba 100644 --- a/ext/psb_d_ell_mat_mod.f90 +++ b/ext/psb_d_ell_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_hdia_mat_mod.f90 b/ext/psb_d_hdia_mat_mod.f90 index 25bc6898c..a16f42757 100644 --- a/ext/psb_d_hdia_mat_mod.f90 +++ b/ext/psb_d_hdia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_d_hll_mat_mod.f90 b/ext/psb_d_hll_mat_mod.f90 index 2307db956..5185eff44 100644 --- a/ext/psb_d_hll_mat_mod.f90 +++ b/ext/psb_d_hll_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -534,7 +534,7 @@ contains if (allocated(a%irn)) deallocate(a%irn) if (allocated(a%ja)) deallocate(a%ja) if (allocated(a%val)) deallocate(a%val) - if (allocated(a%hkoffs)) deallocate(a%hkoffs) + if (allocated(a%val)) deallocate(a%hkoffs) call a%set_null() call a%set_nrows(izero) call a%set_ncols(izero) diff --git a/ext/psb_s_dia_mat_mod.f90 b/ext/psb_s_dia_mat_mod.f90 index 3a11d959f..3d59d227f 100644 --- a/ext/psb_s_dia_mat_mod.f90 +++ b/ext/psb_s_dia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_dns_mat_mod.f90 b/ext/psb_s_dns_mat_mod.f90 index e9ea5f263..e68343cef 100644 --- a/ext/psb_s_dns_mat_mod.f90 +++ b/ext/psb_s_dns_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_ell_mat_mod.f90 b/ext/psb_s_ell_mat_mod.f90 index 9e3dd8b45..5f842ecd7 100644 --- a/ext/psb_s_ell_mat_mod.f90 +++ b/ext/psb_s_ell_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_hdia_mat_mod.f90 b/ext/psb_s_hdia_mat_mod.f90 index b7b2b110d..c9b1667e8 100644 --- a/ext/psb_s_hdia_mat_mod.f90 +++ b/ext/psb_s_hdia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_s_hll_mat_mod.f90 b/ext/psb_s_hll_mat_mod.f90 index d42478d0b..ccb5ec907 100644 --- a/ext/psb_s_hll_mat_mod.f90 +++ b/ext/psb_s_hll_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -534,7 +534,7 @@ contains if (allocated(a%irn)) deallocate(a%irn) if (allocated(a%ja)) deallocate(a%ja) if (allocated(a%val)) deallocate(a%val) - if (allocated(a%hkoffs)) deallocate(a%hkoffs) + if (allocated(a%val)) deallocate(a%hkoffs) call a%set_null() call a%set_nrows(izero) call a%set_ncols(izero) diff --git a/ext/psb_z_dia_mat_mod.f90 b/ext/psb_z_dia_mat_mod.f90 index 76d071af2..ab02e0537 100644 --- a/ext/psb_z_dia_mat_mod.f90 +++ b/ext/psb_z_dia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_dns_mat_mod.f90 b/ext/psb_z_dns_mat_mod.f90 index 6147057d7..75908a544 100644 --- a/ext/psb_z_dns_mat_mod.f90 +++ b/ext/psb_z_dns_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_ell_mat_mod.f90 b/ext/psb_z_ell_mat_mod.f90 index 0e1f0e00e..b58d5eee0 100644 --- a/ext/psb_z_ell_mat_mod.f90 +++ b/ext/psb_z_ell_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_hdia_mat_mod.f90 b/ext/psb_z_hdia_mat_mod.f90 index e7c113219..2b7f36f0f 100644 --- a/ext/psb_z_hdia_mat_mod.f90 +++ b/ext/psb_z_hdia_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psb_z_hll_mat_mod.f90 b/ext/psb_z_hll_mat_mod.f90 index b825e1c82..60d046906 100644 --- a/ext/psb_z_hll_mat_mod.f90 +++ b/ext/psb_z_hll_mat_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -534,7 +534,7 @@ contains if (allocated(a%irn)) deallocate(a%irn) if (allocated(a%ja)) deallocate(a%ja) if (allocated(a%val)) deallocate(a%val) - if (allocated(a%hkoffs)) deallocate(a%hkoffs) + if (allocated(a%val)) deallocate(a%hkoffs) call a%set_null() call a%set_nrows(izero) call a%set_ncols(izero) diff --git a/ext/psi_c_ext_util_mod.f90 b/ext/psi_c_ext_util_mod.f90 index e58c0d93a..734e5fe24 100644 --- a/ext/psi_c_ext_util_mod.f90 +++ b/ext/psi_c_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_d_ext_util_mod.f90 b/ext/psi_d_ext_util_mod.f90 index 07de8ad1f..5adfd4089 100644 --- a/ext/psi_d_ext_util_mod.f90 +++ b/ext/psi_d_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_s_ext_util_mod.f90 b/ext/psi_s_ext_util_mod.f90 index 2aeefc7b9..98cebda8b 100644 --- a/ext/psi_s_ext_util_mod.f90 +++ b/ext/psi_s_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/ext/psi_z_ext_util_mod.f90 b/ext/psi_z_ext_util_mod.f90 index 25f1ede0d..79573c858 100644 --- a/ext/psi_z_ext_util_mod.f90 +++ b/ext/psi_z_ext_util_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_cbicg.f90 b/linsolve/impl/psb_cbicg.f90 index 2bfe0dbbe..15a1aa0a2 100644 --- a/linsolve/impl/psb_cbicg.f90 +++ b/linsolve/impl/psb_cbicg.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -187,11 +187,11 @@ subroutine psb_cbicg_vect(a,prec,b,x,eps,desc_a,info,& end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) + call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v) if(info /= psb_success_) then - info = psb_err_from_subroutine_non_ - ch_err = 'psb_asb' + info=psb_err_from_subroutine_non_ + ch_err='psb_asb' err=info call psb_errpush(info,name,a_err=ch_err) goto 9999 @@ -313,10 +313,6 @@ subroutine psb_cbicg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_ccg.F90 b/linsolve/impl/psb_ccg.F90 index 2a384304e..c4cca5937 100644 --- a/linsolve/impl/psb_ccg.F90 +++ b/linsolve/impl/psb_ccg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -113,7 +113,7 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err,cond ! = Local data - complex(psb_spk_), allocatable, target :: td(:),tu(:),eig(:),ewrk(:) + complex(psb_spk_), allocatable, target ::td(:),tu(:),eig(:),ewrk(:) integer(psb_mpk_), allocatable :: ibl(:), ispl(:), iwrk(:) type(psb_c_vect_type), allocatable, target :: wwrk(:) type(psb_c_vect_type), pointer :: q, p, r, z, w @@ -171,7 +171,8 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) + + call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -283,10 +284,6 @@ subroutine psb_ccg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_ccgs.f90 b/linsolve/impl/psb_ccgs.f90 index ee4a3e5a3..2db1d65ce 100644 --- a/linsolve/impl/psb_ccgs.f90 +++ b/linsolve/impl/psb_ccgs.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -164,6 +164,7 @@ Subroutine psb_ccgs_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if + if (info == psb_success_) Call psb_geall(wwrk,desc_a,info,n=11_psb_ipk_) if (info == psb_success_) Call psb_geasb(wwrk,desc_a,info,mold=x%v) if (info /= psb_success_) Then @@ -307,10 +308,6 @@ Subroutine psb_ccgs_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_ccgstab.f90 b/linsolve/impl/psb_ccgstab.f90 index 78d10eb83..1688024a8 100644 --- a/linsolve/impl/psb_ccgstab.f90 +++ b/linsolve/impl/psb_ccgstab.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -113,7 +113,7 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist complex(psb_spk_), allocatable, target :: wwrk(:,:) type(psb_c_vect_type) :: q, r, p, v, s, t, z, f - integer(psb_ipk_) :: itmax_, it,itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -179,12 +179,6 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_errpush(info,name,a_err='psb_chkvect on B') goto 9999 end if - if (info /= psb_success_) then - info=psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - End If - call psb_geasb(q,desc_a,info,mold=x%v,scratch=.true.) call psb_geasb(r,desc_a,info,mold=x%v,scratch=.true.) @@ -364,7 +358,6 @@ Subroutine psb_ccgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr - call x%sync() call psb_gefree(q,desc_a,info) call psb_gefree(r,desc_a,info) diff --git a/linsolve/impl/psb_ccgstabl.f90 b/linsolve/impl/psb_ccgstabl.f90 index d0c3dc537..ea66523ed 100644 --- a/linsolve/impl/psb_ccgstabl.f90 +++ b/linsolve/impl/psb_ccgstabl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_cfcg.F90 b/linsolve/impl/psb_cfcg.F90 index 4c1b1ae18..910b611de 100644 --- a/linsolve/impl/psb_cfcg.F90 +++ b/linsolve/impl/psb_cfcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -176,7 +176,6 @@ subroutine psb_cfcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (present(itmax)) then itmax_ = itmax else diff --git a/linsolve/impl/psb_cgcr.f90 b/linsolve/impl/psb_cgcr.f90 index 360c7db9d..99865aec4 100644 --- a/linsolve/impl/psb_cgcr.f90 +++ b/linsolve/impl/psb_cgcr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -342,6 +342,7 @@ subroutine psb_cgcr_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(c(i),desc_a,info) end do + if (info == psb_success_) deallocate(h,c_scale,z,c,alpha,stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_ckrylov.f90 b/linsolve/impl/psb_ckrylov.f90 index 39f310fc8..22712da05 100644 --- a/linsolve/impl/psb_ckrylov.f90 +++ b/linsolve/impl/psb_ckrylov.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_crgmres.f90 b/linsolve/impl/psb_crgmres.f90 index f03e1881b..214a89b39 100644 --- a/linsolve/impl/psb_crgmres.f90 +++ b/linsolve/impl/psb_crgmres.f90 @@ -18,7 +18,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -228,7 +228,6 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(v,desc_a,info,n=nl+1) if (info == psb_success_) call psb_geall(w,desc_a,info) if (info == psb_success_) call psb_geall(w1,desc_a,info) @@ -485,6 +484,7 @@ subroutine psb_crgmres_vect(a,prec,b,x,eps,desc_a,info,& if (info == psb_success_) call psb_gefree(w,desc_a,info) if (info == psb_success_) call psb_gefree(w1,desc_a,info) if (info == psb_success_) call psb_gefree(xt,desc_a,info) + if (info == psb_success_) deallocate(h,c,s,rs,rst, stat=info) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) diff --git a/linsolve/impl/psb_crichardson.f90 b/linsolve/impl/psb_crichardson.f90 index d92e0ce3d..893c14c53 100644 --- a/linsolve/impl/psb_crichardson.f90 +++ b/linsolve/impl/psb_crichardson.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -154,13 +154,6 @@ Subroutine psb_crichardson_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) - if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) - if (info /= psb_success_) then - info = psb_err_from_subroutine_non_ - call psb_errpush(info,name) - goto 9999 - end if p => wwrk(1) q => wwrk(2) r => wwrk(3) @@ -170,7 +163,7 @@ Subroutine psb_crichardson_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(cone,b,czero,r,desc_a,info) if (info == psb_success_) call psb_spmm(-cone,a,x,cone,r,desc_a,info) if (info /= psb_success_) then - info = psb_err_from_subroutine_non_ + info=psb_err_from_subroutine_non_ call psb_errpush(info,name) goto 9999 end if diff --git a/linsolve/impl/psb_dbicg.f90 b/linsolve/impl/psb_dbicg.f90 index e717a7831..1ac471995 100644 --- a/linsolve/impl/psb_dbicg.f90 +++ b/linsolve/impl/psb_dbicg.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -187,8 +187,7 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& end if - - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) + call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v) if(info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -283,8 +282,8 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& call psb_geaxpby(done,zt,beta,pt,desc_a,info) end if - call psb_spmm(done,a,p,dzero,q,desc_a,info) - call psb_spmm(done,a,pt,dzero,qt,desc_a,info,trans='c') + call psb_spmm(done,a,p,dzero,q,desc_a,info) + call psb_spmm(done,a,pt,dzero,qt,desc_a,info,trans='c') sigma = psb_gedot(pt,q,desc_a,info) if (sigma == dzero) then @@ -314,10 +313,6 @@ subroutine psb_dbicg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_dcg.F90 b/linsolve/impl/psb_dcg.F90 index 401f2ea58..e7f9cf941 100644 --- a/linsolve/impl/psb_dcg.F90 +++ b/linsolve/impl/psb_dcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -113,14 +113,13 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err,cond ! = Local data - real(psb_dpk_), allocatable, target :: td(:),tu(:),eig(:),ewrk(:) + real(psb_dpk_), allocatable, target ::td(:),tu(:),eig(:),ewrk(:) integer(psb_mpk_), allocatable :: ibl(:), ispl(:), iwrk(:) type(psb_d_vect_type), allocatable, target :: wwrk(:) type(psb_d_vect_type), pointer :: q, p, r, z, w real(psb_dpk_) :: alpha, beta, rho, rho_old, sigma,alpha_old,beta_old integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& & n_col, n_row,err_act, ieg,nspl, istebz - integer(psb_ipk_) :: i, swap_status integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_ctxt_type) :: ctxt @@ -140,11 +139,6 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& ctxt = desc_a%get_context() call psb_info(ctxt, me, np) - if (np == -ione) then - info = psb_err_context_error_ - call psb_errpush(info,name,a_err='invalid desc_a context in psb_dcg_vect') - goto 9999 - end if if (.not.allocated(b%v)) then info = psb_err_invalid_vect_state_ call psb_errpush(info,name) @@ -177,21 +171,9 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) + + call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) - if ((info == psb_success_).and.allocated(x%v%comm_handle)) then - do i=1,size(wwrk) - if (allocated(wwrk(i)%v)) then - call psb_comm_set(x%v%comm_handle%comm_type,wwrk(i)%v%comm_handle,info) - if (info /= psb_success_) exit - wwrk(i)%v%comm_handle%id = x%v%comm_handle%id - call x%v%comm_handle%get_swap_status(swap_status,info) - if (info /= psb_success_) exit - call wwrk(i)%v%comm_handle%set_swap_status(swap_status,info) - if (info /= psb_success_) exit - end if - end do - end if if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) @@ -335,10 +317,6 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_dcgs.f90 b/linsolve/impl/psb_dcgs.f90 index 970aa26de..ad4849b8e 100644 --- a/linsolve/impl/psb_dcgs.f90 +++ b/linsolve/impl/psb_dcgs.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -164,6 +164,7 @@ Subroutine psb_dcgs_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if + if (info == psb_success_) Call psb_geall(wwrk,desc_a,info,n=11_psb_ipk_) if (info == psb_success_) Call psb_geasb(wwrk,desc_a,info,mold=x%v) if (info /= psb_success_) Then @@ -307,10 +308,6 @@ Subroutine psb_dcgs_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_dcgstab.f90 b/linsolve/impl/psb_dcgstab.f90 index 746ff0085..4b9e426ff 100644 --- a/linsolve/impl/psb_dcgstab.f90 +++ b/linsolve/impl/psb_dcgstab.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -113,7 +113,8 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist real(psb_dpk_), allocatable, target :: wwrk(:,:) type(psb_d_vect_type) :: q, r, p, v, s, t, z, f - integer(psb_ipk_) :: itmax_, it, itrace_, n_row, n_col + integer(psb_ipk_) :: itmax_, it, itrace_,& + & n_row, n_col integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit Logical, Parameter :: exchange=.True., noexchange=.False., debug1 = .False. @@ -179,13 +180,6 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist goto 9999 end if - if (info /= psb_success_) then - info=psb_err_alloc_dealloc_ - call psb_errpush(info,name) - goto 9999 - End If - - call psb_geasb(q,desc_a,info,mold=x%v,scratch=.true.) call psb_geasb(r,desc_a,info,mold=x%v,scratch=.true.) call psb_geasb(p,desc_a,info,mold=x%v,scratch=.true.) @@ -364,7 +358,6 @@ Subroutine psb_dcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist call psb_end_conv(methdname,itx,desc_a,stopdat,info,derr,iter) if (present(err)) err = derr - call x%sync() call psb_gefree(q,desc_a,info) call psb_gefree(r,desc_a,info) diff --git a/linsolve/impl/psb_dcgstabl.f90 b/linsolve/impl/psb_dcgstabl.f90 index ea1467739..750097833 100644 --- a/linsolve/impl/psb_dcgstabl.f90 +++ b/linsolve/impl/psb_dcgstabl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dfcg.F90 b/linsolve/impl/psb_dfcg.F90 index 5cdb6a9d1..3b7dcea4f 100644 --- a/linsolve/impl/psb_dfcg.F90 +++ b/linsolve/impl/psb_dfcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -176,7 +176,6 @@ subroutine psb_dfcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (present(itmax)) then itmax_ = itmax else diff --git a/linsolve/impl/psb_dgcr.f90 b/linsolve/impl/psb_dgcr.f90 index 9bcd456e9..c9bc8e6d1 100644 --- a/linsolve/impl/psb_dgcr.f90 +++ b/linsolve/impl/psb_dgcr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_dkrylov.f90 b/linsolve/impl/psb_dkrylov.f90 index d858c2285..5963f5a8a 100644 --- a/linsolve/impl/psb_dkrylov.f90 +++ b/linsolve/impl/psb_dkrylov.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_drgmres.f90 b/linsolve/impl/psb_drgmres.f90 index 5ca9aeb94..584b93876 100644 --- a/linsolve/impl/psb_drgmres.f90 +++ b/linsolve/impl/psb_drgmres.f90 @@ -18,7 +18,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_drichardson.f90 b/linsolve/impl/psb_drichardson.f90 index df08f8a8c..e6813051a 100644 --- a/linsolve/impl/psb_drichardson.f90 +++ b/linsolve/impl/psb_drichardson.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -94,8 +94,8 @@ Subroutine psb_drichardson_vect(a,prec,b,x,eps,desc_a,info,& type(psb_d_vect_type), allocatable, target :: wwrk(:) type(psb_d_vect_type), pointer :: q, p, r, z, w real(psb_dpk_) :: derr - integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& - & n_col, n_row,ieg,nspl, istebz + integer(psb_ipk_) :: itmax_, istop_, it, itx, itrace_,& + & n_col, n_row,ieg,nspl, istebz integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit type(psb_itconv_type) :: stopdat @@ -154,13 +154,6 @@ Subroutine psb_drichardson_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) - if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) - if (info /= psb_success_) then - info=psb_err_from_subroutine_non_ - call psb_errpush(info,name) - goto 9999 - end if p => wwrk(1) q => wwrk(2) r => wwrk(3) diff --git a/linsolve/impl/psb_sbicg.f90 b/linsolve/impl/psb_sbicg.f90 index d981e42d5..bb687f037 100644 --- a/linsolve/impl/psb_sbicg.f90 +++ b/linsolve/impl/psb_sbicg.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -186,7 +186,8 @@ subroutine psb_sbicg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) + + call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v) if(info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -312,10 +313,6 @@ subroutine psb_sbicg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_scg.F90 b/linsolve/impl/psb_scg.F90 index 187fe7f41..198537eb1 100644 --- a/linsolve/impl/psb_scg.F90 +++ b/linsolve/impl/psb_scg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -113,7 +113,7 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_spk_), Optional, Intent(out) :: err,cond ! = Local data - real(psb_spk_), allocatable, target :: td(:),tu(:),eig(:),ewrk(:) + real(psb_spk_), allocatable, target ::td(:),tu(:),eig(:),ewrk(:) integer(psb_mpk_), allocatable :: ibl(:), ispl(:), iwrk(:) type(psb_s_vect_type), allocatable, target :: wwrk(:) type(psb_s_vect_type), pointer :: q, p, r, z, w @@ -171,7 +171,8 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) + + call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -316,10 +317,6 @@ subroutine psb_scg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_scgs.f90 b/linsolve/impl/psb_scgs.f90 index e57abda1b..f6eb345e6 100644 --- a/linsolve/impl/psb_scgs.f90 +++ b/linsolve/impl/psb_scgs.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -164,6 +164,7 @@ Subroutine psb_scgs_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if + if (info == psb_success_) Call psb_geall(wwrk,desc_a,info,n=11_psb_ipk_) if (info == psb_success_) Call psb_geasb(wwrk,desc_a,info,mold=x%v) if (info /= psb_success_) Then @@ -307,10 +308,6 @@ Subroutine psb_scgs_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_scgstab.f90 b/linsolve/impl/psb_scgstab.f90 index d822cf8ad..2b2bdcfa3 100644 --- a/linsolve/impl/psb_scgstab.f90 +++ b/linsolve/impl/psb_scgstab.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -113,7 +113,7 @@ Subroutine psb_scgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist real(psb_spk_), allocatable, target :: wwrk(:,:) type(psb_s_vect_type) :: q, r, p, v, s, t, z, f - integer(psb_ipk_) :: itmax_, it,itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit diff --git a/linsolve/impl/psb_scgstabl.f90 b/linsolve/impl/psb_scgstabl.f90 index e5ca2103d..125e3b92d 100644 --- a/linsolve/impl/psb_scgstabl.f90 +++ b/linsolve/impl/psb_scgstabl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_sfcg.F90 b/linsolve/impl/psb_sfcg.F90 index ca5fee9cd..940aa21ef 100644 --- a/linsolve/impl/psb_sfcg.F90 +++ b/linsolve/impl/psb_sfcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -176,7 +176,6 @@ subroutine psb_sfcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (present(itmax)) then itmax_ = itmax else diff --git a/linsolve/impl/psb_sgcr.f90 b/linsolve/impl/psb_sgcr.f90 index d0668d7d2..6c45d44be 100644 --- a/linsolve/impl/psb_sgcr.f90 +++ b/linsolve/impl/psb_sgcr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -222,9 +222,13 @@ subroutine psb_sgcr_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 endif - h = szero - + if (info /= psb_success_) then + info=psb_err_from_subroutine_non_ + call psb_errpush(info,name) + goto 9999 + end if + call psb_geasb(r, desc_a,info, scratch=.true.,mold=x%v) do i =1,nl+1 diff --git a/linsolve/impl/psb_skrylov.f90 b/linsolve/impl/psb_skrylov.f90 index 1a612a122..e24d7d05f 100644 --- a/linsolve/impl/psb_skrylov.f90 +++ b/linsolve/impl/psb_skrylov.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_srgmres.f90 b/linsolve/impl/psb_srgmres.f90 index 4a57da7bf..a0db5f698 100644 --- a/linsolve/impl/psb_srgmres.f90 +++ b/linsolve/impl/psb_srgmres.f90 @@ -18,7 +18,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_srichardson.f90 b/linsolve/impl/psb_srichardson.f90 index 3801c8ad3..1f9acb894 100644 --- a/linsolve/impl/psb_srichardson.f90 +++ b/linsolve/impl/psb_srichardson.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -154,13 +154,6 @@ Subroutine psb_srichardson_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) - if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) - if (info /= psb_success_) then - info=psb_err_from_subroutine_non_ - call psb_errpush(info,name) - goto 9999 - end if p => wwrk(1) q => wwrk(2) r => wwrk(3) diff --git a/linsolve/impl/psb_zbicg.f90 b/linsolve/impl/psb_zbicg.f90 index be2bb9694..19ba88001 100644 --- a/linsolve/impl/psb_zbicg.f90 +++ b/linsolve/impl/psb_zbicg.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -187,7 +187,7 @@ subroutine psb_zbicg_vect(a,prec,b,x,eps,desc_a,info,& end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) + call psb_geall(wwrk,desc_a,info,n=9_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v) if(info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -313,10 +313,6 @@ subroutine psb_zbicg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_zcg.F90 b/linsolve/impl/psb_zcg.F90 index 01ce57f85..dbc6ea2ee 100644 --- a/linsolve/impl/psb_zcg.F90 +++ b/linsolve/impl/psb_zcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -113,7 +113,7 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& integer(psb_ipk_), Optional, Intent(out) :: iter Real(psb_dpk_), Optional, Intent(out) :: err,cond ! = Local data - complex(psb_dpk_), allocatable, target :: td(:),tu(:),eig(:),ewrk(:) + complex(psb_dpk_), allocatable, target ::td(:),tu(:),eig(:),ewrk(:) integer(psb_mpk_), allocatable :: ibl(:), ispl(:), iwrk(:) type(psb_z_vect_type), allocatable, target :: wwrk(:) type(psb_z_vect_type), pointer :: q, p, r, z, w @@ -171,7 +171,8 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) + + call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ @@ -283,10 +284,6 @@ subroutine psb_zcg_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_zcgs.f90 b/linsolve/impl/psb_zcgs.f90 index 7819e7206..88d0d927d 100644 --- a/linsolve/impl/psb_zcgs.f90 +++ b/linsolve/impl/psb_zcgs.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -164,6 +164,7 @@ Subroutine psb_zcgs_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if + if (info == psb_success_) Call psb_geall(wwrk,desc_a,info,n=11_psb_ipk_) if (info == psb_success_) Call psb_geasb(wwrk,desc_a,info,mold=x%v) if (info /= psb_success_) Then @@ -307,10 +308,6 @@ Subroutine psb_zcgs_vect(a,prec,b,x,eps,desc_a,info,& if (present(err)) err = derr if (info == psb_success_) call psb_gefree(wwrk,desc_a,info) - if (info /= psb_success_) then - call psb_errpush(info,name) - goto 9999 - end if call psb_erractionrestore(err_act) return diff --git a/linsolve/impl/psb_zcgstab.f90 b/linsolve/impl/psb_zcgstab.f90 index 0b4cb0113..16bb5ddc5 100644 --- a/linsolve/impl/psb_zcgstab.f90 +++ b/linsolve/impl/psb_zcgstab.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -113,7 +113,7 @@ Subroutine psb_zcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist complex(psb_dpk_), allocatable, target :: wwrk(:,:) type(psb_z_vect_type) :: q, r, p, v, s, t, z, f - integer(psb_ipk_) :: itmax_, it,itrace_,& + integer(psb_ipk_) :: itmax_, it, itrace_,& & n_row, n_col integer(psb_lpk_) :: mglob integer(psb_ipk_) :: debug_level, debug_unit @@ -180,7 +180,6 @@ Subroutine psb_zcgstab_vect(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,ist goto 9999 end if - call psb_geasb(q,desc_a,info,mold=x%v,scratch=.true.) call psb_geasb(r,desc_a,info,mold=x%v,scratch=.true.) call psb_geasb(p,desc_a,info,mold=x%v,scratch=.true.) diff --git a/linsolve/impl/psb_zcgstabl.f90 b/linsolve/impl/psb_zcgstabl.f90 index 62faafcaf..aba579327 100644 --- a/linsolve/impl/psb_zcgstabl.f90 +++ b/linsolve/impl/psb_zcgstabl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zfcg.F90 b/linsolve/impl/psb_zfcg.F90 index a11fec1db..41dbfe8df 100644 --- a/linsolve/impl/psb_zfcg.F90 +++ b/linsolve/impl/psb_zfcg.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zgcr.f90 b/linsolve/impl/psb_zgcr.f90 index 9743f63c5..55feffd1f 100644 --- a/linsolve/impl/psb_zgcr.f90 +++ b/linsolve/impl/psb_zgcr.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -223,6 +223,11 @@ subroutine psb_zgcr_vect(a,prec,b,x,eps,desc_a,info,& endif h = zzero + if (info /= psb_success_) then + info=psb_err_from_subroutine_non_ + call psb_errpush(info,name) + goto 9999 + end if call psb_geasb(r, desc_a,info, scratch=.true.,mold=x%v) diff --git a/linsolve/impl/psb_zkrylov.f90 b/linsolve/impl/psb_zkrylov.f90 index 900e50b61..091271d15 100644 --- a/linsolve/impl/psb_zkrylov.f90 +++ b/linsolve/impl/psb_zkrylov.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zrgmres.f90 b/linsolve/impl/psb_zrgmres.f90 index 56bc3a294..fc1450dcd 100644 --- a/linsolve/impl/psb_zrgmres.f90 +++ b/linsolve/impl/psb_zrgmres.f90 @@ -18,7 +18,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/impl/psb_zrichardson.f90 b/linsolve/impl/psb_zrichardson.f90 index 1cbba3706..098b7cb10 100644 --- a/linsolve/impl/psb_zrichardson.f90 +++ b/linsolve/impl/psb_zrichardson.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -154,13 +154,6 @@ Subroutine psb_zrichardson_vect(a,prec,b,x,eps,desc_a,info,& goto 9999 end if - if (info == psb_success_) call psb_geall(wwrk,desc_a,info,n=5_psb_ipk_) - if (info == psb_success_) call psb_geasb(wwrk,desc_a,info,mold=x%v,scratch=.true.) - if (info /= psb_success_) then - info=psb_err_from_subroutine_non_ - call psb_errpush(info,name) - goto 9999 - end if p => wwrk(1) q => wwrk(2) r => wwrk(3) diff --git a/linsolve/psb_c_linsolve_conv_mod.f90 b/linsolve/psb_c_linsolve_conv_mod.f90 index 73db081eb..474acfaa6 100644 --- a/linsolve/psb_c_linsolve_conv_mod.f90 +++ b/linsolve/psb_c_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_d_linsolve_conv_mod.f90 b/linsolve/psb_d_linsolve_conv_mod.f90 index ba59923f7..f92edce39 100644 --- a/linsolve/psb_d_linsolve_conv_mod.f90 +++ b/linsolve/psb_d_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_s_linsolve_conv_mod.f90 b/linsolve/psb_s_linsolve_conv_mod.f90 index 5de6ebb62..8cac66a41 100644 --- a/linsolve/psb_s_linsolve_conv_mod.f90 +++ b/linsolve/psb_s_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/linsolve/psb_z_linsolve_conv_mod.f90 b/linsolve/psb_z_linsolve_conv_mod.f90 index 6c6276ff6..d6082262c 100644 --- a/linsolve/psb_z_linsolve_conv_mod.f90 +++ b/linsolve/psb_z_linsolve_conv_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_ainv_bld.f90 b/prec/impl/psb_c_ainv_bld.f90 index 5cf2a45e9..f46d6a76a 100644 --- a/prec/impl/psb_c_ainv_bld.f90 +++ b/prec/impl/psb_c_ainv_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_bjacprec_impl.f90 b/prec/impl/psb_c_bjacprec_impl.f90 index 2810565c9..e9a665f7f 100644 --- a/prec/impl/psb_c_bjacprec_impl.f90 +++ b/prec/impl/psb_c_bjacprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -75,26 +75,25 @@ subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_c_bjacprec, psb_protect_name => psb_c_bjac_apply_vect implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_c_bjac_prec_type), intent(inout) :: prec - complex(psb_spk_),intent(in) :: alpha,beta - type(psb_c_vect_type),intent(inout) :: x - type(psb_c_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + complex(psb_spk_),intent(in) :: alpha,beta + type(psb_c_vect_type),intent(inout) :: x + type(psb_c_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans ! Local variables - integer(psb_ipk_) :: n_row,n_col - complex(psb_spk_), pointer :: ww(:) + integer(psb_ipk_) :: n_row,n_col type(psb_c_vect_type) :: wv, wv1 - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act, ierr(5) - integer(psb_ipk_) :: debug_level, debug_unit - logical :: do_alloc_wrk - character :: trans_ - character(len=20) :: name='c_bjac_prec_apply' - character(len=20) :: ch_err + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act, ierr(5) + integer(psb_ipk_) :: debug_level, debug_unit + logical :: do_alloc_wrk + character :: trans_ + character(len=20) :: name='c_bjac_prec_apply' + character(len=20) :: ch_err info = psb_success_ call psb_erractionsave(err_act) @@ -139,8 +138,6 @@ subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) end if - allocate(ww(n_col),stat=info) - if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Allocate') goto 9999 @@ -225,8 +222,6 @@ subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) if (do_alloc_wrk) call prec%free_wrk(info) - deallocate(ww) - call psb_erractionrestore(err_act) return diff --git a/prec/impl/psb_c_diagprec_impl.f90 b/prec/impl/psb_c_diagprec_impl.f90 index 53b3ad7a3..3045575dd 100644 --- a/prec/impl/psb_c_diagprec_impl.f90 +++ b/prec/impl/psb_c_diagprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_ilu0_fact.f90 b/prec/impl/psb_c_ilu0_fact.f90 index c016359fd..fc4c6182b 100644 --- a/prec/impl/psb_c_ilu0_fact.f90 +++ b/prec/impl/psb_c_ilu0_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_iluk_fact.f90 b/prec/impl/psb_c_iluk_fact.f90 index 6c6d8a5f3..2297f6d91 100644 --- a/prec/impl/psb_c_iluk_fact.f90 +++ b/prec/impl/psb_c_iluk_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_ilut_fact.f90 b/prec/impl/psb_c_ilut_fact.f90 index 8421ee1c3..03a5bb027 100644 --- a/prec/impl/psb_c_ilut_fact.f90 +++ b/prec/impl/psb_c_ilut_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_invk_fact.f90 b/prec/impl/psb_c_invk_fact.f90 index 5c047b181..6c93d11a0 100644 --- a/prec/impl/psb_c_invk_fact.f90 +++ b/prec/impl/psb_c_invk_fact.f90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_invt_fact.f90 b/prec/impl/psb_c_invt_fact.f90 index 73e242f6d..db7f0f110 100644 --- a/prec/impl/psb_c_invt_fact.f90 +++ b/prec/impl/psb_c_invt_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_nullprec_impl.f90 b/prec/impl/psb_c_nullprec_impl.f90 index 136eba2b2..56448fe19 100644 --- a/prec/impl/psb_c_nullprec_impl.f90 +++ b/prec/impl/psb_c_nullprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_prec_type_impl.f90 b/prec/impl/psb_c_prec_type_impl.f90 index 64dccd5f3..436b56ee3 100644 --- a/prec/impl/psb_c_prec_type_impl.f90 +++ b/prec/impl/psb_c_prec_type_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -45,7 +45,7 @@ !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -66,18 +66,17 @@ subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_c_prec_type, psb_protect_name => psb_c_apply2_vect implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_cprec_type), intent(inout) :: prec - type(psb_c_vect_type),intent(inout) :: x - type(psb_c_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_cprec_type), intent(inout) :: prec + type(psb_c_vect_type),intent(inout) :: x + type(psb_c_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans - character :: trans_ - complex(psb_spk_), pointer :: work_(:) + character :: trans_ type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act character(len=20) :: name name = 'psb_c_apply2v' @@ -113,18 +112,18 @@ subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans) use psb_base_mod use psb_c_prec_type, psb_protect_name => psb_c_apply1_vect implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_cprec_type), intent(inout) :: prec type(psb_c_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans - type(psb_c_vect_type) :: ww - character :: trans_ - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act - character(len=20) :: name + type(psb_c_vect_type) :: ww + character :: trans_ + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act + character(len=20) :: name name = 'psb_c_apply1v' info = psb_success_ @@ -146,7 +145,8 @@ subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans) end if call psb_geasb(ww,desc_data,info,mold=x%v,scratch=.true.) - if (info == 0) call prec%prec%apply(cone,x,czero,ww,desc_data,info,trans=trans_) + if (info == 0) call prec%prec%apply(cone,x,czero,ww,desc_data,info,& + & trans=trans_) if (info == 0) call psb_geaxpby(cone,ww,czero,x,desc_data,info) call psb_gefree(ww,desc_data,info) @@ -158,7 +158,7 @@ subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans) end subroutine psb_c_apply1_vect -subroutine psb_c_apply2v(prec,x,y,desc_data,info,trans,work) +subroutine psb_c_apply2v(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_c_prec_type, psb_protect_name => psb_c_apply2v implicit none @@ -168,10 +168,8 @@ subroutine psb_c_apply2v(prec,x,y,desc_data,info,trans,work) complex(psb_spk_),intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) character :: trans_ - complex(psb_spk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -190,33 +188,12 @@ subroutine psb_c_apply2v(prec,x,y,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") goto 9999 end if - call prec%prec%apply(cone,x,czero,y,desc_data,info,trans_,work=work_) - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if + call prec%prec%apply(cone,x,czero,y,desc_data,info,trans_) call psb_erractionrestore(err_act) return @@ -265,7 +242,7 @@ subroutine psb_c_apply1v(prec,x,desc_data,info,trans) goto 9999 end if call prec%prec%apply(cone,x,czero,ww,desc_data,info,& - & trans_,work=w1) + & trans_) if(info /= psb_success_) goto 9999 x(:) = ww(:) deallocate(ww,W1,stat=info) diff --git a/prec/impl/psb_c_sp_drop.f90 b/prec/impl/psb_c_sp_drop.f90 index fda59cc71..1ab54a864 100644 --- a/prec/impl/psb_c_sp_drop.f90 +++ b/prec/impl/psb_c_sp_drop.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_c_sparsify.f90 b/prec/impl/psb_c_sparsify.f90 index 4962f337d..f0e8c3bb3 100644 --- a/prec/impl/psb_c_sparsify.f90 +++ b/prec/impl/psb_c_sparsify.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_cprecbld.f90 b/prec/impl/psb_cprecbld.f90 index 3c3bf8bee..1a93dd187 100644 --- a/prec/impl/psb_cprecbld.f90 +++ b/prec/impl/psb_cprecbld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -35,10 +35,10 @@ subroutine psb_cprecbld(a,desc_a,p,info,amold,vmold,imold) use psb_c_prec_type, psb_protect_name => psb_cprecbld Implicit None - type(psb_cspmat_type), intent(in), target :: a - type(psb_desc_type), intent(inout), target :: desc_a - class(psb_cprec_type),intent(inout), target :: p - integer(psb_ipk_), intent(out) :: info + type(psb_cspmat_type), intent(inout), target :: a + type(psb_desc_type), intent(inout), target :: desc_a + class(psb_cprec_type),intent(inout), target :: p + integer(psb_ipk_), intent(out) :: info class(psb_c_base_sparse_mat), intent(in), optional :: amold class(psb_c_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold diff --git a/prec/impl/psb_cprecinit.f90 b/prec/impl/psb_cprecinit.f90 index 63b4d51bb..efa9aec2e 100644 --- a/prec/impl/psb_cprecinit.f90 +++ b/prec/impl/psb_cprecinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_crwclip.f90 b/prec/impl/psb_crwclip.f90 index ade1171f6..de2b4ee42 100644 --- a/prec/impl/psb_crwclip.f90 +++ b/prec/impl/psb_crwclip.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_llk.F90 b/prec/impl/psb_csparse_biconjg_llk.F90 index 98110cd1c..00da11c71 100644 --- a/prec/impl/psb_csparse_biconjg_llk.F90 +++ b/prec/impl/psb_csparse_biconjg_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_llk_noth.F90 b/prec/impl/psb_csparse_biconjg_llk_noth.F90 index 5fe472eb8..f148fea13 100644 --- a/prec/impl/psb_csparse_biconjg_llk_noth.F90 +++ b/prec/impl/psb_csparse_biconjg_llk_noth.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_mlk.F90 b/prec/impl/psb_csparse_biconjg_mlk.F90 index 58838c82b..b8e67c476 100644 --- a/prec/impl/psb_csparse_biconjg_mlk.F90 +++ b/prec/impl/psb_csparse_biconjg_mlk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_s_ft_llk.F90 b/prec/impl/psb_csparse_biconjg_s_ft_llk.F90 index 64af2ed52..0c9195018 100644 --- a/prec/impl/psb_csparse_biconjg_s_ft_llk.F90 +++ b/prec/impl/psb_csparse_biconjg_s_ft_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_csparse_biconjg_s_llk.F90 b/prec/impl/psb_csparse_biconjg_s_llk.F90 index b38b2a0c8..b9974c40a 100644 --- a/prec/impl/psb_csparse_biconjg_s_llk.F90 +++ b/prec/impl/psb_csparse_biconjg_s_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_ainv_bld.f90 b/prec/impl/psb_d_ainv_bld.f90 index 6c175d25a..931c2ec89 100644 --- a/prec/impl/psb_d_ainv_bld.f90 +++ b/prec/impl/psb_d_ainv_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_bjacprec_impl.f90 b/prec/impl/psb_d_bjacprec_impl.f90 index 3664704c1..d98ac056b 100644 --- a/prec/impl/psb_d_bjacprec_impl.f90 +++ b/prec/impl/psb_d_bjacprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -75,26 +75,25 @@ subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_d_bjacprec, psb_protect_name => psb_d_bjac_apply_vect implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_d_bjac_prec_type), intent(inout) :: prec - real(psb_dpk_),intent(in) :: alpha,beta - type(psb_d_vect_type),intent(inout) :: x - type(psb_d_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + real(psb_dpk_),intent(in) :: alpha,beta + type(psb_d_vect_type),intent(inout) :: x + type(psb_d_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans ! Local variables - integer(psb_ipk_) :: n_row,n_col - real(psb_dpk_), pointer :: ww(:) + integer(psb_ipk_) :: n_row,n_col type(psb_d_vect_type) :: wv, wv1 - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act, ierr(5) - integer(psb_ipk_) :: debug_level, debug_unit - logical :: do_alloc_wrk - character :: trans_ - character(len=20) :: name='d_bjac_prec_apply' - character(len=20) :: ch_err + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act, ierr(5) + integer(psb_ipk_) :: debug_level, debug_unit + logical :: do_alloc_wrk + character :: trans_ + character(len=20) :: name='d_bjac_prec_apply' + character(len=20) :: ch_err info = psb_success_ call psb_erractionsave(err_act) @@ -139,8 +138,6 @@ subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) end if - allocate(ww(n_col),stat=info) - if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Allocate') goto 9999 @@ -223,7 +220,7 @@ subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) call psb_halo(y,desc_data,info,data=psb_comm_mov_) - deallocate(ww) + if (do_alloc_wrk) call prec%free_wrk(info) call psb_erractionrestore(err_act) return @@ -330,7 +327,7 @@ subroutine psb_d_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spsm(done,prec%av(psb_l_pr_),x,dzero,ww,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_, work=aux) + & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_,work=aux) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_u_pr_),ww,& & beta,y,desc_data,info,& & trans=trans_,scale='U',choice=psb_none_, work=aux) @@ -340,7 +337,7 @@ subroutine psb_d_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_, work=aux) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),ww,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_,work=aux) case('C') @@ -349,7 +346,7 @@ subroutine psb_d_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) ww(1:n_row) = ww(1:n_row)*(prec%dv%v%v(1:n_row)) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),ww,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_,work=aux) end select if (info /= psb_success_) then @@ -364,26 +361,27 @@ subroutine psb_d_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) case('N') call psb_spmm(done,prec%av(psb_l_pr_),x,dzero,ww,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) ww(1:n_row) = ww(1:n_row) * prec%dv%v%v(1:n_row) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) case('T') call psb_spmm(done,prec%av(psb_u_pr_),x,dzero,ww,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) ww(1:n_row) = ww(1:n_row) * prec%dv%v%v(1:n_row) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) + case('C') call psb_spmm(done,prec%av(psb_u_pr_),x,dzero,ww,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) ww(1:n_row) = ww(1:n_row) * (prec%dv%v%v(1:n_row)) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) end select diff --git a/prec/impl/psb_d_diagprec_impl.f90 b/prec/impl/psb_d_diagprec_impl.f90 index 2300c571b..3e1521f9e 100644 --- a/prec/impl/psb_d_diagprec_impl.f90 +++ b/prec/impl/psb_d_diagprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_ilu0_fact.f90 b/prec/impl/psb_d_ilu0_fact.f90 index dde22249e..f9562c530 100644 --- a/prec/impl/psb_d_ilu0_fact.f90 +++ b/prec/impl/psb_d_ilu0_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_iluk_fact.f90 b/prec/impl/psb_d_iluk_fact.f90 index dc837ba91..5afeb786c 100644 --- a/prec/impl/psb_d_iluk_fact.f90 +++ b/prec/impl/psb_d_iluk_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_ilut_fact.f90 b/prec/impl/psb_d_ilut_fact.f90 index cd185e806..8d221a020 100644 --- a/prec/impl/psb_d_ilut_fact.f90 +++ b/prec/impl/psb_d_ilut_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_invk_fact.f90 b/prec/impl/psb_d_invk_fact.f90 index f1a09985d..14c0a1c9e 100644 --- a/prec/impl/psb_d_invk_fact.f90 +++ b/prec/impl/psb_d_invk_fact.f90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_invt_fact.f90 b/prec/impl/psb_d_invt_fact.f90 index 83aa73ffc..5aaa24faf 100644 --- a/prec/impl/psb_d_invt_fact.f90 +++ b/prec/impl/psb_d_invt_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_nullprec_impl.f90 b/prec/impl/psb_d_nullprec_impl.f90 index 7bcdf127a..507f3eeb5 100644 --- a/prec/impl/psb_d_nullprec_impl.f90 +++ b/prec/impl/psb_d_nullprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_prec_type_impl.f90 b/prec/impl/psb_d_prec_type_impl.f90 index 617156769..0eb6e0707 100644 --- a/prec/impl/psb_d_prec_type_impl.f90 +++ b/prec/impl/psb_d_prec_type_impl.f90 @@ -66,17 +66,17 @@ subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_d_prec_type, psb_protect_name => psb_d_apply2_vect implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_dprec_type), intent(inout) :: prec - type(psb_d_vect_type),intent(inout) :: x - type(psb_d_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - - character :: trans_ + type(psb_desc_type),intent(in) :: desc_data + class(psb_dprec_type), intent(inout) :: prec + type(psb_d_vect_type),intent(inout) :: x + type(psb_d_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans + + character :: trans_ type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act character(len=20) :: name name = 'psb_d_apply2v' @@ -112,18 +112,18 @@ subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans) use psb_base_mod use psb_d_prec_type, psb_protect_name => psb_d_apply1_vect implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_dprec_type), intent(inout) :: prec - type(psb_d_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - - type(psb_d_vect_type) :: ww - character :: trans_ - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act - character(len=20) :: name + type(psb_desc_type),intent(in) :: desc_data + class(psb_dprec_type), intent(inout) :: prec + type(psb_d_vect_type),intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans + + type(psb_d_vect_type) :: ww + character :: trans_ + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act + character(len=20) :: name name = 'psb_d_apply1v' info = psb_success_ @@ -145,7 +145,8 @@ subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans) end if call psb_geasb(ww,desc_data,info,mold=x%v,scratch=.true.) - if (info == 0) call prec%prec%apply(done,x,dzero,ww,desc_data,info,trans=trans_) + if (info == 0) call prec%prec%apply(done,x,dzero,ww,desc_data,info,& + & trans=trans_) if (info == 0) call psb_geaxpby(done,ww,dzero,x,desc_data,info) call psb_gefree(ww,desc_data,info) @@ -157,7 +158,7 @@ subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans) end subroutine psb_d_apply1_vect -subroutine psb_d_apply2v(prec,x,y,desc_data,info,trans,work) +subroutine psb_d_apply2v(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_d_prec_type, psb_protect_name => psb_d_apply2v implicit none @@ -167,10 +168,8 @@ subroutine psb_d_apply2v(prec,x,y,desc_data,info,trans,work) real(psb_dpk_),intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) character :: trans_ - real(psb_dpk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -189,33 +188,12 @@ subroutine psb_d_apply2v(prec,x,y,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") goto 9999 end if - call prec%prec%apply(done,x,dzero,y,desc_data,info,trans_,work=work_) - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if + call prec%prec%apply(done,x,dzero,y,desc_data,info,trans_) call psb_erractionrestore(err_act) return @@ -264,7 +242,7 @@ subroutine psb_d_apply1v(prec,x,desc_data,info,trans) goto 9999 end if call prec%prec%apply(done,x,dzero,ww,desc_data,info,& - & trans_,work=w1) + & trans_) if(info /= psb_success_) goto 9999 x(:) = ww(:) deallocate(ww,W1,stat=info) diff --git a/prec/impl/psb_d_sp_drop.f90 b/prec/impl/psb_d_sp_drop.f90 index 67c49b6f5..84551b855 100644 --- a/prec/impl/psb_d_sp_drop.f90 +++ b/prec/impl/psb_d_sp_drop.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_d_sparsify.f90 b/prec/impl/psb_d_sparsify.f90 index de4628ba1..e2d378a82 100644 --- a/prec/impl/psb_d_sparsify.f90 +++ b/prec/impl/psb_d_sparsify.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dprecbld.f90 b/prec/impl/psb_dprecbld.f90 index c37a05e9f..b663694e3 100644 --- a/prec/impl/psb_dprecbld.f90 +++ b/prec/impl/psb_dprecbld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -35,10 +35,10 @@ subroutine psb_dprecbld(a,desc_a,p,info,amold,vmold,imold) use psb_d_prec_type, psb_protect_name => psb_dprecbld Implicit None - type(psb_dspmat_type), intent(in), target :: a - type(psb_desc_type), intent(inout), target :: desc_a - class(psb_dprec_type),intent(inout), target :: p - integer(psb_ipk_), intent(out) :: info + type(psb_dspmat_type), intent(inout), target :: a + type(psb_desc_type), intent(inout), target :: desc_a + class(psb_dprec_type),intent(inout), target :: p + integer(psb_ipk_), intent(out) :: info class(psb_d_base_sparse_mat), intent(in), optional :: amold class(psb_d_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold diff --git a/prec/impl/psb_dprecinit.f90 b/prec/impl/psb_dprecinit.f90 index 260a4f511..fe9f6e9d0 100644 --- a/prec/impl/psb_dprecinit.f90 +++ b/prec/impl/psb_dprecinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_drwclip.f90 b/prec/impl/psb_drwclip.f90 index 97aea4289..57872c7d0 100644 --- a/prec/impl/psb_drwclip.f90 +++ b/prec/impl/psb_drwclip.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_llk.F90 b/prec/impl/psb_dsparse_biconjg_llk.F90 index 919f64ab1..2459d234b 100644 --- a/prec/impl/psb_dsparse_biconjg_llk.F90 +++ b/prec/impl/psb_dsparse_biconjg_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_llk_noth.F90 b/prec/impl/psb_dsparse_biconjg_llk_noth.F90 index 447cb68f2..764eadab5 100644 --- a/prec/impl/psb_dsparse_biconjg_llk_noth.F90 +++ b/prec/impl/psb_dsparse_biconjg_llk_noth.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_mlk.F90 b/prec/impl/psb_dsparse_biconjg_mlk.F90 index aae56a5a9..faf5e5073 100644 --- a/prec/impl/psb_dsparse_biconjg_mlk.F90 +++ b/prec/impl/psb_dsparse_biconjg_mlk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 b/prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 index fbf4bc025..07c87d40c 100644 --- a/prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 +++ b/prec/impl/psb_dsparse_biconjg_s_ft_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_dsparse_biconjg_s_llk.F90 b/prec/impl/psb_dsparse_biconjg_s_llk.F90 index 72257d445..78016233a 100644 --- a/prec/impl/psb_dsparse_biconjg_s_llk.F90 +++ b/prec/impl/psb_dsparse_biconjg_s_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_ainv_bld.f90 b/prec/impl/psb_s_ainv_bld.f90 index 0ed9e9e84..07d469fa3 100644 --- a/prec/impl/psb_s_ainv_bld.f90 +++ b/prec/impl/psb_s_ainv_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_bjacprec_impl.f90 b/prec/impl/psb_s_bjacprec_impl.f90 index 5c4140602..ee48003f4 100644 --- a/prec/impl/psb_s_bjacprec_impl.f90 +++ b/prec/impl/psb_s_bjacprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -75,26 +75,25 @@ subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_s_bjacprec, psb_protect_name => psb_s_bjac_apply_vect implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_s_bjac_prec_type), intent(inout) :: prec - real(psb_spk_),intent(in) :: alpha,beta - type(psb_s_vect_type),intent(inout) :: x - type(psb_s_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + real(psb_spk_),intent(in) :: alpha,beta + type(psb_s_vect_type),intent(inout) :: x + type(psb_s_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans ! Local variables - integer(psb_ipk_) :: n_row,n_col - real(psb_spk_), pointer :: ww(:) + integer(psb_ipk_) :: n_row,n_col type(psb_s_vect_type) :: wv, wv1 - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act, ierr(5) - integer(psb_ipk_) :: debug_level, debug_unit - logical :: do_alloc_wrk - character :: trans_ - character(len=20) :: name='s_bjac_prec_apply' - character(len=20) :: ch_err + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act, ierr(5) + integer(psb_ipk_) :: debug_level, debug_unit + logical :: do_alloc_wrk + character :: trans_ + character(len=20) :: name='s_bjac_prec_apply' + character(len=20) :: ch_err info = psb_success_ call psb_erractionsave(err_act) @@ -138,7 +137,6 @@ subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) goto 9999 end if - allocate(ww(n_col),stat=info) if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Allocate') @@ -224,8 +222,6 @@ subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) if (do_alloc_wrk) call prec%free_wrk(info) - deallocate(ww) - call psb_erractionrestore(err_act) return @@ -331,7 +327,7 @@ subroutine psb_s_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) select case(trans_) case('N') call psb_spsm(sone,prec%av(psb_l_pr_),x,szero,ww,desc_data,info,& - & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_, work=aux) + & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_,work=aux) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_u_pr_),ww,& & beta,y,desc_data,info,& & trans=trans_,scale='U',choice=psb_none_, work=aux) @@ -341,7 +337,7 @@ subroutine psb_s_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) & trans=trans_,scale='L',diag=prec%dv%v%v,choice=psb_none_, work=aux) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),ww,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_,work=aux) case('C') @@ -350,7 +346,7 @@ subroutine psb_s_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) ww(1:n_row) = ww(1:n_row)*(prec%dv%v%v(1:n_row)) if(info == psb_success_) call psb_spsm(alpha,prec%av(psb_l_pr_),ww,& & beta,y,desc_data,info,& - & trans=trans_,scale='U',choice=psb_none_, work=aux) + & trans=trans_,scale='U',choice=psb_none_,work=aux) end select if (info /= psb_success_) then @@ -365,25 +361,28 @@ subroutine psb_s_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) case('N') call psb_spmm(sone,prec%av(psb_l_pr_),x,szero,ww,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) ww(1:n_row) = ww(1:n_row) * prec%dv%v%v(1:n_row) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) + case('T') call psb_spmm(sone,prec%av(psb_u_pr_),x,szero,ww,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) ww(1:n_row) = ww(1:n_row) * prec%dv%v%v(1:n_row) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) + case('C') call psb_spmm(sone,prec%av(psb_u_pr_),x,szero,ww,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) ww(1:n_row) = ww(1:n_row) * (prec%dv%v%v(1:n_row)) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& - & trans=trans_,doswap=.false., work=aux) + & trans=trans_,work=aux,doswap=.false.) + end select diff --git a/prec/impl/psb_s_diagprec_impl.f90 b/prec/impl/psb_s_diagprec_impl.f90 index cd145576d..2434fb558 100644 --- a/prec/impl/psb_s_diagprec_impl.f90 +++ b/prec/impl/psb_s_diagprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_ilu0_fact.f90 b/prec/impl/psb_s_ilu0_fact.f90 index d9ce1298e..590ae1d92 100644 --- a/prec/impl/psb_s_ilu0_fact.f90 +++ b/prec/impl/psb_s_ilu0_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_iluk_fact.f90 b/prec/impl/psb_s_iluk_fact.f90 index 67fb8ada2..67f32f1f5 100644 --- a/prec/impl/psb_s_iluk_fact.f90 +++ b/prec/impl/psb_s_iluk_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_ilut_fact.f90 b/prec/impl/psb_s_ilut_fact.f90 index 3d1111033..fdb2b3367 100644 --- a/prec/impl/psb_s_ilut_fact.f90 +++ b/prec/impl/psb_s_ilut_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_invk_fact.f90 b/prec/impl/psb_s_invk_fact.f90 index 4e7bb755a..d5b85a0b1 100644 --- a/prec/impl/psb_s_invk_fact.f90 +++ b/prec/impl/psb_s_invk_fact.f90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_invt_fact.f90 b/prec/impl/psb_s_invt_fact.f90 index f311860da..2df810028 100644 --- a/prec/impl/psb_s_invt_fact.f90 +++ b/prec/impl/psb_s_invt_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_nullprec_impl.f90 b/prec/impl/psb_s_nullprec_impl.f90 index ebb3eda4a..c2d3e9488 100644 --- a/prec/impl/psb_s_nullprec_impl.f90 +++ b/prec/impl/psb_s_nullprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_prec_type_impl.f90 b/prec/impl/psb_s_prec_type_impl.f90 index ab7e5d8e1..9ab884a85 100644 --- a/prec/impl/psb_s_prec_type_impl.f90 +++ b/prec/impl/psb_s_prec_type_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -45,7 +45,7 @@ !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -66,17 +66,17 @@ subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_s_prec_type, psb_protect_name => psb_s_apply2_vect implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_sprec_type), intent(inout) :: prec - type(psb_s_vect_type),intent(inout) :: x - type(psb_s_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - - character :: trans_ + type(psb_desc_type),intent(in) :: desc_data + class(psb_sprec_type), intent(inout) :: prec + type(psb_s_vect_type),intent(inout) :: x + type(psb_s_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans + + character :: trans_ type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act character(len=20) :: name name = 'psb_s_apply2v' @@ -112,18 +112,18 @@ subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans) use psb_base_mod use psb_s_prec_type, psb_protect_name => psb_s_apply1_vect implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_sprec_type), intent(inout) :: prec - type(psb_s_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - - type(psb_s_vect_type) :: ww - character :: trans_ - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act - character(len=20) :: name + type(psb_desc_type),intent(in) :: desc_data + class(psb_sprec_type), intent(inout) :: prec + type(psb_s_vect_type),intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans + + type(psb_s_vect_type) :: ww + character :: trans_ + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act + character(len=20) :: name name = 'psb_s_apply1v' info = psb_success_ @@ -145,7 +145,8 @@ subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans) end if call psb_geasb(ww,desc_data,info,mold=x%v,scratch=.true.) - if (info == 0) call prec%prec%apply(sone,x,szero,ww,desc_data,info,trans=trans_) + if (info == 0) call prec%prec%apply(sone,x,szero,ww,desc_data,info,& + & trans=trans_) if (info == 0) call psb_geaxpby(sone,ww,szero,x,desc_data,info) call psb_gefree(ww,desc_data,info) @@ -157,7 +158,7 @@ subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans) end subroutine psb_s_apply1_vect -subroutine psb_s_apply2v(prec,x,y,desc_data,info,trans,work) +subroutine psb_s_apply2v(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_s_prec_type, psb_protect_name => psb_s_apply2v implicit none @@ -167,10 +168,8 @@ subroutine psb_s_apply2v(prec,x,y,desc_data,info,trans,work) real(psb_spk_),intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) character :: trans_ - real(psb_spk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -189,33 +188,12 @@ subroutine psb_s_apply2v(prec,x,y,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") goto 9999 end if - call prec%prec%apply(sone,x,szero,y,desc_data,info,trans_,work=work_) - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if + call prec%prec%apply(sone,x,szero,y,desc_data,info,trans_) call psb_erractionrestore(err_act) return @@ -264,7 +242,7 @@ subroutine psb_s_apply1v(prec,x,desc_data,info,trans) goto 9999 end if call prec%prec%apply(sone,x,szero,ww,desc_data,info,& - & trans_,work=w1) + & trans_) if(info /= psb_success_) goto 9999 x(:) = ww(:) deallocate(ww,W1,stat=info) diff --git a/prec/impl/psb_s_sp_drop.f90 b/prec/impl/psb_s_sp_drop.f90 index bc297d085..104f88f81 100644 --- a/prec/impl/psb_s_sp_drop.f90 +++ b/prec/impl/psb_s_sp_drop.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_s_sparsify.f90 b/prec/impl/psb_s_sparsify.f90 index f829fbf21..4a722d805 100644 --- a/prec/impl/psb_s_sparsify.f90 +++ b/prec/impl/psb_s_sparsify.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_sprecbld.f90 b/prec/impl/psb_sprecbld.f90 index a878c16c2..77c2143c5 100644 --- a/prec/impl/psb_sprecbld.f90 +++ b/prec/impl/psb_sprecbld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -35,10 +35,10 @@ subroutine psb_sprecbld(a,desc_a,p,info,amold,vmold,imold) use psb_s_prec_type, psb_protect_name => psb_sprecbld Implicit None - type(psb_sspmat_type), intent(in), target :: a - type(psb_desc_type), intent(inout), target :: desc_a - class(psb_sprec_type),intent(inout), target :: p - integer(psb_ipk_), intent(out) :: info + type(psb_sspmat_type), intent(inout), target :: a + type(psb_desc_type), intent(inout), target :: desc_a + class(psb_sprec_type),intent(inout), target :: p + integer(psb_ipk_), intent(out) :: info class(psb_s_base_sparse_mat), intent(in), optional :: amold class(psb_s_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold diff --git a/prec/impl/psb_sprecinit.f90 b/prec/impl/psb_sprecinit.f90 index 32641bbbd..9d1265695 100644 --- a/prec/impl/psb_sprecinit.f90 +++ b/prec/impl/psb_sprecinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_srwclip.f90 b/prec/impl/psb_srwclip.f90 index f57207d7e..ab943aa46 100644 --- a/prec/impl/psb_srwclip.f90 +++ b/prec/impl/psb_srwclip.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_llk.F90 b/prec/impl/psb_ssparse_biconjg_llk.F90 index 6269cdc84..b533d5ef4 100644 --- a/prec/impl/psb_ssparse_biconjg_llk.F90 +++ b/prec/impl/psb_ssparse_biconjg_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_llk_noth.F90 b/prec/impl/psb_ssparse_biconjg_llk_noth.F90 index 0683750ad..b2728301f 100644 --- a/prec/impl/psb_ssparse_biconjg_llk_noth.F90 +++ b/prec/impl/psb_ssparse_biconjg_llk_noth.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_mlk.F90 b/prec/impl/psb_ssparse_biconjg_mlk.F90 index 7fc2db48c..c8236cca4 100644 --- a/prec/impl/psb_ssparse_biconjg_mlk.F90 +++ b/prec/impl/psb_ssparse_biconjg_mlk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 b/prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 index e8287e84b..4b1fa37bc 100644 --- a/prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 +++ b/prec/impl/psb_ssparse_biconjg_s_ft_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_ssparse_biconjg_s_llk.F90 b/prec/impl/psb_ssparse_biconjg_s_llk.F90 index 42e710895..49ab6e6aa 100644 --- a/prec/impl/psb_ssparse_biconjg_s_llk.F90 +++ b/prec/impl/psb_ssparse_biconjg_s_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_ainv_bld.f90 b/prec/impl/psb_z_ainv_bld.f90 index 4762a5f75..c147c5329 100644 --- a/prec/impl/psb_z_ainv_bld.f90 +++ b/prec/impl/psb_z_ainv_bld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_bjacprec_impl.f90 b/prec/impl/psb_z_bjacprec_impl.f90 index 03d6329f7..ea6e7926b 100644 --- a/prec/impl/psb_z_bjacprec_impl.f90 +++ b/prec/impl/psb_z_bjacprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -75,26 +75,25 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) use psb_base_mod use psb_z_bjacprec, psb_protect_name => psb_z_bjac_apply_vect implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_z_bjac_prec_type), intent(inout) :: prec - complex(psb_dpk_),intent(in) :: alpha,beta - type(psb_z_vect_type),intent(inout) :: x - type(psb_z_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + complex(psb_dpk_),intent(in) :: alpha,beta + type(psb_z_vect_type),intent(inout) :: x + type(psb_z_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans ! Local variables - integer(psb_ipk_) :: n_row,n_col - complex(psb_dpk_), pointer :: ww(:) + integer(psb_ipk_) :: n_row,n_col type(psb_z_vect_type) :: wv, wv1 - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act, ierr(5) - integer(psb_ipk_) :: debug_level, debug_unit - logical :: do_alloc_wrk - character :: trans_ - character(len=20) :: name='z_bjac_prec_apply' - character(len=20) :: ch_err + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act, ierr(5) + integer(psb_ipk_) :: debug_level, debug_unit + logical :: do_alloc_wrk + character :: trans_ + character(len=20) :: name='z_bjac_prec_apply' + character(len=20) :: ch_err info = psb_success_ call psb_erractionsave(err_act) @@ -139,8 +138,6 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) end if - allocate(ww(n_col),stat=info) - if (info /= psb_success_) then call psb_errpush(psb_err_from_subroutine_,name,a_err='Allocate') goto 9999 @@ -197,7 +194,7 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) if (info == psb_success_) call wv1%mlt(zone,prec%dv,wv,zzero,info) if(info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_u_pr_),wv1,& - & beta,y,desc_data,info, trans=trans_, doswap=.false.) + & beta,y,desc_data,info, trans=trans_,doswap=.false.) case('T','C') call psb_spmm(zone,prec%av(psb_l_pr_),x,zzero,wv,desc_data,info,& @@ -225,9 +222,6 @@ subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) if (do_alloc_wrk) call prec%free_wrk(info) - deallocate(ww) - - call psb_erractionrestore(err_act) return @@ -380,6 +374,7 @@ subroutine psb_z_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& & trans=trans_,work=aux,doswap=.false.) + case('C') call psb_spmm(zone,prec%av(psb_u_pr_),x,zzero,ww,desc_data,info,& & trans=trans_,work=aux,doswap=.false.) @@ -387,6 +382,7 @@ subroutine psb_z_bjac_apply(alpha,prec,x,beta,y,desc_data,info,trans,work) if (info == psb_success_) & & call psb_spmm(alpha,prec%av(psb_l_pr_),ww,beta,y,desc_data,info,& & trans=trans_,work=aux,doswap=.false.) + end select diff --git a/prec/impl/psb_z_diagprec_impl.f90 b/prec/impl/psb_z_diagprec_impl.f90 index d501401ea..daf0f7bc1 100644 --- a/prec/impl/psb_z_diagprec_impl.f90 +++ b/prec/impl/psb_z_diagprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_ilu0_fact.f90 b/prec/impl/psb_z_ilu0_fact.f90 index 997a5e054..6039e7ffd 100644 --- a/prec/impl/psb_z_ilu0_fact.f90 +++ b/prec/impl/psb_z_ilu0_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_iluk_fact.f90 b/prec/impl/psb_z_iluk_fact.f90 index a5540880b..2d30eff99 100644 --- a/prec/impl/psb_z_iluk_fact.f90 +++ b/prec/impl/psb_z_iluk_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_ilut_fact.f90 b/prec/impl/psb_z_ilut_fact.f90 index 0c2785157..ad2467841 100644 --- a/prec/impl/psb_z_ilut_fact.f90 +++ b/prec/impl/psb_z_ilut_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -52,7 +52,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_invk_fact.f90 b/prec/impl/psb_z_invk_fact.f90 index 99489acd1..21d3b6091 100644 --- a/prec/impl/psb_z_invk_fact.f90 +++ b/prec/impl/psb_z_invk_fact.f90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_invt_fact.f90 b/prec/impl/psb_z_invt_fact.f90 index bed713aeb..c3708979c 100644 --- a/prec/impl/psb_z_invt_fact.f90 +++ b/prec/impl/psb_z_invt_fact.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_nullprec_impl.f90 b/prec/impl/psb_z_nullprec_impl.f90 index 9cb1a2080..dde2cee3a 100644 --- a/prec/impl/psb_z_nullprec_impl.f90 +++ b/prec/impl/psb_z_nullprec_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_prec_type_impl.f90 b/prec/impl/psb_z_prec_type_impl.f90 index 7f5ae39e1..abbd2ace4 100644 --- a/prec/impl/psb_z_prec_type_impl.f90 +++ b/prec/impl/psb_z_prec_type_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -45,7 +45,7 @@ !!$ documentation and/or other materials provided with the distribution. !!$ 3. The name of the PSBLAS group or the names of its contributors may !!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. +!!$ software without specific prior written permission. !!$ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -62,22 +62,21 @@ !!$ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -subroutine psb_z_apply2_vect(prec,x,y,desc_data,info,trans,work) +subroutine psb_z_apply2_vect(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_z_prec_type, psb_protect_name => psb_z_apply2_vect implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_zprec_type), intent(inout) :: prec - type(psb_z_vect_type),intent(inout) :: x - type(psb_z_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) - - character :: trans_ + type(psb_desc_type),intent(in) :: desc_data + class(psb_zprec_type), intent(inout) :: prec + type(psb_z_vect_type),intent(inout) :: x + type(psb_z_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans + + character :: trans_ type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act character(len=20) :: name name = 'psb_z_apply2v' @@ -109,23 +108,22 @@ subroutine psb_z_apply2_vect(prec,x,y,desc_data,info,trans,work) end subroutine psb_z_apply2_vect -subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans,work) +subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans) use psb_base_mod use psb_z_prec_type, psb_protect_name => psb_z_apply1_vect implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_zprec_type), intent(inout) :: prec - type(psb_z_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) - - type(psb_z_vect_type) :: ww - character :: trans_ - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np,me - integer(psb_ipk_) :: err_act - character(len=20) :: name + type(psb_desc_type),intent(in) :: desc_data + class(psb_zprec_type), intent(inout) :: prec + type(psb_z_vect_type),intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans + + type(psb_z_vect_type) :: ww + character :: trans_ + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np,me + integer(psb_ipk_) :: err_act + character(len=20) :: name name = 'psb_z_apply1v' info = psb_success_ @@ -147,7 +145,8 @@ subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans,work) end if call psb_geasb(ww,desc_data,info,mold=x%v,scratch=.true.) - if (info == 0) call prec%prec%apply(zone,x,zzero,ww,desc_data,info,trans=trans_) + if (info == 0) call prec%prec%apply(zone,x,zzero,ww,desc_data,info,& + & trans=trans_) if (info == 0) call psb_geaxpby(zone,ww,zzero,x,desc_data,info) call psb_gefree(ww,desc_data,info) @@ -159,7 +158,7 @@ subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans,work) end subroutine psb_z_apply1_vect -subroutine psb_z_apply2v(prec,x,y,desc_data,info,trans,work) +subroutine psb_z_apply2v(prec,x,y,desc_data,info,trans) use psb_base_mod use psb_z_prec_type, psb_protect_name => psb_z_apply2v implicit none @@ -169,10 +168,8 @@ subroutine psb_z_apply2v(prec,x,y,desc_data,info,trans,work) complex(psb_dpk_),intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) character :: trans_ - complex(psb_dpk_), pointer :: work_(:) type(psb_ctxt_type) :: ctxt integer(psb_ipk_) :: np,me integer(psb_ipk_) :: err_act @@ -191,33 +188,12 @@ subroutine psb_z_apply2v(prec,x,y,desc_data,info,trans,work) trans_='N' end if - if (present(work)) then - work_ => work - else - allocate(work_(4*desc_data%get_local_cols()),stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='Allocate') - goto 9999 - end if - - end if - if (.not.allocated(prec%prec)) then info = 1124 call psb_errpush(info,name,a_err="preconditioner") goto 9999 end if - call prec%prec%apply(zone,x,zzero,y,desc_data,info,trans_,work=work_) - if (present(work)) then - else - deallocate(work_,stat=info) - if (info /= psb_success_) then - info = psb_err_from_subroutine_ - call psb_errpush(info,name,a_err='DeAllocate') - goto 9999 - end if - end if + call prec%prec%apply(zone,x,zzero,y,desc_data,info,trans_) call psb_erractionrestore(err_act) return @@ -266,7 +242,7 @@ subroutine psb_z_apply1v(prec,x,desc_data,info,trans) goto 9999 end if call prec%prec%apply(zone,x,zzero,ww,desc_data,info,& - & trans_,work=w1) + & trans_) if(info /= psb_success_) goto 9999 x(:) = ww(:) deallocate(ww,W1,stat=info) diff --git a/prec/impl/psb_z_sp_drop.f90 b/prec/impl/psb_z_sp_drop.f90 index 754c76ccb..855deea45 100644 --- a/prec/impl/psb_z_sp_drop.f90 +++ b/prec/impl/psb_z_sp_drop.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_z_sparsify.f90 b/prec/impl/psb_z_sparsify.f90 index fe29230f2..e83ffa28a 100644 --- a/prec/impl/psb_z_sparsify.f90 +++ b/prec/impl/psb_z_sparsify.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zprecbld.f90 b/prec/impl/psb_zprecbld.f90 index 3c5849475..4e324cfe5 100644 --- a/prec/impl/psb_zprecbld.f90 +++ b/prec/impl/psb_zprecbld.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -35,10 +35,10 @@ subroutine psb_zprecbld(a,desc_a,p,info,amold,vmold,imold) use psb_z_prec_type, psb_protect_name => psb_zprecbld Implicit None - type(psb_zspmat_type), intent(in), target :: a - type(psb_desc_type), intent(inout), target :: desc_a - class(psb_zprec_type),intent(inout), target :: p - integer(psb_ipk_), intent(out) :: info + type(psb_zspmat_type), intent(inout), target :: a + type(psb_desc_type), intent(inout), target :: desc_a + class(psb_zprec_type),intent(inout), target :: p + integer(psb_ipk_), intent(out) :: info class(psb_z_base_sparse_mat), intent(in), optional :: amold class(psb_z_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold diff --git a/prec/impl/psb_zprecinit.f90 b/prec/impl/psb_zprecinit.f90 index 167a43ecc..1746a8881 100644 --- a/prec/impl/psb_zprecinit.f90 +++ b/prec/impl/psb_zprecinit.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zrwclip.f90 b/prec/impl/psb_zrwclip.f90 index 574ebcf82..287a08116 100644 --- a/prec/impl/psb_zrwclip.f90 +++ b/prec/impl/psb_zrwclip.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_llk.F90 b/prec/impl/psb_zsparse_biconjg_llk.F90 index 2d3a90cbe..c39003b09 100644 --- a/prec/impl/psb_zsparse_biconjg_llk.F90 +++ b/prec/impl/psb_zsparse_biconjg_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_llk_noth.F90 b/prec/impl/psb_zsparse_biconjg_llk_noth.F90 index 65975a246..7f93208a6 100644 --- a/prec/impl/psb_zsparse_biconjg_llk_noth.F90 +++ b/prec/impl/psb_zsparse_biconjg_llk_noth.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_mlk.F90 b/prec/impl/psb_zsparse_biconjg_mlk.F90 index 52c30c2a9..49a4a2af9 100644 --- a/prec/impl/psb_zsparse_biconjg_mlk.F90 +++ b/prec/impl/psb_zsparse_biconjg_mlk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 b/prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 index 541a755c1..37c89f87d 100644 --- a/prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 +++ b/prec/impl/psb_zsparse_biconjg_s_ft_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/impl/psb_zsparse_biconjg_s_llk.F90 b/prec/impl/psb_zsparse_biconjg_s_llk.F90 index e4d6624a1..98130285a 100644 --- a/prec/impl/psb_zsparse_biconjg_s_llk.F90 +++ b/prec/impl/psb_zsparse_biconjg_s_llk.F90 @@ -17,7 +17,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_ainv_fact_mod.f90 b/prec/psb_c_ainv_fact_mod.f90 index 200ff5616..f248d97f7 100644 --- a/prec/psb_c_ainv_fact_mod.f90 +++ b/prec/psb_c_ainv_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_ainv_tools_mod.f90 b/prec/psb_c_ainv_tools_mod.f90 index a68d6d695..3f2f14984 100644 --- a/prec/psb_c_ainv_tools_mod.f90 +++ b/prec/psb_c_ainv_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_base_prec_mod.f90 b/prec/psb_c_base_prec_mod.f90 index 8af17a7df..34dceebf4 100644 --- a/prec/psb_c_base_prec_mod.f90 +++ b/prec/psb_c_base_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,14 +83,13 @@ module psb_c_base_prec_mod & psb_c_base_vect_type, psb_cspmat_type, psb_c_base_prec_type,& & psb_c_base_sparse_mat implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_c_base_prec_type), intent(inout) :: prec - complex(psb_spk_),intent(in) :: alpha, beta - type(psb_c_vect_type),intent(inout) :: x - type(psb_c_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - + complex(psb_spk_),intent(in) :: alpha, beta + type(psb_c_vect_type),intent(inout) :: x + type(psb_c_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_base_apply_vect end interface diff --git a/prec/psb_c_biconjg_mod.F90 b/prec/psb_c_biconjg_mod.F90 index e6fdaa95e..c2cdd7224 100644 --- a/prec/psb_c_biconjg_mod.F90 +++ b/prec/psb_c_biconjg_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,7 +83,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_bjacprec.f90 b/prec/psb_c_bjacprec.f90 index c26e7d767..3d8c7296e 100644 --- a/prec/psb_c_bjacprec.f90 +++ b/prec/psb_c_bjacprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -79,14 +79,13 @@ module psb_c_bjacprec interface subroutine psb_c_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_c_bjac_prec_type, psb_c_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_c_bjac_prec_type), intent(inout) :: prec - complex(psb_spk_),intent(in) :: alpha,beta - type(psb_c_vect_type),intent(inout) :: x - type(psb_c_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - + complex(psb_spk_),intent(in) :: alpha,beta + type(psb_c_vect_type),intent(inout) :: x + type(psb_c_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_bjac_apply_vect end interface diff --git a/prec/psb_c_diagprec.f90 b/prec/psb_c_diagprec.f90 index 5ef6aa1a4..0a6cbcc3a 100644 --- a/prec/psb_c_diagprec.f90 +++ b/prec/psb_c_diagprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_ilu_fact_mod.f90 b/prec/psb_c_ilu_fact_mod.f90 index 0fae1fc5f..51aaaa2cc 100644 --- a/prec/psb_c_ilu_fact_mod.f90 +++ b/prec/psb_c_ilu_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_invk_fact_mod.f90 b/prec/psb_c_invk_fact_mod.f90 index 620a8adf7..2df812d46 100644 --- a/prec/psb_c_invk_fact_mod.f90 +++ b/prec/psb_c_invk_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_invt_fact_mod.f90 b/prec/psb_c_invt_fact_mod.f90 index 841c39b1b..43a904918 100644 --- a/prec/psb_c_invt_fact_mod.f90 +++ b/prec/psb_c_invt_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_nullprec.f90 b/prec/psb_c_nullprec.f90 index 4d8e828a1..225d87ccb 100644 --- a/prec/psb_c_nullprec.f90 +++ b/prec/psb_c_nullprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -53,13 +53,13 @@ module psb_c_nullprec interface subroutine psb_c_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_c_null_prec_type, psb_c_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_c_null_prec_type), intent(inout) :: prec - type(psb_c_vect_type),intent(inout) :: x - complex(psb_spk_),intent(in) :: alpha, beta - type(psb_c_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_c_vect_type),intent(inout) :: x + complex(psb_spk_),intent(in) :: alpha, beta + type(psb_c_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_null_apply_vect end interface diff --git a/prec/psb_c_prec_mod.f90 b/prec/psb_c_prec_mod.f90 index 8d9c9d1d5..c27187082 100644 --- a/prec/psb_c_prec_mod.f90 +++ b/prec/psb_c_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_c_prec_type.f90 b/prec/psb_c_prec_type.f90 index 220f3e5ab..1097ea67f 100644 --- a/prec/psb_c_prec_type.f90 +++ b/prec/psb_c_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -85,7 +85,7 @@ module psb_c_prec_type & psb_c_base_sparse_mat, psb_spk_, psb_c_base_vect_type, & & psb_cprec_type, psb_i_base_vect_type implicit none - type(psb_cspmat_type), intent(in), target :: a + type(psb_cspmat_type), intent(inout), target :: a type(psb_desc_type), intent(inout), target :: desc_a class(psb_cprec_type), intent(inout), target :: prec integer(psb_ipk_), intent(out) :: info @@ -110,47 +110,46 @@ module psb_c_prec_type interface subroutine psb_c_apply2_vect(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_cprec_type, psb_c_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_cprec_type), intent(inout) :: prec type(psb_c_vect_type),intent(inout) :: x type(psb_c_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_apply2_vect end interface interface subroutine psb_c_apply1_vect(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_cprec_type, psb_c_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_cprec_type), intent(inout) :: prec type(psb_c_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_apply1_vect end interface interface - subroutine psb_c_apply2v(prec,x,y,desc_data,info,trans,work) + subroutine psb_c_apply2v(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_cprec_type, psb_c_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_cprec_type), intent(inout) :: prec - complex(psb_spk_),intent(inout) :: x(:) - complex(psb_spk_),intent(inout) :: y(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_spk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_cprec_type), intent(inout) :: prec + complex(psb_spk_),intent(inout) :: x(:) + complex(psb_spk_),intent(inout) :: y(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_apply2v end interface interface subroutine psb_c_apply1v(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_cprec_type, psb_c_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_cprec_type), intent(inout) :: prec - complex(psb_spk_),intent(inout) :: x(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_cprec_type), intent(inout) :: prec + complex(psb_spk_),intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_c_apply1v end interface diff --git a/prec/psb_d_ainv_fact_mod.f90 b/prec/psb_d_ainv_fact_mod.f90 index 8eb6fbc87..198280736 100644 --- a/prec/psb_d_ainv_fact_mod.f90 +++ b/prec/psb_d_ainv_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_ainv_tools_mod.f90 b/prec/psb_d_ainv_tools_mod.f90 index 7329533b7..546334440 100644 --- a/prec/psb_d_ainv_tools_mod.f90 +++ b/prec/psb_d_ainv_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_base_prec_mod.f90 b/prec/psb_d_base_prec_mod.f90 index dbc8d1f1d..6d7792cf6 100644 --- a/prec/psb_d_base_prec_mod.f90 +++ b/prec/psb_d_base_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,13 +83,13 @@ module psb_d_base_prec_mod & psb_d_base_vect_type, psb_dspmat_type, psb_d_base_prec_type,& & psb_d_base_sparse_mat implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_d_base_prec_type), intent(inout) :: prec - real(psb_dpk_),intent(in) :: alpha, beta - type(psb_d_vect_type),intent(inout) :: x - type(psb_d_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + real(psb_dpk_),intent(in) :: alpha, beta + type(psb_d_vect_type),intent(inout) :: x + type(psb_d_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_d_base_apply_vect end interface diff --git a/prec/psb_d_biconjg_mod.F90 b/prec/psb_d_biconjg_mod.F90 index 696ecbaa9..eb6579e0b 100644 --- a/prec/psb_d_biconjg_mod.F90 +++ b/prec/psb_d_biconjg_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,7 +83,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_bjacprec.f90 b/prec/psb_d_bjacprec.f90 index 92ae0c695..ab15b2e1d 100644 --- a/prec/psb_d_bjacprec.f90 +++ b/prec/psb_d_bjacprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -79,13 +79,13 @@ module psb_d_bjacprec interface subroutine psb_d_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_d_bjac_prec_type, psb_d_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_d_bjac_prec_type), intent(inout) :: prec - real(psb_dpk_),intent(in) :: alpha,beta - type(psb_d_vect_type),intent(inout) :: x - type(psb_d_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + real(psb_dpk_),intent(in) :: alpha,beta + type(psb_d_vect_type),intent(inout) :: x + type(psb_d_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_d_bjac_apply_vect end interface diff --git a/prec/psb_d_diagprec.f90 b/prec/psb_d_diagprec.f90 index 133763b01..dd266c222 100644 --- a/prec/psb_d_diagprec.f90 +++ b/prec/psb_d_diagprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_ilu_fact_mod.f90 b/prec/psb_d_ilu_fact_mod.f90 index 6354573d0..77cefb352 100644 --- a/prec/psb_d_ilu_fact_mod.f90 +++ b/prec/psb_d_ilu_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_invk_fact_mod.f90 b/prec/psb_d_invk_fact_mod.f90 index 2bd97198c..fa54e5db4 100644 --- a/prec/psb_d_invk_fact_mod.f90 +++ b/prec/psb_d_invk_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_invt_fact_mod.f90 b/prec/psb_d_invt_fact_mod.f90 index f38c1c2b5..55a2bc479 100644 --- a/prec/psb_d_invt_fact_mod.f90 +++ b/prec/psb_d_invt_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_nullprec.f90 b/prec/psb_d_nullprec.f90 index b37af8b77..fcbd26028 100644 --- a/prec/psb_d_nullprec.f90 +++ b/prec/psb_d_nullprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -53,13 +53,13 @@ module psb_d_nullprec interface subroutine psb_d_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_d_null_prec_type, psb_d_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_d_null_prec_type), intent(inout) :: prec - type(psb_d_vect_type),intent(inout) :: x - real(psb_dpk_),intent(in) :: alpha, beta - type(psb_d_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_d_vect_type),intent(inout) :: x + real(psb_dpk_),intent(in) :: alpha, beta + type(psb_d_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_d_null_apply_vect end interface diff --git a/prec/psb_d_prec_mod.f90 b/prec/psb_d_prec_mod.f90 index 3f1a59d8a..23a3f3523 100644 --- a/prec/psb_d_prec_mod.f90 +++ b/prec/psb_d_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_d_prec_type.f90 b/prec/psb_d_prec_type.f90 index 55baaad69..3db41f4e6 100644 --- a/prec/psb_d_prec_type.f90 +++ b/prec/psb_d_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -85,7 +85,7 @@ module psb_d_prec_type & psb_d_base_sparse_mat, psb_dpk_, psb_d_base_vect_type, & & psb_dprec_type, psb_i_base_vect_type implicit none - type(psb_dspmat_type), intent(in), target :: a + type(psb_dspmat_type), intent(inout), target :: a type(psb_desc_type), intent(inout), target :: desc_a class(psb_dprec_type), intent(inout), target :: prec integer(psb_ipk_), intent(out) :: info @@ -110,47 +110,46 @@ module psb_d_prec_type interface subroutine psb_d_apply2_vect(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_dprec_type, psb_d_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_dprec_type), intent(inout) :: prec - type(psb_d_vect_type),intent(inout) :: x - type(psb_d_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_dprec_type), intent(inout) :: prec + type(psb_d_vect_type),intent(inout) :: x + type(psb_d_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_d_apply2_vect end interface interface subroutine psb_d_apply1_vect(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_dprec_type, psb_d_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_dprec_type), intent(inout) :: prec - type(psb_d_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_dprec_type), intent(inout) :: prec + type(psb_d_vect_type),intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_d_apply1_vect end interface interface - subroutine psb_d_apply2v(prec,x,y,desc_data,info,trans,work) + subroutine psb_d_apply2v(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_dprec_type, psb_d_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_dprec_type), intent(inout) :: prec - real(psb_dpk_),intent(inout) :: x(:) - real(psb_dpk_),intent(inout) :: y(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - real(psb_dpk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_dprec_type), intent(inout) :: prec + real(psb_dpk_),intent(inout) :: x(:) + real(psb_dpk_),intent(inout) :: y(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_d_apply2v end interface interface subroutine psb_d_apply1v(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_dprec_type, psb_d_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_dprec_type), intent(inout) :: prec - real(psb_dpk_),intent(inout) :: x(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_dprec_type), intent(inout) :: prec + real(psb_dpk_),intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_d_apply1v end interface diff --git a/prec/psb_s_ainv_fact_mod.f90 b/prec/psb_s_ainv_fact_mod.f90 index bc7f1d126..02a59b1a5 100644 --- a/prec/psb_s_ainv_fact_mod.f90 +++ b/prec/psb_s_ainv_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_ainv_tools_mod.f90 b/prec/psb_s_ainv_tools_mod.f90 index caa501641..ff00548ac 100644 --- a/prec/psb_s_ainv_tools_mod.f90 +++ b/prec/psb_s_ainv_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_base_prec_mod.f90 b/prec/psb_s_base_prec_mod.f90 index 5f2bc2177..488cc5192 100644 --- a/prec/psb_s_base_prec_mod.f90 +++ b/prec/psb_s_base_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,14 +83,13 @@ module psb_s_base_prec_mod & psb_s_base_vect_type, psb_sspmat_type, psb_s_base_prec_type,& & psb_s_base_sparse_mat implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_s_base_prec_type), intent(inout) :: prec - real(psb_spk_),intent(in) :: alpha, beta + real(psb_spk_),intent(in) :: alpha, beta type(psb_s_vect_type),intent(inout) :: x type(psb_s_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_s_base_apply_vect end interface @@ -100,14 +99,14 @@ module psb_s_base_prec_mod & psb_s_base_vect_type, psb_sspmat_type, psb_s_base_prec_type,& & psb_s_base_sparse_mat implicit none - type(psb_desc_type),intent(in) :: desc_data - class(psb_s_base_prec_type), intent(inout) :: prec - real(psb_spk_),intent(in) :: alpha, beta - real(psb_spk_),intent(inout) :: x(:) - real(psb_spk_),intent(inout) :: y(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_s_base_prec_type), intent(inout) :: prec + real(psb_spk_),intent(in) :: alpha, beta + real(psb_spk_),intent(inout) :: x(:) + real(psb_spk_),intent(inout) :: y(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans + real(psb_spk_),intent(inout), optional, target :: work(:) end subroutine psb_s_base_apply end interface diff --git a/prec/psb_s_biconjg_mod.F90 b/prec/psb_s_biconjg_mod.F90 index 46fe3a0a5..63eb7ad80 100644 --- a/prec/psb_s_biconjg_mod.F90 +++ b/prec/psb_s_biconjg_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,7 +83,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_bjacprec.f90 b/prec/psb_s_bjacprec.f90 index 645cea044..b919cf215 100644 --- a/prec/psb_s_bjacprec.f90 +++ b/prec/psb_s_bjacprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -79,13 +79,13 @@ module psb_s_bjacprec interface subroutine psb_s_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_s_bjac_prec_type, psb_s_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_s_bjac_prec_type), intent(inout) :: prec - real(psb_spk_),intent(in) :: alpha,beta - type(psb_s_vect_type),intent(inout) :: x - type(psb_s_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + real(psb_spk_),intent(in) :: alpha,beta + type(psb_s_vect_type),intent(inout) :: x + type(psb_s_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_s_bjac_apply_vect end interface diff --git a/prec/psb_s_diagprec.f90 b/prec/psb_s_diagprec.f90 index 41c02a377..b5804d088 100644 --- a/prec/psb_s_diagprec.f90 +++ b/prec/psb_s_diagprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_ilu_fact_mod.f90 b/prec/psb_s_ilu_fact_mod.f90 index 4021adc9b..c5fe00d4e 100644 --- a/prec/psb_s_ilu_fact_mod.f90 +++ b/prec/psb_s_ilu_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_invk_fact_mod.f90 b/prec/psb_s_invk_fact_mod.f90 index 6b0d35531..835a39d3b 100644 --- a/prec/psb_s_invk_fact_mod.f90 +++ b/prec/psb_s_invk_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_invt_fact_mod.f90 b/prec/psb_s_invt_fact_mod.f90 index 2c9ce38c6..aa27ab4c1 100644 --- a/prec/psb_s_invt_fact_mod.f90 +++ b/prec/psb_s_invt_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_nullprec.f90 b/prec/psb_s_nullprec.f90 index c6fba7725..ab610a57f 100644 --- a/prec/psb_s_nullprec.f90 +++ b/prec/psb_s_nullprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -53,13 +53,13 @@ module psb_s_nullprec interface subroutine psb_s_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_s_null_prec_type, psb_s_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_s_null_prec_type), intent(inout) :: prec - type(psb_s_vect_type),intent(inout) :: x - real(psb_spk_),intent(in) :: alpha, beta - type(psb_s_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_s_vect_type),intent(inout) :: x + real(psb_spk_),intent(in) :: alpha, beta + type(psb_s_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_s_null_apply_vect end interface diff --git a/prec/psb_s_prec_mod.f90 b/prec/psb_s_prec_mod.f90 index 858db9ecf..cc8b1130c 100644 --- a/prec/psb_s_prec_mod.f90 +++ b/prec/psb_s_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_s_prec_type.f90 b/prec/psb_s_prec_type.f90 index 8ee1c0059..d761db9ce 100644 --- a/prec/psb_s_prec_type.f90 +++ b/prec/psb_s_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -85,7 +85,7 @@ module psb_s_prec_type & psb_s_base_sparse_mat, psb_spk_, psb_s_base_vect_type, & & psb_sprec_type, psb_i_base_vect_type implicit none - type(psb_sspmat_type), intent(in), target :: a + type(psb_sspmat_type), intent(inout), target :: a type(psb_desc_type), intent(inout), target :: desc_a class(psb_sprec_type), intent(inout), target :: prec integer(psb_ipk_), intent(out) :: info @@ -110,47 +110,46 @@ module psb_s_prec_type interface subroutine psb_s_apply2_vect(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_sprec_type, psb_s_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_sprec_type), intent(inout) :: prec - type(psb_s_vect_type),intent(inout) :: x - type(psb_s_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_sprec_type), intent(inout) :: prec + type(psb_s_vect_type),intent(inout) :: x + type(psb_s_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_s_apply2_vect end interface interface subroutine psb_s_apply1_vect(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_sprec_type, psb_s_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_sprec_type), intent(inout) :: prec - type(psb_s_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_sprec_type), intent(inout) :: prec + type(psb_s_vect_type),intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_s_apply1_vect end interface interface - subroutine psb_s_apply2v(prec,x,y,desc_data,info,trans,work) + subroutine psb_s_apply2v(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_sprec_type, psb_s_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_sprec_type), intent(inout) :: prec - real(psb_spk_),intent(inout) :: x(:) - real(psb_spk_),intent(inout) :: y(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - real(psb_spk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_sprec_type), intent(inout) :: prec + real(psb_spk_),intent(inout) :: x(:) + real(psb_spk_),intent(inout) :: y(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_s_apply2v end interface interface subroutine psb_s_apply1v(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_sprec_type, psb_s_vect_type, psb_spk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_sprec_type), intent(inout) :: prec - real(psb_spk_),intent(inout) :: x(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_sprec_type), intent(inout) :: prec + real(psb_spk_),intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_s_apply1v end interface diff --git a/prec/psb_z_ainv_fact_mod.f90 b/prec/psb_z_ainv_fact_mod.f90 index 490fe1322..77db6e75b 100644 --- a/prec/psb_z_ainv_fact_mod.f90 +++ b/prec/psb_z_ainv_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_ainv_tools_mod.f90 b/prec/psb_z_ainv_tools_mod.f90 index f611c2a73..66650b817 100644 --- a/prec/psb_z_ainv_tools_mod.f90 +++ b/prec/psb_z_ainv_tools_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_base_prec_mod.f90 b/prec/psb_z_base_prec_mod.f90 index 4b73740e4..09fbfd32a 100644 --- a/prec/psb_z_base_prec_mod.f90 +++ b/prec/psb_z_base_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,13 +83,13 @@ module psb_z_base_prec_mod & psb_z_base_vect_type, psb_zspmat_type, psb_z_base_prec_type,& & psb_z_base_sparse_mat implicit none - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_z_base_prec_type), intent(inout) :: prec - complex(psb_dpk_),intent(in) :: alpha, beta - type(psb_z_vect_type),intent(inout) :: x - type(psb_z_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + complex(psb_dpk_),intent(in) :: alpha, beta + type(psb_z_vect_type),intent(inout) :: x + type(psb_z_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_z_base_apply_vect end interface diff --git a/prec/psb_z_biconjg_mod.F90 b/prec/psb_z_biconjg_mod.F90 index bb193f577..8a7db5fd1 100644 --- a/prec/psb_z_biconjg_mod.F90 +++ b/prec/psb_z_biconjg_mod.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -83,7 +83,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_bjacprec.f90 b/prec/psb_z_bjacprec.f90 index 0bfbe3c27..22c6d198f 100644 --- a/prec/psb_z_bjacprec.f90 +++ b/prec/psb_z_bjacprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -79,13 +79,13 @@ module psb_z_bjacprec interface subroutine psb_z_bjac_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_z_bjac_prec_type, psb_z_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_z_bjac_prec_type), intent(inout) :: prec - complex(psb_dpk_),intent(in) :: alpha,beta - type(psb_z_vect_type),intent(inout) :: x - type(psb_z_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + complex(psb_dpk_),intent(in) :: alpha,beta + type(psb_z_vect_type),intent(inout) :: x + type(psb_z_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_z_bjac_apply_vect end interface diff --git a/prec/psb_z_diagprec.f90 b/prec/psb_z_diagprec.f90 index b70f57daa..73f18cd35 100644 --- a/prec/psb_z_diagprec.f90 +++ b/prec/psb_z_diagprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_ilu_fact_mod.f90 b/prec/psb_z_ilu_fact_mod.f90 index 4793b43bd..b8658d3a4 100644 --- a/prec/psb_z_ilu_fact_mod.f90 +++ b/prec/psb_z_ilu_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -51,7 +51,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the MLD2P4 group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_invk_fact_mod.f90 b/prec/psb_z_invk_fact_mod.f90 index 0a1e5fafb..6b83e5ffd 100644 --- a/prec/psb_z_invk_fact_mod.f90 +++ b/prec/psb_z_invk_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_invt_fact_mod.f90 b/prec/psb_z_invt_fact_mod.f90 index 1cdf32f48..f90f2d04c 100644 --- a/prec/psb_z_invt_fact_mod.f90 +++ b/prec/psb_z_invt_fact_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -48,7 +48,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_nullprec.f90 b/prec/psb_z_nullprec.f90 index 433fe10a9..415741688 100644 --- a/prec/psb_z_nullprec.f90 +++ b/prec/psb_z_nullprec.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -53,13 +53,13 @@ module psb_z_nullprec interface subroutine psb_z_null_apply_vect(alpha,prec,x,beta,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_z_null_prec_type, psb_z_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data + type(psb_desc_type),intent(in) :: desc_data class(psb_z_null_prec_type), intent(inout) :: prec - type(psb_z_vect_type),intent(inout) :: x - complex(psb_dpk_),intent(in) :: alpha, beta - type(psb_z_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_z_vect_type),intent(inout) :: x + complex(psb_dpk_),intent(in) :: alpha, beta + type(psb_z_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_z_null_apply_vect end interface diff --git a/prec/psb_z_prec_mod.f90 b/prec/psb_z_prec_mod.f90 index 1f0909aae..95cc5dd68 100644 --- a/prec/psb_z_prec_mod.f90 +++ b/prec/psb_z_prec_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/prec/psb_z_prec_type.f90 b/prec/psb_z_prec_type.f90 index 7fa396ed4..1f17896d3 100644 --- a/prec/psb_z_prec_type.f90 +++ b/prec/psb_z_prec_type.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -85,7 +85,7 @@ module psb_z_prec_type & psb_z_base_sparse_mat, psb_dpk_, psb_z_base_vect_type, & & psb_zprec_type, psb_i_base_vect_type implicit none - type(psb_zspmat_type), intent(in), target :: a + type(psb_zspmat_type), intent(inout), target :: a type(psb_desc_type), intent(inout), target :: desc_a class(psb_zprec_type), intent(inout), target :: prec integer(psb_ipk_), intent(out) :: info @@ -108,51 +108,48 @@ module psb_z_prec_type end interface interface - subroutine psb_z_apply2_vect(prec,x,y,desc_data,info,trans,work) + subroutine psb_z_apply2_vect(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_zprec_type, psb_z_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_zprec_type), intent(inout) :: prec - type(psb_z_vect_type),intent(inout) :: x - type(psb_z_vect_type),intent(inout) :: y - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_zprec_type), intent(inout) :: prec + type(psb_z_vect_type),intent(inout) :: x + type(psb_z_vect_type),intent(inout) :: y + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_z_apply2_vect end interface interface - subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans,work) + subroutine psb_z_apply1_vect(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_zprec_type, psb_z_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_zprec_type), intent(inout) :: prec - type(psb_z_vect_type),intent(inout) :: x - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_zprec_type), intent(inout) :: prec + type(psb_z_vect_type),intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_z_apply1_vect end interface interface - subroutine psb_z_apply2v(prec,x,y,desc_data,info,trans,work) + subroutine psb_z_apply2v(prec,x,y,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_zprec_type, psb_z_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_zprec_type), intent(inout) :: prec - complex(psb_dpk_),intent(inout) :: x(:) - complex(psb_dpk_),intent(inout) :: y(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans - complex(psb_dpk_),intent(inout), optional, target :: work(:) + type(psb_desc_type),intent(in) :: desc_data + class(psb_zprec_type), intent(inout) :: prec + complex(psb_dpk_),intent(inout) :: x(:) + complex(psb_dpk_),intent(inout) :: y(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_z_apply2v end interface interface subroutine psb_z_apply1v(prec,x,desc_data,info,trans) import :: psb_ipk_, psb_desc_type, psb_zprec_type, psb_z_vect_type, psb_dpk_ - type(psb_desc_type),intent(in) :: desc_data - class(psb_zprec_type), intent(inout) :: prec - complex(psb_dpk_),intent(inout) :: x(:) - integer(psb_ipk_), intent(out) :: info - character(len=1), optional :: trans + type(psb_desc_type),intent(in) :: desc_data + class(psb_zprec_type), intent(inout) :: prec + complex(psb_dpk_),intent(inout) :: x(:) + integer(psb_ipk_), intent(out) :: info + character(len=1), optional :: trans end subroutine psb_z_apply1v end interface diff --git a/test/comm/spmv/psb_spmv_overlap_sbatch.sh b/test/comm/spmv/psb_spmv_overlap_sbatch.sh deleted file mode 100644 index 4a80775e2..000000000 --- a/test/comm/spmv/psb_spmv_overlap_sbatch.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -#SBATCH --job-name=psb_spmv_overlap -#SBATCH --partition=boost_usr_prod -#SBATCH --time=01:00:00 -#SBATCH --nodes=2 -#SBATCH --ntasks=64 -#SBATCH --ntasks-per-node=32 -#SBATCH --cpus-per-task=1 -#SBATCH --threads-per-core=1 -#SBATCH --gpus-per-node=4 -#SBATCH --export=ALL -#SBATCH -A CNHPC_1736213 -#SBATCH --output=psb_spmv_overlap_%j.out -#SBATCH --error=psb_spmv_overlap_%j.err - -set -euo pipefail - -# Environment tuned like the existing comm test script. -export UCX_VFS_ENABLE=n -export UCX_VFS_USE_FUSE=n -export UCX_STATS_DEST=none -export UCX_LOG_LEVEL=error -export UCX_TLS=dc,sm,self -export UCX_NET_DEVICES=mlx5_0:1 -export OMPI_MCA_coll=^hcoll,han -export OMPI_MCA_coll_hcoll_enable=0 -export UCX_MEMTYPE_CACHE=n -export UCX_CLOSE_TIMEOUT=10s - -EXEC=./test/comm/spmv/runs/spmv_overlap -IDIM_LIST=${IDIM_LIST:-"20 40 60 80 100 140 180 220 260 300"} -TIMES=${TIMES:-100} -BUILD_IF_MISSING=${BUILD_IF_MISSING:-1} - -if [[ ! -x "$EXEC" ]]; then - echo "Executable not found: $EXEC" >&2 - exit 1 -fi - -echo "Running SpMV overlap comm test" -echo " EXEC=$EXEC" -echo " IDIM_LIST=$IDIM_LIST" -echo " TIMES=$TIMES" -echo " BUILD_IF_MISSING=$BUILD_IF_MISSING" - -for IDIM in $IDIM_LIST; do - echo "" - echo "=== Running IDIM=$IDIM TIMES=$TIMES ===" - IDIM="$IDIM" TIMES="$TIMES" srun --exclusive -N2 -n64 "$EXEC" -done diff --git a/test/comm/spmv/psb_spmv_test.f90 b/test/comm/spmv/psb_spmv_test.f90 index 396cde359..5efae0077 100644 --- a/test/comm/spmv/psb_spmv_test.f90 +++ b/test/comm/spmv/psb_spmv_test.f90 @@ -5,12 +5,6 @@ module psb_spmv_overlap_test use psb_base_mod use psb_util_mod - use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & - & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_, & - & psb_comm_handle_type - use psb_comm_baseline_mod, only: psb_comm_baseline_handle - use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle - use psb_comm_rma_mod, only: psb_comm_rma_handle #ifdef PSB_HAVE_CUDA use psb_cuda_mod #endif diff --git a/test/fileread/psb_cf_sample.f90 b/test/fileread/psb_cf_sample.f90 index 9fd965aea..426d03d22 100644 --- a/test/fileread/psb_cf_sample.f90 +++ b/test/fileread/psb_cf_sample.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/fileread/psb_df_sample.f90 b/test/fileread/psb_df_sample.f90 index b07e4ede5..f2c5257dc 100644 --- a/test/fileread/psb_df_sample.f90 +++ b/test/fileread/psb_df_sample.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/fileread/psb_sf_sample.f90 b/test/fileread/psb_sf_sample.f90 index 289df307c..5b5327567 100644 --- a/test/fileread/psb_sf_sample.f90 +++ b/test/fileread/psb_sf_sample.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/fileread/psb_zf_sample.f90 b/test/fileread/psb_zf_sample.f90 index b8385922d..91af6a425 100644 --- a/test/fileread/psb_zf_sample.f90 +++ b/test/fileread/psb_zf_sample.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/test/pdegen/psb_d_pde2d.F90 b/test/pdegen/psb_d_pde2d.F90 index 6eee70369..183b8d160 100644 --- a/test/pdegen/psb_d_pde2d.F90 +++ b/test/pdegen/psb_d_pde2d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -467,8 +467,8 @@ contains ! compute gridpoint coordinates call idx2ijk(ix,iy,glob_row,idim,idim) ! x, y coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah + x = (ix)*deltah + y = (iy)*deltah zt(k) = f_(x,y) ! internal point: build discretization diff --git a/test/pdegen/psb_d_pde3d.F90 b/test/pdegen/psb_d_pde3d.F90 index 27a5e53ea..b0e692565 100644 --- a/test/pdegen/psb_d_pde3d.F90 +++ b/test/pdegen/psb_d_pde3d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,9 +496,9 @@ contains ! compute gridpoint coordinates call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) ! x, y, z coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah - z = (iz-1)*deltah + x = (ix)*deltah + y = (iy)*deltah + z = (iz)*deltah zt(k) = f_(x,y,z) ! internal point: build discretization ! @@ -670,8 +670,6 @@ program psb_d_pde3d use psb_linsolve_mod use psb_util_mod use psb_d_pde3d_mod - use psb_comm_factory_mod - #if defined(PSB_OPENMP) use omp_lib #endif diff --git a/test/pdegen/psb_s_pde2d.F90 b/test/pdegen/psb_s_pde2d.F90 index b904f0ec0..a4d724cab 100644 --- a/test/pdegen/psb_s_pde2d.F90 +++ b/test/pdegen/psb_s_pde2d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -467,8 +467,8 @@ contains ! compute gridpoint coordinates call idx2ijk(ix,iy,glob_row,idim,idim) ! x, y coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah + x = (ix)*deltah + y = (iy)*deltah zt(k) = f_(x,y) ! internal point: build discretization diff --git a/test/pdegen/psb_s_pde3d.F90 b/test/pdegen/psb_s_pde3d.F90 index 3efcfd45d..87e631c72 100644 --- a/test/pdegen/psb_s_pde3d.F90 +++ b/test/pdegen/psb_s_pde3d.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED @@ -496,9 +496,9 @@ contains ! compute gridpoint coordinates call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) ! x, y, z coordinates - x = (ix-1)*deltah - y = (iy-1)*deltah - z = (iz-1)*deltah + x = (ix)*deltah + y = (iy)*deltah + z = (iz)*deltah zt(k) = f_(x,y,z) ! internal point: build discretization ! diff --git a/util/psb_c_mat_dist_impl.f90 b/util/psb_c_mat_dist_impl.f90 index b4b4c13e4..96ea70099 100644 --- a/util/psb_c_mat_dist_impl.f90 +++ b/util/psb_c_mat_dist_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_mat_dist_mod.f90 b/util/psb_c_mat_dist_mod.f90 index c0fa00317..bc67afefa 100644 --- a/util/psb_c_mat_dist_mod.f90 +++ b/util/psb_c_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_renum_impl.F90 b/util/psb_c_renum_impl.F90 index 9b342d6bf..2cb3ef449 100644 --- a/util/psb_c_renum_impl.F90 +++ b/util/psb_c_renum_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_c_renum_mod.f90 b/util/psb_c_renum_mod.f90 index 113354843..3a79f0c63 100644 --- a/util/psb_c_renum_mod.f90 +++ b/util/psb_c_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_mat_dist_impl.f90 b/util/psb_d_mat_dist_impl.f90 index 0b0db2cd0..5e172b249 100644 --- a/util/psb_d_mat_dist_impl.f90 +++ b/util/psb_d_mat_dist_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_mat_dist_mod.f90 b/util/psb_d_mat_dist_mod.f90 index 978c62dd8..846cc26c6 100644 --- a/util/psb_d_mat_dist_mod.f90 +++ b/util/psb_d_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_renum_impl.F90 b/util/psb_d_renum_impl.F90 index 08999fc94..03e2458ae 100644 --- a/util/psb_d_renum_impl.F90 +++ b/util/psb_d_renum_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_d_renum_mod.f90 b/util/psb_d_renum_mod.f90 index 8e4b4e03e..22c5d868f 100644 --- a/util/psb_d_renum_mod.f90 +++ b/util/psb_d_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_mat_dist_impl.f90 b/util/psb_s_mat_dist_impl.f90 index 941906a86..9737b3c65 100644 --- a/util/psb_s_mat_dist_impl.f90 +++ b/util/psb_s_mat_dist_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_mat_dist_mod.f90 b/util/psb_s_mat_dist_mod.f90 index 9cb48058a..427298287 100644 --- a/util/psb_s_mat_dist_mod.f90 +++ b/util/psb_s_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_renum_impl.F90 b/util/psb_s_renum_impl.F90 index f60e33a87..1811ea1bd 100644 --- a/util/psb_s_renum_impl.F90 +++ b/util/psb_s_renum_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_s_renum_mod.f90 b/util/psb_s_renum_mod.f90 index 1e048df53..05a2ceba3 100644 --- a/util/psb_s_renum_mod.f90 +++ b/util/psb_s_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_mat_dist_impl.f90 b/util/psb_z_mat_dist_impl.f90 index e96f50b34..f8acd84fb 100644 --- a/util/psb_z_mat_dist_impl.f90 +++ b/util/psb_z_mat_dist_impl.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_mat_dist_mod.f90 b/util/psb_z_mat_dist_mod.f90 index 3be4f9471..3322a3448 100644 --- a/util/psb_z_mat_dist_mod.f90 +++ b/util/psb_z_mat_dist_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_renum_impl.F90 b/util/psb_z_renum_impl.F90 index ac6517fec..624bacd99 100644 --- a/util/psb_z_renum_impl.F90 +++ b/util/psb_z_renum_impl.F90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/util/psb_z_renum_mod.f90 b/util/psb_z_renum_mod.f90 index 0bb56c355..c91cbe4a1 100644 --- a/util/psb_z_renum_mod.f90 +++ b/util/psb_z_renum_mod.f90 @@ -14,7 +14,7 @@ ! documentation and/or other materials provided with the distribution. ! 3. The name of the PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this -! software without specific written permission. +! software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED From 2c65c505934ed5a5bf961fc1db70de04abb2b839 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Wed, 27 May 2026 15:24:43 +0200 Subject: [PATCH 173/175] [ADD] Added single point of comm_scheme selection on descriptor --- base/comm/internals/psi_cswapdata.F90 | 56 ++++++++++--------- base/comm/internals/psi_cswaptran.F90 | 4 +- base/comm/internals/psi_dswapdata.F90 | 56 ++++++++++--------- base/comm/internals/psi_dswaptran.F90 | 4 +- base/comm/internals/psi_iswapdata.F90 | 56 ++++++++++--------- base/comm/internals/psi_iswaptran.F90 | 4 +- base/comm/internals/psi_lswapdata.F90 | 56 ++++++++++--------- base/comm/internals/psi_lswaptran.F90 | 4 +- base/comm/internals/psi_sswapdata.F90 | 56 ++++++++++--------- base/comm/internals/psi_sswaptran.F90 | 4 +- base/comm/internals/psi_zswapdata.F90 | 56 ++++++++++--------- base/comm/internals/psi_zswaptran.F90 | 4 +- .../psb_comm_neighbor_impl_mod.F90 | 24 ++++++++ base/modules/desc/psb_desc_mod.F90 | 15 ++++- base/psblas/psb_dspmm.f90 | 12 ++-- base/tools/psb_dspasb.f90 | 39 ++++++++++++- test/comm/cg/psb_comm_cg_test.F90 | 27 ++++++++- 17 files changed, 304 insertions(+), 173 deletions(-) diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index 72b97a987..f11f9b9e4 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -118,11 +118,14 @@ contains ! error handling variables integer(psb_ipk_) :: err_act character(len=30) :: name + logical :: debug info = psb_success_ name = 'psi_cswapdata_vect' call psb_erractionsave(err_act) + debug = .false. + ctxt = desc_a%get_context() call psb_info(ctxt,my_rank,np) @@ -159,7 +162,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -173,7 +176,9 @@ contains goto 9999 end if - + if(debug .eqv. .true.) then + write(0,'(a,i0,a,i0)') 'DBG_DISPATCH comm_type=',y%comm_handle%comm_type,' desc_a%comm_type=',desc_a%comm_type + endif select case(y%comm_handle%comm_type) case(psb_comm_isend_irecv_) call psi_cswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) @@ -620,15 +625,15 @@ contains if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & n*neighbor_comm_handle%send_counts, & - & n*neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & + & y%combuf(1), & ! send buffer (baseline/positional layout) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional displacements (match gth layout) + & psb_mpi_r_spk_, & + & y%combuf(1), & ! recv buffer (baseline/positional layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional displacements (match sct layout) + & psb_mpi_r_spk_, & + & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -756,6 +761,7 @@ contains integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ + debug = .false. name = 'psi_cswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) call psb_info(ctxt,my_rank,np) @@ -825,12 +831,12 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - else if (size(y%combuf) < buffer_size) then + else if (size(y%combuf) < ione*size(comm_indexes%v)) then if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -840,7 +846,7 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 @@ -882,16 +888,16 @@ contains if (buffer_size > 0) then if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' call mpi_neighbor_alltoallv_init( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & mpi_info_null, & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -1559,7 +1565,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index ca390eccd..a030bbe17 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -157,7 +157,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -745,7 +745,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 922bff293..e2516df29 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -118,11 +118,14 @@ contains ! error handling variables integer(psb_ipk_) :: err_act character(len=30) :: name + logical :: debug info = psb_success_ name = 'psi_dswapdata_vect' call psb_erractionsave(err_act) + debug = .false. + ctxt = desc_a%get_context() call psb_info(ctxt,my_rank,np) @@ -159,7 +162,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -173,7 +176,9 @@ contains goto 9999 end if - + if(debug .eqv. .true.) then + write(0,'(a,i0,a,i0)') 'DBG_DISPATCH comm_type=',y%comm_handle%comm_type,' desc_a%comm_type=',desc_a%comm_type + endif select case(y%comm_handle%comm_type) case(psb_comm_isend_irecv_) call psi_dswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) @@ -620,15 +625,15 @@ contains if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & n*neighbor_comm_handle%send_counts, & - & n*neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & + & y%combuf(1), & ! send buffer (baseline/positional layout) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional displacements (match gth layout) + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline/positional layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional displacements (match sct layout) + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -756,6 +761,7 @@ contains integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ + debug = .false. name = 'psi_dswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) call psb_info(ctxt,my_rank,np) @@ -825,12 +831,12 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - else if (size(y%combuf) < buffer_size) then + else if (size(y%combuf) < ione*size(comm_indexes%v)) then if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -840,7 +846,7 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 @@ -882,16 +888,16 @@ contains if (buffer_size > 0) then if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' call mpi_neighbor_alltoallv_init( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & mpi_info_null, & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -1559,7 +1565,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index f16a944fa..6046591b9 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -157,7 +157,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -745,7 +745,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index 43cd54c40..454cc9917 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -118,11 +118,14 @@ contains ! error handling variables integer(psb_ipk_) :: err_act character(len=30) :: name + logical :: debug info = psb_success_ name = 'psi_iswapdata_vect' call psb_erractionsave(err_act) + debug = .false. + ctxt = desc_a%get_context() call psb_info(ctxt,my_rank,np) @@ -159,7 +162,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -173,7 +176,9 @@ contains goto 9999 end if - + if(debug .eqv. .true.) then + write(0,'(a,i0,a,i0)') 'DBG_DISPATCH comm_type=',y%comm_handle%comm_type,' desc_a%comm_type=',desc_a%comm_type + endif select case(y%comm_handle%comm_type) case(psb_comm_isend_irecv_) call psi_iswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) @@ -620,15 +625,15 @@ contains if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & n*neighbor_comm_handle%send_counts, & - & n*neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & + & y%combuf(1), & ! send buffer (baseline/positional layout) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional displacements (match gth layout) + & psb_mpi_ipk_, & + & y%combuf(1), & ! recv buffer (baseline/positional layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional displacements (match sct layout) + & psb_mpi_ipk_, & + & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -756,6 +761,7 @@ contains integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ + debug = .false. name = 'psi_iswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) call psb_info(ctxt,my_rank,np) @@ -825,12 +831,12 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - else if (size(y%combuf) < buffer_size) then + else if (size(y%combuf) < ione*size(comm_indexes%v)) then if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -840,7 +846,7 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 @@ -882,16 +888,16 @@ contains if (buffer_size > 0) then if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' call mpi_neighbor_alltoallv_init( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & mpi_info_null, & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -1559,7 +1565,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index 4b7f7ffb7..d99c7ca00 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -157,7 +157,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -745,7 +745,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index d5b6efed7..bbc689468 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -118,11 +118,14 @@ contains ! error handling variables integer(psb_ipk_) :: err_act character(len=30) :: name + logical :: debug info = psb_success_ name = 'psi_lswapdata_vect' call psb_erractionsave(err_act) + debug = .false. + ctxt = desc_a%get_context() call psb_info(ctxt,my_rank,np) @@ -159,7 +162,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -173,7 +176,9 @@ contains goto 9999 end if - + if(debug .eqv. .true.) then + write(0,'(a,i0,a,i0)') 'DBG_DISPATCH comm_type=',y%comm_handle%comm_type,' desc_a%comm_type=',desc_a%comm_type + endif select case(y%comm_handle%comm_type) case(psb_comm_isend_irecv_) call psi_lswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) @@ -620,15 +625,15 @@ contains if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & n*neighbor_comm_handle%send_counts, & - & n*neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & + & y%combuf(1), & ! send buffer (baseline/positional layout) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional displacements (match gth layout) + & psb_mpi_lpk_, & + & y%combuf(1), & ! recv buffer (baseline/positional layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional displacements (match sct layout) + & psb_mpi_lpk_, & + & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -756,6 +761,7 @@ contains integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ + debug = .false. name = 'psi_lswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) call psb_info(ctxt,my_rank,np) @@ -825,12 +831,12 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - else if (size(y%combuf) < buffer_size) then + else if (size(y%combuf) < ione*size(comm_indexes%v)) then if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -840,7 +846,7 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 @@ -882,16 +888,16 @@ contains if (buffer_size > 0) then if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' call mpi_neighbor_alltoallv_init( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & mpi_info_null, & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -1559,7 +1565,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index 638dadf3a..818dedaf8 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -157,7 +157,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -745,7 +745,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index d5e54af42..015506959 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -118,11 +118,14 @@ contains ! error handling variables integer(psb_ipk_) :: err_act character(len=30) :: name + logical :: debug info = psb_success_ name = 'psi_sswapdata_vect' call psb_erractionsave(err_act) + debug = .false. + ctxt = desc_a%get_context() call psb_info(ctxt,my_rank,np) @@ -159,7 +162,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -173,7 +176,9 @@ contains goto 9999 end if - + if(debug .eqv. .true.) then + write(0,'(a,i0,a,i0)') 'DBG_DISPATCH comm_type=',y%comm_handle%comm_type,' desc_a%comm_type=',desc_a%comm_type + endif select case(y%comm_handle%comm_type) case(psb_comm_isend_irecv_) call psi_sswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) @@ -620,15 +625,15 @@ contains if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & n*neighbor_comm_handle%send_counts, & - & n*neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & + & y%combuf(1), & ! send buffer (baseline/positional layout) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional displacements (match gth layout) + & psb_mpi_r_spk_, & + & y%combuf(1), & ! recv buffer (baseline/positional layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional displacements (match sct layout) + & psb_mpi_r_spk_, & + & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -756,6 +761,7 @@ contains integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ + debug = .false. name = 'psi_sswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) call psb_info(ctxt,my_rank,np) @@ -825,12 +831,12 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - else if (size(y%combuf) < buffer_size) then + else if (size(y%combuf) < ione*size(comm_indexes%v)) then if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -840,7 +846,7 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 @@ -882,16 +888,16 @@ contains if (buffer_size > 0) then if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' call mpi_neighbor_alltoallv_init( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & mpi_info_null, & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -1559,7 +1565,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index 8b47a2988..8c7f8e828 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -157,7 +157,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -745,7 +745,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index 5223ec5c8..62365a52f 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -118,11 +118,14 @@ contains ! error handling variables integer(psb_ipk_) :: err_act character(len=30) :: name + logical :: debug info = psb_success_ name = 'psi_zswapdata_vect' call psb_erractionsave(err_act) + debug = .false. + ctxt = desc_a%get_context() call psb_info(ctxt,my_rank,np) @@ -159,7 +162,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -173,7 +176,9 @@ contains goto 9999 end if - + if(debug .eqv. .true.) then + write(0,'(a,i0,a,i0)') 'DBG_DISPATCH comm_type=',y%comm_handle%comm_type,' desc_a%comm_type=',desc_a%comm_type + endif select case(y%comm_handle%comm_type) case(psb_comm_isend_irecv_) call psi_zswap_baseline_vect(ctxt,swap_status,beta,y,comm_indexes,num_neighbors,total_send,total_recv,y%comm_handle,info) @@ -620,15 +625,15 @@ contains if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Ineighbor_alltoallv' if (buffer_size > 0) then call mpi_ineighbor_alltoallv( & - & y%combuf(1), & ! send buffer - & n*neighbor_comm_handle%send_counts, & - & n*neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & + & y%combuf(1), & ! send buffer (baseline/positional layout) + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional displacements (match gth layout) + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline/positional layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional displacements (match sct layout) + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -756,6 +761,7 @@ contains integer(psb_ipk_) :: i, nesd, nerv, snd_pt, rcv_pt, pnti, n info = psb_success_ + debug = .false. name = 'psi_zswap_neighbor_persistent_topology_vect' call psb_erractionsave(err_act) call psb_info(ctxt,my_rank,np) @@ -825,12 +831,12 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 end if - else if (size(y%combuf) < buffer_size) then + else if (size(y%combuf) < ione*size(comm_indexes%v)) then if (neighbor_comm_handle%persistent_request_ready) then if (neighbor_comm_handle%persistent_request /= mpi_request_null) then call mpi_request_free(neighbor_comm_handle%persistent_request, iret) @@ -840,7 +846,7 @@ contains neighbor_comm_handle%persistent_in_flight = .false. neighbor_comm_handle%persistent_buffer_size = 0 end if - call y%new_buffer(buffer_size, info) + call y%new_buffer(ione*size(comm_indexes%v), info) if (info /= 0) then call psb_errpush(psb_err_alloc_dealloc_, name) goto 9999 @@ -882,16 +888,16 @@ contains if (buffer_size > 0) then if (debug) write(*,*) my_rank,' nbr_vect: posting MPI_Neighbor_alltoallv_init' call mpi_neighbor_alltoallv_init( & - & y%combuf(1), & ! send buffer - & neighbor_comm_handle%send_counts, & - & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & - & y%combuf(1), & ! recv buffer (baseline layout) - & neighbor_comm_handle%recv_counts, & - & neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & - & neighbor_comm_handle%graph_comm, & - & mpi_info_null, & + & y%combuf(1), & ! send buffer + & neighbor_comm_handle%send_counts, & + & neighbor_comm_handle%send_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & y%combuf(1), & ! recv buffer (baseline layout) + & neighbor_comm_handle%recv_counts, & + & neighbor_comm_handle%recv_displs_v, & ! positional (baseline layout) + & psb_mpi_r_dpk_, & + & neighbor_comm_handle%graph_comm, & + & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) if (iret /= mpi_success) then info = psb_err_mpi_error_ @@ -1559,7 +1565,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/comm/internals/psi_zswaptran.F90 b/base/comm/internals/psi_zswaptran.F90 index d262b5c2d..38e821230 100644 --- a/base/comm/internals/psi_zswaptran.F90 +++ b/base/comm/internals/psi_zswaptran.F90 @@ -157,7 +157,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 @@ -745,7 +745,7 @@ contains end if if (.not. allocated(y%comm_handle)) then - call psb_comm_set(psb_comm_isend_irecv_, y%comm_handle, info) + call psb_comm_set(desc_a%comm_type, y%comm_handle, info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_, name, a_err='init comm default baseline') goto 9999 diff --git a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 index 742dc89c4..4ae0f9f73 100644 --- a/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 +++ b/base/modules/comm/comm_schemes/psb_comm_neighbor_impl_mod.F90 @@ -19,6 +19,7 @@ module psb_comm_neighbor_impl_mod integer(psb_ipk_) :: num_neighbors = 0 integer(psb_mpk_), allocatable :: send_counts(:), recv_counts(:) integer(psb_mpk_), allocatable :: send_displs(:), recv_displs(:) + integer(psb_mpk_), allocatable :: send_displs_v(:), recv_displs_v(:) integer(psb_ipk_), allocatable :: send_indexes(:) integer(psb_ipk_), allocatable :: recv_indexes(:) integer(psb_ipk_) :: total_send = 0 @@ -169,6 +170,20 @@ contains goto 9999 end if + allocate(topology%send_displs_v(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Send vect displacements allocation failed') + goto 9999 + end if + + allocate(topology%recv_displs_v(num_neighbors), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + call psb_errpush(info, name, a_err='Receive vect displacements allocation failed') + goto 9999 + end if + ! ----------------------------------------------------------- ! Allocate the gather/scatter index arrays @@ -219,6 +234,11 @@ contains topology%recv_counts(i) = int(num_elem_recv, psb_mpk_) topology%send_displs(i) = int(send_offset, psb_mpk_) topology%recv_displs(i) = int(recv_offset, psb_mpk_) + ! Positional displacements: match the combuf layout used by gthzbuf/sctb_buf + ! snd_pt = 1 + position + num_elem_recv + psb_n_elem_send_ → displs = snd_pt - 1 + ! rcv_pt = 1 + position + psb_n_elem_recv_ → displs = rcv_pt - 1 + topology%send_displs_v(i) = int(position + num_elem_recv + psb_n_elem_send_, psb_mpk_) + topology%recv_displs_v(i) = int(position + psb_n_elem_recv_, psb_mpk_) ! Fill recv_indexes from halo_index(position+2 .. position+1+nerv) do k = 1, num_elem_recv @@ -330,6 +350,8 @@ contains if (allocated(this%recv_counts)) deallocate(this%recv_counts) if (allocated(this%send_displs)) deallocate(this%send_displs) if (allocated(this%recv_displs)) deallocate(this%recv_displs) + if (allocated(this%send_displs_v)) deallocate(this%send_displs_v) + if (allocated(this%recv_displs_v)) deallocate(this%recv_displs_v) if (allocated(this%send_indexes)) deallocate(this%send_indexes) if (allocated(this%recv_indexes)) deallocate(this%recv_indexes) @@ -357,6 +379,8 @@ contains if (allocated(this%recv_counts)) val = val + psb_sizeof_ip * size(this%recv_counts) if (allocated(this%send_displs)) val = val + psb_sizeof_ip * size(this%send_displs) if (allocated(this%recv_displs)) val = val + psb_sizeof_ip * size(this%recv_displs) + if (allocated(this%send_displs_v)) val = val + psb_sizeof_ip * size(this%send_displs_v) + if (allocated(this%recv_displs_v)) val = val + psb_sizeof_ip * size(this%recv_displs_v) if (allocated(this%send_indexes)) val = val + psb_sizeof_ip * size(this%send_indexes) if (allocated(this%recv_indexes)) val = val + psb_sizeof_ip * size(this%recv_indexes) diff --git a/base/modules/desc/psb_desc_mod.F90 b/base/modules/desc/psb_desc_mod.F90 index 86cdf351c..954277917 100644 --- a/base/modules/desc/psb_desc_mod.F90 +++ b/base/modules/desc/psb_desc_mod.F90 @@ -40,6 +40,7 @@ module psb_desc_mod use psb_desc_const_mod use psb_indx_map_mod use psb_i_vect_mod + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_ implicit none @@ -216,6 +217,7 @@ module psb_desc_mod integer(psb_ipk_), allocatable :: lprm(:) type(psb_desc_type), pointer :: base_desc => null() integer(psb_ipk_), allocatable :: idx_space(:) + integer(psb_ipk_) :: comm_type = psb_comm_isend_irecv_ contains procedure, pass(desc) :: is_ok => psb_is_ok_desc procedure, pass(desc) :: is_valid => psb_is_valid_desc @@ -268,7 +270,7 @@ module psb_desc_mod procedure, pass(desc) :: g2lv2_ins => cd_g2lv2_ins generic, public :: g2l_ins => g2ls2_ins, g2lv2_ins generic, public :: g2lip_ins => g2ls1_ins, g2lv1_ins - + procedure, pass(desc) :: set_comm_scheme => psb_desc_set_comm_scheme end type psb_desc_type @@ -312,7 +314,16 @@ module psb_desc_mod integer(psb_lpk_), private, save :: cd_hash_threshold = psb_default_hash_threshold integer(psb_ipk_), private, save :: sp_a2av_alg = psb_sp_a2av_smpl_triad_ -contains +contains + + subroutine psb_desc_set_comm_scheme(desc, comm_type, info) + implicit none + class(psb_desc_type), intent(inout) :: desc + integer(psb_ipk_), intent(in) :: comm_type + integer(psb_ipk_), intent(out) :: info + info = psb_success_ + desc%comm_type = comm_type + end subroutine psb_desc_set_comm_scheme function psb_m_get_sp_a2av_alg() result(val) implicit none diff --git a/base/psblas/psb_dspmm.f90 b/base/psblas/psb_dspmm.f90 index 84dc5f2c7..e29d23fb1 100644 --- a/base/psblas/psb_dspmm.f90 +++ b/base/psblas/psb_dspmm.f90 @@ -172,11 +172,8 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& !if (me==0) write(0,*) 'going for overlap ',a%ad%get_fmt(),' ',a%and%get_fmt() if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase1) - if (doswap_) then - call psi_swapdata(psb_comm_status_start_, dzero, x%v, desc_a, info, data=psb_comm_halo_) - else - call psi_swapdata(psb_comm_status_sync_, dzero, x%v, desc_a, info, data=psb_comm_halo_) - end if + if (doswap_) call psi_swapdata(psb_swap_send_,& + & dzero,x%v,desc_a,info,data=psb_comm_halo_) if (do_timings) call psb_toc(mv_phase1) if (do_timings) call psb_tic(mv_phase2) call a%ad%spmm(alpha,x%v,beta,y%v,info) @@ -196,7 +193,10 @@ subroutine psb_dspmv_vect(alpha,a,x,beta,y,desc_a,info,& if (do_timings) call psb_barrier(ctxt) if (do_timings) call psb_tic(mv_phase11) - call psi_swapdata(psb_comm_status_sync_, dzero, x%v, desc_a, info, data=psb_comm_halo_) + if (doswap_) then + call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& + & dzero,x%v,desc_a,info,data=psb_comm_halo_) + end if if (do_timings) call psb_toc(mv_phase11) if (do_timings) call psb_tic(mv_phase12) call psb_csmm(alpha,a,x,beta,y,info) diff --git a/base/tools/psb_dspasb.f90 b/base/tools/psb_dspasb.f90 index f8e26a2a0..a68073051 100644 --- a/base/tools/psb_dspasb.f90 +++ b/base/tools/psb_dspasb.f90 @@ -184,7 +184,44 @@ subroutine psb_dspasb(a,desc_a, info, afmt, upd, mold, dupl, bld_and) end if if (bld_and_) then - call a%split_nd(n_row,n_col,info) +!!$ allocate(a%ad,mold=a%a) +!!$ allocate(a%and,mold=a%a)o +!!$ call a%split_nd(n_row,n_col,info) +!!$ block +!!$ character(len=1024) :: fname +!!$ type(psb_d_coo_sparse_mat) :: acoo +!!$ type(psb_d_csr_sparse_mat), allocatable :: aclip +!!$ type(psb_d_ecsr_sparse_mat), allocatable :: andclip +!!$ logical, parameter :: use_ecsr=.true. +!!$ allocate(aclip) +!!$ call a%a%csclip(acoo,info,jmax=n_row,rscale=.false.,cscale=.false.) +!!$ allocate(a%ad,mold=a%a) +!!$ call a%ad%mv_from_coo(acoo,info) +!!$ call a%a%csclip(acoo,info,jmin=n_row+1,jmax=n_col,rscale=.false.,cscale=.false.) +!!$ if (use_ecsr) then +!!$ allocate(andclip) +!!$ call andclip%mv_from_coo(acoo,info) +!!$ call move_alloc(andclip,a%and) +!!$ else +!!$ allocate(a%and,mold=a%a) +!!$ call a%and%mv_from_coo(acoo,info) +!!$ end if +!!$ if (.false.) then +!!$ write(fname,'(a,i2.2,a)') 'adclip_',me,'.mtx' +!!$ open(25,file=fname) +!!$ call a%ad%print(25) +!!$ close(25) +!!$ write(fname,'(a,i2.2,a)') 'andclip_',me,'.mtx' +!!$ open(25,file=fname) +!!$ call a%and%print(25) +!!$ close(25) +!!$ !call andclip%set_cols(n_col) +!!$ write(*,*) me,' ',trim(name),' ad ',& +!!$ &a%ad%get_nrows(),a%ad%get_ncols(),n_row,n_col +!!$ write(*,*) me,' ',trim(name),' and ',& +!!$ &a%and%get_nrows(),a%and%get_ncols(),n_row,n_col +!!$ end if +!!$ end block else if (allocated(a%ad)) deallocate(a%ad) if (allocated(a%and)) deallocate(a%and) diff --git a/test/comm/cg/psb_comm_cg_test.F90 b/test/comm/cg/psb_comm_cg_test.F90 index 38652f823..345728390 100644 --- a/test/comm/cg/psb_comm_cg_test.F90 +++ b/test/comm/cg/psb_comm_cg_test.F90 @@ -7,7 +7,8 @@ program psb_comm_cg_test use psb_prec_mod use psb_linsolve_mod use psb_comm_factory_mod - use psb_comm_neighbor_impl_mod, only: psb_comm_neighbor_handle + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_ use, intrinsic :: ieee_arithmetic implicit none @@ -205,7 +206,14 @@ program psb_comm_cg_test do scheme_idx = 1, n_schemes do rep = 1, nrep t_start = psb_wtime() - call psb_comm_set(scheme_type(scheme_idx),x%v%comm_handle,info) + ! Set default scheme on the descriptor: all vectors that lazy-init during + ! this solve (including internal CG vectors r, p, q, z) will use this scheme. + call desc_a%set_comm_scheme(scheme_type(scheme_idx), info) + if (info /= psb_success_) goto 9999 + ! Free x comm_handle so it also re-initializes from desc_a%comm_type + ! (it may already be allocated from a previous rep). + if (allocated(x%v%comm_handle)) call psb_comm_free(x%v%comm_handle, info) + if (info /= psb_success_) goto 9999 comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start call psb_geaxpby(dzero,b,dzero,x,desc_a,info) @@ -257,6 +265,21 @@ program psb_comm_cg_test if (info /= psb_success_) goto 9999 + ! Verify x used the descriptor scheme (lazy init should have fired during CG). + if (allocated(x%v%comm_handle)) then + if (x%v%comm_handle%comm_type /= scheme_type(scheme_idx)) then + if (my_rank == psb_root_) & + write(psb_err_unit,'("SCHEME MISMATCH rank=",i0," expected=",i0," got=",i0)') & + my_rank, scheme_type(scheme_idx), x%v%comm_handle%comm_type + info = psb_err_internal_error_ + goto 9999 + else + if (my_rank == psb_root_ .and. rep == 1) & + write(psb_out_unit,'(" [OK] x comm_handle matches scheme: ",a)') & + trim(scheme_name(scheme_idx)) + end if + end if + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) if (info /= psb_success_) goto 9999 From e88e3d3008b815a5670b04a1bbe03d240ffd8a10 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Wed, 3 Jun 2026 11:47:15 +0200 Subject: [PATCH 174/175] [UPDATE] Added comm tests for all precisions and fixed spmm test in computational_routines --- base/comm/internals/psi_sswapdata.F90 | 42 +- test/comm/cg/psb_c_comm_cg_test.F90 | 974 ++ test/comm/cg/psb_d_comm_cg_test.F90 | 974 ++ test/comm/cg/psb_s_comm_cg_test.F90 | 974 ++ test/comm/cg/psb_z_comm_cg_test.F90 | 974 ++ test/comm/spmv/psb_c_spmv_test.f90 | 917 ++ test/comm/spmv/psb_d_spmv_test.f90 | 917 ++ test/comm/spmv/psb_s_spmv_test.f90 | 917 ++ test/comm/spmv/psb_z_spmv_test.f90 | 917 ++ test/comm/swapdata/psb_c_comm_test.F90 | 736 ++ test/comm/swapdata/psb_comm_test_sbatch.sh | 62 - test/comm/swapdata/psb_d_comm_test.F90 | 736 ++ test/comm/swapdata/psb_s_comm_test.F90 | 736 ++ test/comm/swapdata/psb_z_comm_test.F90 | 736 ++ test/computational_routines/CMakeLists.txt | 1 + test/computational_routines/Makefile | 13 + test/computational_routines/README.md | 23 +- test/computational_routines/common/testlib.sh | 116 + test/computational_routines/geaxpby/README.md | 2 +- .../geaxpby/autotest.sh | 55 +- .../geaxpby/geaxpby.f90 | 34 +- .../geaxpby/logs/psblas_geaxpby_test.log | 1493 +++ .../geaxpby/psblas_geaxpby_test.log | 868 +- test/computational_routines/gedot/README.md | 2 +- test/computational_routines/gedot/autotest.sh | 55 +- test/computational_routines/gedot/gedot.f90 | 36 +- .../gedot/logs/psblas_gedot_test.log | 193 + .../gedot/psb_gedot_test.f90 | 4 +- .../gedot/psblas_gedot_test.log | 478 +- .../psblas_test_results.log | 9390 +++++++++++++++++ test/computational_routines/spmm/Makefile | 4 +- test/computational_routines/spmm/README.md | 4 +- test/computational_routines/spmm/autotest.sh | 41 + .../spmm/logs/psblas_spmm_test.log | 170 + .../spmm/psb_spmm_test.f90 | 99 +- test/computational_routines/spmm/spmm.f90 | 91 +- test/computational_routines/test.sh | 16 +- 37 files changed, 22872 insertions(+), 928 deletions(-) create mode 100644 test/comm/cg/psb_c_comm_cg_test.F90 create mode 100644 test/comm/cg/psb_d_comm_cg_test.F90 create mode 100644 test/comm/cg/psb_s_comm_cg_test.F90 create mode 100644 test/comm/cg/psb_z_comm_cg_test.F90 create mode 100644 test/comm/spmv/psb_c_spmv_test.f90 create mode 100644 test/comm/spmv/psb_d_spmv_test.f90 create mode 100644 test/comm/spmv/psb_s_spmv_test.f90 create mode 100644 test/comm/spmv/psb_z_spmv_test.f90 create mode 100644 test/comm/swapdata/psb_c_comm_test.F90 delete mode 100644 test/comm/swapdata/psb_comm_test_sbatch.sh create mode 100644 test/comm/swapdata/psb_d_comm_test.F90 create mode 100644 test/comm/swapdata/psb_s_comm_test.F90 create mode 100644 test/comm/swapdata/psb_z_comm_test.F90 create mode 100644 test/computational_routines/Makefile create mode 100644 test/computational_routines/common/testlib.sh create mode 100644 test/computational_routines/geaxpby/logs/psblas_geaxpby_test.log create mode 100644 test/computational_routines/gedot/logs/psblas_gedot_test.log create mode 100755 test/computational_routines/spmm/autotest.sh create mode 100644 test/computational_routines/spmm/logs/psblas_spmm_test.log diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index 015506959..4ccde00b5 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -254,7 +254,8 @@ contains integer(psb_mpk_), allocatable :: prcid(:) type(psb_comm_baseline_handle), pointer :: baseline_comm_handle integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& - & snd_pt, rcv_pt, pnti, n + & snd_pt, rcv_pt, pnti, n + integer(psb_ipk_) :: y_nrows, idx_min, idx_max logical :: do_send,do_recv logical, parameter :: usersend=.false. logical :: debug @@ -313,6 +314,7 @@ contains baseline_comm_handle%comid = mpi_request_null call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives + y_nrows = y%get_nrows() pnti = 1 do i=1, num_neighbors proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) @@ -325,7 +327,7 @@ contains if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),nerv,& - & psb_mpi_r_dpk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if pnti = pnti + nerv + nesd + 3 @@ -346,6 +348,15 @@ contains call psb_errpush(info,name,a_err='baseline gather metadata out of bounds') goto 9999 end if + if (nesd > 0) then + idx_min = minval(comm_indexes%v(idx_pt:idx_pt+nesd-1)) + idx_max = maxval(comm_indexes%v(idx_pt:idx_pt+nesd-1)) + if ((idx_min < 1) .or. (idx_max > y_nrows)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline gather index out of bounds') + goto 9999 + end if + end if if ((idx_pt < 1) .or. (nesd < 0) .or. (idx_pt+max(0,nesd)-1 > size(y%combuf))) then info = psb_err_internal_error_ call psb_errpush(info,name,a_err='baseline gather combuf bounds error') @@ -378,7 +389,7 @@ contains if ((nesd>0).and.(proc_to_comm /= my_rank)) then call mpi_isend(y%combuf(snd_pt),nesd,& - & psb_mpi_r_dpk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if @@ -459,6 +470,15 @@ contains call psb_errpush(info,name,a_err='baseline scatter metadata out of bounds') goto 9999 end if + if (nerv > 0) then + idx_min = minval(comm_indexes%v(idx_pt:idx_pt+nerv-1)) + idx_max = maxval(comm_indexes%v(idx_pt:idx_pt+nerv-1)) + if ((idx_min < 1) .or. (idx_max > y_nrows)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='baseline scatter index out of bounds') + goto 9999 + end if + end if if ((rcv_pt < 1) .or. (nerv < 0) .or. (rcv_pt+max(0,nerv)-1 > size(y%combuf))) then info = psb_err_internal_error_ call psb_errpush(info,name,a_err='baseline scatter combuf bounds error') @@ -891,11 +911,11 @@ contains & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & & neighbor_comm_handle%send_displs_v, & ! positional (baseline layout) - & psb_mpi_r_dpk_, & + & psb_mpi_r_spk_, & & y%combuf(1), & ! recv buffer (baseline layout) & neighbor_comm_handle%recv_counts, & & neighbor_comm_handle%recv_displs_v, & ! positional (baseline layout) - & psb_mpi_r_dpk_, & + & psb_mpi_r_spk_, & & neighbor_comm_handle%graph_comm, & & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) @@ -1737,7 +1757,7 @@ subroutine psi_sswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & if (debug) write(*,*) my_rank,'Posting receive from',prcid(i),rcv_pt p2ptag = psb_double_swap_tag call mpi_irecv(y%combuf(rcv_pt),n*nerv,& - & psb_mpi_r_dpk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag, icomm,baseline_comm_handle%comid(i,2),iret) end if rcv_pt = rcv_pt + n*nerv @@ -1782,7 +1802,7 @@ subroutine psi_sswap_baseline_multivect(ctxt,swap_status,beta,y,comm_indexes, & if ((nesd>0).and.(proc_to_comm /= my_rank)) then call mpi_isend(y%combuf(snd_pt),n*nesd,& - & psb_mpi_r_dpk_,prcid(i),& + & psb_mpi_r_spk_,prcid(i),& & p2ptag,icomm,baseline_comm_handle%comid(i,1),iret) end if @@ -2012,11 +2032,11 @@ subroutine psi_sswap_neighbor_topology_multivect(ctxt,swap_status,beta,y,comm_in & y%combuf(1), & ! send buffer & neighbor_comm_handle%send_counts, & & neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & + & psb_mpi_r_spk_, & & y%combuf(total_send_ + 1), & ! recv buffer & n*neighbor_comm_handle%recv_counts, & & n*neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & + & psb_mpi_r_spk_, & & neighbor_comm_handle%graph_comm, & & neighbor_comm_handle%comm_request, iret) if (iret /= mpi_success) then @@ -2233,11 +2253,11 @@ subroutine psi_sswap_neighbor_topology_multivect_persistent(ctxt,swap_status,bet & y%combuf(1), & ! send buffer & n*neighbor_comm_handle%send_counts, & & n*neighbor_comm_handle%send_displs, & - & psb_mpi_r_dpk_, & + & psb_mpi_r_spk_, & & y%combuf(total_send_ + 1), & ! recv buffer & n*neighbor_comm_handle%recv_counts, & & n*neighbor_comm_handle%recv_displs, & - & psb_mpi_r_dpk_, & + & psb_mpi_r_spk_, & & neighbor_comm_handle%graph_comm, & & mpi_info_null, & & neighbor_comm_handle%persistent_request, iret) diff --git a/test/comm/cg/psb_c_comm_cg_test.F90 b/test/comm/cg/psb_c_comm_cg_test.F90 new file mode 100644 index 000000000..22f92414b --- /dev/null +++ b/test/comm/cg/psb_c_comm_cg_test.F90 @@ -0,0 +1,974 @@ +program psb_c_comm_cg_test + use psb_base_mod + use psb_util_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + use psb_prec_mod + use psb_linsolve_mod + use psb_comm_factory_mod + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use, intrinsic :: ieee_arithmetic + + implicit none + + type(psb_ctxt_type) :: ctxt + type(psb_ctxt_type) :: desc_ctxt + type(psb_cspmat_type) :: a + type(psb_desc_type) :: desc_a + type(psb_c_vect_type) :: b, x + type(psb_cprec_type) :: prec +#ifdef PSB_HAVE_CUDA + type(psb_c_vect_cuda) :: vmold + type(psb_i_vect_cuda) :: imold + type(psb_c_cuda_hlg_sparse_mat), target :: ahlg + class(psb_c_base_sparse_mat), pointer :: agmold +#endif + + integer(psb_ipk_) :: info, my_rank, np + integer(psb_ipk_) :: desc_me, desc_np + integer(psb_ipk_) :: idim, itmax, itrace, istop, iter + integer(psb_ipk_) :: scheme_idx, prec_idx, rep, nrep, nwarm + integer(psb_ipk_), parameter :: n_schemes=5, n_precs=2 + integer(psb_ipk_), allocatable :: iter_count(:,:,:), solve_info(:,:,:) + integer(psb_ipk_) :: scheme_type(n_schemes) + real(psb_spk_) :: eps, err, t_start, t_elapsed + real(psb_spk_), allocatable :: prec_init_time(:,:,:), prec_bld_time(:,:,:) + real(psb_spk_), allocatable :: comm_set_time(:,:,:), krylov_time(:,:,:) + real(psb_spk_), allocatable :: setup_time(:,:,:), solve_time(:,:,:) + real(psb_spk_), allocatable :: total_time(:,:,:), final_error(:,:,:) + real(psb_spk_), allocatable :: krylov_it_time(:,:,:), total_it_time(:,:,:) + real(psb_spk_) :: iter_denom + real(psb_spk_) :: avg_t, std_t, med_t, p10_t, p90_t, min_t, max_t + character(len=25) :: scheme_name(n_schemes) + character(len=12) :: prec_type(n_precs) + character(len=20) :: prec_name(n_precs) + character(len=5) :: afmt + character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=16) :: gpu_arg + logical :: setup_done + logical :: use_gpu + logical :: use_external_matrix + + info = psb_success_ + afmt = 'CSR' + idim = 40 + itmax = 1000 + nrep = 5 + nwarm = 1 + ! Disable per-iteration tracing; avoids modulo-by-zero paths in some logging branches. + itrace = -1 + istop = 2 + eps = 1.0e-6_psb_spk_ + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_ , psb_comm_rma_pull_, psb_comm_rma_push_ /) + scheme_name(1) = 'isend_irecv' + scheme_name(2) = 'ineighbor_alltoallv' + scheme_name(3) = 'persistent_ineighbor_a2av' + scheme_name(4) = 'psb_comm_rma_pull_' + scheme_name(5) = 'psb_comm_rma_push_' + + prec_type(1) = 'NONE' + prec_type(2) = 'DIAG' + prec_name(1) = 'none' + prec_name(2) = 'diag' + + call get_command_argument(1,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) idim + if (info /= 0) then + idim = 40 + info = psb_success_ + end if + end if + call get_command_argument(2,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nrep + if ((info /= 0).or.(nrep <= 0)) then + nrep = 7 + info = psb_success_ + end if + end if + call get_command_argument(3,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nwarm + if ((info /= 0).or.(nwarm < 0)) then + nwarm = 1 + info = psb_success_ + end if + end if + call get_command_argument(4,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) itmax + if ((info /= 0).or.(itmax <= 0)) then + itmax = 1000 + info = psb_success_ + end if + end if + + call parse_gpu_arg(use_gpu, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid value for --gpu option. Use --gpu=TRUE or --gpu=FALSE")') + stop 1 + end if + call parse_matrix_arg(matrix_file, matrix_fmt, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid matrix options. Use --matrix= [--fmt=MM|HB]")') + stop 1 + end if + use_external_matrix = (len_trim(matrix_file) > 0) + ! call psb_set_debug_level(psb_debug_ext_) + + + ! call probe_ieee('before psb_init') + call psb_init(ctxt) +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#endif + ! call probe_ieee('after psb_init') + call clear_ieee_flags() + ! call probe_ieee('after clear_ieee_flags') + call psb_info(ctxt, my_rank, np) + +#ifndef PSB_HAVE_CUDA + if (use_gpu .and. my_rank == psb_root_) then + write(psb_out_unit,'("Warning: --gpu=TRUE requested but this executable was built without CUDA support. Running on CPU.")') + end if + use_gpu = .false. +#endif + + allocate(setup_time(n_precs,n_schemes,nrep), solve_time(n_precs,n_schemes,nrep), & + & total_time(n_precs,n_schemes,nrep), final_error(n_precs,n_schemes,nrep), & + & krylov_it_time(n_precs,n_schemes,nrep), total_it_time(n_precs,n_schemes,nrep), & + & iter_count(n_precs,n_schemes,nrep), solve_info(n_precs,n_schemes,nrep), & + & prec_init_time(n_precs,n_schemes,nrep), prec_bld_time(n_precs,n_schemes,nrep), & + & comm_set_time(n_precs,n_schemes,nrep), krylov_time(n_precs,n_schemes,nrep), stat=info) + if (info /= psb_success_) stop 1 + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the comm/cg test program' + if (use_external_matrix) then + write(psb_out_unit,'("Input matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'("Input format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim + end if + write(psb_out_unit,'("Number of processors : ",i0)') np + write(psb_out_unit,'("Iterative method : CG")') + write(psb_out_unit,'("Preconditioners : NONE, DIAG")') + write(psb_out_unit,'("Max iterations (CG) : ",i0)') itmax + write(psb_out_unit,'("Repetitions : ",i0)') nrep + write(psb_out_unit,'("Warmup solves : ",i0)') nwarm + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Usage: ./psb_c_comm_cg_test [idim] [nrep] [nwarm] [itmax] ",& + &"[--gpu=TRUE|FALSE] [--matrix=] [--fmt=MM|HB]")') + write(psb_out_unit,'(" ")') + end if + + call psb_barrier(ctxt) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, b, x, desc_a, afmt, info) + else + ! call probe_ieee('before psb_c_gen_pde3d') + call psb_c_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) + ! call probe_ieee('after psb_c_gen_pde3d') + end if + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + agmold => ahlg + call a%cscnv(info,mold=agmold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=imold) + if (info /= psb_success_) goto 9999 + call x%cnv(mold=vmold) + if (info /= psb_success_) goto 9999 + call b%cnv(mold=vmold) + if (info /= psb_success_) goto 9999 + end if +#endif + + do prec_idx = 1, n_precs + do scheme_idx = 1, n_schemes + do rep = 1, nrep + t_start = psb_wtime() + ! Set default scheme on the descriptor: all vectors that lazy-init during + ! this solve (including internal CG vectors r, p, q, z) will use this scheme. + call desc_a%set_comm_scheme(scheme_type(scheme_idx), info) + if (info /= psb_success_) goto 9999 + ! Free x comm_handle so it also re-initializes from desc_a%comm_type + ! (it may already be allocated from a previous rep). + if (allocated(x%v%comm_handle)) call psb_comm_free(x%v%comm_handle, info) + if (info /= psb_success_) goto 9999 + comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + + call psb_geaxpby(czero,b,czero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + + t_start = psb_wtime() + call prec%init(ctxt,trim(prec_type(prec_idx)),info) + if (info /= psb_success_) goto 9999 + + prec_init_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_init_time(prec_idx,scheme_idx,rep)) + + t_start = psb_wtime() + call prec%build(a,desc_a,info) + if (info /= psb_success_) goto 9999 + prec_bld_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_bld_time(prec_idx,scheme_idx,rep)) + + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object not allocated after build' + goto 9999 + end if + + + call psb_amx(ctxt,comm_set_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' + goto 9999 + end if + + setup_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,rep) + & + & prec_bld_time(prec_idx,scheme_idx,rep) + comm_set_time(prec_idx,scheme_idx,rep) + + call psb_geaxpby(czero,b,czero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t_start = psb_wtime() + call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& + & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) + krylov_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,krylov_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + + ! Verify x used the descriptor scheme (lazy init should have fired during CG). + if (allocated(x%v%comm_handle)) then + if (x%v%comm_handle%comm_type /= scheme_type(scheme_idx)) then + if (my_rank == psb_root_) & + write(psb_err_unit,'("SCHEME MISMATCH rank=",i0," expected=",i0," got=",i0)') & + my_rank, scheme_type(scheme_idx), x%v%comm_handle%comm_type + info = psb_err_internal_error_ + goto 9999 + else + if (my_rank == psb_root_ .and. rep == 1) & + write(psb_out_unit,'(" [OK] x comm_handle matches scheme: ",a)') & + trim(scheme_name(scheme_idx)) + end if + end if + + call psb_geaxpby(czero,b,czero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost before psb_krylov' + goto 9999 + end if + + call prec%free(info) + if (info /= psb_success_) goto 9999 + + solve_time(prec_idx,scheme_idx,rep) = krylov_time(prec_idx,scheme_idx,rep) + total_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,rep) + & + & solve_time(prec_idx,scheme_idx,rep) + iter_count(prec_idx,scheme_idx,rep) = iter + iter_denom = real(max(iter,1_psb_ipk_),psb_spk_) + krylov_it_time(prec_idx,scheme_idx,rep) = solve_time(prec_idx,scheme_idx,rep)/iter_denom + total_it_time(prec_idx,scheme_idx,rep) = total_time(prec_idx,scheme_idx,rep)/iter_denom + final_error(prec_idx,scheme_idx,rep) = err + solve_info(prec_idx,scheme_idx,rep) = info + + if (info /= psb_success_) goto 9999 + end do + end do + end do + + if (my_rank == psb_root_) then + write(psb_out_unit,'(" ")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("CG TIMING STATISTICS - FINAL RESULTS TABLE")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("Legend:")') + write(psb_out_unit,'(" - Each phase time for one repetition is reduced with max across MPI ranks.")') + write(psb_out_unit,'(" - Minimum/Average/Maximum/Std Dev are computed across repetitions.")') + write(psb_out_unit,'(" - KrylovPerIter = KrylovSolve/iterations; TotalPerIter = TotalTime/iterations.")') + + do prec_idx = 1, n_precs + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Preconditioner: ",a)') trim(prec_name(prec_idx)) + write(psb_out_unit,'(100("-"))') + + ! Print header + write(psb_out_unit,'(a25,a18,a18,a18,a18,a18)') & + & 'Scheme', 'Phase', 'Minimum [s]', 'Average [s]', 'Maximum [s]', 'Std Dev [s]' + write(psb_out_unit,'(100("-"))') + + do scheme_idx = 1, n_schemes + ! Preconditioner init phase + call compute_stats(prec_init_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & trim(scheme_name(scheme_idx)), 'Prec Init', min_t, avg_t, max_t, std_t + + ! Preconditioner build phase + call compute_stats(prec_bld_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Prec Build', min_t, avg_t, max_t, std_t + + ! Communication setup phase + call compute_stats(comm_set_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Comm Setup', min_t, avg_t, max_t, std_t + + ! Total setup phase + call compute_stats(setup_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'SetupTotal', min_t, avg_t, max_t, std_t + + ! Krylov solve phase (this is the actual solver) + call compute_stats(krylov_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovSolve', min_t, avg_t, max_t, std_t + + ! Krylov solve normalized per actual CG iteration + call compute_stats(krylov_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovPerIter', min_t, avg_t, max_t, std_t + + ! Total phase statistics + call compute_stats(total_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalTime', min_t, avg_t, max_t, std_t + + ! Total (setup+solve) normalized per actual CG iteration + call compute_stats(total_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalPerIter', min_t, avg_t, max_t, std_t + + ! Final error and convergence info + call compute_stats(final_error(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Final Error', min_t, avg_t, max_t, std_t + write(psb_out_unit,'(a25,a18,"Iterations: ",i8," Info code: ",i6)') & + & ' ', ' ', iter_count(prec_idx,scheme_idx,nrep), solve_info(prec_idx,scheme_idx,nrep) + + write(psb_out_unit,'(100("-"))') + end do + end do + + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'(" ")') + end if + + call psb_gefree(b,desc_a,info) + call psb_gefree(x,desc_a,info) + call psb_spfree(a,desc_a,info) + call psb_precfree(prec,info) + call psb_cdfree(desc_a,info) + deallocate(setup_time,solve_time,total_time,final_error,iter_count,solve_info, & + & prec_init_time,prec_bld_time,comm_set_time,krylov_time, & + & krylov_it_time,total_it_time) + + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) + stop + +9999 call psb_error(ctxt) + stop 1 + +contains + + subroutine sort_real_inplace(v) + real(psb_spk_), intent(inout) :: v(:) + integer(psb_ipk_) :: i, j + real(psb_spk_) :: key + + do i = 2, size(v) + key = v(i) + j = i - 1 + do while (j >= 1) + if (v(j) <= key) exit + v(j+1) = v(j) + j = j - 1 + end do + v(j+1) = key + end do + end subroutine sort_real_inplace + + subroutine compute_stats(vals,mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v) + real(psb_spk_), intent(in) :: vals(:) + real(psb_spk_), intent(out) :: mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v + real(psb_spk_), allocatable :: tmp(:) + integer(psb_ipk_) :: n, idx10, idx90 + + n = size(vals) + if (n <= 0) then + mean_v = szero; std_v = szero; median_v = szero + p10_v = szero; p90_v = szero; min_v = szero; max_v = szero + return + end if + + mean_v = sum(vals)/real(n,psb_spk_) + if (n > 1) then + std_v = sqrt(sum((vals-mean_v)**2)/real(n-1,psb_spk_)) + else + std_v = szero + end if + + allocate(tmp(n)) + tmp = vals + call sort_real_inplace(tmp) + + if (mod(n,2) == 0) then + median_v = (tmp(n/2)+tmp(n/2+1))/2.0_psb_spk_ + else + median_v = tmp((n+1)/2) + end if + + idx10 = int(ceiling(0.10_psb_spk_*real(n,psb_spk_)),kind=psb_ipk_) + idx90 = int(ceiling(0.90_psb_spk_*real(n,psb_spk_)),kind=psb_ipk_) + idx10 = max(1_psb_ipk_,min(n,idx10)) + idx90 = max(1_psb_ipk_,min(n,idx90)) + p10_v = tmp(idx10) + p90_v = tmp(idx90) + min_v = tmp(1) + max_v = tmp(n) + + deallocate(tmp) + end subroutine compute_stats + + function b1(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + end function b1 + + function b2(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + end function b2 + + function b3(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + end function b3 + + function cfun(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + end function cfun + + function a1(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = sone/80 + end function a1 + + function a2(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = sone/80 + end function a2 + + function a3(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = sone/80 + end function a3 + + function gfun(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + if (x == sone) then + val = sone + else if (x == szero) then + val = exp(y**2-z**2) + end if + end function gfun + + subroutine probe_ieee(where) + character(len=*), intent(in) :: where + logical :: invalid_flag, divzero_flag, overflow_flag, underflow_flag + + call ieee_get_flag(ieee_invalid, invalid_flag) + call ieee_get_flag(ieee_divide_by_zero, divzero_flag) + call ieee_get_flag(ieee_overflow, overflow_flag) + call ieee_get_flag(ieee_underflow, underflow_flag) + + if (invalid_flag .or. divzero_flag .or. overflow_flag .or. underflow_flag) then + write(psb_out_unit,'("IEEE probe [",a,"] invalid=",l1,", div0=",l1,", overflow=",l1,", underflow=",l1)') & + trim(where), invalid_flag, divzero_flag, overflow_flag, underflow_flag + end if + end subroutine probe_ieee + + subroutine clear_ieee_flags() + call ieee_set_flag(ieee_invalid, .false.) + call ieee_set_flag(ieee_divide_by_zero, .false.) + call ieee_set_flag(ieee_overflow, .false.) + call ieee_set_flag(ieee_underflow, .false.) + end subroutine clear_ieee_flags + + subroutine parse_gpu_arg(use_gpu, info) + logical, intent(inout) :: use_gpu + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + if (index(uarg,'--GPU=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + select case (trim(val)) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + case default + info = psb_err_internal_error_ + return + end select + end if + end do + end subroutine parse_gpu_arg + + subroutine parse_matrix_arg(matrix_file, matrix_fmt, info) + character(len=*), intent(inout) :: matrix_file + character(len=*), intent(inout) :: matrix_fmt + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + + if (index(uarg,'--MATRIX=') == 1) then + matrix_file = adjustl(carg(10:len_trim(carg))) + else if (trim(uarg) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1,matrix_file) + else + info = psb_err_internal_error_ + return + end if + else if (index(uarg,'--FMT=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else if (trim(uarg) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1,val) + val = psb_toupper(trim(val)) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else + info = psb_err_internal_error_ + return + end if + end if + end do + end subroutine parse_matrix_arg + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_cspmat_type), intent(out) :: a + type(psb_c_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_lcspmat_type) :: aux_a + complex(psb_spk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square for CG: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = cone + x_glob = czero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + + subroutine psb_c_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info) + implicit none + integer(psb_ipk_), intent(in) :: idim + type(psb_cspmat_type), intent(out) :: a + type(psb_c_vect_type), intent(out) :: xv,bv + type(psb_desc_type), intent(out) :: desc_a + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(out) :: info + character(len=*), intent(in) :: afmt + + integer(psb_ipk_), parameter :: nb=20 + complex(psb_spk_) :: zt(nb) + real(psb_spk_) :: x,y,z + integer(psb_lpk_) :: m,n,glob_row + integer(psb_ipk_) :: nnz,nlr,i,ii,ib,k + integer(psb_ipk_) :: ix,iy,iz + integer(psb_ipk_) :: np, my_rank, nr, nt + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + complex(psb_spk_), allocatable :: val(:) + real(psb_spk_) :: deltah, sqdeltah, deltah2 + real(psb_spk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err, tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, my_rank, np) + + if (idim <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='idim must be > 0') + goto 9999 + end if + if (np <= 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: np <= 0') + goto 9999 + end if + if (my_rank < 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: my_rank < 0') + goto 9999 + end if + + deltah = sone/(idim+2) + sqdeltah = deltah*deltah + deltah2 = 2.0e0_psb_spk_*deltah + + if (abs(deltah) <= tiny(deltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah ~ 0') + goto 9999 + end if + if (abs(sqdeltah) <= tiny(sqdeltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: sqdeltah ~ 0') + goto 9999 + end if + if (abs(deltah2) <= tiny(deltah2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah2 ~ 0') + goto 9999 + end if + + m = idim*idim*idim + n = m + if (n <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid global size: n <= 0') + goto 9999 + end if + nnz = ((n*9)/(np)) + if (nnz <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid local nnz estimate: nnz <= 0') + goto 9999 + end if + if(my_rank == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + + nt = (m+np-1)/np + nr = max(0,min(nt,m-(my_rank*nt))) + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) my_rank, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + call psb_barrier(ctxt) + t0 = psb_wtime() + ! call probe_ieee('enter psb_cdall') + call psb_cdall(ctxt,desc_a,info,nl=nr) + ! call probe_ieee('after psb_cdall') + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! call probe_ieee('after psb_spall') + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + allocate(val(20*nb),irow(20*nb),icol(20*nb),stat=info) + if (info /= psb_success_) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + glob_row=myidx(i) + + if (mod(glob_row,(idim*idim)) == 0) then + ix = glob_row/(idim*idim) + else + ix = glob_row/(idim*idim)+1 + endif + if (mod((glob_row-(ix-1)*idim*idim),idim) == 0) then + iy = (glob_row-(ix-1)*idim*idim)/idim + else + iy = (glob_row-(ix-1)*idim*idim)/idim+1 + endif + iz = glob_row-(ix-1)*idim*idim-(iy-1)*idim + + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = czero + + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = gfun(szero,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-2)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = gfun(x,szero,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-2)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = gfun(x,y,szero)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz-1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff)=2.0e0_psb_spk_*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah + cfun(x,y,z) + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + + val(icoeff) = -a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = gfun(x,y,sone)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz+1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = gfun(x,sone,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+iy*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix == idim) then + zt(k) = gfun(sone,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = ix*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + end do + + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + ! call probe_ieee('after psb_spins') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_spins, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + ! call probe_ieee('after psb_geins bv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins bv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + zt(:)=czero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + ! call probe_ieee('after psb_geins xv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins xv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + ! call probe_ieee('before psb_cdasb') + call psb_cdasb(desc_a,info) + ! call probe_ieee('after psb_cdasb') + tcdasb = psb_wtime()-t1 + + call psb_barrier(ctxt) + t1 = psb_wtime() + ! call probe_ieee('before psb_spasb') + if (info == psb_success_) call psb_spasb(a,desc_a,info,afmt=afmt) + ! call probe_ieee('after psb_spasb') + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(my_rank == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")') tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psb_c_gen_pde3d + +end program psb_c_comm_cg_test diff --git a/test/comm/cg/psb_d_comm_cg_test.F90 b/test/comm/cg/psb_d_comm_cg_test.F90 new file mode 100644 index 000000000..0da9575de --- /dev/null +++ b/test/comm/cg/psb_d_comm_cg_test.F90 @@ -0,0 +1,974 @@ +program psb_d_comm_cg_test + use psb_base_mod + use psb_util_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + use psb_prec_mod + use psb_linsolve_mod + use psb_comm_factory_mod + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use, intrinsic :: ieee_arithmetic + + implicit none + + type(psb_ctxt_type) :: ctxt + type(psb_ctxt_type) :: desc_ctxt + type(psb_dspmat_type) :: a + type(psb_desc_type) :: desc_a + type(psb_d_vect_type) :: b, x + type(psb_dprec_type) :: prec +#ifdef PSB_HAVE_CUDA + type(psb_d_vect_cuda) :: vmold + type(psb_i_vect_cuda) :: imold + type(psb_d_cuda_hlg_sparse_mat), target :: ahlg + class(psb_d_base_sparse_mat), pointer :: agmold +#endif + + integer(psb_ipk_) :: info, my_rank, np + integer(psb_ipk_) :: desc_me, desc_np + integer(psb_ipk_) :: idim, itmax, itrace, istop, iter + integer(psb_ipk_) :: scheme_idx, prec_idx, rep, nrep, nwarm + integer(psb_ipk_), parameter :: n_schemes=5, n_precs=2 + integer(psb_ipk_), allocatable :: iter_count(:,:,:), solve_info(:,:,:) + integer(psb_ipk_) :: scheme_type(n_schemes) + real(psb_dpk_) :: eps, err, t_start, t_elapsed + real(psb_dpk_), allocatable :: prec_init_time(:,:,:), prec_bld_time(:,:,:) + real(psb_dpk_), allocatable :: comm_set_time(:,:,:), krylov_time(:,:,:) + real(psb_dpk_), allocatable :: setup_time(:,:,:), solve_time(:,:,:) + real(psb_dpk_), allocatable :: total_time(:,:,:), final_error(:,:,:) + real(psb_dpk_), allocatable :: krylov_it_time(:,:,:), total_it_time(:,:,:) + real(psb_dpk_) :: iter_denom + real(psb_dpk_) :: avg_t, std_t, med_t, p10_t, p90_t, min_t, max_t + character(len=25) :: scheme_name(n_schemes) + character(len=12) :: prec_type(n_precs) + character(len=20) :: prec_name(n_precs) + character(len=5) :: afmt + character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=16) :: gpu_arg + logical :: setup_done + logical :: use_gpu + logical :: use_external_matrix + + info = psb_success_ + afmt = 'CSR' + idim = 40 + itmax = 1000 + nrep = 5 + nwarm = 1 + ! Disable per-iteration tracing; avoids modulo-by-zero paths in some logging branches. + itrace = -1 + istop = 2 + eps = 1.0e-6_psb_dpk_ + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_ , psb_comm_rma_pull_, psb_comm_rma_push_ /) + scheme_name(1) = 'isend_irecv' + scheme_name(2) = 'ineighbor_alltoallv' + scheme_name(3) = 'persistent_ineighbor_a2av' + scheme_name(4) = 'psb_comm_rma_pull_' + scheme_name(5) = 'psb_comm_rma_push_' + + prec_type(1) = 'NONE' + prec_type(2) = 'DIAG' + prec_name(1) = 'none' + prec_name(2) = 'diag' + + call get_command_argument(1,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) idim + if (info /= 0) then + idim = 40 + info = psb_success_ + end if + end if + call get_command_argument(2,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nrep + if ((info /= 0).or.(nrep <= 0)) then + nrep = 7 + info = psb_success_ + end if + end if + call get_command_argument(3,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nwarm + if ((info /= 0).or.(nwarm < 0)) then + nwarm = 1 + info = psb_success_ + end if + end if + call get_command_argument(4,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) itmax + if ((info /= 0).or.(itmax <= 0)) then + itmax = 1000 + info = psb_success_ + end if + end if + + call parse_gpu_arg(use_gpu, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid value for --gpu option. Use --gpu=TRUE or --gpu=FALSE")') + stop 1 + end if + call parse_matrix_arg(matrix_file, matrix_fmt, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid matrix options. Use --matrix= [--fmt=MM|HB]")') + stop 1 + end if + use_external_matrix = (len_trim(matrix_file) > 0) + ! call psb_set_debug_level(psb_debug_ext_) + + + ! call probe_ieee('before psb_init') + call psb_init(ctxt) +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#endif + ! call probe_ieee('after psb_init') + call clear_ieee_flags() + ! call probe_ieee('after clear_ieee_flags') + call psb_info(ctxt, my_rank, np) + +#ifndef PSB_HAVE_CUDA + if (use_gpu .and. my_rank == psb_root_) then + write(psb_out_unit,'("Warning: --gpu=TRUE requested but this executable was built without CUDA support. Running on CPU.")') + end if + use_gpu = .false. +#endif + + allocate(setup_time(n_precs,n_schemes,nrep), solve_time(n_precs,n_schemes,nrep), & + & total_time(n_precs,n_schemes,nrep), final_error(n_precs,n_schemes,nrep), & + & krylov_it_time(n_precs,n_schemes,nrep), total_it_time(n_precs,n_schemes,nrep), & + & iter_count(n_precs,n_schemes,nrep), solve_info(n_precs,n_schemes,nrep), & + & prec_init_time(n_precs,n_schemes,nrep), prec_bld_time(n_precs,n_schemes,nrep), & + & comm_set_time(n_precs,n_schemes,nrep), krylov_time(n_precs,n_schemes,nrep), stat=info) + if (info /= psb_success_) stop 1 + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the comm/cg test program' + if (use_external_matrix) then + write(psb_out_unit,'("Input matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'("Input format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim + end if + write(psb_out_unit,'("Number of processors : ",i0)') np + write(psb_out_unit,'("Iterative method : CG")') + write(psb_out_unit,'("Preconditioners : NONE, DIAG")') + write(psb_out_unit,'("Max iterations (CG) : ",i0)') itmax + write(psb_out_unit,'("Repetitions : ",i0)') nrep + write(psb_out_unit,'("Warmup solves : ",i0)') nwarm + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Usage: ./psb_d_comm_cg_test [idim] [nrep] [nwarm] [itmax] ",& + &"[--gpu=TRUE|FALSE] [--matrix=] [--fmt=MM|HB]")') + write(psb_out_unit,'(" ")') + end if + + call psb_barrier(ctxt) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, b, x, desc_a, afmt, info) + else + ! call probe_ieee('before psb_d_gen_pde3d') + call psb_d_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) + ! call probe_ieee('after psb_d_gen_pde3d') + end if + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + agmold => ahlg + call a%cscnv(info,mold=agmold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=imold) + if (info /= psb_success_) goto 9999 + call x%cnv(mold=vmold) + if (info /= psb_success_) goto 9999 + call b%cnv(mold=vmold) + if (info /= psb_success_) goto 9999 + end if +#endif + + do prec_idx = 1, n_precs + do scheme_idx = 1, n_schemes + do rep = 1, nrep + t_start = psb_wtime() + ! Set default scheme on the descriptor: all vectors that lazy-init during + ! this solve (including internal CG vectors r, p, q, z) will use this scheme. + call desc_a%set_comm_scheme(scheme_type(scheme_idx), info) + if (info /= psb_success_) goto 9999 + ! Free x comm_handle so it also re-initializes from desc_a%comm_type + ! (it may already be allocated from a previous rep). + if (allocated(x%v%comm_handle)) call psb_comm_free(x%v%comm_handle, info) + if (info /= psb_success_) goto 9999 + comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + + t_start = psb_wtime() + call prec%init(ctxt,trim(prec_type(prec_idx)),info) + if (info /= psb_success_) goto 9999 + + prec_init_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_init_time(prec_idx,scheme_idx,rep)) + + t_start = psb_wtime() + call prec%build(a,desc_a,info) + if (info /= psb_success_) goto 9999 + prec_bld_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_bld_time(prec_idx,scheme_idx,rep)) + + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object not allocated after build' + goto 9999 + end if + + + call psb_amx(ctxt,comm_set_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' + goto 9999 + end if + + setup_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,rep) + & + & prec_bld_time(prec_idx,scheme_idx,rep) + comm_set_time(prec_idx,scheme_idx,rep) + + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t_start = psb_wtime() + call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& + & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) + krylov_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,krylov_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + + ! Verify x used the descriptor scheme (lazy init should have fired during CG). + if (allocated(x%v%comm_handle)) then + if (x%v%comm_handle%comm_type /= scheme_type(scheme_idx)) then + if (my_rank == psb_root_) & + write(psb_err_unit,'("SCHEME MISMATCH rank=",i0," expected=",i0," got=",i0)') & + my_rank, scheme_type(scheme_idx), x%v%comm_handle%comm_type + info = psb_err_internal_error_ + goto 9999 + else + if (my_rank == psb_root_ .and. rep == 1) & + write(psb_out_unit,'(" [OK] x comm_handle matches scheme: ",a)') & + trim(scheme_name(scheme_idx)) + end if + end if + + call psb_geaxpby(dzero,b,dzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost before psb_krylov' + goto 9999 + end if + + call prec%free(info) + if (info /= psb_success_) goto 9999 + + solve_time(prec_idx,scheme_idx,rep) = krylov_time(prec_idx,scheme_idx,rep) + total_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,rep) + & + & solve_time(prec_idx,scheme_idx,rep) + iter_count(prec_idx,scheme_idx,rep) = iter + iter_denom = real(max(iter,1_psb_ipk_),psb_dpk_) + krylov_it_time(prec_idx,scheme_idx,rep) = solve_time(prec_idx,scheme_idx,rep)/iter_denom + total_it_time(prec_idx,scheme_idx,rep) = total_time(prec_idx,scheme_idx,rep)/iter_denom + final_error(prec_idx,scheme_idx,rep) = err + solve_info(prec_idx,scheme_idx,rep) = info + + if (info /= psb_success_) goto 9999 + end do + end do + end do + + if (my_rank == psb_root_) then + write(psb_out_unit,'(" ")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("CG TIMING STATISTICS - FINAL RESULTS TABLE")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("Legend:")') + write(psb_out_unit,'(" - Each phase time for one repetition is reduced with max across MPI ranks.")') + write(psb_out_unit,'(" - Minimum/Average/Maximum/Std Dev are computed across repetitions.")') + write(psb_out_unit,'(" - KrylovPerIter = KrylovSolve/iterations; TotalPerIter = TotalTime/iterations.")') + + do prec_idx = 1, n_precs + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Preconditioner: ",a)') trim(prec_name(prec_idx)) + write(psb_out_unit,'(100("-"))') + + ! Print header + write(psb_out_unit,'(a25,a18,a18,a18,a18,a18)') & + & 'Scheme', 'Phase', 'Minimum [s]', 'Average [s]', 'Maximum [s]', 'Std Dev [s]' + write(psb_out_unit,'(100("-"))') + + do scheme_idx = 1, n_schemes + ! Preconditioner init phase + call compute_stats(prec_init_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & trim(scheme_name(scheme_idx)), 'Prec Init', min_t, avg_t, max_t, std_t + + ! Preconditioner build phase + call compute_stats(prec_bld_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Prec Build', min_t, avg_t, max_t, std_t + + ! Communication setup phase + call compute_stats(comm_set_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Comm Setup', min_t, avg_t, max_t, std_t + + ! Total setup phase + call compute_stats(setup_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'SetupTotal', min_t, avg_t, max_t, std_t + + ! Krylov solve phase (this is the actual solver) + call compute_stats(krylov_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovSolve', min_t, avg_t, max_t, std_t + + ! Krylov solve normalized per actual CG iteration + call compute_stats(krylov_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovPerIter', min_t, avg_t, max_t, std_t + + ! Total phase statistics + call compute_stats(total_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalTime', min_t, avg_t, max_t, std_t + + ! Total (setup+solve) normalized per actual CG iteration + call compute_stats(total_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalPerIter', min_t, avg_t, max_t, std_t + + ! Final error and convergence info + call compute_stats(final_error(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Final Error', min_t, avg_t, max_t, std_t + write(psb_out_unit,'(a25,a18,"Iterations: ",i8," Info code: ",i6)') & + & ' ', ' ', iter_count(prec_idx,scheme_idx,nrep), solve_info(prec_idx,scheme_idx,nrep) + + write(psb_out_unit,'(100("-"))') + end do + end do + + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'(" ")') + end if + + call psb_gefree(b,desc_a,info) + call psb_gefree(x,desc_a,info) + call psb_spfree(a,desc_a,info) + call psb_precfree(prec,info) + call psb_cdfree(desc_a,info) + deallocate(setup_time,solve_time,total_time,final_error,iter_count,solve_info, & + & prec_init_time,prec_bld_time,comm_set_time,krylov_time, & + & krylov_it_time,total_it_time) + + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) + stop + +9999 call psb_error(ctxt) + stop 1 + +contains + + subroutine sort_real_inplace(v) + real(psb_dpk_), intent(inout) :: v(:) + integer(psb_ipk_) :: i, j + real(psb_dpk_) :: key + + do i = 2, size(v) + key = v(i) + j = i - 1 + do while (j >= 1) + if (v(j) <= key) exit + v(j+1) = v(j) + j = j - 1 + end do + v(j+1) = key + end do + end subroutine sort_real_inplace + + subroutine compute_stats(vals,mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v) + real(psb_dpk_), intent(in) :: vals(:) + real(psb_dpk_), intent(out) :: mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v + real(psb_dpk_), allocatable :: tmp(:) + integer(psb_ipk_) :: n, idx10, idx90 + + n = size(vals) + if (n <= 0) then + mean_v = dzero; std_v = dzero; median_v = dzero + p10_v = dzero; p90_v = dzero; min_v = dzero; max_v = dzero + return + end if + + mean_v = sum(vals)/real(n,psb_dpk_) + if (n > 1) then + std_v = sqrt(sum((vals-mean_v)**2)/real(n-1,psb_dpk_)) + else + std_v = dzero + end if + + allocate(tmp(n)) + tmp = vals + call sort_real_inplace(tmp) + + if (mod(n,2) == 0) then + median_v = (tmp(n/2)+tmp(n/2+1))/2.0_psb_dpk_ + else + median_v = tmp((n+1)/2) + end if + + idx10 = int(ceiling(0.10_psb_dpk_*real(n,psb_dpk_)),kind=psb_ipk_) + idx90 = int(ceiling(0.90_psb_dpk_*real(n,psb_dpk_)),kind=psb_ipk_) + idx10 = max(1_psb_ipk_,min(n,idx10)) + idx90 = max(1_psb_ipk_,min(n,idx90)) + p10_v = tmp(idx10) + p90_v = tmp(idx90) + min_v = tmp(1) + max_v = tmp(n) + + deallocate(tmp) + end subroutine compute_stats + + function b1(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b1 + + function b2(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b2 + + function b3(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b3 + + function cfun(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function cfun + + function a1(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a1 + + function a2(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a2 + + function a3(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a3 + + function gfun(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + if (x == done) then + val = done + else if (x == dzero) then + val = exp(y**2-z**2) + end if + end function gfun + + subroutine probe_ieee(where) + character(len=*), intent(in) :: where + logical :: invalid_flag, divzero_flag, overflow_flag, underflow_flag + + call ieee_get_flag(ieee_invalid, invalid_flag) + call ieee_get_flag(ieee_divide_by_zero, divzero_flag) + call ieee_get_flag(ieee_overflow, overflow_flag) + call ieee_get_flag(ieee_underflow, underflow_flag) + + if (invalid_flag .or. divzero_flag .or. overflow_flag .or. underflow_flag) then + write(psb_out_unit,'("IEEE probe [",a,"] invalid=",l1,", div0=",l1,", overflow=",l1,", underflow=",l1)') & + trim(where), invalid_flag, divzero_flag, overflow_flag, underflow_flag + end if + end subroutine probe_ieee + + subroutine clear_ieee_flags() + call ieee_set_flag(ieee_invalid, .false.) + call ieee_set_flag(ieee_divide_by_zero, .false.) + call ieee_set_flag(ieee_overflow, .false.) + call ieee_set_flag(ieee_underflow, .false.) + end subroutine clear_ieee_flags + + subroutine parse_gpu_arg(use_gpu, info) + logical, intent(inout) :: use_gpu + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + if (index(uarg,'--GPU=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + select case (trim(val)) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + case default + info = psb_err_internal_error_ + return + end select + end if + end do + end subroutine parse_gpu_arg + + subroutine parse_matrix_arg(matrix_file, matrix_fmt, info) + character(len=*), intent(inout) :: matrix_file + character(len=*), intent(inout) :: matrix_fmt + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + + if (index(uarg,'--MATRIX=') == 1) then + matrix_file = adjustl(carg(10:len_trim(carg))) + else if (trim(uarg) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1,matrix_file) + else + info = psb_err_internal_error_ + return + end if + else if (index(uarg,'--FMT=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else if (trim(uarg) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1,val) + val = psb_toupper(trim(val)) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else + info = psb_err_internal_error_ + return + end if + end if + end do + end subroutine parse_matrix_arg + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_dspmat_type), intent(out) :: a + type(psb_d_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_ldspmat_type) :: aux_a + real(psb_dpk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square for CG: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = done + x_glob = dzero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info) + implicit none + integer(psb_ipk_), intent(in) :: idim + type(psb_dspmat_type), intent(out) :: a + type(psb_d_vect_type), intent(out) :: xv,bv + type(psb_desc_type), intent(out) :: desc_a + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(out) :: info + character(len=*), intent(in) :: afmt + + integer(psb_ipk_), parameter :: nb=20 + real(psb_dpk_) :: zt(nb) + real(psb_dpk_) :: x,y,z + integer(psb_lpk_) :: m,n,glob_row + integer(psb_ipk_) :: nnz,nlr,i,ii,ib,k + integer(psb_ipk_) :: ix,iy,iz + integer(psb_ipk_) :: np, my_rank, nr, nt + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_dpk_), allocatable :: val(:) + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err, tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, my_rank, np) + + if (idim <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='idim must be > 0') + goto 9999 + end if + if (np <= 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: np <= 0') + goto 9999 + end if + if (my_rank < 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: my_rank < 0') + goto 9999 + end if + + deltah = done/(idim+2) + sqdeltah = deltah*deltah + deltah2 = 2.0e0_psb_dpk_*deltah + + if (abs(deltah) <= tiny(deltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah ~ 0') + goto 9999 + end if + if (abs(sqdeltah) <= tiny(sqdeltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: sqdeltah ~ 0') + goto 9999 + end if + if (abs(deltah2) <= tiny(deltah2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah2 ~ 0') + goto 9999 + end if + + m = idim*idim*idim + n = m + if (n <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid global size: n <= 0') + goto 9999 + end if + nnz = ((n*9)/(np)) + if (nnz <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid local nnz estimate: nnz <= 0') + goto 9999 + end if + if(my_rank == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + + nt = (m+np-1)/np + nr = max(0,min(nt,m-(my_rank*nt))) + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) my_rank, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + call psb_barrier(ctxt) + t0 = psb_wtime() + ! call probe_ieee('enter psb_cdall') + call psb_cdall(ctxt,desc_a,info,nl=nr) + ! call probe_ieee('after psb_cdall') + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! call probe_ieee('after psb_spall') + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + allocate(val(20*nb),irow(20*nb),icol(20*nb),stat=info) + if (info /= psb_success_) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + glob_row=myidx(i) + + if (mod(glob_row,(idim*idim)) == 0) then + ix = glob_row/(idim*idim) + else + ix = glob_row/(idim*idim)+1 + endif + if (mod((glob_row-(ix-1)*idim*idim),idim) == 0) then + iy = (glob_row-(ix-1)*idim*idim)/idim + else + iy = (glob_row-(ix-1)*idim*idim)/idim+1 + endif + iz = glob_row-(ix-1)*idim*idim-(iy-1)*idim + + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = dzero + + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = gfun(dzero,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-2)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = gfun(x,dzero,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-2)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = gfun(x,y,dzero)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz-1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff)=2.0e0_psb_dpk_*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah + cfun(x,y,z) + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + + val(icoeff) = -a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = gfun(x,y,done)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz+1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = gfun(x,done,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+iy*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix == idim) then + zt(k) = gfun(done,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = ix*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + end do + + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + ! call probe_ieee('after psb_spins') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_spins, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + ! call probe_ieee('after psb_geins bv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins bv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + zt(:)=dzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + ! call probe_ieee('after psb_geins xv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins xv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + ! call probe_ieee('before psb_cdasb') + call psb_cdasb(desc_a,info) + ! call probe_ieee('after psb_cdasb') + tcdasb = psb_wtime()-t1 + + call psb_barrier(ctxt) + t1 = psb_wtime() + ! call probe_ieee('before psb_spasb') + if (info == psb_success_) call psb_spasb(a,desc_a,info,afmt=afmt) + ! call probe_ieee('after psb_spasb') + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(my_rank == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")') tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psb_d_gen_pde3d + +end program psb_d_comm_cg_test diff --git a/test/comm/cg/psb_s_comm_cg_test.F90 b/test/comm/cg/psb_s_comm_cg_test.F90 new file mode 100644 index 000000000..4728bda4b --- /dev/null +++ b/test/comm/cg/psb_s_comm_cg_test.F90 @@ -0,0 +1,974 @@ +program psb_s_comm_cg_test + use psb_base_mod + use psb_util_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + use psb_prec_mod + use psb_linsolve_mod + use psb_comm_factory_mod + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use, intrinsic :: ieee_arithmetic + + implicit none + + type(psb_ctxt_type) :: ctxt + type(psb_ctxt_type) :: desc_ctxt + type(psb_sspmat_type) :: a + type(psb_desc_type) :: desc_a + type(psb_s_vect_type) :: b, x + type(psb_sprec_type) :: prec +#ifdef PSB_HAVE_CUDA + type(psb_s_vect_cuda) :: vmold + type(psb_i_vect_cuda) :: imold + type(psb_s_cuda_hlg_sparse_mat), target :: ahlg + class(psb_s_base_sparse_mat), pointer :: agmold +#endif + + integer(psb_ipk_) :: info, my_rank, np + integer(psb_ipk_) :: desc_me, desc_np + integer(psb_ipk_) :: idim, itmax, itrace, istop, iter + integer(psb_ipk_) :: scheme_idx, prec_idx, rep, nrep, nwarm + integer(psb_ipk_), parameter :: n_schemes=5, n_precs=2 + integer(psb_ipk_), allocatable :: iter_count(:,:,:), solve_info(:,:,:) + integer(psb_ipk_) :: scheme_type(n_schemes) + real(psb_spk_) :: eps, err, t_start, t_elapsed + real(psb_spk_), allocatable :: prec_init_time(:,:,:), prec_bld_time(:,:,:) + real(psb_spk_), allocatable :: comm_set_time(:,:,:), krylov_time(:,:,:) + real(psb_spk_), allocatable :: setup_time(:,:,:), solve_time(:,:,:) + real(psb_spk_), allocatable :: total_time(:,:,:), final_error(:,:,:) + real(psb_spk_), allocatable :: krylov_it_time(:,:,:), total_it_time(:,:,:) + real(psb_spk_) :: iter_denom + real(psb_spk_) :: avg_t, std_t, med_t, p10_t, p90_t, min_t, max_t + character(len=25) :: scheme_name(n_schemes) + character(len=12) :: prec_type(n_precs) + character(len=20) :: prec_name(n_precs) + character(len=5) :: afmt + character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=16) :: gpu_arg + logical :: setup_done + logical :: use_gpu + logical :: use_external_matrix + + info = psb_success_ + afmt = 'CSR' + idim = 40 + itmax = 1000 + nrep = 5 + nwarm = 1 + ! Disable per-iteration tracing; avoids modulo-by-zero paths in some logging branches. + itrace = -1 + istop = 2 + eps = 1.0e-6_psb_spk_ + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_ , psb_comm_rma_pull_, psb_comm_rma_push_ /) + scheme_name(1) = 'isend_irecv' + scheme_name(2) = 'ineighbor_alltoallv' + scheme_name(3) = 'persistent_ineighbor_a2av' + scheme_name(4) = 'psb_comm_rma_pull_' + scheme_name(5) = 'psb_comm_rma_push_' + + prec_type(1) = 'NONE' + prec_type(2) = 'DIAG' + prec_name(1) = 'none' + prec_name(2) = 'diag' + + call get_command_argument(1,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) idim + if (info /= 0) then + idim = 40 + info = psb_success_ + end if + end if + call get_command_argument(2,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nrep + if ((info /= 0).or.(nrep <= 0)) then + nrep = 7 + info = psb_success_ + end if + end if + call get_command_argument(3,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nwarm + if ((info /= 0).or.(nwarm < 0)) then + nwarm = 1 + info = psb_success_ + end if + end if + call get_command_argument(4,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) itmax + if ((info /= 0).or.(itmax <= 0)) then + itmax = 1000 + info = psb_success_ + end if + end if + + call parse_gpu_arg(use_gpu, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid value for --gpu option. Use --gpu=TRUE or --gpu=FALSE")') + stop 1 + end if + call parse_matrix_arg(matrix_file, matrix_fmt, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid matrix options. Use --matrix= [--fmt=MM|HB]")') + stop 1 + end if + use_external_matrix = (len_trim(matrix_file) > 0) + ! call psb_set_debug_level(psb_debug_ext_) + + + ! call probe_ieee('before psb_init') + call psb_init(ctxt) +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#endif + ! call probe_ieee('after psb_init') + call clear_ieee_flags() + ! call probe_ieee('after clear_ieee_flags') + call psb_info(ctxt, my_rank, np) + +#ifndef PSB_HAVE_CUDA + if (use_gpu .and. my_rank == psb_root_) then + write(psb_out_unit,'("Warning: --gpu=TRUE requested but this executable was built without CUDA support. Running on CPU.")') + end if + use_gpu = .false. +#endif + + allocate(setup_time(n_precs,n_schemes,nrep), solve_time(n_precs,n_schemes,nrep), & + & total_time(n_precs,n_schemes,nrep), final_error(n_precs,n_schemes,nrep), & + & krylov_it_time(n_precs,n_schemes,nrep), total_it_time(n_precs,n_schemes,nrep), & + & iter_count(n_precs,n_schemes,nrep), solve_info(n_precs,n_schemes,nrep), & + & prec_init_time(n_precs,n_schemes,nrep), prec_bld_time(n_precs,n_schemes,nrep), & + & comm_set_time(n_precs,n_schemes,nrep), krylov_time(n_precs,n_schemes,nrep), stat=info) + if (info /= psb_success_) stop 1 + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the comm/cg test program' + if (use_external_matrix) then + write(psb_out_unit,'("Input matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'("Input format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim + end if + write(psb_out_unit,'("Number of processors : ",i0)') np + write(psb_out_unit,'("Iterative method : CG")') + write(psb_out_unit,'("Preconditioners : NONE, DIAG")') + write(psb_out_unit,'("Max iterations (CG) : ",i0)') itmax + write(psb_out_unit,'("Repetitions : ",i0)') nrep + write(psb_out_unit,'("Warmup solves : ",i0)') nwarm + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Usage: ./psb_s_comm_cg_test [idim] [nrep] [nwarm] [itmax] ",& + &"[--gpu=TRUE|FALSE] [--matrix=] [--fmt=MM|HB]")') + write(psb_out_unit,'(" ")') + end if + + call psb_barrier(ctxt) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, b, x, desc_a, afmt, info) + else + ! call probe_ieee('before psb_s_gen_pde3d') + call psb_s_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) + ! call probe_ieee('after psb_s_gen_pde3d') + end if + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + agmold => ahlg + call a%cscnv(info,mold=agmold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=imold) + if (info /= psb_success_) goto 9999 + call x%cnv(mold=vmold) + if (info /= psb_success_) goto 9999 + call b%cnv(mold=vmold) + if (info /= psb_success_) goto 9999 + end if +#endif + + do prec_idx = 1, n_precs + do scheme_idx = 1, n_schemes + do rep = 1, nrep + t_start = psb_wtime() + ! Set default scheme on the descriptor: all vectors that lazy-init during + ! this solve (including internal CG vectors r, p, q, z) will use this scheme. + call desc_a%set_comm_scheme(scheme_type(scheme_idx), info) + if (info /= psb_success_) goto 9999 + ! Free x comm_handle so it also re-initializes from desc_a%comm_type + ! (it may already be allocated from a previous rep). + if (allocated(x%v%comm_handle)) call psb_comm_free(x%v%comm_handle, info) + if (info /= psb_success_) goto 9999 + comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + + call psb_geaxpby(szero,b,szero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + + t_start = psb_wtime() + call prec%init(ctxt,trim(prec_type(prec_idx)),info) + if (info /= psb_success_) goto 9999 + + prec_init_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_init_time(prec_idx,scheme_idx,rep)) + + t_start = psb_wtime() + call prec%build(a,desc_a,info) + if (info /= psb_success_) goto 9999 + prec_bld_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_bld_time(prec_idx,scheme_idx,rep)) + + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object not allocated after build' + goto 9999 + end if + + + call psb_amx(ctxt,comm_set_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' + goto 9999 + end if + + setup_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,rep) + & + & prec_bld_time(prec_idx,scheme_idx,rep) + comm_set_time(prec_idx,scheme_idx,rep) + + call psb_geaxpby(szero,b,szero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t_start = psb_wtime() + call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& + & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) + krylov_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,krylov_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + + ! Verify x used the descriptor scheme (lazy init should have fired during CG). + if (allocated(x%v%comm_handle)) then + if (x%v%comm_handle%comm_type /= scheme_type(scheme_idx)) then + if (my_rank == psb_root_) & + write(psb_err_unit,'("SCHEME MISMATCH rank=",i0," expected=",i0," got=",i0)') & + my_rank, scheme_type(scheme_idx), x%v%comm_handle%comm_type + info = psb_err_internal_error_ + goto 9999 + else + if (my_rank == psb_root_ .and. rep == 1) & + write(psb_out_unit,'(" [OK] x comm_handle matches scheme: ",a)') & + trim(scheme_name(scheme_idx)) + end if + end if + + call psb_geaxpby(szero,b,szero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost before psb_krylov' + goto 9999 + end if + + call prec%free(info) + if (info /= psb_success_) goto 9999 + + solve_time(prec_idx,scheme_idx,rep) = krylov_time(prec_idx,scheme_idx,rep) + total_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,rep) + & + & solve_time(prec_idx,scheme_idx,rep) + iter_count(prec_idx,scheme_idx,rep) = iter + iter_denom = real(max(iter,1_psb_ipk_),psb_spk_) + krylov_it_time(prec_idx,scheme_idx,rep) = solve_time(prec_idx,scheme_idx,rep)/iter_denom + total_it_time(prec_idx,scheme_idx,rep) = total_time(prec_idx,scheme_idx,rep)/iter_denom + final_error(prec_idx,scheme_idx,rep) = err + solve_info(prec_idx,scheme_idx,rep) = info + + if (info /= psb_success_) goto 9999 + end do + end do + end do + + if (my_rank == psb_root_) then + write(psb_out_unit,'(" ")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("CG TIMING STATISTICS - FINAL RESULTS TABLE")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("Legend:")') + write(psb_out_unit,'(" - Each phase time for one repetition is reduced with max across MPI ranks.")') + write(psb_out_unit,'(" - Minimum/Average/Maximum/Std Dev are computed across repetitions.")') + write(psb_out_unit,'(" - KrylovPerIter = KrylovSolve/iterations; TotalPerIter = TotalTime/iterations.")') + + do prec_idx = 1, n_precs + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Preconditioner: ",a)') trim(prec_name(prec_idx)) + write(psb_out_unit,'(100("-"))') + + ! Print header + write(psb_out_unit,'(a25,a18,a18,a18,a18,a18)') & + & 'Scheme', 'Phase', 'Minimum [s]', 'Average [s]', 'Maximum [s]', 'Std Dev [s]' + write(psb_out_unit,'(100("-"))') + + do scheme_idx = 1, n_schemes + ! Preconditioner init phase + call compute_stats(prec_init_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & trim(scheme_name(scheme_idx)), 'Prec Init', min_t, avg_t, max_t, std_t + + ! Preconditioner build phase + call compute_stats(prec_bld_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Prec Build', min_t, avg_t, max_t, std_t + + ! Communication setup phase + call compute_stats(comm_set_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Comm Setup', min_t, avg_t, max_t, std_t + + ! Total setup phase + call compute_stats(setup_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'SetupTotal', min_t, avg_t, max_t, std_t + + ! Krylov solve phase (this is the actual solver) + call compute_stats(krylov_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovSolve', min_t, avg_t, max_t, std_t + + ! Krylov solve normalized per actual CG iteration + call compute_stats(krylov_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovPerIter', min_t, avg_t, max_t, std_t + + ! Total phase statistics + call compute_stats(total_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalTime', min_t, avg_t, max_t, std_t + + ! Total (setup+solve) normalized per actual CG iteration + call compute_stats(total_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalPerIter', min_t, avg_t, max_t, std_t + + ! Final error and convergence info + call compute_stats(final_error(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Final Error', min_t, avg_t, max_t, std_t + write(psb_out_unit,'(a25,a18,"Iterations: ",i8," Info code: ",i6)') & + & ' ', ' ', iter_count(prec_idx,scheme_idx,nrep), solve_info(prec_idx,scheme_idx,nrep) + + write(psb_out_unit,'(100("-"))') + end do + end do + + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'(" ")') + end if + + call psb_gefree(b,desc_a,info) + call psb_gefree(x,desc_a,info) + call psb_spfree(a,desc_a,info) + call psb_precfree(prec,info) + call psb_cdfree(desc_a,info) + deallocate(setup_time,solve_time,total_time,final_error,iter_count,solve_info, & + & prec_init_time,prec_bld_time,comm_set_time,krylov_time, & + & krylov_it_time,total_it_time) + + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) + stop + +9999 call psb_error(ctxt) + stop 1 + +contains + + subroutine sort_real_inplace(v) + real(psb_spk_), intent(inout) :: v(:) + integer(psb_ipk_) :: i, j + real(psb_spk_) :: key + + do i = 2, size(v) + key = v(i) + j = i - 1 + do while (j >= 1) + if (v(j) <= key) exit + v(j+1) = v(j) + j = j - 1 + end do + v(j+1) = key + end do + end subroutine sort_real_inplace + + subroutine compute_stats(vals,mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v) + real(psb_spk_), intent(in) :: vals(:) + real(psb_spk_), intent(out) :: mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v + real(psb_spk_), allocatable :: tmp(:) + integer(psb_ipk_) :: n, idx10, idx90 + + n = size(vals) + if (n <= 0) then + mean_v = szero; std_v = szero; median_v = szero + p10_v = szero; p90_v = szero; min_v = szero; max_v = szero + return + end if + + mean_v = sum(vals)/real(n,psb_spk_) + if (n > 1) then + std_v = sqrt(sum((vals-mean_v)**2)/real(n-1,psb_spk_)) + else + std_v = szero + end if + + allocate(tmp(n)) + tmp = vals + call sort_real_inplace(tmp) + + if (mod(n,2) == 0) then + median_v = (tmp(n/2)+tmp(n/2+1))/2.0_psb_spk_ + else + median_v = tmp((n+1)/2) + end if + + idx10 = int(ceiling(0.10_psb_spk_*real(n,psb_spk_)),kind=psb_ipk_) + idx90 = int(ceiling(0.90_psb_spk_*real(n,psb_spk_)),kind=psb_ipk_) + idx10 = max(1_psb_ipk_,min(n,idx10)) + idx90 = max(1_psb_ipk_,min(n,idx90)) + p10_v = tmp(idx10) + p90_v = tmp(idx90) + min_v = tmp(1) + max_v = tmp(n) + + deallocate(tmp) + end subroutine compute_stats + + function b1(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + end function b1 + + function b2(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + end function b2 + + function b3(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + end function b3 + + function cfun(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + end function cfun + + function a1(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = sone/80 + end function a1 + + function a2(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = sone/80 + end function a2 + + function a3(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = sone/80 + end function a3 + + function gfun(x,y,z) result(val) + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + val = szero + if (x == sone) then + val = sone + else if (x == szero) then + val = exp(y**2-z**2) + end if + end function gfun + + subroutine probe_ieee(where) + character(len=*), intent(in) :: where + logical :: invalid_flag, divzero_flag, overflow_flag, underflow_flag + + call ieee_get_flag(ieee_invalid, invalid_flag) + call ieee_get_flag(ieee_divide_by_zero, divzero_flag) + call ieee_get_flag(ieee_overflow, overflow_flag) + call ieee_get_flag(ieee_underflow, underflow_flag) + + if (invalid_flag .or. divzero_flag .or. overflow_flag .or. underflow_flag) then + write(psb_out_unit,'("IEEE probe [",a,"] invalid=",l1,", div0=",l1,", overflow=",l1,", underflow=",l1)') & + trim(where), invalid_flag, divzero_flag, overflow_flag, underflow_flag + end if + end subroutine probe_ieee + + subroutine clear_ieee_flags() + call ieee_set_flag(ieee_invalid, .false.) + call ieee_set_flag(ieee_divide_by_zero, .false.) + call ieee_set_flag(ieee_overflow, .false.) + call ieee_set_flag(ieee_underflow, .false.) + end subroutine clear_ieee_flags + + subroutine parse_gpu_arg(use_gpu, info) + logical, intent(inout) :: use_gpu + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + if (index(uarg,'--GPU=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + select case (trim(val)) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + case default + info = psb_err_internal_error_ + return + end select + end if + end do + end subroutine parse_gpu_arg + + subroutine parse_matrix_arg(matrix_file, matrix_fmt, info) + character(len=*), intent(inout) :: matrix_file + character(len=*), intent(inout) :: matrix_fmt + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + + if (index(uarg,'--MATRIX=') == 1) then + matrix_file = adjustl(carg(10:len_trim(carg))) + else if (trim(uarg) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1,matrix_file) + else + info = psb_err_internal_error_ + return + end if + else if (index(uarg,'--FMT=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else if (trim(uarg) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1,val) + val = psb_toupper(trim(val)) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else + info = psb_err_internal_error_ + return + end if + end if + end do + end subroutine parse_matrix_arg + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_sspmat_type), intent(out) :: a + type(psb_s_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_lsspmat_type) :: aux_a + real(psb_spk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square for CG: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = sone + x_glob = szero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + + subroutine psb_s_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info) + implicit none + integer(psb_ipk_), intent(in) :: idim + type(psb_sspmat_type), intent(out) :: a + type(psb_s_vect_type), intent(out) :: xv,bv + type(psb_desc_type), intent(out) :: desc_a + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(out) :: info + character(len=*), intent(in) :: afmt + + integer(psb_ipk_), parameter :: nb=20 + real(psb_spk_) :: zt(nb) + real(psb_spk_) :: x,y,z + integer(psb_lpk_) :: m,n,glob_row + integer(psb_ipk_) :: nnz,nlr,i,ii,ib,k + integer(psb_ipk_) :: ix,iy,iz + integer(psb_ipk_) :: np, my_rank, nr, nt + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_spk_), allocatable :: val(:) + real(psb_spk_) :: deltah, sqdeltah, deltah2 + real(psb_spk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err, tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, my_rank, np) + + if (idim <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='idim must be > 0') + goto 9999 + end if + if (np <= 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: np <= 0') + goto 9999 + end if + if (my_rank < 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: my_rank < 0') + goto 9999 + end if + + deltah = sone/(idim+2) + sqdeltah = deltah*deltah + deltah2 = 2.0e0_psb_spk_*deltah + + if (abs(deltah) <= tiny(deltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah ~ 0') + goto 9999 + end if + if (abs(sqdeltah) <= tiny(sqdeltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: sqdeltah ~ 0') + goto 9999 + end if + if (abs(deltah2) <= tiny(deltah2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah2 ~ 0') + goto 9999 + end if + + m = idim*idim*idim + n = m + if (n <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid global size: n <= 0') + goto 9999 + end if + nnz = ((n*9)/(np)) + if (nnz <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid local nnz estimate: nnz <= 0') + goto 9999 + end if + if(my_rank == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + + nt = (m+np-1)/np + nr = max(0,min(nt,m-(my_rank*nt))) + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) my_rank, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + call psb_barrier(ctxt) + t0 = psb_wtime() + ! call probe_ieee('enter psb_cdall') + call psb_cdall(ctxt,desc_a,info,nl=nr) + ! call probe_ieee('after psb_cdall') + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! call probe_ieee('after psb_spall') + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + allocate(val(20*nb),irow(20*nb),icol(20*nb),stat=info) + if (info /= psb_success_) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + glob_row=myidx(i) + + if (mod(glob_row,(idim*idim)) == 0) then + ix = glob_row/(idim*idim) + else + ix = glob_row/(idim*idim)+1 + endif + if (mod((glob_row-(ix-1)*idim*idim),idim) == 0) then + iy = (glob_row-(ix-1)*idim*idim)/idim + else + iy = (glob_row-(ix-1)*idim*idim)/idim+1 + endif + iz = glob_row-(ix-1)*idim*idim-(iy-1)*idim + + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = szero + + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = gfun(szero,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-2)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = gfun(x,szero,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-2)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = gfun(x,y,szero)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz-1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff)=2.0e0_psb_spk_*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah + cfun(x,y,z) + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + + val(icoeff) = -a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = gfun(x,y,sone)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz+1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = gfun(x,sone,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+iy*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix == idim) then + zt(k) = gfun(sone,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = ix*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + end do + + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + ! call probe_ieee('after psb_spins') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_spins, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + ! call probe_ieee('after psb_geins bv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins bv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + zt(:)=szero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + ! call probe_ieee('after psb_geins xv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins xv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + ! call probe_ieee('before psb_cdasb') + call psb_cdasb(desc_a,info) + ! call probe_ieee('after psb_cdasb') + tcdasb = psb_wtime()-t1 + + call psb_barrier(ctxt) + t1 = psb_wtime() + ! call probe_ieee('before psb_spasb') + if (info == psb_success_) call psb_spasb(a,desc_a,info,afmt=afmt) + ! call probe_ieee('after psb_spasb') + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(my_rank == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")') tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psb_s_gen_pde3d + +end program psb_s_comm_cg_test diff --git a/test/comm/cg/psb_z_comm_cg_test.F90 b/test/comm/cg/psb_z_comm_cg_test.F90 new file mode 100644 index 000000000..937b515c1 --- /dev/null +++ b/test/comm/cg/psb_z_comm_cg_test.F90 @@ -0,0 +1,974 @@ +program psb_z_comm_cg_test + use psb_base_mod + use psb_util_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + use psb_prec_mod + use psb_linsolve_mod + use psb_comm_factory_mod + use psb_comm_schemes_mod, only: psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use, intrinsic :: ieee_arithmetic + + implicit none + + type(psb_ctxt_type) :: ctxt + type(psb_ctxt_type) :: desc_ctxt + type(psb_zspmat_type) :: a + type(psb_desc_type) :: desc_a + type(psb_z_vect_type) :: b, x + type(psb_zprec_type) :: prec +#ifdef PSB_HAVE_CUDA + type(psb_z_vect_cuda) :: vmold + type(psb_i_vect_cuda) :: imold + type(psb_z_cuda_hlg_sparse_mat), target :: ahlg + class(psb_z_base_sparse_mat), pointer :: agmold +#endif + + integer(psb_ipk_) :: info, my_rank, np + integer(psb_ipk_) :: desc_me, desc_np + integer(psb_ipk_) :: idim, itmax, itrace, istop, iter + integer(psb_ipk_) :: scheme_idx, prec_idx, rep, nrep, nwarm + integer(psb_ipk_), parameter :: n_schemes=5, n_precs=2 + integer(psb_ipk_), allocatable :: iter_count(:,:,:), solve_info(:,:,:) + integer(psb_ipk_) :: scheme_type(n_schemes) + real(psb_dpk_) :: eps, err, t_start, t_elapsed + real(psb_dpk_), allocatable :: prec_init_time(:,:,:), prec_bld_time(:,:,:) + real(psb_dpk_), allocatable :: comm_set_time(:,:,:), krylov_time(:,:,:) + real(psb_dpk_), allocatable :: setup_time(:,:,:), solve_time(:,:,:) + real(psb_dpk_), allocatable :: total_time(:,:,:), final_error(:,:,:) + real(psb_dpk_), allocatable :: krylov_it_time(:,:,:), total_it_time(:,:,:) + real(psb_dpk_) :: iter_denom + real(psb_dpk_) :: avg_t, std_t, med_t, p10_t, p90_t, min_t, max_t + character(len=25) :: scheme_name(n_schemes) + character(len=12) :: prec_type(n_precs) + character(len=20) :: prec_name(n_precs) + character(len=5) :: afmt + character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=16) :: gpu_arg + logical :: setup_done + logical :: use_gpu + logical :: use_external_matrix + + info = psb_success_ + afmt = 'CSR' + idim = 40 + itmax = 1000 + nrep = 5 + nwarm = 1 + ! Disable per-iteration tracing; avoids modulo-by-zero paths in some logging branches. + itrace = -1 + istop = 2 + eps = 1.0e-6_psb_dpk_ + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + scheme_type = (/ psb_comm_isend_irecv_, psb_comm_ineighbor_alltoallv_, & + & psb_comm_persistent_ineighbor_alltoallv_ , psb_comm_rma_pull_, psb_comm_rma_push_ /) + scheme_name(1) = 'isend_irecv' + scheme_name(2) = 'ineighbor_alltoallv' + scheme_name(3) = 'persistent_ineighbor_a2av' + scheme_name(4) = 'psb_comm_rma_pull_' + scheme_name(5) = 'psb_comm_rma_push_' + + prec_type(1) = 'NONE' + prec_type(2) = 'DIAG' + prec_name(1) = 'none' + prec_name(2) = 'diag' + + call get_command_argument(1,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) idim + if (info /= 0) then + idim = 40 + info = psb_success_ + end if + end if + call get_command_argument(2,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nrep + if ((info /= 0).or.(nrep <= 0)) then + nrep = 7 + info = psb_success_ + end if + end if + call get_command_argument(3,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) nwarm + if ((info /= 0).or.(nwarm < 0)) then + nwarm = 1 + info = psb_success_ + end if + end if + call get_command_argument(4,arg) + if (len_trim(arg) > 0) then + read(arg,*,iostat=info) itmax + if ((info /= 0).or.(itmax <= 0)) then + itmax = 1000 + info = psb_success_ + end if + end if + + call parse_gpu_arg(use_gpu, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid value for --gpu option. Use --gpu=TRUE or --gpu=FALSE")') + stop 1 + end if + call parse_matrix_arg(matrix_file, matrix_fmt, info) + if (info /= psb_success_) then + write(psb_err_unit,'("Invalid matrix options. Use --matrix= [--fmt=MM|HB]")') + stop 1 + end if + use_external_matrix = (len_trim(matrix_file) > 0) + ! call psb_set_debug_level(psb_debug_ext_) + + + ! call probe_ieee('before psb_init') + call psb_init(ctxt) +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#endif + ! call probe_ieee('after psb_init') + call clear_ieee_flags() + ! call probe_ieee('after clear_ieee_flags') + call psb_info(ctxt, my_rank, np) + +#ifndef PSB_HAVE_CUDA + if (use_gpu .and. my_rank == psb_root_) then + write(psb_out_unit,'("Warning: --gpu=TRUE requested but this executable was built without CUDA support. Running on CPU.")') + end if + use_gpu = .false. +#endif + + allocate(setup_time(n_precs,n_schemes,nrep), solve_time(n_precs,n_schemes,nrep), & + & total_time(n_precs,n_schemes,nrep), final_error(n_precs,n_schemes,nrep), & + & krylov_it_time(n_precs,n_schemes,nrep), total_it_time(n_precs,n_schemes,nrep), & + & iter_count(n_precs,n_schemes,nrep), solve_info(n_precs,n_schemes,nrep), & + & prec_init_time(n_precs,n_schemes,nrep), prec_bld_time(n_precs,n_schemes,nrep), & + & comm_set_time(n_precs,n_schemes,nrep), krylov_time(n_precs,n_schemes,nrep), stat=info) + if (info /= psb_success_) stop 1 + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the comm/cg test program' + if (use_external_matrix) then + write(psb_out_unit,'("Input matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'("Input format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'("Grid dimensions : ",i4," x ",i4," x ",i4)') idim,idim,idim + end if + write(psb_out_unit,'("Number of processors : ",i0)') np + write(psb_out_unit,'("Iterative method : CG")') + write(psb_out_unit,'("Preconditioners : NONE, DIAG")') + write(psb_out_unit,'("Max iterations (CG) : ",i0)') itmax + write(psb_out_unit,'("Repetitions : ",i0)') nrep + write(psb_out_unit,'("Warmup solves : ",i0)') nwarm + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Usage: ./psb_z_comm_cg_test [idim] [nrep] [nwarm] [itmax] ",& + &"[--gpu=TRUE|FALSE] [--matrix=] [--fmt=MM|HB]")') + write(psb_out_unit,'(" ")') + end if + + call psb_barrier(ctxt) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, b, x, desc_a, afmt, info) + else + ! call probe_ieee('before psb_z_gen_pde3d') + call psb_z_gen_pde3d(ctxt,idim,a,b,x,desc_a,afmt,info) + ! call probe_ieee('after psb_z_gen_pde3d') + end if + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + agmold => ahlg + call a%cscnv(info,mold=agmold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=imold) + if (info /= psb_success_) goto 9999 + call x%cnv(mold=vmold) + if (info /= psb_success_) goto 9999 + call b%cnv(mold=vmold) + if (info /= psb_success_) goto 9999 + end if +#endif + + do prec_idx = 1, n_precs + do scheme_idx = 1, n_schemes + do rep = 1, nrep + t_start = psb_wtime() + ! Set default scheme on the descriptor: all vectors that lazy-init during + ! this solve (including internal CG vectors r, p, q, z) will use this scheme. + call desc_a%set_comm_scheme(scheme_type(scheme_idx), info) + if (info /= psb_success_) goto 9999 + ! Free x comm_handle so it also re-initializes from desc_a%comm_type + ! (it may already be allocated from a previous rep). + if (allocated(x%v%comm_handle)) call psb_comm_free(x%v%comm_handle, info) + if (info /= psb_success_) goto 9999 + comm_set_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + + call psb_geaxpby(zzero,b,zzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + + t_start = psb_wtime() + call prec%init(ctxt,trim(prec_type(prec_idx)),info) + if (info /= psb_success_) goto 9999 + + prec_init_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_init_time(prec_idx,scheme_idx,rep)) + + t_start = psb_wtime() + call prec%build(a,desc_a,info) + if (info /= psb_success_) goto 9999 + prec_bld_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,prec_bld_time(prec_idx,scheme_idx,rep)) + + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object not allocated after build' + goto 9999 + end if + + + call psb_amx(ctxt,comm_set_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost after psb_comm_set' + goto 9999 + end if + + setup_time(prec_idx,scheme_idx,rep) = prec_init_time(prec_idx,scheme_idx,rep) + & + & prec_bld_time(prec_idx,scheme_idx,rep) + comm_set_time(prec_idx,scheme_idx,rep) + + call psb_geaxpby(zzero,b,zzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t_start = psb_wtime() + call psb_krylov('CG',a,prec,b,x,eps,desc_a,info,& + & itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istop) + krylov_time(prec_idx,scheme_idx,rep) = psb_wtime() - t_start + call psb_amx(ctxt,krylov_time(prec_idx,scheme_idx,rep)) + + if (info /= psb_success_) goto 9999 + + ! Verify x used the descriptor scheme (lazy init should have fired during CG). + if (allocated(x%v%comm_handle)) then + if (x%v%comm_handle%comm_type /= scheme_type(scheme_idx)) then + if (my_rank == psb_root_) & + write(psb_err_unit,'("SCHEME MISMATCH rank=",i0," expected=",i0," got=",i0)') & + my_rank, scheme_type(scheme_idx), x%v%comm_handle%comm_type + info = psb_err_internal_error_ + goto 9999 + else + if (my_rank == psb_root_ .and. rep == 1) & + write(psb_out_unit,'(" [OK] x comm_handle matches scheme: ",a)') & + trim(scheme_name(scheme_idx)) + end if + end if + + call psb_geaxpby(zzero,b,zzero,x,desc_a,info) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + if (.not.allocated(prec%prec)) then + info = psb_err_internal_error_ + write(psb_err_unit,*) 'Preconditioner object lost before psb_krylov' + goto 9999 + end if + + call prec%free(info) + if (info /= psb_success_) goto 9999 + + solve_time(prec_idx,scheme_idx,rep) = krylov_time(prec_idx,scheme_idx,rep) + total_time(prec_idx,scheme_idx,rep) = setup_time(prec_idx,scheme_idx,rep) + & + & solve_time(prec_idx,scheme_idx,rep) + iter_count(prec_idx,scheme_idx,rep) = iter + iter_denom = real(max(iter,1_psb_ipk_),psb_dpk_) + krylov_it_time(prec_idx,scheme_idx,rep) = solve_time(prec_idx,scheme_idx,rep)/iter_denom + total_it_time(prec_idx,scheme_idx,rep) = total_time(prec_idx,scheme_idx,rep)/iter_denom + final_error(prec_idx,scheme_idx,rep) = err + solve_info(prec_idx,scheme_idx,rep) = info + + if (info /= psb_success_) goto 9999 + end do + end do + end do + + if (my_rank == psb_root_) then + write(psb_out_unit,'(" ")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("CG TIMING STATISTICS - FINAL RESULTS TABLE")') + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'("Legend:")') + write(psb_out_unit,'(" - Each phase time for one repetition is reduced with max across MPI ranks.")') + write(psb_out_unit,'(" - Minimum/Average/Maximum/Std Dev are computed across repetitions.")') + write(psb_out_unit,'(" - KrylovPerIter = KrylovSolve/iterations; TotalPerIter = TotalTime/iterations.")') + + do prec_idx = 1, n_precs + write(psb_out_unit,'(" ")') + write(psb_out_unit,'("Preconditioner: ",a)') trim(prec_name(prec_idx)) + write(psb_out_unit,'(100("-"))') + + ! Print header + write(psb_out_unit,'(a25,a18,a18,a18,a18,a18)') & + & 'Scheme', 'Phase', 'Minimum [s]', 'Average [s]', 'Maximum [s]', 'Std Dev [s]' + write(psb_out_unit,'(100("-"))') + + do scheme_idx = 1, n_schemes + ! Preconditioner init phase + call compute_stats(prec_init_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & trim(scheme_name(scheme_idx)), 'Prec Init', min_t, avg_t, max_t, std_t + + ! Preconditioner build phase + call compute_stats(prec_bld_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Prec Build', min_t, avg_t, max_t, std_t + + ! Communication setup phase + call compute_stats(comm_set_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Comm Setup', min_t, avg_t, max_t, std_t + + ! Total setup phase + call compute_stats(setup_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'SetupTotal', min_t, avg_t, max_t, std_t + + ! Krylov solve phase (this is the actual solver) + call compute_stats(krylov_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovSolve', min_t, avg_t, max_t, std_t + + ! Krylov solve normalized per actual CG iteration + call compute_stats(krylov_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'KrylovPerIter', min_t, avg_t, max_t, std_t + + ! Total phase statistics + call compute_stats(total_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalTime', min_t, avg_t, max_t, std_t + + ! Total (setup+solve) normalized per actual CG iteration + call compute_stats(total_it_time(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'TotalPerIter', min_t, avg_t, max_t, std_t + + ! Final error and convergence info + call compute_stats(final_error(prec_idx,scheme_idx,:),avg_t,std_t,med_t,p10_t,p90_t,min_t,max_t) + write(psb_out_unit,'(a25,a18,es18.10,es18.10,es18.10,es18.10)') & + & ' ', 'Final Error', min_t, avg_t, max_t, std_t + write(psb_out_unit,'(a25,a18,"Iterations: ",i8," Info code: ",i6)') & + & ' ', ' ', iter_count(prec_idx,scheme_idx,nrep), solve_info(prec_idx,scheme_idx,nrep) + + write(psb_out_unit,'(100("-"))') + end do + end do + + write(psb_out_unit,'(100("="))') + write(psb_out_unit,'(" ")') + end if + + call psb_gefree(b,desc_a,info) + call psb_gefree(x,desc_a,info) + call psb_spfree(a,desc_a,info) + call psb_precfree(prec,info) + call psb_cdfree(desc_a,info) + deallocate(setup_time,solve_time,total_time,final_error,iter_count,solve_info, & + & prec_init_time,prec_bld_time,comm_set_time,krylov_time, & + & krylov_it_time,total_it_time) + + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) + stop + +9999 call psb_error(ctxt) + stop 1 + +contains + + subroutine sort_real_inplace(v) + real(psb_dpk_), intent(inout) :: v(:) + integer(psb_ipk_) :: i, j + real(psb_dpk_) :: key + + do i = 2, size(v) + key = v(i) + j = i - 1 + do while (j >= 1) + if (v(j) <= key) exit + v(j+1) = v(j) + j = j - 1 + end do + v(j+1) = key + end do + end subroutine sort_real_inplace + + subroutine compute_stats(vals,mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v) + real(psb_dpk_), intent(in) :: vals(:) + real(psb_dpk_), intent(out) :: mean_v,std_v,median_v,p10_v,p90_v,min_v,max_v + real(psb_dpk_), allocatable :: tmp(:) + integer(psb_ipk_) :: n, idx10, idx90 + + n = size(vals) + if (n <= 0) then + mean_v = dzero; std_v = dzero; median_v = dzero + p10_v = dzero; p90_v = dzero; min_v = dzero; max_v = dzero + return + end if + + mean_v = sum(vals)/real(n,psb_dpk_) + if (n > 1) then + std_v = sqrt(sum((vals-mean_v)**2)/real(n-1,psb_dpk_)) + else + std_v = dzero + end if + + allocate(tmp(n)) + tmp = vals + call sort_real_inplace(tmp) + + if (mod(n,2) == 0) then + median_v = (tmp(n/2)+tmp(n/2+1))/2.0_psb_dpk_ + else + median_v = tmp((n+1)/2) + end if + + idx10 = int(ceiling(0.10_psb_dpk_*real(n,psb_dpk_)),kind=psb_ipk_) + idx90 = int(ceiling(0.90_psb_dpk_*real(n,psb_dpk_)),kind=psb_ipk_) + idx10 = max(1_psb_ipk_,min(n,idx10)) + idx90 = max(1_psb_ipk_,min(n,idx90)) + p10_v = tmp(idx10) + p90_v = tmp(idx90) + min_v = tmp(1) + max_v = tmp(n) + + deallocate(tmp) + end subroutine compute_stats + + function b1(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b1 + + function b2(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b2 + + function b3(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function b3 + + function cfun(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + end function cfun + + function a1(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a1 + + function a2(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a2 + + function a3(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = done/80 + end function a3 + + function gfun(x,y,z) result(val) + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + val = dzero + if (x == done) then + val = done + else if (x == dzero) then + val = exp(y**2-z**2) + end if + end function gfun + + subroutine probe_ieee(where) + character(len=*), intent(in) :: where + logical :: invalid_flag, divzero_flag, overflow_flag, underflow_flag + + call ieee_get_flag(ieee_invalid, invalid_flag) + call ieee_get_flag(ieee_divide_by_zero, divzero_flag) + call ieee_get_flag(ieee_overflow, overflow_flag) + call ieee_get_flag(ieee_underflow, underflow_flag) + + if (invalid_flag .or. divzero_flag .or. overflow_flag .or. underflow_flag) then + write(psb_out_unit,'("IEEE probe [",a,"] invalid=",l1,", div0=",l1,", overflow=",l1,", underflow=",l1)') & + trim(where), invalid_flag, divzero_flag, overflow_flag, underflow_flag + end if + end subroutine probe_ieee + + subroutine clear_ieee_flags() + call ieee_set_flag(ieee_invalid, .false.) + call ieee_set_flag(ieee_divide_by_zero, .false.) + call ieee_set_flag(ieee_overflow, .false.) + call ieee_set_flag(ieee_underflow, .false.) + end subroutine clear_ieee_flags + + subroutine parse_gpu_arg(use_gpu, info) + logical, intent(inout) :: use_gpu + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + if (index(uarg,'--GPU=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + select case (trim(val)) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + case default + info = psb_err_internal_error_ + return + end select + end if + end do + end subroutine parse_gpu_arg + + subroutine parse_matrix_arg(matrix_file, matrix_fmt, info) + character(len=*), intent(inout) :: matrix_file + character(len=*), intent(inout) :: matrix_fmt + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: i, argc + character(len=256) :: carg, uarg, val + + info = psb_success_ + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i,carg) + uarg = psb_toupper(trim(carg)) + + if (index(uarg,'--MATRIX=') == 1) then + matrix_file = adjustl(carg(10:len_trim(carg))) + else if (trim(uarg) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1,matrix_file) + else + info = psb_err_internal_error_ + return + end if + else if (index(uarg,'--FMT=') == 1) then + val = psb_toupper(adjustl(carg(7:len_trim(carg)))) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else if (trim(uarg) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1,val) + val = psb_toupper(trim(val)) + if ((trim(val) == 'MM') .or. (trim(val) == 'HB')) then + matrix_fmt = trim(val) + else + info = psb_err_internal_error_ + return + end if + else + info = psb_err_internal_error_ + return + end if + end if + end do + end subroutine parse_matrix_arg + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_zspmat_type), intent(out) :: a + type(psb_z_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_lzspmat_type) :: aux_a + complex(psb_dpk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square for CG: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = zone + x_glob = zzero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + + subroutine psb_z_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info) + implicit none + integer(psb_ipk_), intent(in) :: idim + type(psb_zspmat_type), intent(out) :: a + type(psb_z_vect_type), intent(out) :: xv,bv + type(psb_desc_type), intent(out) :: desc_a + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(out) :: info + character(len=*), intent(in) :: afmt + + integer(psb_ipk_), parameter :: nb=20 + complex(psb_dpk_) :: zt(nb) + real(psb_dpk_) :: x,y,z + integer(psb_lpk_) :: m,n,glob_row + integer(psb_ipk_) :: nnz,nlr,i,ii,ib,k + integer(psb_ipk_) :: ix,iy,iz + integer(psb_ipk_) :: np, my_rank, nr, nt + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + complex(psb_dpk_), allocatable :: val(:) + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + character(len=20) :: name, ch_err, tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, my_rank, np) + + if (idim <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='idim must be > 0') + goto 9999 + end if + if (np <= 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: np <= 0') + goto 9999 + end if + if (my_rank < 0) then + info = psb_err_context_error_ + call psb_errpush(info,name,a_err='invalid context: my_rank < 0') + goto 9999 + end if + + deltah = done/(idim+2) + sqdeltah = deltah*deltah + deltah2 = 2.0e0_psb_dpk_*deltah + + if (abs(deltah) <= tiny(deltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah ~ 0') + goto 9999 + end if + if (abs(sqdeltah) <= tiny(sqdeltah)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: sqdeltah ~ 0') + goto 9999 + end if + if (abs(deltah2) <= tiny(deltah2)) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid mesh spacing: deltah2 ~ 0') + goto 9999 + end if + + m = idim*idim*idim + n = m + if (n <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid global size: n <= 0') + goto 9999 + end if + nnz = ((n*9)/(np)) + if (nnz <= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name,a_err='invalid local nnz estimate: nnz <= 0') + goto 9999 + end if + if(my_rank == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + + nt = (m+np-1)/np + nr = max(0,min(nt,m-(my_rank*nt))) + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) my_rank, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + call psb_barrier(ctxt) + t0 = psb_wtime() + ! call probe_ieee('enter psb_cdall') + call psb_cdall(ctxt,desc_a,info,nl=nr) + ! call probe_ieee('after psb_cdall') + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! call probe_ieee('after psb_spall') + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + allocate(val(20*nb),irow(20*nb),icol(20*nb),stat=info) + if (info /= psb_success_) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + glob_row=myidx(i) + + if (mod(glob_row,(idim*idim)) == 0) then + ix = glob_row/(idim*idim) + else + ix = glob_row/(idim*idim)+1 + endif + if (mod((glob_row-(ix-1)*idim*idim),idim) == 0) then + iy = (glob_row-(ix-1)*idim*idim)/idim + else + iy = (glob_row-(ix-1)*idim*idim)/idim+1 + endif + iz = glob_row-(ix-1)*idim*idim-(iy-1)*idim + + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = zzero + + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = gfun(dzero,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-2)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = gfun(x,dzero,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-2)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = gfun(x,y,dzero)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz-1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff)=2.0e0_psb_dpk_*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah + cfun(x,y,z) + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + + val(icoeff) = -a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = gfun(x,y,done)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+(iy-1)*idim+(iz+1) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = gfun(x,done,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = (ix-1)*idim*idim+iy*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + val(icoeff) = -a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix == idim) then + zt(k) = gfun(done,y,z)*(-val(icoeff)) + zt(k) + else + icol(icoeff) = ix*idim*idim+(iy-1)*idim+iz + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + end do + + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + ! call probe_ieee('after psb_spins') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_spins, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + ! call probe_ieee('after psb_geins bv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins bv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + zt(:)=zzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + ! call probe_ieee('after psb_geins xv') + if(info /= psb_success_) then + write(psb_err_unit,'("INSERT FAIL rank=",i0,", call=psb_geins xv, ii=",i0,", ib=",i0,", icoeff=",i0)') & + my_rank, ii, ib, icoeff + write(psb_err_unit,'(" glob_row=",i0,", ix=",i0,", iy=",i0,", iz=",i0)') glob_row, ix, iy, iz + exit + end if + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + ! call probe_ieee('before psb_cdasb') + call psb_cdasb(desc_a,info) + ! call probe_ieee('after psb_cdasb') + tcdasb = psb_wtime()-t1 + + call psb_barrier(ctxt) + t1 = psb_wtime() + ! call probe_ieee('before psb_spasb') + if (info == psb_success_) call psb_spasb(a,desc_a,info,afmt=afmt) + ! call probe_ieee('after psb_spasb') + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(my_rank == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")') tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psb_z_gen_pde3d + +end program psb_z_comm_cg_test diff --git a/test/comm/spmv/psb_c_spmv_test.f90 b/test/comm/spmv/psb_c_spmv_test.f90 new file mode 100644 index 000000000..1560017c4 --- /dev/null +++ b/test/comm/spmv/psb_c_spmv_test.f90 @@ -0,0 +1,917 @@ +!> Test program for overlapping communication and computation with psb_spmm. +!! +!! +module psb_cspmv_overlap_test + + use psb_base_mod + use psb_util_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + + implicit none + + interface + function c_func_3d(x,y,z) result(val) + import :: psb_spk_ + real(psb_spk_), intent(in) :: x,y,z + complex(psb_spk_) :: val + end function c_func_3d + end interface + +contains + + + function c_null_func_3d(x,y,z) result(val) + + real(psb_spk_), intent(in) :: x,y,z + complex(psb_spk_) :: val + + val = czero + + end function c_null_func_3d + ! + ! functions parametrizing the differential equation + ! + + ! + ! Note: b1, b2 and b3 are the coefficients of the first + ! derivative of the unknown function. The default + ! we apply here is to have them zero, so that the resulting + ! matrix is symmetric/hermitian and suitable for + ! testing with CG and FCG. + ! When testing methods for non-hermitian matrices you can + ! change the B1/B2/B3 functions to e.g. sone/sqrt((3*sone)) + ! + function b1(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: b1 + real(psb_spk_), intent(in) :: x,y,z + b1=szero + end function b1 + function b2(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: b2 + real(psb_spk_), intent(in) :: x,y,z + b2=szero + end function b2 + function b3(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: b3 + real(psb_spk_), intent(in) :: x,y,z + b3=szero + end function b3 + function c(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: c + real(psb_spk_), intent(in) :: x,y,z + c=szero + end function c + function a1(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: a1 + real(psb_spk_), intent(in) :: x,y,z + a1=sone/80 + end function a1 + function a2(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: a2 + real(psb_spk_), intent(in) :: x,y,z + a2=sone/80 + end function a2 + function a3(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: a3 + real(psb_spk_), intent(in) :: x,y,z + a3=sone/80 + end function a3 + function g(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: g + real(psb_spk_), intent(in) :: x,y,z + g = szero + if (x == sone) then + g = sone + else if (x == szero) then + g = exp(y**2-z**2) + end if + end function g + + ! + ! subroutine to allocate and fill in the coefficient matrix and + ! the rhs. + ! + subroutine psb_c_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& + & f,amold,vmold,imold,partition,nrl,iv,tnd) + use psb_base_mod + use psb_util_mod + ! + ! Discretizes the partial differential equation + ! + ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) + ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f + ! dxdx dydy dzdz dx dy dz + ! + ! with Dirichlet boundary conditions + ! u = g + ! + ! on the unit cube 0<=x,y,z<=1. + ! + ! + ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. + ! + implicit none + integer(psb_ipk_) :: idim + type(psb_cspmat_type) :: a + type(psb_c_vect_type) :: xv,bv + type(psb_desc_type) :: desc_a + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: info + character(len=*) :: afmt + procedure(c_func_3d), optional :: f + class(psb_c_base_sparse_mat), optional :: amold + class(psb_c_base_vect_type), optional :: vmold + class(psb_i_base_vect_type), optional :: imold + integer(psb_ipk_), optional :: partition, nrl,iv(:) + logical, optional :: tnd + ! Local variables. + + integer(psb_ipk_), parameter :: nb=20 + type(psb_c_csc_sparse_mat) :: acsc + type(psb_c_coo_sparse_mat) :: acoo + type(psb_c_csr_sparse_mat) :: acsr + complex(psb_spk_) :: zt(nb) + real(psb_spk_) :: x,y,z + integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ + integer(psb_lpk_) :: m,n,glob_row,nt + integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner + ! For 3D partition + ! Note: integer control variables going directly into an MPI call + ! must be 4 bytes, i.e. psb_mpk_ + integer(psb_mpk_) :: npdims(3), npp, minfo + integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz + integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) + ! Process grid + integer(psb_ipk_) :: np, iam, nth + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + complex(psb_spk_), allocatable :: val(:) + ! deltah dimension of each grid cell + ! deltat discretization time + real(psb_spk_) :: deltah, sqdeltah, deltah2 + real(psb_spk_), parameter :: rhs=szero,one=sone,zero=szero + real(psb_spk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + procedure(c_func_3d), pointer :: f_ + logical :: tnd_ + character(len=20) :: name, ch_err,tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + + if (present(f)) then + f_ => f + else + f_ => c_null_func_3d + end if + + deltah = sone/(idim+1) + sqdeltah = deltah*deltah + deltah2 = (2*sone)* deltah + + if (present(partition)) then + if ((1<= partition).and.(partition <= 3)) then + partition_ = partition + else + write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' + partition_ = 3 + end if + else + partition_ = 3 + end if + + tnd_ = .false. + if (present(tnd)) tnd_ = tnd + + ! initialize array descriptor and sparse matrix storage. provide an + ! estimate of the number of non zeroes + + m = (1_psb_lpk_*idim)*idim*idim + n = m + nnz = ((n*7)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + t0 = psb_wtime() + select case(partition_) + case(1) + ! A BLOCK partition + if (present(nrl)) then + nr = nrl + else + ! + ! Using a simple BLOCK distribution. + ! + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + end if + + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! First example of use of CDALL: specify for each process a number of + ! contiguous rows + ! + call psb_cdall(ctxt,desc_a,info,nl=nr) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(2) + ! A partition defined by the user through IV + + if (present(iv)) then + if (size(iv) /= m) then + write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + else + write(psb_err_unit,*) iam, 'Initialization error: IV not present' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! Second example of use of CDALL: specify for each row the + ! process that owns it + ! + call psb_cdall(ctxt,desc_a,info,vg=iv) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(3) + ! A 3-dimensional partition + + ! A nifty MPI function will split the process list + npdims = 0 + call mpi_dims_create(np,3,npdims,info) + npx = npdims(1) + npy = npdims(2) + npz = npdims(3) + + allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) + ! We can reuse idx2ijk for process indices as well. + call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) + ! Now let's split the 3D cube in hexahedra + call dist1Didx(bndx,idim,npx) + mynx = bndx(iamx+1)-bndx(iamx) + call dist1Didx(bndy,idim,npy) + myny = bndy(iamy+1)-bndy(iamy) + call dist1Didx(bndz,idim,npz) + mynz = bndz(iamz+1)-bndz(iamz) + + ! How many indices do I own? + nlr = mynx*myny*mynz + allocate(myidx(nlr)) + ! Now, let's generate the list of indices I own + nr = 0 + do i=bndx(iamx),bndx(iamx+1)-1 + do j=bndy(iamy),bndy(iamy+1)-1 + do k=bndz(iamz),bndz(iamz+1)-1 + nr = nr + 1 + call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) + end do + end do + end do + if (nr /= nlr) then + write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& + & nr,nlr,mynx,myny,mynz + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + end if + + ! + ! Third example of use of CDALL: specify for each process + ! the set of global indices it owns. + ! + call psb_cdall(ctxt,desc_a,info,vl=myidx) + + case default + write(psb_err_unit,*) iam, 'Initialization error: should not get here' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end select + + + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! define rhs from boundary conditions; also build initial guess + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + ! we build an auxiliary matrix consisting of one row at a + ! time; just a small matrix. might be extended to generate + ! a bunch of rows per call. + ! + allocate(val(20*nb),irow(20*nb),& + &icol(20*nb),stat=info) + if (info /= psb_success_ ) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + + ! loop over rows belonging to current process in a block + ! distribution. + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + ! local matrix pointer + glob_row=myidx(i) + ! compute gridpoint coordinates + call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) + ! x, y, z coordinates + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = f_(x,y,z) + ! internal point: build discretization + ! + ! term depending on (x-1,y,z) + ! + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = g(szero,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y-1,z) + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = g(x,szero,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y,z-1) + val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = g(x,y,szero)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + ! term depending on (x,y,z) + val(icoeff)=(2*sone)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & + & + c(x,y,z) + call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + ! term depending on (x,y,z+1) + val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = g(x,y,sone)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y+1,z) + val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = g(x,sone,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x+1,y,z) + val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix==idim) then + zt(k) = g(sone,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + end do + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=czero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + if (present(imold)) then + call psb_cdasb(desc_a,info,mold=imold) + else + call psb_cdasb(desc_a,info) + end if + tcdasb = psb_wtime()-t1 + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) then + if (present(amold)) then + call psb_spasb(a,desc_a,info,mold=amold) + else + call psb_spasb(a,desc_a,info,afmt=afmt) + end if + end if + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) then + if (present(vmold)) then + call psb_geasb(xv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + else + call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + end if + end if + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& + & tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psb_c_gen_pde3d + + subroutine run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_in,times_in,do_swap,comm_mode) + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type), intent(in) :: ctxt + logical, intent(in) :: use_gpu + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + character(len=*), intent(in) :: cpu_fmt + character(len=*), intent(in) :: gpu_fmt + integer(psb_ipk_), intent(in) :: idim_in, times_in + logical, intent(in) :: do_swap + character(len=*), intent(in) :: comm_mode + + type(psb_cspmat_type) :: a + type(psb_c_vect_type) :: x, y + type(psb_desc_type) :: desc_a + character(len=8) :: afmt + character(len=64) :: env_buf + integer(psb_ipk_) :: my_rank, np, info, err_act + integer(psb_ipk_) :: idim, times, i + integer :: env_len, env_status, ios + complex(psb_spk_) :: alpha, beta + real(psb_spk_) :: t0, t1, dt, avg_t + logical :: use_external_matrix + + integer(psb_ipk_) :: comm_type + +#ifdef PSB_HAVE_CUDA + type(psb_c_vect_cuda) :: cuda_vector_mold + type(psb_i_vect_cuda) :: cuda_index_mold + type(psb_c_cuda_elg_sparse_mat), target :: cuda_ell_sparse_mold + type(psb_c_cuda_csrg_sparse_mat), target :: cuda_csr_sparse_mold + type(psb_c_cuda_hdiag_sparse_mat), target :: cuda_hdia_sparse_mold + type(psb_c_cuda_hlg_sparse_mat), target :: cuda_hll_sparse_mold + class(psb_c_base_sparse_mat), pointer :: cuda_sparse_mold +#endif + + select case(psb_toupper(trim(comm_mode))) + case('P2P','ISEND_IRECV') + comm_type = psb_comm_isend_irecv_ + case('NEIGHBOR','INEIGHBOR_ALLTOALLV') + comm_type = psb_comm_ineighbor_alltoallv_ + case('PNEIGHBOR','PERSISTENT','PERSISTENT_INEIGHBOR_A2AV') + comm_type = psb_comm_persistent_ineighbor_alltoallv_ + case('MPI_GET','RMA_PULL') + comm_type = psb_comm_rma_pull_ + case('MPI_PUT','RMA_PUSH') + comm_type = psb_comm_rma_push_ + case default + comm_type = psb_comm_isend_irecv_ + if (my_rank == psb_root_) then + write(psb_err_unit,'("Unknown comm backend: ",a,", defaulting to P2P")') trim(comm_mode) + end if + end select + + info = psb_success_ + afmt = psb_toupper(trim(cpu_fmt)) + if (len_trim(afmt) == 0) afmt = 'CSR' + if (idim_in > 0) then + idim = idim_in + else + idim = 10 + end if + + if (times_in > 0) then + times = times_in + else + times = 100 + end if + alpha = cone + beta = czero + + call psb_erractionsave(err_act) + call psb_info(ctxt, my_rank, np) + use_external_matrix = (len_trim(matrix_file) > 0) + + if (idim_in <= 0) then + call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) idim + if ((ios /= 0) .or. (idim < 2)) idim = 10 + end if + end if + + if (times_in <= 0) then + call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) times + if ((ios /= 0) .or. (times < 1)) times = 100 + end if + end if + + call psb_barrier(ctxt) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, y, x, desc_a, afmt, info) + else + call psb_c_gen_pde3d(ctxt,idim,a,y,x,desc_a,afmt,info) + end if + if (info /= psb_success_) goto 9999 + + call psb_comm_set(comm_type,x%v%comm_handle,info) + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + select case(psb_toupper(trim(gpu_fmt))) + case('ELG') + cuda_sparse_mold => cuda_ell_sparse_mold + case('CSRG') + cuda_sparse_mold => cuda_csr_sparse_mold + case('HDIAG','HDIA') + cuda_sparse_mold => cuda_hdia_sparse_mold + case default + cuda_sparse_mold => cuda_hll_sparse_mold + end select + call a%cscnv(info,mold=cuda_sparse_mold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=cuda_index_mold) + if (info /= psb_success_) goto 9999 + call x%cnv(mold=cuda_vector_mold) + if (info /= psb_success_) goto 9999 + call y%cnv(mold=cuda_vector_mold) + if (info /= psb_success_) goto 9999 + end if +#endif + + ! warm-up + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) + if (info /= psb_success_) exit + end do + t1 = psb_wtime() + if (info /= psb_success_) goto 9999 + + dt = t1 - t0 + call psb_amx(ctxt, dt) + avg_t = dt / real(times, psb_spk_) + + if (my_rank == psb_root_) then + if (do_swap) then + write(psb_out_unit,'(/,"SpMV benchmark (overlap)")') + else + write(psb_out_unit,'(/,"SpMV benchmark (no overlap)")') + end if + write(psb_out_unit,'(" cpu matrix fmt : ",a)') trim(afmt) + if (use_gpu) write(psb_out_unit,'(" gpu matrix fmt : ",a)') trim(psb_toupper(trim(gpu_fmt))) + if (use_external_matrix) then + write(psb_out_unit,'(" matrix file : ",a)') trim(matrix_file) + write(psb_out_unit,'(" matrix format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" idim : ",i0)') idim + end if + write(psb_out_unit,'(" global non zeros : ",i0)') a%get_nzeros() + write(psb_out_unit,'(" global rows : ",i0)') a%get_nrows() + write(psb_out_unit,'(" global cols : ",i0)') a%get_ncols() + write(psb_out_unit,'(" repetitions : ",i0)') times + write(psb_out_unit,'(" comm backend : ",a)') trim(psb_toupper(trim(comm_mode))) + write(psb_out_unit,'(" total time [s] : ",es12.5)') dt + write(psb_out_unit,'(" avg time [s] : ",es12.5)') avg_t + end if + + call psb_gefree(y, desc_a, info) + call psb_gefree(x, desc_a, info) + call psb_spfree(a, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_erractionrestore(err_act) + return + +9999 call psb_error(ctxt) + call psb_error_handler(ctxt, err_act) + end subroutine run_spmv_kernel + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_cspmat_type), intent(out) :: a + type(psb_c_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_lcspmat_type) :: aux_a + complex(psb_spk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = cone + x_glob = czero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + +end module psb_cspmv_overlap_test + +program psb_c_spmv_kernel + use psb_cspmv_overlap_test + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type) :: ctxt + logical :: use_gpu + integer(psb_ipk_) :: my_rank, np, k + integer :: ios + character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=8) :: cpu_fmt + character(len=8) :: gpu_fmt + integer(psb_ipk_) :: idim_arg, times_arg + logical :: do_overlap + integer :: kmode + integer, parameter :: n_comm_modes = 5 + character(len=20), parameter :: comm_modes(n_comm_modes) = [character(len=20) :: & + & 'P2P', 'NEIGHBOR', 'PNEIGHBOR', 'MPI_GET', 'MPI_PUT'] + + idim_arg = -1 + times_arg = -1 + + matrix_file = '' + matrix_fmt = 'MM' + cpu_fmt = 'CSR' + gpu_fmt = 'HLG' + do_overlap = .true. + + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + + do k = 1, command_argument_count() + call get_command_argument(k, arg) + if (index(psb_toupper(trim(arg)), '--GPU=') == 1) then + select case (psb_toupper(adjustl(arg(7:len_trim(arg))))) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + end select + else if (index(psb_toupper(trim(arg)), '--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (index(psb_toupper(trim(arg)), '--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--MTX_FMT=') == 1) then + arg = psb_toupper(adjustl(arg(10:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--DIM=') == 1) then + read(arg(7:len_trim(arg)),*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + else if (index(psb_toupper(trim(arg)), '--TIMES=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--ITERS=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--CPU_FORMAT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--CPU_FMT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FORMAT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FMT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if ((trim(psb_toupper(arg)) == '--NOOVERLAP') .or. (trim(psb_toupper(arg)) == '--NO_OVERLAP')) then + do_overlap = .false. + else if ((trim(psb_toupper(arg)) == '--OVERLAP') .or. (trim(psb_toupper(arg)) == '--SWAP')) then + do_overlap = .true. + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (k < command_argument_count()) call get_command_argument(k+1,matrix_file) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--MTX_FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--DIM') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--TIMES') .or. (trim(psb_toupper(arg)) == '--ITERS')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--CPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--CPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + cpu_fmt = psb_toupper(trim(arg)) + end if + else if ((trim(psb_toupper(arg)) == '--GPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--GPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + gpu_fmt = psb_toupper(trim(arg)) + end if + end if + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#else + use_gpu = .false. +#endif + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the psb_c_spmv_kernel sample program' + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'("Usage: ./psb_c_spmv_kernel [--gpu=TRUE|FALSE] [--dim=N] [--times=N] ",& + &"[--cpu_fmt=CSR|COO|CSC|ELL|HLL] [--gpu_fmt=HLL|ELL|CSR|HDIA] [--matrix=] [--fmt=MM|HB] ",& + &"[--overlap|--nooverlap] (runs all comm backends)")') + end if + + do kmode = 1, n_comm_modes + if (my_rank == psb_root_) then + write(psb_out_unit,'(/,"=== Backend sweep: ",a," ===")') trim(comm_modes(kmode)) + end if + call run_spmv_kernel(ctxt, use_gpu, matrix_file, matrix_fmt, cpu_fmt, gpu_fmt, & + & idim_arg, times_arg, do_overlap, comm_modes(kmode)) + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) +end program psb_c_spmv_kernel diff --git a/test/comm/spmv/psb_d_spmv_test.f90 b/test/comm/spmv/psb_d_spmv_test.f90 new file mode 100644 index 000000000..88b1cf9d3 --- /dev/null +++ b/test/comm/spmv/psb_d_spmv_test.f90 @@ -0,0 +1,917 @@ +!> Test program for overlapping communication and computation with psb_spmm. +!! +!! +module psb_dspmv_overlap_test + + use psb_base_mod + use psb_util_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + + implicit none + + interface + function d_func_3d(x,y,z) result(val) + import :: psb_dpk_ + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + end function d_func_3d + end interface + +contains + + + function d_null_func_3d(x,y,z) result(val) + + real(psb_dpk_), intent(in) :: x,y,z + real(psb_dpk_) :: val + + val = dzero + + end function d_null_func_3d + ! + ! functions parametrizing the differential equation + ! + + ! + ! Note: b1, b2 and b3 are the coefficients of the first + ! derivative of the unknown function. The default + ! we apply here is to have them zero, so that the resulting + ! matrix is symmetric/hermitian and suitable for + ! testing with CG and FCG. + ! When testing methods for non-hermitian matrices you can + ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) + ! + function b1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b1 + real(psb_dpk_), intent(in) :: x,y,z + b1=dzero + end function b1 + function b2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b2 + real(psb_dpk_), intent(in) :: x,y,z + b2=dzero + end function b2 + function b3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b3 + real(psb_dpk_), intent(in) :: x,y,z + b3=dzero + end function b3 + function c(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: c + real(psb_dpk_), intent(in) :: x,y,z + c=dzero + end function c + function a1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a1 + real(psb_dpk_), intent(in) :: x,y,z + a1=done/80 + end function a1 + function a2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a2 + real(psb_dpk_), intent(in) :: x,y,z + a2=done/80 + end function a2 + function a3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a3 + real(psb_dpk_), intent(in) :: x,y,z + a3=done/80 + end function a3 + function g(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: g + real(psb_dpk_), intent(in) :: x,y,z + g = dzero + if (x == done) then + g = done + else if (x == dzero) then + g = exp(y**2-z**2) + end if + end function g + + ! + ! subroutine to allocate and fill in the coefficient matrix and + ! the rhs. + ! + subroutine psb_d_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& + & f,amold,vmold,imold,partition,nrl,iv,tnd) + use psb_base_mod + use psb_util_mod + ! + ! Discretizes the partial differential equation + ! + ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) + ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f + ! dxdx dydy dzdz dx dy dz + ! + ! with Dirichlet boundary conditions + ! u = g + ! + ! on the unit cube 0<=x,y,z<=1. + ! + ! + ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. + ! + implicit none + integer(psb_ipk_) :: idim + type(psb_dspmat_type) :: a + type(psb_d_vect_type) :: xv,bv + type(psb_desc_type) :: desc_a + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: info + character(len=*) :: afmt + procedure(d_func_3d), optional :: f + class(psb_d_base_sparse_mat), optional :: amold + class(psb_d_base_vect_type), optional :: vmold + class(psb_i_base_vect_type), optional :: imold + integer(psb_ipk_), optional :: partition, nrl,iv(:) + logical, optional :: tnd + ! Local variables. + + integer(psb_ipk_), parameter :: nb=20 + type(psb_d_csc_sparse_mat) :: acsc + type(psb_d_coo_sparse_mat) :: acoo + type(psb_d_csr_sparse_mat) :: acsr + real(psb_dpk_) :: zt(nb) + real(psb_dpk_) :: x,y,z + integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ + integer(psb_lpk_) :: m,n,glob_row,nt + integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner + ! For 3D partition + ! Note: integer control variables going directly into an MPI call + ! must be 4 bytes, i.e. psb_mpk_ + integer(psb_mpk_) :: npdims(3), npp, minfo + integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz + integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) + ! Process grid + integer(psb_ipk_) :: np, iam, nth + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_dpk_), allocatable :: val(:) + ! deltah dimension of each grid cell + ! deltat discretization time + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + procedure(d_func_3d), pointer :: f_ + logical :: tnd_ + character(len=20) :: name, ch_err,tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + + if (present(f)) then + f_ => f + else + f_ => d_null_func_3d + end if + + deltah = done/(idim+1) + sqdeltah = deltah*deltah + deltah2 = (2*done)* deltah + + if (present(partition)) then + if ((1<= partition).and.(partition <= 3)) then + partition_ = partition + else + write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' + partition_ = 3 + end if + else + partition_ = 3 + end if + + tnd_ = .false. + if (present(tnd)) tnd_ = tnd + + ! initialize array descriptor and sparse matrix storage. provide an + ! estimate of the number of non zeroes + + m = (1_psb_lpk_*idim)*idim*idim + n = m + nnz = ((n*7)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + t0 = psb_wtime() + select case(partition_) + case(1) + ! A BLOCK partition + if (present(nrl)) then + nr = nrl + else + ! + ! Using a simple BLOCK distribution. + ! + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + end if + + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! First example of use of CDALL: specify for each process a number of + ! contiguous rows + ! + call psb_cdall(ctxt,desc_a,info,nl=nr) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(2) + ! A partition defined by the user through IV + + if (present(iv)) then + if (size(iv) /= m) then + write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + else + write(psb_err_unit,*) iam, 'Initialization error: IV not present' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! Second example of use of CDALL: specify for each row the + ! process that owns it + ! + call psb_cdall(ctxt,desc_a,info,vg=iv) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(3) + ! A 3-dimensional partition + + ! A nifty MPI function will split the process list + npdims = 0 + call mpi_dims_create(np,3,npdims,info) + npx = npdims(1) + npy = npdims(2) + npz = npdims(3) + + allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) + ! We can reuse idx2ijk for process indices as well. + call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) + ! Now let's split the 3D cube in hexahedra + call dist1Didx(bndx,idim,npx) + mynx = bndx(iamx+1)-bndx(iamx) + call dist1Didx(bndy,idim,npy) + myny = bndy(iamy+1)-bndy(iamy) + call dist1Didx(bndz,idim,npz) + mynz = bndz(iamz+1)-bndz(iamz) + + ! How many indices do I own? + nlr = mynx*myny*mynz + allocate(myidx(nlr)) + ! Now, let's generate the list of indices I own + nr = 0 + do i=bndx(iamx),bndx(iamx+1)-1 + do j=bndy(iamy),bndy(iamy+1)-1 + do k=bndz(iamz),bndz(iamz+1)-1 + nr = nr + 1 + call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) + end do + end do + end do + if (nr /= nlr) then + write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& + & nr,nlr,mynx,myny,mynz + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + end if + + ! + ! Third example of use of CDALL: specify for each process + ! the set of global indices it owns. + ! + call psb_cdall(ctxt,desc_a,info,vl=myidx) + + case default + write(psb_err_unit,*) iam, 'Initialization error: should not get here' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end select + + + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! define rhs from boundary conditions; also build initial guess + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + ! we build an auxiliary matrix consisting of one row at a + ! time; just a small matrix. might be extended to generate + ! a bunch of rows per call. + ! + allocate(val(20*nb),irow(20*nb),& + &icol(20*nb),stat=info) + if (info /= psb_success_ ) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + + ! loop over rows belonging to current process in a block + ! distribution. + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + ! local matrix pointer + glob_row=myidx(i) + ! compute gridpoint coordinates + call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) + ! x, y, z coordinates + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = f_(x,y,z) + ! internal point: build discretization + ! + ! term depending on (x-1,y,z) + ! + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y-1,z) + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y,z-1) + val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + ! term depending on (x,y,z) + val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & + & + c(x,y,z) + call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + ! term depending on (x,y,z+1) + val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y+1,z) + val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x+1,y,z) + val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix==idim) then + zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + end do + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=dzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + if (present(imold)) then + call psb_cdasb(desc_a,info,mold=imold) + else + call psb_cdasb(desc_a,info) + end if + tcdasb = psb_wtime()-t1 + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) then + if (present(amold)) then + call psb_spasb(a,desc_a,info,mold=amold) + else + call psb_spasb(a,desc_a,info,afmt=afmt) + end if + end if + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) then + if (present(vmold)) then + call psb_geasb(xv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + else + call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + end if + end if + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& + & tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psb_d_gen_pde3d + + subroutine run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_in,times_in,do_swap,comm_mode) + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type), intent(in) :: ctxt + logical, intent(in) :: use_gpu + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + character(len=*), intent(in) :: cpu_fmt + character(len=*), intent(in) :: gpu_fmt + integer(psb_ipk_), intent(in) :: idim_in, times_in + logical, intent(in) :: do_swap + character(len=*), intent(in) :: comm_mode + + type(psb_dspmat_type) :: a + type(psb_d_vect_type) :: x, y + type(psb_desc_type) :: desc_a + character(len=8) :: afmt + character(len=64) :: env_buf + integer(psb_ipk_) :: my_rank, np, info, err_act + integer(psb_ipk_) :: idim, times, i + integer :: env_len, env_status, ios + real(psb_dpk_) :: alpha, beta + real(psb_dpk_) :: t0, t1, dt, avg_t + logical :: use_external_matrix + + integer(psb_ipk_) :: comm_type + +#ifdef PSB_HAVE_CUDA + type(psb_d_vect_cuda) :: cuda_vector_mold + type(psb_i_vect_cuda) :: cuda_index_mold + type(psb_d_cuda_elg_sparse_mat), target :: cuda_ell_sparse_mold + type(psb_d_cuda_csrg_sparse_mat), target :: cuda_csr_sparse_mold + type(psb_d_cuda_hdiag_sparse_mat), target :: cuda_hdia_sparse_mold + type(psb_d_cuda_hlg_sparse_mat), target :: cuda_hll_sparse_mold + class(psb_d_base_sparse_mat), pointer :: cuda_sparse_mold +#endif + + select case(psb_toupper(trim(comm_mode))) + case('P2P','ISEND_IRECV') + comm_type = psb_comm_isend_irecv_ + case('NEIGHBOR','INEIGHBOR_ALLTOALLV') + comm_type = psb_comm_ineighbor_alltoallv_ + case('PNEIGHBOR','PERSISTENT','PERSISTENT_INEIGHBOR_A2AV') + comm_type = psb_comm_persistent_ineighbor_alltoallv_ + case('MPI_GET','RMA_PULL') + comm_type = psb_comm_rma_pull_ + case('MPI_PUT','RMA_PUSH') + comm_type = psb_comm_rma_push_ + case default + comm_type = psb_comm_isend_irecv_ + if (my_rank == psb_root_) then + write(psb_err_unit,'("Unknown comm backend: ",a,", defaulting to P2P")') trim(comm_mode) + end if + end select + + info = psb_success_ + afmt = psb_toupper(trim(cpu_fmt)) + if (len_trim(afmt) == 0) afmt = 'CSR' + if (idim_in > 0) then + idim = idim_in + else + idim = 10 + end if + + if (times_in > 0) then + times = times_in + else + times = 100 + end if + alpha = done + beta = dzero + + call psb_erractionsave(err_act) + call psb_info(ctxt, my_rank, np) + use_external_matrix = (len_trim(matrix_file) > 0) + + if (idim_in <= 0) then + call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) idim + if ((ios /= 0) .or. (idim < 2)) idim = 10 + end if + end if + + if (times_in <= 0) then + call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) times + if ((ios /= 0) .or. (times < 1)) times = 100 + end if + end if + + call psb_barrier(ctxt) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, y, x, desc_a, afmt, info) + else + call psb_d_gen_pde3d(ctxt,idim,a,y,x,desc_a,afmt,info) + end if + if (info /= psb_success_) goto 9999 + + call psb_comm_set(comm_type,x%v%comm_handle,info) + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + select case(psb_toupper(trim(gpu_fmt))) + case('ELG') + cuda_sparse_mold => cuda_ell_sparse_mold + case('CSRG') + cuda_sparse_mold => cuda_csr_sparse_mold + case('HDIAG','HDIA') + cuda_sparse_mold => cuda_hdia_sparse_mold + case default + cuda_sparse_mold => cuda_hll_sparse_mold + end select + call a%cscnv(info,mold=cuda_sparse_mold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=cuda_index_mold) + if (info /= psb_success_) goto 9999 + call x%cnv(mold=cuda_vector_mold) + if (info /= psb_success_) goto 9999 + call y%cnv(mold=cuda_vector_mold) + if (info /= psb_success_) goto 9999 + end if +#endif + + ! warm-up + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) + if (info /= psb_success_) exit + end do + t1 = psb_wtime() + if (info /= psb_success_) goto 9999 + + dt = t1 - t0 + call psb_amx(ctxt, dt) + avg_t = dt / real(times, psb_dpk_) + + if (my_rank == psb_root_) then + if (do_swap) then + write(psb_out_unit,'(/,"SpMV benchmark (overlap)")') + else + write(psb_out_unit,'(/,"SpMV benchmark (no overlap)")') + end if + write(psb_out_unit,'(" cpu matrix fmt : ",a)') trim(afmt) + if (use_gpu) write(psb_out_unit,'(" gpu matrix fmt : ",a)') trim(psb_toupper(trim(gpu_fmt))) + if (use_external_matrix) then + write(psb_out_unit,'(" matrix file : ",a)') trim(matrix_file) + write(psb_out_unit,'(" matrix format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" idim : ",i0)') idim + end if + write(psb_out_unit,'(" global non zeros : ",i0)') a%get_nzeros() + write(psb_out_unit,'(" global rows : ",i0)') a%get_nrows() + write(psb_out_unit,'(" global cols : ",i0)') a%get_ncols() + write(psb_out_unit,'(" repetitions : ",i0)') times + write(psb_out_unit,'(" comm backend : ",a)') trim(psb_toupper(trim(comm_mode))) + write(psb_out_unit,'(" total time [s] : ",es12.5)') dt + write(psb_out_unit,'(" avg time [s] : ",es12.5)') avg_t + end if + + call psb_gefree(y, desc_a, info) + call psb_gefree(x, desc_a, info) + call psb_spfree(a, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_erractionrestore(err_act) + return + +9999 call psb_error(ctxt) + call psb_error_handler(ctxt, err_act) + end subroutine run_spmv_kernel + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_dspmat_type), intent(out) :: a + type(psb_d_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_ldspmat_type) :: aux_a + real(psb_dpk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = done + x_glob = dzero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + +end module psb_dspmv_overlap_test + +program psb_d_spmv_kernel + use psb_dspmv_overlap_test + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type) :: ctxt + logical :: use_gpu + integer(psb_ipk_) :: my_rank, np, k + integer :: ios + character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=8) :: cpu_fmt + character(len=8) :: gpu_fmt + integer(psb_ipk_) :: idim_arg, times_arg + logical :: do_overlap + integer :: kmode + integer, parameter :: n_comm_modes = 5 + character(len=20), parameter :: comm_modes(n_comm_modes) = [character(len=20) :: & + & 'P2P', 'NEIGHBOR', 'PNEIGHBOR', 'MPI_GET', 'MPI_PUT'] + + idim_arg = -1 + times_arg = -1 + + matrix_file = '' + matrix_fmt = 'MM' + cpu_fmt = 'CSR' + gpu_fmt = 'HLG' + do_overlap = .true. + + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + + do k = 1, command_argument_count() + call get_command_argument(k, arg) + if (index(psb_toupper(trim(arg)), '--GPU=') == 1) then + select case (psb_toupper(adjustl(arg(7:len_trim(arg))))) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + end select + else if (index(psb_toupper(trim(arg)), '--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (index(psb_toupper(trim(arg)), '--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--MTX_FMT=') == 1) then + arg = psb_toupper(adjustl(arg(10:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--DIM=') == 1) then + read(arg(7:len_trim(arg)),*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + else if (index(psb_toupper(trim(arg)), '--TIMES=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--ITERS=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--CPU_FORMAT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--CPU_FMT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FORMAT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FMT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if ((trim(psb_toupper(arg)) == '--NOOVERLAP') .or. (trim(psb_toupper(arg)) == '--NO_OVERLAP')) then + do_overlap = .false. + else if ((trim(psb_toupper(arg)) == '--OVERLAP') .or. (trim(psb_toupper(arg)) == '--SWAP')) then + do_overlap = .true. + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (k < command_argument_count()) call get_command_argument(k+1,matrix_file) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--MTX_FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--DIM') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--TIMES') .or. (trim(psb_toupper(arg)) == '--ITERS')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--CPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--CPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + cpu_fmt = psb_toupper(trim(arg)) + end if + else if ((trim(psb_toupper(arg)) == '--GPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--GPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + gpu_fmt = psb_toupper(trim(arg)) + end if + end if + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#else + use_gpu = .false. +#endif + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the psb_d_spmv_kernel sample program' + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'("Usage: ./psb_d_spmv_kernel [--gpu=TRUE|FALSE] [--dim=N] [--times=N] ",& + &"[--cpu_fmt=CSR|COO|CSC|ELL|HLL] [--gpu_fmt=HLL|ELL|CSR|HDIA] [--matrix=] [--fmt=MM|HB] ",& + &"[--overlap|--nooverlap] (runs all comm backends)")') + end if + + do kmode = 1, n_comm_modes + if (my_rank == psb_root_) then + write(psb_out_unit,'(/,"=== Backend sweep: ",a," ===")') trim(comm_modes(kmode)) + end if + call run_spmv_kernel(ctxt, use_gpu, matrix_file, matrix_fmt, cpu_fmt, gpu_fmt, & + & idim_arg, times_arg, do_overlap, comm_modes(kmode)) + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) +end program psb_d_spmv_kernel diff --git a/test/comm/spmv/psb_s_spmv_test.f90 b/test/comm/spmv/psb_s_spmv_test.f90 new file mode 100644 index 000000000..95c79cc1c --- /dev/null +++ b/test/comm/spmv/psb_s_spmv_test.f90 @@ -0,0 +1,917 @@ +!> Test program for overlapping communication and computation with psb_spmm. +!! +!! +module psb_sspmv_overlap_test + + use psb_base_mod + use psb_util_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + + implicit none + + interface + function s_func_3d(x,y,z) result(val) + import :: psb_spk_ + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + end function s_func_3d + end interface + +contains + + + function s_null_func_3d(x,y,z) result(val) + + real(psb_spk_), intent(in) :: x,y,z + real(psb_spk_) :: val + + val = szero + + end function s_null_func_3d + ! + ! functions parametrizing the differential equation + ! + + ! + ! Note: b1, b2 and b3 are the coefficients of the first + ! derivative of the unknown function. The default + ! we apply here is to have them zero, so that the resulting + ! matrix is symmetric/hermitian and suitable for + ! testing with CG and FCG. + ! When testing methods for non-hermitian matrices you can + ! change the B1/B2/B3 functions to e.g. sone/sqrt((3*sone)) + ! + function b1(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: b1 + real(psb_spk_), intent(in) :: x,y,z + b1=szero + end function b1 + function b2(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: b2 + real(psb_spk_), intent(in) :: x,y,z + b2=szero + end function b2 + function b3(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: b3 + real(psb_spk_), intent(in) :: x,y,z + b3=szero + end function b3 + function c(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: c + real(psb_spk_), intent(in) :: x,y,z + c=szero + end function c + function a1(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: a1 + real(psb_spk_), intent(in) :: x,y,z + a1=sone/80 + end function a1 + function a2(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: a2 + real(psb_spk_), intent(in) :: x,y,z + a2=sone/80 + end function a2 + function a3(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: a3 + real(psb_spk_), intent(in) :: x,y,z + a3=sone/80 + end function a3 + function g(x,y,z) + use psb_base_mod, only : psb_spk_, sone, szero + implicit none + real(psb_spk_) :: g + real(psb_spk_), intent(in) :: x,y,z + g = szero + if (x == sone) then + g = sone + else if (x == szero) then + g = exp(y**2-z**2) + end if + end function g + + ! + ! subroutine to allocate and fill in the coefficient matrix and + ! the rhs. + ! + subroutine psb_s_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& + & f,amold,vmold,imold,partition,nrl,iv,tnd) + use psb_base_mod + use psb_util_mod + ! + ! Discretizes the partial differential equation + ! + ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) + ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f + ! dxdx dydy dzdz dx dy dz + ! + ! with Dirichlet boundary conditions + ! u = g + ! + ! on the unit cube 0<=x,y,z<=1. + ! + ! + ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. + ! + implicit none + integer(psb_ipk_) :: idim + type(psb_sspmat_type) :: a + type(psb_s_vect_type) :: xv,bv + type(psb_desc_type) :: desc_a + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: info + character(len=*) :: afmt + procedure(s_func_3d), optional :: f + class(psb_s_base_sparse_mat), optional :: amold + class(psb_s_base_vect_type), optional :: vmold + class(psb_i_base_vect_type), optional :: imold + integer(psb_ipk_), optional :: partition, nrl,iv(:) + logical, optional :: tnd + ! Local variables. + + integer(psb_ipk_), parameter :: nb=20 + type(psb_s_csc_sparse_mat) :: acsc + type(psb_s_coo_sparse_mat) :: acoo + type(psb_s_csr_sparse_mat) :: acsr + real(psb_spk_) :: zt(nb) + real(psb_spk_) :: x,y,z + integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ + integer(psb_lpk_) :: m,n,glob_row,nt + integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner + ! For 3D partition + ! Note: integer control variables going directly into an MPI call + ! must be 4 bytes, i.e. psb_mpk_ + integer(psb_mpk_) :: npdims(3), npp, minfo + integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz + integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) + ! Process grid + integer(psb_ipk_) :: np, iam, nth + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + real(psb_spk_), allocatable :: val(:) + ! deltah dimension of each grid cell + ! deltat discretization time + real(psb_spk_) :: deltah, sqdeltah, deltah2 + real(psb_spk_), parameter :: rhs=szero,one=sone,zero=szero + real(psb_spk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + procedure(s_func_3d), pointer :: f_ + logical :: tnd_ + character(len=20) :: name, ch_err,tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + + if (present(f)) then + f_ => f + else + f_ => s_null_func_3d + end if + + deltah = sone/(idim+1) + sqdeltah = deltah*deltah + deltah2 = (2*sone)* deltah + + if (present(partition)) then + if ((1<= partition).and.(partition <= 3)) then + partition_ = partition + else + write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' + partition_ = 3 + end if + else + partition_ = 3 + end if + + tnd_ = .false. + if (present(tnd)) tnd_ = tnd + + ! initialize array descriptor and sparse matrix storage. provide an + ! estimate of the number of non zeroes + + m = (1_psb_lpk_*idim)*idim*idim + n = m + nnz = ((n*7)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + t0 = psb_wtime() + select case(partition_) + case(1) + ! A BLOCK partition + if (present(nrl)) then + nr = nrl + else + ! + ! Using a simple BLOCK distribution. + ! + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + end if + + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! First example of use of CDALL: specify for each process a number of + ! contiguous rows + ! + call psb_cdall(ctxt,desc_a,info,nl=nr) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(2) + ! A partition defined by the user through IV + + if (present(iv)) then + if (size(iv) /= m) then + write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + else + write(psb_err_unit,*) iam, 'Initialization error: IV not present' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! Second example of use of CDALL: specify for each row the + ! process that owns it + ! + call psb_cdall(ctxt,desc_a,info,vg=iv) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(3) + ! A 3-dimensional partition + + ! A nifty MPI function will split the process list + npdims = 0 + call mpi_dims_create(np,3,npdims,info) + npx = npdims(1) + npy = npdims(2) + npz = npdims(3) + + allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) + ! We can reuse idx2ijk for process indices as well. + call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) + ! Now let's split the 3D cube in hexahedra + call dist1Didx(bndx,idim,npx) + mynx = bndx(iamx+1)-bndx(iamx) + call dist1Didx(bndy,idim,npy) + myny = bndy(iamy+1)-bndy(iamy) + call dist1Didx(bndz,idim,npz) + mynz = bndz(iamz+1)-bndz(iamz) + + ! How many indices do I own? + nlr = mynx*myny*mynz + allocate(myidx(nlr)) + ! Now, let's generate the list of indices I own + nr = 0 + do i=bndx(iamx),bndx(iamx+1)-1 + do j=bndy(iamy),bndy(iamy+1)-1 + do k=bndz(iamz),bndz(iamz+1)-1 + nr = nr + 1 + call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) + end do + end do + end do + if (nr /= nlr) then + write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& + & nr,nlr,mynx,myny,mynz + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + end if + + ! + ! Third example of use of CDALL: specify for each process + ! the set of global indices it owns. + ! + call psb_cdall(ctxt,desc_a,info,vl=myidx) + + case default + write(psb_err_unit,*) iam, 'Initialization error: should not get here' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end select + + + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! define rhs from boundary conditions; also build initial guess + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + ! we build an auxiliary matrix consisting of one row at a + ! time; just a small matrix. might be extended to generate + ! a bunch of rows per call. + ! + allocate(val(20*nb),irow(20*nb),& + &icol(20*nb),stat=info) + if (info /= psb_success_ ) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + + ! loop over rows belonging to current process in a block + ! distribution. + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + ! local matrix pointer + glob_row=myidx(i) + ! compute gridpoint coordinates + call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) + ! x, y, z coordinates + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = f_(x,y,z) + ! internal point: build discretization + ! + ! term depending on (x-1,y,z) + ! + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = g(szero,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y-1,z) + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = g(x,szero,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y,z-1) + val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = g(x,y,szero)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + ! term depending on (x,y,z) + val(icoeff)=(2*sone)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & + & + c(x,y,z) + call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + ! term depending on (x,y,z+1) + val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = g(x,y,sone)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y+1,z) + val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = g(x,sone,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x+1,y,z) + val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix==idim) then + zt(k) = g(sone,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + end do + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=szero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + if (present(imold)) then + call psb_cdasb(desc_a,info,mold=imold) + else + call psb_cdasb(desc_a,info) + end if + tcdasb = psb_wtime()-t1 + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) then + if (present(amold)) then + call psb_spasb(a,desc_a,info,mold=amold) + else + call psb_spasb(a,desc_a,info,afmt=afmt) + end if + end if + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) then + if (present(vmold)) then + call psb_geasb(xv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + else + call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + end if + end if + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& + & tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psb_s_gen_pde3d + + subroutine run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_in,times_in,do_swap,comm_mode) + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type), intent(in) :: ctxt + logical, intent(in) :: use_gpu + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + character(len=*), intent(in) :: cpu_fmt + character(len=*), intent(in) :: gpu_fmt + integer(psb_ipk_), intent(in) :: idim_in, times_in + logical, intent(in) :: do_swap + character(len=*), intent(in) :: comm_mode + + type(psb_sspmat_type) :: a + type(psb_s_vect_type) :: x, y + type(psb_desc_type) :: desc_a + character(len=8) :: afmt + character(len=64) :: env_buf + integer(psb_ipk_) :: my_rank, np, info, err_act + integer(psb_ipk_) :: idim, times, i + integer :: env_len, env_status, ios + real(psb_spk_) :: alpha, beta + real(psb_spk_) :: t0, t1, dt, avg_t + logical :: use_external_matrix + + integer(psb_ipk_) :: comm_type + +#ifdef PSB_HAVE_CUDA + type(psb_s_vect_cuda) :: cuda_vector_mold + type(psb_i_vect_cuda) :: cuda_index_mold + type(psb_s_cuda_elg_sparse_mat), target :: cuda_ell_sparse_mold + type(psb_s_cuda_csrg_sparse_mat), target :: cuda_csr_sparse_mold + type(psb_s_cuda_hdiag_sparse_mat), target :: cuda_hdia_sparse_mold + type(psb_s_cuda_hlg_sparse_mat), target :: cuda_hll_sparse_mold + class(psb_s_base_sparse_mat), pointer :: cuda_sparse_mold +#endif + + select case(psb_toupper(trim(comm_mode))) + case('P2P','ISEND_IRECV') + comm_type = psb_comm_isend_irecv_ + case('NEIGHBOR','INEIGHBOR_ALLTOALLV') + comm_type = psb_comm_ineighbor_alltoallv_ + case('PNEIGHBOR','PERSISTENT','PERSISTENT_INEIGHBOR_A2AV') + comm_type = psb_comm_persistent_ineighbor_alltoallv_ + case('MPI_GET','RMA_PULL') + comm_type = psb_comm_rma_pull_ + case('MPI_PUT','RMA_PUSH') + comm_type = psb_comm_rma_push_ + case default + comm_type = psb_comm_isend_irecv_ + if (my_rank == psb_root_) then + write(psb_err_unit,'("Unknown comm backend: ",a,", defaulting to P2P")') trim(comm_mode) + end if + end select + + info = psb_success_ + afmt = psb_toupper(trim(cpu_fmt)) + if (len_trim(afmt) == 0) afmt = 'CSR' + if (idim_in > 0) then + idim = idim_in + else + idim = 10 + end if + + if (times_in > 0) then + times = times_in + else + times = 100 + end if + alpha = sone + beta = szero + + call psb_erractionsave(err_act) + call psb_info(ctxt, my_rank, np) + use_external_matrix = (len_trim(matrix_file) > 0) + + if (idim_in <= 0) then + call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) idim + if ((ios /= 0) .or. (idim < 2)) idim = 10 + end if + end if + + if (times_in <= 0) then + call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) times + if ((ios /= 0) .or. (times < 1)) times = 100 + end if + end if + + call psb_barrier(ctxt) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, y, x, desc_a, afmt, info) + else + call psb_s_gen_pde3d(ctxt,idim,a,y,x,desc_a,afmt,info) + end if + if (info /= psb_success_) goto 9999 + + call psb_comm_set(comm_type,x%v%comm_handle,info) + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + select case(psb_toupper(trim(gpu_fmt))) + case('ELG') + cuda_sparse_mold => cuda_ell_sparse_mold + case('CSRG') + cuda_sparse_mold => cuda_csr_sparse_mold + case('HDIAG','HDIA') + cuda_sparse_mold => cuda_hdia_sparse_mold + case default + cuda_sparse_mold => cuda_hll_sparse_mold + end select + call a%cscnv(info,mold=cuda_sparse_mold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=cuda_index_mold) + if (info /= psb_success_) goto 9999 + call x%cnv(mold=cuda_vector_mold) + if (info /= psb_success_) goto 9999 + call y%cnv(mold=cuda_vector_mold) + if (info /= psb_success_) goto 9999 + end if +#endif + + ! warm-up + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) + if (info /= psb_success_) exit + end do + t1 = psb_wtime() + if (info /= psb_success_) goto 9999 + + dt = t1 - t0 + call psb_amx(ctxt, dt) + avg_t = dt / real(times, psb_spk_) + + if (my_rank == psb_root_) then + if (do_swap) then + write(psb_out_unit,'(/,"SpMV benchmark (overlap)")') + else + write(psb_out_unit,'(/,"SpMV benchmark (no overlap)")') + end if + write(psb_out_unit,'(" cpu matrix fmt : ",a)') trim(afmt) + if (use_gpu) write(psb_out_unit,'(" gpu matrix fmt : ",a)') trim(psb_toupper(trim(gpu_fmt))) + if (use_external_matrix) then + write(psb_out_unit,'(" matrix file : ",a)') trim(matrix_file) + write(psb_out_unit,'(" matrix format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" idim : ",i0)') idim + end if + write(psb_out_unit,'(" global non zeros : ",i0)') a%get_nzeros() + write(psb_out_unit,'(" global rows : ",i0)') a%get_nrows() + write(psb_out_unit,'(" global cols : ",i0)') a%get_ncols() + write(psb_out_unit,'(" repetitions : ",i0)') times + write(psb_out_unit,'(" comm backend : ",a)') trim(psb_toupper(trim(comm_mode))) + write(psb_out_unit,'(" total time [s] : ",es12.5)') dt + write(psb_out_unit,'(" avg time [s] : ",es12.5)') avg_t + end if + + call psb_gefree(y, desc_a, info) + call psb_gefree(x, desc_a, info) + call psb_spfree(a, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_erractionrestore(err_act) + return + +9999 call psb_error(ctxt) + call psb_error_handler(ctxt, err_act) + end subroutine run_spmv_kernel + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_sspmat_type), intent(out) :: a + type(psb_s_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_lsspmat_type) :: aux_a + real(psb_spk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = sone + x_glob = szero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + +end module psb_sspmv_overlap_test + +program psb_s_spmv_kernel + use psb_sspmv_overlap_test + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type) :: ctxt + logical :: use_gpu + integer(psb_ipk_) :: my_rank, np, k + integer :: ios + character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=8) :: cpu_fmt + character(len=8) :: gpu_fmt + integer(psb_ipk_) :: idim_arg, times_arg + logical :: do_overlap + integer :: kmode + integer, parameter :: n_comm_modes = 5 + character(len=20), parameter :: comm_modes(n_comm_modes) = [character(len=20) :: & + & 'P2P', 'NEIGHBOR', 'PNEIGHBOR', 'MPI_GET', 'MPI_PUT'] + + idim_arg = -1 + times_arg = -1 + + matrix_file = '' + matrix_fmt = 'MM' + cpu_fmt = 'CSR' + gpu_fmt = 'HLG' + do_overlap = .true. + + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + + do k = 1, command_argument_count() + call get_command_argument(k, arg) + if (index(psb_toupper(trim(arg)), '--GPU=') == 1) then + select case (psb_toupper(adjustl(arg(7:len_trim(arg))))) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + end select + else if (index(psb_toupper(trim(arg)), '--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (index(psb_toupper(trim(arg)), '--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--MTX_FMT=') == 1) then + arg = psb_toupper(adjustl(arg(10:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--DIM=') == 1) then + read(arg(7:len_trim(arg)),*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + else if (index(psb_toupper(trim(arg)), '--TIMES=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--ITERS=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--CPU_FORMAT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--CPU_FMT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FORMAT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FMT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if ((trim(psb_toupper(arg)) == '--NOOVERLAP') .or. (trim(psb_toupper(arg)) == '--NO_OVERLAP')) then + do_overlap = .false. + else if ((trim(psb_toupper(arg)) == '--OVERLAP') .or. (trim(psb_toupper(arg)) == '--SWAP')) then + do_overlap = .true. + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (k < command_argument_count()) call get_command_argument(k+1,matrix_file) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--MTX_FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--DIM') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--TIMES') .or. (trim(psb_toupper(arg)) == '--ITERS')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--CPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--CPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + cpu_fmt = psb_toupper(trim(arg)) + end if + else if ((trim(psb_toupper(arg)) == '--GPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--GPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + gpu_fmt = psb_toupper(trim(arg)) + end if + end if + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#else + use_gpu = .false. +#endif + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the psb_s_spmv_kernel sample program' + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'("Usage: ./psb_s_spmv_kernel [--gpu=TRUE|FALSE] [--dim=N] [--times=N] ",& + &"[--cpu_fmt=CSR|COO|CSC|ELL|HLL] [--gpu_fmt=HLL|ELL|CSR|HDIA] [--matrix=] [--fmt=MM|HB] ",& + &"[--overlap|--nooverlap] (runs all comm backends)")') + end if + + do kmode = 1, n_comm_modes + if (my_rank == psb_root_) then + write(psb_out_unit,'(/,"=== Backend sweep: ",a," ===")') trim(comm_modes(kmode)) + end if + call run_spmv_kernel(ctxt, use_gpu, matrix_file, matrix_fmt, cpu_fmt, gpu_fmt, & + & idim_arg, times_arg, do_overlap, comm_modes(kmode)) + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) +end program psb_s_spmv_kernel diff --git a/test/comm/spmv/psb_z_spmv_test.f90 b/test/comm/spmv/psb_z_spmv_test.f90 new file mode 100644 index 000000000..5e41c8f30 --- /dev/null +++ b/test/comm/spmv/psb_z_spmv_test.f90 @@ -0,0 +1,917 @@ +!> Test program for overlapping communication and computation with psb_spmm. +!! +!! +module psb_zspmv_overlap_test + + use psb_base_mod + use psb_util_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + + implicit none + + interface + function z_func_3d(x,y,z) result(val) + import :: psb_dpk_ + real(psb_dpk_), intent(in) :: x,y,z + complex(psb_dpk_) :: val + end function z_func_3d + end interface + +contains + + + function z_null_func_3d(x,y,z) result(val) + + real(psb_dpk_), intent(in) :: x,y,z + complex(psb_dpk_) :: val + + val = zzero + + end function z_null_func_3d + ! + ! functions parametrizing the differential equation + ! + + ! + ! Note: b1, b2 and b3 are the coefficients of the first + ! derivative of the unknown function. The default + ! we apply here is to have them zero, so that the resulting + ! matrix is symmetric/hermitian and suitable for + ! testing with CG and FCG. + ! When testing methods for non-hermitian matrices you can + ! change the B1/B2/B3 functions to e.g. done/sqrt((3*done)) + ! + function b1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b1 + real(psb_dpk_), intent(in) :: x,y,z + b1=dzero + end function b1 + function b2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b2 + real(psb_dpk_), intent(in) :: x,y,z + b2=dzero + end function b2 + function b3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: b3 + real(psb_dpk_), intent(in) :: x,y,z + b3=dzero + end function b3 + function c(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: c + real(psb_dpk_), intent(in) :: x,y,z + c=dzero + end function c + function a1(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a1 + real(psb_dpk_), intent(in) :: x,y,z + a1=done/80 + end function a1 + function a2(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a2 + real(psb_dpk_), intent(in) :: x,y,z + a2=done/80 + end function a2 + function a3(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: a3 + real(psb_dpk_), intent(in) :: x,y,z + a3=done/80 + end function a3 + function g(x,y,z) + use psb_base_mod, only : psb_dpk_, done, dzero + implicit none + real(psb_dpk_) :: g + real(psb_dpk_), intent(in) :: x,y,z + g = dzero + if (x == done) then + g = done + else if (x == dzero) then + g = exp(y**2-z**2) + end if + end function g + + ! + ! subroutine to allocate and fill in the coefficient matrix and + ! the rhs. + ! + subroutine psb_z_gen_pde3d(ctxt,idim,a,bv,xv,desc_a,afmt,info,& + & f,amold,vmold,imold,partition,nrl,iv,tnd) + use psb_base_mod + use psb_util_mod + ! + ! Discretizes the partial differential equation + ! + ! a1 dd(u) a2 dd(u) a3 dd(u) b1 d(u) b2 d(u) b3 d(u) + ! - ------ - ------ - ------ + ----- + ------ + ------ + c u = f + ! dxdx dydy dzdz dx dy dz + ! + ! with Dirichlet boundary conditions + ! u = g + ! + ! on the unit cube 0<=x,y,z<=1. + ! + ! + ! Note that if b1=b2=b3=c=0., the PDE is the Laplace equation. + ! + implicit none + integer(psb_ipk_) :: idim + type(psb_zspmat_type) :: a + type(psb_z_vect_type) :: xv,bv + type(psb_desc_type) :: desc_a + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: info + character(len=*) :: afmt + procedure(z_func_3d), optional :: f + class(psb_z_base_sparse_mat), optional :: amold + class(psb_z_base_vect_type), optional :: vmold + class(psb_i_base_vect_type), optional :: imold + integer(psb_ipk_), optional :: partition, nrl,iv(:) + logical, optional :: tnd + ! Local variables. + + integer(psb_ipk_), parameter :: nb=20 + type(psb_z_csc_sparse_mat) :: acsc + type(psb_z_coo_sparse_mat) :: acoo + type(psb_z_csr_sparse_mat) :: acsr + complex(psb_dpk_) :: zt(nb) + real(psb_dpk_) :: x,y,z + integer(psb_ipk_) :: nnz,nr,nlr,i,j,ii,ib,k, partition_ + integer(psb_lpk_) :: m,n,glob_row,nt + integer(psb_ipk_) :: ix,iy,iz,ia,indx_owner + ! For 3D partition + ! Note: integer control variables going directly into an MPI call + ! must be 4 bytes, i.e. psb_mpk_ + integer(psb_mpk_) :: npdims(3), npp, minfo + integer(psb_ipk_) :: npx,npy,npz, iamx,iamy,iamz,mynx,myny,mynz + integer(psb_ipk_), allocatable :: bndx(:),bndy(:),bndz(:) + ! Process grid + integer(psb_ipk_) :: np, iam, nth + integer(psb_ipk_) :: icoeff + integer(psb_lpk_), allocatable :: irow(:),icol(:),myidx(:) + complex(psb_dpk_), allocatable :: val(:) + ! deltah dimension of each grid cell + ! deltat discretization time + real(psb_dpk_) :: deltah, sqdeltah, deltah2 + real(psb_dpk_), parameter :: rhs=dzero,one=done,zero=dzero + real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen, tcdasb + integer(psb_ipk_) :: err_act + procedure(z_func_3d), pointer :: f_ + logical :: tnd_ + character(len=20) :: name, ch_err,tmpfmt + + info = psb_success_ + name = 'create_matrix' + call psb_erractionsave(err_act) + + call psb_info(ctxt, iam, np) + + + if (present(f)) then + f_ => f + else + f_ => z_null_func_3d + end if + + deltah = done/(idim+1) + sqdeltah = deltah*deltah + deltah2 = (2*done)* deltah + + if (present(partition)) then + if ((1<= partition).and.(partition <= 3)) then + partition_ = partition + else + write(*,*) 'Invalid partition choice ',partition,' defaulting to 3' + partition_ = 3 + end if + else + partition_ = 3 + end if + + tnd_ = .false. + if (present(tnd)) tnd_ = tnd + + ! initialize array descriptor and sparse matrix storage. provide an + ! estimate of the number of non zeroes + + m = (1_psb_lpk_*idim)*idim*idim + n = m + nnz = ((n*7)/(np)) + if(iam == psb_root_) write(psb_out_unit,'("Generating Matrix (size=",i0,")...")')n + t0 = psb_wtime() + select case(partition_) + case(1) + ! A BLOCK partition + if (present(nrl)) then + nr = nrl + else + ! + ! Using a simple BLOCK distribution. + ! + nt = (m+np-1)/np + nr = max(0,min(nt,m-(iam*nt))) + end if + + nt = nr + call psb_sum(ctxt,nt) + if (nt /= m) then + write(psb_err_unit,*) iam, 'Initialization error ',nr,nt,m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! First example of use of CDALL: specify for each process a number of + ! contiguous rows + ! + call psb_cdall(ctxt,desc_a,info,nl=nr) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(2) + ! A partition defined by the user through IV + + if (present(iv)) then + if (size(iv) /= m) then + write(psb_err_unit,*) iam, 'Initialization error: wrong IV size',size(iv),m + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + else + write(psb_err_unit,*) iam, 'Initialization error: IV not present' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end if + + ! + ! Second example of use of CDALL: specify for each row the + ! process that owns it + ! + call psb_cdall(ctxt,desc_a,info,vg=iv) + myidx = desc_a%get_global_indices() + nlr = size(myidx) + + case(3) + ! A 3-dimensional partition + + ! A nifty MPI function will split the process list + npdims = 0 + call mpi_dims_create(np,3,npdims,info) + npx = npdims(1) + npy = npdims(2) + npz = npdims(3) + + allocate(bndx(0:npx),bndy(0:npy),bndz(0:npz)) + ! We can reuse idx2ijk for process indices as well. + call idx2ijk(iamx,iamy,iamz,iam,npx,npy,npz,base=0) + ! Now let's split the 3D cube in hexahedra + call dist1Didx(bndx,idim,npx) + mynx = bndx(iamx+1)-bndx(iamx) + call dist1Didx(bndy,idim,npy) + myny = bndy(iamy+1)-bndy(iamy) + call dist1Didx(bndz,idim,npz) + mynz = bndz(iamz+1)-bndz(iamz) + + ! How many indices do I own? + nlr = mynx*myny*mynz + allocate(myidx(nlr)) + ! Now, let's generate the list of indices I own + nr = 0 + do i=bndx(iamx),bndx(iamx+1)-1 + do j=bndy(iamy),bndy(iamy+1)-1 + do k=bndz(iamz),bndz(iamz+1)-1 + nr = nr + 1 + call ijk2idx(myidx(nr),i,j,k,idim,idim,idim) + end do + end do + end do + if (nr /= nlr) then + write(psb_err_unit,*) iam,iamx,iamy,iamz, 'Initialization error: NR vs NLR ',& + & nr,nlr,mynx,myny,mynz + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + end if + + ! + ! Third example of use of CDALL: specify for each process + ! the set of global indices it owns. + ! + call psb_cdall(ctxt,desc_a,info,vl=myidx) + + case default + write(psb_err_unit,*) iam, 'Initialization error: should not get here' + info = -1 + call psb_barrier(ctxt) + call psb_abort(ctxt) + return + end select + + + if (info == psb_success_) call psb_spall(a,desc_a,info,nnz=nnz) + ! define rhs from boundary conditions; also build initial guess + if (info == psb_success_) call psb_geall(xv,desc_a,info) + if (info == psb_success_) call psb_geall(bv,desc_a,info) + + call psb_barrier(ctxt) + talc = psb_wtime()-t0 + + if (info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='allocation rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + ! we build an auxiliary matrix consisting of one row at a + ! time; just a small matrix. might be extended to generate + ! a bunch of rows per call. + ! + allocate(val(20*nb),irow(20*nb),& + &icol(20*nb),stat=info) + if (info /= psb_success_ ) then + info=psb_err_alloc_dealloc_ + call psb_errpush(info,name) + goto 9999 + endif + + + ! loop over rows belonging to current process in a block + ! distribution. + + call psb_barrier(ctxt) + t1 = psb_wtime() + do ii=1, nlr,nb + ib = min(nb,nlr-ii+1) + icoeff = 1 + do k=1,ib + i=ii+k-1 + ! local matrix pointer + glob_row=myidx(i) + ! compute gridpoint coordinates + call idx2ijk(ix,iy,iz,glob_row,idim,idim,idim) + ! x, y, z coordinates + x = (ix-1)*deltah + y = (iy-1)*deltah + z = (iz-1)*deltah + zt(k) = f_(x,y,z) + ! internal point: build discretization + ! + ! term depending on (x-1,y,z) + ! + val(icoeff) = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2 + if (ix == 1) then + zt(k) = g(dzero,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix-1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y-1,z) + val(icoeff) = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2 + if (iy == 1) then + zt(k) = g(x,dzero,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy-1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y,z-1) + val(icoeff)=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2 + if (iz == 1) then + zt(k) = g(x,y,dzero)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz-1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + ! term depending on (x,y,z) + val(icoeff)=(2*done)*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah & + & + c(x,y,z) + call ijk2idx(icol(icoeff),ix,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + ! term depending on (x,y,z+1) + val(icoeff)=-a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2 + if (iz == idim) then + zt(k) = g(x,y,done)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy,iz+1,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x,y+1,z) + val(icoeff)=-a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2 + if (iy == idim) then + zt(k) = g(x,done,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix,iy+1,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + ! term depending on (x+1,y,z) + val(icoeff)=-a1(x,y,z)/sqdeltah+b1(x,y,z)/deltah2 + if (ix==idim) then + zt(k) = g(done,y,z)*(-val(icoeff)) + zt(k) + else + call ijk2idx(icol(icoeff),ix+1,iy,iz,idim,idim,idim) + irow(icoeff) = glob_row + icoeff = icoeff+1 + endif + + end do + call psb_spins(icoeff-1,irow,icol,val,a,desc_a,info) + if(info /= psb_success_) exit + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),bv,desc_a,info) + if(info /= psb_success_) exit + zt(:)=zzero + call psb_geins(ib,myidx(ii:ii+ib-1),zt(1:ib),xv,desc_a,info) + if(info /= psb_success_) exit + end do + + tgen = psb_wtime()-t1 + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='insert rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + + deallocate(val,irow,icol) + + call psb_barrier(ctxt) + t1 = psb_wtime() + if (present(imold)) then + call psb_cdasb(desc_a,info,mold=imold) + else + call psb_cdasb(desc_a,info) + end if + tcdasb = psb_wtime()-t1 + call psb_barrier(ctxt) + t1 = psb_wtime() + if (info == psb_success_) then + if (present(amold)) then + call psb_spasb(a,desc_a,info,mold=amold) + else + call psb_spasb(a,desc_a,info,afmt=afmt) + end if + end if + call psb_barrier(ctxt) + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + if (info == psb_success_) then + if (present(vmold)) then + call psb_geasb(xv,desc_a,info,mold=vmold) + if (info == psb_success_) call psb_geasb(bv,desc_a,info,mold=vmold) + else + call psb_geasb(xv,desc_a,info) + if (info == psb_success_) call psb_geasb(bv,desc_a,info) + end if + end if + if(info /= psb_success_) then + info=psb_err_from_subroutine_ + ch_err='asb rout.' + call psb_errpush(info,name,a_err=ch_err) + goto 9999 + end if + tasb = psb_wtime()-t1 + call psb_barrier(ctxt) + ttot = psb_wtime() - t0 + + call psb_amx(ctxt,talc) + call psb_amx(ctxt,tgen) + call psb_amx(ctxt,tasb) + call psb_amx(ctxt,ttot) + if(iam == psb_root_) then + tmpfmt = a%get_fmt() + write(psb_out_unit,'("The matrix has been generated and assembled in ",a3," format.")')& + & tmpfmt + write(psb_out_unit,'("-allocation time : ",es12.5)') talc + write(psb_out_unit,'("-coeff. gen. time : ",es12.5)') tgen + write(psb_out_unit,'("-desc asbly time : ",es12.5)') tcdasb + write(psb_out_unit,'("- mat asbly time : ",es12.5)') tasb + write(psb_out_unit,'("-total time : ",es12.5)') ttot + + end if + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psb_z_gen_pde3d + + subroutine run_spmv_kernel(ctxt,use_gpu,matrix_file,matrix_fmt,cpu_fmt,gpu_fmt,idim_in,times_in,do_swap,comm_mode) + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type), intent(in) :: ctxt + logical, intent(in) :: use_gpu + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + character(len=*), intent(in) :: cpu_fmt + character(len=*), intent(in) :: gpu_fmt + integer(psb_ipk_), intent(in) :: idim_in, times_in + logical, intent(in) :: do_swap + character(len=*), intent(in) :: comm_mode + + type(psb_zspmat_type) :: a + type(psb_z_vect_type) :: x, y + type(psb_desc_type) :: desc_a + character(len=8) :: afmt + character(len=64) :: env_buf + integer(psb_ipk_) :: my_rank, np, info, err_act + integer(psb_ipk_) :: idim, times, i + integer :: env_len, env_status, ios + complex(psb_dpk_) :: alpha, beta + real(psb_dpk_) :: t0, t1, dt, avg_t + logical :: use_external_matrix + + integer(psb_ipk_) :: comm_type + +#ifdef PSB_HAVE_CUDA + type(psb_z_vect_cuda) :: cuda_vector_mold + type(psb_i_vect_cuda) :: cuda_index_mold + type(psb_z_cuda_elg_sparse_mat), target :: cuda_ell_sparse_mold + type(psb_z_cuda_csrg_sparse_mat), target :: cuda_csr_sparse_mold + type(psb_z_cuda_hdiag_sparse_mat), target :: cuda_hdia_sparse_mold + type(psb_z_cuda_hlg_sparse_mat), target :: cuda_hll_sparse_mold + class(psb_z_base_sparse_mat), pointer :: cuda_sparse_mold +#endif + + select case(psb_toupper(trim(comm_mode))) + case('P2P','ISEND_IRECV') + comm_type = psb_comm_isend_irecv_ + case('NEIGHBOR','INEIGHBOR_ALLTOALLV') + comm_type = psb_comm_ineighbor_alltoallv_ + case('PNEIGHBOR','PERSISTENT','PERSISTENT_INEIGHBOR_A2AV') + comm_type = psb_comm_persistent_ineighbor_alltoallv_ + case('MPI_GET','RMA_PULL') + comm_type = psb_comm_rma_pull_ + case('MPI_PUT','RMA_PUSH') + comm_type = psb_comm_rma_push_ + case default + comm_type = psb_comm_isend_irecv_ + if (my_rank == psb_root_) then + write(psb_err_unit,'("Unknown comm backend: ",a,", defaulting to P2P")') trim(comm_mode) + end if + end select + + info = psb_success_ + afmt = psb_toupper(trim(cpu_fmt)) + if (len_trim(afmt) == 0) afmt = 'CSR' + if (idim_in > 0) then + idim = idim_in + else + idim = 10 + end if + + if (times_in > 0) then + times = times_in + else + times = 100 + end if + alpha = zone + beta = zzero + + call psb_erractionsave(err_act) + call psb_info(ctxt, my_rank, np) + use_external_matrix = (len_trim(matrix_file) > 0) + + if (idim_in <= 0) then + call get_environment_variable('IDIM', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) idim + if ((ios /= 0) .or. (idim < 2)) idim = 10 + end if + end if + + if (times_in <= 0) then + call get_environment_variable('TIMES', env_buf, length=env_len, status=env_status) + if ((env_status == 0) .and. (env_len > 0)) then + read(env_buf(1:env_len), *, iostat=ios) times + if ((ios /= 0) .or. (times < 1)) times = 100 + end if + end if + + call psb_barrier(ctxt) + if (use_external_matrix) then + call load_external_matrix(ctxt, matrix_file, matrix_fmt, a, y, x, desc_a, afmt, info) + else + call psb_z_gen_pde3d(ctxt,idim,a,y,x,desc_a,afmt,info) + end if + if (info /= psb_success_) goto 9999 + + call psb_comm_set(comm_type,x%v%comm_handle,info) + if (info /= psb_success_) goto 9999 + +#ifdef PSB_HAVE_CUDA + if (use_gpu) then + select case(psb_toupper(trim(gpu_fmt))) + case('ELG') + cuda_sparse_mold => cuda_ell_sparse_mold + case('CSRG') + cuda_sparse_mold => cuda_csr_sparse_mold + case('HDIAG','HDIA') + cuda_sparse_mold => cuda_hdia_sparse_mold + case default + cuda_sparse_mold => cuda_hll_sparse_mold + end select + call a%cscnv(info,mold=cuda_sparse_mold) + if (info /= psb_success_) goto 9999 + call desc_a%cnv(mold=cuda_index_mold) + if (info /= psb_success_) goto 9999 + call x%cnv(mold=cuda_vector_mold) + if (info /= psb_success_) goto 9999 + call y%cnv(mold=cuda_vector_mold) + if (info /= psb_success_) goto 9999 + end if +#endif + + ! warm-up + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) + if (info /= psb_success_) goto 9999 + + call psb_barrier(ctxt) + t0 = psb_wtime() + do i = 1, times + call psb_spmm(alpha, a, x, beta, y, desc_a, info, doswap=do_swap) + if (info /= psb_success_) exit + end do + t1 = psb_wtime() + if (info /= psb_success_) goto 9999 + + dt = t1 - t0 + call psb_amx(ctxt, dt) + avg_t = dt / real(times, psb_dpk_) + + if (my_rank == psb_root_) then + if (do_swap) then + write(psb_out_unit,'(/,"SpMV benchmark (overlap)")') + else + write(psb_out_unit,'(/,"SpMV benchmark (no overlap)")') + end if + write(psb_out_unit,'(" cpu matrix fmt : ",a)') trim(afmt) + if (use_gpu) write(psb_out_unit,'(" gpu matrix fmt : ",a)') trim(psb_toupper(trim(gpu_fmt))) + if (use_external_matrix) then + write(psb_out_unit,'(" matrix file : ",a)') trim(matrix_file) + write(psb_out_unit,'(" matrix format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" idim : ",i0)') idim + end if + write(psb_out_unit,'(" global non zeros : ",i0)') a%get_nzeros() + write(psb_out_unit,'(" global rows : ",i0)') a%get_nrows() + write(psb_out_unit,'(" global cols : ",i0)') a%get_ncols() + write(psb_out_unit,'(" repetitions : ",i0)') times + write(psb_out_unit,'(" comm backend : ",a)') trim(psb_toupper(trim(comm_mode))) + write(psb_out_unit,'(" total time [s] : ",es12.5)') dt + write(psb_out_unit,'(" avg time [s] : ",es12.5)') avg_t + end if + + call psb_gefree(y, desc_a, info) + call psb_gefree(x, desc_a, info) + call psb_spfree(a, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_erractionrestore(err_act) + return + +9999 call psb_error(ctxt) + call psb_error_handler(ctxt, err_act) + end subroutine run_spmv_kernel + + subroutine load_external_matrix(ctxt, matrix_file, matrix_fmt, a, bv, xv, desc_a, afmt, info) + type(psb_ctxt_type), intent(in) :: ctxt + character(len=*), intent(in) :: matrix_file + character(len=*), intent(in) :: matrix_fmt + type(psb_zspmat_type), intent(out) :: a + type(psb_z_vect_type), intent(out) :: bv, xv + type(psb_desc_type), intent(out) :: desc_a + character(len=*), intent(in) :: afmt + integer(psb_ipk_), intent(out) :: info + + type(psb_lzspmat_type) :: aux_a + complex(psb_dpk_), allocatable :: rhs_glob(:), x_glob(:) + integer(psb_lpk_) :: nrows, ncols + + info = psb_success_ + + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + return + end select + if (info /= psb_success_) return + + nrows = aux_a%get_nrows() + ncols = aux_a%get_ncols() + if (nrows /= ncols) then + write(psb_err_unit,'("Input matrix must be square: ",a)') trim(matrix_file) + info = psb_err_internal_error_ + return + end if + + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt=afmt, parts=part_block) + if (info /= psb_success_) return + + call psb_geall(xv,desc_a,info) + if (info /= psb_success_) return + call psb_geall(bv,desc_a,info) + if (info /= psb_success_) return + + allocate(rhs_glob(nrows), x_glob(ncols), stat=info) + if (info /= psb_success_) then + info = psb_err_alloc_dealloc_ + return + end if + rhs_glob = zone + x_glob = zzero + + call psb_scatter(rhs_glob,bv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + call psb_scatter(x_glob,xv,desc_a,info,root=psb_root_) + if (info /= psb_success_) return + + deallocate(rhs_glob, x_glob) + end subroutine load_external_matrix + +end module psb_zspmv_overlap_test + +program psb_z_spmv_kernel + use psb_zspmv_overlap_test + use psb_base_mod +#ifdef PSB_HAVE_CUDA + use psb_cuda_mod +#endif + implicit none + + type(psb_ctxt_type) :: ctxt + logical :: use_gpu + integer(psb_ipk_) :: my_rank, np, k + integer :: ios + character(len=256) :: arg + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + character(len=8) :: cpu_fmt + character(len=8) :: gpu_fmt + integer(psb_ipk_) :: idim_arg, times_arg + logical :: do_overlap + integer :: kmode + integer, parameter :: n_comm_modes = 5 + character(len=20), parameter :: comm_modes(n_comm_modes) = [character(len=20) :: & + & 'P2P', 'NEIGHBOR', 'PNEIGHBOR', 'MPI_GET', 'MPI_PUT'] + + idim_arg = -1 + times_arg = -1 + + matrix_file = '' + matrix_fmt = 'MM' + cpu_fmt = 'CSR' + gpu_fmt = 'HLG' + do_overlap = .true. + + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + +#ifdef PSB_HAVE_CUDA + use_gpu = .true. +#else + use_gpu = .false. +#endif + + do k = 1, command_argument_count() + call get_command_argument(k, arg) + if (index(psb_toupper(trim(arg)), '--GPU=') == 1) then + select case (psb_toupper(adjustl(arg(7:len_trim(arg))))) + case ('TRUE','T','1','YES','Y','ON') + use_gpu = .true. + case ('FALSE','F','0','NO','N','OFF') + use_gpu = .false. + end select + else if (index(psb_toupper(trim(arg)), '--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (index(psb_toupper(trim(arg)), '--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--MTX_FMT=') == 1) then + arg = psb_toupper(adjustl(arg(10:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (index(psb_toupper(trim(arg)), '--DIM=') == 1) then + read(arg(7:len_trim(arg)),*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + else if (index(psb_toupper(trim(arg)), '--TIMES=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--ITERS=') == 1) then + read(arg(9:len_trim(arg)),*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + else if (index(psb_toupper(trim(arg)), '--CPU_FORMAT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--CPU_FMT=') == 1) then + cpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FORMAT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(14:len_trim(arg)))) + else if (index(psb_toupper(trim(arg)), '--GPU_FMT=') == 1) then + gpu_fmt = psb_toupper(adjustl(arg(11:len_trim(arg)))) + else if ((trim(psb_toupper(arg)) == '--NOOVERLAP') .or. (trim(psb_toupper(arg)) == '--NO_OVERLAP')) then + do_overlap = .false. + else if ((trim(psb_toupper(arg)) == '--OVERLAP') .or. (trim(psb_toupper(arg)) == '--SWAP')) then + do_overlap = .true. + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (k < command_argument_count()) call get_command_argument(k+1,matrix_file) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--MTX_FMT') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + else if (trim(psb_toupper(arg)) == '--DIM') then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) idim_arg + if ((ios /= 0) .or. (idim_arg < 2)) idim_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--TIMES') .or. (trim(psb_toupper(arg)) == '--ITERS')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + read(arg,*,iostat=ios) times_arg + if ((ios /= 0) .or. (times_arg < 1)) times_arg = -1 + end if + else if ((trim(psb_toupper(arg)) == '--CPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--CPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + cpu_fmt = psb_toupper(trim(arg)) + end if + else if ((trim(psb_toupper(arg)) == '--GPU_FORMAT') .or. (trim(psb_toupper(arg)) == '--GPU_FMT')) then + if (k < command_argument_count()) then + call get_command_argument(k+1,arg) + gpu_fmt = psb_toupper(trim(arg)) + end if + end if + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_init(ctxt) +#else + use_gpu = .false. +#endif + + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Welcome to PSBLAS version: ', psb_version_string_ + write(psb_out_unit,*) 'This is the psb_z_spmv_kernel sample program' + write(psb_out_unit,'("GPU enabled : ",l1)') use_gpu + write(psb_out_unit,'("Usage: ./psb_z_spmv_kernel [--gpu=TRUE|FALSE] [--dim=N] [--times=N] ",& + &"[--cpu_fmt=CSR|COO|CSC|ELL|HLL] [--gpu_fmt=HLL|ELL|CSR|HDIA] [--matrix=] [--fmt=MM|HB] ",& + &"[--overlap|--nooverlap] (runs all comm backends)")') + end if + + do kmode = 1, n_comm_modes + if (my_rank == psb_root_) then + write(psb_out_unit,'(/,"=== Backend sweep: ",a," ===")') trim(comm_modes(kmode)) + end if + call run_spmv_kernel(ctxt, use_gpu, matrix_file, matrix_fmt, cpu_fmt, gpu_fmt, & + & idim_arg, times_arg, do_overlap, comm_modes(kmode)) + end do + +#ifdef PSB_HAVE_CUDA + if (use_gpu) call psb_cuda_exit() +#endif + call psb_exit(ctxt) +end program psb_z_spmv_kernel diff --git a/test/comm/swapdata/psb_c_comm_test.F90 b/test/comm/swapdata/psb_c_comm_test.F90 new file mode 100644 index 000000000..d5d2a2472 --- /dev/null +++ b/test/comm/swapdata/psb_c_comm_test.F90 @@ -0,0 +1,736 @@ +! +! Test program for c-type halo exchange: baseline vs neighbor topology. +! +! This test exercises the lower-level psi_swapdata interface directly +! to compare the two communication paths implemented in psi_dswapdata.F90: +! +! 1. Baseline (Isend/Irecv) : flag = IOR(psb_swap_send_, psb_swap_recv_) +! 2. Neighbor topology (Ineighbor_alltoallv) : flag = psb_swap_start_ then psb_swap_wait_ +! +! It builds a 3D block-partitioned descriptor with a 7-point stencil, +! fills owned entries with their global index, performs halo exchange +! via both paths, then checks: +! (a) The two paths produce identical results (cross-check) +! (b) Every halo entry equals the global index of its source (absolute check) +! +! Run with: mpirun -np

./psb_c_comm_test +! +program psb_c_comm_test + use psb_base_mod + use psb_util_mod + use psb_error_mod, only: psb_set_debug_level, psb_debug_ext_ + use psi_mod + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free + use psb_comm_schemes_mod, only: psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_isend_irecv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use psb_comm_schemes_mod, only: psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ + implicit none + + ! ---- parameters ---- + integer(psb_ipk_) :: idim + integer(psb_ipk_) :: argc + integer(psb_ipk_) :: iters + character(len=256) :: arg + character(len=16) :: mode + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + logical :: debug_swapdata + logical :: use_external_matrix + + ! ---- descriptor / context ---- + type(psb_ctxt_type) :: ctxt + type(psb_desc_type) :: desc_a + integer(psb_ipk_) :: my_rank, np, info, i, nr, number_of_local_rows + integer(psb_lpk_) :: m, nt + integer(psb_lpk_), allocatable :: myidx(:) + type(psb_cspmat_type) :: a_mat + type(psb_lcspmat_type) :: aux_a + + ! ---- vectors ---- + type(psb_c_vect_type) :: v_baseline, v_neighbor, v_neighbor_persistent, v_rma_get, v_rma_put + + ! ---- temporary / comparison arrays ---- + complex(psb_spk_), allocatable :: vals(:) + complex(psb_spk_), allocatable :: result_baseline(:), result_neighbor(:), result_persistent(:), & + & result_rma_get(:), result_rma_put(:) + complex(psb_spk_), allocatable :: expected(:) + + ! ---- halo index bookkeeping ---- + integer(psb_ipk_) :: nrow, ncol, num_neighbors, send_indexes, receive_indexes + class(psb_i_base_vect_type), pointer :: halo_indexes + + ! ---- error / reporting ---- + integer(psb_ipk_) :: n_pass, n_total, imode + logical :: run_baseline, run_neighbor, run_persistent, run_rma_get, run_rma_put + logical :: mat_allocated + logical :: comm_ok + real(psb_spk_) :: err, tol + real(psb_spk_) :: first_swap_baseline, first_swap_neighbor, first_swap_persistent, & + & first_swap_rma_get, first_swap_rma_put + real(psb_spk_) :: comm_setup_time_baseline, comm_setup_time_neighbor, comm_setup_time_persistent, & + & comm_setup_time_rma_get, comm_setup_time_rma_put + real(psb_spk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent, & + & tsum_rma_get, tsum_rma_put + integer(psb_lpk_), allocatable :: glob_col(:) + character(len=40) :: name + real(psb_spk_) :: huge_d + + name = 'psb_c_comm_test' + tol = 1.0e-12_psb_spk_ + huge_d = huge(sone) + n_pass = 0 + n_total = 0 + iters = 5 + mode = 'both' + debug_swapdata = .false. + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. + mat_allocated = .false. + + ! ---- parse command-line argument for idim ---- + idim = 10 + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--dim') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) idim + end if + else if (trim(arg) == '--iters') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) iters + end if + else if (index(psb_toupper(trim(arg)),'--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1, matrix_file) + end if + else if (index(psb_toupper(trim(arg)),'--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1, arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + end if + end do + use_external_matrix = (len_trim(matrix_file) > 0) + + ! parse optional mode flag + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--mode') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) mode + end if + else if (trim(arg) == '--debug') then + debug_swapdata = .true. + end if + end do + + if (debug_swapdata) then + call psb_set_debug_level(psb_debug_ext_) + end if + + run_baseline = .false. + run_neighbor = .false. + run_persistent = .false. + run_rma_get = .false. + run_rma_put = .false. + + + select case (trim(adjustl(mode))) + case ('both','all') + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. + case ('baseline') + run_baseline = .true. + case ('neighbor') + run_neighbor = .true. + case ('persistent','persistent_neighbor','persistent-neighbor') + run_persistent = .true. + case ('rma_get') + run_rma_get = .true. + case ('rma_put') + run_rma_put = .true. + case default + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. + end select + + if ((.not.use_external_matrix) .and. (idim <= 0)) then + write(*,*) 'Invalid dimension specified. Usage: --dim ' + call psb_abort(ctxt) + end if + ! ================================================================== + ! 1. Initialise MPI / PSBLAS context + ! ================================================================== + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Test: c-type halo baseline vs neighbor topo")') + write(psb_out_unit,'(" Processes : ",i0)') np + if (use_external_matrix) then + write(psb_out_unit,'(" Matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'(" Format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" Grid : ",i0," x ",i0," x ",i0)') idim,idim,idim + end if + write(psb_out_unit,'(" Usage : ./psb_c_comm_test [--dim N] [--iters N] [--mode ...] ",& + &"[--matrix ] [--fmt MM|HB]")') + write(psb_out_unit,'("================================================")') + end if + + ! ================================================================== + ! 2. Build descriptor with 7-point stencil connectivity + ! ================================================================== + if (use_external_matrix) then + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + end select + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matrix read error:', info + call psb_abort(ctxt) + end if + if (aux_a%get_nrows() /= aux_a%get_ncols()) then + write(psb_err_unit,*) my_rank, 'matrix must be square for this test' + call psb_abort(ctxt) + end if + m = aux_a%get_nrows() + call psb_matdist(aux_a, a_mat, ctxt, desc_a, info, fmt='CSR', parts=part_block) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matdist error:', info + call psb_abort(ctxt) + end if + mat_allocated = .true. + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + else + m = (1_psb_lpk_ * idim) * idim * idim + nt = (m + np - 1) / np + nr = max(0, min(int(nt,psb_ipk_), int(m - (my_rank * nt),psb_ipk_))) + + call psb_cdall(ctxt, desc_a, info, nl=nr) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdall error:', info + call psb_abort(ctxt) + end if + + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + + do i = 1, number_of_local_rows + call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)/), desc_a, info) + if (myidx(i) > 1) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-1/), desc_a, info) + if (myidx(i) < m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+1/), desc_a, info) + if (myidx(i) > idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-idim/), desc_a, info) + if (myidx(i) + idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+idim/), desc_a, info) + if (myidx(i) > int(idim,psb_lpk_)*idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) - int(idim,psb_lpk_)*idim/), desc_a, info) + if (myidx(i) + int(idim,psb_lpk_)*idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) + int(idim,psb_lpk_)*idim/), desc_a, info) + end do + + call psb_cdasb(desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdasb error:', info + call psb_abort(ctxt) + end if + end if + + nrow = desc_a%get_local_rows() ! owned + ncol = desc_a%get_local_cols() ! owned + halo + + ! ================================================================== + ! 3. Allocate two D vectors (scratch) and fill owned entries + ! ================================================================== + call psb_geall(v_baseline, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall baseline error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_neighbor, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_neighbor_persistent, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_get, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_put, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-put error:', info + call psb_abort(ctxt) + end if + + + call psb_geasb(v_baseline, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb baseline error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_neighbor, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_neighbor_persistent, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_get, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_put, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-put error:', info + call psb_abort(ctxt) + end if + + + + ! Fill owned entries with the global index value + allocate(vals(ncol)) + vals = czero + do i = 1, number_of_local_rows + vals(i) = real(myidx(i),psb_spk_) + end do + call v_baseline%set_vect(vals) + call v_neighbor%set_vect(vals) + call v_neighbor_persistent%set_vect(vals) + call v_rma_get%set_vect(vals) + call v_rma_put%set_vect(vals) + deallocate(vals) + + ! ================================================================== + ! 4. Build the expected result for halo positions + ! glob_col(j) = global index of local column j + ! After halo exchange every position j should hold glob_col(j). + ! ================================================================== + allocate(glob_col(ncol), expected(ncol)) + glob_col = desc_a%get_global_indices(owned=.false.) + do i = 1, ncol + expected(i) = real(glob_col(i),psb_spk_) + end do + allocate(result_baseline(ncol), result_neighbor(ncol), result_persistent(ncol), & + & result_rma_get(ncol), result_rma_put(ncol)) + result_baseline = huge_d + result_neighbor = huge_d + result_persistent = huge_d + result_rma_get = huge_d + result_rma_put = huge_d + + first_swap_baseline = szero + first_swap_neighbor = szero + first_swap_persistent = szero + first_swap_rma_get = szero + first_swap_rma_put = szero + + comm_setup_time_baseline = szero + comm_setup_time_neighbor = szero + comm_setup_time_persistent = szero + comm_setup_time_rma_get = szero + comm_setup_time_rma_put = szero + + ! ================================================================== + ! 6. Baseline halo exchange (Isend/Irecv in one call) + ! ================================================================== + if (run_baseline) then + comm_setup_time_baseline = psb_wtime() + call psb_comm_set(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set baseline error:', info + call psb_abort(ctxt) + end if + comm_setup_time_baseline = psb_wtime() - comm_setup_time_baseline + + first_swap_baseline = psb_wtime() + call psi_swapdata( & + swap_status=psb_comm_status_start_, & + beta=czero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata( & + swap_status=psb_comm_status_wait_, & + beta=czero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + first_swap_baseline = psb_wtime() - first_swap_baseline + end if + + + ! ================================================================== + ! 7. Neighbor topology halo exchange (start + wait) + ! ================================================================== + if (run_neighbor) then + comm_setup_time_neighbor = psb_wtime() + call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set neighbor error:', info + call psb_abort(ctxt) + end if + comm_setup_time_neighbor = psb_wtime() - comm_setup_time_neighbor + + + first_swap_neighbor = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor start error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata(psb_comm_status_wait_, czero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor wait error:', info + call psb_abort(ctxt) + end if + first_swap_neighbor = psb_wtime() - first_swap_neighbor + end if + + ! ================================================================== + ! 7b. Persistent-neighbor halo exchange (start + wait) + ! ================================================================== + if (run_persistent) then + comm_setup_time_persistent = psb_wtime() + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set persistent-neighbor error:', info + call psb_abort(ctxt) + end if + comm_setup_time_persistent = psb_wtime() - comm_setup_time_persistent + + + first_swap_persistent = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, czero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor wait error:', info + call psb_abort(ctxt) + end if + first_swap_persistent = psb_wtime() - first_swap_persistent + end if + + + + if(run_rma_get) then + comm_setup_time_rma_get = psb_wtime() + call psb_comm_set(psb_comm_rma_pull_, v_rma_get%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA get error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_get = psb_wtime() - comm_setup_time_rma_get + + first_swap_rma_get = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, czero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_get = psb_wtime() - first_swap_rma_get + end if + + + + + if(run_rma_put) then + comm_setup_time_rma_put = psb_wtime() + call psb_comm_set(psb_comm_rma_push_, v_rma_put%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA put error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_put = psb_wtime() - comm_setup_time_rma_put + + first_swap_rma_put = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, czero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_put = psb_wtime() - first_swap_rma_put + end if + + + + ! ================================================================== + ! 8. Performance: repeat exchanges and measure timings + ! ================================================================== + if (my_rank == 0) then + write(psb_out_unit,'("Timing: running ",i0," iterations for selected exchange mode(s)")') iters + end if + + tsum_baseline = szero + tsum_neighbor = szero + tsum_neighbor_persistent = szero + tsum_rma_get = szero + tsum_rma_put = szero + + do i = 1, iters + if (run_baseline) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, czero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_baseline = tsum_baseline + dt + end if + + if (run_neighbor) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, czero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor = tsum_neighbor + dt + end if + + if (run_persistent) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, czero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor_persistent = tsum_neighbor_persistent + dt + end if + + + if (run_rma_get) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, czero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_get = tsum_rma_get + dt + end if + + + if (run_rma_put) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, czero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, czero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_put = tsum_rma_put + dt + end if + + + end do + + + + call psb_amx(ctxt, tsum_baseline) + call psb_amx(ctxt, tsum_neighbor) + call psb_amx(ctxt, tsum_neighbor_persistent) + call psb_amx(ctxt, first_swap_baseline) + call psb_amx(ctxt, first_swap_neighbor) + call psb_amx(ctxt, first_swap_persistent) + call psb_amx(ctxt, comm_setup_time_baseline) + call psb_amx(ctxt, comm_setup_time_neighbor) + call psb_amx(ctxt, comm_setup_time_persistent) + call psb_amx(ctxt, comm_setup_time_rma_get) + call psb_amx(ctxt, comm_setup_time_rma_put) + + + + + if (my_rank == 0) then + if (run_baseline) then + write(psb_out_unit,'(" Avg baseline time : ",es12.5)') (tsum_baseline / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline + write(psb_out_unit,'(" First baseline time: ",es12.5)') first_swap_baseline + write(psb_out_unit,'(" Baseline comm setup: ",es12.5)') comm_setup_time_baseline + end if + if (run_neighbor) then + write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') (tsum_neighbor / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor + write(psb_out_unit,'(" First neighbor time: ",es12.5)') first_swap_neighbor + write(psb_out_unit,'(" Neighbor comm setup: ",es12.5)') comm_setup_time_neighbor + end if + if (run_persistent) then + write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') (tsum_neighbor_persistent / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_neighbor_persistent + write(psb_out_unit,'(" First pers-neigh time: ",es12.5)') first_swap_persistent + write(psb_out_unit,'(" Persistent comm setup: ",es12.5)') comm_setup_time_persistent + end if + if (run_rma_get) then + write(psb_out_unit,'(" Avg RMA get time : ",es12.5)') (tsum_rma_get / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot RMA get time : ",es12.5)') tsum_rma_get + write(psb_out_unit,'(" First RMA get time : ",es12.5)') first_swap_rma_get + write(psb_out_unit,'(" RMA get comm setup : ",es12.5)') comm_setup_time_rma_get + end if + if (run_rma_put) then + write(psb_out_unit,'(" Avg RMA put time : ",es12.5)') (tsum_rma_put / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot RMA put time : ",es12.5)') tsum_rma_put + write(psb_out_unit,'(" First RMA put time : ",es12.5)') first_swap_rma_put + write(psb_out_unit,'(" RMA put comm setup : ",es12.5)') comm_setup_time_rma_put + end if + end if + + ! ================================================================== + ! 8. Extract results and compare + ! ================================================================== + result_baseline = v_baseline%v%v + result_neighbor = v_neighbor%v%v + result_persistent = v_neighbor_persistent%v%v + result_rma_get = v_rma_get%v%v + result_rma_put = v_rma_put%v%v + + ! --- Cross Checks --- + if (run_baseline .and. run_neighbor) & + call check_result("cross-check baseline vs neighbor", result_baseline, result_neighbor, ncol, tol) + + if (run_baseline .and. run_persistent) & + call check_result("cross-check baseline vs pers-nei", result_baseline, result_persistent, ncol, tol) + + if (run_baseline .and. run_rma_get) & + call check_result("cross-check baseline vs rma-get", result_baseline, result_rma_get, ncol, tol) + + if (run_baseline .and. run_rma_put) & + call check_result("cross-check baseline vs rma-put", result_baseline, result_rma_put, ncol, tol) + + ! --- Absolute Correctness Checks against Expected --- + if (run_baseline) & + call check_result("baseline absolute correctness", result_baseline, expected, ncol, tol) + + if (run_neighbor) & + call check_result("neighbor absolute correctness", result_neighbor, expected, ncol, tol) + + if (run_persistent) & + call check_result("pers-neigh absolute correctness", result_persistent, expected, ncol, tol) + + if (run_rma_get) & + call check_result("rma_get absolute correctness", result_rma_get, expected, ncol, tol) + + if (run_rma_put) & + call check_result("rma_put absolute correctness", result_rma_put, expected, ncol, tol) + + ! ================================================================== + ! 9. Summary + ! ================================================================== + call psb_barrier(ctxt) + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Results: ",i0," / ",i0," tests passed")') n_pass, n_total + if (n_pass == n_total) then + write(psb_out_unit,'(" STATUS: ALL PASSED")') + else + write(psb_out_unit,'(" STATUS: SOME FAILURES")') + end if + write(psb_out_unit,'("================================================")') + end if + call psb_barrier(ctxt) + + ! ================================================================== + ! 10. Cleanup + ! ================================================================== + deallocate(result_baseline, result_neighbor, result_persistent, expected, glob_col) + +9999 call psb_gefree(v_baseline, desc_a, info) + call psb_gefree(v_neighbor, desc_a, info) + call psb_gefree(v_neighbor_persistent, desc_a, info) + if (mat_allocated) call psb_spfree(a_mat, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_exit(ctxt) + + +contains + + ! Helper routine to compare two arrays, reduce the error across MPI ranks, and print the result + subroutine check_result(test_name, arr1, arr2, n, tolerance) + character(len=*), intent(in) :: test_name + complex(psb_spk_), intent(in) :: arr1(:), arr2(:) + integer(psb_ipk_), intent(in):: n + real(psb_spk_), intent(in) :: tolerance + real(psb_spk_) :: err_val + + n_total = n_total + 1 + + if (n > 0) then + err_val = maxval(abs(arr1(1:n) - arr2(1:n))) + else + err_val = szero + end if + + ! Get max error across all processes + call psb_amx(ctxt, err_val) + + if (my_rank == 0) then + if ((err_val >= szero) .and. (err_val < tolerance)) then + write(psb_out_unit,'(" [PASS] ", a, t45, ": err = ",es12.5)') test_name, err_val + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] ", a, t45, ": err = ",es12.5)') test_name, err_val + end if + end if + end subroutine check_result + +end program psb_c_comm_test diff --git a/test/comm/swapdata/psb_comm_test_sbatch.sh b/test/comm/swapdata/psb_comm_test_sbatch.sh deleted file mode 100644 index 81aae2c1e..000000000 --- a/test/comm/swapdata/psb_comm_test_sbatch.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash -#SBATCH --job-name=psb_swapdata_test -#SBATCH --partition=boost_usr_prod -#SBATCH --time=02:00:00 -#SBATCH --nodes=4 -#SBATCH --ntasks=128 -#SBATCH --ntasks-per-node=32 -#SBATCH --cpus-per-task=1 -#SBATCH --threads-per-core=1 -#SBATCH --gpus-per-node=4 -#SBATCH --export=ALL -#SBATCH -A CNHPC_1736213 -#SBATCH --output=psb_comm_swapdata_%j.out -#SBATCH --error=psb_comm_swapdata_%j.err - -set -euo pipefail - -# Environment tuned like the main comm test script. -export UCX_VFS_ENABLE=n -export UCX_VFS_USE_FUSE=n -export UCX_STATS_DEST=none -export UCX_LOG_LEVEL=error -export UCX_TLS=dc,sm,self -export UCX_NET_DEVICES=mlx5_0:1 -export OMPI_MCA_coll=^hcoll,han -export OMPI_MCA_coll_hcoll_enable=0 -export UCX_MEMTYPE_CACHE=n -export UCX_CLOSE_TIMEOUT=10s - -EXEC=./test/comm/swapdata/runs/psb_comm_test -DIM_START=${DIM_START:-20} -DIM_END=${DIM_END:-300} -DIM_STEP=${DIM_STEP:-20} -ITERS=${ITERS:-10} -MODE=${MODE:-both} -DEBUG=${DEBUG:-0} - -EXTRA_ARGS=() -if [[ "$DEBUG" != "0" ]]; then - EXTRA_ARGS+=(--debug) -fi - -if [[ ! -x "$EXEC" ]]; then - echo "Executable not found: $EXEC" >&2 - echo "Build the test first with 'make' in test/comm/swapdata/" >&2 - exit 1 -fi - -echo "Running swapdata comm test" -echo " EXEC=$EXEC" -echo " DIM_START=$DIM_START" -echo " DIM_END=$DIM_END" -echo " DIM_STEP=$DIM_STEP" -echo " ITERS=$ITERS" -echo " MODE=$MODE" -echo " DEBUG=$DEBUG" - -for DIM in $(seq "$DIM_START" "$DIM_STEP" "$DIM_END"); do - echo "" - echo "=== Running DIM=$DIM ===" - srun --exclusive -N2 -n64 "$EXEC" --dim "$DIM" --iters "$ITERS" --mode "$MODE" "${EXTRA_ARGS[@]}" -done diff --git a/test/comm/swapdata/psb_d_comm_test.F90 b/test/comm/swapdata/psb_d_comm_test.F90 new file mode 100644 index 000000000..8a0427d58 --- /dev/null +++ b/test/comm/swapdata/psb_d_comm_test.F90 @@ -0,0 +1,736 @@ +! +! Test program for d-type halo exchange: baseline vs neighbor topology. +! +! This test exercises the lower-level psi_swapdata interface directly +! to compare the two communication paths implemented in psi_dswapdata.F90: +! +! 1. Baseline (Isend/Irecv) : flag = IOR(psb_swap_send_, psb_swap_recv_) +! 2. Neighbor topology (Ineighbor_alltoallv) : flag = psb_swap_start_ then psb_swap_wait_ +! +! It builds a 3D block-partitioned descriptor with a 7-point stencil, +! fills owned entries with their global index, performs halo exchange +! via both paths, then checks: +! (a) The two paths produce identical results (cross-check) +! (b) Every halo entry equals the global index of its source (absolute check) +! +! Run with: mpirun -np

./psb_d_comm_test +! +program psb_d_comm_test + use psb_base_mod + use psb_util_mod + use psb_error_mod, only: psb_set_debug_level, psb_debug_ext_ + use psi_mod + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free + use psb_comm_schemes_mod, only: psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_isend_irecv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use psb_comm_schemes_mod, only: psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ + implicit none + + ! ---- parameters ---- + integer(psb_ipk_) :: idim + integer(psb_ipk_) :: argc + integer(psb_ipk_) :: iters + character(len=256) :: arg + character(len=16) :: mode + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + logical :: debug_swapdata + logical :: use_external_matrix + + ! ---- descriptor / context ---- + type(psb_ctxt_type) :: ctxt + type(psb_desc_type) :: desc_a + integer(psb_ipk_) :: my_rank, np, info, i, nr, number_of_local_rows + integer(psb_lpk_) :: m, nt + integer(psb_lpk_), allocatable :: myidx(:) + type(psb_dspmat_type) :: a_mat + type(psb_ldspmat_type) :: aux_a + + ! ---- vectors ---- + type(psb_d_vect_type) :: v_baseline, v_neighbor, v_neighbor_persistent, v_rma_get, v_rma_put + + ! ---- temporary / comparison arrays ---- + real(psb_dpk_), allocatable :: vals(:) + real(psb_dpk_), allocatable :: result_baseline(:), result_neighbor(:), result_persistent(:), & + & result_rma_get(:), result_rma_put(:) + real(psb_dpk_), allocatable :: expected(:) + + ! ---- halo index bookkeeping ---- + integer(psb_ipk_) :: nrow, ncol, num_neighbors, send_indexes, receive_indexes + class(psb_i_base_vect_type), pointer :: halo_indexes + + ! ---- error / reporting ---- + integer(psb_ipk_) :: n_pass, n_total, imode + logical :: run_baseline, run_neighbor, run_persistent, run_rma_get, run_rma_put + logical :: mat_allocated + logical :: comm_ok + real(psb_dpk_) :: err, tol + real(psb_dpk_) :: first_swap_baseline, first_swap_neighbor, first_swap_persistent, & + & first_swap_rma_get, first_swap_rma_put + real(psb_dpk_) :: comm_setup_time_baseline, comm_setup_time_neighbor, comm_setup_time_persistent, & + & comm_setup_time_rma_get, comm_setup_time_rma_put + real(psb_dpk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent, & + & tsum_rma_get, tsum_rma_put + integer(psb_lpk_), allocatable :: glob_col(:) + character(len=40) :: name + real(psb_dpk_) :: huge_d + + name = 'psb_d_comm_test' + tol = 1.0e-12_psb_dpk_ + huge_d = huge(done) + n_pass = 0 + n_total = 0 + iters = 5 + mode = 'both' + debug_swapdata = .false. + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. + mat_allocated = .false. + + ! ---- parse command-line argument for idim ---- + idim = 10 + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--dim') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) idim + end if + else if (trim(arg) == '--iters') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) iters + end if + else if (index(psb_toupper(trim(arg)),'--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1, matrix_file) + end if + else if (index(psb_toupper(trim(arg)),'--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1, arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + end if + end do + use_external_matrix = (len_trim(matrix_file) > 0) + + ! parse optional mode flag + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--mode') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) mode + end if + else if (trim(arg) == '--debug') then + debug_swapdata = .true. + end if + end do + + if (debug_swapdata) then + call psb_set_debug_level(psb_debug_ext_) + end if + + run_baseline = .false. + run_neighbor = .false. + run_persistent = .false. + run_rma_get = .false. + run_rma_put = .false. + + + select case (trim(adjustl(mode))) + case ('both','all') + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. + case ('baseline') + run_baseline = .true. + case ('neighbor') + run_neighbor = .true. + case ('persistent','persistent_neighbor','persistent-neighbor') + run_persistent = .true. + case ('rma_get') + run_rma_get = .true. + case ('rma_put') + run_rma_put = .true. + case default + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. + end select + + if ((.not.use_external_matrix) .and. (idim <= 0)) then + write(*,*) 'Invalid dimension specified. Usage: --dim ' + call psb_abort(ctxt) + end if + ! ================================================================== + ! 1. Initialise MPI / PSBLAS context + ! ================================================================== + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Test: d-type halo baseline vs neighbor topo")') + write(psb_out_unit,'(" Processes : ",i0)') np + if (use_external_matrix) then + write(psb_out_unit,'(" Matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'(" Format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" Grid : ",i0," x ",i0," x ",i0)') idim,idim,idim + end if + write(psb_out_unit,'(" Usage : ./psb_d_comm_test [--dim N] [--iters N] [--mode ...] ",& + &"[--matrix ] [--fmt MM|HB]")') + write(psb_out_unit,'("================================================")') + end if + + ! ================================================================== + ! 2. Build descriptor with 7-point stencil connectivity + ! ================================================================== + if (use_external_matrix) then + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + end select + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matrix read error:', info + call psb_abort(ctxt) + end if + if (aux_a%get_nrows() /= aux_a%get_ncols()) then + write(psb_err_unit,*) my_rank, 'matrix must be square for this test' + call psb_abort(ctxt) + end if + m = aux_a%get_nrows() + call psb_matdist(aux_a, a_mat, ctxt, desc_a, info, fmt='CSR', parts=part_block) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matdist error:', info + call psb_abort(ctxt) + end if + mat_allocated = .true. + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + else + m = (1_psb_lpk_ * idim) * idim * idim + nt = (m + np - 1) / np + nr = max(0, min(int(nt,psb_ipk_), int(m - (my_rank * nt),psb_ipk_))) + + call psb_cdall(ctxt, desc_a, info, nl=nr) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdall error:', info + call psb_abort(ctxt) + end if + + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + + do i = 1, number_of_local_rows + call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)/), desc_a, info) + if (myidx(i) > 1) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-1/), desc_a, info) + if (myidx(i) < m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+1/), desc_a, info) + if (myidx(i) > idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-idim/), desc_a, info) + if (myidx(i) + idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+idim/), desc_a, info) + if (myidx(i) > int(idim,psb_lpk_)*idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) - int(idim,psb_lpk_)*idim/), desc_a, info) + if (myidx(i) + int(idim,psb_lpk_)*idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) + int(idim,psb_lpk_)*idim/), desc_a, info) + end do + + call psb_cdasb(desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdasb error:', info + call psb_abort(ctxt) + end if + end if + + nrow = desc_a%get_local_rows() ! owned + ncol = desc_a%get_local_cols() ! owned + halo + + ! ================================================================== + ! 3. Allocate two D vectors (scratch) and fill owned entries + ! ================================================================== + call psb_geall(v_baseline, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall baseline error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_neighbor, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_neighbor_persistent, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_get, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_put, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-put error:', info + call psb_abort(ctxt) + end if + + + call psb_geasb(v_baseline, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb baseline error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_neighbor, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_neighbor_persistent, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_get, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_put, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-put error:', info + call psb_abort(ctxt) + end if + + + + ! Fill owned entries with the global index value + allocate(vals(ncol)) + vals = dzero + do i = 1, number_of_local_rows + vals(i) = real(myidx(i),psb_dpk_) + end do + call v_baseline%set_vect(vals) + call v_neighbor%set_vect(vals) + call v_neighbor_persistent%set_vect(vals) + call v_rma_get%set_vect(vals) + call v_rma_put%set_vect(vals) + deallocate(vals) + + ! ================================================================== + ! 4. Build the expected result for halo positions + ! glob_col(j) = global index of local column j + ! After halo exchange every position j should hold glob_col(j). + ! ================================================================== + allocate(glob_col(ncol), expected(ncol)) + glob_col = desc_a%get_global_indices(owned=.false.) + do i = 1, ncol + expected(i) = real(glob_col(i),psb_dpk_) + end do + allocate(result_baseline(ncol), result_neighbor(ncol), result_persistent(ncol), & + & result_rma_get(ncol), result_rma_put(ncol)) + result_baseline = huge_d + result_neighbor = huge_d + result_persistent = huge_d + result_rma_get = huge_d + result_rma_put = huge_d + + first_swap_baseline = dzero + first_swap_neighbor = dzero + first_swap_persistent = dzero + first_swap_rma_get = dzero + first_swap_rma_put = dzero + + comm_setup_time_baseline = dzero + comm_setup_time_neighbor = dzero + comm_setup_time_persistent = dzero + comm_setup_time_rma_get = dzero + comm_setup_time_rma_put = dzero + + ! ================================================================== + ! 6. Baseline halo exchange (Isend/Irecv in one call) + ! ================================================================== + if (run_baseline) then + comm_setup_time_baseline = psb_wtime() + call psb_comm_set(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set baseline error:', info + call psb_abort(ctxt) + end if + comm_setup_time_baseline = psb_wtime() - comm_setup_time_baseline + + first_swap_baseline = psb_wtime() + call psi_swapdata( & + swap_status=psb_comm_status_start_, & + beta=dzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata( & + swap_status=psb_comm_status_wait_, & + beta=dzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + first_swap_baseline = psb_wtime() - first_swap_baseline + end if + + + ! ================================================================== + ! 7. Neighbor topology halo exchange (start + wait) + ! ================================================================== + if (run_neighbor) then + comm_setup_time_neighbor = psb_wtime() + call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set neighbor error:', info + call psb_abort(ctxt) + end if + comm_setup_time_neighbor = psb_wtime() - comm_setup_time_neighbor + + + first_swap_neighbor = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor start error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor wait error:', info + call psb_abort(ctxt) + end if + first_swap_neighbor = psb_wtime() - first_swap_neighbor + end if + + ! ================================================================== + ! 7b. Persistent-neighbor halo exchange (start + wait) + ! ================================================================== + if (run_persistent) then + comm_setup_time_persistent = psb_wtime() + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set persistent-neighbor error:', info + call psb_abort(ctxt) + end if + comm_setup_time_persistent = psb_wtime() - comm_setup_time_persistent + + + first_swap_persistent = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor wait error:', info + call psb_abort(ctxt) + end if + first_swap_persistent = psb_wtime() - first_swap_persistent + end if + + + + if(run_rma_get) then + comm_setup_time_rma_get = psb_wtime() + call psb_comm_set(psb_comm_rma_pull_, v_rma_get%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA get error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_get = psb_wtime() - comm_setup_time_rma_get + + first_swap_rma_get = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, dzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_get = psb_wtime() - first_swap_rma_get + end if + + + + + if(run_rma_put) then + comm_setup_time_rma_put = psb_wtime() + call psb_comm_set(psb_comm_rma_push_, v_rma_put%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA put error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_put = psb_wtime() - comm_setup_time_rma_put + + first_swap_rma_put = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, dzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_put = psb_wtime() - first_swap_rma_put + end if + + + + ! ================================================================== + ! 8. Performance: repeat exchanges and measure timings + ! ================================================================== + if (my_rank == 0) then + write(psb_out_unit,'("Timing: running ",i0," iterations for selected exchange mode(s)")') iters + end if + + tsum_baseline = dzero + tsum_neighbor = dzero + tsum_neighbor_persistent = dzero + tsum_rma_get = dzero + tsum_rma_put = dzero + + do i = 1, iters + if (run_baseline) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_baseline = tsum_baseline + dt + end if + + if (run_neighbor) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor = tsum_neighbor + dt + end if + + if (run_persistent) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor_persistent = tsum_neighbor_persistent + dt + end if + + + if (run_rma_get) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_get = tsum_rma_get + dt + end if + + + if (run_rma_put) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, dzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, dzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_put = tsum_rma_put + dt + end if + + + end do + + + + call psb_amx(ctxt, tsum_baseline) + call psb_amx(ctxt, tsum_neighbor) + call psb_amx(ctxt, tsum_neighbor_persistent) + call psb_amx(ctxt, first_swap_baseline) + call psb_amx(ctxt, first_swap_neighbor) + call psb_amx(ctxt, first_swap_persistent) + call psb_amx(ctxt, comm_setup_time_baseline) + call psb_amx(ctxt, comm_setup_time_neighbor) + call psb_amx(ctxt, comm_setup_time_persistent) + call psb_amx(ctxt, comm_setup_time_rma_get) + call psb_amx(ctxt, comm_setup_time_rma_put) + + + + + if (my_rank == 0) then + if (run_baseline) then + write(psb_out_unit,'(" Avg baseline time : ",es12.5)') (tsum_baseline / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline + write(psb_out_unit,'(" First baseline time: ",es12.5)') first_swap_baseline + write(psb_out_unit,'(" Baseline comm setup: ",es12.5)') comm_setup_time_baseline + end if + if (run_neighbor) then + write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') (tsum_neighbor / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor + write(psb_out_unit,'(" First neighbor time: ",es12.5)') first_swap_neighbor + write(psb_out_unit,'(" Neighbor comm setup: ",es12.5)') comm_setup_time_neighbor + end if + if (run_persistent) then + write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') (tsum_neighbor_persistent / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_neighbor_persistent + write(psb_out_unit,'(" First pers-neigh time: ",es12.5)') first_swap_persistent + write(psb_out_unit,'(" Persistent comm setup: ",es12.5)') comm_setup_time_persistent + end if + if (run_rma_get) then + write(psb_out_unit,'(" Avg RMA get time : ",es12.5)') (tsum_rma_get / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot RMA get time : ",es12.5)') tsum_rma_get + write(psb_out_unit,'(" First RMA get time : ",es12.5)') first_swap_rma_get + write(psb_out_unit,'(" RMA get comm setup : ",es12.5)') comm_setup_time_rma_get + end if + if (run_rma_put) then + write(psb_out_unit,'(" Avg RMA put time : ",es12.5)') (tsum_rma_put / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot RMA put time : ",es12.5)') tsum_rma_put + write(psb_out_unit,'(" First RMA put time : ",es12.5)') first_swap_rma_put + write(psb_out_unit,'(" RMA put comm setup : ",es12.5)') comm_setup_time_rma_put + end if + end if + + ! ================================================================== + ! 8. Extract results and compare + ! ================================================================== + result_baseline = v_baseline%v%v + result_neighbor = v_neighbor%v%v + result_persistent = v_neighbor_persistent%v%v + result_rma_get = v_rma_get%v%v + result_rma_put = v_rma_put%v%v + + ! --- Cross Checks --- + if (run_baseline .and. run_neighbor) & + call check_result("cross-check baseline vs neighbor", result_baseline, result_neighbor, ncol, tol) + + if (run_baseline .and. run_persistent) & + call check_result("cross-check baseline vs pers-nei", result_baseline, result_persistent, ncol, tol) + + if (run_baseline .and. run_rma_get) & + call check_result("cross-check baseline vs rma-get", result_baseline, result_rma_get, ncol, tol) + + if (run_baseline .and. run_rma_put) & + call check_result("cross-check baseline vs rma-put", result_baseline, result_rma_put, ncol, tol) + + ! --- Absolute Correctness Checks against Expected --- + if (run_baseline) & + call check_result("baseline absolute correctness", result_baseline, expected, ncol, tol) + + if (run_neighbor) & + call check_result("neighbor absolute correctness", result_neighbor, expected, ncol, tol) + + if (run_persistent) & + call check_result("pers-neigh absolute correctness", result_persistent, expected, ncol, tol) + + if (run_rma_get) & + call check_result("rma_get absolute correctness", result_rma_get, expected, ncol, tol) + + if (run_rma_put) & + call check_result("rma_put absolute correctness", result_rma_put, expected, ncol, tol) + + ! ================================================================== + ! 9. Summary + ! ================================================================== + call psb_barrier(ctxt) + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Results: ",i0," / ",i0," tests passed")') n_pass, n_total + if (n_pass == n_total) then + write(psb_out_unit,'(" STATUS: ALL PASSED")') + else + write(psb_out_unit,'(" STATUS: SOME FAILURES")') + end if + write(psb_out_unit,'("================================================")') + end if + call psb_barrier(ctxt) + + ! ================================================================== + ! 10. Cleanup + ! ================================================================== + deallocate(result_baseline, result_neighbor, result_persistent, expected, glob_col) + +9999 call psb_gefree(v_baseline, desc_a, info) + call psb_gefree(v_neighbor, desc_a, info) + call psb_gefree(v_neighbor_persistent, desc_a, info) + if (mat_allocated) call psb_spfree(a_mat, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_exit(ctxt) + + +contains + + ! Helper routine to compare two arrays, reduce the error across MPI ranks, and print the result + subroutine check_result(test_name, arr1, arr2, n, tolerance) + character(len=*), intent(in) :: test_name + real(psb_dpk_), intent(in) :: arr1(:), arr2(:) + integer(psb_ipk_), intent(in):: n + real(psb_dpk_), intent(in) :: tolerance + real(psb_dpk_) :: err_val + + n_total = n_total + 1 + + if (n > 0) then + err_val = maxval(abs(arr1(1:n) - arr2(1:n))) + else + err_val = dzero + end if + + ! Get max error across all processes + call psb_amx(ctxt, err_val) + + if (my_rank == 0) then + if ((err_val >= dzero) .and. (err_val < tolerance)) then + write(psb_out_unit,'(" [PASS] ", a, t45, ": err = ",es12.5)') test_name, err_val + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] ", a, t45, ": err = ",es12.5)') test_name, err_val + end if + end if + end subroutine check_result + +end program psb_d_comm_test diff --git a/test/comm/swapdata/psb_s_comm_test.F90 b/test/comm/swapdata/psb_s_comm_test.F90 new file mode 100644 index 000000000..e46d2ae6b --- /dev/null +++ b/test/comm/swapdata/psb_s_comm_test.F90 @@ -0,0 +1,736 @@ +! +! Test program for s-type halo exchange: baseline vs neighbor topology. +! +! This test exercises the lower-level psi_swapdata interface directly +! to compare the two communication paths implemented in psi_dswapdata.F90: +! +! 1. Baseline (Isend/Irecv) : flag = IOR(psb_swap_send_, psb_swap_recv_) +! 2. Neighbor topology (Ineighbor_alltoallv) : flag = psb_swap_start_ then psb_swap_wait_ +! +! It builds a 3D block-partitioned descriptor with a 7-point stencil, +! fills owned entries with their global index, performs halo exchange +! via both paths, then checks: +! (a) The two paths produce identical results (cross-check) +! (b) Every halo entry equals the global index of its source (absolute check) +! +! Run with: mpirun -np

./psb_s_comm_test +! +program psb_s_comm_test + use psb_base_mod + use psb_util_mod + use psb_error_mod, only: psb_set_debug_level, psb_debug_ext_ + use psi_mod + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free + use psb_comm_schemes_mod, only: psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_isend_irecv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use psb_comm_schemes_mod, only: psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ + implicit none + + ! ---- parameters ---- + integer(psb_ipk_) :: idim + integer(psb_ipk_) :: argc + integer(psb_ipk_) :: iters + character(len=256) :: arg + character(len=16) :: mode + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + logical :: debug_swapdata + logical :: use_external_matrix + + ! ---- descriptor / context ---- + type(psb_ctxt_type) :: ctxt + type(psb_desc_type) :: desc_a + integer(psb_ipk_) :: my_rank, np, info, i, nr, number_of_local_rows + integer(psb_lpk_) :: m, nt + integer(psb_lpk_), allocatable :: myidx(:) + type(psb_sspmat_type) :: a_mat + type(psb_lsspmat_type) :: aux_a + + ! ---- vectors ---- + type(psb_s_vect_type) :: v_baseline, v_neighbor, v_neighbor_persistent, v_rma_get, v_rma_put + + ! ---- temporary / comparison arrays ---- + real(psb_spk_), allocatable :: vals(:) + real(psb_spk_), allocatable :: result_baseline(:), result_neighbor(:), result_persistent(:), & + & result_rma_get(:), result_rma_put(:) + real(psb_spk_), allocatable :: expected(:) + + ! ---- halo index bookkeeping ---- + integer(psb_ipk_) :: nrow, ncol, num_neighbors, send_indexes, receive_indexes + class(psb_i_base_vect_type), pointer :: halo_indexes + + ! ---- error / reporting ---- + integer(psb_ipk_) :: n_pass, n_total, imode + logical :: run_baseline, run_neighbor, run_persistent, run_rma_get, run_rma_put + logical :: mat_allocated + logical :: comm_ok + real(psb_spk_) :: err, tol + real(psb_spk_) :: first_swap_baseline, first_swap_neighbor, first_swap_persistent, & + & first_swap_rma_get, first_swap_rma_put + real(psb_spk_) :: comm_setup_time_baseline, comm_setup_time_neighbor, comm_setup_time_persistent, & + & comm_setup_time_rma_get, comm_setup_time_rma_put + real(psb_spk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent, & + & tsum_rma_get, tsum_rma_put + integer(psb_lpk_), allocatable :: glob_col(:) + character(len=40) :: name + real(psb_spk_) :: huge_d + + name = 'psb_s_comm_test' + tol = 1.0e-12_psb_spk_ + huge_d = huge(sone) + n_pass = 0 + n_total = 0 + iters = 5 + mode = 'both' + debug_swapdata = .false. + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. + mat_allocated = .false. + + ! ---- parse command-line argument for idim ---- + idim = 10 + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--dim') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) idim + end if + else if (trim(arg) == '--iters') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) iters + end if + else if (index(psb_toupper(trim(arg)),'--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1, matrix_file) + end if + else if (index(psb_toupper(trim(arg)),'--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1, arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + end if + end do + use_external_matrix = (len_trim(matrix_file) > 0) + + ! parse optional mode flag + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--mode') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) mode + end if + else if (trim(arg) == '--debug') then + debug_swapdata = .true. + end if + end do + + if (debug_swapdata) then + call psb_set_debug_level(psb_debug_ext_) + end if + + run_baseline = .false. + run_neighbor = .false. + run_persistent = .false. + run_rma_get = .false. + run_rma_put = .false. + + + select case (trim(adjustl(mode))) + case ('both','all') + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. + case ('baseline') + run_baseline = .true. + case ('neighbor') + run_neighbor = .true. + case ('persistent','persistent_neighbor','persistent-neighbor') + run_persistent = .true. + case ('rma_get') + run_rma_get = .true. + case ('rma_put') + run_rma_put = .true. + case default + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. + end select + + if ((.not.use_external_matrix) .and. (idim <= 0)) then + write(*,*) 'Invalid dimension specified. Usage: --dim ' + call psb_abort(ctxt) + end if + ! ================================================================== + ! 1. Initialise MPI / PSBLAS context + ! ================================================================== + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Test: s-type halo baseline vs neighbor topo")') + write(psb_out_unit,'(" Processes : ",i0)') np + if (use_external_matrix) then + write(psb_out_unit,'(" Matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'(" Format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" Grid : ",i0," x ",i0," x ",i0)') idim,idim,idim + end if + write(psb_out_unit,'(" Usage : ./psb_s_comm_test [--dim N] [--iters N] [--mode ...] ",& + &"[--matrix ] [--fmt MM|HB]")') + write(psb_out_unit,'("================================================")') + end if + + ! ================================================================== + ! 2. Build descriptor with 7-point stencil connectivity + ! ================================================================== + if (use_external_matrix) then + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + end select + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matrix read error:', info + call psb_abort(ctxt) + end if + if (aux_a%get_nrows() /= aux_a%get_ncols()) then + write(psb_err_unit,*) my_rank, 'matrix must be square for this test' + call psb_abort(ctxt) + end if + m = aux_a%get_nrows() + call psb_matdist(aux_a, a_mat, ctxt, desc_a, info, fmt='CSR', parts=part_block) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matdist error:', info + call psb_abort(ctxt) + end if + mat_allocated = .true. + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + else + m = (1_psb_lpk_ * idim) * idim * idim + nt = (m + np - 1) / np + nr = max(0, min(int(nt,psb_ipk_), int(m - (my_rank * nt),psb_ipk_))) + + call psb_cdall(ctxt, desc_a, info, nl=nr) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdall error:', info + call psb_abort(ctxt) + end if + + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + + do i = 1, number_of_local_rows + call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)/), desc_a, info) + if (myidx(i) > 1) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-1/), desc_a, info) + if (myidx(i) < m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+1/), desc_a, info) + if (myidx(i) > idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-idim/), desc_a, info) + if (myidx(i) + idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+idim/), desc_a, info) + if (myidx(i) > int(idim,psb_lpk_)*idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) - int(idim,psb_lpk_)*idim/), desc_a, info) + if (myidx(i) + int(idim,psb_lpk_)*idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) + int(idim,psb_lpk_)*idim/), desc_a, info) + end do + + call psb_cdasb(desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdasb error:', info + call psb_abort(ctxt) + end if + end if + + nrow = desc_a%get_local_rows() ! owned + ncol = desc_a%get_local_cols() ! owned + halo + + ! ================================================================== + ! 3. Allocate two D vectors (scratch) and fill owned entries + ! ================================================================== + call psb_geall(v_baseline, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall baseline error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_neighbor, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_neighbor_persistent, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_get, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_put, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-put error:', info + call psb_abort(ctxt) + end if + + + call psb_geasb(v_baseline, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb baseline error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_neighbor, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_neighbor_persistent, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_get, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_put, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-put error:', info + call psb_abort(ctxt) + end if + + + + ! Fill owned entries with the global index value + allocate(vals(ncol)) + vals = szero + do i = 1, number_of_local_rows + vals(i) = real(myidx(i),psb_spk_) + end do + call v_baseline%set_vect(vals) + call v_neighbor%set_vect(vals) + call v_neighbor_persistent%set_vect(vals) + call v_rma_get%set_vect(vals) + call v_rma_put%set_vect(vals) + deallocate(vals) + + ! ================================================================== + ! 4. Build the expected result for halo positions + ! glob_col(j) = global index of local column j + ! After halo exchange every position j should hold glob_col(j). + ! ================================================================== + allocate(glob_col(ncol), expected(ncol)) + glob_col = desc_a%get_global_indices(owned=.false.) + do i = 1, ncol + expected(i) = real(glob_col(i),psb_spk_) + end do + allocate(result_baseline(ncol), result_neighbor(ncol), result_persistent(ncol), & + & result_rma_get(ncol), result_rma_put(ncol)) + result_baseline = huge_d + result_neighbor = huge_d + result_persistent = huge_d + result_rma_get = huge_d + result_rma_put = huge_d + + first_swap_baseline = szero + first_swap_neighbor = szero + first_swap_persistent = szero + first_swap_rma_get = szero + first_swap_rma_put = szero + + comm_setup_time_baseline = szero + comm_setup_time_neighbor = szero + comm_setup_time_persistent = szero + comm_setup_time_rma_get = szero + comm_setup_time_rma_put = szero + + ! ================================================================== + ! 6. Baseline halo exchange (Isend/Irecv in one call) + ! ================================================================== + if (run_baseline) then + comm_setup_time_baseline = psb_wtime() + call psb_comm_set(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set baseline error:', info + call psb_abort(ctxt) + end if + comm_setup_time_baseline = psb_wtime() - comm_setup_time_baseline + + first_swap_baseline = psb_wtime() + call psi_swapdata( & + swap_status=psb_comm_status_start_, & + beta=szero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata( & + swap_status=psb_comm_status_wait_, & + beta=szero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + first_swap_baseline = psb_wtime() - first_swap_baseline + end if + + + ! ================================================================== + ! 7. Neighbor topology halo exchange (start + wait) + ! ================================================================== + if (run_neighbor) then + comm_setup_time_neighbor = psb_wtime() + call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set neighbor error:', info + call psb_abort(ctxt) + end if + comm_setup_time_neighbor = psb_wtime() - comm_setup_time_neighbor + + + first_swap_neighbor = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor start error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata(psb_comm_status_wait_, szero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor wait error:', info + call psb_abort(ctxt) + end if + first_swap_neighbor = psb_wtime() - first_swap_neighbor + end if + + ! ================================================================== + ! 7b. Persistent-neighbor halo exchange (start + wait) + ! ================================================================== + if (run_persistent) then + comm_setup_time_persistent = psb_wtime() + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set persistent-neighbor error:', info + call psb_abort(ctxt) + end if + comm_setup_time_persistent = psb_wtime() - comm_setup_time_persistent + + + first_swap_persistent = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, szero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor wait error:', info + call psb_abort(ctxt) + end if + first_swap_persistent = psb_wtime() - first_swap_persistent + end if + + + + if(run_rma_get) then + comm_setup_time_rma_get = psb_wtime() + call psb_comm_set(psb_comm_rma_pull_, v_rma_get%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA get error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_get = psb_wtime() - comm_setup_time_rma_get + + first_swap_rma_get = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, szero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_get = psb_wtime() - first_swap_rma_get + end if + + + + + if(run_rma_put) then + comm_setup_time_rma_put = psb_wtime() + call psb_comm_set(psb_comm_rma_push_, v_rma_put%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA put error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_put = psb_wtime() - comm_setup_time_rma_put + + first_swap_rma_put = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, szero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_put = psb_wtime() - first_swap_rma_put + end if + + + + ! ================================================================== + ! 8. Performance: repeat exchanges and measure timings + ! ================================================================== + if (my_rank == 0) then + write(psb_out_unit,'("Timing: running ",i0," iterations for selected exchange mode(s)")') iters + end if + + tsum_baseline = szero + tsum_neighbor = szero + tsum_neighbor_persistent = szero + tsum_rma_get = szero + tsum_rma_put = szero + + do i = 1, iters + if (run_baseline) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, szero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_baseline = tsum_baseline + dt + end if + + if (run_neighbor) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, szero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor = tsum_neighbor + dt + end if + + if (run_persistent) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, szero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor_persistent = tsum_neighbor_persistent + dt + end if + + + if (run_rma_get) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, szero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_get = tsum_rma_get + dt + end if + + + if (run_rma_put) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, szero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, szero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_put = tsum_rma_put + dt + end if + + + end do + + + + call psb_amx(ctxt, tsum_baseline) + call psb_amx(ctxt, tsum_neighbor) + call psb_amx(ctxt, tsum_neighbor_persistent) + call psb_amx(ctxt, first_swap_baseline) + call psb_amx(ctxt, first_swap_neighbor) + call psb_amx(ctxt, first_swap_persistent) + call psb_amx(ctxt, comm_setup_time_baseline) + call psb_amx(ctxt, comm_setup_time_neighbor) + call psb_amx(ctxt, comm_setup_time_persistent) + call psb_amx(ctxt, comm_setup_time_rma_get) + call psb_amx(ctxt, comm_setup_time_rma_put) + + + + + if (my_rank == 0) then + if (run_baseline) then + write(psb_out_unit,'(" Avg baseline time : ",es12.5)') (tsum_baseline / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline + write(psb_out_unit,'(" First baseline time: ",es12.5)') first_swap_baseline + write(psb_out_unit,'(" Baseline comm setup: ",es12.5)') comm_setup_time_baseline + end if + if (run_neighbor) then + write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') (tsum_neighbor / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor + write(psb_out_unit,'(" First neighbor time: ",es12.5)') first_swap_neighbor + write(psb_out_unit,'(" Neighbor comm setup: ",es12.5)') comm_setup_time_neighbor + end if + if (run_persistent) then + write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') (tsum_neighbor_persistent / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_neighbor_persistent + write(psb_out_unit,'(" First pers-neigh time: ",es12.5)') first_swap_persistent + write(psb_out_unit,'(" Persistent comm setup: ",es12.5)') comm_setup_time_persistent + end if + if (run_rma_get) then + write(psb_out_unit,'(" Avg RMA get time : ",es12.5)') (tsum_rma_get / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot RMA get time : ",es12.5)') tsum_rma_get + write(psb_out_unit,'(" First RMA get time : ",es12.5)') first_swap_rma_get + write(psb_out_unit,'(" RMA get comm setup : ",es12.5)') comm_setup_time_rma_get + end if + if (run_rma_put) then + write(psb_out_unit,'(" Avg RMA put time : ",es12.5)') (tsum_rma_put / real(iters,psb_spk_)) + write(psb_out_unit,'(" Tot RMA put time : ",es12.5)') tsum_rma_put + write(psb_out_unit,'(" First RMA put time : ",es12.5)') first_swap_rma_put + write(psb_out_unit,'(" RMA put comm setup : ",es12.5)') comm_setup_time_rma_put + end if + end if + + ! ================================================================== + ! 8. Extract results and compare + ! ================================================================== + result_baseline = v_baseline%v%v + result_neighbor = v_neighbor%v%v + result_persistent = v_neighbor_persistent%v%v + result_rma_get = v_rma_get%v%v + result_rma_put = v_rma_put%v%v + + ! --- Cross Checks --- + if (run_baseline .and. run_neighbor) & + call check_result("cross-check baseline vs neighbor", result_baseline, result_neighbor, ncol, tol) + + if (run_baseline .and. run_persistent) & + call check_result("cross-check baseline vs pers-nei", result_baseline, result_persistent, ncol, tol) + + if (run_baseline .and. run_rma_get) & + call check_result("cross-check baseline vs rma-get", result_baseline, result_rma_get, ncol, tol) + + if (run_baseline .and. run_rma_put) & + call check_result("cross-check baseline vs rma-put", result_baseline, result_rma_put, ncol, tol) + + ! --- Absolute Correctness Checks against Expected --- + if (run_baseline) & + call check_result("baseline absolute correctness", result_baseline, expected, ncol, tol) + + if (run_neighbor) & + call check_result("neighbor absolute correctness", result_neighbor, expected, ncol, tol) + + if (run_persistent) & + call check_result("pers-neigh absolute correctness", result_persistent, expected, ncol, tol) + + if (run_rma_get) & + call check_result("rma_get absolute correctness", result_rma_get, expected, ncol, tol) + + if (run_rma_put) & + call check_result("rma_put absolute correctness", result_rma_put, expected, ncol, tol) + + ! ================================================================== + ! 9. Summary + ! ================================================================== + call psb_barrier(ctxt) + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Results: ",i0," / ",i0," tests passed")') n_pass, n_total + if (n_pass == n_total) then + write(psb_out_unit,'(" STATUS: ALL PASSED")') + else + write(psb_out_unit,'(" STATUS: SOME FAILURES")') + end if + write(psb_out_unit,'("================================================")') + end if + call psb_barrier(ctxt) + + ! ================================================================== + ! 10. Cleanup + ! ================================================================== + deallocate(result_baseline, result_neighbor, result_persistent, expected, glob_col) + +9999 call psb_gefree(v_baseline, desc_a, info) + call psb_gefree(v_neighbor, desc_a, info) + call psb_gefree(v_neighbor_persistent, desc_a, info) + if (mat_allocated) call psb_spfree(a_mat, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_exit(ctxt) + + +contains + + ! Helper routine to compare two arrays, reduce the error across MPI ranks, and print the result + subroutine check_result(test_name, arr1, arr2, n, tolerance) + character(len=*), intent(in) :: test_name + real(psb_spk_), intent(in) :: arr1(:), arr2(:) + integer(psb_ipk_), intent(in):: n + real(psb_spk_), intent(in) :: tolerance + real(psb_spk_) :: err_val + + n_total = n_total + 1 + + if (n > 0) then + err_val = maxval(abs(arr1(1:n) - arr2(1:n))) + else + err_val = szero + end if + + ! Get max error across all processes + call psb_amx(ctxt, err_val) + + if (my_rank == 0) then + if ((err_val >= szero) .and. (err_val < tolerance)) then + write(psb_out_unit,'(" [PASS] ", a, t45, ": err = ",es12.5)') test_name, err_val + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] ", a, t45, ": err = ",es12.5)') test_name, err_val + end if + end if + end subroutine check_result + +end program psb_s_comm_test diff --git a/test/comm/swapdata/psb_z_comm_test.F90 b/test/comm/swapdata/psb_z_comm_test.F90 new file mode 100644 index 000000000..cb956f662 --- /dev/null +++ b/test/comm/swapdata/psb_z_comm_test.F90 @@ -0,0 +1,736 @@ +! +! Test program for z-type halo exchange: baseline vs neighbor topology. +! +! This test exercises the lower-level psi_swapdata interface directly +! to compare the two communication paths implemented in psi_dswapdata.F90: +! +! 1. Baseline (Isend/Irecv) : flag = IOR(psb_swap_send_, psb_swap_recv_) +! 2. Neighbor topology (Ineighbor_alltoallv) : flag = psb_swap_start_ then psb_swap_wait_ +! +! It builds a 3D block-partitioned descriptor with a 7-point stencil, +! fills owned entries with their global index, performs halo exchange +! via both paths, then checks: +! (a) The two paths produce identical results (cross-check) +! (b) Every halo entry equals the global index of its source (absolute check) +! +! Run with: mpirun -np

./psb_z_comm_test +! +program psb_z_comm_test + use psb_base_mod + use psb_util_mod + use psb_error_mod, only: psb_set_debug_level, psb_debug_ext_ + use psi_mod + use psb_comm_factory_mod, only: psb_comm_set, psb_comm_free + use psb_comm_schemes_mod, only: psb_comm_ineighbor_alltoallv_, psb_comm_persistent_ineighbor_alltoallv_, & + & psb_comm_isend_irecv_, psb_comm_rma_pull_, psb_comm_rma_push_ + use psb_comm_schemes_mod, only: psb_comm_status_start_, psb_comm_status_wait_, psb_comm_status_unknown_ + implicit none + + ! ---- parameters ---- + integer(psb_ipk_) :: idim + integer(psb_ipk_) :: argc + integer(psb_ipk_) :: iters + character(len=256) :: arg + character(len=16) :: mode + character(len=256) :: matrix_file + character(len=2) :: matrix_fmt + logical :: debug_swapdata + logical :: use_external_matrix + + ! ---- descriptor / context ---- + type(psb_ctxt_type) :: ctxt + type(psb_desc_type) :: desc_a + integer(psb_ipk_) :: my_rank, np, info, i, nr, number_of_local_rows + integer(psb_lpk_) :: m, nt + integer(psb_lpk_), allocatable :: myidx(:) + type(psb_zspmat_type) :: a_mat + type(psb_lzspmat_type) :: aux_a + + ! ---- vectors ---- + type(psb_z_vect_type) :: v_baseline, v_neighbor, v_neighbor_persistent, v_rma_get, v_rma_put + + ! ---- temporary / comparison arrays ---- + complex(psb_dpk_), allocatable :: vals(:) + complex(psb_dpk_), allocatable :: result_baseline(:), result_neighbor(:), result_persistent(:), & + & result_rma_get(:), result_rma_put(:) + complex(psb_dpk_), allocatable :: expected(:) + + ! ---- halo index bookkeeping ---- + integer(psb_ipk_) :: nrow, ncol, num_neighbors, send_indexes, receive_indexes + class(psb_i_base_vect_type), pointer :: halo_indexes + + ! ---- error / reporting ---- + integer(psb_ipk_) :: n_pass, n_total, imode + logical :: run_baseline, run_neighbor, run_persistent, run_rma_get, run_rma_put + logical :: mat_allocated + logical :: comm_ok + real(psb_dpk_) :: err, tol + real(psb_dpk_) :: first_swap_baseline, first_swap_neighbor, first_swap_persistent, & + & first_swap_rma_get, first_swap_rma_put + real(psb_dpk_) :: comm_setup_time_baseline, comm_setup_time_neighbor, comm_setup_time_persistent, & + & comm_setup_time_rma_get, comm_setup_time_rma_put + real(psb_dpk_) :: t0, t1, dt, tsum_baseline, tsum_neighbor, tsum_neighbor_persistent, & + & tsum_rma_get, tsum_rma_put + integer(psb_lpk_), allocatable :: glob_col(:) + character(len=40) :: name + real(psb_dpk_) :: huge_d + + name = 'psb_z_comm_test' + tol = 1.0e-12_psb_dpk_ + huge_d = huge(done) + n_pass = 0 + n_total = 0 + iters = 5 + mode = 'both' + debug_swapdata = .false. + matrix_file = '' + matrix_fmt = 'MM' + use_external_matrix = .false. + mat_allocated = .false. + + ! ---- parse command-line argument for idim ---- + idim = 10 + argc = command_argument_count() + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--dim') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) idim + end if + else if (trim(arg) == '--iters') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) iters + end if + else if (index(psb_toupper(trim(arg)),'--MATRIX=') == 1) then + matrix_file = adjustl(arg(10:len_trim(arg))) + else if (trim(psb_toupper(arg)) == '--MATRIX') then + if (i < argc) then + call get_command_argument(i+1, matrix_file) + end if + else if (index(psb_toupper(trim(arg)),'--FMT=') == 1) then + arg = psb_toupper(adjustl(arg(7:len_trim(arg)))) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + else if (trim(psb_toupper(arg)) == '--FMT') then + if (i < argc) then + call get_command_argument(i+1, arg) + arg = psb_toupper(trim(arg)) + if ((trim(arg) == 'MM') .or. (trim(arg) == 'HB')) matrix_fmt = trim(arg) + end if + end if + end do + use_external_matrix = (len_trim(matrix_file) > 0) + + ! parse optional mode flag + do i = 1, argc + call get_command_argument(i, arg) + if (trim(arg) == '--mode') then + if (i < argc) then + call get_command_argument(i+1, arg) + read(arg, *) mode + end if + else if (trim(arg) == '--debug') then + debug_swapdata = .true. + end if + end do + + if (debug_swapdata) then + call psb_set_debug_level(psb_debug_ext_) + end if + + run_baseline = .false. + run_neighbor = .false. + run_persistent = .false. + run_rma_get = .false. + run_rma_put = .false. + + + select case (trim(adjustl(mode))) + case ('both','all') + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. + case ('baseline') + run_baseline = .true. + case ('neighbor') + run_neighbor = .true. + case ('persistent','persistent_neighbor','persistent-neighbor') + run_persistent = .true. + case ('rma_get') + run_rma_get = .true. + case ('rma_put') + run_rma_put = .true. + case default + run_baseline = .true. + run_neighbor = .true. + run_persistent = .true. + run_rma_get = .true. + run_rma_put = .true. + end select + + if ((.not.use_external_matrix) .and. (idim <= 0)) then + write(*,*) 'Invalid dimension specified. Usage: --dim ' + call psb_abort(ctxt) + end if + ! ================================================================== + ! 1. Initialise MPI / PSBLAS context + ! ================================================================== + call psb_init(ctxt) + call psb_info(ctxt, my_rank, np) + + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Test: z-type halo baseline vs neighbor topo")') + write(psb_out_unit,'(" Processes : ",i0)') np + if (use_external_matrix) then + write(psb_out_unit,'(" Matrix : ",a)') trim(matrix_file) + write(psb_out_unit,'(" Format : ",a)') trim(matrix_fmt) + else + write(psb_out_unit,'(" Grid : ",i0," x ",i0," x ",i0)') idim,idim,idim + end if + write(psb_out_unit,'(" Usage : ./psb_z_comm_test [--dim N] [--iters N] [--mode ...] ",& + &"[--matrix ] [--fmt MM|HB]")') + write(psb_out_unit,'("================================================")') + end if + + ! ================================================================== + ! 2. Build descriptor with 7-point stencil connectivity + ! ================================================================== + if (use_external_matrix) then + select case(psb_toupper(trim(matrix_fmt))) + case('MM') + call mm_mat_read(aux_a,info,filename=trim(matrix_file)) + case('HB') + call hb_read(aux_a,info,filename=trim(matrix_file)) + case default + info = psb_err_internal_error_ + end select + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matrix read error:', info + call psb_abort(ctxt) + end if + if (aux_a%get_nrows() /= aux_a%get_ncols()) then + write(psb_err_unit,*) my_rank, 'matrix must be square for this test' + call psb_abort(ctxt) + end if + m = aux_a%get_nrows() + call psb_matdist(aux_a, a_mat, ctxt, desc_a, info, fmt='CSR', parts=part_block) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'matdist error:', info + call psb_abort(ctxt) + end if + mat_allocated = .true. + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + else + m = (1_psb_lpk_ * idim) * idim * idim + nt = (m + np - 1) / np + nr = max(0, min(int(nt,psb_ipk_), int(m - (my_rank * nt),psb_ipk_))) + + call psb_cdall(ctxt, desc_a, info, nl=nr) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdall error:', info + call psb_abort(ctxt) + end if + + myidx = desc_a%get_global_indices() + number_of_local_rows = size(myidx) + + do i = 1, number_of_local_rows + call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)/), desc_a, info) + if (myidx(i) > 1) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-1/), desc_a, info) + if (myidx(i) < m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+1/), desc_a, info) + if (myidx(i) > idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)-idim/), desc_a, info) + if (myidx(i) + idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), (/myidx(i)+idim/), desc_a, info) + if (myidx(i) > int(idim,psb_lpk_)*idim) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) - int(idim,psb_lpk_)*idim/), desc_a, info) + if (myidx(i) + int(idim,psb_lpk_)*idim <= m) & + & call psb_cdins(1_psb_ipk_, (/myidx(i)/), & + & (/myidx(i) + int(idim,psb_lpk_)*idim/), desc_a, info) + end do + + call psb_cdasb(desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'cdasb error:', info + call psb_abort(ctxt) + end if + end if + + nrow = desc_a%get_local_rows() ! owned + ncol = desc_a%get_local_cols() ! owned + halo + + ! ================================================================== + ! 3. Allocate two D vectors (scratch) and fill owned entries + ! ================================================================== + call psb_geall(v_baseline, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall baseline error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_neighbor, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_neighbor_persistent, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_get, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geall(v_rma_put, desc_a, info) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geall rma-put error:', info + call psb_abort(ctxt) + end if + + + call psb_geasb(v_baseline, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb baseline error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_neighbor, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_neighbor_persistent, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb persistent-neighbor error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_get, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-get error:', info + call psb_abort(ctxt) + end if + call psb_geasb(v_rma_put, desc_a, info, scratch=.true.) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'geasb rma-put error:', info + call psb_abort(ctxt) + end if + + + + ! Fill owned entries with the global index value + allocate(vals(ncol)) + vals = zzero + do i = 1, number_of_local_rows + vals(i) = real(myidx(i),psb_dpk_) + end do + call v_baseline%set_vect(vals) + call v_neighbor%set_vect(vals) + call v_neighbor_persistent%set_vect(vals) + call v_rma_get%set_vect(vals) + call v_rma_put%set_vect(vals) + deallocate(vals) + + ! ================================================================== + ! 4. Build the expected result for halo positions + ! glob_col(j) = global index of local column j + ! After halo exchange every position j should hold glob_col(j). + ! ================================================================== + allocate(glob_col(ncol), expected(ncol)) + glob_col = desc_a%get_global_indices(owned=.false.) + do i = 1, ncol + expected(i) = real(glob_col(i),psb_dpk_) + end do + allocate(result_baseline(ncol), result_neighbor(ncol), result_persistent(ncol), & + & result_rma_get(ncol), result_rma_put(ncol)) + result_baseline = huge_d + result_neighbor = huge_d + result_persistent = huge_d + result_rma_get = huge_d + result_rma_put = huge_d + + first_swap_baseline = dzero + first_swap_neighbor = dzero + first_swap_persistent = dzero + first_swap_rma_get = dzero + first_swap_rma_put = dzero + + comm_setup_time_baseline = dzero + comm_setup_time_neighbor = dzero + comm_setup_time_persistent = dzero + comm_setup_time_rma_get = dzero + comm_setup_time_rma_put = dzero + + ! ================================================================== + ! 6. Baseline halo exchange (Isend/Irecv in one call) + ! ================================================================== + if (run_baseline) then + comm_setup_time_baseline = psb_wtime() + call psb_comm_set(psb_comm_isend_irecv_, v_baseline%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set baseline error:', info + call psb_abort(ctxt) + end if + comm_setup_time_baseline = psb_wtime() - comm_setup_time_baseline + + first_swap_baseline = psb_wtime() + call psi_swapdata( & + swap_status=psb_comm_status_start_, & + beta=zzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata( & + swap_status=psb_comm_status_wait_, & + beta=zzero, & + y=v_baseline%v, & + desc_a=desc_a, & + info=info, & + data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'baseline swap error:', info + call psb_abort(ctxt) + end if + first_swap_baseline = psb_wtime() - first_swap_baseline + end if + + + ! ================================================================== + ! 7. Neighbor topology halo exchange (start + wait) + ! ================================================================== + if (run_neighbor) then + comm_setup_time_neighbor = psb_wtime() + call psb_comm_set(psb_comm_ineighbor_alltoallv_, v_neighbor%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set neighbor error:', info + call psb_abort(ctxt) + end if + comm_setup_time_neighbor = psb_wtime() - comm_setup_time_neighbor + + + first_swap_neighbor = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor start error:', info + call psb_abort(ctxt) + end if + + call psi_swapdata(psb_comm_status_wait_, zzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'neighbor wait error:', info + call psb_abort(ctxt) + end if + first_swap_neighbor = psb_wtime() - first_swap_neighbor + end if + + ! ================================================================== + ! 7b. Persistent-neighbor halo exchange (start + wait) + ! ================================================================== + if (run_persistent) then + comm_setup_time_persistent = psb_wtime() + call psb_comm_set(psb_comm_persistent_ineighbor_alltoallv_, v_neighbor_persistent%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set persistent-neighbor error:', info + call psb_abort(ctxt) + end if + comm_setup_time_persistent = psb_wtime() - comm_setup_time_persistent + + + first_swap_persistent = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, zzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'persistent-neighbor wait error:', info + call psb_abort(ctxt) + end if + first_swap_persistent = psb_wtime() - first_swap_persistent + end if + + + + if(run_rma_get) then + comm_setup_time_rma_get = psb_wtime() + call psb_comm_set(psb_comm_rma_pull_, v_rma_get%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA get error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_get = psb_wtime() - comm_setup_time_rma_get + + first_swap_rma_get = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, zzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA get wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_get = psb_wtime() - first_swap_rma_get + end if + + + + + if(run_rma_put) then + comm_setup_time_rma_put = psb_wtime() + call psb_comm_set(psb_comm_rma_push_, v_rma_put%v%comm_handle, info) + if (info /= 0) then + write(psb_err_unit,*) my_rank, 'psb_comm_set RMA put error:', info + call psb_abort(ctxt) + end if + comm_setup_time_rma_put = psb_wtime() - comm_setup_time_rma_put + + first_swap_rma_put = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put start error:', info + call psb_abort(ctxt) + end if + call psi_swapdata(psb_comm_status_wait_, zzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + if (info /= psb_success_) then + write(psb_err_unit,*) my_rank, 'RMA put wait error:', info + call psb_abort(ctxt) + end if + first_swap_rma_put = psb_wtime() - first_swap_rma_put + end if + + + + ! ================================================================== + ! 8. Performance: repeat exchanges and measure timings + ! ================================================================== + if (my_rank == 0) then + write(psb_out_unit,'("Timing: running ",i0," iterations for selected exchange mode(s)")') iters + end if + + tsum_baseline = dzero + tsum_neighbor = dzero + tsum_neighbor_persistent = dzero + tsum_rma_get = dzero + tsum_rma_put = dzero + + do i = 1, iters + if (run_baseline) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, zzero, v_baseline%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_baseline = tsum_baseline + dt + end if + + if (run_neighbor) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, zzero, v_neighbor%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor = tsum_neighbor + dt + end if + + if (run_persistent) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, zzero, v_neighbor_persistent%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_neighbor_persistent = tsum_neighbor_persistent + dt + end if + + + if (run_rma_get) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, zzero, v_rma_get%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_get = tsum_rma_get + dt + end if + + + if (run_rma_put) then + t0 = psb_wtime() + call psi_swapdata(psb_comm_status_start_, zzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + call psi_swapdata(psb_comm_status_wait_, zzero, v_rma_put%v, desc_a, info, data=psb_comm_halo_) + t1 = psb_wtime() + dt = t1 - t0 + call psb_amx(ctxt, dt) + tsum_rma_put = tsum_rma_put + dt + end if + + + end do + + + + call psb_amx(ctxt, tsum_baseline) + call psb_amx(ctxt, tsum_neighbor) + call psb_amx(ctxt, tsum_neighbor_persistent) + call psb_amx(ctxt, first_swap_baseline) + call psb_amx(ctxt, first_swap_neighbor) + call psb_amx(ctxt, first_swap_persistent) + call psb_amx(ctxt, comm_setup_time_baseline) + call psb_amx(ctxt, comm_setup_time_neighbor) + call psb_amx(ctxt, comm_setup_time_persistent) + call psb_amx(ctxt, comm_setup_time_rma_get) + call psb_amx(ctxt, comm_setup_time_rma_put) + + + + + if (my_rank == 0) then + if (run_baseline) then + write(psb_out_unit,'(" Avg baseline time : ",es12.5)') (tsum_baseline / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot baseline time : ",es12.5)') tsum_baseline + write(psb_out_unit,'(" First baseline time: ",es12.5)') first_swap_baseline + write(psb_out_unit,'(" Baseline comm setup: ",es12.5)') comm_setup_time_baseline + end if + if (run_neighbor) then + write(psb_out_unit,'(" Avg neighbor time : ",es12.5)') (tsum_neighbor / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot neighbor time : ",es12.5)') tsum_neighbor + write(psb_out_unit,'(" First neighbor time: ",es12.5)') first_swap_neighbor + write(psb_out_unit,'(" Neighbor comm setup: ",es12.5)') comm_setup_time_neighbor + end if + if (run_persistent) then + write(psb_out_unit,'(" Avg pers-neigh time: ",es12.5)') (tsum_neighbor_persistent / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot pers-neigh time: ",es12.5)') tsum_neighbor_persistent + write(psb_out_unit,'(" First pers-neigh time: ",es12.5)') first_swap_persistent + write(psb_out_unit,'(" Persistent comm setup: ",es12.5)') comm_setup_time_persistent + end if + if (run_rma_get) then + write(psb_out_unit,'(" Avg RMA get time : ",es12.5)') (tsum_rma_get / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot RMA get time : ",es12.5)') tsum_rma_get + write(psb_out_unit,'(" First RMA get time : ",es12.5)') first_swap_rma_get + write(psb_out_unit,'(" RMA get comm setup : ",es12.5)') comm_setup_time_rma_get + end if + if (run_rma_put) then + write(psb_out_unit,'(" Avg RMA put time : ",es12.5)') (tsum_rma_put / real(iters,psb_dpk_)) + write(psb_out_unit,'(" Tot RMA put time : ",es12.5)') tsum_rma_put + write(psb_out_unit,'(" First RMA put time : ",es12.5)') first_swap_rma_put + write(psb_out_unit,'(" RMA put comm setup : ",es12.5)') comm_setup_time_rma_put + end if + end if + + ! ================================================================== + ! 8. Extract results and compare + ! ================================================================== + result_baseline = v_baseline%v%v + result_neighbor = v_neighbor%v%v + result_persistent = v_neighbor_persistent%v%v + result_rma_get = v_rma_get%v%v + result_rma_put = v_rma_put%v%v + + ! --- Cross Checks --- + if (run_baseline .and. run_neighbor) & + call check_result("cross-check baseline vs neighbor", result_baseline, result_neighbor, ncol, tol) + + if (run_baseline .and. run_persistent) & + call check_result("cross-check baseline vs pers-nei", result_baseline, result_persistent, ncol, tol) + + if (run_baseline .and. run_rma_get) & + call check_result("cross-check baseline vs rma-get", result_baseline, result_rma_get, ncol, tol) + + if (run_baseline .and. run_rma_put) & + call check_result("cross-check baseline vs rma-put", result_baseline, result_rma_put, ncol, tol) + + ! --- Absolute Correctness Checks against Expected --- + if (run_baseline) & + call check_result("baseline absolute correctness", result_baseline, expected, ncol, tol) + + if (run_neighbor) & + call check_result("neighbor absolute correctness", result_neighbor, expected, ncol, tol) + + if (run_persistent) & + call check_result("pers-neigh absolute correctness", result_persistent, expected, ncol, tol) + + if (run_rma_get) & + call check_result("rma_get absolute correctness", result_rma_get, expected, ncol, tol) + + if (run_rma_put) & + call check_result("rma_put absolute correctness", result_rma_put, expected, ncol, tol) + + ! ================================================================== + ! 9. Summary + ! ================================================================== + call psb_barrier(ctxt) + if (my_rank == 0) then + write(psb_out_unit,'("================================================")') + write(psb_out_unit,'(" Results: ",i0," / ",i0," tests passed")') n_pass, n_total + if (n_pass == n_total) then + write(psb_out_unit,'(" STATUS: ALL PASSED")') + else + write(psb_out_unit,'(" STATUS: SOME FAILURES")') + end if + write(psb_out_unit,'("================================================")') + end if + call psb_barrier(ctxt) + + ! ================================================================== + ! 10. Cleanup + ! ================================================================== + deallocate(result_baseline, result_neighbor, result_persistent, expected, glob_col) + +9999 call psb_gefree(v_baseline, desc_a, info) + call psb_gefree(v_neighbor, desc_a, info) + call psb_gefree(v_neighbor_persistent, desc_a, info) + if (mat_allocated) call psb_spfree(a_mat, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_exit(ctxt) + + +contains + + ! Helper routine to compare two arrays, reduce the error across MPI ranks, and print the result + subroutine check_result(test_name, arr1, arr2, n, tolerance) + character(len=*), intent(in) :: test_name + complex(psb_dpk_), intent(in) :: arr1(:), arr2(:) + integer(psb_ipk_), intent(in):: n + real(psb_dpk_), intent(in) :: tolerance + real(psb_dpk_) :: err_val + + n_total = n_total + 1 + + if (n > 0) then + err_val = maxval(abs(arr1(1:n) - arr2(1:n))) + else + err_val = dzero + end if + + ! Get max error across all processes + call psb_amx(ctxt, err_val) + + if (my_rank == 0) then + if ((err_val >= dzero) .and. (err_val < tolerance)) then + write(psb_out_unit,'(" [PASS] ", a, t45, ": err = ",es12.5)') test_name, err_val + n_pass = n_pass + 1 + else + write(psb_out_unit,'(" [FAIL] ", a, t45, ": err = ",es12.5)') test_name, err_val + end if + end if + end subroutine check_result + +end program psb_z_comm_test diff --git a/test/computational_routines/CMakeLists.txt b/test/computational_routines/CMakeLists.txt index c0a147224..89f5ed9f3 100644 --- a/test/computational_routines/CMakeLists.txt +++ b/test/computational_routines/CMakeLists.txt @@ -30,6 +30,7 @@ set(PSBLAS_LIBS psblas::util psblas::prec psblas::base) include(${CMAKE_CURRENT_LIST_DIR}/geaxpby/CMakeLists.txt) include(${CMAKE_CURRENT_LIST_DIR}/gedot/CMakeLists.txt) +include(${CMAKE_CURRENT_LIST_DIR}/spmm/CMakeLists.txt) # Create executables diff --git a/test/computational_routines/Makefile b/test/computational_routines/Makefile new file mode 100644 index 000000000..ce5dc3297 --- /dev/null +++ b/test/computational_routines/Makefile @@ -0,0 +1,13 @@ +SUBDIRS := geaxpby gedot spmm + +.PHONY: all $(SUBDIRS) clean + +all: $(SUBDIRS) + +$(SUBDIRS): + $(MAKE) -C $@ + +clean: + @for d in $(SUBDIRS); do \ + $(MAKE) -C $$d clean; \ + done diff --git a/test/computational_routines/README.md b/test/computational_routines/README.md index 87408b94a..5bc710444 100644 --- a/test/computational_routines/README.md +++ b/test/computational_routines/README.md @@ -19,17 +19,36 @@ The innovative approach introduced in this test suite is to have a theoretical r ## Directory description Each directory has the name of the computational kernel routines described in the documentation of the version 3.9 of the PSBLAS library. In each directory there are different files and directories: -- parallel/ -- serial/ + +- parallel/ +- serial/ - vectors/ +- runs/ +- logs/ - autotest.sh - Makefile - <routine_name>.f90 - psb_<routine_name>_test.f90 - README.md +## Standard test runner and log schema + +All `autotest.sh` scripts use a shared helper in `test/computational_routines/common/testlib.sh` to standardize execution and logging. Each test writes logs in `logs/` with the format: + +- `[RUN] ` and `[DATE] ` header +- `[DIFF] vs : differences` for each comparison + +The main driver [test/computational_routines/test.sh](test/computational_routines/test.sh) aggregates logs from each `logs/` directory. + +Process count for multi-process runs is capped to 4 by default. Override with: + +- `PSBLAS_TEST_NP=` to set a specific process count +- `PSBLAS_TEST_MAX_NP=` to change the default cap + ## Routines + In this test suite were considered only computational routines implemented by PSBLAS, according to the version 3.9 of the documentation. In the following table are reported all the kernels, their implementation and wheter or not they were tested yet. + |**Kernel**| **PSBLAS Subroutine**|**Description**|**Test**| | ------------------------------- | :--------------------------: | ---------------------------------------------------------------------- | :---------------: | |**General Dense Matrix Sum**| `psb_geaxpby`| This subroutine is an interface to the computational kernel for dense matrix sum:$$Y \leftarrow \alpha X + \beta Y$$|Yes ✅| diff --git a/test/computational_routines/common/testlib.sh b/test/computational_routines/common/testlib.sh new file mode 100644 index 000000000..35dfb1b69 --- /dev/null +++ b/test/computational_routines/common/testlib.sh @@ -0,0 +1,116 @@ +#!/bin/bash + +# Common helpers for computational_routines autotest.sh scripts. + +# Color codes +GREEN="\033[0;32m" +RED="\033[0;31m" +BLUE="\033[0;34m" +YELLOW="\033[33m" +RESET="\033[0m" + +info() { + echo -e "${BLUE}[INFO]\t $*${RESET}" +} + +warn() { + echo -e "${YELLOW}[WARNING] $*${RESET}" +} + +err() { + echo -e "${RED}[ERROR]\t$*${RESET}" +} + +ensure_dirs() { + for d in "$@"; do + mkdir -p "$d" + done +} + +log_header() { + local logfile="$1" + local title="$2" + { + echo "[RUN] ${title}" + echo "[DATE] $(date +"%Y-%m-%d %H:%M:%S")" + } >> "$logfile" +} + +run_mpi() { + local np="$1" + local exe="$2" + local label="$3" + info "Starting ${label}" + mpirun -np "$np" "$exe" +} + +compare_dirs() { + local dir1="$1" + local dir2="$2" + local logfile="$3" + local eps + + eps=${PSBLAS_TEST_TOL:-1e-6} + + if [[ ! -d "$dir1" || ! -d "$dir2" ]]; then + warn "Missing directories for comparison (${dir1}, ${dir2})." + return 0 + fi + + for file1 in "$dir1"/*; do + if [[ ! -f "$file1" ]]; then + continue + fi + local filename + filename=$(basename "$file1") + local file2="$dir2/$filename" + if [[ -f "$file2" ]]; then + local diff_count + if [[ "${filename}" == *.mtx ]]; then + diff_count=$(awk -v f1="$file1" -v f2="$file2" -v eps="$eps" ' + function readvals(fname, vals, line, n, header_seen) { + n = 0 + while ((getline line < fname) > 0) { + if (line ~ /^%/) continue + if (line ~ /^[[:space:]]*$/) continue + if (!header_seen) { header_seen = 1; continue } + n++; vals[n] = line + 0 + } + close(fname) + return n + } + BEGIN { + n1 = readvals(f1, a) + n2 = readvals(f2, b) + n = (n1 < n2 ? n1 : n2) + diff = 0 + for (i = 1; i <= n; i++) { + d = a[i] - b[i] + if (d < 0) d = -d + if (d > eps) diff++ + } + if (n1 != n2) diff += (n1 > n2 ? n1 - n2 : n2 - n1) + print diff + }') + else + diff_count=$(diff -U 0 "$file1" "$file2" | grep -E '^[+-]' | grep -v '^[+-]{3}' | wc -l) + fi + echo "[DIFF] ${file1} vs ${file2}: ${diff_count} differences" >> "$logfile" + else + err "File ${filename} does not exist in ${dir2}" + fi + done +} + +get_num_procs() { + local detected + local max + detected=${PSBLAS_TEST_NP:-$(nproc)} + max=${PSBLAS_TEST_MAX_NP:-4} + + if [[ "$detected" -gt "$max" ]]; then + detected="$max" + fi + + echo "$detected" +} diff --git a/test/computational_routines/geaxpby/README.md b/test/computational_routines/geaxpby/README.md index 797abc708..57e17a619 100644 --- a/test/computational_routines/geaxpby/README.md +++ b/test/computational_routines/geaxpby/README.md @@ -6,7 +6,7 @@ This is a directory developed by Luca Pepè Sciarria and Simone Staccone froma T Steps to reproduce the tests: - Compile the code using ``` make ``` (Optional) - Launch the script ./autotest.sh or with source ./autotest.sh if you want to add modules to the .bashrc file permenently. -- Check the output log file psblas_geaxpby_test.log to collect results +- Check the output log file logs/psblas_geaxpby_test.log to collect results NOTE: If the code is changed and a new compilation is needed to show the changes, the autotest.sh script isn't aware of this scenario, therefore it is necessary to manually recompile the code. diff --git a/test/computational_routines/geaxpby/autotest.sh b/test/computational_routines/geaxpby/autotest.sh index be4444a9b..dc6552f67 100755 --- a/test/computational_routines/geaxpby/autotest.sh +++ b/test/computational_routines/geaxpby/autotest.sh @@ -1,60 +1,39 @@ #!/bin/bash +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +source "${script_dir}/../common/testlib.sh" + # Variables definition dir1="serial" dir2="parallel" -log_file_name="psblas_geaxpby_test.log" -num_procs=$(nproc) - +num_procs=$(get_num_procs) +log_dir="logs" +log_file_name="${log_dir}/psblas_geaxpby_test.log" -# Define color codes -GREEN="\033[0;32m" -RED="\033[0;31m" -BLUE="\033[0;34m" -YELLOW="\033[33m" -RESET="\033[0m" +ensure_dirs runs serial parallel vectors "${log_dir}" +log_header "${log_file_name}" "psb_geaxpby" # Check if the executable ELF file exists if [ ! -f "./runs/psb_geaxpby_test" ]; then - echo -e "${YELLOW}[WARNING] Executable not found. Running make...${RESET}" + warn "Executable not found. Running make..." make if [ ! -f "./runs/psb_geaxpby_test" ]; then - echo -e "${RED}[ERROR] Failed to create executable. Check make command.${RESET}" + err "Failed to create executable. Check make command." fi else - echo -e "${BLUE}[INFO]\t The executable already exists. Skipping the make process.${RESET}" + info "The executable already exists. Skipping the make process." fi # Excecute tests and save results -echo -e "${BLUE}[INFO]\t Running the PSBLAS psb_geaxpby test...${RESET}" -echo "" -echo -e "${BLUE}[INFO]\t Starting single process computation${RESET}" -mpirun -np 1 ./runs/psb_geaxpby_test -echo -e "${BLUE}[INFO]\t Single process computation terminated correctly${RESET}" -echo "" -echo -e "${BLUE}[INFO]\t Starting $num_procs processes computation${RESET}" -mpirun -np $num_procs ./runs/psb_geaxpby_test -echo -e "${BLUE}[INFO]\t Multiple processes computation terminated correctly${RESET}" - - -echo "" >> ${log_file_name} +info "Running the PSBLAS psb_geaxpby test..." +echo "" >> "${log_file_name}" +run_mpi 1 ./runs/psb_geaxpby_test "single process computation" +run_mpi "$num_procs" ./runs/psb_geaxpby_test "${num_procs} processes computation" # Iterate through files in the first directory -for file1 in "$dir1"/*; do - filename=$(basename "$file1") # Extract the filename - file2="$dir2/$filename" # Construct the path for the second directory - - # Check if the file exists in the second directory - if [ -f "$file2" ]; then - diff_count=$(diff "$file1" "$file2" | wc -l) # Compare the files - echo "Comparison between $file1 and $file2: $diff_count differences" >> ${log_file_name} - # echo "Comparing $file1 and $file2: $diff_count" - else - echo -e "${RED}[ERROR] File $filename does not exist in $dir2${RESET}" - fi -done +compare_dirs "$dir1" "$dir2" "${log_file_name}" -echo -e "${BLUE}[INFO]\t PSBLAS psb_geaxpby test succesfully completed.${RESET}" +info "PSBLAS psb_geaxpby test successfully completed." diff --git a/test/computational_routines/geaxpby/geaxpby.f90 b/test/computational_routines/geaxpby/geaxpby.f90 index a07c797c6..fa02f17b1 100644 --- a/test/computational_routines/geaxpby/geaxpby.f90 +++ b/test/computational_routines/geaxpby/geaxpby.f90 @@ -17,7 +17,7 @@ program main integer(psb_ipk_) :: tests_number, count ! cycle indexes variables - integer(psb_ipk_) :: i,j,k,h,l + integer(psb_ipk_) :: i,j,k,h integer(psb_ipk_) :: info, ret, unit ! time stats variables @@ -28,6 +28,7 @@ program main ! others character(len=:), allocatable :: output_file_name + integer(psb_ipk_) :: last_percent_sp, last_percent_dp ! Initialize parameters x(1) = "vectors/x1.mtx" @@ -51,6 +52,8 @@ program main arr_size = 10000 tests_number = size(x) * size(y) * size(alpha) * size(beta) count = 0 + last_percent_sp = -1 + last_percent_dp = -1 call psb_init(ctxt) call psb_info(ctxt,my_rank,np) @@ -95,6 +98,7 @@ program main if(my_rank == psb_root_) then count = count + 1 + call print_progress(count, tests_number, last_percent_sp, "single precision") call date_and_time(date, time, zones, values) if(ret /= -1) then @@ -145,6 +149,7 @@ program main if(my_rank == psb_root_) then count = count + 1 + call print_progress(count, tests_number, last_percent_dp, "double precision") call date_and_time(date, time, zones, values) if(ret == 0) then @@ -198,4 +203,31 @@ program main call psb_exit(ctxt) return +contains + + subroutine print_progress(current, total, last_percent, label) + implicit none + integer(psb_ipk_), intent(in) :: current, total + integer(psb_ipk_), intent(inout) :: last_percent + character(len=*), intent(in) :: label + integer(psb_ipk_) :: percent, filled, width, i + + if (total <= 0) return + percent = int(real(current) / real(total) * 100.0) + if (percent == last_percent) return + last_percent = percent + + width = 30 + filled = int(real(percent) / 100.0 * width) + + write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": [" + do i = 1, filled + write(*,'(A)',advance='no') "#" + end do + do i = filled + 1, width + write(*,'(A)',advance='no') "-" + end do + write(*,'(A,I3,A,I0,A,I0,A)') "] ", percent, "% (", current, "/", total, ")" + end subroutine print_progress + end program main \ No newline at end of file diff --git a/test/computational_routines/geaxpby/logs/psblas_geaxpby_test.log b/test/computational_routines/geaxpby/logs/psblas_geaxpby_test.log new file mode 100644 index 000000000..3481d084f --- /dev/null +++ b/test/computational_routines/geaxpby/logs/psblas_geaxpby_test.log @@ -0,0 +1,1493 @@ +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences diff --git a/test/computational_routines/geaxpby/psblas_geaxpby_test.log b/test/computational_routines/geaxpby/psblas_geaxpby_test.log index 182bbbc54..45a1534f5 100644 --- a/test/computational_routines/geaxpby/psblas_geaxpby_test.log +++ b/test/computational_routines/geaxpby/psblas_geaxpby_test.log @@ -2,293 +2,585 @@ Welcome to PSBLAS version: 3.9.1 This is the psb_geaxpby_test sample program Number of processes used in this computation: 1 -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-05-30 13:13:18] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +Welcome to PSBLAS version: 3.9.1 +This is the psb_geaxpby_test sample program +Number of processes used in this computation: 4 +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] + +[2026-05-30 13:13:24] Double precision check on file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-05-30 13:13:24] Double precision check on file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-05-30 13:13:24] Double precision check on file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] diff --git a/test/computational_routines/gedot/README.md b/test/computational_routines/gedot/README.md index 41a7dec6f..b2787b400 100644 --- a/test/computational_routines/gedot/README.md +++ b/test/computational_routines/gedot/README.md @@ -6,7 +6,7 @@ This is a directory developed by Luca Pepè Sciarria and Simone Staccone froma T Steps to reproduce the tests: - Compile the code using ``` make ``` (Optional) - Launch the script ./autotest.sh or with source ./autotest.sh if you want to add modules to the .bashrc file permenently. -- Check the output log file psblas_gedot_test.log to collect results +- Check the output log file logs/psblas_gedot_test.log to collect results NOTE: If the code is changed and a new compilation is needed to show the changes, the autotest.sh script isn't aware of this scenario, therefore it is necessary to manually recompile the code. diff --git a/test/computational_routines/gedot/autotest.sh b/test/computational_routines/gedot/autotest.sh index 756098717..581c10405 100755 --- a/test/computational_routines/gedot/autotest.sh +++ b/test/computational_routines/gedot/autotest.sh @@ -1,58 +1,39 @@ #!/bin/bash +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +source "${script_dir}/../common/testlib.sh" + # Variables definition dir1="serial" dir2="parallel" -log_file_name="psblas_gedot_test.log" -num_procs=$(nproc) +num_procs=$(get_num_procs) +log_dir="logs" +log_file_name="${log_dir}/psblas_gedot_test.log" -# Define color codes -GREEN="\033[0;32m" -RED="\033[0;31m" -BLUE="\033[0;34m" -YELLOW="\033[33m" -RESET="\033[0m" +ensure_dirs runs serial parallel vectors "${log_dir}" +log_header "${log_file_name}" "psb_gedot" # Check if the executable ELF file exists if [ ! -f "./runs/psb_gedot_test" ]; then - echo -e "${YELLOW}[WARNING] Executable not found. Running make...${RESET}" + warn "Executable not found. Running make..." make - if [ ! -f "./runs/psb_geaxpby_test" ]; then - echo -e "${RED}[ERROR] Failed to create executable. Check make command.${RESET}" + if [ ! -f "./runs/psb_gedot_test" ]; then + err "Failed to create executable. Check make command." fi else - echo -e "${BLUE}[INFO]\t The executable already exists. Skipping the make process.${RESET}" + info "The executable already exists. Skipping the make process." fi # Excecute tests and save results -echo -e "${BLUE}[INFO]\t Running the PSBLAS psb_gedot test...${RESET}" -echo "" -echo -e "${BLUE}[INFO]\t Starting single process computation${RESET}" -#mpirun -np 1 ./runs/psb_gedot_test -echo -e "${BLUE}[INFO]\t Single process computation terminated correctly${RESET}" -echo "" -echo -e "${BLUE}[INFO]\t Starting $num_procs processes computation${RESET}" -mpirun -np $num_procs ./runs/psb_gedot_test -echo -e "${BLUE}[INFO]\t Multiple processes computation terminated correctly${RESET}" - -echo "" >> ${log_file_name} +info "Running the PSBLAS psb_gedot test..." +echo "" >> "${log_file_name}" +run_mpi 1 ./runs/psb_gedot_test "single process computation" +run_mpi "$num_procs" ./runs/psb_gedot_test "${num_procs} processes computation" # Iterate through files in the first directory -for file1 in "$dir1"/*; do - filename=$(basename "$file1") # Extract the filename - file2="$dir2/$filename" # Construct the path for the second directory - - # Check if the file exists in the second directory - if [ -f "$file2" ]; then - diff_count=$(diff "$file1" "$file2" | wc -l) # Compare the files - echo "Comparison between $file1 and $file2: $diff_count differences" >> ${log_file_name} - # echo "Comparing $file1 and $file2: $diff_count" - else - echo -e "${RED}[ERROR] File $filename does not exist in $dir2${RESET}" - fi -done +compare_dirs "$dir1" "$dir2" "${log_file_name}" -echo -e "${BLUE}[INFO]\t PSBLAS psb_gedot test succesfully completed.${RESET}" \ No newline at end of file +info "PSBLAS psb_gedot test successfully completed." \ No newline at end of file diff --git a/test/computational_routines/gedot/gedot.f90 b/test/computational_routines/gedot/gedot.f90 index 7a4e49c8f..0f1841bbb 100644 --- a/test/computational_routines/gedot/gedot.f90 +++ b/test/computational_routines/gedot/gedot.f90 @@ -17,7 +17,7 @@ program main integer(psb_ipk_) :: tests_number, count ! cycle indexes variables - integer(psb_ipk_) :: i,j,k,h,l + integer(psb_ipk_) :: i,j,k,h integer(psb_ipk_) :: info, ret, unit ! time stats variables @@ -28,6 +28,7 @@ program main ! others character(len=:), allocatable :: output_file_name + integer(psb_ipk_) :: last_percent_sp, last_percent_dp ! Initialize parameters x(1) = "vectors/x1.mtx" @@ -41,8 +42,10 @@ program main y(4) = "vectors/y4.mtx" arr_size = 10000 - tests_number = size(x) * size(y) * size(alpha) * size(beta) + tests_number = size(x) * size(y) count = 0 + last_percent_sp = -1 + last_percent_dp = -1 call psb_init(ctxt) call psb_info(ctxt,my_rank,np) @@ -83,6 +86,7 @@ program main if(my_rank == psb_root_) then count = count + 1 + call print_progress(count, tests_number, last_percent_sp, "single precision") call date_and_time(date, time, zones, values) if(ret /= -1) then ! Success formatted output @@ -128,6 +132,7 @@ program main if(my_rank == psb_root_) then count = count + 1 + call print_progress(count, tests_number, last_percent_dp, "double precision") call date_and_time(date, time, zones, values) if(ret == 0) then ! Success formatted output @@ -175,4 +180,31 @@ program main call psb_exit(ctxt) return +contains + + subroutine print_progress(current, total, last_percent, label) + implicit none + integer(psb_ipk_), intent(in) :: current, total + integer(psb_ipk_), intent(inout) :: last_percent + character(len=*), intent(in) :: label + integer(psb_ipk_) :: percent, filled, width, i + + if (total <= 0) return + percent = int(real(current) / real(total) * 100.0) + if (percent == last_percent) return + last_percent = percent + + width = 30 + filled = int(real(percent) / 100.0 * width) + + write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": [" + do i = 1, filled + write(*,'(A)',advance='no') "#" + end do + do i = filled + 1, width + write(*,'(A)',advance='no') "-" + end do + write(*,'(A,I3,A,I0,A,I0,A)') "] ", percent, "% (", current, "/", total, ")" + end subroutine print_progress + end program main \ No newline at end of file diff --git a/test/computational_routines/gedot/logs/psblas_gedot_test.log b/test/computational_routines/gedot/logs/psblas_gedot_test.log new file mode 100644 index 000000000..5b97185c6 --- /dev/null +++ b/test/computational_routines/gedot/logs/psblas_gedot_test.log @@ -0,0 +1,193 @@ +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences diff --git a/test/computational_routines/gedot/psb_gedot_test.f90 b/test/computational_routines/gedot/psb_gedot_test.f90 index e5bbbf6f3..5cb34cea7 100644 --- a/test/computational_routines/gedot/psb_gedot_test.f90 +++ b/test/computational_routines/gedot/psb_gedot_test.f90 @@ -235,6 +235,7 @@ module psb_gedot_test deallocate(y_global) end if + ret = 0 return @@ -298,7 +299,7 @@ module psb_gedot_test end if ! Allocate descriptor as if it was a block rows distribution - call psb_cdall(ctxt, desc_a, info,nl=10000/np) + call psb_cdall(ctxt, desc_a, info,nl=arr_size/np) if(info /= psb_success_) then write(psb_out_unit,'(A)') "Error allocating desc_a data structure" goto 9999 @@ -430,6 +431,7 @@ module psb_gedot_test ret = 0 + ret = 0 return diff --git a/test/computational_routines/gedot/psblas_gedot_test.log b/test/computational_routines/gedot/psblas_gedot_test.log index 8f64b2ebd..f7df4c12b 100644 --- a/test/computational_routines/gedot/psblas_gedot_test.log +++ b/test/computational_routines/gedot/psblas_gedot_test.log @@ -1,416 +1,74 @@ -Welcome to PSBLAS version: 3.9.0 +Welcome to PSBLAS version: 3.9.1 This is the psb_gedot_test sample program Number of processes used in this computation: 1 -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y4.mtx 16/144 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y1.mtx 1/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y2.mtx 2/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y3.mtx 3/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y4.mtx 4/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y1.mtx 5/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y2.mtx 6/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y3.mtx 7/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y4.mtx 8/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y1.mtx 9/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y2.mtx 10/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y3.mtx 11/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y4.mtx 12/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y1.mtx 13/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y2.mtx 14/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y3.mtx 15/16 [OK] +[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y4.mtx 16/16 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y4.mtx 16/144 [OK] -Welcome to PSBLAS version: 3.9.0 +[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y1.mtx 1/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y2.mtx 2/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y3.mtx 3/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y4.mtx 4/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y1.mtx 5/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y2.mtx 6/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y3.mtx 7/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y4.mtx 8/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y1.mtx 9/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y2.mtx 10/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y3.mtx 11/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y4.mtx 12/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x4_y1.mtx 13/16 [OK] +[2026-05-30 13:02:07] Double precision check on file serial/sol_x4_y2.mtx 14/16 [OK] +[2026-05-30 13:02:08] Double precision check on file serial/sol_x4_y3.mtx 15/16 [OK] +[2026-05-30 13:02:08] Double precision check on file serial/sol_x4_y4.mtx 16/16 [OK] +Welcome to PSBLAS version: 3.9.1 This is the psb_gedot_test sample program -Number of processes used in this computation: 40 - -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:28:20] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:28:20] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] - -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] - -Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences -Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences -Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences -Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences -Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences -Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences -Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences -Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences -Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences -Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences -Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences -Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences -Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences -Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences -Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences -Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences -Welcome to PSBLAS version: 3.9.0 -This is the psb_gedot_test sample program -Number of processes used in this computation: 40 - -[2025-06-12 13:32:44] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:32:44] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] - -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] - -Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences -Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences -Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences -Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences -Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences -Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences -Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences -Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences -Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences -Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences -Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences -Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences -Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences -Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences -Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences -Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences -Welcome to PSBLAS version: 3.9.0 -This is the psb_gedot_test sample program -Number of processes used in this computation: 40 - -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] +Number of processes used in this computation: 4 + +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/16 [OK] +[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/16 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] - -Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences -Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences -Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences -Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences -Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences -Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences -Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences -Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences -Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences -Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences -Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences -Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences -Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences -Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences -Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences -Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences -Welcome to PSBLAS version: 3.9.0 -This is the psb_gedot_test sample program -Number of processes used in this computation: 40 - -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] - -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] - -Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences -Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences -Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences -Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences -Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences -Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences -Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences -Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences -Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences -Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences -Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences -Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences -Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences -Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences -Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences -Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences -Welcome to PSBLAS version: 3.9.0 -This is the psb_gedot_test sample program -Number of processes used in this computation: 40 - -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] - -[2025-06-12 13:35:32] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:35:32] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] - -Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences -Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences -Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences -Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences -Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences -Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences -Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences -Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences -Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences -Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences -Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences -Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences -Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences -Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences -Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences -Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences -Welcome to PSBLAS version: 3.9.0 -This is the psb_gedot_test sample program -Number of processes used in this computation: 40 - -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] - -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:37:18] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] - -Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences -Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences -Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences -Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences -Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences -Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences -Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences -Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences -Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences -Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences -Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences -Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences -Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences -Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences -Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences -Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences -Welcome to PSBLAS version: 3.9.0 -This is the psb_gedot_test sample program -Number of processes used in this computation: 40 - -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] - -[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] -[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] -[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] -[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] - -Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences -Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences -Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences -Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences -Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences -Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences -Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences -Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences -Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences -Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences -Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences -Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences -Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences -Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences -Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences -Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences - +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y1.mtx 1/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y2.mtx 2/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y3.mtx 3/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y4.mtx 4/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y1.mtx 5/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y2.mtx 6/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y3.mtx 7/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y4.mtx 8/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y1.mtx 9/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y2.mtx 10/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y3.mtx 11/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y4.mtx 12/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y1.mtx 13/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y2.mtx 14/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y3.mtx 15/16 [OK] +[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y4.mtx 16/16 [OK] diff --git a/test/computational_routines/psblas_test_results.log b/test/computational_routines/psblas_test_results.log index 87bd86267..15030dafd 100644 --- a/test/computational_routines/psblas_test_results.log +++ b/test/computational_routines/psblas_test_results.log @@ -10248,3 +10248,9393 @@ Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 difference Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:29:09 + +[RUN] psb_spmm +[DATE] 2026-05-29 08:33:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 12:18:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 14:53:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 15:07:42 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-30 12:38:05 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + diff --git a/test/computational_routines/spmm/Makefile b/test/computational_routines/spmm/Makefile index d6962c239..a2e368bc2 100644 --- a/test/computational_routines/spmm/Makefile +++ b/test/computational_routines/spmm/Makefile @@ -21,7 +21,7 @@ YELLOW=\033[33m END_COLOUR=\033[0m -all: runsd psb_spmm_test psb_spmm_overlap_test +all: runsd psb_spmm_test @printf "$(GREEN)[INFO]\tCompilation success!$(END_COLOUR)\n" runsd: @@ -36,7 +36,7 @@ psb_spmm_test: clean: @rm -f $(OBJS)\ - *$(.mod) $(EXEDIR)/psb_spmm_test $(EXEDIR)/psb_spmm_overlap_test + *$(.mod) $(EXEDIR)/psb_spmm_test .PHONY: all runsd clean diff --git a/test/computational_routines/spmm/README.md b/test/computational_routines/spmm/README.md index 34f0ab0b2..a64a8ad24 100644 --- a/test/computational_routines/spmm/README.md +++ b/test/computational_routines/spmm/README.md @@ -18,8 +18,8 @@ In order to have the exact same environment used for testing compile PSBALS libr Steps to reproduce the tests: - Compile the code using ``` make ``` - Insert the matrix files inside the matrix/ directory (or create one if it doesn't exists; psblas3/test/spmm/matrix/) -- Launch the script autotest.sh (Still not implemented) -- Check the output log file test_log.txt to collect results +- Launch the script autotest.sh +- Check the output log file logs/psblas_spmm_test.log to collect results ## Test goal Check the correctness of the matrix-vector multiplication $y = Ax$ using the **psb_spmm** routine, checking for all the test suite cases. diff --git a/test/computational_routines/spmm/autotest.sh b/test/computational_routines/spmm/autotest.sh new file mode 100755 index 000000000..6323a238a --- /dev/null +++ b/test/computational_routines/spmm/autotest.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +source "${script_dir}/../common/testlib.sh" + +# Variables definition +num_procs=$(get_num_procs) +log_dir="logs" +log_file_name="${log_dir}/psblas_spmm_test.log" + +ensure_dirs runs serial parallel vectors matrix "${log_dir}" +log_header "${log_file_name}" "psb_spmm" + +# Ensure required directories exist +# Ensure a default matrix is available +if [ ! -f "matrix/1138_bus.mtx" ]; then + warn "No default matrix found. Place a MatrixMarket file at matrix/1138_bus.mtx" +fi + +# Check if the executable ELF file exists +if [ ! -f "./runs/psb_spmm_test" ]; then + warn "Executable not found. Running make..." + make + if [ ! -f "./runs/psb_spmm_test" ]; then + err "Failed to create executable. Check make command." + exit 1 + fi +else + info "The executable already exists. Skipping the make process." +fi + +# Execute tests and save results +info "Running the PSBLAS psb_spmm test..." +echo "" >> "${log_file_name}" +run_mpi 1 ./runs/psb_spmm_test "single process computation" +run_mpi "$num_procs" ./runs/psb_spmm_test "${num_procs} processes computation" + +# Compare serial and parallel outputs if present +compare_dirs "serial" "parallel" "${log_file_name}" + +info "PSBLAS psb_spmm test completed." diff --git a/test/computational_routines/spmm/logs/psblas_spmm_test.log b/test/computational_routines/spmm/logs/psblas_spmm_test.log new file mode 100644 index 000000000..f099e51d0 --- /dev/null +++ b/test/computational_routines/spmm/logs/psblas_spmm_test.log @@ -0,0 +1,170 @@ +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:29:09 + +[RUN] psb_spmm +[DATE] 2026-05-29 08:33:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 12:18:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 14:53:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 15:07:42 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-30 12:38:05 +[RUN] psb_spmm +[DATE] 2026-05-30 12:40:05 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1117229 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1341885 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1411816 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1422000 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1171656 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1101118 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437048 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1424281 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1411968 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1411359 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1368648 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1085005 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1102485 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1105069 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1424117 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1105829 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1355728 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1110541 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1108413 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1103853 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1254648 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1211936 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1249328 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1337032 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1419415 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420479 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1326392 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1321984 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1198712 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1183208 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1347064 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1436287 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1427623 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1169376 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1085917 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1362264 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1118597 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1112517 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1082573 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1100965 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1099901 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1435072 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1429144 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1387952 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1098229 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1423063 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1342503 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1331712 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1085613 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1207984 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1083485 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437048 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1079077 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1412575 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1080445 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1412423 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437656 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1408928 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1080749 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437048 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1114949 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1418199 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1345239 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[RUN] psb_spmm +[DATE] 2026-05-30 13:02:08 + diff --git a/test/computational_routines/spmm/psb_spmm_test.f90 b/test/computational_routines/spmm/psb_spmm_test.f90 index cb522bbc8..69fde36a7 100644 --- a/test/computational_routines/spmm/psb_spmm_test.f90 +++ b/test/computational_routines/spmm/psb_spmm_test.f90 @@ -6,39 +6,31 @@ module psb_spmm_test contains - subroutine psb_spmm_kernel(mtx_file,x_file, y_file, alpha, beta, ctxt) + subroutine psb_spmm_kernel(a, desc_a, rows, cols, x_file, y_file, alpha, beta, ctxt) use psb_base_mod use psb_util_mod implicit none ! input parameters - character(len = *), intent(in) :: mtx_file, x_file, y_file + character(len = *), intent(in) :: x_file, y_file real(psb_spk_), intent(in) :: alpha, beta + type(psb_sspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(in) :: rows, cols character(len=:), allocatable :: output_file_name - ! sparse matrices - type(psb_sspmat_type) :: a - type(psb_lsspmat_type) :: aux_a - ! vectors type(psb_s_vect_type) :: x, y - ! matrix descriptor data structure - type(psb_desc_type) :: desc_a - ! communication context type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_) :: my_rank, np, info, err_act - ! matrix parameters - integer(psb_ipk_) :: rows, cols, nnz - integer(psb_ipk_) :: nr, nt ! In BLOCK ROWS distributin, the number of rows - ! variables outside PSLBALS data structures real(psb_spk_), allocatable :: x_global(:), y_global(:) - integer(psb_ipk_) :: i + logical :: exists info = psb_success_ @@ -49,29 +41,10 @@ module psb_spmm_test call psb_error(ctxt) endif - call mm_mat_read(aux_a,info,filename=mtx_file) - if(info /= psb_success_) then - write(psb_out_unit,*) "Error while reading matric ", mtx_file - goto 9999 - end if - - - ! part_block it's a macro defined in psb_blockpart_mod to identify BLOCK ROWS distribution - call psb_matdist(aux_a, a, ctxt,desc_a,info,fmt="COO",parts=part_block) - - - rows = aux_a%get_nrows() - cols = aux_a%get_ncols() - nnz = aux_a%get_nzeros() - - call psb_bcast(ctxt,rows) - call psb_bcast(ctxt,cols) - call psb_bcast(ctxt,nnz) - - ! Generate random array for b using always the same seed + ! Prepare input buffers on all ranks; root reads from disk + allocate(x_global(cols)) + allocate(y_global(rows)) if(my_rank == psb_root_) then - allocate(x_global(cols)) - allocate(y_global(rows)) call mm_array_read(x_global,info,filename=x_file) call mm_array_read(y_global,info,filename=y_file) end if @@ -104,6 +77,7 @@ module psb_spmm_test end if + ! y = alpha * A * x + beta * y call psb_spmm(alpha,a,x,beta,y,desc_a,info) if(info /= psb_success_) then @@ -112,9 +86,17 @@ module psb_spmm_test end if ! Make the root process be the one that saves everything on file - if(np == 1) then + if(np == 1) then + inquire(file='serial/', exist=exists) + if (.not.exists) then + call system('mkdir serial/') + end if output_file_name = "serial/" - else + else + inquire(file='parallel/', exist=exists) + if (.not.exists) then + call system('mkdir parallel/') + end if output_file_name = "parallel/" end if @@ -153,22 +135,8 @@ module psb_spmm_test goto 9999 end if - call psb_spfree(a, desc_a,info) - if(info /= psb_success_) then - write(psb_out_unit,*) "Error in matrix A free routine" - goto 9999 - end if - - call psb_cdfree(desc_a,info) - if(info /= psb_success_) then - write(psb_out_unit,*) "Error in matrix descriptor free routine" - goto 9999 - end if - - if(my_rank == 0) then - deallocate(x_global) - deallocate(y_global) - end if + deallocate(x_global) + deallocate(y_global) return @@ -180,6 +148,7 @@ module psb_spmm_test stop end subroutine + !> @brief Function to randomly generate x and y vectors !! and save them on multiple files based on their !! coefficients values. @@ -193,9 +162,15 @@ module psb_spmm_test integer(psb_ipk_), intent(in) :: rows, cols real(psb_spk_), allocatable :: x(:), y(:) integer(psb_ipk_) :: i, info + logical :: exists - allocate(x(rows)) - allocate(y(cols)) + inquire(file='vectors/', exist=exists) + if (.not.exists) then + call system('mkdir vectors/') + end if + + allocate(x(cols)) + allocate(y(rows)) call random_init(repeatable=.true.,image_distinct=.true.) call random_number(x) @@ -206,11 +181,11 @@ module psb_spmm_test call mm_array_write(y,"Positive vector",info,filename="vectors/y1.mtx") ! Write only negative in x_2 - do i=1,rows + do i=1,cols x(i) = -x(i) end do - do i=1,cols + do i=1,rows y(i) = -y(i) end do @@ -219,12 +194,12 @@ module psb_spmm_test ! Since numbers are less than one and always positive, we have to generate negative ones subtractiong 50 - do i=1,rows + do i=1,cols x(i) = -x(i) ! Make the values positive again x(i) = x(i) - 0.5 end do - do i=1,cols + do i=1,rows y(i) = -y(i) ! Make the values positive again y(i) = y(i) - 0.5 end do @@ -234,11 +209,11 @@ module psb_spmm_test call mm_array_write(y,"Random vector",info,filename="vectors/y3.mtx") ! Write zero in x_4 - do i=1,rows + do i=1,cols x(i) = 0 end do - do i=1,cols + do i=1,rows y(i) = 0 end do diff --git a/test/computational_routines/spmm/spmm.f90 b/test/computational_routines/spmm/spmm.f90 index 88f2a7489..444a38935 100644 --- a/test/computational_routines/spmm/spmm.f90 +++ b/test/computational_routines/spmm/spmm.f90 @@ -1,6 +1,7 @@ program main use psb_spmm_test use psb_base_mod + use psb_util_mod implicit none @@ -12,10 +13,21 @@ program main ! parameters array character(len=64) :: x(4),y(4) - real(psb_ipk_) :: alpha(3), beta(3) + real(psb_spk_) :: alpha(3), beta(3) ! cycle indexes variables integer(psb_ipk_) :: i,j,k,h,l + character(len=256) :: matrix_file + logical :: matrix_exists + integer(psb_ipk_) :: info + integer(psb_ipk_) :: tests_number, count, last_percent + + ! sparse matrices + type(psb_sspmat_type) :: a + type(psb_lsspmat_type) :: aux_a + + ! matrix descriptor data structure + type(psb_desc_type) :: desc_a ! Communicator variable type(psb_ctxt_type) :: ctxt @@ -39,36 +51,105 @@ program main beta(2) = -sone beta(3) = szero + tests_number = size(x) * size(y) * size(alpha) * size(beta) + count = 0 + last_percent = -1 + call psb_init(ctxt) call psb_info(ctxt,my_rank,np) + matrix_file = "matrix/1138_bus.mtx" + inquire(file=matrix_file, exist=matrix_exists) + if (.not.matrix_exists) then + matrix_file = "../../comm/spmv/Geo_1438.mtx" + inquire(file=matrix_file, exist=matrix_exists) + end if + if (.not.matrix_exists) then + if (my_rank == psb_root_) then + write(psb_out_unit,*) 'Matrix file not found. Expected matrix/1138_bus.mtx' + end if + call psb_abort(ctxt) + end if + if(my_rank == psb_root_) then write(psb_out_unit,*) 'Welcome to PSBLAS version: ',psb_version_string_ write(psb_out_unit,*) 'This is the psb_spmm_test sample program' - call read_matrix_market_size("matrix/1138_bus.mtx", rows, cols) + call read_matrix_market_size(matrix_file, rows, cols) call generate_vectors(rows,cols) end if call psb_barrier(ctxt) + !! Read and distribute matrix once + call mm_mat_read(aux_a,info,filename=matrix_file) + if(info /= psb_success_) then + write(psb_out_unit,*) "Error while reading matrix ", matrix_file + call psb_abort(ctxt) + end if + rows = aux_a%get_nrows() + cols = aux_a%get_ncols() - !! 1138_bus matrix (sparse) + call psb_matdist(aux_a, a, ctxt, desc_a, info, fmt="COO", parts=part_block) + if(info /= psb_success_) then + write(psb_out_unit,*) "Error while distributing matrix" + call psb_abort(ctxt) + end if + + !! 1138_bus matrix (sparse) - reuse distributed matrix across all parameter combinations do i=1,size(x) do j=1,size(y) do k=1,size(alpha) do h=1,size(beta) - call psb_spmm_kernel(mtx_file="matrix/1138_bus.mtx",x_file=x(i), y_file=y(j), & - & alpha = alpha(k), beta = beta(h), ctxt = ctxt) + call psb_spmm_kernel(a=a, desc_a=desc_a, rows=rows, cols=cols, & + & x_file=x(i), y_file=y(j), alpha=alpha(k), beta=beta(h), ctxt=ctxt) + if (my_rank == psb_root_) then + count = count + 1 + call print_progress(count, tests_number, last_percent, "spmm testcases") + end if end do end do end do end do + !! Deallocate matrix structures + call psb_spfree(a, desc_a, info) + call psb_cdfree(desc_a, info) + call psb_exit(ctxt) return +contains + + subroutine print_progress(current, total, last_percent, label) + implicit none + integer(psb_ipk_), intent(in) :: current, total + integer(psb_ipk_), intent(inout) :: last_percent + character(len=*), intent(in) :: label + integer(psb_ipk_) :: percent, filled, width, i + + if (total <= 0) return + percent = int(real(current) / real(total) * 100.0) + if (percent == last_percent) return + last_percent = percent + + width = 30 + filled = int(real(percent) / 100.0 * width) + + write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": [" + do i = 1, filled + write(*,'(A)',advance='no') "#" + end do + do i = filled + 1, width + write(*,'(A)',advance='no') "-" + end do + write(*,'(A,I3,A,I0,A,I0,A)',advance='no') "] ", percent, "% (", current, "/", total, ")" + write(*,'(A)',advance='no') char(13) + call flush(6) + if (percent == 100) write(*,'(A)') "" + end subroutine print_progress + end program main \ No newline at end of file diff --git a/test/computational_routines/test.sh b/test/computational_routines/test.sh index 263c564c5..dd572c52b 100755 --- a/test/computational_routines/test.sh +++ b/test/computational_routines/test.sh @@ -14,6 +14,7 @@ BLUE="\033[0;34m" YELLOW="\033[33m" RESET="\033[0m" + # Function to center text center_text() { local text="$1" @@ -73,6 +74,7 @@ echo -e "${BLUE}[INFO]\t Environment check for required modules completed.${RES echo "" + # Iterate through first-layer subdirectories for dir in "$base_dir"/*/; do # Skip the current directory itself @@ -81,7 +83,12 @@ for dir in "$base_dir"/*/; do fi echo -e "${BLUE}${separator}${RESET}" - echo -e "${BLUE}[INFO]\t Entering directory: $(pwd)/$(basename "$dir")${RESET}" + base_name=$(basename "$dir") + if [ "$base_name" = "common" ]; then + continue + fi + + echo -e "${BLUE}[INFO]\t Entering directory: $(pwd)/${base_name}${RESET}" ( # excecute script in a subshell, otherwise the dir search will stop cd "$dir" @@ -93,8 +100,11 @@ for dir in "$base_dir"/*/; do echo -e "${YELLOW}[WARNING] autotest.sh not found in $(pwd). Skipping $(basename "$dir") kernel${RESET}" fi - # Append contents of any .log file in the subdirectory to the main log file - log_files=$(find . -maxdepth 1 -type f -name "*.log") + # Append contents of any .log file in the standardized logs/ directory (fallback to local *.log) + log_files=$(find ./logs -maxdepth 1 -type f -name "*.log" 2>/dev/null) + if [ -z "$log_files" ]; then + log_files=$(find . -maxdepth 1 -type f -name "*.log") + fi if [ -n "$log_files" ]; then for log_file in $log_files; do cat "$log_file" >> "../${log_file_name}" From 2acfbe7e4a8273fea58f59d367ad6784c3bec7a1 Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Thu, 4 Jun 2026 21:21:08 +0200 Subject: [PATCH 175/175] [FIX] Fixed threshold for spmm computational_routines test --- test/computational_routines/common/testlib.sh | 60 +- .../geaxpby/geaxpby.f90 | 25 +- .../geaxpby/logs/psblas_geaxpby_test.log | 1665 + .../geaxpby/psblas_geaxpby_test.log | 1152 +- test/computational_routines/gedot/autotest.sh | 3 +- test/computational_routines/gedot/gedot.f90 | 25 +- .../gedot/logs/psblas_gedot_test.log | 209 + .../gedot/psblas_gedot_test.log | 128 +- .../psblas_test_results.log | 35226 ++++++++++++++++ test/computational_routines/spmm/autotest.sh | 17 +- .../spmm/logs/psblas_spmm_test.log | 1503 + .../spmm/psb_spmm_test.f90 | 58 +- test/computational_routines/spmm/spmm.f90 | 43 +- test/computational_routines/spmm/spmm_checker | Bin 17200 -> 0 bytes .../spmm/spmm_checker.c | 59 - test/computational_routines/test.sh | 19 +- 16 files changed, 39443 insertions(+), 749 deletions(-) delete mode 100755 test/computational_routines/spmm/spmm_checker delete mode 100644 test/computational_routines/spmm/spmm_checker.c diff --git a/test/computational_routines/common/testlib.sh b/test/computational_routines/common/testlib.sh index 35dfb1b69..fa21ef611 100644 --- a/test/computational_routines/common/testlib.sh +++ b/test/computational_routines/common/testlib.sh @@ -49,9 +49,30 @@ compare_dirs() { local dir2="$2" local logfile="$3" local eps + local eps_mode + local cmp_mode + local n_gamma + local u_round + local total_files=0 + local total_fail=0 + local total_diff=0 + # EPS_MODE selects how the tolerance value is computed (absolute | gamma_n); + # COMPARE selects how it is applied (absolute | relative). They are + # orthogonal: e.g. gamma_n + relative gives the standard finite-precision + # error bound |fl - exact| <= gamma_n * |value| used for spmm. + eps_mode=${PSBLAS_TEST_EPS_MODE:-absolute} + cmp_mode=${PSBLAS_TEST_COMPARE:-absolute} eps=${PSBLAS_TEST_TOL:-1e-6} + if [[ "$eps_mode" == "gamma_n" ]]; then + n_gamma=${PSBLAS_TEST_N:-0} + u_round=${PSBLAS_TEST_UNIT_ROUNDOFF:-1.19e-7} + if [[ "$n_gamma" -gt 0 ]]; then + eps=$(awk -v n="$n_gamma" -v u="$u_round" 'BEGIN { g = (n*u)/(1.0 - n*u); printf "%.12g", g }') + fi + fi + if [[ ! -d "$dir1" || ! -d "$dir2" ]]; then warn "Missing directories for comparison (${dir1}, ${dir2})." return 0 @@ -61,13 +82,14 @@ compare_dirs() { if [[ ! -f "$file1" ]]; then continue fi + total_files=$((total_files + 1)) local filename filename=$(basename "$file1") local file2="$dir2/$filename" if [[ -f "$file2" ]]; then local diff_count if [[ "${filename}" == *.mtx ]]; then - diff_count=$(awk -v f1="$file1" -v f2="$file2" -v eps="$eps" ' + diff_count=$(awk -v f1="$file1" -v f2="$file2" -v eps="$eps" -v mode="$cmp_mode" ' function readvals(fname, vals, line, n, header_seen) { n = 0 while ((getline line < fname) > 0) { @@ -87,7 +109,19 @@ compare_dirs() { for (i = 1; i <= n; i++) { d = a[i] - b[i] if (d < 0) d = -d - if (d > eps) diff++ + tol = eps + if (mode == "relative") { + # mixed relative/absolute tolerance: scale eps by the + # magnitude of the operands (floor of 1 keeps it absolute + # near zero). Required for finite-precision results whose + # summation order differs between serial and parallel runs. + m = (a[i] < 0 ? -a[i] : a[i]) + p = (b[i] < 0 ? -b[i] : b[i]) + scale = (m > p ? m : p) + if (scale < 1) scale = 1 + tol = eps * scale + } + if (d > tol) diff++ } if (n1 != n2) diff += (n1 > n2 ? n1 - n2 : n2 - n1) print diff @@ -96,10 +130,32 @@ compare_dirs() { diff_count=$(diff -U 0 "$file1" "$file2" | grep -E '^[+-]' | grep -v '^[+-]{3}' | wc -l) fi echo "[DIFF] ${file1} vs ${file2}: ${diff_count} differences" >> "$logfile" + total_diff=$((total_diff + diff_count)) + if [[ "$diff_count" -gt 0 ]]; then + total_fail=$((total_fail + 1)) + fi else err "File ${filename} does not exist in ${dir2}" + total_fail=$((total_fail + 1)) fi done + + if [[ "$total_files" -eq 0 ]]; then + warn "No files to compare in ${dir1}." + return 0 + fi + + if [[ "$total_fail" -eq 0 ]]; then + echo -e "${GREEN}[PASS]\t ${dir1} vs ${dir2}: ${total_files}/${total_files} tests passed${RESET}" + return 0 + elif [[ "$total_fail" -eq "$total_files" ]]; then + echo -e "${RED}[FAIL]\t ${dir1} vs ${dir2}: 0/${total_files} tests passed${RESET}" + return 2 + else + local passed=$((total_files - total_fail)) + echo -e "${YELLOW}[WARN]\t ${dir1} vs ${dir2}: ${passed}/${total_files} tests passed, ${total_fail} failed${RESET}" + return 1 + fi } get_num_procs() { diff --git a/test/computational_routines/geaxpby/geaxpby.f90 b/test/computational_routines/geaxpby/geaxpby.f90 index fa02f17b1..e809417b2 100644 --- a/test/computational_routines/geaxpby/geaxpby.f90 +++ b/test/computational_routines/geaxpby/geaxpby.f90 @@ -206,11 +206,13 @@ program main contains subroutine print_progress(current, total, last_percent, label) + use iso_fortran_env, only: error_unit implicit none integer(psb_ipk_), intent(in) :: current, total integer(psb_ipk_), intent(inout) :: last_percent character(len=*), intent(in) :: label integer(psb_ipk_) :: percent, filled, width, i + character(len=160) :: line if (total <= 0) return percent = int(real(current) / real(total) * 100.0) @@ -220,14 +222,29 @@ contains width = 30 filled = int(real(percent) / 100.0 * width) - write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": [" + line = "[INFO] Progress " // trim(label) // ": [" do i = 1, filled - write(*,'(A)',advance='no') "#" + line = trim(line) // "#" end do do i = filled + 1, width - write(*,'(A)',advance='no') "-" + line = trim(line) // "-" end do - write(*,'(A,I3,A,I0,A,I0,A)') "] ", percent, "% (", current, "/", total, ")" + line = trim(line) // "] " + write(line(len_trim(line)+1:), '(I3)') percent + line = trim(line) // "% (" // trim(adjustl(itoa(current))) // "/" // trim(adjustl(itoa(total))) // ")" + if (percent < 100) then + write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) // char(27) // "[1A" + else + write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) + end if + call flush(error_unit) end subroutine print_progress + pure function itoa(i) result(str) + implicit none + integer(psb_ipk_), intent(in) :: i + character(len=32) :: str + write(str,'(I0)') i + end function itoa + end program main \ No newline at end of file diff --git a/test/computational_routines/geaxpby/logs/psblas_geaxpby_test.log b/test/computational_routines/geaxpby/logs/psblas_geaxpby_test.log index 3481d084f..8c1d31b59 100644 --- a/test/computational_routines/geaxpby/logs/psblas_geaxpby_test.log +++ b/test/computational_routines/geaxpby/logs/psblas_geaxpby_test.log @@ -1491,3 +1491,1668 @@ [DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences [DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences [DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:29:28 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:54:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:57:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 16:10:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 10:36:10 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 10:45:09 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 20:59:49 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 21:19:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences diff --git a/test/computational_routines/geaxpby/psblas_geaxpby_test.log b/test/computational_routines/geaxpby/psblas_geaxpby_test.log index 45a1534f5..3bb70e7fa 100644 --- a/test/computational_routines/geaxpby/psblas_geaxpby_test.log +++ b/test/computational_routines/geaxpby/psblas_geaxpby_test.log @@ -2,585 +2,585 @@ Welcome to PSBLAS version: 3.9.1 This is the psb_geaxpby_test sample program Number of processes used in this computation: 1 -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-05-30 13:13:14] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-05-30 13:13:15] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-05-30 13:13:16] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-05-30 13:13:17] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-05-30 13:13:18] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-06-04 21:19:20] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-06-04 21:19:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-06-04 21:19:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-06-04 21:19:23] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-05-30 13:13:18] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-05-30 13:13:19] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-05-30 13:13:20] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-06-04 21:19:23] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-06-04 21:19:24] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-06-04 21:19:25] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-06-04 21:19:26] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] Welcome to PSBLAS version: 3.9.1 This is the psb_geaxpby_test sample program Number of processes used in this computation: 4 -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-05-30 13:13:21] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-05-30 13:13:22] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-05-30 13:13:23] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-05-30 13:13:24] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-06-04 21:19:26] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-06-04 21:19:27] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-06-04 21:19:28] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-06-04 21:19:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-06-04 21:19:30] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] -[2026-05-30 13:13:24] Double precision check on file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-05-30 13:13:24] Double precision check on file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-05-30 13:13:24] Double precision check on file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-05-30 13:13:25] Double precision check on file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-05-30 13:13:26] Double precision check on file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-05-30 13:13:27] Double precision check on file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-06-04 21:19:30] Double precision check on file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-06-04 21:19:31] Double precision check on file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-06-04 21:19:32] Double precision check on file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-06-04 21:19:33] Double precision check on file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] diff --git a/test/computational_routines/gedot/autotest.sh b/test/computational_routines/gedot/autotest.sh index 581c10405..49c43bb7e 100755 --- a/test/computational_routines/gedot/autotest.sh +++ b/test/computational_routines/gedot/autotest.sh @@ -34,6 +34,7 @@ run_mpi "$num_procs" ./runs/psb_gedot_test "${num_procs} processes computation" # Iterate through files in the first directory -compare_dirs "$dir1" "$dir2" "${log_file_name}" +PSBLAS_TEST_EPS_MODE=gamma_n PSBLAS_TEST_N=10000 PSBLAS_TEST_UNIT_ROUNDOFF=1.19e-7 \ + compare_dirs "$dir1" "$dir2" "${log_file_name}" info "PSBLAS psb_gedot test successfully completed." \ No newline at end of file diff --git a/test/computational_routines/gedot/gedot.f90 b/test/computational_routines/gedot/gedot.f90 index 0f1841bbb..64fb1dbb6 100644 --- a/test/computational_routines/gedot/gedot.f90 +++ b/test/computational_routines/gedot/gedot.f90 @@ -183,11 +183,13 @@ program main contains subroutine print_progress(current, total, last_percent, label) + use iso_fortran_env, only: error_unit implicit none integer(psb_ipk_), intent(in) :: current, total integer(psb_ipk_), intent(inout) :: last_percent character(len=*), intent(in) :: label integer(psb_ipk_) :: percent, filled, width, i + character(len=160) :: line if (total <= 0) return percent = int(real(current) / real(total) * 100.0) @@ -197,14 +199,29 @@ contains width = 30 filled = int(real(percent) / 100.0 * width) - write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": [" + line = "[INFO] Progress " // trim(label) // ": [" do i = 1, filled - write(*,'(A)',advance='no') "#" + line = trim(line) // "#" end do do i = filled + 1, width - write(*,'(A)',advance='no') "-" + line = trim(line) // "-" end do - write(*,'(A,I3,A,I0,A,I0,A)') "] ", percent, "% (", current, "/", total, ")" + line = trim(line) // "] " + write(line(len_trim(line)+1:), '(I3)') percent + line = trim(line) // "% (" // trim(adjustl(itoa(current))) // "/" // trim(adjustl(itoa(total))) // ")" + if (percent < 100) then + write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) // char(27) // "[1A" + else + write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) + end if + call flush(error_unit) end subroutine print_progress + pure function itoa(i) result(str) + implicit none + integer(psb_ipk_), intent(in) :: i + character(len=32) :: str + write(str,'(I0)') i + end function itoa + end program main \ No newline at end of file diff --git a/test/computational_routines/gedot/logs/psblas_gedot_test.log b/test/computational_routines/gedot/logs/psblas_gedot_test.log index 5b97185c6..35cab17a8 100644 --- a/test/computational_routines/gedot/logs/psblas_gedot_test.log +++ b/test/computational_routines/gedot/logs/psblas_gedot_test.log @@ -191,3 +191,212 @@ [DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences [DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences [DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:29:48 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:55:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:57:37 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 16:10:36 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 10:45:28 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 21:00:08 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 21:19:38 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences diff --git a/test/computational_routines/gedot/psblas_gedot_test.log b/test/computational_routines/gedot/psblas_gedot_test.log index f7df4c12b..7be0c3f0c 100644 --- a/test/computational_routines/gedot/psblas_gedot_test.log +++ b/test/computational_routines/gedot/psblas_gedot_test.log @@ -2,73 +2,73 @@ Welcome to PSBLAS version: 3.9.1 This is the psb_gedot_test sample program Number of processes used in this computation: 1 -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y1.mtx 1/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y2.mtx 2/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y3.mtx 3/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y4.mtx 4/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y1.mtx 5/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y2.mtx 6/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y3.mtx 7/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y4.mtx 8/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y1.mtx 9/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y2.mtx 10/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y3.mtx 11/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y4.mtx 12/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y1.mtx 13/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y2.mtx 14/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y3.mtx 15/16 [OK] -[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y4.mtx 16/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x1_y1.mtx 1/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x1_y2.mtx 2/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x1_y3.mtx 3/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x1_y4.mtx 4/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x2_y1.mtx 5/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x2_y2.mtx 6/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x2_y3.mtx 7/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x2_y4.mtx 8/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x3_y1.mtx 9/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x3_y2.mtx 10/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x3_y3.mtx 11/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x3_y4.mtx 12/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x4_y1.mtx 13/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x4_y2.mtx 14/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x4_y3.mtx 15/16 [OK] +[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x4_y4.mtx 16/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y1.mtx 1/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y2.mtx 2/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y3.mtx 3/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y4.mtx 4/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y1.mtx 5/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y2.mtx 6/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y3.mtx 7/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y4.mtx 8/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y1.mtx 9/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y2.mtx 10/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y3.mtx 11/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y4.mtx 12/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x4_y1.mtx 13/16 [OK] -[2026-05-30 13:02:07] Double precision check on file serial/sol_x4_y2.mtx 14/16 [OK] -[2026-05-30 13:02:08] Double precision check on file serial/sol_x4_y3.mtx 15/16 [OK] -[2026-05-30 13:02:08] Double precision check on file serial/sol_x4_y4.mtx 16/16 [OK] +[2026-06-04 21:19:38] Double precision check on file serial/sol_x1_y1.mtx 1/16 [OK] +[2026-06-04 21:19:38] Double precision check on file serial/sol_x1_y2.mtx 2/16 [OK] +[2026-06-04 21:19:38] Double precision check on file serial/sol_x1_y3.mtx 3/16 [OK] +[2026-06-04 21:19:38] Double precision check on file serial/sol_x1_y4.mtx 4/16 [OK] +[2026-06-04 21:19:38] Double precision check on file serial/sol_x2_y1.mtx 5/16 [OK] +[2026-06-04 21:19:38] Double precision check on file serial/sol_x2_y2.mtx 6/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x2_y3.mtx 7/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x2_y4.mtx 8/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x3_y1.mtx 9/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x3_y2.mtx 10/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x3_y3.mtx 11/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x3_y4.mtx 12/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x4_y1.mtx 13/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x4_y2.mtx 14/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x4_y3.mtx 15/16 [OK] +[2026-06-04 21:19:39] Double precision check on file serial/sol_x4_y4.mtx 16/16 [OK] Welcome to PSBLAS version: 3.9.1 This is the psb_gedot_test sample program Number of processes used in this computation: 4 -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/16 [OK] -[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/16 [OK] +[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y1.mtx 1/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y2.mtx 2/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y3.mtx 3/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y4.mtx 4/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y1.mtx 5/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y2.mtx 6/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y3.mtx 7/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y4.mtx 8/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y1.mtx 9/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y2.mtx 10/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y3.mtx 11/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y4.mtx 12/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y1.mtx 13/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y2.mtx 14/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y3.mtx 15/16 [OK] -[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y4.mtx 16/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x1_y1.mtx 1/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x1_y2.mtx 2/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x1_y3.mtx 3/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x1_y4.mtx 4/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x2_y1.mtx 5/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x2_y2.mtx 6/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x2_y3.mtx 7/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x2_y4.mtx 8/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x3_y1.mtx 9/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x3_y2.mtx 10/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x3_y3.mtx 11/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x3_y4.mtx 12/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x4_y1.mtx 13/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x4_y2.mtx 14/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x4_y3.mtx 15/16 [OK] +[2026-06-04 21:19:39] Double precision check on file parallel/sol_x4_y4.mtx 16/16 [OK] diff --git a/test/computational_routines/psblas_test_results.log b/test/computational_routines/psblas_test_results.log index 15030dafd..644b6ca39 100644 --- a/test/computational_routines/psblas_test_results.log +++ b/test/computational_routines/psblas_test_results.log @@ -19638,3 +19638,35229 @@ Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 difference [DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences [DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:29:09 + +[RUN] psb_spmm +[DATE] 2026-05-29 08:33:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 12:18:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 14:53:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 15:07:42 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-30 12:38:05 +[RUN] psb_spmm +[DATE] 2026-05-30 12:40:05 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1117229 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1341885 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1411816 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1422000 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1171656 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1101118 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437048 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1424281 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1411968 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1411359 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1368648 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1085005 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1102485 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1105069 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1424117 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1105829 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1355728 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1110541 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1108413 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1103853 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1254648 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1211936 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1249328 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1337032 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1419415 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420479 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1326392 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1321984 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1198712 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1183208 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1347064 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1436287 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1427623 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1169376 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1085917 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1362264 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1118597 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1112517 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1082573 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1100965 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1099901 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1435072 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1429144 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1387952 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1098229 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1423063 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1342503 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1331712 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1085613 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1207984 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1083485 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437048 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1079077 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1412575 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1080445 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1412423 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437656 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1408928 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1080749 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437048 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1114949 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1418199 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1345239 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[RUN] psb_spmm +[DATE] 2026-05-30 13:02:08 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:16:44 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:22:26 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1272269 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1128477 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1318944 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1155990 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1143525 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1245376 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1186389 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1421240 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1437352 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1427775 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1282909 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1219221 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1130465 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1227125 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1376997 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1144133 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1406332 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1203869 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1199613 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1413792 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1363480 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1231837 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1139877 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1381264 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1364088 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1178181 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1205693 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1382923 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1343720 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1382176 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1078470 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150669 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1220296 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1375781 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1411664 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1200525 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1238981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1191557 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1200069 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1422000 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1107805 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1430208 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1202805 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1380656 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1125741 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1265744 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1246277 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1129997 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1172557 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1406647 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1122245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1084549 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1347216 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1432640 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1339768 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1131669 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437808 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1113429 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1364240 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1176053 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1359832 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1325632 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1378832 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1147944 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1352676 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1354360 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1164349 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1286720 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1079229 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1407407 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1416224 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1419719 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1417288 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1168300 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1409221 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1425344 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1091237 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1175293 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1151287 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1409839 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:29:09 + +[RUN] psb_spmm +[DATE] 2026-05-29 08:33:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 12:18:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 14:53:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 15:07:42 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-30 12:38:05 +[RUN] psb_spmm +[DATE] 2026-05-30 12:40:05 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1117229 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1341885 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1411816 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1422000 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1171656 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1101118 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437048 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1424281 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1411968 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1411359 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1368648 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1085005 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1102485 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1105069 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1424117 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1105829 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1355728 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1110541 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1108413 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1103853 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1254648 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1211936 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1249328 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1337032 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1419415 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420479 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1326392 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1321984 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1198712 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1183208 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1347064 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1436287 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1427623 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1169376 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1085917 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1362264 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1118597 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1112517 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1082573 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1100965 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1099901 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1435072 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1429144 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1387952 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1098229 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1423063 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1342503 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1331712 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1085613 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1207984 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1083485 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437048 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1079077 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1412575 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1080445 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1412423 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437656 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1408928 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1080749 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437048 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1114949 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1418199 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1345239 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[RUN] psb_spmm +[DATE] 2026-05-30 13:02:08 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:16:44 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:22:26 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1272269 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1128477 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1318944 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1155990 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1143525 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1245376 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1186389 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1421240 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1437352 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1427775 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1282909 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1219221 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1130465 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1227125 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1376997 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1144133 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1406332 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1203869 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1199613 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1413792 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1363480 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1231837 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1139877 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1381264 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1364088 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1178181 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1205693 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1382923 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1343720 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1382176 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1078470 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150669 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1220296 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1375781 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1411664 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1200525 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1238981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1191557 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1200069 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1422000 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1107805 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1430208 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1202805 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1380656 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1125741 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1265744 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1246277 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1129997 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1172557 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1406647 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1122245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1084549 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1347216 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1432640 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1339768 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1131669 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437808 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1113429 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1364240 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1176053 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1359832 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1325632 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1378832 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1147944 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1352676 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1354360 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1164349 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1286720 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1079229 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1407407 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1416224 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1419719 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1417288 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1168300 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1409221 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1425344 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1091237 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1175293 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1151287 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1409839 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 14:22:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1376704 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1115264 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1087893 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1149616 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1127412 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1091541 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1263909 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1431728 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1079229 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1166325 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1368941 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1435528 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1414247 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1131669 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1347509 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1119509 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1114797 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1166021 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1155533 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1176357 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1163437 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1414855 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420327 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1381709 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1408622 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1402239 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1311952 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1144285 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1436744 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1202056 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1365606 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1437199 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1136381 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1129237 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1135469 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1078470 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1431728 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1411360 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1169517 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1364999 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1282909 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1138661 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1084245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1093517 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1350549 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1429448 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1381404 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1331397 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1364544 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1329128 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1422608 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1114341 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1405127 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1133189 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1365760 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1339920 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1333992 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1350104 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1191557 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1360743 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1385672 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1393575 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1136533 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1373208 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1323807 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1186085 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1330040 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1174380 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1243845 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1432639 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1232760 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1429903 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1416527 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1408928 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1410143 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:29:28 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:29:48 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:29:09 + +[RUN] psb_spmm +[DATE] 2026-05-29 08:33:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 12:18:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 14:53:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 15:07:42 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-30 12:38:05 +[RUN] psb_spmm +[DATE] 2026-05-30 12:40:05 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1117229 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1341885 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1411816 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1422000 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1171656 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1101118 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437048 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1424281 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1411968 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1411359 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1368648 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1085005 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1102485 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1105069 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1424117 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1105829 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1355728 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1110541 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1108413 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1103853 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1254648 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1211936 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1249328 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1337032 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1419415 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420479 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1326392 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1321984 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1198712 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1183208 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1347064 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1436287 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1427623 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1169376 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1085917 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1362264 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1118597 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1112517 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1082573 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1100965 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1099901 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1435072 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1429144 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1387952 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1098229 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1423063 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1342503 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1331712 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1085613 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1207984 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1083485 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437048 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1079077 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1412575 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1080445 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1412423 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437656 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1408928 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1080749 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437048 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1114949 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1418199 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1345239 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[RUN] psb_spmm +[DATE] 2026-05-30 13:02:08 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:16:44 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:22:26 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1272269 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1128477 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1318944 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1155990 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1143525 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1245376 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1186389 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1421240 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1437352 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1427775 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1282909 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1219221 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1130465 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1227125 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1376997 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1144133 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1406332 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1203869 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1199613 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1413792 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1363480 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1231837 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1139877 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1381264 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1364088 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1178181 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1205693 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1382923 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1343720 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1382176 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1078470 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150669 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1220296 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1375781 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1411664 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1200525 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1238981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1191557 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1200069 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1422000 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1107805 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1430208 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1202805 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1380656 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1125741 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1265744 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1246277 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1129997 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1172557 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1406647 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1122245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1084549 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1347216 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1432640 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1339768 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1131669 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437808 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1113429 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1364240 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1176053 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1359832 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1325632 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1378832 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1147944 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1352676 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1354360 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1164349 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1286720 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1079229 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1407407 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1416224 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1419719 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1417288 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1168300 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1409221 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1425344 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1091237 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1175293 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1151287 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1409839 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 14:22:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1376704 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1115264 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1087893 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1149616 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1127412 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1091541 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1263909 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1431728 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1079229 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1166325 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1368941 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1435528 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1414247 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1131669 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1347509 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1119509 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1114797 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1166021 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1155533 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1176357 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1163437 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1414855 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420327 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1381709 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1408622 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1402239 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1311952 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1144285 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1436744 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1202056 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1365606 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1437199 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1136381 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1129237 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1135469 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1078470 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1431728 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1411360 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1169517 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1364999 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1282909 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1138661 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1084245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1093517 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1350549 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1429448 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1381404 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1331397 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1364544 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1329128 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1422608 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1114341 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1405127 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1133189 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1365760 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1339920 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1333992 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1350104 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1191557 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1360743 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1385672 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1393575 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1136533 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1373208 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1323807 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1186085 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1330040 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1174380 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1243845 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1432639 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1232760 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1429903 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1416527 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1408928 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1410143 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:22:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:29:49 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1264517 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:29:28 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:54:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:29:48 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:55:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:29:28 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:54:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:57:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:29:48 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:55:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:57:37 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:29:28 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:54:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:57:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 16:10:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:29:48 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:55:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:57:37 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 16:10:36 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:29:28 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:54:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:57:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 16:10:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 10:36:10 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 10:45:09 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:29:48 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:55:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:57:37 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 16:10:36 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 10:45:28 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:29:09 + +[RUN] psb_spmm +[DATE] 2026-05-29 08:33:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 12:18:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 14:53:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 15:07:42 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-30 12:38:05 +[RUN] psb_spmm +[DATE] 2026-05-30 12:40:05 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1117229 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1341885 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1411816 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1422000 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1171656 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1101118 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437048 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1424281 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1411968 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1411359 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1368648 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1085005 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1102485 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1105069 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1424117 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1105829 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1355728 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1110541 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1108413 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1103853 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1254648 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1211936 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1249328 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1337032 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1419415 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420479 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1326392 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1321984 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1198712 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1183208 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1347064 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1436287 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1427623 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1169376 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1085917 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1362264 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1118597 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1112517 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1082573 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1100965 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1099901 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1435072 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1429144 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1387952 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1098229 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1423063 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1342503 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1331712 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1085613 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1207984 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1083485 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437048 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1079077 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1412575 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1080445 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1412423 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437656 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1408928 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1080749 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437048 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1114949 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1418199 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1345239 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[RUN] psb_spmm +[DATE] 2026-05-30 13:02:08 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:16:44 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:22:26 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1272269 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1128477 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1318944 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1155990 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1143525 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1245376 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1186389 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1421240 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1437352 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1427775 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1282909 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1219221 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1130465 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1227125 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1376997 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1144133 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1406332 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1203869 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1199613 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1413792 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1363480 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1231837 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1139877 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1381264 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1364088 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1178181 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1205693 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1382923 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1343720 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1382176 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1078470 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150669 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1220296 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1375781 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1411664 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1200525 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1238981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1191557 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1200069 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1422000 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1107805 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1430208 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1202805 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1380656 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1125741 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1265744 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1246277 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1129997 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1172557 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1406647 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1122245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1084549 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1347216 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1432640 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1339768 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1131669 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437808 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1113429 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1364240 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1176053 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1359832 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1325632 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1378832 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1147944 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1352676 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1354360 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1164349 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1286720 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1079229 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1407407 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1416224 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1419719 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1417288 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1168300 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1409221 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1425344 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1091237 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1175293 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1151287 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1409839 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 14:22:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1376704 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1115264 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1087893 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1149616 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1127412 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1091541 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1263909 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1431728 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1079229 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1166325 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1368941 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1435528 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1414247 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1131669 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1347509 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1119509 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1114797 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1166021 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1155533 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1176357 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1163437 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1414855 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420327 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1381709 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1408622 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1402239 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1311952 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1144285 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1436744 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1202056 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1365606 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1437199 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1136381 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1129237 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1135469 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1078470 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1431728 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1411360 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1169517 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1364999 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1282909 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1138661 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1084245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1093517 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1350549 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1429448 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1381404 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1331397 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1364544 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1329128 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1422608 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1114341 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1405127 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1133189 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1365760 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1339920 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1333992 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1350104 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1191557 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1360743 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1385672 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1393575 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1136533 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1373208 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1323807 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1186085 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1330040 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1174380 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1243845 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1432639 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1232760 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1429903 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1416527 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1408928 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1410143 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:22:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:29:49 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1264517 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:55:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:57:39 + +[RUN] psb_spmm +[DATE] 2026-06-03 16:10:37 + +[RUN] psb_spmm +[DATE] 2026-06-04 10:45:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1368345 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:29:28 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:54:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:57:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 16:10:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 10:36:10 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 10:45:09 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 20:59:49 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:29:48 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:55:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:57:37 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 16:10:36 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 10:45:28 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 21:00:08 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:29:09 + +[RUN] psb_spmm +[DATE] 2026-05-29 08:33:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 12:18:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 14:53:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 15:07:42 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-30 12:38:05 +[RUN] psb_spmm +[DATE] 2026-05-30 12:40:05 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1117229 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1341885 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1411816 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1422000 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1171656 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1101118 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437048 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1424281 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1411968 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1411359 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1368648 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1085005 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1102485 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1105069 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1424117 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1105829 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1355728 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1110541 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1108413 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1103853 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1254648 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1211936 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1249328 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1337032 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1419415 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420479 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1326392 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1321984 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1198712 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1183208 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1347064 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1436287 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1427623 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1169376 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1085917 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1362264 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1118597 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1112517 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1082573 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1100965 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1099901 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1435072 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1429144 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1387952 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1098229 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1423063 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1342503 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1331712 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1085613 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1207984 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1083485 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437048 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1079077 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1412575 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1080445 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1412423 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437656 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1408928 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1080749 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437048 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1114949 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1418199 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1345239 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[RUN] psb_spmm +[DATE] 2026-05-30 13:02:08 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:16:44 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:22:26 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1272269 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1128477 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1318944 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1155990 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1143525 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1245376 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1186389 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1421240 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1437352 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1427775 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1282909 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1219221 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1130465 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1227125 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1376997 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1144133 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1406332 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1203869 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1199613 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1413792 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1363480 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1231837 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1139877 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1381264 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1364088 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1178181 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1205693 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1382923 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1343720 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1382176 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1078470 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150669 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1220296 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1375781 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1411664 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1200525 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1238981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1191557 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1200069 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1422000 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1107805 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1430208 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1202805 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1380656 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1125741 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1265744 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1246277 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1129997 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1172557 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1406647 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1122245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1084549 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1347216 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1432640 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1339768 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1131669 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437808 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1113429 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1364240 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1176053 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1359832 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1325632 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1378832 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1147944 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1352676 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1354360 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1164349 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1286720 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1079229 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1407407 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1416224 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1419719 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1417288 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1168300 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1409221 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1425344 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1091237 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1175293 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1151287 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1409839 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 14:22:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1376704 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1115264 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1087893 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1149616 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1127412 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1091541 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1263909 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1431728 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1079229 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1166325 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1368941 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1435528 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1414247 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1131669 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1347509 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1119509 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1114797 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1166021 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1155533 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1176357 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1163437 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1414855 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420327 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1381709 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1408622 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1402239 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1311952 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1144285 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1436744 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1202056 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1365606 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1437199 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1136381 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1129237 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1135469 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1078470 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1431728 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1411360 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1169517 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1364999 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1282909 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1138661 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1084245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1093517 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1350549 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1429448 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1381404 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1331397 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1364544 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1329128 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1422608 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1114341 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1405127 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1133189 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1365760 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1339920 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1333992 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1350104 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1191557 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1360743 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1385672 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1393575 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1136533 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1373208 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1323807 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1186085 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1330040 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1174380 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1243845 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1432639 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1232760 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1429903 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1416527 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1408928 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1410143 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:22:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:29:49 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1264517 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:55:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:57:39 + +[RUN] psb_spmm +[DATE] 2026-06-03 16:10:37 + +[RUN] psb_spmm +[DATE] 2026-06-04 10:45:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1368345 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-04 14:56:51 + +[RUN] psb_spmm +[DATE] 2026-06-04 15:15:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 52758 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:16:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:54:33 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:59:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:06:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:10:07 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:10:33 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 21:00:09 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:23:30 + +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:26:43 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 10:50:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 15:13:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 16:06:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: differences +[RUN] psb_geaxpby +[DATE] 2026-05-28 17:41:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-29 08:14:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:37:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 12:39:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:01:48 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-05-30 13:13:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 11:54:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:13:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:16:23 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 13:22:06 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 14:22:24 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:21:50 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:29:28 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:54:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 15:57:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-03 16:10:17 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 10:36:10 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 10:45:09 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 20:59:49 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_geaxpby +[DATE] 2026-06-04 21:19:19 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + +[RUN] psb_gedot +[DATE] 2026-05-28 10:23:37 + +[RUN] psb_gedot +[DATE] 2026-05-28 10:26:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 10:50:32 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 15:14:11 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 16:06:34 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 4 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 4 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 4 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 4 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 4 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 4 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 4 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 4 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 4 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:38:00 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: differences +[RUN] psb_gedot +[DATE] 2026-05-28 17:41:50 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-29 08:14:58 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:38:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 12:40:04 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-05-30 13:02:07 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:16:42 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 13:22:24 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 14:22:44 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:22:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:29:48 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:55:09 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 15:57:37 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-03 16:10:36 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 10:45:28 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 21:00:08 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences +[RUN] psb_gedot +[DATE] 2026-06-04 21:19:38 + +[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences +[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences +[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences +[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences +[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences +[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences +[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences +[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences +[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences +[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences +[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences +[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences +[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences +[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences +[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences +[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences + +[RUN] psb_spmm +[DATE] 2026-05-28 10:23:38 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:27:00 + +[RUN] psb_spmm +[DATE] 2026-05-28 10:50:33 + +[RUN] psb_spmm +[DATE] 2026-05-28 15:14:13 + +[RUN] psb_spmm +[DATE] 2026-05-28 16:06:35 + +[RUN] psb_spmm +[DATE] 2026-05-28 17:38:01 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: differences +[RUN] psb_spmm +[DATE] 2026-05-28 17:41:51 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:15:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 08:29:09 + +[RUN] psb_spmm +[DATE] 2026-05-29 08:33:00 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 12:18:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 14:53:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-29 15:07:42 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[RUN] psb_spmm +[DATE] 2026-05-30 12:38:05 +[RUN] psb_spmm +[DATE] 2026-05-30 12:40:05 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1117229 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1341885 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1411816 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1422000 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1171656 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1101118 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437048 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1424281 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1411968 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1411359 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1368648 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1085005 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1102485 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1105069 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1424117 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1105829 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1355728 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1110541 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1108413 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1103853 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1254648 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1211936 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1249328 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1337032 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1419415 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420479 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1326392 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1321984 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1198712 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1183208 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1347064 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1436287 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1427623 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1169376 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1085917 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1362264 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1118597 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1112517 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1082573 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1100965 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1099901 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1435072 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1429144 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1387952 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1098229 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1423063 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1342503 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1331712 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1085613 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1207984 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1083485 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437048 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1079077 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1412575 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1080445 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1412423 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437656 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1408928 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1080749 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437048 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1114949 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1418199 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1345239 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[RUN] psb_spmm +[DATE] 2026-05-30 13:02:08 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:16:44 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:22:26 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1272269 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1128477 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1318944 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1155990 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1143525 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1245376 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1186389 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1421240 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1437352 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1427775 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1282909 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1219221 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1130465 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1227125 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1376997 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1144133 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1406332 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1203869 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1199613 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1413792 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1363480 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1231837 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1139877 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1381264 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1364088 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1178181 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1205693 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1382923 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1343720 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1382176 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1078470 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150669 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1220296 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1375781 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1411664 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1200525 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1238981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1191557 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1200069 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1422000 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1107805 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1430208 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1202805 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1380656 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1125741 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1265744 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1246277 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1129997 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1172557 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1406647 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1122245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1084549 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1347216 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1432640 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1339768 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1131669 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437808 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1113429 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1364240 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1176053 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1359832 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1325632 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1378832 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1147944 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1352676 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1354360 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1164349 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1286720 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1079229 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1407407 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1416224 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1419719 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1417288 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1168300 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1409221 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1425344 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1091237 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1175293 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1151287 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1409839 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 14:22:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1376704 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1115264 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1087893 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1149616 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1127412 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1091541 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1263909 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1431728 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1079229 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1166325 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1368941 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1435528 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1414247 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1131669 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1347509 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1119509 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1114797 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1166021 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1155533 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1176357 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1163437 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1414855 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420327 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1381709 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1408622 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1402239 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1311952 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1144285 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1436744 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1202056 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1365606 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1437199 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1136381 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1129237 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1135469 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1078470 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1431728 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1411360 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1169517 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1364999 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1282909 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1138661 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1084245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1093517 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1350549 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1429448 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1381404 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1331397 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1364544 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1329128 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1422608 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1114341 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1405127 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1133189 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1365760 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1339920 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1333992 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1350104 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1191557 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1360743 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1385672 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1393575 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1136533 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1373208 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1323807 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1186085 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1330040 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1174380 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1243845 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1432639 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1232760 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1429903 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1416527 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1408928 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1410143 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:22:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:29:49 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1264517 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:55:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:57:39 + +[RUN] psb_spmm +[DATE] 2026-06-03 16:10:37 + +[RUN] psb_spmm +[DATE] 2026-06-04 10:45:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1368345 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-04 14:56:51 + +[RUN] psb_spmm +[DATE] 2026-06-04 15:15:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 52758 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:16:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:54:33 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:59:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:06:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:10:07 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:10:33 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 21:00:09 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 21:19:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences + diff --git a/test/computational_routines/spmm/autotest.sh b/test/computational_routines/spmm/autotest.sh index 6323a238a..15b219482 100755 --- a/test/computational_routines/spmm/autotest.sh +++ b/test/computational_routines/spmm/autotest.sh @@ -35,7 +35,20 @@ echo "" >> "${log_file_name}" run_mpi 1 ./runs/psb_spmm_test "single process computation" run_mpi "$num_procs" ./runs/psb_spmm_test "${num_procs} processes computation" -# Compare serial and parallel outputs if present -compare_dirs "serial" "parallel" "${log_file_name}" +# Compare serial and parallel outputs if present. +# spmm results are single precision and the distributed sparse mat-vec sums the +# row contributions in a different order than the serial run, so the outputs only +# agree to single-precision roundoff. The proper bound is the finite-precision +# error gamma_n = n*u/(1-n*u): EPS_MODE=gamma_n computes it (u = single-precision +# unit roundoff 1.19e-7), COMPARE=relative applies it as |fl-exact| <= gamma_n*|value| +# (an absolute tolerance is unsatisfiable for values of magnitude ~1e2). +# N=1000 generously bounds the per-row accumulation length (max 11 nnz/row, ~22 +# for symmetric storage) to absorb cancellation in y=alpha*A*x+beta*y and the +# scatter/gather roundoff, while staying tight enough to catch real errors +# (observed max relative diff ~1.9e-5, ~6x below this gamma_n ~1.2e-4). +PSBLAS_TEST_EPS_MODE=gamma_n PSBLAS_TEST_N=1000 PSBLAS_TEST_UNIT_ROUNDOFF=1.19e-7 PSBLAS_TEST_COMPARE=relative \ + compare_dirs "serial" "parallel" "${log_file_name}" +compare_status=$? info "PSBLAS psb_spmm test completed." +exit $compare_status diff --git a/test/computational_routines/spmm/logs/psblas_spmm_test.log b/test/computational_routines/spmm/logs/psblas_spmm_test.log index f099e51d0..af82d3b09 100644 --- a/test/computational_routines/spmm/logs/psblas_spmm_test.log +++ b/test/computational_routines/spmm/logs/psblas_spmm_test.log @@ -168,3 +168,1506 @@ [RUN] psb_spmm [DATE] 2026-05-30 13:02:08 +[RUN] psb_spmm +[DATE] 2026-06-03 13:16:44 + +[RUN] psb_spmm +[DATE] 2026-06-03 13:22:26 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1272269 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1128477 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1318944 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1155990 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1143525 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1245376 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1186389 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1421240 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1437352 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1427775 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1282909 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1219221 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1130465 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1227125 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1376997 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1144133 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1406332 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1203869 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1199613 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1413792 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1363480 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1231837 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1139877 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1381264 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1364088 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1178181 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1205693 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1382923 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1343720 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1382176 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1078470 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150669 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1220296 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1375781 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1411664 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1200525 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1238981 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1191557 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1200069 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1422000 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1107805 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1430208 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1202805 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1380656 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1125741 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1265744 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1246277 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1129997 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1172557 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1406647 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1122245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1084549 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1347216 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1432640 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1339768 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1131669 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1437808 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1113429 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1364240 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1176053 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1359832 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1325632 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1378832 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1147944 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1352676 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1354360 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1164349 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1286720 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1079229 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1407407 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1416224 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1419719 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1417288 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1168300 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1409221 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1425344 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1091237 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1175293 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1151287 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1409839 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 14:22:45 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1376704 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1115264 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1087893 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1149616 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1127412 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1091541 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1263909 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1431728 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1079229 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1166325 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1368941 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1435528 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1414247 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1131669 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1347509 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1119509 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1114797 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1166021 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1155533 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1176357 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1163437 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1414855 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1420327 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1381709 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1408622 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1402239 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1311952 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1144285 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1436744 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1202056 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1365606 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1437199 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1136381 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1129237 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1135469 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1078470 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1431728 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1411360 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1169517 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1364999 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1282909 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1138661 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1084245 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1093517 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1350549 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1429448 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1381404 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1331397 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1364544 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1329128 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1422608 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1114341 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1405127 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1133189 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1365760 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1339920 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1333992 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1350104 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1191557 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1360743 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1385672 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1393575 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1136533 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1373208 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1323807 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1186085 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1330040 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1174380 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1243845 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1432639 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1232760 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1429903 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1416527 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1408928 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1410143 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:22:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:29:49 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1264517 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-03 15:55:11 + +[RUN] psb_spmm +[DATE] 2026-06-03 15:57:39 + +[RUN] psb_spmm +[DATE] 2026-06-03 16:10:37 + +[RUN] psb_spmm +[DATE] 2026-06-04 10:45:29 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 1368345 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 1427168 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 1169224 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 1172264 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 1175901 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 1301007 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 1255245 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 1161928 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 1087437 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 1309509 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 1298107 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 1232304 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 1148552 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 1136533 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 1162840 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 1158432 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 1336880 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 1098989 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 1350712 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 1151288 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 1078470 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 1148096 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 1099141 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 1241728 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 1289760 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 1149768 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 1079685 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 1260576 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 1423824 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 1150528 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 1234584 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 1289000 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 1139573 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 1096558 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 1205096 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 1088957 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 1097469 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 1193240 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 1231229 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 1129845 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 1111910 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 1245984 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 1089413 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 1089565 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 1150365 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 1138205 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 1197192 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 1130301 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 1314688 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 1353600 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 1437959 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 1181840 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 1143536 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 1312700 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 1437958 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 1235040 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 1181536 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 1088349 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 1156304 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 1172112 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 1141256 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 1234279 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 1320149 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 1194456 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 1105981 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 1136685 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 1437960 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 1427624 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 1258751 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 1079989 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 1079837 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 1131516 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 1393879 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 1437959 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 1089413 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 1318792 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 1300400 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 1385064 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 1436744 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 1336119 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 1298119 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 1313168 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 1273647 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 1031715 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 1031715 differences +[RUN] psb_spmm +[DATE] 2026-06-04 14:56:51 + +[RUN] psb_spmm +[DATE] 2026-06-04 15:15:57 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 52758 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 52758 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:16:31 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:54:33 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[RUN] psb_spmm +[DATE] 2026-06-04 15:59:37 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:06:14 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 67 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 49 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 50 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:10:07 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 67 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 68 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 69 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 16:10:33 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 21:00:09 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 73 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 75 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 74 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 37 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences +[RUN] psb_spmm +[DATE] 2026-06-04 21:19:39 + +[DIFF] serial/sol_x1_y1_a1_b1.mtx vs parallel/sol_x1_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b2.mtx vs parallel/sol_x1_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a1_b3.mtx vs parallel/sol_x1_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b1.mtx vs parallel/sol_x1_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b2.mtx vs parallel/sol_x1_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a2_b3.mtx vs parallel/sol_x1_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b1.mtx vs parallel/sol_x1_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b2.mtx vs parallel/sol_x1_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y1_a3_b3.mtx vs parallel/sol_x1_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b1.mtx vs parallel/sol_x1_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b2.mtx vs parallel/sol_x1_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a1_b3.mtx vs parallel/sol_x1_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b1.mtx vs parallel/sol_x1_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b2.mtx vs parallel/sol_x1_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a2_b3.mtx vs parallel/sol_x1_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b1.mtx vs parallel/sol_x1_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b2.mtx vs parallel/sol_x1_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y2_a3_b3.mtx vs parallel/sol_x1_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b1.mtx vs parallel/sol_x1_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b2.mtx vs parallel/sol_x1_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a1_b3.mtx vs parallel/sol_x1_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b1.mtx vs parallel/sol_x1_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b2.mtx vs parallel/sol_x1_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a2_b3.mtx vs parallel/sol_x1_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b1.mtx vs parallel/sol_x1_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b2.mtx vs parallel/sol_x1_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y3_a3_b3.mtx vs parallel/sol_x1_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b1.mtx vs parallel/sol_x1_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b2.mtx vs parallel/sol_x1_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a1_b3.mtx vs parallel/sol_x1_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b1.mtx vs parallel/sol_x1_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b2.mtx vs parallel/sol_x1_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a2_b3.mtx vs parallel/sol_x1_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b1.mtx vs parallel/sol_x1_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b2.mtx vs parallel/sol_x1_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x1_y4_a3_b3.mtx vs parallel/sol_x1_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b1.mtx vs parallel/sol_x2_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b2.mtx vs parallel/sol_x2_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a1_b3.mtx vs parallel/sol_x2_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b1.mtx vs parallel/sol_x2_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b2.mtx vs parallel/sol_x2_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a2_b3.mtx vs parallel/sol_x2_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b1.mtx vs parallel/sol_x2_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b2.mtx vs parallel/sol_x2_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y1_a3_b3.mtx vs parallel/sol_x2_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b1.mtx vs parallel/sol_x2_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b2.mtx vs parallel/sol_x2_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a1_b3.mtx vs parallel/sol_x2_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b1.mtx vs parallel/sol_x2_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b2.mtx vs parallel/sol_x2_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a2_b3.mtx vs parallel/sol_x2_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b1.mtx vs parallel/sol_x2_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b2.mtx vs parallel/sol_x2_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y2_a3_b3.mtx vs parallel/sol_x2_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b1.mtx vs parallel/sol_x2_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b2.mtx vs parallel/sol_x2_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a1_b3.mtx vs parallel/sol_x2_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b1.mtx vs parallel/sol_x2_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b2.mtx vs parallel/sol_x2_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a2_b3.mtx vs parallel/sol_x2_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b1.mtx vs parallel/sol_x2_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b2.mtx vs parallel/sol_x2_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y3_a3_b3.mtx vs parallel/sol_x2_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b1.mtx vs parallel/sol_x2_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b2.mtx vs parallel/sol_x2_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a1_b3.mtx vs parallel/sol_x2_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b1.mtx vs parallel/sol_x2_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b2.mtx vs parallel/sol_x2_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a2_b3.mtx vs parallel/sol_x2_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b1.mtx vs parallel/sol_x2_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b2.mtx vs parallel/sol_x2_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x2_y4_a3_b3.mtx vs parallel/sol_x2_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b1.mtx vs parallel/sol_x3_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b2.mtx vs parallel/sol_x3_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a1_b3.mtx vs parallel/sol_x3_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b1.mtx vs parallel/sol_x3_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b2.mtx vs parallel/sol_x3_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a2_b3.mtx vs parallel/sol_x3_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b1.mtx vs parallel/sol_x3_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b2.mtx vs parallel/sol_x3_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y1_a3_b3.mtx vs parallel/sol_x3_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b1.mtx vs parallel/sol_x3_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b2.mtx vs parallel/sol_x3_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a1_b3.mtx vs parallel/sol_x3_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b1.mtx vs parallel/sol_x3_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b2.mtx vs parallel/sol_x3_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a2_b3.mtx vs parallel/sol_x3_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b1.mtx vs parallel/sol_x3_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b2.mtx vs parallel/sol_x3_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y2_a3_b3.mtx vs parallel/sol_x3_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b1.mtx vs parallel/sol_x3_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b2.mtx vs parallel/sol_x3_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a1_b3.mtx vs parallel/sol_x3_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b1.mtx vs parallel/sol_x3_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b2.mtx vs parallel/sol_x3_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a2_b3.mtx vs parallel/sol_x3_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b1.mtx vs parallel/sol_x3_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b2.mtx vs parallel/sol_x3_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y3_a3_b3.mtx vs parallel/sol_x3_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b1.mtx vs parallel/sol_x3_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b2.mtx vs parallel/sol_x3_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a1_b3.mtx vs parallel/sol_x3_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b1.mtx vs parallel/sol_x3_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b2.mtx vs parallel/sol_x3_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a2_b3.mtx vs parallel/sol_x3_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b1.mtx vs parallel/sol_x3_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b2.mtx vs parallel/sol_x3_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x3_y4_a3_b3.mtx vs parallel/sol_x3_y4_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b1.mtx vs parallel/sol_x4_y1_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b2.mtx vs parallel/sol_x4_y1_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a1_b3.mtx vs parallel/sol_x4_y1_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b1.mtx vs parallel/sol_x4_y1_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b2.mtx vs parallel/sol_x4_y1_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a2_b3.mtx vs parallel/sol_x4_y1_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b1.mtx vs parallel/sol_x4_y1_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b2.mtx vs parallel/sol_x4_y1_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y1_a3_b3.mtx vs parallel/sol_x4_y1_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b1.mtx vs parallel/sol_x4_y2_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b2.mtx vs parallel/sol_x4_y2_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a1_b3.mtx vs parallel/sol_x4_y2_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b1.mtx vs parallel/sol_x4_y2_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b2.mtx vs parallel/sol_x4_y2_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a2_b3.mtx vs parallel/sol_x4_y2_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b1.mtx vs parallel/sol_x4_y2_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b2.mtx vs parallel/sol_x4_y2_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y2_a3_b3.mtx vs parallel/sol_x4_y2_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b1.mtx vs parallel/sol_x4_y3_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b2.mtx vs parallel/sol_x4_y3_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a1_b3.mtx vs parallel/sol_x4_y3_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b1.mtx vs parallel/sol_x4_y3_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b2.mtx vs parallel/sol_x4_y3_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a2_b3.mtx vs parallel/sol_x4_y3_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b1.mtx vs parallel/sol_x4_y3_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b2.mtx vs parallel/sol_x4_y3_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y3_a3_b3.mtx vs parallel/sol_x4_y3_a3_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b1.mtx vs parallel/sol_x4_y4_a1_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b2.mtx vs parallel/sol_x4_y4_a1_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a1_b3.mtx vs parallel/sol_x4_y4_a1_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b1.mtx vs parallel/sol_x4_y4_a2_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b2.mtx vs parallel/sol_x4_y4_a2_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a2_b3.mtx vs parallel/sol_x4_y4_a2_b3.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b1.mtx vs parallel/sol_x4_y4_a3_b1.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b2.mtx vs parallel/sol_x4_y4_a3_b2.mtx: 0 differences +[DIFF] serial/sol_x4_y4_a3_b3.mtx vs parallel/sol_x4_y4_a3_b3.mtx: 0 differences diff --git a/test/computational_routines/spmm/psb_spmm_test.f90 b/test/computational_routines/spmm/psb_spmm_test.f90 index 69fde36a7..6702f4571 100644 --- a/test/computational_routines/spmm/psb_spmm_test.f90 +++ b/test/computational_routines/spmm/psb_spmm_test.f90 @@ -13,24 +13,24 @@ module psb_spmm_test implicit none ! input parameters - character(len = *), intent(in) :: x_file, y_file - real(psb_spk_), intent(in) :: alpha, beta - type(psb_sspmat_type), intent(inout) :: a - type(psb_desc_type), intent(inout) :: desc_a - integer(psb_ipk_), intent(in) :: rows, cols + character(len = *), intent(in) :: x_file, y_file + real(psb_spk_), intent(in) :: alpha, beta + type(psb_sspmat_type), intent(inout) :: a + type(psb_desc_type), intent(inout) :: desc_a + integer(psb_ipk_), intent(in) :: rows, cols - character(len=:), allocatable :: output_file_name + character(len=:), allocatable :: output_file_name ! vectors - type(psb_s_vect_type) :: x, y + type(psb_s_vect_type) :: x, y ! communication context - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_) :: my_rank, np, info, err_act + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_) :: my_rank, np, info, err_act ! variables outside PSLBALS data structures - real(psb_spk_), allocatable :: x_global(:), y_global(:) - logical :: exists + real(psb_spk_), allocatable :: x_global(:), y_global(:) + logical :: exists info = psb_success_ @@ -42,9 +42,9 @@ module psb_spmm_test endif ! Prepare input buffers on all ranks; root reads from disk - allocate(x_global(cols)) - allocate(y_global(rows)) if(my_rank == psb_root_) then + allocate(x_global(cols)) + allocate(y_global(rows)) call mm_array_read(x_global,info,filename=x_file) call mm_array_read(y_global,info,filename=y_file) end if @@ -119,8 +119,16 @@ module psb_spmm_test output_file_name = output_file_name // "_b3.mtx" end if - ! Save result to output file - call mm_array_write(y,"Result vector",info,filename=output_file_name) + ! Gather result on root and save to output file + call psb_gather(y_global,y,desc_a,info,root=psb_root_) + if(info /= psb_success_) then + write(psb_out_unit,*) "Error in psb_gather to collect y result" + goto 9999 + end if + + if (my_rank == psb_root_) then + call mm_array_write(y_global,"Result vector",info,filename=output_file_name) + end if ! Deallocate call psb_gefree(x, desc_a,info) @@ -135,8 +143,10 @@ module psb_spmm_test goto 9999 end if - deallocate(x_global) - deallocate(y_global) + if(my_rank == 0) then + deallocate(x_global) + deallocate(y_global) + end if return @@ -161,7 +171,8 @@ module psb_spmm_test integer(psb_ipk_), intent(in) :: rows, cols real(psb_spk_), allocatable :: x(:), y(:) - integer(psb_ipk_) :: i, info + integer(psb_ipk_) :: i, info, nseed + integer, allocatable :: seed(:) logical :: exists inquire(file='vectors/', exist=exists) @@ -172,7 +183,10 @@ module psb_spmm_test allocate(x(cols)) allocate(y(rows)) - call random_init(repeatable=.true.,image_distinct=.true.) + call random_seed(size=nseed) + allocate(seed(nseed)) + seed = 12345 + call random_seed(put=seed) call random_number(x) call random_number(y) @@ -220,6 +234,7 @@ module psb_spmm_test call mm_array_write(x,"Null vector",info,filename="vectors/x4.mtx") call mm_array_write(y,"Null vector",info,filename="vectors/y4.mtx") + deallocate(seed) deallocate(x) deallocate(y) @@ -247,7 +262,10 @@ module psb_spmm_test ! Skip comment lines (starting with %) do read(unit, '(A)', iostat=ret) line - if (ret /= 0) exit + if (ret /= 0) then + print *, 'Error reading file or end of file reached without finding header.' + stop + end if if (line(1:1) /= '%') then read(line, *) rows, cols, nnz found = .true. diff --git a/test/computational_routines/spmm/spmm.f90 b/test/computational_routines/spmm/spmm.f90 index 444a38935..4b0423c73 100644 --- a/test/computational_routines/spmm/spmm.f90 +++ b/test/computational_routines/spmm/spmm.f90 @@ -23,11 +23,11 @@ program main integer(psb_ipk_) :: tests_number, count, last_percent ! sparse matrices - type(psb_sspmat_type) :: a - type(psb_lsspmat_type) :: aux_a + type(psb_sspmat_type) :: a + type(psb_lsspmat_type) :: aux_a ! matrix descriptor data structure - type(psb_desc_type) :: desc_a + type(psb_desc_type) :: desc_a ! Communicator variable type(psb_ctxt_type) :: ctxt @@ -60,10 +60,6 @@ program main matrix_file = "matrix/1138_bus.mtx" inquire(file=matrix_file, exist=matrix_exists) - if (.not.matrix_exists) then - matrix_file = "../../comm/spmv/Geo_1438.mtx" - inquire(file=matrix_file, exist=matrix_exists) - end if if (.not.matrix_exists) then if (my_rank == psb_root_) then write(psb_out_unit,*) 'Matrix file not found. Expected matrix/1138_bus.mtx' @@ -80,6 +76,9 @@ program main call generate_vectors(rows,cols) end if + call psb_bcast(ctxt,rows) + call psb_bcast(ctxt,cols) + call psb_barrier(ctxt) !! Read and distribute matrix once @@ -98,7 +97,7 @@ program main call psb_abort(ctxt) end if - !! 1138_bus matrix (sparse) - reuse distributed matrix across all parameter combinations + !! bcsstk29 matrix (sparse) - reuse distributed matrix across all parameter combinations do i=1,size(x) do j=1,size(y) do k=1,size(alpha) @@ -125,11 +124,13 @@ program main contains subroutine print_progress(current, total, last_percent, label) + use iso_fortran_env, only: error_unit implicit none integer(psb_ipk_), intent(in) :: current, total integer(psb_ipk_), intent(inout) :: last_percent character(len=*), intent(in) :: label integer(psb_ipk_) :: percent, filled, width, i + character(len=160) :: line if (total <= 0) return percent = int(real(current) / real(total) * 100.0) @@ -139,17 +140,29 @@ contains width = 30 filled = int(real(percent) / 100.0 * width) - write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": [" + line = "[INFO] Progress " // trim(label) // ": [" do i = 1, filled - write(*,'(A)',advance='no') "#" + line = trim(line) // "#" end do do i = filled + 1, width - write(*,'(A)',advance='no') "-" + line = trim(line) // "-" end do - write(*,'(A,I3,A,I0,A,I0,A)',advance='no') "] ", percent, "% (", current, "/", total, ")" - write(*,'(A)',advance='no') char(13) - call flush(6) - if (percent == 100) write(*,'(A)') "" + line = trim(line) // "] " + write(line(len_trim(line)+1:), '(I3)') percent + line = trim(line) // "% (" // trim(adjustl(itoa(current))) // "/" // trim(adjustl(itoa(total))) // ")" + if (percent < 100) then + write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) // char(27) // "[1A" + else + write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) + end if + call flush(error_unit) end subroutine print_progress + pure function itoa(i) result(str) + implicit none + integer(psb_ipk_), intent(in) :: i + character(len=32) :: str + write(str,'(I0)') i + end function itoa + end program main \ No newline at end of file diff --git a/test/computational_routines/spmm/spmm_checker b/test/computational_routines/spmm/spmm_checker deleted file mode 100755 index 24bb929bc950f5a3c2d5423274196a2d1b3f20c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17200 zcmeHOeQX@X6`woj!vqpv3;{!0vJ@L7DZcoe#IYR+>o{kxQ9{yuR}E~=cYF4>=ey%> z4R#tJG(ctCs77ijrLB~z6-5*(s|6_nH8>w4NyQ&YE77z?t&2kCD14X{s!)Yo-7ylJEz+>@Ap1t=I!k6%)|bEM^K- zC}N(N2FMint5Sm0&M`e1v;|BnNv{GZ+SOo2QniSFL2^Pc zts}cpMY<8A6i=p0Y*;Ym^1cFgGM*&=G{UEOJ(XAPJP3|I(EvGKlrp=UmMlso>QiRA zf1rM#xv9QsNjRSgH%bkx7nXs2s`IW*BDhP8Ax2@8=i(aTQU0gSrw;t`TR;EV*WQ1B z@afwU3-7Oed<*-)GEoN;+H;kV$NWtAqmFF9T|udWc+1&gzC?h#G|dL6`chat1ej6+ zNB5=lBW3W~GI(HT#eALg-(X&WcaVDsyUsMBdsT?96aV59 zPeS(#3QI;wi19mAnZrJbeTLJ73wQV9Nf++K7>v%j@T=GfP(B}cePKW6R72+pZ}WVu zp-ge%cwKRt@51H%p9BpqTwYg%H@k3plt_u{!XZ#j(p>lq2NhzS3%}BZ`&mB%egymo z_!00U;77oZz~>!-e^%Z2Z*BKGmD=#szb_I(dvweS7LIGX4_6+NRVyrg3*bWCDL7Wm zQz3_ZFUn4j7a-OB8F?H6o<1)5-ybA8H*g#jvV>88mc$vN>KkW z8Lpc52$%?g`iCyEBif$ZP0-NxOzlR}a?Y9qP5&#*wz26~6vnIO?LxalL_xnr>Mw0X zvfzR?G^rhU?+)$2xe6`tns(xXbqzRpfgDs8#*CwR3T^1f#IXy7f;JSL z1aQm&U$nsqZTAC{!kP|bLiAtrYBktQJPWc{@eED;3bpoZIt8Ya`){%R?Zf6y)Y_79 zkW3UyW`JaP)2ZR;c*{X+!SI@KV4%e}Lj(3VxLw@j6w?X0BhmBd_>2YRos{Kma4Wy~ ziLA+SSzeLkX^@<)3Pn%CVa@SmRrtV;X?V15K@xQD&Q1rLnmJTE*R{`=@FD` zhxy&}=+Sn3Q5|Cs>OZ+eeLt%2`My8}cKZf4;xAY_#`hRprr2lXHSAoqDDjgY0Y3tM z1pEm25%446N5GGO9|1oCegujm5GeZEC`3*~@q?9u-?YqhkCHS~Mqbn<*h)%oRT5@0 zY2?y|B^8vsxx>gSwTWBdFX~cB(UndZ14><@RjCU%rjp7{x7(Q+VpBfWV*s32Zp*@_ zG&7dcv5a)A&sZ@-)aCWOkpnPn4Oqy5PAru&Y#u5Rm|L+NzYXIHgY5f-!T?rmvQStD zqyZ>a^dCU?0_{3mD2xHcgx_K@1$L|#fq_t9?p4z(M_^`#-@ot!>a*bM7F1X@J%m^T z{0{@h-;8Qe1pmqRVD<=9%nEhPs=2f3%KIyKi92pszHo8vmk>r@Dfq8|I>d2$*fuNl zSg?KOw2FHIP^6T92jGW4C=`wXb>zXrDE5;d0Y3tM1pEm25%446N5GGO9|1oCegyt+ z5g3`RO5fXw;*m>?@6*fPYc%I7Kz&y!ueuRnTA6+P9 zkl$OOBC*$K1Fe~=B5SXC1$va^yvFXZlnTLX>uQLfLzIcLMo?8H6ePhIQJxp_TEFWE zADyPk9OKQzbG_xf6Et`&AeRqc>STM)QT^ddpyWBOFfEk)nX$7LZJS${WFw7DOU3%lt-1cRd|A;Gk9$iJD>t{s(&aMnro@ zYx89kJ65;WM=m4pYy%(by3kv+wLzF0;80WtGi_Q>pe%;+wohV;lwmcpWyb4sMk*6$ zBM)X9dqDg8!}lEcb-J^yHn2DrarS(?LFW+rx>x6Ik})l%!+R>Oy^J5ef4oljky3sp z$^J>YHyxymX4+>s6)(_WV@1*;gLJHMDOX+_R z@SvC_I2NQ1J8x`Uq1Z6qNI2im8P^~afOYP@bRXpV5#Hwm@OG?{?$50MO~_!m{Cr^i z+fx5(=YG%lGmt4&|8nhmN&2Z4BR8q+!l9-7z%mD@=N#d^U%f7^W;^>x*va3dKHSZz zy^MbZ8LX2xRYO1&F9`e|iPwm&9zS8gt06wzH|4uN(7#RMmpa-Ecu3TUZ5}^&m(kB6 z9;_04ov_CrmeIej3_c7vmg}wmQ)Tp@2VCL8T=W&dX9q)~Qc+zfJeLv2y9D7=Ncu;> zL(t!{p7y>8cy(}=7!TQg`2Fe=h(kPi-jYe3#zkZ3CkUe@Y8Q)o&`+uTCGngU31?t42RvnTE7l_b z$Xore94sy_Zv4=#J{>leq~RUBt|u~jPb$+5Z_E=`CYRS^{R1MN>C2`J%SeP9N^8K| z^|YzSa=F-`ZltZ;ph)K6UAvy>@9P@`6BnoBBc@0-pY4P4dyV)vj2zTU*E`m?t%>T< zyH@G2@nqFk?`m7q)ebN`CVIV4ctK_>>Wh- zm8GaCd%I8(gjdlyoXxd`V6`>a?uP%CHCUe3XOCL@;> zVL9sQN%x1dIjCaJ8gxP3{U+>+GZO^0t?a7D?i)t+-dMg@gcE~lD8i;z&X(L~aV>Cuw~A+usg18!Fg~T>oem} zY6g74AuJ29ox#ZvVdzrgP{$8@@@^Jw$CU5;?fZ?2v?Rj2!lJYEtr0&=;|ANP!$5)48 zNQ;TzZ`jKr##dPMCPyk1Nz6dG(oRisR}k__ICF8!G=x`!isReTVINJkR^x zd0#vBe@t91pZ^a5!}ha1??WA5gxZ2ngU!H^?U{ZInA_f&A2iq|TOCU~!*)!AVC=T% zarIWR_nt4*b*D-I&==Q#yQ)g@HnQh-vW>zSqBE&{Qg@_mzs*7H442RJTF7A8Ui*Cn ztYAg*!z|M}$nd#AmF#v^YMzToB37}Y&0g~SK(TY}kPZ@cvCTA70B-~q=V=^wzJFf< h7{|`Gu#W@FY`Vka+*2JGi -#include -#include - -void compare_files(const char *file1, const char *file2) { - FILE *file_s = fopen(file1, "r"); - FILE *file_p = fopen(file2, "r"); - - if (!file_s || !file_p) { - perror("Error opening files"); - exit(EXIT_FAILURE); - } - - int n_s, n_p; - fscanf(file_s, "%d", &n_s); - fscanf(file_p, "%d", &n_p); // Assuming both files have the same number of lines - - if (n_s != n_p) { - fprintf(stderr, "Error, differnet file sizes $d, $d", n_s, n_p); - exit(EXIT_FAILURE); - } - - double value_s, value_p; - - - for (int i = 0; i < n_s; i++) { - fscanf(file_s, "%lf", &value_s); - fscanf(file_p, "%lf", &value_p); - - if (value_s != value_p) { - printf("Index %d: %.2lf != %.2lf\n", i, value_s, value_p); - } - } - - fclose(file_s); - fclose(file_p); -} - -int main(int argc, char *argv[]) { - if (argc != 2) { - fprintf(stderr, "Usage: %s \n", argv[0]); - return EXIT_FAILURE; - } - - char file_s[256], file_p[256]; - snprintf(file_s, sizeof(file_s), "%s_serial.txt", argv[1]); - snprintf(file_p, sizeof(file_p), "%s_parallel.txt", argv[1]); - - compare_files(file_s, file_p); - - return EXIT_SUCCESS; -} diff --git a/test/computational_routines/test.sh b/test/computational_routines/test.sh index dd572c52b..e9ba2758e 100755 --- a/test/computational_routines/test.sh +++ b/test/computational_routines/test.sh @@ -6,6 +6,7 @@ separator=$(printf "%0.s=" $(seq 1 $terminal_width)) # Generate separator of cor flag=0 log_file_name="psblas_test_results.log" base_dir=$(pwd) +failed_tests="" # Define color codes GREEN="\033[0;32m" @@ -92,10 +93,12 @@ for dir in "$base_dir"/*/; do ( # excecute script in a subshell, otherwise the dir search will stop cd "$dir" + autotest_status=0 # Check if autotest.sh exists before executing it if [ -f autotest.sh ]; then chmod +x autotest.sh - ./autotest.sh + ./autotest.sh + autotest_status=$? else echo -e "${YELLOW}[WARNING] autotest.sh not found in $(pwd). Skipping $(basename "$dir") kernel${RESET}" fi @@ -113,7 +116,13 @@ for dir in "$base_dir"/*/; do else echo -e "${YELLOW}[WARNING] No .log files found in $(pwd). Skipping log append.${RESET}" fi + + # Propagate the kernel's pass/fail status to the parent shell + exit $autotest_status ) + if [ $? -ne 0 ]; then + failed_tests="${failed_tests}${base_name} " + fi # Return to the parent directory echo -e "${BLUE}[INFO]\t Leaving directory: $(pwd)/$(basename "$dir")${RESET}" @@ -124,4 +133,10 @@ done echo -e "${BLUE}[INFO]\t Finished processing all subdirectories.${RESET}" -echo -e "${GREEN}[INFO]\t All tests completed successfully. Results are logged in ${log_file_name}.${RESET}" \ No newline at end of file +if [ -z "$failed_tests" ]; then + echo -e "${GREEN}[INFO]\t All tests completed successfully. Results are logged in ${log_file_name}.${RESET}" + exit 0 +else + echo -e "${RED}[FAIL]\t Some tests failed: ${failed_tests%% }. Results are logged in ${log_file_name}.${RESET}" + exit 1 +fi \ No newline at end of file